feat: Handle when user hasn't have enough balance to mint

Thank you for your contribution to the KodaDot NFT gallery.
👇 _ Let's make a quick check before the contribution.
PR type

[ ] Bugfix
[x] Feature
[ ] Refactoring

What's new?

[x] PR closes #3528
[ ] Requires deployment <rubick/magick_issue>
[ ] <brief_description_of_what_I've_added>

Before submitting Pull Request, please make sure:

[x] My contribution builds clean without any errors or warnings
[x] I've merged recent default branch -- main and I've no conflicts
[x] I've tried to respect high code quality standards
[x] I've didn't break any original functionality
[x] I've posted a screenshot of demonstrated change in this PR

Optional

[x] I've tested it at </bsx/create>
[ ] I've tested PR on mobile and everything seems works
[ ] I found edge cases
[ ] I've written some unit tests 🧪

Had issue bounty label?

[x] Fill up your KSM address: Payout

Community participation

[ ] Are you at KodaDot Discord?

Screenshot

[x] My fix has changed something on UI; a screenshot is best to understand changes for others.

The screenshots below are different in tooltips.

Collection

no enter name:

no enough balance:

everything ok:

NFT

no enter name:
the same as collection
no enough balance:
the same as collection
no upload file:

no valid price:

everything ok:
the same as collection

Handle when user hasn't have enough balance to mint  #3528

There are some UX questions I want to ask:

currently, there are no helper(error message) to tell what fields(eg. collection name) that user needs to fill out:

Do I need to only show helper(error message) under the submit button if user has insufficient balance in this issue #3528?

If I need to show all required fields and sufficient balance, there are more questions:
3.1 When user first enter the create page and he or she doesn't do anything, should we show the helper words under the input to hint them that some fields are required?

3.2 if not show, when do we add error message to tell user?

currently, there are no helper(error message) to tell what fields(eg. collection name) that user must fill out:

You can still wrap <b-input /> with <b-field /> here some infos from Buefy doc: Field & example in html validation

Do I need to only show helper(error message) under the submit button if user has insufficient balance in this issue Handle when user hasn't have enough balance to mint  #3528?

Show inputs helpers under current input when in error.
for insufficient balance you could try to wrap submitButton in a <b-field /> and append error message

If I need to show all required fields and sufficient balance, there are more questions:
When user first enter the create page and he or she doesn't do anything, should we show the helper words under the input to hint them that some fields are required?

no, we don't need this kind of noise. You show error message when user made a mistake (not filling input, bad data type, too long, too short, invalid regex)

if not show, when do we add error message to tell user?

? you show when user try to submit or focus outside input
Html form validation can do all we want no need by default (ref #786)

#786

Thanks for your answer:)
So the submit button is never disabled right? And if user click the button while some fields are error, then show the error message for them?

Thanks for your answer:) So the submit button is never disabled right?

Looks like 'disabled' submit button was made by choice (don't remember which issue & not a fan of this approach)
I don't know if we should keep it, what do you think?

And if user click the button while some fields are error, then show the error message for them?

If you click submit then it should trigger html formValidation but with Buefy we can show error message when user focus outside input
https://user-images.githubusercontent.com/9987732/181015160-a22e99e5-70f7-4f42-bd5a-2ec214730b4a.mov

Thanks for your answer:) So the submit button is never disabled right?

Looks like 'disabled' submit button was made by choice (don't remember which issue & not a fan of this approach) I don't know if we should keep it, what do you think?

And if user click the button while some fields are error, then show the error message for them?

If you click submit then it should trigger html formValidation but with Buefy we can show error message when user focus outside input
Enregistrement.de.l.ecran.2022-07-26.a.3.16.05.PM.mov

Ok, I get your meanings. I think your opinion is right that it's better show error message near the input rather the tooltip. Let me summary this and maybe you can check whether we are in agreement:

don't disable submit button, instead of it, check fields valid when user click it.
there are two way to show error message under the fields:
2.1 when user focus outside input as you said.
2.2 when user click submit button while some fields are not valid.

1. don't disable submit button, instead of it, check fields valid when user click it.

2. there are two way to show error message under the fields:
   2.1 when user focus outside input as you said.
   2.2 when user click submit button while some fields are not valid.

Yes, I totally agree with that.

enough balance

no balance

@zhengow not sure if you're solving this as well

https://github.com/kodadot/nft-gallery/issues/3600

but maybe you could.
Currently, there's a way to get around the type-check, by punching in math symbols such as + or -  (then you can add letters)

@zhengow not sure if you're solving this as well

Price Bug E letter and +- symbol  #3600

but maybe you could.
Currently, there's a way to get around the type-check, by punching in math symbols such as + or - (then you can add letters)

I fix it by remove showNotification when type + or - or E/e.
I think it is still wise to allow user to type scientific notation, like 1e1, 3e2, etc. The component will transform it to right number if it is valid.
valid examples:

1e1
1e+1
1e-1
1E1
3e5

invalid examples:

+E-

Actually, I check the valid number by input tag native function. And if it is valid, it will always transform it to right.

@petersopko pls check this PR if you are free. Sometimes I have to resolve conflicts if other PRs are merges 😢

@petersopko pls check this PR if you are free. Sometimes I have to resolve conflicts if other PRs are merges 😢

yes, unfortunately we had recently broken our BalanceInput.vue and therefore there were bunch of higher priority PRs which we needed to resolve first. let's resolve the conflict so we can finally test this one and move it forward :)

resolve

LGTM

works for me

hey, @DeluneClaire since there were lot of changes after your initial testing, would you mind retesting this again? Balance input is very sensitive component and changing it without proper tests backfired on us couple times in the past weeks 😆
here's things which I'd like to make sure that work:

setting price for newly minted NFTs
making offers with appropriate price
/transfer tab and related functionality there

works for me

hey, @DeluneClaire since there were lot of changes after your initial testing, would you mind retesting this again? Balance input is very sensitive component and changing it without proper tests backfired on us couple times in the past weeks 😆
here's things which I'd like to make sure that work:
1. setting price for newly minted NFTs

2. making offers with appropriate price

3. /transfer tab and related functionality there

Yeah, I was actually a bit confused since there are so many comments and linked issues! I'll have an eye on It now, thanks.

@zhengow let's resolve conflicts (please test after yourself) and get ready to merge 😄

ok let's merge this since the bsx part seem so to be working (and that's why the issue was created), however ⚠ we'll need more refactor, currently, the way we handle form validation / minting at rmrk doesn't match bsx at all (button to submit is disabled there in case of insufficient balance).

pay 100 usd

😍 Perfect, I’ve sent the payout
💵 $100 @ 64.45 USD/KSM ~ 1.552 $KSM
🧗 EgCzZLpVe7zg7RHh79qPyC8UrykVkA22YY2oj7sWMZf15Ws
🔗 0x607603d7231ce469e6664f746657ccaba3b7c57fc04e32007a6f0fa4047df64b
🪅 Let’s grab another issue and get rewarded!
🪄 github.com/kodadot/nft-gallery/issues


bug: ionContent scrollable while opening ionMenu

Bug Report
Ionic version:

[x] 4.x
[x] 5.x
Current behavior:

While opening Menu, the Content is still scrollable (see video)
Expected behavior:

Content should not be scrollable
Steps to reproduce:

While opening Menu scroll up and down content.
Video
https://youtu.be/K-ImPdKFoiA
Cannot run ionic info, because using Ionic with CDN

Thanks for the issue. Can you provide a repo with the code required to reproduce this issue?

Oh, at the moment, I don’t have a repo, I can give. If you wait a few Minutes, I could give you a jsfiddle.

Okay, we can close Issue, the bug is just on my app (You can see on AppStore at "Marmaris Marktoberdorf")


improve dragdrop

on mobile, scrolling is very difficult because most components (which can be drag/dropped) are full width
on desktop, people frequently drag the mouse outside (to the right or left) of components when selecting wysiwyg text, which triggers dragdrop

fixed desktop dragging in commit 6dae91f
waiting for dragula to see what we should do about mobile dragging


Added the implementation of an API that ingests extensive data of an event

Required items, please complete
Change(s):

Integrated an API in the existing SlashNext Security Events for enriching the events with more details.

Version Updated:

Package version updated to 3.1.0

Testing Completed:

Yes

Checked that the validations are passing and have addressed any issues that are present:

Yes

Hi @v-atulyadav ,
Please provide an ETA.
Thanks.

Hi @MuhammadAli-snx,
Please check for below points.

I can see some difference in the template from your PR and the template generated by using the v3 tool. Is there any specific reason for this change?

Release Note file : The latest version should be on top.

Hi @MuhammadAli-snx, Please check for below points.
1. I can see some difference in the template from your PR and the template generated by using the v3 tool. Is there any specific reason for this change?

2. Release Note file : The latest version should be on top.

The SlashNext Security Events version 1.0.0 is published on marketplace. Hence, updated the version of the package and made it 2.0.0 because a new API is integrated in the app which enriches the events with more data.

Fixed: Updated the release notes.

Hi @v-atulyadav ,
Any update on the above would be great.
Thanks.

Hi @MuhammadAli-snx,
I am reviewing this by deploying the template. I will let you know if anything more is needed. Thanks


Eloquent Modal does not Automatically appenging letter "s" in table

Laravel Version: 7.10.3
PHP Version: 7.2.28
Database Driver & Version:

Description:
Eloquent Modal does not Automatically appenging letter "s" in table
Steps To Reproduce:

Can you be more specific? Which table names are failing?

We had the same bug for "Media" Model. It should be fixed after a composer update.
Issue: https://github.com/doctrine/inflector/issues/149

I'm experiencing the same issue for a table named foods. composer update doesn't seem to fix it at this point.

protected $table = 'foods'; does the trick though.
It seems like the cause is https://github.com/doctrine/inflector/pull/101, which was only just released.

Same with work.
Broken on doctrine/inflector 1.4.1, was working fine using 1.3.1.
illuminate/support's composer.json file was updated to require "doctrine/inflector": "^1.4|^2.0",.
It was previously set as "doctrine/inflector": "^1.1". See this commit.

Can you be more specific? Which table names are failing?

Model name is Homework, table name is homeworks

Can you be more specific? Which table names are failing?

Model name is Homework, table name is homeworks

the plural of homework is still homework


[CMake] Test existence of python entries

Progressing #10296

Can one of the admins verify this patch?

@gunan I will write the bazel test. But shouldn't it be triggered by the cmake build as well?

The tests should cover the most part. @mrry Any suggestions on further tests?

I let tf_python.cmake at least ensure the existence of all entries in the filetree.
As suggested by @gunan I wrote a BUILD file to invoke the following:

python_modules_test.py to report invalid and missing/expected entries
python_proto_test.py to report invalid entries
python_proto_cc_test.py to report invalid entries

Also, I fixed the 24 issues reported by python_modules_test.py.

Thanks for getting this started! I have a few high-level comments about the structure:

Can you rewrite the Python tests to use tf.test.TestCase (similar to other Python *_test.py files)? This will make the tests work better with our testing infrastructure, which in turn makes failures easier to track down.
In their current form,  I think those tests will fail when running on Bazel, because they don't have the appropriate data dependencies in the BUILD files. FWIW, I expected the test would have dependencies on the appropriate *.txt files and a generated PIP package (built using the Bazel target), and it would compare the set of directories. (See here for an example of a test that uses data dependencies.)
Just to check, are the changes in python_modules.txt due to code that's been removed?

I will try to rewrite using tf.test.TestCase.
The tests compare the .txt files with the filetree inside tensorflow/contrib.
I understand the concern about requiring the .txt files.
The PIP package shouldn't be needed here?
Would I need to require tensorflow/contrib/** or something?
Can I acquire a snapshot of the filetree without the file contents?

As for the entries I removed:

tensorflow/python/platform/default -> removed in 2b74220466957e7fbc86ebe3da5ead9a0e4f5169
tensorflow/contrib/bayesflow/examples/** -> removed in 2ccf3aba424405d82e69f03021435e48f54656fb
tensorflow/contrib/learn/python/learn/dataframe -> removed in 27ad708b90cdb62e6aeb7c1378a23ff8cc9c1790
tensorflow/contrib/ios_examples/** -> moved to tensorflow/examples/ios

@mrry Can you tell me how to blacklist the dependencies in pip_smoke_test.py ?

@mrry Could you test this please?

I have implemented all changes requested by @gunan.
But I still don't know about the pip_smoke_test.py whitelisting?

I think I'm not requiring the contrib filetree correctly.
It isn't included in the runfiles directory.

All files are included correctly now.
But @gunan can't we deduplicate tensorflow/BUILD ?
The bazel are only testing entries in contrib for now.
This is because test.TestCase imports other files (from runfiles) which import generated files.

This is why I try not to include AND reference other packages:
Traceback (most recent call last):
  File "/home/androbin/bazel/tensorflow/bazel-bin/tensorflow/contrib/cmake/python_modules_test.runfiles/org_tensorflow/tensorflow/contrib/cmake/python_modules_test.py", line 22, in <module>
    from tensorflow.python.platform import test
  File "/home/androbin/bazel/tensorflow/bazel-bin/tensorflow/contrib/cmake/python_modules_test.runfiles/org_tensorflow/tensorflow/__init__.py", line 24, in <module>
    from tensorflow.python import *
  File "/home/androbin/bazel/tensorflow/bazel-bin/tensorflow/contrib/cmake/python_modules_test.runfiles/org_tensorflow/tensorflow/python/__init__.py", line 72, in <module>
    from tensorflow.python.ops.standard_ops import *
  File "/home/androbin/bazel/tensorflow/bazel-bin/tensorflow/contrib/cmake/python_modules_test.runfiles/org_tensorflow/tensorflow/python/ops/standard_ops.py", line 64, in <module>
    from tensorflow.python.ops.parsing_ops import *
  File "/home/androbin/bazel/tensorflow/bazel-bin/tensorflow/contrib/cmake/python_modules_test.runfiles/org_tensorflow/tensorflow/python/ops/parsing_ops.py", line 31, in <module>
    from tensorflow.python.ops import gen_parsing_ops
ImportError: cannot import name 'gen_parsing_ops'

This happens because Python is referencing the scripts in runfiles instead of the PIP package.
@caisq Can you tell how to exclude just enough files to make python not look here?

I have tested this code in various ways. @caisq CI test this please?

@gunan @mrry Any further remarks?

@tensorflow-jenkins test this please.

Seems like blacklisting this dependency was not enough:
ERROR: /workspace/bazel_pip/tensorflow/contrib/cmake/BUILD:7:1:
	Target '//tensorflow:all_opensource_files' is not visible from
	target '//bazel_pip/tensorflow/contrib/cmake:python_module_test'.
	Check the visibility declaration of the former target
	if you think the dependency is legitimate.
ERROR: /workspace/bazel_pip/tensorflow/contrib/cmake/BUILD:20:1:
	Target '//tensorflow:all_opensource_files' is not visible from
	target '//bazel_pip/tensorflow/contrib/cmake:python_proto_test'.
	Check the visibility declaration of the former target
	if you think the dependency is legitimate.
ERROR: /workspace/bazel_pip/tensorflow/contrib/cmake/BUILD:33:1:
	Target '//tensorflow:all_opensource_files' is not visible from
	target '//bazel_pip/tensorflow/contrib/cmake:python_proto_cc_test'.
	Check the visibility declaration of the former target
	if you think the dependency is legitimate.

@gunan You said something about this?
How about modifying glob(["**/*.py"]) to exclude *_test.py ?

@gunan We can of course fix the visibility and include the tests in the PIP package. But do we even need test scripts in the PIP package? I remember @mrry saying that we don't want that.

Indeed, we probably include too much test code in the current wildcards, and it would be nice to prune it if possible

I think we should just modify glob(["**/*.py"]) to exclude *_test.py like is done here?

@gunan What I said about runfiles was about same issue faced when trying to use TensorFlow from within the source directory.
Because the runfiles directory has the same issue, I had to introduce this minor hack to make it work.
Not ideal of course, but should be fine. If you wanna suggest a different solution, I keep an open ear.

@jart @wicke I am out for a few days. Could you take a look?
On Dec 13, 2017 8:44 AM, "Robin Richtsfeld"<EMAIL_ADDRESS>wrote:

@gunan https://github.com/gunan What I said about runfiles was about
same issue faced when trying to use TensorFlow from within the source
directory
https://stackoverflow.com/questions/35953210/error-running-basic-tensorflow-example
.
Because the runfiles directory has the same issue, I had to introduce this
minor hack
https://github.com/tensorflow/tensorflow/pull/15166/files#diff-627a2a073a8f26eae4124d586f145cc5R30
to make it work.
Not ideal of course, but should be fine. If you wanna suggest a different
solution, I keep an open ear.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/tensorflow/tensorflow/pull/15166#issuecomment-351448537,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AHlCOQ80EL-89n9dFL_jaNYB29wLMEKEks5s__7ZgaJpZM4Q4hZe
.

Waiting for #15368 and #15315 while redoing bazel dependencies etc.

@jart Maybe we can use a genquery instead of requiring //tensorflow:all_opensource_files ?

@jart It doesn't seem like we can remove //tensorflow:all_opensource_files as dependency from tensorflow/contrib/makefile/BUILD and I can't figure out how to have these tests access at least the directory structure either.

You might be able to do something similar to what our pip package building process does, where we just depend on the things we need, and then we copy everything we want from the foo.runfiles/ symlink tree structure. There are other ways of doing it.

where we just depend on the things we need

There is no way of knowing what (let's say) python_modules.txt contains upfront. They are not even guaranteed to be valid which is what these tests are for.
Also, some of the tests depend on knowing about the filetree structure.

There are other ways of doing it.

Until we find a better alternative for cmake (this PR) and makefile and all other things that depend on //tensorflow:all_opensource_files, I don't see why having it would be an issue.
Even if we were to write a script to dump a summary of the filetree structure into a file and use that, we would still need some way of requiring "all files" for its runfiles directory.

This makes we wonder: How does e.g. tensorflow/contrib/cmake/tf_python.cmake get access to all files?

@jart What you say?

Waiting for #15315 and #15368 to get merged.

@gunan Are you okay with these changes?
@mrry Do you have further suggestions?

Due to disagreement over #15315, I moved these functions into test_commons.py for now.

They can be merged together, and then you won't need to worry about the init file hack, either.

The init file hack is about the imports from tensorflow.python.platform.

Maybe I need to clarify things about the init file hack:
When TensorFlow is used from within the repository directory, it finds the __init__.py files and resolves all imports the the repository directory instead of the PIP package.
The problem is that tensorflow/__init__.py imports all submodules including generated ops, which it can't find here.
The same happens when all_opensource_files are linked to runfiles.

@gunan @martinwicke Any updates concerning Sanity Checks?
Do you want to merge this for now and turn it into a sanity check in a follow-up?

@Androbin the sanity check appears to have passed.

@drpngx I was referring to #15368#issuecomment-353682976

I see. @martinwicke @gunan WDYT?

If you say data = ["//tensorflow/python", "//tensorflow/contrib:contrib_py"] then pretty much everything you should need, including the __init__.py files, will be available in the runfiles directory.

@jart These tests will become Sanity Check together with most other targets that use //tensorflow:all_opensource_files. See https://github.com/tensorflow/tensorflow/pull/15368#issuecomment-354156560 for reference.
This should be the preferred solution.

Closing this in favor of #15670.


MINOR: add back old constructor of ConsumerRecord

@apovzner, @becketqin: Any reason not to add this back? It will probably break a lot of user test cases if we don't have it.

@hachikuji, can you please file a JIRA for this so that we can track it for release purposes? It would be good to include it in <IP_ADDRESS>. cc @gwenshap

@ijuma Will do.

Here is the JIRA: https://issues.apache.org/jira/browse/KAFKA-3434. I'll close this and reopen it under that JIRA's name.

Thanks!

Has this been re-opened? I agree it would be nice to have in 0.10

@granthenke Not yet. I will do so later today. We're debating on what the default values should be for some of the new fields. We already use -1 for the serializedKeyLength and serializedValueLength when the key or value are null, so it seems like we need something else to indicate absence of the fields.


Make clearer why someone should use sonar

It isn't obvious in the homepage for someone that doesn't know about the project:
https://twitter.com/mgifford/status/879531935898492928

@alrra, @ststimac can you please work on this?

Thanks!

Thinking about something like the following in the home page, although I think it is a bit too long.

web development is complex: accessibility, security, performance, pwa, browser compatibility... sonar helps you write better code that fits your requirements.

Also not sure about the styles, will rely on @ststimac for this

@sonarwhal/contributors ?

It seems that the text part can stretch pretty long on mobile screens if we don't hide it.  What if we have a 'Why Sonar?' item under the 'About'  menu in the navigation bar? Then we will have a whole page to explain why sonar should be used.

What if we have a 'Why Sonar?' item under the 'About' menu in the navigation bar?

We still need to have something on the homepage that explains what it does and why to use it.

Yeah, I'll work on the styling of this today :) @molant I think the copy length will be fine after I reduce the text size and get rid of the all caps.

This is live now and closed via https://github.com/sonarwhal/sonarwhal.com/pull/206


Need access to deployment repo and OpenShift Console

I need the information to be able to deploy and manage this project. I have been trying to get it for a couple months now without luck.
I will look into deploying this to another location in the GDG-x Cloud this weekend if this information is not available. We need to associate another domain with this site since we lost gdg.events. See #40 for more details.

I spent all 3-day weekend working on Firefly. The project was hard coded to the gdg.events domain. So I needed to make it work with a configurable domain. I've got some of that done, but I need a domain that I can hook up to it in order to do that testing.
I was unable to get access to the existing OpenShift admin console or Firefly deploy repo. There had already been some discussion to move the project to another hosting platform like Docker.
I investigated using a NodeJS Managed VM on GAE and I did get Firefly up and running in that configuration with Docker. Unfortunately, these Managed VMs do not support static IP addresses, so they are not suitable for web hosting at this time. Every time that the instance gets restarted, the static IP association is lost. I've submitted a ticket for this issue.
I was also able to get Firefly up and running in a click-to-deploy MEAN instance on GCE. It can be accessed here: http://<IP_ADDRESS>/
It's currently built with gdg.events as the domain in the configuration, but I can change that in the configuration file and redeploy now to take advantage of the a new domain.
Another alternative would be to use Container Engine to deploy Firefly in a single or multiple Docker configuration, but that will take additional development time that I won't have until the weekend of 8/22.
Closing this for now. We'll start moving instances off of these OpenShift instances and hopefully shut them down by the end of the year.

:+1:


Update github runners

Update github runners, in particular use macos-14 to build macos ARM wheels.

Wheels successfully built: https://github.com/contourpy/contourpy/actions/runs/8596271051


Add visible type vars to coerce

See https://github.com/purescript/purescript/pull/4235#discussion_r829263552 once that PR gets merged.

Perhaps a few other functions should be added here. A few variants would be:

a suffix indicating how many containers to keep the same, which indicates the number of kinds to bypass.

coerce @(Array a) @(Array b) becomes coerce1 @a @b since the container type doesn't change.
coerce @(Array (Maybe a)) @(Array (Maybe b)) becomes coerce2 @a @b since the nested container type doesn't change.

a "Wrap" suffix indicating the type should be wrapped in some newtype. coerceWrap is the same as Data.Newtype.wrap but the shared suffix means we could use the same naming convention for coerce1/coerce2.

coerce @a @(Disj a) becomes coerceWrap @Disj.
coerce @(Array a) @(Array (Disj a)) becomes coerce1Wrap @Disj.
coerce @(Array (Maybe a)) @(Array (Maybe (Disj a))) becomes coerce2Wrap @Disj.

a "Unwrap" suffix indicates a newtyped value should be unwrapped. coerceUnwrap is the same as Data.Newtype.unwrap but the shared suffix means we could use the same naming convention for coerce1/coerce2.

coerce @(Disj a) @a becomes coerceUnwrap @Disj.
coerce @(Array (Disj a)) @(Array a) becomes coerce1Unwrap @Disj.
coerce @(Array (Maybe (Disj a))) @(Array (Maybe a)) becomes coerce2Unwrap @Disj.

coerce1 :: forall f @a @b. Coercible (f a) (f b) => f a -> f b
coerce1 = coerce @(f a) @(f b)

coerce2 :: forall f g @a @b. Coercible (f (g a)) (f (g b)) => f (g a) -> f (g b)
coerce2 = coerce @(f (g a)) @(f (g b))

coerce1Wrap :: forall f @n a. Newtype n a => Coercible (f a) (f (n a)) => f a -> f (n a)
coerce1Wrap = coerce @(f a) @(f (n a))


cardano-node: network/information does not work on cardano-node until one creates a wallet

Context
$ cardano-wallet-byron version
2020.3.16 (git revision: 52d2cf591a534051c39366825fcfd723f3512e30)

Information
-

Version
2020.3.16 (git revision: 52d2cf591a534051c39366825fcfd723f3512e30)

Platform
Linux, All?

Installation
From github

Steps to Reproduce

Start wallet on top of cardano-node

$ cd cardano-node
$ nix-build -A scripts.mainnet.node -o mainnet-node-local && ./mainnet-node-local

and
cardano-wallet-byron serve --node-socket ~/wb/cardano-node/state-node-mainnet/node.socket --mainnet --database ./mainnet

Request network/information

curl GET http://localhost:8090/v2/network/information |  jq

Expected behavior
It should work
Actual behavior
Code = 503,
Json = {"code"=>"network_unreachable", "message"=>"The node backend is unreachable at the moment. Trying again in a bit might work."}

Works only after creating a wallet.

Resolution

[x] Have a default client started when the network layer is created, just for the node tip ==> #1460

QA

See comment on #1460, we actually already had an integration test for this... but they aren't running in CI yet.

lgtm.


Fixing streaming when return_direct is set to true

We need this for #899

Make sure you tested that with and without streaming! @elisalimli

Tested again, lgtm. Merging now


weave not deleting network interfaces

What you expected to happen?
weave removes network interface after containers are stopped
What happened?
A lot of interfaces stay forever until the hard limit of 1024 is reached and no more containers can be started
docker: Error response from daemon: attaching veth "vethwepl23795" to "weave": exchange full.
How to reproduce it?
We have hundreds of container starts on our DC/OS cluster. Hard to say why/when it happens.
$ weave version 2.4.0
$ docker version 1.11.2
$ uname -a CentOS Linux release 7.4.1708 3.10.0-514.26.2.el7.x86_64

Logs:
$ docker logs weave
WARN: 2018/09/20 11:07:31.624781 Error intercepting response: attaching veth "vethwepl23795" to "weave": exchange full

We used weave 1.8.0 before and never saw this problem.

As you reported this error is result of reaching hard limit of 1024 bridge ports (as noted in https://github.com/weaveworks/weave/issues/3258 as well). But we need to find the interfaces for deleted containers were not cleaned up. Could you please share or check in the logs if there was attempt to delete the interface or failure to delete the interfaces of the containers?

@MikeMichel
Noting that you run Docker 1.11.2 which leaks netns which prevents from removing the ifaces (https://github.com/moby/moby/issues/32090).

I just created a 4 node weave 2.4.0 cluster with docker 18.06.0-ce (no mesos etc.)
[root@node1 ~]# cat /etc/systemd/system/weave.service
[Unit]
Description=Weave Network
Documentation=http://docs.weave.works/weave/latest_release/
Requires=docker.service
After=docker.service

[Service]
EnvironmentFile=-/etc/sysconfig/weave
# weave 1.8.0
# ExecStartPre=/usr/local/bin/weave launch-router --name ::10 --no-restart --dns-domain="node.intern." --ipalloc-range <IP_ADDRESS>/8 --ipalloc-default-subnet <IP_ADDRESS>/24 --password hjoo7VourohpeiChiepai8piakohdoh811princE $PEERS

ExecStartPre=/usr/local/bin/weave launch --log-level=debug --name ::1 --no-restart --dns-domain="node.intern." --ipalloc-range <IP_ADDRESS>/8 --ipalloc-default-subnet <IP_ADDRESS>/24 --password hjoo7VourohpeiChiepai8piakohdoh811princE --rewrite-inspect -H unix:///var/run/weave/weave.sock --no-default-ipalloc --ipalloc-init seed=::1,::2,::3 $PEERS
ExecStart=/usr/bin/docker attach weave
ExecStop=/usr/local/bin/weave stop
Restart=always

[Install]
WantedBy=multi-user.target

[root@node1 ~]# cat /etc/sysconfig/weave
PEERS="<IP_ADDRESS> <IP_ADDRESS> <IP_ADDRESS>"
SEED="::1,::2,::3"
WEAVE_NO_FASTDP=true
WEAVE_MTU=1414
[root@node1 ~]# ip a|grep vethwepl|wc -l && docker ps|grep /w/w|wc -l
0
0
[root@node1 ~]# docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS               NAMES
8be3b036baa9        weaveworks/weave:2.4.0   "/home/weave/weaver …"   28 minutes ago      Up 28 minutes                           weave
[root@node1 ~]# weave status

        Version: 2.4.0 (version 2.4.1 available - please upgrade!)

        Service: router
       Protocol: weave 1..2
           Name: 00:00:00:00:00:01(node1)
     Encryption: enabled
  PeerDiscovery: enabled
        Targets: 3
    Connections: 4 (3 established, 1 failed)
          Peers: 4 (with 12 established connections)
 TrustedSubnets: none

        Service: ipam
         Status: ready
          Range: <IP_ADDRESS>/8
  DefaultSubnet: <IP_ADDRESS>/24

        Service: dns
         Domain: node.intern.
       Upstream: <IP_ADDRESS>
            TTL: 1
        Entries: 0

        Service: proxy
        Address: unix:///var/run/weave/weave.sock

        Service: plugin (legacy)
     DriverName: weave

[root@node1 ~]# ip a|grep vethwepl|wc -l && docker ps|grep /w/w|wc -l
0
0
[root@node1 ~]# docker -H unix:///var/run/weave/weave.sock run -d -e WEAVE_CIDR=net:<IP_ADDRESS>/24 nginx
0052144510f6c01e1cff8661d881d24cedcc0f016153fc5a2d34f3f0ac92f4cb
[root@node1 ~]# docker -H unix:///var/run/weave/weave.sock run -d -e WEAVE_CIDR=net:<IP_ADDRESS>/24 nginx
735490795cf2b54c077001ee14a1582a7b93feead908c76b79b1f0f575b1d7d2
[root@node1 ~]# docker -H unix:///var/run/weave/weave.sock run -d -e WEAVE_CIDR=net:<IP_ADDRESS>/24 nginx
eeb57f6f00e454a0b53f16f1d912e0e881afffb97a97af308368e3a0b0768242
[root@node1 ~]# docker -H unix:///var/run/weave/weave.sock run -d -e WEAVE_CIDR=net:<IP_ADDRESS>/24 nginx
885125c15ad23d823021dbdea8b5aea3e89555debe16b19ed0865eeb625bd516
[root@node1 ~]# ip a|grep vethwepl|wc -l && docker ps|grep /w/w|wc -l
4
4
[root@node1 ~]# docker -H unix:///var/run/weave/weave.sock stop<PHONE_NUMBER>90 eeb57f 885125
005214
735490
eeb57f
885125
[root@node1 ~]# ip a|grep vethwepl|wc -l && docker ps|grep /w/w|wc -l
4
0
[root@node1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet <IP_ADDRESS>/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:c9:c7:04 brd ff:ff:ff:ff:ff:ff
    inet <IP_ADDRESS>/24 brd <IP_ADDRESS> scope global noprefixroute dynamic eth0
       valid_lft 83864sec preferred_lft 83864sec
    inet6 fe80::5054:ff:fec9:c704/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:a2:e9:5a brd ff:ff:ff:ff:ff:ff
    inet <IP_ADDRESS>/24 brd <IP_ADDRESS> scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fea2:e95a/64 scope link
       valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:50:3d:8c:96 brd ff:ff:ff:ff:ff:ff
    inet <IP_ADDRESS>/16 brd <IP_ADDRESS> scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:50ff:fe3d:8c96/64 scope link
       valid_lft forever preferred_lft forever
5: weave: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1414 qdisc noqueue state UP group default qlen 1000
    link/ether 00:00:00:00:00:01 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::200:ff:fe00:1/64 scope link
       valid_lft forever preferred_lft forever
6: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether fa:5e:c3:74:e2:74 brd ff:ff:ff:ff:ff:ff
8: vethwe-pcap@vethwe-bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1414 qdisc noqueue state UP group default
    link/ether ba:07:40:a0:39:e1 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::b807:40ff:fea0:39e1/64 scope link
       valid_lft forever preferred_lft forever
9: vethwe-bridge@vethwe-pcap: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1414 qdisc noqueue master weave state UP group default
    link/ether ae:a7:8e:b9:3f:cd brd ff:ff:ff:ff:ff:ff
    inet6 fe80::aca7:8eff:feb9:3fcd/64 scope link
       valid_lft forever preferred_lft forever
69: vethwepl6919@if68: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1414 qdisc noqueue master weave state UP group default
    link/ether ca:53:a3:98:8a:02 brd ff:ff:ff:ff:ff:ff link-netnsid 14
    inet6 fe80::c853:a3ff:fe98:8a02/64 scope link
       valid_lft forever preferred_lft forever
73: vethwepl7064@if72: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1414 qdisc noqueue master weave state UP group default
    link/ether 9e:74:4a:63:0d:b4 brd ff:ff:ff:ff:ff:ff link-netnsid 15
    inet6 fe80::9c74:4aff:fe63:db4/64 scope link
       valid_lft forever preferred_lft forever
77: vethwepl7212@if76: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1414 qdisc noqueue master weave state UP group default
    link/ether ca:29:93:87:37:6d brd ff:ff:ff:ff:ff:ff link-netnsid 16
    inet6 fe80::c829:93ff:fe87:376d/64 scope link
       valid_lft forever preferred_lft forever
81: vethwepl7359@if80: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1414 qdisc noqueue master weave state UP group default
    link/ether ca:a1:a6:4e:e3:c8 brd ff:ff:ff:ff:ff:ff link-netnsid 17
    inet6 fe80::c8a1:a6ff:fe4e:e3c8/64 scope link
       valid_lft forever preferred_lft forever

Logs:
INFO: 2018/10/16 18:03:13.002447 Creating container with WEAVE_CIDR "net:<IP_ADDRESS>/24"
DEBU: 2018/10/16 18:03:13.011589 <-requestBody: {"AttachStderr":false,"AttachStdin":false,"AttachStdout":false,"Cmd":["nginx","-g","daemon off;"],"Domainname":"","Entrypoint":["/w/w"],"Env":["WEAVE_CIDR=net:<IP_ADDRESS>/24"],"HostConfig":{"AutoRemove":false,"Binds":["/var/lib/docker/volumes/b4b8c62d481a78558cb938cbfe913c1fced0316a2d72862bdef39aa10600efc2/_data:/w:ro"],"BlkioDeviceReadBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceWriteIOps":null,"BlkioWeight":0,"BlkioWeightDevice":[],"CapAdd":null,"CapDrop":null,"Cgroup":"","CgroupParent":"","ConsoleSize":[0,0],"ContainerIDFile":"","CpuCount":0,"CpuPercent":0,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpuShares":0,"CpusetCpus":"","CpusetMems":"","DeviceCgroupRules":null,"Devices":[],"DiskQuota":0,"Dns":["<IP_ADDRESS>"],"DnsOptions":[],"DnsSearch":["node.intern."],"ExtraHosts":null,"GroupAdd":null,"IOMaximumBandwidth":0,"IOMaximumIOps":0,"IpcMode":"","Isolation":"","KernelMemory":0,"Links":null,"LogConfig":{"Config":{},"Type":""},"MaskedPaths":null,"Memory":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":-1,"NanoCpus":0,"NetworkMode":"default","OomKillDisable":false,"OomScoreAdj":0,"PidMode":"","PidsLimit":0,"PortBindings":{},"Privileged":false,"PublishAllPorts":false,"ReadonlyPaths":null,"ReadonlyRootfs":false,"RestartPolicy":{"MaximumRetryCount":0,"Name":"no"},"SecurityOpt":null,"ShmSize":0,"UTSMode":"","Ulimits":null,"UsernsMode":"","VolumeDriver":"","VolumesFrom":null},"Hostname":"","Image":"nginx","Labels":{},"NetworkingConfig":{"EndpointsConfig":{}},"OnBuild":null,"OpenStdin":false,"StdinOnce":false,"Tty":false,"User":"","Volumes":{},"WorkingDir":""}
DEBU: 2018/10/16 18:03:13.049494 Response from target: 201 Created map[Content-Length:[90] Api-Version:[1.38] Content-Type:[application/json] Docker-Experimental:[false] Ostype:[linux] Server:[Docker/18.06.0-ce (linux)] Date:[Tue, 16 Oct 2018 18:03:13 GMT]]
INFO: 2018/10/16 18:03:13.051457 POST /v1.38/containers/eeb57f6f00e454a0b53f16f1d912e0e881afffb97a97af308368e3a0b0768242/wait?condition=next-exit
DEBU: 2018/10/16 18:03:13.055089 Response from target: 200 OK map[Date:[Tue, 16 Oct 2018 18:03:13 GMT] Api-Version:[1.38] Content-Type:[application/json] Docker-Experimental:[false] Ostype:[linux] Server:[Docker/18.06.0-ce (linux)]]
INFO: 2018/10/16 18:03:13.056012 POST /v1.38/containers/eeb57f6f00e454a0b53f16f1d912e0e881afffb97a97af308368e3a0b0768242/start
DEBU: 2018/10/16 18:03:13.554636 Wait for start of container eeb57f6f00e454a0b53f16f1d912e0e881afffb97a97af308368e3a0b0768242
DEBU: 2018/10/16 18:03:13.559301 [net] ContainerStarted: eeb57f6f00e454a0b53f16f1d912e0e881afffb97a97af308368e3a0b0768242
INFO: 2018/10/16 18:03:13.565023 Attaching container eeb57f6f00e454a0b53f16f1d912e0e881afffb97a97af308368e3a0b0768242 with WEAVE_CIDR "net:<IP_ADDRESS>/24" to weave network
DEBU: 2018/10/16 18:03:13.565070 weave POST to http://<IP_ADDRESS>:6784/ip/eeb57f6f00e454a0b53f16f1d912e0e881afffb97a97af308368e3a0b0768242/<IP_ADDRESS>/24 with map[check-alive:[true]]
DEBU: 2018/10/16 18:03:13.567793 [http] POST /ip/eeb57f6f00e454a0b53f16f1d912e0e881afffb97a97af308368e3a0b0768242/<IP_ADDRESS>/24
DEBU: 2018/10/16 18:03:13.571472 [net] ContainerStarted: eeb57f6f00e454a0b53f16f1d912e0e881afffb97a97af308368e3a0b0768242
DEBU: 2018/10/16 18:03:13.576687 [allocator 00:00:00:00:00:01]: Allocated <IP_ADDRESS> for eeb57f6f00e454a0b53f16f1d912e0e881afffb97a97af308368e3a0b0768242 in <IP_ADDRESS>/24
DEBU: 2018/10/16 18:03:13.580948 Running image "weaveworks/weaveexec:2.4.0"; entrypoint=["sh"]; cmd="[-c echo '# created by Weave - BEGIN\n# container hostname\n<IP_ADDRESS>        ee]"; binds=["/var/lib/docker/containers/eeb57f6f00e454a0b53f16f1d912e0e881afffb97a97af308368e3a0b0768242:/container"]
DEBU: 2018/10/16 18:03:14.261549 [net] ContainerStarted: 070074e2ef1943d5d0cd523d6165c54df64ed2b9964345081862b1ed2f7a5720
DEBU: 2018/10/16 18:03:14.263819 [net] ContainerStarted: 070074e2ef1943d5d0cd523d6165c54df64ed2b9964345081862b1ed2f7a5720
DEBU: 2018/10/16 18:03:14.323415 weave PUT to http://<IP_ADDRESS>:6784/name/eeb57f6f00e454a0b53f16f1d912e0e881afffb97a97af308368e3a0b0768242/<IP_ADDRESS> with map[fqdn:[eeb57f6f00e4.]]
DEBU: 2018/10/16 18:03:14.323690 Discovered local MAC 22:2e:bd:d1:f7:63
DEBU: 2018/10/16 18:03:14.323800 [http] PUT /name/eeb57f6f00e454a0b53f16f1d912e0e881afffb97a97af308368e3a0b0768242/<IP_ADDRESS>
INFO: 2018/10/16 18:03:14.323924 [nameserver 00:00:00:00:00:01] Ignoring registration eeb57f6f00e4. <IP_ADDRESS> eeb57f6f00e454a0b53f16f1d912e0e881afffb97a97af308368e3a0b0768242 (not a subdomain of node.intern.)
DEBU: 2018/10/16 18:03:14.324077 Response from target: 204 No Content map[Date:[Tue, 16 Oct 2018 18:03:13 GMT] Api-Version:[1.38] Docker-Experimental:[false] Ostype:[linux] Server:[Docker/18.06.0-ce (linux)]]
DEBU: 2018/10/16 18:03:15.333765 sleeve ->[<IP_ADDRESS>:6783|00:00:00:00:00:04(node4)]: sendHeartbeat
DEBU: 2018/10/16 18:03:15.351674 sleeve ->[<IP_ADDRESS>:6783|00:00:00:00:00:04(node4)]: handleHeartbeat
INFO: 2018/10/16 18:03:15.376523 GET /_ping
DEBU: 2018/10/16 18:03:15.378471 Response from target: 200 OK map[Api-Version:[1.38] Docker-Experimental:[false] Ostype:[linux] Server:[Docker/18.06.0-ce (linux)] Date:[Tue, 16 Oct 2018 18:03:15 GMT] Content-Length:[2] Content-Type:[text/plain; charset=utf-8]]
INFO: 2018/10/16 18:03:15.381701 POST /v1.38/containers/create
DEBU: 2018/10/16 18:03:15.381776 ->requestBody: {"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["WEAVE_CIDR=net:<IP_ADDRESS>/24"],"Cmd":null,"Image":"nginx","Volumes":{},"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{},"HostConfig":{"Binds":null,"ContainerIDFile":"","LogConfig":{"Type":"","Config":{}},"NetworkMode":"default","PortBindings":{},"RestartPolicy":{"Name":"no","MaximumRetryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"CapAdd":null,"CapDrop":null,"Dns":[],"DnsOptions":[],"DnsSearch":[],"ExtraHosts":null,"GroupAdd":null,"IpcMode":"","Cgroup":"","Links":null,"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":false,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":0,"ConsoleSize":[0,0],"Isolation":"","CpuShares":0,"Memory":0,"NanoCpus":0,"CgroupParent":"","BlkioWeight":0,"BlkioWeightDevice":[],"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":[],"DeviceCgroupRules":null,"DiskQuota":0,"KernelMemory":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":-1,"OomKillDisable":false,"PidsLimit":0,"Ulimits":null,"CpuCount":0,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0,"MaskedPaths":null,"ReadonlyPaths":null},"NetworkingConfig":{"EndpointsConfig":{}}}

INFO: 2018/10/16 18:03:15.382046 Creating container with WEAVE_CIDR "net:<IP_ADDRESS>/24"
DEBU: 2018/10/16 18:03:15.393442 <-requestBody: {"AttachStderr":false,"AttachStdin":false,"AttachStdout":false,"Cmd":["nginx","-g","daemon off;"],"Domainname":"","Entrypoint":["/w/w"],"Env":["WEAVE_CIDR=net:<IP_ADDRESS>/24"],"HostConfig":{"AutoRemove":false,"Binds":["/var/lib/docker/volumes/b4b8c62d481a78558cb938cbfe913c1fced0316a2d72862bdef39aa10600efc2/_data:/w:ro"],"BlkioDeviceReadBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceWriteIOps":null,"BlkioWeight":0,"BlkioWeightDevice":[],"CapAdd":null,"CapDrop":null,"Cgroup":"","CgroupParent":"","ConsoleSize":[0,0],"ContainerIDFile":"","CpuCount":0,"CpuPercent":0,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpuShares":0,"CpusetCpus":"","CpusetMems":"","DeviceCgroupRules":null,"Devices":[],"DiskQuota":0,"Dns":["<IP_ADDRESS>"],"DnsOptions":[],"DnsSearch":["node.intern."],"ExtraHosts":null,"GroupAdd":null,"IOMaximumBandwidth":0,"IOMaximumIOps":0,"IpcMode":"","Isolation":"","KernelMemory":0,"Links":null,"LogConfig":{"Config":{},"Type":""},"MaskedPaths":null,"Memory":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":-1,"NanoCpus":0,"NetworkMode":"default","OomKillDisable":false,"OomScoreAdj":0,"PidMode":"","PidsLimit":0,"PortBindings":{},"Privileged":false,"PublishAllPorts":false,"ReadonlyPaths":null,"ReadonlyRootfs":false,"RestartPolicy":{"MaximumRetryCount":0,"Name":"no"},"SecurityOpt":null,"ShmSize":0,"UTSMode":"","Ulimits":null,"UsernsMode":"","VolumeDriver":"","VolumesFrom":null},"Hostname":"","Image":"nginx","Labels":{},"NetworkingConfig":{"EndpointsConfig":{}},"OnBuild":null,"OpenStdin":false,"StdinOnce":false,"Tty":false,"User":"","Volumes":{},"WorkingDir":""}
DEBU: 2018/10/16 18:03:15.435996 Response from target: 201 Created map[Content-Length:[90] Api-Version:[1.38] Content-Type:[application/json] Docker-Experimental:[false] Ostype:[linux] Server:[Docker/18.06.0-ce (linux)] Date:[Tue, 16 Oct 2018 18:03:15 GMT]]
INFO: 2018/10/16 18:03:15.437953 POST /v1.38/containers/885125c15ad23d823021dbdea8b5aea3e89555debe16b19ed0865eeb625bd516/wait?condition=next-exit
DEBU: 2018/10/16 18:03:15.441400 Response from target: 200 OK map[Server:[Docker/18.06.0-ce (linux)] Date:[Tue, 16 Oct 2018 18:03:15 GMT] Api-Version:[1.38] Content-Type:[application/json] Docker-Experimental:[false] Ostype:[linux]]
INFO: 2018/10/16 18:03:15.442312 POST /v1.38/containers/885125c15ad23d823021dbdea8b5aea3e89555debe16b19ed0865eeb625bd516/start
DEBU: 2018/10/16 18:03:15.884670 sleeve ->[<IP_ADDRESS>:6783|00:00:00:00:00:02(node2)]: sendHeartbeat
DEBU: 2018/10/16 18:03:15.930080 Wait for start of container 885125c15ad23d823021dbdea8b5aea3e89555debe16b19ed0865eeb625bd516
DEBU: 2018/10/16 18:03:15.937696 [net] ContainerStarted: 885125c15ad23d823021dbdea8b5aea3e89555debe16b19ed0865eeb625bd516
DEBU: 2018/10/16 18:03:15.940932 [net] ContainerStarted: 885125c15ad23d823021dbdea8b5aea3e89555debe16b19ed0865eeb625bd516
INFO: 2018/10/16 18:03:15.944721 Attaching container 885125c15ad23d823021dbdea8b5aea3e89555debe16b19ed0865eeb625bd516 with WEAVE_CIDR "net:<IP_ADDRESS>/24" to weave network
DEBU: 2018/10/16 18:03:15.944771 weave POST to http://<IP_ADDRESS>:6784/ip/885125c15ad23d823021dbdea8b5aea3e89555debe16b19ed0865eeb625bd516/<IP_ADDRESS>/24 with map[check-alive:[true]]
DEBU: 2018/10/16 18:03:15.945849 [http] POST /ip/885125c15ad23d823021dbdea8b5aea3e89555debe16b19ed0865eeb625bd516/<IP_ADDRESS>/24
DEBU: 2018/10/16 18:03:15.952106 [allocator 00:00:00:00:00:01]: Allocated <IP_ADDRESS> for 885125c15ad23d823021dbdea8b5aea3e89555debe16b19ed0865eeb625bd516 in <IP_ADDRESS>/24
DEBU: 2018/10/16 18:03:15.956775 Running image "weaveworks/weaveexec:2.4.0"; entrypoint=["sh"]; cmd="[-c echo '# created by Weave - BEGIN\n# container hostname\n<IP_ADDRESS>        88]"; binds=["/var/lib/docker/containers/885125c15ad23d823021dbdea8b5aea3e89555debe16b19ed0865eeb625bd516:/container"]
DEBU: 2018/10/16 18:03:15.992870 sleeve ->[<IP_ADDRESS>:6783|00:00:00:00:00:02(node2)]: handleHeartbeat
DEBU: 2018/10/16 18:03:16.405025 [allocator 00:00:00:00:00:01]: Allocator.OnGossip: 631 bytes
DEBU: 2018/10/16 18:03:16.475536 [net] ContainerStarted: eb6cf139436671a44d5b4e9dd2fac45663e4827de869699178785d6e1e2c0ba7
DEBU: 2018/10/16 18:03:16.478060 [net] ContainerStarted: eb6cf139436671a44d5b4e9dd2fac45663e4827de869699178785d6e1e2c0ba7
DEBU: 2018/10/16 18:03:16.650522 weave PUT to http://<IP_ADDRESS>:6784/name/885125c15ad23d823021dbdea8b5aea3e89555debe16b19ed0865eeb625bd516/<IP_ADDRESS> with map[fqdn:[885125c15ad2.]]
DEBU: 2018/10/16 18:03:16.650726 Discovered local MAC d6:ed:99:ef:1c:35
DEBU: 2018/10/16 18:03:16.651048 [http] PUT /name/885125c15ad23d823021dbdea8b5aea3e89555debe16b19ed0865eeb625bd516/<IP_ADDRESS>
INFO: 2018/10/16 18:03:16.651150 [nameserver 00:00:00:00:00:01] Ignoring registration 885125c15ad2. <IP_ADDRESS> 885125c15ad23d823021dbdea8b5aea3e89555debe16b19ed0865eeb625bd516 (not a subdomain of node.intern.)

I'm also experiencing this issue.
Additionally, when the system is in this state routing to weave addresses fails with "No route to host".
Weave version: 2.4.1
Docker version: 18.06.1-ce
Linux version: 4.4.0-134-generic (Ubuntu 16.04.5)
Logs:
weave.log
kern.log
docker.log
Potentially interesting factors:
Weave is used as API proxy
Weave is using encryption
Weave is connecting to one peer over a trusted subnet w/ fastdp, all others with encrypted sleeve
System is running prometheus-node-exporter (puts quite a lot of stress on Docker)
Also knocked up a quick script to delete the dangling links (requires pyroute2 and recent util-linux for lsns):
#!/usr/bin/env python

from __future__ import print_function

import subprocess
from pyroute2 import IPRoute

THRESHOLD = 100

if __name__ == "__main__":
        ipr = IPRoute()
        # Enumerate the links, create an ifname lookup table
        links = {x['index']: dict(x['attrs']) for x in ipr.get_links('all')}
        ifs = {v['IFLA_IFNAME']: k for k, v in links.iteritems()}
        # Fetch the index of the 'weave' bridge interface and enumerate it's children
        bridge = ifs['weave']
        veths = [k for k, v in links.iteritems() if v['IFLA_IFNAME'].startswith('vethwepl') and 'IFLA_MASTER' in v and v['IFLA_MASTER'] == bridge]
        # Look up valid netnsids - should find a native way to do this
        output = subprocess.check_output(['lsns', '-t', 'net'])
        lines = output.split("\n")
        valid_netnsids = set(x.split()[5] for x in lines[1:-1])
        int_netnsids = set(int(x) for x in valid_netnsids if x != 'unassigned')
        # Check whether the netnsid on each veth is valid
        valid_veths = set()
        invalid_veths = set()
        valid = invalid = 0
        for idx in veths:
                if 'IFLA_LINK_NETNSID' not in links[idx]:
                        continue
                if links[idx]['IFLA_LINK_NETNSID'] in int_netnsids:
                        valid_veths.add(idx)
                else:
                        invalid_veths.add(idx)
        print("Found {} valid, {} invalid veth pairs".format(len(valid_veths), len(invalid_veths)))
        # Only act if we're above a threshold, to make reproducing easier
        if len(invalid_veths) > THRESHOLD:
                print("More than {} invalid veths; culling them".format(THRESHOLD))
                for idx in invalid_veths:
                        ipr.link('del', index=idx)

Also having this issue, we run weave with nomad in a 3 node cluster and various satellite applications connecting in over weave. But this was caused by setting up a periodic job that ran every minute, so it eventually stopped running, only after taking out the entire cluster :100:
Pretty much identical configuration and logs to @predakanga. The containers are being removed, there is no DNS entries left behind and weave status ipam shows 130 active which matches the number of containers running.
Kinda ironic running the script above using periodic to work around periodic jobs not working lol

@MikeMichel @predakanga @thetooth thanks for providing the logs. I will try to reproduce and do root cause analysis.

Just followed the steps I am able to reproduce the issue. Will try to idetify the cause.

Possibly related, I just SSHed in to find that several (about 10) of our task containers had hung during their launch, over a period of 4 days.
Each hung container looks the same, so I picked a random one to gather information:
Docker lists the container as "running"
The only process running in the container is the weave "/w/w" entrypoint
The stacktrace of the process is attached here: entrypoint stack.txt
The vethwe interface does not exist inside the container (confirmed using docker exec), the standard eth0 veth does exist.
The relevant section of the Weave logs is attached here: entrypoint weave.txt - note that the hung container is ID fd54060031b0, no 'Attaching container' message is ever printed for it

Also knocked up a quick script to delete the dangling links (requires pyroute2 and recent util-linux for lsns):

We're using a bash script, with ip a and ip link delete, to (probably) to the same thing:
#!/bin/bash

ip a | grep 'vethwepl.*\@' -oP | while read -r line ; do
    veth=${line::-1}
    if [[ $veth =~ [0-9] ]]; then
      echo check $veth
      pid=$(echo $veth | tr -dc '0-9')
      if ! ps -p $pid > /dev/null; then
        echo deleting $veth
        ip link delete $veth >&2
      else
        echo $veth still running
      fi
    else
      echo $veth veth has no number in it and will not be deleted
    fi
done

Thanks for the script it removed all the dangling links which were stored by weave

Also knocked up a quick script to delete the dangling links (requires pyroute2 and recent util-linux for lsns):

We're using a bash script, with ip a and ip link delete, to (probably) to the same thing:
#!/bin/bash

ip a | grep 'vethwepl.*\@' -oP | while read -r line ; do
    veth=${line::-1}
    if [[ $veth =~ [0-9] ]]; then
      echo check $veth
      pid=$(echo $veth | tr -dc '0-9')
      if ! ps -p $pid > /dev/null; then
        echo deleting $veth
        ip link delete $veth >&2
      else
        echo $veth still running
      fi
    else
      echo $veth veth has no number in it and will not be deleted
    fi
done

Thanks this script worked and removed all the dangling links stored in weave

Also knocked up a quick script to delete the dangling links (requires pyroute2 and recent util-linux for lsns):

Must have been a good looking script ;)

I have found the cause of this problem in the overnode script. The leaked IP interfaces are left when a container is created via weave docker proxy, but killed and removed via a docker directly. Once I moved the kill and rm to the weave proxy too, I have not seen this problem anymore.


Not able to send message to pub/sub emulator via java/springboot app

I am using the pub/sub emulator to emulate the pub-sub feature of the google-cloud platform before going live in our spring boot application.
Step[1] - running the emulator -
gcloud beta emulators pubsub start --project="$PUBSUB_PROJECT_ID" --host-port="$PUBSUB_EMULATOR_HOST"
-- output --
Executing: cmd /c C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\pubsub-emulator\bin\cloud-pubsub-emulator.bat --host=localhost --port=5189
[pubsub] This is the Google Pub/Sub fake.
[pubsub] Implementation may be incomplete or differ from the real system.
[pubsub] Oct 29, 2021 12:58:51 PM com.google.cloud.pubsub.testing.v1.Main main
[pubsub] INFO: IAM integration is disabled. IAM policy methods and ACL checks are not supported
[pubsub] SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
[pubsub] SLF4J: Defaulting to no-operation (NOP) logger implementation
[pubsub] SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
[pubsub] Oct 29, 2021 12:58:53 PM com.google.cloud.pubsub.testing.v1.Main main
[pubsub] INFO: Server started, listening on 5189

Step[2] - creating the topics/subscription on the emulator using the python repo
python publisher.py my-test-project-id create my-topic-1
python subscriber.py my-test-project-id create-push my-topic-1 my-subscription-1 http://localhost:9700/oranges

-- output --
Created topic: projects/my-test-project-id/topics/my-topic-1
Push subscription created: name: "projects/my-test-project-id/subscriptions/my-subscription-1"
topic: "projects/my-test-project-id/topics/my-topic-1"
push_config {
  push_endpoint: "http://localhost:9700/oranges"
}
ack_deadline_seconds: 10
message_retention_duration {
  seconds: 604800
}
.
Endpoint for subscription is: http://localhost:9700/oranges

Step[3] - sending the message via the springboot app.
@Override
public String sendMessageToPubSubTopic(Request request) {
ByteString byteString = JsonUtil.convert(request);
try {
  PubsubMessage pubsubMessage = PubsubMessage.newBuilder()
	  .setData(byteString)
	  .build();
  log.info("Sending pub/sub message to topic= {} in project= {}",
	  publisher.getTopicName().getTopic(), publisher.getTopicName().getProject());
  return publisher.publish(pubsubMessage).get();
} catch (Exception exception) {
  log.warn("error");
  Thread.currentThread().interrupt();
  throw new Exception("some-bad-exception-occured");
}
}

Now once I send the message to the emulator I get the below exception as soon as the get() method is called in the return statement. can someone advise what is wrong here or with the emulator?
{"ts":"10 29 2021 14:24:43.602","th":"http-nio-9700-exec-1","request":"","":"some_name","api":"POST api/my","user":"dc202734-3895-11ec-b53c-f09e4ac3134cser","level":"INFO","logger":"com.office.cloud.service.impl.PubSubServiceImpl","msg":"Sending pub/sub message to topic= emulator--management-topic in project= my-test-project-id"}
{"ts":"10 29 2021 14:24:47.533","th":"http-nio-9700-exec-1","request":"","":"some_name","api":"POST api/my","user":"de77f9e5-3895-11ec-b53c-f09e4ac3134cser","level":"WARN","logger":"com.office.cloud.service.impl.PubSubServiceImpl","msg":"Failed publishing message for : some_name to pub sub: com.google.api.gax.rpc.NotFoundException: io.grpc.StatusRuntimeException: NOT_FOUND: Resource not found (resource=emulator--management-topic)."}
{"ts":"10 29 2021 14:24:47.541","th":"http-nio-9700-exec-1","request":"","":"some_name","api":"POST api/my","user":"de793266-3895-11ec-b53c-f09e4ac3134cser","level":"WARN","logger":"com.office.cloud.exception.ErrorHandler","msg":"Internal error. com.google.api.gax.rpc.NotFoundException: io.grpc.StatusRuntimeException: NOT_FOUND: Resource not found (resource=emulator--management-topic)..
com.office.cloud.exception.PayrollException: null
	-- work stuff omitted --
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_301]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_301]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_301]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_301]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.8.jar:5.3.8]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.8.jar:5.3.8]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.8.jar:5.3.8]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.8.jar:5.3.8]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.8.jar:5.3.8]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.8.jar:5.3.8]

To use the emulator with Java, some code modifications are required. See our documentation here: https://cloud.google.com/pubsub/docs/emulator#accessing_environment_variables
Did you follow the example listed, and set the credentialsProvider/channelProvider when creating the Publisher?

yes, I followed all the steps listed in the given document. started the emulator first, set the required environment variables and then created the topics/subscription via the python scripts. Once done the following was updated in the backend code -
Configuration file
// DEVELOPER - GCLOUD PUB/SUB CHANGES
// START
@Value("${emulator.pubsub.host}")
String host;
@Value("${emulator.pubsub.port}")
int port;

@Bean(name = "credentialsProvider")
@ConditionalOnProperty(value = "emulator.usePubSub", havingValue = "true")
public CredentialsProvider credentialsProvider() {
  return NoCredentialsProvider.create();
}

@Bean(name = "messageChannel")
@ConditionalOnProperty(value = "emulator.usePubSub", havingValue = "true")
public ManagedChannel messageChannel() {
  final String serviceEndpoint = host + ":" + port;
  log.info("Pub/sub emulator :: service-url = {}", serviceEndpoint);
  return ManagedChannelBuilder.forTarget(serviceEndpoint).usePlaintext().build();
}

@Bean(name = "transportChannelProvider")
@ConditionalOnProperty(value = "emulator.usePubSub", havingValue = "true")
@DependsOn(value = {"messageChannel"})
public TransportChannelProvider transportChannelProvider() {
  return FixedTransportChannelProvider.create(GrpcTransportChannel.create(messageChannel()));
}
// END

application-local.properties
# PUB/SUB
emulator.pubsub.host=localhost
emulator.pubsub.port=5189
emulator.usePubSub=true
spring.cloud.gcp.pubsub.emulator-host=${emulator.pubsub.host}:${emulator.pubsub.port}

a quick catch here is that if I remove the get() method from the below line the messaged is sent to the topic (I believe) but not delivered on the configured push endpoint.
return publisher.publish(pubsubMessage).get();

@hannahrogers-google - did you get a chance to look at it? anyone who can help? it is impacting our development guidelines.

@beena-yatin-kanyal  The code creates a bean transportChannelProvider, but it does not use it anywhere. Inject transportChannelProvider bean into qualifier1() and qualifier2() and set it on the publisher with Publisher.newBuilder(topicName).setChannelProvider(...)

this can be closed now as I have resolved the issue. thanks. To get the pub/sub working on the emulator set the publisher builder with the mock channel provider and credential provider values. Snippet below -
@Bean
@Qualifier(value = "publisher1")
public Publisher publisher1(RetrySettings retrySettings) throws IOException {
TopicName topicName = TopicName.of(projectId, someTopic);
final Publisher.Builder builder = Publisher.newBuilder(topicName)
	.setRetrySettings(retrySettings);
if (usePubSubEmulator) {
  log.info("Setting the {} on pub/sub emulator", someTopic);
  builder.setChannelProvider(transportChannelProvider())
	  .setCredentialsProvider(credentialsProvider());
}
return builder.build();
}

In my opinion, pub/sub emulator documentation needs to be updated.


Add workflow to detect link rot?

I am incubating this in {dm}: https://github.com/cynkra/dm/pull/1671
As can be seen there, this workflow can find the URLs that need to be updated.
Link rot is probably one of the most common source of a NOTE in CRAN's incoming checks, and it'd be good to insure against it in the CI/CD pipeline.

Workflow:
on:
  push:
    branches: [main, master]
  pull_request:
    branches: [main, master]

name: check-link-rot

jobs:
  check-link-rot:
    runs-on: ubuntu-latest
    env:
      GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
      R_KEEP_PKG_SOURCE: yes
    steps:
      - uses: actions/checkout@v3

      - uses: r-lib/actions/setup-pandoc@v2

      - uses: r-lib/actions/setup-r@v2
        with:
          r-version: "devel"
          http-user-agent: "release"
          use-public-rspm: true

      - uses: r-lib/actions/setup-r-dependencies@v2
        with:
          pak-version: devel
          extra-packages: |
            any::rcmdcheck
            any::urlchecker
      - name: Run URL checker
        run: |
          options(crayon.enabled = TRUE)
          rotten_links <- urlchecker::url_check(progress = FALSE)
          print(rotten_links)
          if (length(rotten_links$URL) > 0L) {
            stop("Some URLs are outdated and need to be updated.", call. = FALSE)
          }
        shell: Rscript {0}

WDYT?

Actually, an even better way to handle this would be to make a PR with fixed URLs (using urlchecker::url_update(), the same way we do for snapshots.


Cloudflare Workers template should default to port 8787 on startup

Describe the bug
Currently, the default port is set to 6284 which will fail in Wrangler v2 or greater. The new default should be 8787.
Link to the blitz that caused the error
https://stackblitz.com/edit/cloudflare-templates-csbgu2?file=src%2Findex.ts&terminal=start-stackblitz&title=Workers TypeScript
Steps to reproduce

Start a new project with the Cloudflare Workers starter
On init, the preview will show a Cannot GET / error.
Go to the port switcher in the UI and select 8787
The preview will show as expected.

Expected behavior
The preview should load as expected.
Parity with Local

[X] I have run the project in my local machine and I could not reproduce the issue.

Screenshots
No response
Platform
Browser name  = Chrome
Full version  = <IP_ADDRESS>
Major version = 114
navigator.appName = Netscape
navigator.userAgent = Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36
performance.memory = {
  "totalJSHeapSize": 85293191,
  "usedJSHeapSize": 73852259,
  "jsHeapSizeLimit":<PHONE_NUMBER>
}
Hash = a12d8c69

Additional context
No response

Hi @admah 👋 ! Thanks for reaching out.
The problem here is that we have to guess what the right port is to open. Every framework uses a different port. The logic that we apply, and is up until now almost always correct, is that lower port numbers are usually used for the application itself (which we should show), and higher port numbers are used for communication like HMR and stuff.
So with that in mind, it's possible to change the start-stackblitz script to specify --port 3000 for instance. That will make sure the correct port gets opened by the preview.
Something that gets presedence over us guessing the correct port, is the xdg-open command. I couldn't find an option in wrangler dev to automatically open the browser on startup. But if that would exist, and wrangler spawns xdg-open http://localhost:8787, it will also open that instead of port 6284. This is probably what happens if you press b which is the open a browser action. If you do that, it will also open the correct preview.


Add support for specifying the proxy URL directly.

Yes, I saw the other PR.
This allows passing either an URL or a profile name as the proxy parameter
Fixes  #160

Current coverage is 82.71%

Merging #280 into master will increase coverage by +0.09% as of 10ece34

@@            master    #280   diff @@
======================================
  Files           37      37
  Stmts         4028    4043    +15
  Branches       523     526     +3
  Methods          0       0
======================================
+ Hit           3328    3344    +16
  Partial        143     143
+ Missed         557     556     -1

Review entire Coverage Diff as of 10ece34

Powered by Codecov. Updated on successful CI builds.

Thanks!


replica and Add monitoring vm changes

fix bug where the data was being duplicated for MI as replica was not included in the grouping key
Fix add monitoring vm screen to also filter out sql vms from list

PR Checklist

[ ] Explain your changes, so people looking at the PR know what and why, the code changes are the how.

If adding or updating templates:

[ ] post a screenshot of templates and/or gallery changes
[ ] ensure all steps have meaningful names
[ ] ensure all parameters and grid columns have display names set so they can be localized
[ ] ensure that parameters id values are unique or they will fail PR validation (parameter ids are used for localization)
[ ] ensure that steps names are unique or they will fail PR validation (step names are used for localization)
[ ] grep /subscription/ and ensure that your parameters don't have any hardcoded resourceIds or they will fail PR validation
[ ] remove fallbackResourceIds and fromTemplateId fields from your template workbook or they will fail PR validation

Looks good. Thanks!


[BUG] Unable to create CompletionsOptions in F#

Library name and version
Azure.AI.OpenAI, 1.0.0-beta.5
Describe the bug
The constructor for CompletionsOptions is not visible in F#.
let prompts = ResizeArray [ "Write a catchy and...." ]
let compOpts =
               new CompletionsOptions(
                    Prompts = prompts,
                    Temperature = float 1,
                    MaxTokens = 600,
                    NucleusSamplingFactor = float 1,
                    FrequencyPenalty = float 0,
                    PresencePenalty =  float 0,
                    GenerationSampleCount = 1
                )

The above code does not compile in F# script.
Please ensure API works for F# as well.
Thanks,
Faisal
Expected behavior
Should be able to construct CompletionsOptions in F#
Actual behavior
Does not compile
Reproduction Steps
See code above
Environment
windows 11. .Net 7.0 SDK, Visual Sudio 2019 (latest bits)

thanks. Please add a few F# example in the repo. It will help get others started more quickly.


Popover without curtain throws error when clicking studio button

In cases where a Popover has no curtain, clicking a button in the studio throws an error by trying to instantiate a new popover.
Should we remove this error by allowing a studio button to take over the popoverManager if the existing one has no curtain behind it.
I presume visual improvements are more on the back burner; an ideal solution may be implementing a visual difference between popovers with a curtain and those without.

This is being tracked at #262 :)


refactor: splits templates API into list and fetch by id

Splits templates API into 2: list and getById
Reduces amount of properties for every template in response. It contains only 4 properties that is used on UI:

id
summary
logoUrl
name

~Not tested.~ Fixes #102

DO NOT MERGE it. Because very likely it will broke template detail page on UI as UI currently does not fetch template by id from API.

Probably I could create this extra api endpoints under /v2. To make this  evolution more clear from api perspective and at the same time keeping /v1/templates to keep old clients work without issues. Some people also may have cached version of SPA in their browsers (long lived browser tabs), and their version of client app may try to use older API version

Probably I could create this extra api endpoints under /v2. To make this evolution more clear from api perspective and at the same time keeping /v1/templates to keep old clients work without issues. Some people also may have cached version of SPA in their browsers (long lived browser tabs), and their version of client app may try to use older API version

Great suggestion and I discussed this internally, but for the sake of keeping the scope of this pr small, I suggest we just keep the old version and add the 2 new endpoints you addded.

Changed, now it's safe to merge it


fail to start spice serve command if Datastore isn't ready

Ask
spicedb serve should terminate with code non-zero if Datastore.IsReady() is false on bootstrap
Context
During the development of a Datastore implementation based on MySQL we identified missing seeding that would prevent the Datastore.IsReady() from returning true, signaling that the Datastore is ready to serve operations.
Our surprise was that the deployment of SpiceDB, which runs spicedb serve succeeded, leaving the cluster "Healthy" from a kubernetes perspective, but otherwise completely unable to serve API calls because Datastore.IsReady() would prevent it. In a production scenario this would have caused an incident. From the perspective of the rollout of a new Kube Deployment, we would have expected it to never become healthy.
The proposal is to make sure spicedb serve terminate during the bootstrap sequence if Datastore.IsReady() is false.

I think there could be a bit more discussion about how to fix this.
Another possibility is fleshing out the gRPC health endpoint to make this call so that Pods configured with proper healthiness/readiness probes won't route traffic to these instances until it's all green.
Maybe we could add a boolean --datastore-exit-if-unready so that simple deployments don't need scripts around calling a readiness API.

@jzelinskie from a conceptual perspective of an IsReady() function, I'm OK with that 👍🏻  although I'd be wary of recommending using that for liveness probes (see https://srcco.de/posts/kubernetes-liveness-probes-are-dangerous.html). Fortunately something folks are not forced to adopt it they don't need to.
The challenge I see is that the way Datastore.IsReady() is currently implemented in practice makes it unlikely a deployment will become healthy within a reasonable amount of time: they check whether the database is running at the HEAD migration. From my perspective that's akin to an incorrect system configuration (e.g. if you pass an incorrect flag value to spicedb serve, you return with exit code non-zero, right?), hence my suggestion to terminate the process. I'm not sure I can see a spicedb not having a migration run being in the realm of "a transient state the system will eventually recover from" 😕.
Perhaps the problem here is that IsReady() is not a good fit to check for HEAD migrations?


Pagination on leaderboards is inaccurate

Plugin version: 4.16.2
Description of issue:
When using /jobs top & /jobs gtop the pagination is completely inaccurate.
It's a little hard to explain and hopefully the images attached are clear enough to understand the issue.
/jobs gtop
Only showing 1694 players out of the over 6000 registered users.

/jobs top miner
Showing only 50/1170 players that are in the miner job and not showing all pages.
Additionally, sending the "shows top players by job name." messages is different than the one above in /jobs gtop

I can type jobs gtop and get the first 15, i can't click on pagination because it doesn't work when using scoreboard, i have to use the command. Once guessing the numbers like jobs gtop 50 or 25 or 12, i get no info, but when i pick 8 it shows results, but that's like 120 users, the database shows records for thousands.

9adcc1593e99f3d1d632940dcf70ddba95ea8b15


Add license requirement under the - What do you need to know before you begin section.

Add the requirement for a Microsoft 365 E5 or Microsoft Defender for Office 365 Plan 2 license within the What do you need to know before you begin section.
This is mentioned at the beginning of the article but could easily be missed by users. For more info - https://learn.microsoft.com/en-us/answers/questions/1111420/index.html

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

ID: 59c87455-77af-093a-6fb6-286049aad15a
Version Independent ID: b2690e98-781d-4a27-a9bc-bd621964feb0
Content: Get started using Attack simulation training - Office 365
Content Source: microsoft-365/security/office-365-security/attack-simulation-training-get-started.md
Service: microsoft-365-security
Sub-service: mdo
GitHub Login: @chrisda
Microsoft Alias: chrisda

@JamesTran-MSFT, it might be faster if you did this yourself where you want it. It's super-easy; instructions are here. Just @ include in the comments of your pull request.


'Extract Files' task for Release fails

Environment

Server - VSTS

Agent - Privately hosted

Issue Description
Extract Files task for Release fails
Zip file is 11MB in size and its on a private hosted agent, that is a Windows 2016 Server
Error logs
2018-05-17T21:33:35.1512744Z ##[error]Extraction failed for file: C:\VSTS_DeploymentAgent\A1_work\r1\a_Project-ASP.NET-CI\drop\ABCProject.Web.zip
2018-05-17T21:33:35.1522566Z
2018-05-17T21:33:35.1522820Z ERROR: Can't allocate required memory!

@stephenmichaelf - sounds familiar?

Yes. @atul898 We have seen in the past this is caused by the destination files already existing. Do you clear your drop folder before starting?
@bryanmacfarlane The PR to fix this is here. I thought I had made the FF change but it looks like I didn't or didn't push it. Will get this wrapped up and merged today.

@stephenmichaelf Is this still on the radar?  Looks like the pull request was approved, just needs some merge work?

Is this bug going to be fixed and merged? It looks like a long pending open issue. Any work arounds on this?

My workaround is to use Bash task and do the unzipping with
unzip -qo mystuff.zip

Just came across this issue today, release always fails now as it prompts for input before overwriting each file but with the error message after the prompt reading ERROR: Can't allocate required memory!
Will switch to a shell command or something that can handle overwriting files for now but it would be nice if this fix got merged in at some point.

I get this error in Azure DevOps Release Pipeline with the check "Clean destination folder before extracting" checked.
Log:

2020-03-09T16:50:23.8568707Z Extracting archive: d:\a\r1\a_Task Runner WebJob Debug CI\TaskRunner\TaskRunner.zip
2020-03-09T16:50:23.8569119Z --
2020-03-09T16:50:23.8569537Z Path = d:\a\r1\a_Task Runner WebJob Debug CI\TaskRunner\TaskRunner.zip
2020-03-09T16:50:23.8570269Z Type = zip
2020-03-09T16:50:23.8570569Z Physical Size = 35662565
2020-03-09T16:50:23.8570795Z
2020-03-09T16:50:23.8570980Z
2020-03-09T16:50:23.8571283Z Would you like to replace the existing file:
2020-03-09T16:50:23.8571672Z   Path:     d:\a\r1\a\TaskRunnerFiles\Azure.Core.dll
2020-03-09T16:50:23.8572063Z   Size:     123256 bytes (121 KiB)
2020-03-09T16:50:23.8572403Z   Modified: 2020-02-10 16:45:50
2020-03-09T16:50:23.8572748Z with the file from archive:
2020-03-09T16:50:23.8573068Z   Path:     Azure.Core.dll
2020-03-09T16:50:23.8573391Z   Size:     123256 bytes (121 KiB)
2020-03-09T16:50:23.8577344Z   Modified: 2020-02-10 16:45:50
2020-03-09T16:50:23.8577793Z ? (Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename all / (Q)uit?
2020-03-09T16:50:23.8578226Z Archives with Errors: 1
2020-03-09T16:50:23.8578482Z
2020-03-09T16:50:23.8580380Z
2020-03-09T16:50:23.8580956Z ERROR: Can't allocate required memory!
2020-03-09T16:50:23.8581743Z Error: Extraction failed for file: d:\a\r1\a_Task Runner WebJob Debug CI\TaskRunner\TaskRunner.zip
2020-03-09T16:50:23.8582574Z code: 2
2020-03-09T16:50:23.8634534Z ##[error]Extraction failed for file: d:\a\r1\a_Task Runner WebJob Debug CI\TaskRunner\TaskRunner.zip
code: 2

I am currently suffering from this issue also. I will work around in the shell but this issue should really be fixed. Open for 2 years now :-(

As a workaround, I moved the extract and the subsequent tasks to a different agent job. That solved the issue.

poke

We are facing the same issue with this task in a deployment job. When will this be resolved?


RuntimeError('threads can only be started once',)

Hi,
I am having this strange problem, I am writing tests on restarting a websocket enabled CherryPy server, and for some reason, when I by using runpy.run_module starts a new process instance, I get the "threads can only be started once"-error. But strangely, not in the first instance, which I am careful to properly clean up. Not sure how anything could be carried over to the new process, but I started barking up every tree in the end.
So this is the initialization:

I have these in the config for the relevant path:
     "tools.websocket.on": True,
     "tools.websocket.handler_cls": MessageWebSocket

I start the engine like this, fairly conventional, I'd think:
 cherrypy._global_conf_alias.update(_web_config)
 WebSocketPlugin(cherrypy.engine).subscribe() # If I remove this row, CherryPy restart nominally
 cherrypy.tools.websocket = WebSocketTool()

 cherrypy.quickstart(_root, "/", _web_config)

And then I get this  'threads can only be started once', error in WebSocketPlugin, when it called start, I have added a condition there to just make it work for now, obviously that is not a long-term solution:
 def start(self):
     self.bus.log("Starting WebSocket processing")
     self.bus.subscribe('stop', self.cleanup)
     self.bus.subscribe('handle-websocket', self.handle)
     self.bus.subscribe('websocket-broadcast', self.broadcast)
     if not self.manager._started.is_set(): # this row added by me
         self.manager.start()

Any ideas? It seems very strange that only web socket would fail, could it be that it doesn't release something properly in the first process instance?  Which has already called os._exit() by this time, and I get no issues with sockets kept open either.

Ok. I have now verified that it calls it twice in the second process instance, and not in the first.
AFAIK they are identical, the application is calling itself. Weird.

Ok # 2: Now, I have no idea why this works:
But manually calling the web socket plugin instance's unsubscribe method in the first process instance, causes WebSocketPlugin.start() to only be called once. Now I don't need to change anything.
But shouldn't the WebSocketPlugin be automatically unsubscribed? The old process is dead, is there some handler somewhere I don't know of that is locking something? Many questions.

Heya,
i'm trying to make my head around your issue here. Would you have a simple example demonstrating the behavior I could run on my side? Also, which versions of Python/CP/ws4py are you running?

It is a really complicated setup with multiple processes, so I am having problems making a reproducible example, it seems to have something to do with orphaned sockets, but I am not sure. I'll be back.


docs: create new docs site with astro

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

#537  👈
#402 : 2 other dependent PRs (#403 , #533 )
#504 : 1 other dependent PR (#499 )
main

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

Join @boneskull and the rest of your teammates on  Graphite


Add DCC integration

This likely depends on the following issues:

[x] #9
[ ] #10

But, we would want the UIs to be integrated in the following applications.

[ ] Blender
[ ] Gaffer
[ ] Natron
[ ] Houdini
[ ] Katana
[ ] Maya
[ ] Nuke

The commercial DCCs would require licenses, so we may only be able to do this if we have valid licenses donated to us, or someone with valid licenses to develop the integrations. Also, we would need to figure out what are the versions that we will support (latest, latest + X releases, etc).
Preferably, each integration should integrate with the C/C++ API (if provided), and then the Python API. If the applications also have other languages (such as Maya's MEL), then we might want to consider supporting that, or explicitly stating that we do not support it.

Hi @scott-wilson this is wonderful tools. Anyway for example if I want to ship openchecks python package in blender addon, will it require to have rust as well?

Hi @scott-wilson this is wonderful framework. Anyway for example if I want to ship openchecks python package in blender addon, will it require to have rust as well?

Yup. However, I've made sure to publish compiled binaries for Linux, Windows, and macOS. So, all you should need to do is either pip install the library or vendor it with the rest of the code, and it should work as expected without having to be in Rust land.

ah great then, I'll try tinkering with it this weekend and will let you know. Thanks


Added sum-of-numbers.cpp

Why:
Closes #1058
What's being changed:
Added sum-of-numbers.cpp
Check off the following:

[ ] I have reviewed my changes in staging (look for "Automatically generated comment" and click Modified to view your latest changes).
[ ] For content changes, I have completed the self-review checklist.

Stopping the input stream in this code is done with EOF. After a new commit the input stream is stopped by pressing Enter


[BUG] Opening Live Container with SideJIT does nothing

Describe the bug
Live Container should run app with JIT after opening Live Container with SideJIT shortcut. It instead returns to the home screen and does nothing (no error message - app works as if nothing happened). If I close and reopen Live Container again without JIT it errors out saying "JIT was not enabled".
Instructions to reproduce
Using iOS 17.3 running SideJITServer on MacOS 14.3. Select app and press play button. Open SideJIT shortcut and select Live Container while in shortcut. The shortcut should open Live Container and proceed to do nothing.
What version of LiveContainer are you using?
Version 2.0-release (main/5229b30)
Other info
No response

Duplicate with #31

If you have JIT-less setup, it might not work properly. If your app needs JIT, start it first then enable JIT.

JIT now works with SideJIT in the latest update ebea623 (tested with Pojav). JIT-less doesn't work though for some reason... 🤔
Thank you! 😄


Feature/pipeline build role support

Issue #, if available: #254
Description of changes: added support for IAM policies for CodeBuild role generated in pipelines.
Updated helm chart versions:
INFO  Chart argo-cd-4.10.6 is at the latest version.
INFO  Chart appmesh-controller-1.5.1 is at the latest version.
INFO  Chart cert-manager-1.9.1 is at the latest version.
INFO  Chart base-1.14.3 is at the latest version.
INFO  Chart istiod-1.14.3 is at the latest version.
INFO  Chart tigera-operator-v3.23.3 is at the latest version.
INFO  Chart metrics-server-3.8.2 is at the latest version.
INFO  Chart aws-load-balancer-controller-1.4.4 is at the latest version.
INFO  Chart nginx-ingress-0.14.0 is at the latest version.
INFO  Chart velero-2.31.1 is at the latest version.
INFO  Chart gatekeeper-3.9.0 is at the latest version.
INFO  Chart karpenter-0.14.0 is at the latest version.
INFO  Chart kubevious-1.0.11 is at the latest version.
INFO  Chart aws-efs-csi-driver-2.2.7 is at the latest version.
INFO  Chart keda-2.8.1 is at the latest version.
INFO  Chart aws-privateca-issuer-1.2.2 is at the latest version.
INFO  Chart external-dns-6.7.5 is at the latest version.
INFO  Chart gatekeeper-3.9.0 is at the latest version.
INFO  Chart secrets-store-csi-driver-1.2.3 is at the latest version.

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

/do-e2e-tests


improve perf

did some perf benchmarking earlier and noticed using wayfarer was decreasing throughput by ~30%. Talked to @hughsk and some low hanging fruit for optimization is:
cache default routes
Default routes should be cached when called; right now it's doing a double traversal which makes default routes twice as expensive as regular matches. https://github.com/yoshuawuyts/wayfarer/blob/master/index.js#L52-L56
remove .apply
Arguments / apply is very expensive; it should be removed in favor of default args a la https://github.com/Gozala/events/blob/master/events.js#L71-L86
remove array creation from trie
This one is trickier. Creating arrays is expensive, and the trie.js implementation does it all over the place. This should be replaced with manual splitting of values (not sure how, but SO to the rescue I guess).
If anyone has any other suggestions on how to improve perf; suggestions are welcome!

this is probably fast enough tho; not interested in speeding all of this up right now - bigger fish to fry


feat) added self-update command

Current coverage is 60.77% (diff: 40.00%)

Merging #37 into master will decrease coverage by 1.85%

@@             master        #37   diff @@
==========================================
  Files            13         14     +1
  Lines           297        311    +14
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
+ Hits            186        189     +3
- Misses          103        114    +11
  Partials          8          8

Powered by Codecov. Last update 47ce5f2...7df8fd2

approved


Python client generation errors openapi generator

The python openapi generator is failing to generate code with the following error;
$ openapi-python-client  generate --path  ./horreum-api/target/generated/openapi.yaml
Generating horreum-rest-api-client
Error(s) encountered while generating, client was not created

WARNING parsing GET /api/experiment/run within experiment.

Cannot parse response for status code 200 (Could not find reference in parsed models or enums), response will be ommitted from generated client

Reference(ref='#/components/schemas/ExperimentResult')

WARNING parsing GET /api/experiment/{testId}/profiles within experiment.

Cannot parse response for status code 200 (Could not find reference in parsed models or enums), response will be ommitted from generated client

Reference(ref='#/components/schemas/ExperimentProfile')

WARNING parsing POST /api/experiment/{testId}/profiles within experiment. Endpoint will not be generated.

Could not find reference in parsed models or enums

Reference(ref='#/components/schemas/ExperimentProfile')

Unable to process schema /components/schemas/ComparisonResult:

Cannot take allOf a non-object

Failure to process schema has resulted in the removal of:
/components/schemas/ComparisonResult
/components/schemas/ExperimentResult

Unable to process schema /components/schemas/ExperimentComparison:

type array must have items defined

Failure to process schema has resulted in the removal of:
/components/schemas/ExperimentComparison
/components/schemas/ExperimentProfile

Schema(title=None, multipleOf=None, maximum=None, exclusiveMaximum=None, minimum=None, exclusiveMinimum=None, maxLength=None, minLength=None, pattern=None, maxItems=None, minItems=None, uniqueItems=None, maxProperties=None, minProperties=None, required=None, enum=None, type=<DataType.ARRAY: 'array'>, allOf=[], oneOf=[], anyOf=[], schema_not=None, items=None, properties=None, additionalProperties=None, description='Model JSON configuration', schema_format=None, default=None, nullable=False, discriminator=None, readOnly=None, writeOnly=None, xml=None, externalDocs=None, example=None, deprecated=None)

Unable to process schema /components/schemas/TableReportData:

type array must have items defined

Failure to process schema has resulted in the removal of:
/components/schemas/TableReportData

Schema(title=None, multipleOf=None, maximum=None, exclusiveMaximum=None, minimum=None, exclusiveMinimum=None, maxLength=None, minLength=None, pattern=None, maxItems=None, minItems=None, uniqueItems=None, maxProperties=None, minProperties=None, required=None, enum=None, type=<DataType.ARRAY: 'array'>, allOf=[], oneOf=[], anyOf=[], schema_not=None, items=None, properties=None, additionalProperties=None, description=None, schema_format=None, default=None, nullable=False, discriminator=None, readOnly=None, writeOnly=None, xml=None, externalDocs=None, example=None, deprecated=None)

autoflake failed

Traceback (most recent call last):
  File "/home/johara/.local/bin/autoflake", line 5, in <module>
    from autoflake import main
  File "/home/johara/.local/lib/python3.11/site-packages/autoflake.py", line 105, in <module>
    frozenset(standard_package_names()) - IMPORTS_WITH_SIDE_EFFECTS | BINARY_IMPORTS
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/johara/.local/lib/python3.11/site-packages/autoflake.py", line 75, in standard_package_names
    for name in standard_paths():
  File "/home/johara/.local/lib/python3.11/site-packages/autoflake.py", line 65, in standard_paths
    yield from os.listdir(path)
               ^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/lib64/python3.11'

Fxied by: https://github.com/Hyperfoil/Horreum/pull/1067


Clean up node encoding

https://github.com/LimeChain/Fruzhin/blob/1d6063f408e04e4e7da814f1a88d454250558f1e/src/main/java/com/limechain/trie/structure/decoded/node/DecodedNode.java#L70-L87
I find this awful to read, so I'm open for suggestions on how to approach it better.

https://github.com/LimeChain/Fruzhin/blob/1d6063f408e04e4e7da814f1a88d454250558f1e/src/main/java/com/limechain/trie/structure/decoded/node/DecodedNode.java#L128-L136
I'm sincerely confused by this little detail, but I guess we could simply disregard this TODO (or turn it into a NOTE for intentionality purposes). Any opinions are welcome.

https://github.com/LimeChain/Fruzhin/blob/1d6063f408e04e4e7da814f1a88d454250558f1e/src/main/java/com/limechain/trie/structure/decoded/node/DecodedNode.java#L138-L154
That's another weird instance of "I have no idea why we're doing this that way".

Generally, one last thing remains suspicious: too little SCALE encoding is happening overall when encoding the node to obtain it's node_value, compared to what the spec prescribes. Especially for the subvalue part, which has also previously been noticed to be incorrect. So if we're okay with being able to replicate what happens in Smoldot for example, then we're good with that and could also not bother.


Fix long release automation trigger for Aqara Mini button

Corrected LONG_RELEASE in b1acn01 device to COMMAND_RELEASE.  Previously both long press and release would fire simultaneously as they were both tied to COMMAND_HOLD.
I've checked this with the b1acn01 button device. but have not confirmed with the AQ3 switch.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 83.724%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
6857

Relevant Lines:
8190

💛  - Coveralls

Codecov Report
Base: 83.72% // Head: 83.72% // No change to project coverage :thumbsup:

Coverage data is based on head (beca8c8) compared to base (f6ab87e).
Patch has no changes to coverable lines.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
Additional details and impacted files
@@           Coverage Diff           @@
##              dev    #2215   +/-   ##
=======================================
  Coverage   83.72%   83.72%
=======================================
  Files         257      257
  Lines        8190     8190
=======================================
  Hits         6857     6857
  Misses       1333     1333

Impacted Files
Coverage Δ

zhaquirks/xiaomi/aqara/sensor_switch_aq3.py
76.92% <ø> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.

Looks like the device automation triggers were always wrong. Looking at Z2M, I think https://github.com/zigpy/zha-device-handlers/blob/dev/zhaquirks/xiaomi/aqara/sensor_swit.py should also be changed.
Can you also do that in this PR?

Maybe also in thirdreality?:
https://github.com/zigpy/zha-device-handlers/blob/f6ab87e1c48ccb6db262e8732ca6b63d67fb6252/zhaquirks/thirdreality/button.py#L113

I'll address the other Aqara mini button and ThirdReality buttons in a separate PR.
I suspect the ThirdReality one was just copy-pasted from the Aqara one.


 When's your ICO? 😂

Hi there @tayvano 💩
The ISD (Initial Shit Distribution) just happened! I used an innovative method in which people earned SHIT by posting about it on social media and coding the distributions in the constructor of the contract https://etherscan.io/address/0xef2e9966eb61bb494e5375d5df8d67b7db8a780d#code so while there are few transactions, the SHIT has been spread far and wide!
Also HUGE fan of MEW!!! I would like to send you some 💩 for all your amazing work advancing our beloved Ethereum community. Please let me know your MEW address 💩💩💩
Look forward to seeing SHIT listed in MEW. Please help spread it far and wide from your friends, to charities, your loved ones, meaningful projects, and hedge funds of course!

Alright fucker, you better send some to the donation address. 😂

You get in mostly because you did 100x as much work as legit tokens. 🥇

Woohoo!!! I have sent you a large pile of 💩💩💩💩💩 Please spread 💩 far and wide 😂😂😂
Let's get this listed and go to Uranus!! We can be #1 on CoinMarketCap soon. Welcome to the rockets ship!
Please join our growing community of Shitheads on Slack https://shitcoin-slack-invite.herokuapp.com
https://etherscan.io/tx/0x2727a8c51c2dae5c90ab582c7de66a855a4b2893514b0b839c197ca0d2c2d057


Broken master CI

@mtrmac #24 broke master CI, we should look into it

https://travis-ci.org/projectatomic/skopeo/builds/118111300 apparently failed because of
Broadcast message from root@testing-gce-62837a88-d47b-4070-8588-9fddab31a890

	(unknown) at 23:04 ...

The system is going down for power off NOW!

Is there a way to rerun the test in Travis?

not sure, I'm about to merge and we'll see if it's fixed


Oliinyk / Form of learning feature

https://github.com/ita-social-projects/OoS-Backend/issues/1364
https://github.com/ita-social-projects/OoS-Backend/issues/1365
https://github.com/ita-social-projects/OoS-Backend/issues/1366
https://github.com/ita-social-projects/OoS-Backend/issues/1367

Add formOfLearning to workshop & form
Add formOfLearning to details and card
Add formOfLearning filter & state, util sorting method for using in keyvalue pipe

Will be merged with https://github.com/ita-social-projects/OoS-Backend/pull/1370


WFLY-16607 Application deployment fails with EJB (WFLYEJB0275: Could …

…not resolve corresponding ejbCreate or @Init method for home interface)
https://issues.redhat.com/browse/WFLY-16607
Port the fix from main branch https://github.com/wildfly/wildfly/pull/15756

Thanks @chengfang