Wow64 wrappers for all FS API calls

This wraps file system API calls with wrappers that disable Wow64 redirection.  Prior to this change, enumeration disabled redirection, so the UI is populated with "real" file system contents, but attempting to query or manipulate those contents was still subject to redirection, creating inconsistent and unexpected results.
To test this I created a directory in \Windows\System32\test, compiled as 32 bit, and attempted to work through as many operations as I could think of.
Note there's an alternative approach of using the preprocessor to automatically remap FS APIs to use wrappers.  That's not my preferred approach, but it is an option.  After this change it's basically a bug to call the FS API without using these wrappers.

One minor general thing. The prefix for all call abstraction in Winfile is WF. You chose Wf, which is also fine but different and lets my nit-pick heart suffer ;-)

Agree with the overall premise.  Winfile already has a wrapper for many functions such as WFFindFirst.  Why not extend that set of functions instead of creating another layer of wrappers.
Also, what is the purpose of WfWowInitialize?  What version of Windows would this be necessary?

I guess for a few functions the new layer is needed like CreateFile, for some the already existing one could be re-used, and thus making it more lean

The big concern I have with these changes is future code changes that don't call the wrappers, which will result in very subtle bugs that only affect specific paths.  For that reason, part of me thinks this should just do something like #define GetFileAttributes WFWowGetFileAttributes in winfile.h to make doing so inexpressible.
I was hoping that following Win32 and doing just one thing with a clear pattern would make this more likely to be followed.  The existing wrappers aren't used that consistently: we have one "common" function for enumeration and four callers to FindFirstFile directly; we have a WFIsDir and two call sites that call GetFileAttributes to do the same thing directly; CreateFile called from five places; DeleteFile called from three; we have an ExecProgram that calls ShellExecute but it's also called for print and ShellExecuteEx for file properties.  Etc.
As for WfWowInitialize, it's needed for XP and below.  That's still something my builds are targeting but I can remove it here if others think it doesn't belong.  One thought I had is that this code should be under #ifndef _WIN64 or somesuch so only 32 bit builds generate API calls.

Agreed. You are right with the wrappers on every function. Now I see two reasons

We can easily introduce an #ifndef _WIN64, which I think would be nice, so that only 32bit builds are affected
Having PVOID pOld; and the calls to Wow64(Disable|Revert)Wow64FsRedirection bloats things.

I would keep WfWowInitialize() and related hydraulics, but have it under an #ifdef, because

it is easier to maintain if you have one version for many plattforms
but also separates in a way legacy coding and recent coding.

I don't mind using #ifdef WINVER or similar.
My 2c though is that having one piece of code is generally better than two, but we should accept two if the "old" thing becomes unduly burdensome on the 99% of people who aren't using it.  With GetProcAddress, I never found the burden: the binary needs the function name either way, and needs to resolve it into a function pointer either way.  The real cost is the same as the benefit, which is enabling/requiring the code to check for the presence of a function before calling it.  That might be a big burden if there's two sophisticated pieces of logic following the check, but for cases like this ("call this function if it's there, otherwise do nothing") it just never seemed to make code hard to read or execute.

WOW64 redirection means in normal operation, calls to \Windows\System32 are redirected to \Windows\Syswow64 when winfile is compiled as a 32 bit binary.  In the current code, it disables this for enumeration, so the UI displays the "real" System32 contents in \Windows\System32 and the "real" Syswow64 contents in \Windows\Syswow64.  But many operations outside of enumeration end up redirected, so if the user operates on \Windows\System32\notepad.exe winfile ends up operating on \Windows\Syswow64\notepad.exe .
For many cases, like running notepad, the user is unlikely to notice.  And it's unlikely that the user would want to manipulate objects in System32.  But when System32 and Syswow64 diverge, the seams become clear.  You can't run ssh, because it's only in the 64 bit System32, so when redirection is applied there's nothing to redirect to.  A file's size in \Windows\System32 is displayed differently in winfile compared to the file's properties, because winfile obtained it via enumeration (the 64 bit version) but is displaying properties with redirection enabled (the 32 bit version.)  You can create a directory "foobar" under System32 but the creation is redirected to SysWow64 so the directory you just created doesn't exist in the UI.  Etc, etc.
This PR came from a comment in #327 where it's querying file attributes to check for a directory, but this query has redirection enabled, whereas the original population had redirection disabled, so it's possible that an object doesn't exist or is a different type when queried via GetFileAttributes.
This PR attempts to ensure redirection is consistently disabled, although my biggest fear is new code changes which don't call through the wrappers.  If that happens, it means that specific piece of code will issue operations against \Windows\Syswow64 when it intended to issue operations against \Windows\System32.  The failure mode is impossible to predict, it just depends what the new code is adding.
Note this is all specific to 32 bit versions of Winfile.  If the Winfile binary is the same architecture as the host OS, no redirection is needed or applied, so all of its calls will resolve consistently.  I think that even Arm64 doesn't redirect x64 binaries, since System32 consists of CHPE binaries that are used for both.

Many good arguments for one side or the other.
I guess it's not up to having 99% not use it, but on the definition of what this branch shall support:

32bit
64Bit
Win7/Win10/win11

For 32bit we currently have a malfunction look, so the changes are needed.
For 64 bit I would decide in the wrapper for wow(enabled/revert) to issue the real call via an #ifndef WIN64, because we don't know what time tag is behind the real call in the OS
In both cases we have the price tag of the internal wrapper, but this can be neglected. This is O(1) so forget it.
Following my own rules from above and malxaus proposal of keeping it only in his branch, the Wowinitialze should only be available in malxaus branch.
But if it eases malxaus daily work in maintaining the w2k/wxp branch I am also fine with an #ifdef over wowinitialze.

Of the 17 calls in question (WFWow*), 10 of them have existing "wrappers" which can be modified with the Wow redirection logic and 1 has a partial match (WFSetAttr).  The other 6 would have new wrappers, which mostly would fit along side the other ones.
That would be one way to "have only one level of wrappers".

@malxau: Will you change something on this issue, or is it completely stuck?
Should I come up with an alternative 'single layer' wrapper?

I would prefer a solution similar to what I outlined above.


To-Do App

Describe the project you want to add with tech stack
I want to contribute for To-Do app in this repository. Please assign me this issue so that I can contribute to this repository.

@sumitbaroniya it is already assigned to @psb27, please find some other issue to contribute


Ability to manually configure IP address

I use PresenceLight with a Yeelight lightbulb outside my homeoffice door. When the bulb is found using "Find Yeelights", PresenceLight works brilliantly, but regularly it fails to find the bulb and I have not been able to determine why this is.
Please could you add the option to manually specify the IP address of the lightbulb on the Configure Yeelight page, rather than using Find Yeelights. The bulb has a fixed IP address so once setup this would never need to be configured again.
Thankyou

Sadly there is no natural way to obtain a light by IP address alone, as the Yeelight API package does not support that. When you say you PL does not find the light, is there an error that you get at all in the logs?

Same happens for me. I do not get any error in the logs, this is my latest trial to add Yeelight LED strip:
{"Timestamp":"2023-12-18T11:23:40.5586231+01:00","Level":"Information","MessageTemplate":"Yeelight Light Retrieval Initialized","Properties":{"SourceContext":"PresenceLight.Razor.Pages.CustomApiSetup","Application":"PresenceLight"}} {"Timestamp":"2023-12-18T11:23:41.8675734+01:00","Level":"Information","MessageTemplate":"Yeelight Light Retrieval Successful","Properties":{"SourceContext":"PresenceLight.Razor.Pages.CustomApiSetup","Application":"PresenceLight"}}
My Yeelight is on a different (IoT) VLAN though, so this might be due to my network configuration. Although I've opened comms betweent the IoT and Main VLANs, and can ping the device from the computer, PL is not able to find it automatically. If I put both devices on the same VLAN, it works perfectly and keeps working even after I reconnect the computer to main VLAN, until I sleep/turn off the computer. After that I again need to connect to IoT VLAN, find Yeelight and reconnect computer to main VLAN.
Perhaps someone with similar experience and more experience in networking can point me to a root cause?

I have an update. When I posted my comment 3 days ago, I did the "sync process" (switched PC to IoT VLAN, set up yeelight, switched back to main VLAN). Since then, the light is working okay, I can see it in PL app, everything seems to be fine. There was no update to PL app nor light firmware for past few months, but there were a couple of updates to my router firmware, so this was obviously caused by me setup.


[WIP] Optimize doc updates

Overview
Optimize document updates by reducing the number of times couch_key_tree:stem/2 is called along with improving the performance of couch_key_tree:stem/2.
For the first part this mostly just involves ensuring that we pass paths to couch_key_tree:merge/2 in a specific order and then stem after we're done merging (if required, in the prep_and_validate_replicated_updates a stem is not needed so is avoided entirely).
For the second part, the old stemming algorithm worked by completely disassembling the tree and then reassembling it one path at time by merging back into a tree accumulator. The new algorithm is a recursive descent into the tree tracking depth and distance from leaves while unwinding the stack. This allows us to convert the O(N^2) approach from merging all branches back into the tree into an O(N) approach since we only ever visit each node once. There are graphs coming that demonstrate this quite nicely.
Testing recommendations
make check
Also going to be doing some more thorough performance analysis to cover even more bases.
Checklist

[x] Code is written and works correctly;
[x] Changes are covered by tests;
[x] Documentation not required given its an optimization not a behavior change;

As promised, here's a before and after using the bechmarking script at [1]. What this does is create a large number of branches in the revision tree that are all three revisions deep which is a in the pretty terrible place for couch_key_tree to handle.
Also of note, this work will likely mostly only improve the situation for documents wiht lots of conflicts. Documents that have never had conflicts will likely not benefit much or at all from this patch set.
[1] https://gist.github.com/davisp/819a8542f210a5db35067c798c69b9a4

@kocolosk Toying with the idea of removing the stem vs full_stem distinction by checking for duplicate keys. Looks like you looked at this earlier once but I've gone and replaced the khash with an Erlang set after some micro profiling showed it wasn't a huge difference in speed (~10ms with 5k lookup/insert ops). Felt kinda icky using a khash for that to begin with.

Also the silly microbenchmark for khash vs sets is here:
https://gist.github.com/davisp/e0d78cad59919c8fcea95de3ab540a2c

I looked into adding property tests for key tree module: https://github.com/apache/couchdb/pull/1144

No longer WIP. @nickva @kocolosk Either of you want to take a re-gander at this. Should be a lot simpler now with the property tests and automatic tree repair.

Blargh, I thought it didn't do that merge master with the easy button. Oh well, restarting CI I guess.


Channel Tabs Issue: Plugin Crashes Discord

Describe the bug
After enabling the plugin and if any of the channel tabs plugin button/features are used, the Discord Client crashes.
To Reproduce
Steps to reproduce the behavior:

Enable Plugin
Click on Channel Tabs Buttons
Discord Crashes

Expected behavior
For discord to not crash
Information (please complete the following information):

MacOS
Plugin Version: v2.6.2
Discord version: Stable
Compact Mode enabled? Yes & No (crashes either way)

Screenshots
https://user-images.githubusercontent.com/97180817/212236939-f607f31b-2ac8-4d26-872e-dc8eb89ca39c.mp4
https://user-images.githubusercontent.com/97180817/212237027-4be7dc8f-34c7-4076-91a4-3a356419dda2.mp4

same when you hover the appearence

it works for me but crashes discord when idle


[CELEBORN-647][BUG] Fix potential NPE when remove push status

What changes were proposed in this pull request?
Fix potential NPE when remove push status
Why are the changes needed?
Does this PR introduce any user-facing change?
How was this patch tested?

ping @RexXiong


Fix a typo: add attribute separate space to

I just found a typo, so fix that.

Not here. it's wrong place to PR... 😢


Whitelist Issuer Contract

contract of the issuer box for the minting of different whitelist tokens
code can be repurposed from the token issuer contract with minor modifications.


Proposed 0.32.0-b13

[Current coverage][cc-pull] is 69.00%

Merging [#1717][cc-pull] into [develop][cc-base-branch] will increase coverage by 0.35%

2 files (not in diff) in src/ripple/websocket were modified. more

Misses +8
Hits -8

2 files (not in diff) in ...ipple/protocol/tests were modified. more

Hits -2

2 files (not in diff) in ...ripple/protocol/impl were modified. more

Misses -6
Hits +6

2 files (not in diff) in src/ripple/ledger were modified. more

Misses -7
Hits +7

2 files (not in diff) in ...ipple/app/paths/impl were modified. more

Misses -11
Hits +11

1 files (not in diff) in src/ripple/app/paths were modified. more

Misses -1
Hits +1

3 files (not in diff) in src/ripple/app were modified. more

Misses +1
Hits -4

4 files (not in diff) in src/ripple were modified. more

Misses +8
Hits -9

2 files in ...c/ripple/ledger/impl were modified. more

Misses -4
Hits +4

2 files in src/ripple/core were modified. more

Misses -5
Hits +5

@@            develop      #1717   diff @@
==========================================
  Files           863        864     +1
  Lines         61516      61967   +451
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
+ Hits          42233      42758   +525
+ Misses        19283      19209    -74
  Partials          0          0

[][cc-pull]

Powered by Codecov. Last updated by [b12d157...2553aa4][cc-compare]
[cc-base-branch]: https://codecov.io/gh/ripple/rippled/branch/develop?src=pr
[cc-compare]: https://codecov.io/gh/ripple/rippled/compare/b12d1570a790864ef74512b8b5b99d20458e1635...2553aa4a816f57aa57234d896f7c9097dfcd361a
[cc-pull]: https://codecov.io/gh/ripple/rippled/pull/1717?src=pr


feat(definition): go to imported function

Current dependencies on/for this PR:

2023-07-02-local-function-def

PR #79   👈

This comment was auto-generated by Graphite.


TypeError: 0 is read-only

Caesars Cipher
https://www.freecodecamp.com/challenges/caesars-cipher#?solution=...
Running test gives TypeError: 0 is read-only
When testing script in the browser console it works fine. This error appears ONLY when testing on FCC with the solution from the link above. After some debugging it appears that the error is caused by  str[i] = ...
Browser Information

Browser Name, Version: Firefox 47.0
Operating System: Linux Mint 17.3
Mobile, Desktop, or Tablet: Desktop

Your Code

function rot13(str) { // LBH QVQ VG!
  for (var i = 0; i < str.length; i++) {
    var charCode = str.charCodeAt(i);
    if(charCode >= 65 && charCode < 78) {
      charCode += 13;
    } else if (charCode >=78 && charCode < 91) {
      charCode -= 13;
    }
    str[i] = String.fromCharCode(charCode);
  }
  return str;
}

// Change the inputs below to test
rot13("SERR PBQR PNZC");

Screenshot

@kvanderkamp you say you only get this error on FCC. Does the code work elsewhere? The reason I ask is because it seems like this error is due to a string being immutable (unable to be changed) in Javascript. By doing str[0] = ... you are trying to assign a new value to the first letter of the string which is not possible in Javascript.

I'm curious why it doesn't give a TypeError in the browser console or this CodePen, which got me confused. You're right about trying to replace a letter, I'll find another way to do this.

I suppose this issue can be discarded.


Right-click menu on layers

I think the ability to right-click on a layer and select operations would provide a more natural interface.  When right-clicking, they would view a menu of "layer operations".  Operations that come to mind:

Rename
Alter layer style (see #126)
Alter layer properties (see #140)
Zoom to layer
Zoom to selection

I struggle to come up with a good rule of what operations should go in the top menu bar and which should go as a right-click menu. I'm thinking operations that alters the state of an existing layer should go in the right-click menu.  Anything that produces a new layer or performs analysis on a selection of layers should remain in the upper menu bar.  Basically, the menu bar is for things that run ON layers, right-click is for things that happen TO layers... if that makes any sense.
I could also see the Save operations going in the right-click menu (for some reason, to me it feels a bit out of place in the top bar), but I don't feel completely confident about that.

I agree - the right-click would be much more useful to show ON layers instead of having a mixture of operations on the upper menu.
I experimented with this for a bit and using this as an entry point

Yeah, I skimmed through the first link that came up from google, it seems pretty do-able.  I like our menus and definitely think we could make some minor modifications to the Menu class to allow it to be a right-click menu.  Agreed that they should be defined in AppController

As we add more geo operations, I'm also starting to wonder if geo should take on it's own menu type. Potentially something that sits along the layerlist sidebar, rather than a main menu. Honestly if we can move away from menu-bar menus that would be awesome.
Here's what I'm thinking:

Yeah, I think a side bar could be a good idea.

Going to make this another issue #151

Right click context menus were added in #211!


"Exception ignored" (suppressed) (should crash)

Versions

Python: 3.6.6
OS: Windows 10 x64 (1803, build 17134.285)
Kivy: 1.10.1
Kivy installation method: Pip

Output from pip freeze:
certifi==2018.8.13
chardet==3.0.4
docutils==0.14
idna==2.7
Kivy==1.10.1
Kivy-Garden==0.1.4
kivy.deps.glew==0.1.10
kivy.deps.sdl2==0.1.18
Pygments==2.2.0
requests==2.19.1
urllib3==1.23

Description
Any exception raised upon the change of a TextInput (via the callback pattern) is suppressed.
I would expect the program to crash; the fact that the program does not crash means I was only able to notice the bug by viewing the logs.
Code and Logs
import shutil

import kivy
import kivy.app

from kivy.lang import Builder
from kivy.logger import Logger
from kivy.uix.boxlayout import BoxLayout

from kivy.config import Config
Config.set('kivy', 'log_level', 'debug')

Builder.load_string("""
<View>:
    file: file
    orientation: 'horizontal'

    TextInput:
        id: file
        hint_text: "File path"
        multiline: False
        on_text: root.callback_text()
""")

class View(BoxLayout):
    def callback_text(self):
        Logger.debug("View: Text")
        if self.file.text:
            # The if statement works around Kivy bug #3588
            # (it does indeed terminate on an exception in the setup phase).
            # shutil.copyfile(self.file.text, "testfile")  # Errors suppressed.
            raise ValueError("All Exception subclasses suppressed.")

class MyApp(kivy.app.App):
    def build(self):
        Logger.debug("App: build")
        return View()

if __name__ == '__main__':
    Logger.debug("App: run")
    MyApp().run()

The traceback is printed in the console/logs when it is suppressed. In the logs, each of these lines is prefixed with [WARNING] stderr: (but not in the console).
 Exception ignored in: 'kivy.properties.observable_list_dispatch'
 Traceback (most recent call last):
   File "kivy\properties.pyx", line 579, in kivy.properties.Property.dispatch
   File "kivy\_event.pyx", line 1214, in kivy._event.EventObservers.dispatch
   File "kivy\_event.pyx", line 1120, in kivy._event.EventObservers._dispatch
   File "kivy\properties.pyx", line 1449, in kivy.properties.AliasProperty.trigg
er_change
   File "kivy\properties.pyx", line 1455, in kivy.properties.AliasProperty.trigg
er_change
   File "kivy\properties.pyx", line 579, in kivy.properties.Property.dispatch
   File "kivy\_event.pyx", line 1214, in kivy._event.EventObservers.dispatch
   File "kivy\_event.pyx", line 1096, in kivy._event.EventObservers._dispatch
   File "D:\Professional\importrandom\overwatch-scoreboard\venv\lib\site-package
s\kivy\lang\builder.py", line 64, in custom_callback
     exec(__kvlang__.co_value, idmap)
   File "<string>", line 10, in <module>
   File "repro2.py", line 33, in callback_text
     raise ValueError("All Exception subclasses suppressed.")
 ValueError: All Exception subclasses suppressed.

It seems like others may have encountered similar issues.

This is because the callback is called through cython, which eats all exceptions, I agree this should be changed, but it would require going through all cython code and make sure is passes exceptions upwards.

We could make it opt-in before that, via configuration.

Actually, this cython code is supposed to raise if 2 is returned,
https://github.com/kivy/kivy/blob/ac292250295fa9b21234e8bd45d80b095ae83e47/kivy/_event.pyx#L1140-L1141
not sure how that result is supposed to be returned, res is never assigned to 2, i'm trying to see how it's supposed to be used there.

@tshirtman The idea is not for us to return 2 on error. Rather, if there's an error in the function, cython will catch it and return 2. That way, cython has a way to propagate errors upwards because cython inspects the return value and if it's 2 will raise the exception to python.
You can read about it here: https://cython.readthedocs.io/en/latest/src/userguide/language_basics.html#error-return-values.


[TextField] Remove notch when no label is added

[X] I have followed (at least) the PR section of the contributing guide.

Fixes #30230
Problem:

TextField component renders a notch with an empty label

Solution:

check if the label value is not empty, null, or undefined before rendering the label
Also added some tests to cover edge cases by testing the styles and rendered label value when the label is equal to 0,'', null, undefined

demo

Hey @alisasanib sorry it took me a bit of time to merge this :D I saw you did many contributions in the last few weeks. I was wondering if you would be interested to start contributing to the @mui/base package (the unstyled components). Let me know if you are interested and I can add you to our Slack channel and talk more about it there :)

Hi @mnajdova, it's great thanks. Yes, I really like to contribute more. It would be amazing!

@mnajdova @alisasanib the same notch problem appears when using the Select component. Could you please fix that as well? Thank you!

@mnajdova @alisasanib the same notch problem appears when using the Select component. Could you please fix that as well? Thank you!

Please create a new issue, it's hard to track like this that there is something else to be done.


Chat - if there is content in input I can not navigate history

Have some history in your Chat session
Have some content in the input box.
Press up - you are navigated to the first character in the input
Press up again - history is not shown 🐛

Notice how the other widgets in VS Code work - terminal, search. I can press up as long as I am on the start of the input, and the history will be shown.
This is particularly noticeable in Chat with sticky participants. Since they are always there, and when interacting with them I have no way to navigate to history.

https://github.com/microsoft/vscode-copilot-release/issues/1208


'Error: ENOENT: no such file or directory, open' when migrating from Material UI v1.0.0-beta.43 to v1.2.1

[./node_modules/react-event-listener/lib/index.js] 191 bytes {main} [built] [failed] [1 error]
+ 2815 hidden modules
ERROR in<EMAIL_ADDRESS>Module build failed: Error: ENOENT: no such file or directory, open<EMAIL_ADDRESS><EMAIL_ADDRESS>30:49-80
<EMAIL_ADDRESS><EMAIL_ADDRESS>@ ./app/components/Home/Navtab.js
@ ./app/components/Home/index.js
@ ./app/components/App.js
@ ./app/index.js
@ multi (webpack)-dev-server/client?http://<IP_ADDRESS>:8648 ./app/index.js
ERROR in<EMAIL_ADDRESS>Module build failed: Error: ENOENT: no such file or directory, open<EMAIL_ADDRESS><EMAIL_ADDRESS>10:38-56
<EMAIL_ADDRESS>@ ./app/components/App.js
@ ./app/index.js
@ multi (webpack)-dev-server/client?http://<IP_ADDRESS>:8648 ./app/index.js
ERROR in<EMAIL_ADDRESS>Module build failed: Error: ENOENT: no such file or directory, open<EMAIL_ADDRESS><EMAIL_ADDRESS>12:35-60
<EMAIL_ADDRESS><EMAIL_ADDRESS>@ ./app/components/App.js
@ ./app/index.js
@ multi (webpack)-dev-server/client?http://<IP_ADDRESS>:8648 ./app/index.js
ERROR in ./node_modules/react-event-listener/lib/index.js
Module build failed: Error: ENOENT: no such file or directory, open '/Users/kunal/src/node_modules/react-event-listener/lib/index.js'
@ ./node_modules/material-ui/utils/ClickAwayListener.js 47:26-57
@ ./node_modules/material-ui/index.es.js
@ ./app/components/VenueMaster/venuemaster.js
@ ./app/components/Home/index.js
@ ./app/components/App.js
@ ./app/index.js
@ multi (webpack)-dev-server/client?http://<IP_ADDRESS>:8648 ./app/index.js
Child html-webpack-plugin for "index.html":
1 asset

Did you rerun webpack after npm/yarn install?

We need a reproduction repository to really help. I'm closing. In the meantime, check @TrySound comment out 👍 .

@TrySound How does one rerun webpack?

@TrySound How does one rerun webpack?

This also confused me. I just re-started the development server "npm start" in most create-react apps and then it worked.

@TrySound How does one rerun webpack?

This also confused me. I just re-started the development server "npm start" in most create-react apps and then it worked.

Thanks that worked


add cpu dockerfile

Not sure if this is helpful, but the following commands worked from the project root for me using this branch
$ docker build -t equibind_cpu -f cpu.Dockerfile .
$ docker run -it equibind_cpu bash
If this useful I can clean up the file and do a multistage with the GPU Dockerfile to make maintaining easier.
Also, let me know if there are any test commands I can use inside the Docker container.

@NiklasTR merge plz

Hi team - @McMenemy and @kjwallace is this ready to be merged?

Hi team - @McMenemy and @kjwallace is this ready to be merged?


K8SSAND-1563 ⁃ error "Exception encountered during startup: The seed provider lists no seeds" when recreating pods

What happened?
When I have many cass clusters and run kubectl delete --all pods --namespace k8s-cluster-test after this command 70% of clusters would recover but 30% of clusters would have the error Exception encountered during startup: The seed provider lists no seeds.
cluster logs
WARN  [main] 2022-06-14 11:52:25,312 K8SeedProvider4x.java:58 - Seed provider couldn't lookup host test-clusterr-37-seed-service
WARN  [main] 2022-06-14 11:52:25,338 K8SeedProvider4x.java:58 - Seed provider couldn't lookup host test-clusterr-37-dctestr-37-additional-seed-service
ERROR [main] 2022-06-14 11:52:25,340 CassandraDaemon.java:909 - Exception encountered during startup: The seed provider lists no seeds.

dns check on cass nodes
❯ kubectl exec --stdin --tty -n k8s-cluster-test test-clusterr-37-dctestr-37-default-sts-0 -- /bin/bash

cassandra@test-clusterr-37-dctestr-37-default-sts-0:/$ curl test-clusterr-37-seed-service
curl: (6) Could not resolve host: test-clusterr-37-seed-service

cassandra@test-clusterr-37-dctestr-37-default-sts-0:/$ curl test-clusterr-37-dctestr-37-all-pods-service
curl: (7) Failed to connect to test-clusterr-37-dctestr-37-all-pods-service port 80: Connection refused

At the same time, the cluster is repaired if you delete the pods again
Did you expect to see something different?
I want to see 100% recover clusters
How to reproduce it (as minimally and precisely as possible):
Environment

K8ssandra Operator version:
github.com/k8ssandra/k8ssandra-operator/config/deployments/control-plane/cluster-scope?ref=v1.1.1

* Kubernetes version information:
v1.21.5 coredns = 1.6.3
* Kubernetes cluster kind:

managed

Manifests:

I have 40 similar clusters like:
apiVersion: k8ssandra.io/v1alpha1
kind: K8ssandraCluster
metadata:
  name: test-clusterr-37
  namespace: k8s-cluster-test
spec:
  cassandra:
    serverVersion: "4.0.1"
    softPodAntiAffinity: true
    resources:
      requests:
        cpu: "500m"
        memory: "1Gi"
      limits:
        cpu: "1900m"
        memory: "2Gi"
    datacenters:
      - metadata:
          name: dctestr-37
        size: 2
        storageConfig:
          cassandraDataVolumeClaimSpec:
            resources:
              requests:
                storage: 2Gi
        config:
          jvmOptions:
            heapSize: 256M

K8ssandra Operator Logs:

1.655210188848521e+09   INFO    controller.k8ssandracluster     Reconciling Medusa user secrets {"reconciler group": "k8ssandra.io", "reconciler kind": "K8ssandraCluster", "name": "test-clusterr-37", "namespace": "k8s-cluster-test", "K8ssandraCluster": "k8s-cluster-test/test-clusterr-37"}
1.6552101888485692e+09  INFO    controller.k8ssandracluster     Medusa user secrets successfully reconciled     {"reconciler group": "k8ssandra.io", "reconciler kind": "K8ssandraCluster", "name": "test-clusterr-37", "namespace": "k8s-cluster-test", "K8ssandraCluster": "k8s-cluster-test/test-clusterr-37"}
1.655210188848572e+09   INFO    controller.k8ssandracluster     Reconciling replicated secrets  {"reconciler group": "k8ssandra.io", "reconciler kind": "K8ssandraCluster", "name": "test-clusterr-37", "namespace": "k8s-cluster-test", "K8ssandraCluster": "k8s-cluster-test/test-clusterr-37"}
1.655210188848788e+09   INFO    controller.k8ssandracluster     Medusa reconcile for dctestr-37 on namespace k8s-cluster-test   {"reconciler group": "k8ssandra.io", "reconciler kind": "K8ssandraCluster", "name": "test-clusterr-37", "namespace": "k8s-cluster-test", "K8ssandraCluster": "k8s-cluster-test/test-clusterr-37"}
1.655210188848799e+09   INFO    controller.k8ssandracluster     Medusa is not enabled   {"reconciler group": "k8ssandra.io", "reconciler kind": "K8ssandraCluster", "name": "test-clusterr-37", "namespace": "k8s-cluster-test", "K8ssandraCluster": "k8s-cluster-test/test-clusterr-37"}
1.6552101888513434e+09  INFO    controller.k8ssandracluster     Reconciling seeds       {"reconciler group": "k8ssandra.io", "reconciler kind": "K8ssandraCluster", "name": "test-clusterr-37", "namespace": "k8s-cluster-test", "K8ssandraCluster": "k8s-cluster-test/test-clusterr-37", "CassandraDatacenter": "k8s-cluster-test/dctestr-37", "K8SContext": ""}
1.6552101888514278e+09  INFO    controller.k8ssandracluster     The datacenter is reconciled    {"reconciler group": "k8ssandra.io", "reconciler kind": "K8ssandraCluster", "name": "test-clusterr-37", "namespace": "k8s-cluster-test", "K8ssandraCluster": "k8s-cluster-test/test-clusterr-37", "CassandraDatacenter": "k8s-cluster-test/dctestr-37", "K8SContext": ""}
1.6552101888591702e+09  DEBUG   controller-runtime.webhook.webhooks     received request        {"webhook": "/validate-k8ssandra-io-v1alpha1-k8ssandracluster", "UID": "bd0f9a93-61da-44ff-88fb-3f19a6955a6c", "kind": "k8ssandra.io/v1alpha1, Kind=K8ssandraCluster", "resource": {"group":"k8ssandra.io","version":"v1alpha1","resource":"k8ssandraclusters"}}
1.6552101888596108e+09  INFO    k8ssandracluster-webhook        validate K8ssandraCluster update        {"K8ssandraCluster": "test-clusterr-37"}
1.6552101888596413e+09  DEBUG   controller-runtime.webhook.webhooks     wrote response  {"webhook": "/validate-k8ssandra-io-v1alpha1-k8ssandracluster", "code": 200, "reason": "", "UID": "bd0f9a93-61da-44ff-88fb-3f19a6955a6c", "allowed": true}
1.6552101888640745e+09  INFO    controller.k8ssandracluster     Preparing to update replication for system keyspaces    {"reconciler group": "k8ssandra.io", "reconciler kind": "K8ssandraCluster", "name": "test-clusterr-37", "namespace": "k8s-cluster-test", "K8ssandraCluster": "k8s-cluster-test/test-clusterr-37", "CassandraDatacenter": "k8s-cluster-test/dctestr-37", "K8SContext": "", "replication": {"dctestr-37":2}}
1.6552101888641243e+09  INFO    controller.k8ssandracluster     Ensuring that keyspace system_traces exists in cluster test-clusterr-37...      {"reconciler group": "k8ssandra.io", "reconciler kind": "K8ssandraCluster", "name": "test-clusterr-37", "namespace": "k8s-cluster-test", "K8ssandraCluster": "k8s-cluster-test/test-clusterr-37", "CassandraDatacenter": "k8s-cluster-test/dctestr-37", "K8SContext": ""}
1.6552101888643324e+09  ERROR   controller.k8ssandracluster     Failed to fetch datacenter pods {"reconciler group": "k8ssandra.io", "reconciler kind": "K8ssandraCluster", "name": "test-clusterr-37", "namespace": "k8s-cluster-test", "K8ssandraCluster": "k8s-cluster-test/test-clusterr-37", "CassandraDatacenter": "k8s-cluster-test/dctestr-37", "K8SContext": "", "error": "no pods in READY state found in datacenter dctestr-37"}
github.com/k8ssandra/k8ssandra-operator/pkg/cassandra.(*defaultManagementApiFacade).EnsureKeyspaceReplication
        /workspace/pkg/cassandra/management.go:289
github.com/k8ssandra/k8ssandra-operator/controllers/k8ssandra.(*K8ssandraClusterReconciler).updateReplicationOfSystemKeyspaces
        /workspace/controllers/k8ssandra/schemas.go:183
github.com/k8ssandra/k8ssandra-operator/controllers/k8ssandra.(*K8ssandraClusterReconciler).checkSchemas
        /workspace/controllers/k8ssandra/schemas.go:43
github.com/k8ssandra/k8ssandra-operator/controllers/k8ssandra.(*K8ssandraClusterReconciler).reconcileDatacenters
        /workspace/controllers/k8ssandra/datacenters.go:168
github.com/k8ssandra/k8ssandra-operator/controllers/k8ssandra.(*K8ssandraClusterReconciler).reconcile
        /workspace/controllers/k8ssandra/k8ssandracluster_controller.go:133
github.com/k8ssandra/k8ssandra-operator/controllers/k8ssandra.(*K8ssandraClusterReconciler).Reconcile
        /workspace/controllers/k8ssandra/k8ssandracluster_controller.go:87
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile
        /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.1/pkg/internal/controller/controller.go:114
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler
        /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.1/pkg/internal/controller/controller.go:311
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem
        /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.1/pkg/internal/controller/controller.go:266
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2
        /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.1/pkg/internal/controller/controller.go:227
1.6552101888643928e+09  ERROR   controller.k8ssandracluster     Failed to update replication    {"reconciler group": "k8ssandra.io", "reconciler kind": "K8ssandraCluster", "name": "test-clusterr-37", "namespace": "k8s-cluster-test", "K8ssandraCluster": "k8s-cluster-test/test-clusterr-37", "CassandraDatacenter": "k8s-cluster-test/dctestr-37", "K8SContext": "", "keyspace": "system_traces", "error": "no pods in READY state found in datacenter dctestr-37"}
github.com/k8ssandra/k8ssandra-operator/controllers/k8ssandra.(*K8ssandraClusterReconciler).checkSchemas
        /workspace/controllers/k8ssandra/schemas.go:43
github.com/k8ssandra/k8ssandra-operator/controllers/k8ssandra.(*K8ssandraClusterReconciler).reconcileDatacenters
        /workspace/controllers/k8ssandra/datacenters.go:168
github.com/k8ssandra/k8ssandra-operator/controllers/k8ssandra.(*K8ssandraClusterReconciler).reconcile
        /workspace/controllers/k8ssandra/k8ssandracluster_controller.go:133
github.com/k8ssandra/k8ssandra-operator/controllers/k8ssandra.(*K8ssandraClusterReconciler).Reconcile
        /workspace/controllers/k8ssandra/k8ssandracluster_controller.go:87
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile
        /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.1/pkg/internal/controller/controller.go:114
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler
        /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.1/pkg/internal/controller/controller.go:311
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem
        /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.1/pkg/internal/controller/controller.go:266
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2
        /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.1/pkg/internal/controller/controller.go:227
1.6552101888729985e+09  INFO    controller.k8ssandracluster     updated k8ssandracluster status {"reconciler group": "k8ssandra.io", "reconciler kind": "K8ssandraCluster", "name": "test-clusterr-37", "namespace": "k8s-cluster-test", "K8ssandraCluster": "k8s-cluster-test/test-clusterr-37"}
1.6552101888730514e+09  ERROR   controller.k8ssandracluster     Reconciler error        {"reconciler group": "k8ssandra.io", "reconciler kind": "K8ssandraCluster", "name": "test-clusterr-37", "namespace": "k8s-cluster-test", "error": "no pods in READY state found in datacenter dctestr-37"}
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem
        /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.1/pkg/internal/controller/controller.go:266
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2
        /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.1/pkg/internal/controller/controller.go:227

Anything else we need to know?:
I found a similar issue - https://github.com/kubernetes/kubernetes/issues/92559 about DNS cache but I don't have oportunity change this parameters right now
┆Issue is synchronized with this Jira Task by Unito
┆friendlyId: K8SSAND-1563
┆priority: Medium

Additional information
❯ kubectl get pods test-clusterr-37-dctestr-37-default-sts-0 -n k8s-cluster-test -o yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2022-06-14T11:21:21Z"
  generateName: test-clusterr-37-dctestr-37-default-sts-
  labels:
    app.kubernetes.io/instance: cassandra-test-clusterr-37
    app.kubernetes.io/managed-by: cass-operator
    app.kubernetes.io/name: cassandra
    app.kubernetes.io/version: 4.0.1
    cassandra.datastax.com/cluster: test-clusterr-37
    cassandra.datastax.com/datacenter: dctestr-37
    cassandra.datastax.com/node-state: Starting
    cassandra.datastax.com/rack: default
    controller-revision-hash: test-clusterr-37-dctestr-37-default-sts-78698c559b
    statefulset.kubernetes.io/pod-name: test-clusterr-37-dctestr-37-default-sts-0
  name: test-clusterr-37-dctestr-37-default-sts-0

❯ kubectl get svc test-clusterr-37-seed-service -n k8s-cluster-test -o yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    cassandra.datastax.com/resource-hash: n6slxhCbAHOHCzjD4a6VkgBOeGLkAVQ+cLrpmZHxNKI=
  creationTimestamp: "2022-06-10T11:55:32Z"
  labels:
    app.kubernetes.io/instance: cassandra-test-clusterr-37
    app.kubernetes.io/managed-by: cass-operator
    app.kubernetes.io/name: cassandra
    app.kubernetes.io/version: 4.0.1
    cassandra.datastax.com/cluster: test-clusterr-37
  name: test-clusterr-37-seed-service
  namespace: k8s-cluster-test
  ownerReferences:
  - apiVersion: cassandra.datastax.com/v1beta1
    blockOwnerDeletion: true
    controller: true
    kind: CassandraDatacenter
    name: dctestr-37
    uid: ed346db6-6df8-47e3-b555-0a55139f92c2
  resourceVersion: "397321"
  uid: 0ca4f1a1-0f22-47e5-a892-42d7304af523
spec:
  clusterIP: None
  clusterIPs:
  - None
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  publishNotReadyAddresses: true
  selector:
    cassandra.datastax.com/cluster: test-clusterr-37
    cassandra.datastax.com/seed-node: "true"
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

as result pod didn't have cassandra.datastax.com/seed-node: "true" and service don't work correctly

This doesn't answer the question about what's happening, but I want to ask what is the use case for deleting the pods? Have you considered using the stopped property to shutdown DCs? That will scale the underlying statefulsets down to zero but keep the persistent volumes intact.

This should be investigated. At any point for various reasons, Kubernetes can delete and reschedule pods. k8ssandra-operator and cass-operator need to handle that gracefully.
It's also worth noting that cass-operator creates a PodDisruptionBudget for each CassadraDatacenter. It only sets the minAvailable property to a value of the datacenter size minus one.

This should be investigated. At any point for various reasons, Kubernetes can delete and reschedule pods. k8ssandra-operator and cass-operator need to handle that gracefully.

In my case it was cluster for test and I used preemptible workers which are automatically deleted

The problem seems to be that startOneNodePerRack starts the first node without seed label (since it assumes there still are other seeds), but by the time Cassandra daemon is started, the seed services have no endpoints anymore. cass-operator doesn't handle that case in further reconciliation attempts stopping at findStartingNodes.
The reason there still are IPs in the seed endpoints when all the pods have been deleted is the k8ssanda-operator behaviour. It gathers all the pods with seed labels from all the clusters and posts them in the -addional-seed-service. In case of the single cluster deployment it effectively copies IPs from the -seed-service to the -additional-seed-service, just with a delay caused by its reconciliation loop. Since cass-operator considers both services when deciding to assign the seed label to the starting node, that pod ends up without the label.

The problem seems to be that startOneNodePerRack starts the first node without seed label (since it assumes there still are other seeds)

This is incorrect. Here is the snippet from the method:
			if labelSeedBeforeStart {
					patch := client.MergeFrom(pod.DeepCopy())
					pod.Labels[api.SeedNodeLabel] = "true"
					if err := rc.Client.Patch(rc.Ctx, pod, patch); err != nil {
						return "", err
					}

					rc.Recorder.Eventf(rc.Datacenter, corev1.EventTypeNormal, events.LabeledPodAsSeed,
						"Labeled pod a seed node %s", pod.Name)

					// sleeping five seconds for DNS paranoia
					time.Sleep(5 * time.Second)
				}

You are correct that for a single-DC cluster the seed-service and additional-seeds-service will the same endpoints. When the pods get deleted, those endpoints will get removed from the seed-service. The next time k8ssandra-operators performs reconciliation after the endpoints are removed from the seed-service it will delete the endpoints for the additional-seeds-service. At this point cass-operator should proceed with starting a node in each rack.
There is obviously some sort of timing issue since @Tom910 mentioned this didn't happen all the time and deleting the pods a second time got things back to a healthy state.
For what it's worth, I've had trouble with preemptible worker nodes and cass-operator in the past and avoided them because of it.
This is going to require some more investigation.

Please add your planning poker estimate with ZenHub @burmanm

@jsanda You are right that startOneNodePerRack could label the pod as seed, but the problem is that it won't in that particular case:
	externalSeedPoints := 0
	if existingEndpoints, err := rc.GetAdditionalSeedEndpoint(); err == nil {
		externalSeedPoints = len(existingEndpoints.Subsets[0].Addresses)
	}

	labelSeedBeforeStart := readySeeds == 0 && len(rc.Datacenter.Spec.AdditionalSeeds) == 0 && externalSeedPoints == 0

externalSeedPoints is not 0 since there still are IP address in the -addional-seed-service endpoints. The sequence of events I observer when I delete all the worker pods:

Before termination:

pod1: Started, Seed
pod2: Started, Seed
pod3: Started, Seed
seed-service: [Pod1, Pod2, Pod3]
additional-seed-service: [Pod1, Pod2, Pod3]

Pods terminated:

seed-service: []
additional-seed-service: [Pod1, Pod2, Pod3]

Pods recreated:

pod1: Ready-to-Start
pod2: Ready-to-Start
pod3: Ready-to-Start
seed-service: []
additional-seed-service: [Pod1, Pod2, Pod3]

First pod is being started:

pod1: Starting
pod2: Ready-to-Start
pod3: Ready-to-Start
seed-service: []
additional-seed-service: [Pod1, Pod2, Pod3]

Additional seed service refreshed:

pod1: Starting
pod2: Ready-to-Start
pod3: Ready-to-Start
seed-service: []
additional-seed-service: []

One of the fixes I see here is to exclude endpoints gathered from the DC when refreshing its -additional-seed-service. That way they would be truly additional.
k8ssandra-operator/controllers/k8ssandra/seeds.go:newEndpoints:
	for _, seed := range seeds {
		// When building endpoints for `dc`, exclude pods gathered from the `dc` itself.
		if labels.GetLabel(&seed, cassdcapi.DatacenterLabel) != dc.Name {
			addresses = append(addresses, corev1.EndpointAddress{
				IP: seed.Status.PodIP,
			})
		}
	}

With the fix the sequence becomes such:
3. Pods recreated:
* pod1: Ready-to-Start
* pod2: Ready-to-Start
* pod3: Ready-to-Start
* seed-service: []
* additional-seed-service: []
4. First pod is being started:
* pod1: Starting, Seed
* pod2: Ready-to-Start
* pod3: Ready-to-Start
* seed-service: [Pod1]
* additional-seed-service: []
4. Additional seed service refreshed:
* pod1: Starting, Seed
* pod2: Ready-to-Start
* pod3: Ready-to-Start
* seed-service: [Pod1]
* additional-seed-service: []
Additional changes are required in order for the clusters to become stuck at start-up without seeds in more general case. One way to do that would be to change findStartingNodes to restore Seed label on the starting pod if no other seeds are discovered at that phase.

As I mentioned in my previous comment, I think there may either be a timing issue or something that fails to trigger reconciliation in k8ssandra-operator sometimes. I say since the error doesn't happen all the time.
I have tried to reproduce several times locally with a kind cluster and have been unable to do so. I deployed a 3 node Cassandra cluster. Every time the additional seeds service endpoints get deleted eventually. The pods get recreated and return to the ready state.
We could change the logic in seeds.go as you described, but I would still like to determine the root cause.
@hvintus how are you reproducing this?


[WIP] Improve Tarmak Terraform provider

What this PR does / why we need it:

Fail quickly by checking bastion instance exists when using bastion_instance_status data source
Only create vault init tokens on create operations (no read or delete) with the vault_instance_role resource

Which issue this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close that issue when PR gets merged): fixes #358
Release note:

https://github.com/hashicorp/terraform/issues/17034


Support for Multiple Datasets

Create a sample that can operate on multiple datasets instead of a single dataset.

Use an example girder slicer cli to figure out the input.
Probably makes sense to specify the multiple datasetIds and then use girderClient to get the video link  for downloading and processing.

Notes:

Girder-Slicer-CLI only supports batch mode utilizing images or files, not directories.
Could make a custom task that does recursive looking through folders and launches tasks based on that.  Use this code as reference.

Could also take in multiple video files and then use girder-client to figure out the dataset be reverse referencing the video parent.

Going to make a single task that will operate on the multiple folders.  It just will do it in a single task and report back on each task that is complete.
TODO:

Modify the Vue Slicer CLI task system to support 'multi' on directories to allow for multiple directories to be loaded and used.
Create a slicer CLI task that takes in multiple DIVE Dataset Directories and processes them by adding tracks or other items
Look into adding the Slicer-CLI processing to folder view in DIVE to allow for multiple folders to be handled that way.
Add support for processing metadata for running Slicer-CLI tasks as well.  Given a metadata folder and filter it will run tasks on items inside of it.

closed in #19


add: generic set for both list and dict

Currently AttrDict.set cannot support traversal across a list. Also AttrList should support a .get and .set with the same semantics.

For now, just going to handle AttrDict and just .set. I'll make a generic .get and consider how this should work on AttrList in a future release.

Still just for AttrDict, but now both get and set.


feat: Extism Support

Still have some work to do on this but this is working on my machine. We redesigned Extism so that most of the code can be compiled to Wasm. We call this the "kernel". This has allowed us to port Extism to new runtimes quickly. I was able to do this with about 3 hours work today. I'm pretty blown away that this works.

Closing and moving development to https://github.com/extism/chicory-sdk


feat(react): add StepLabel, StepContent, Step and Stepper components

Purpose
Adds components

StepLabel
StepContent
Step
Stepper

Related Issues

https://github.com/wso2/oxygen-ui/issues/2

Related PRs

N/A

Checklist

[ ] Figma Board Updated. (Mandatory for Icon and Component PRs. If you don't have access, please ask the core team to update it.)
[ ] UX/UI review done on the final implementation.
[x] Story provided. (Add screenshots)
[x] Manual test round performed and verified.
[x] Unit tests provided. (Add links if there are any)
[ ] Documentation provided. (Add links if there are any)

Security checks

[x] Followed secure coding standards in http://wso2.com/technical-reports/wso2-secure-engineering-guidelines?
[x] Ran ESLint & Prettier plugins and verified?
[x] Confirmed that this PR doesn't commit any keys, passwords, tokens, usernames, or other secrets?

pr-builder failures are not related to PR changes. Will be fixed via:

https://github.com/wso2/oxygen-ui/pull/305


Jumps

"The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."
Jumps not jumped, but that's just my brain paying attention to that instead of actually learning

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

ID: 88a5e33e-938d-b72d-b211-ab5245413af5
Version Independent ID: db96afbb-50af-5dee-b7b3-97600161e737
Content: How to: Concatenate Multiple Strings (C# Guide)
Content Source: docs/csharp/how-to/concatenate-multiple-strings.md
Product: dotnet-csharp
GitHub Login: @BillWagner
Microsoft Alias: wiwagn

@CharlieHoffmann thanks for your feedback. Any feedback is valid! I've created a PR to fix this for this content: https://github.com/dotnet/samples/pull/170
@BillWagner @rpetrusha this same sentence using past tense is used throughout our samples repo. Should we make this issue an up-for-grabs one?

This same sentence using past tense is used throughout our samples repo. Should we make this issue an up-for-grabs one?

Yes, and done.

I "jumped" on this issue this morning :-)


<EMAIL_ADDRESS>- [No Jira ticket] - ServerSentEvent Streaming Using Webflux

Add code for initial post about SSE streaming with webflux

Post link: http://inprogress.baeldung.com/?p=92027&preview=true
In this PR:

I created an endpoint to retrieve a Flux
In order to simulate a client consuming this stream of events, I created additional endpoints (in a separate package and application, to keep it clean), which just trigger an Async task
The tasks launch a WebClient that retrieves and logs the stream of events from the endpoint
I also used a WebTestClient which binds to the running server, in order to show the assertions that can be used with it


Add configuration to ignore used optional dependencies.

solves https://github.com/TheBevyFlock/flag-frenzy/issues/23

Hi! I'm really sorry, but I don't have the time nor interest in maintaining flag-frenzy anymore. I do really appreciate your interest in this, though, and I'm sorry for taking so long to come back to you.
I'm going to archive this (and probably transfer it to be under my own account), but feel free to maintain a fork if you find it useful!


How to generate a full-site Table of Contents when using aggregator.

The Python Markdown TOC plugin works well for individual pages, but is there a good way to add a full TOC after the first cover page that would list the entire site when using the aggregator? All other PDF generators I've tried for Material have included TOCs by default, but yours is easier to use and install while also actual supporting Javascript.
Potential Alternative Solutions:

Create a MkDocs hook to manually generate and concatenate the TOCs, write to a Page object and inject it into MkDocs. I don't know if there's a way to do this while excluding the TOC page from the served site or having MkDocs throw a warning about the page not being in the Nav.
Use another plugin to concatenate the entire site into one page instead of using the aggregator option. This seems part overkill and makes several nice features of your solution unusable (like page specific cover pages). The plugin I was considering isn't compatible with exporter and so would also need to be a custom hook...

I finally managed to create an MkDocs hook to create a table of contents and properly insert it into the site pages in a way that it is included in the aggregation. However, doing so exposed another missing feature.
In the aggregate PDF, hyperlinks between pages link back to the served website instead of their associated destination in the PDF. Until that is implemented, the following code for generating an aggregate TOC is not useful for this plugin.
import markdown
from bs4 import BeautifulSoup
from mkdocs.structure.nav import get_navigation, Section
from mkdocs.config import Config
from mkdocs.structure.pages import Page
from mkdocs.structure.files import Files, File, InclusionLevel

def _get_page_toc(page: Page) -> str:
    '''
    Generate the HTML unordered list part of the Table of Contents for `page`.

    Args:
        page (Page): The page to create a Table of Contents from

    Returns:
        str: An HTML unordered list
    '''
    content = ''
    url = page.file.abs_src_path
    with open(url, 'r') as file:
        # render markdown file
        page_toc = markdown.Markdown(extensions=['toc', 'fenced_code', 'md_in_html', 'attr_list', 'meta'])
        page_toc.convert(file.read())
        content = page_toc.toc
        # add page path to anchor links
        content = content.replace('="#', '="' + page.file.dest_path + '#')
        # extract only the unordered list
        soup = BeautifulSoup(content, 'html.parser')
        content = str(soup.find('ul'))

    return content

def _nav_to_html(nav_items: list) -> str:
    '''
    Converts the MkDocs Navigation.items into an HTML string

    Args:
        nav_items (list): The contents of the `items` property of a Navigation object.

    Returns:
        str: A representation of the Navigation as an HTML string
    '''
    content = []
    for item in nav_items:
        if isinstance(item, Page):
            if item.markdown is None:
                item.markdown = ''
            title = item.title
            if title is not None:
                content.append('
' + title + '')
                content.append(_get_page_toc(item))
                content.append('
')
        if isinstance(item, Section):
            content.append('
')
            if isinstance(item.title, str):
                content.append(item.title.capitalize())
            content.append(_nav_to_html(item.children))
            content.append('
')

    content.insert(0, '
')
    content.append('
')
    return '\n'.join(content)

def on_files(files: Files, config: Config):
    '''
    Invoked when files are ready to be manipulated.

    Args:
        files (Files): The collection of files.
        config (Config): The site configuration.

    Returns:
        Files: The files collection
    '''
    nav = get_navigation(files, config)
    content = '
Table of Contents' + \
              _nav_to_html(nav.items) + \
              '
'
    # Create a virtual file from generated text
    file = File.generated(config, 'generated_site_toc.md', content=content, inclusion=InclusionLevel.INCLUDED)
    # Add the virtual file to the site files
    files.append(file)
    # Add the virtual file to the site navigation with empty text for the title to hide it when viewing the website.
    config.nav.insert(0, {'': 'generated_site_toc.md'})

    return files


[IOTDB-2235]Optimize the constructor of InsertRowsOfOneDevicePlan

Optimize the constructor of InsertRowsOfOneDevicePlan,replaceing array with list

Hi, thanks for your contribution!
You can run mvn spotless:apply to fix the code format issue.

thank you i will do it
At 2022-01-12 10:59:25, "Haonan" @.***> wrote:
Hi, thanks for your contribution!
You can run mvn spotless:apply to fix the code format issue.
—
Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications on the go with GitHub Mobile for iOS or Android.
You are receiving this because you authored the thread.Message ID: @.***>

I have fixed code style bug

Coverage decreased (-0.07%) to 67.634% when pulling 17da7ac036a5338b4fbff255be1372cc434e1416 on Alibaba-HZY:optimize_constructor_of_InsertRowsOfOneDevicePlan into 058a07c69adf8ab3db03b9c985ee54612bc2db13 on apache:master.


Update the graph

@cedrabner I'm a bit confused by this PR. It looks like the article that's currently on main is more substantial--did changes get pushed elsewhere?

@mapachurro wdyt? I think the logic is that TheGraph now has their own extensive documentation, so there's no need to duplicate. Happy to merge if you are (once I resolve the conflicts)


Current merge behavior does not complete on build server

As of 2d89e7ba49fe2efd4238251d09ec737e532ea604, the Jenkins graph merge takes a very long time (or may never complete).
I started it on Aug 4, 2:16 PM and the merge was still in progress as of noon on Aug 8.
Compare to the previous merge which required 3h 18min.
Barring any data-specific hangups, most changes in this version are due to the addition of an additional merge step in the cat-merge to account for repeated nodes.
This is also using a newer version of cat-merge - 0.1.15.
It may just be running out of memory and doing inadvisable cache things.
Or, it may be getting stuck somewhere around here:
https://github.com/ncbo/kg-bioportal/blob/2d89e7ba49fe2efd4238251d09ec737e532ea604/kg_bioportal/merge_utils/merge_kg.py#L181-L198

Jenkins may also have a lag in print output, so it's possible that it got stuck later in the merge.

Merge didn't complete after >5 days. Definitely something wrong.
Will try alternatives on branch test_merge_config.

Disabling the new node merging code does not solve the slowdown - it's still not finished after ~24 hours.
Will try rolling back cat-merge to last known good version - cat-merge==0.1.7

Merge still in progress after 23 hrs with cat-merge==0.1.7.
Return to most recent cat-merge and try a couple different data loading configs (a small number of ontologies, then a much larger amount but without several of the largest ones) to see if this is due to the data size being just too big.

Merging three relatively small ontologies completes without issue (in 5 seconds, no less).
Next try will be everything, sans NCBITAXON, GAZ, DRON, BERO, and SNOMEDCT. That's >4.1 mil fewer classes to merge into a graph that's generally been ~10.8 mil nodes in all.

This config still does not complete after > 2d. That's not a great sign as these ontologies will still need to be part of the final merged graph.
Perhaps something about the Jenkins environment has changed. Try an identical build configuration on GCP.

Also possible that it's running out of disk space.

Tested out a build on my local machine and the merge completed as expected (and rapidly, too - it didn't even take three hours). It failed during the "Generating QC report" step due to memory limits, as my machine only has 32GB and this graph tends to need slightly more than that overall.
The build server has >1.6TB of disk space available in theory...but the Docker container may not have access to this much space. It really should, because it's Docker 17 and it's using the overlay2 storage driver. Running df inside the running Docker container confirms that it has access to this space.
The Python versions are slightly different between the Docker image and the venv I built kg-bioportal in locally - 3.8.5 vs. 3.8.10, respectively.
Something's clearly being limited on the build server - try another full build and monitor.

As expected, the full build still hangs. It seems to use 100% of a single CPU core for the entire duration of the merge.
To further troubleshoot the environment, try running on the build server in the same Docker image but outside the Jenkins context.

The part that really takes time is the cat-merge QC report - when running the build in not-Jenkins it spends most of its time during merge at the "Generating QC report" stage.

Going to try skipping the full QC report, but will still need to get the list of duplicate nodes.

Even with the cat-merge qc_report set to False and a rewritten node merge process, this still hasn't finished after > 24 hrs.
Try it again locally to get a better idea of where it may hang.

No longer relevant to current plans


LUCENE-10654: Add new ShapeDocValuesField for LatLonShape and XYShape

Adds new doc value field to support LatLonShape and XYShape doc values. The
implementation is inspired by ComponentTree. A binary tree of tessellated
components (point, line, or triangle) is created. This tree is then DFS
serialized to a variable compressed DataOutput buffer to keep the doc value
format as compact as possible.
DocValue queries are performed on the serialized tree using a similar component
relation logic as found in SpatialQuery for BKD indexed shapes. To make this
possible some of the relation logic is refactored to make it accessible to the
doc value query counterpart.
Current limitations (to be addressed in follow up PR)

Only Polygon Doc Values are tested
CONTAINS relation not yet supported
Only BoundingBox queries are supported (General Geometry Queries will be added in a follow on enhancement PR)

Highlights

Standalone companion field independent of LatLonShape and XYShape
Uses same test infrastructure as queries to ensure relation behavior matches

Hey @iverase; here's the PR related to the ShapeDocValuesField for the 9.3 release.

Hey @nknize!
I went through the PR and my feeling is that it is still half-cooked and I worry about adding a new encoding into core that it is not properly worked on. If later we need to change something we will have a hard time doing it once it is released. My suggestion is to either add it to the sandbox where there are no back-compact requirements or wait for another release so you have more time to work on it.
More focus feedback:

Early versions of XYShape where using encoded rectangles to perform bounding box queries. That proved to be wrong (https://github.com/apache/lucene-solr/pull/865) because the encoding is not linear, therefore the spatial relationships between geometries are not preserved in the encoded space. This PR seems to go back to that approach for XYShape doc values which is incorrect.

Lucene does not support any geo faceting, therefore for lucene users the real value for the doc values is the ability to perform IndexOrDocValues queries to speed their queries workload, still the current PR seems to be focusing on supporting faceting, e.g by adding centroid values. IMHO If we want to add those facets we should implement geo faceting in lucene alongside or we are not providing value to lucene users and testing would be very hard.

While the Codec API makes it easy to make changes across minors, we don't have the same flexibility for things that are done on top of the codec API like this binary encoding. Maybe we should take some more time to review the encoding instead of rushing it into 9.3. For instance, we used the index creation major version of the index to change the way facets store the taxonomy array, but this only allows changes on new major versions.

I'm not familiar enough with the geo logic to comment on it but I left some comments on the Field and Query integration.
I support Ignacio's suggestion of not trying to fold it into 9.3, it's a big (and exciting!) change. On the bw compat aspect, it would still be nice to retain some ability to make changes in the future, not only in GeoEncodingUtils but also changing the order of the data we include in the representation or adding more information to it? Codecs have a natural way to make changes to serialization in a backward-compatible way, but not things that we encode on top of codecs like encoding of binary doc values. Thinking out loud, should we prepend a version to the binary representation to have more freedom to make changes in the future?

Hey Nick,
Why so much hurry with this change? I appreciate everything you are trying to do to signal the feature as experimental and adding the version on the doc value but still it will be nice to have something production ready from the beginning and this way of developing this exciting and complex feature is making things harder.
I am very much interested in this change because Elasticsearch has its own doc value implementation. I would like to eventually move to Lucene doc values so I want to make sure that the functionalities, the Elasticsearch implementation currently has, can be preserved when / if it makes sense. In order to achieve that we would like to donate our code or help with our experience in this feature as we have been running it in production for 2+ years with success.
The Elasticsearch implementation is pretty much similar to the one you are proposing, it has three parts, first we add all the information regarding the extent of the geometry, then we add centroid information and finally we have what I call the “triangle tree” which is exactly what you described in this issue. Here are the differences and how we would like to help adding them:
Our geometry extent contains more information than just plain min/max values of the coordinates that you are proposing. In particular, we capture the minimum positive value and the maximum negative value for the x coordinate so we can wrap those bounding boxes around the dateline in the geo case. This would be my proposal for a Extent object that captures all that information: https://github.com/iverase/lucene/blob/TriangleTree/lucene/core/src/java/org/apache/lucene/geo/Extent.java
In the case of the centroid, the biggest difference is that we are computing the centroid using the original geometry. I really like the algorithm you are proposing but you are working on the encoded space and I am wondering now if that would work for cartesian, remember that the encoding is not linear so in that case the centroids might be incorrect.
I would like to discuss the benefits of the way you are encoding those values with a bit more care too.
Finally the triangle tree is the same idea, it is just the serialisation of an interval tree that is composed of tessellation elements. One thing I realised while developing this feature is that it is necessary to be able to visit the tree in different ways and therefore adding a visitor pattern for the tree is a big win. Here is our current implementation which can be used as a good starting point: https://github.com/iverase/lucene/blob/TriangleTree/lucene/core/src/java/org/apache/lucene/geo/TriangleTreeReader.java
Finally, I would like to propose to initially focus on the data structure and once we are happy, we can start integrating the functionality, e.g support for queries and so on. I hope a more structured approach will make sure we get the right structure.
What do you think?

Thanks @iverase.

Why so much hurry with this change? ...it will be nice to have something production ready.

Just a few points here.

I don't believe the proposed PR is a change. It's a new field that hasn't existed before despite Elasticsearch carrying it's own proprietary implementation for two years and only now proposing it as the preferred approach. I prefer a fresh Lucene focused implementation with input from Elasticsearch perspective. (e.g., geometry centroid and bounding box were added to help Elasticsearch geo_centroid and geo_boundingbox aggregations but really not needed for the docvalue format).
This PR is a move of progress over perfection. I do feel it's important to do the best we can on the first iteration but there will always be needed improvements. We have mechanisms in place to enable us to unleash experimental features for the purpose of receiving feedback from production. The PR is using those mechanisms as intended. No need to iterate to what we think is "production ready".
Akin to 2 I'd prefer to avoid waiting another two months+ before the next minor release to get this in the wild and start obtaining that feedback and iterating. Those iterations will improve with more feedback. If we do feel this is cutting it close for 9.3 then I'd prefer merging this PR to main and 9.4 and iterate on this code for 9.4.
I am happy to hear Elasticsearch wanting to contribute their implementation but I think it's better to start with a foundation and iterate. We can merge any desirable properties from that Elasticsearch field in follow ups. I think that will strengthen the field as a whole and agree it's a great decision but do not believe it is a requirement before merging the current functioning PR. Again, progress over perfection.

this way of developing this exciting and complex feature is making things harder.

Harder for who?

I would like to propose to initially focus on the data structure and once we are happy, we can start integrating the functionality, e.g support for queries and so on.

Query support is already in this PR so I'm not sure what you mean by "start integrating the functionality". Regarding the desire to add a visitor access pattern that's a nice to have but not a requirement for this PR. I wrote an initial rough implementation (because I also thought it would be nice to mimic the query visitor pattern) but it's an improvement that is easier to add in a follow-up since (as this PR shows) it's not a requirement for supporting the queries in the first iteration. I agree with the bounding box improvements (which, again, could come later) and will add the centroid fix, but that is unrelated to the relation and query logic in this PR which already has parity with the BKD index queries and uses the same test scaffolding.

Here is our current implementation which can be used as a good starting point.

The current PR already has a starting point so I'm not sure why the proposal to scrap and start from the Elasticsearch proprietary implementation (which could've been proposed two years ago if parity is the concern). I took a quick look at the proposed code and have some differing of opinions on the implementation:

I didn't see any explicit relation visitors; so it doesn't look like the prototype code includes bounding box relation logic or tests against any BKD index queries to ensure functional parity.
I didn't look at the details of the serialized format. That shouldn't matter so long as the API is the same and results are correct. This PR now includes a VERSION byte to provide a mechanism to change the format and ensure backwards compatibility. This reduces Elasticsearch risk.
The PR results here are matching the BKD index queries so I'm confident the PR query results are correct. I'll add (or someone can add) the visitor access pattern in a follow up. Again, it's not a requirement for Lucene (even if it is one for Elasticsearch).
This PR isolates all ShapeDocValues logic (e.g., Readers and Writers) as private logic to the single pkg private abstract ShapeDocValues and only exposes field and query instantiation through the public LatLonShape and XYShape access classes. I prefer this approach (which is consistent w/ the BKD field API) over the prototype that conversely has that split into disparate separate Reader / Writer classes with public abstractions. I think we should keep the abstraction and internal API surface area tidy and be thoughtful about what's exposed (e.g., only pkg-private ShapeDocValues and ShapeDocValueField. Visitor member class and BaseQuery foundation classes for internal extensions, and LatLonShape and XYShape static factories for public access).

I'll add the centroid fixes and bounding box additions to this PR shortly.

I cannot really understand the exciting geo-speak about centroids and bounding boxes :)  It all sounds really cool though.
But +1 to take a progress-not-perfection (PNP) approach here.  This is exactly why we have the @lucene.experimental tag, to enable iterative innovation for fun new features like this.
Maybe we could implement both Elastic's battle-tested (2 years in production) approach, and this new approach, and then over time cross-fertilize between the two?  We have multiple highlighters, query-parsers, suggesters, etc. -- it's healthy.  Perhaps over time we boil it down to a single "best of both" solution, or perhaps not.
Basically we don't have to settle all of these differences right now at this PR.  This PR is already adding an awesome feature to Lucene.  We can commit this (once important feedback is addressed) and then PNP iterate.

We can commit this (once important feedback is addressed) and then PNP iterate.

+1
I think this PR is ready and the remaining two items (multi geometry, and visitor pattern) can be added in follow on PRs.
For multi geometry I opened LUCENE-10666 to discuss adding multi binary docvalues. I think this is the "logical" way to go for multi geometry docvalue support but can also see a technical argument for munging multi geometries into a single binary similar to BinaryRangeDocValues.  I think we should discuss this and add multi support in a follow on improvement PR.

Maybe we could implement both Elastic's battle-tested (2 years in production) approach, and this new approach, and then over time cross-fertilize between the two?

Unless iterating on this field is simply not preferred I'm not seeing the need for two fields since closing any gaps in follow on PRs (that's not already addressed above) would achieve the same result and avoid API confusion?

This PR is fairly large, all issues have been addressed with passing tests, so I plan to merge this tomorrow so I can add the visitor pattern in a follow up PR. Multi geometries will be explored in a follow on depending on the progress of LUCENE-10666.


Overlapping labels - any changes expected?

Hi
When overlap is true, the labels overlap for any slices that are close together and/or have long labels.
There is the option to set overlap to false as we know.
But when detecting that labels overlap, could they be positioned slightly offset so they don't overlap, so that you can still see the label? Is this something that can be added in?
(FusionCharts do something like this - see image)

is there an update on this?


api not working on the "function rest wallet list"

Describe the bug
A clear and concise description of what the bug is.
The "rest wallet list" api calls doesnt return the informations about the KeyPair such as "nonce", "privateKey"...
To Reproduce
after installing the thyra-plugin-wallet repo run
go run cmd/massa-wallet/main.go

then we can create a wallet
and using for example postman we can call the api and see that there is some missing information

Expected behavior
A clear and concise description of what you expected to happen.
we should be able to see the information about the KeyPair

@Thykof @gregLibert is it fair to say that this issue will be solved / a proper solution will be defined with the wallet standard?
If not, what can we do so solve this issue on the wallet plugin please?

@Thykof @gregLibert is it fair to say that this issue will be solved / a proper solution will be defined with the wallet standard?

Nope

If not, what can we do so solve this issue on the wallet plugin please?

This issue shouldn't be solved. the wallet plugin shouldn't extract key pair. if the caller need to sign something, the Sign endpoint should be used instead.


Add minimum required Node version to create-react-app docs

This issue was originally reported by @kyamaguchi81 via facebook/react/issues/10324
Text of original issue
Please list [You’ll need to have Node >= 6 on your machine.]
before the description in [npm install -g create-react-app],
In [Creating a New Application] of the document https://facebook.github.io/react/docs/installation.html.
Because you want to know the required version before running the command

I will work on this issue.

This issue is all yours! 😄
I've added an "in-progress" label so that others will know not to start work on the issue. If you change your mind about the issue, no worries! Just let me know so that I can remove the label and free it up for someone else to claim.
Cheers!

Thank you @bvaughn
Struggling to set up the environment but it's part of the fun~

Please feel free to leave feedback about where you struggled in case it helps us improve the contributing docs.

I will create an issue and work on it later on (regarding node-gyp failing to build)

I was finally able to get it up and running but had a lot of trouble on Windows.
Below is the steps required to get the environment running on Windows 10.

Get node-gyp working using this documentation.
Installed following commands globally

yarn global add prettier
yarn global add flow-bin

yarn check-all doesn't work on windows. So I had to run each command separately one by one.

prettier --config .prettierrc --write "{flow-typed,plugins,src}/**/*.js"
yarn lint
yarn flow

yarn check-all failed because of the single quotes used in the prettier command.
Instead of
prettier --config .prettierrc --write '{flow-typed,plugins,src}/**/*.js'
I had used double quotes around {flow-typed,plugins,src}/**/*.js
prettier --config .prettierrc --write "{flow-typed,plugins,src}/**/*.js"

i def think Windows setup is something that should be part of the docs for contributors. too easy for devs to just assume everyone has macs

i def think Windows setup is something that should be part of the docs for contributors. too easy for devs to just assume everyone has macs

There were no such assumptions. I just have a Mac myself and I wrote the docs so...I wrote what I know. We certainly welcome contributions to the contributing docs to improve the instructions for Windows users! ❤
If you'd be willing to commit the changes you needed to make via a PR, @dance2die, and tag me on it- I'd be happy to merge it.

Thank you @bvaughn
I will add a tag you and add the link to your comment in PR comment.

Closed via #89

I've created a detailed blog entry on how to setup the environment on Windows 10.
https://www.slightedgecoder.com/2017/10/15/setting-reactjs-org-environment-open-source-contribution/

@dance2die Your write-up says:

Now install following two NPM packages globally.
yarn global add prettier
yarn global add flow-bin

Why is this necessary? Both prettier and flow-bin are declared as project dependencies in package.json and so should be installed within the project.
Also, you should be able to update the "Problem2" section now since your PR has been merged. (Thanks!)

@bvaughn

Now install following two NPM packages globally.

Why is this necessary?

You are right. I've just tried it after globally removing prettier & flow-bin.
Both commands were not found for some reason on computer at home but works fine on different machine.
Thank you, Brian. I will update the blog~

Sweet! Ping me once it's updated and I'll tweet a link to it.

@bvaughn
Thank you, Brian.
I've updated the blog and renamed Problem 2 -... to Verify that the site works

Cool.  Thanks!


Define in module produce error

Inside a GLSL module I'm doing
#ifndef FNC_RATIO
#define FNC_RATIO
vec2 ratio(in vec2 st, in vec2 s) {
    return mix( vec2((st.x*s.x/s.y)-(s.x*.5-s.y*.5)/s.y,st.y),
                vec2(st.x,st.y*(s.y/s.x)-(s.y*.5-s.x*.5)/s.x),
                step(s.x,s.y));
}
#endif

Produce the following error
ComposerError {
    inner: DefineInModule(100),
    source: Constructing {
        path: "_module.glsl",
        source: "..."
    }
}

The line that produce the error in question is
...
#define FNC_RATIO
...

Is there a way of using the following pattern without errors?
#ifndef SOME_DEFINE
#define SOME_DEFINE
...
#endif

generally no, there's way of doing that. but it is not necessary either: if you include the same module multiple times you still only get one copy of it in the final output, so this kind of construct isn't necessary.
naga_oil generally works more like rust than like a c-preprocessor. #defines are like rust's #[cfg(..)]. you can specify them directly in shaders but only in the entry-point / top level, otherwise things get very confusing - internally modules are compiled once per ShaderDef set, so allowing modules to also define new ShaderDefs is not really tractable. normally they are specified externally and passed to Composer::make_naga_module.
also fyi - using error.emit_to_string(&composer) will give you more readable errors.


users_online removed?

Why did you remove this in: ServerCPULowPriorityWorker...

                    using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor())
                    {
                        if (clientCount > _userPeak || realOnlineClientCount > _userPeak)
                            _userPeak = realOnlineClientCount;

                        queryReactor.RunFastQuery(string.Concat("UPDATE server_status SET stamp = '",
                            Yupi.GetUnixTimeStamp(), "', users_online = ", realOnlineClientCount, ", rooms_loaded = ",
                            loadedRoomsCount, ", server_ver = 'Yupi Emulator', userpeak = ", _userPeak));
                    }

This shows the online coun in the cms?
(you removed the real usersonline so should be like this now)>

                    using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor())
                    {
                        if (clientCount > _userPeak || clientCount > _userPeak)
                            _userPeak = clientCount;

                        queryReactor.RunFastQuery(string.Concat("UPDATE server_status SET stamp = '",
                            Yupi.GetUnixTimeStamp(), "', users_online = ", clientCount, ", rooms_loaded = ",
                            loadedRoomsCount, ", server_ver = 'Yupi Emulator', userpeak = ", _userPeak));
                    }

clientCount and realOnlineClientCount was the same.

Because is really useless do a query do Database saying who many users is only if you can count in your cms doing the following query:

SELECT COUNT(online) FROM users WHERE online = '1';

Is really pretty better.
Since isn't good every 10 seconds do a Query to Update the Count.
The ServerCPULowPriorityWorker is attached to Main Game Loop. If this Class crashes maybe main Game Loop can crash.


Sources Do Not Always Load

All sources currently do not load under my ORNL_Stopgap111519 branch after applying the most recent commit;  also only the msquared source is visible in the list of GUI to select under "Sources" in the top GUI menu bar. I rolled back this commit and also cleared the preferences for all of the sources I have written and the sources still do not load up opening command center. Currently the folllowing errors are returned when selecting "Sources" from the top GUI menu bar. The error does not occur on dev.
"Error using Base.GetClasses (line 9)
Did not find a single match for C:\Users\Administrator\projects\CommandCenter\Modules+Sources+msquared - found 0
Error in Base.Manager.getAvailModules (line 64)
[prefix,module_strs,packages] = Base.GetClasses(path,'Modules',package);  % Returns name without package name
Error in Base.Manager.getAvailModules (line 81)
 Base.Manager.getAvailModules(package,h,fun_callback,fun_in_use); % Recursively call to populate
Error in Base.Manager/getAvail (line 642)
 obj.getAvailModules(package,parent_menu,fun_callback,fun_in_use);
Error in CommandCenter>menu_sources_Callback (line 418)
handles.Managers.Sources.getAvail(hObject);
Error in gui_mainfcn (line 95)
 feval(varargin{:});
Error in CommandCenter (line 47)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)CommandCenter('menu_sources_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback."

I can't tell immediately what the issue is, but I do remember some annoyance when dealing with the what function and how it searches based on matlab's paths and the current directory. So one question I have is did you change your pwd when this error started? I would recommend never being inside the repository when running.
The other thing jumping out is that path name looks wrong (no slashes for those package folders). I would put a debug point here and step through to see what's going wrong.

I did try to change the user recently to me while inside the repo. Now I see I have a conflict where the user.name and user.email inside the repo I can't change and are different from my user.name and user.email I have set globally. Maybe this is causing some conflict somehow?
Another thing that I noticed is this same issue is arising on another branch named ornl_stopgap in which I have never seen this error and also code which I have not touched in a year roughly. So it definitely seems independent of my code but it occurs on my branches...
Should I try and remove the remote repo and try and reclone it with my user.name and user.email set the globally?

The repo's user info shouldn't be an issue. There is a global user.name/email but as you found you can easily override in any repo as well. Should be as easy as deleting those things in the git repo (not globally). git config -e should open the config file if you run it in the repo.
What is your MATLAB working directory when you have been running CC? Is it "C:\Users\Administrator\projects\CommandCenter"?

Thanks for the info. Yes you are correct the directory path is:
"C:\Users\Administrator\projects\CommandCenter".
It sounds like going through the debug steps you mentioned above is the first step then? I'll change the config file in the repo as well.

I can't think of why being in the folder would cause this issue, but my first step would be to change your working directory up a level (e.g. set it to "C:\Users\Administrator\projects"). The next thing I would do if that isn't working is put in those debug points and see what is happening (if changing folders works, I would also be curious what line of code is misbehaving still, so if you have the chance I'd still put those debug points in so you can look around).

For the record, it sounded like the solution was to make sure that MATLAB's working directory is not in the repositories folder structure. I'm going to go ahead and close this issue, but we should still try and figure out why that is.


Show application level configuration options in GUI

Show application level configuration options in the front-end, including:

set the number of concurrent workflows that can run at a given time
specify a confidence threshold to limit the amount of data output from one or more operators

They're documented the the API docs in the implementation guide.


Added the missing language templatetag so you can actually switch between languages in your templates

Just a copy & paste & modify from django 1.4's tag which we don't have in django 1.3

Hi Harro! Sorry for letting you wait, I'm on holiday atm. I promise I will implement your request asap (I want to add some tests for the language templatetag as well).


build does not work out-of-the-box

Just cloned the repo and done a mvn clean install.
Will have a look at later.
[INFO] ------------------------------------------------------------------------
[INFO] Building Code-House :: Swagger :: Karaf Features 3.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://repo.maven.apache.org/maven2/org/codehaus/mojo/build-helper-maven-plugin/maven-metadata.xml
Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/mojo/build-helper-maven-plugin/maven-metadata.xml (667 B at 2.5 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Code-House :: Swagger .............................. SUCCESS [  0.117 s]
[INFO] Code-House :: Swagger :: Parent .................... SUCCESS [  0.064 s]
[INFO] Code-House :: Swagger :: Core ...................... SUCCESS [ 13.963 s]
[INFO] Code-House :: Swagger :: Bundle .................... SUCCESS [  0.808 s]
[INFO] Code-House :: Swagger :: UI ........................ SUCCESS [  6.352 s]
[INFO] Code-House :: Swagger :: Karaf Features ............ FAILURE [  0.326 s]
[INFO] Code-House :: Swagger :: Itests .................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 23.514 s
[INFO] Finished at: 2016-02-04T22:04:33+01:00
[INFO] Final Memory: 39M/661M
[INFO] ------------------------------------------------------------------------
[ERROR] Could not find goal 'features-create-kar' in plugin org.apache.karaf.tooling:karaf-maven-plugin:4.0.4 among available goals archive, assembly, client, commands-generate-help, deploy, features-add-to-repository, features-export-meta-data, features-generate-descriptor, kar, run, verify -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoNotFoundException

This could be solved using:
diff --git a/features/pom.xml b/features/pom.xml
index ea8a0aa..66e11cd 100644
--- a/features/pom.xml
+++ b/features/pom.xml
@@ -66,7 +66,7 @@
                     <execution>
                         <id>create-kar</id>
                         <goals>
-                            <goal>features-create-kar</goal>
+                            <goal>kar</goal>
                         </goals>
                     </execution>
                 </executions>

Is there any reason you do not set packaging to "kar"?

It seems you want to use Karaf 3, so you should set the karaf-maven-plugin version in the pluginManagement.

@maggu2810 Hey, I completely missed your issue here. Sorry for that. Some of these changes were pushed to CXF so it is possible to have Swagger descriptor generated on the fly on the endpoint basis. This project is still relevant but only if you have multiple endpoints (ie. many service roots) and you would like to create one big descriptor for all of them.

@splatch Over one year old ;) I already used my own features, so I don't really care about this one anymore. You can close it if it is not valid.

Closing as maintainer reaction was too late. ;-)


Host download hangs at ~100%

Pasting a link to a nong seems to download normally, then the progress bar hangs at 100% ish (pictured)

Tested using:
SFH
(https://api.songfilehub.com/song/64f54c6ceba5efcdadf78740?download=true&name=943100)
and Discord's CDN
(https://cdn.discordapp.com/attachments/855228426208935936/1314273328403451904/376.mp3?ex=67547d6b&is=67532beb&hm=d2623e9a2b005a4123038cb28445fcd1fcd27e2d403e6083178ad9dfe53c5663&)
^^ afaik links to discord's cdn have no auth so anyone should be able to access this link without being logged in / in the server
Level ID: 101511700
Hardware:
Windows 11
GD 2.207
Geode version 4.0.1

Bumping, as I have the same issue.
Level ID: 52858977
Hosted file link: https://archive.kawaiizenbo.me/yanamusic/The Prodigy - Breathe.mp3

This will be fixed in the next update, you can try the latest beta: https://github.com/Fleeym/jukebox/releases/tag/v3.0.2-beta.3

Sounds good 👍


Pr session

This is a git rebase origin/master; conflicts fixed; and a new commit on top of it.

I think the only way to do it is to either:

hard reset your branch to the changes I've made: contour-terminal:pr-session (merging isn't working due to the git rebase)

Or we close your PR and I create a new one, merge this, and finish polishing it. What do you think?


A few design annoyances

This is an extremely nice idea and a pretty good execution! I like it a lot.
I have a few things that annoy me about the theme:

Things that really bother me:

The message count shouldn't be red, it collides with the overall blue design.
The search box is not aligned with the content. This REALLY bugs me.
The Inbox text is not aligned with the hamburger menu

Things that bother me less but can be improved:

The left padding for the first item seems a tad off
The "hide side panel" arrow shows on top of the side panel, when clicked it disappears entirely.
The button could be the new flowery button, like Simplify Gmail has - just to match the new material design vibe.
What if we had an option to hide hangouts?

The search box is not aligned with the content. This REALLY bugs me.
+1

That's all, love the work you've done so far!
+1000


Refine the Early Adopter deck to it's final draft

Describe the issue
We are in the good position that we have too material to cover in our Early Adopter sessions.  We wish to boil it down to the core value items, collaborate with AWS and with Digital Academy to identify as much as possible that we can ask our partners to own.
The presentation is the Early Adopter Onboarding presentation.  The idea that elements this evolves into a permanent onboarding presentation.
The presentation could be varied based on the maturity of the team or if they have recently had a presentation and their apps in cloud are in a good state.
Which Sprint Priority is this issue related to?
The 'Milestone' should clearly list Sprint Priorities - which one is this issue related to?
Additional context
Add any other context, attachments or screenshots
Definition of done

Draft Agenda of topics and the order of presentation
Presenters are informed and have presentations in draft ready state
The flow and level of time commitment is appropriate for the audience (ie. we can't ask for a week, but 1 afternoon is too little - balance)

Done and team did a great job presented Onboarding Workshop today.  Onwards and upwards!

Done and team did a great job presented Onboarding Workshop today.  Onwards and upwards!


[Slide] Remove gutter

[x] I have followed (at least) the PR section of the contributing guide.

Close 16499

@User195 Thanks


Repair CMake build

ExtraOptions.swift was recently removed.

@swift-ci please test

Merging to unblock bots


Allow ListRemoteRepositoriesFromProvider to gather from multiple providers

Summary
If the provider is left empty in that API call, this iterates over all
providers and will do the call if they implement the right provider
trait.
The result is then re-used to register repositories, thus allowing us to
register repos from multiple providers seamlessly.
Fixes https://github.com/stacklok/minder/issues/2769
Change Type

[ ] Bug fix (resolves an issue without affecting existing features)
[x] Feature (adds new functionality without breaking changes)
[ ] Breaking change (may impact existing functionalities or require documentation updates)
[ ] Documentation (updates or additions to documentation)
[ ] Refactoring or test improvements (no bug fixes or new functionality)

Testing
Outline how the changes were tested, including steps to reproduce and any relevant configurations.
Attach screenshots if helpful.
Review Checklist:

[x] Reviewed my own code for quality and clarity.
[ ] Added comments to complex or tricky code sections.
[ ] Updated any affected documentation.
[ ] Included tests that validate the fix or feature.
[ ] Checked that related changes are merged.

coverage: 47.636% (-0.1%) from 47.743%
when pulling 76131496d77880e9e8f21be8eeeb2c56aaff17ef on multi-list-repos
into d50072d944bf50797aedc862980d6998fb219b03 on main.


Add Million.js

https://million.dev/
This looks interesting - and won't hurt too much. Just needs to be added to the web app with an npm command to run it to identify / fix / lint performance issues. See also: https://old.million.dev/blog/lint
Not sure what the integration will be like but if we can have a small demo using this in the repo that'd be cool :)

Closing in #988