TreeBindingAdapter.prototype._buildTree calls undeclared and undocumented method getNumberOfExpandedLevels() on this.

OpenUI5 version: "1.52.10" (but probably all)
Browser/version (+device/version): NA
Any other tested browsers/devices(OK/FAIL): NA
URL (minimal example if possible): https://github.com/SAP/openui5/blob/master/src/sap.ui.core/src/sap/ui/model/TreeBindingAdapter.js#L569
User/password (if required and possible - do not post any confidential information here): NA
Steps to reproduce the problem:

If you try to write your own TreeBinding and reuse sap/ui/model/TreeBindingAdapter you'll find it calls
the getNumberOfExpandedLevels() method on the binding object (this). When reading the declaration as well as the documentation there seems to be nothing that indicates that this is to be overridden in any sublclasses.

What is the expected result?
I expected to see clear documentation on what is expected of subclasses.
I realize that the API docs for TreeBindingAdapter tell us that:
"Experimental API since version This module is only for experimental and internal use!"
But that is not good enough - I tried to subclass ui/model/TreeBinding directly, without the adapter, and that leads to yet more calls to yet more undeclared methods. So in practice it seems undoable to provide a custom implementation of TreeBinding without hauling all these private/hidden apis along.
What happens instead?
We get runtime errors.
Any other information? (attach screenshot if possible)
NA

Apparently, the TreeBinding APIs are not designed for reuse. As you already pointed out, they are flagged as experimental/internal API. We do not recommend reusing the TreeBindingAdapter or extending any of the TreeBinding classes.
May I ask what you are planning to do? From our experience, many use cases can be solved by using the JSONTreeBinding.

Hi @RandomByte , thanks for your reply.
Well, what I am trying to do should imo be quite straightforward.
I would like to access the HANA XML/A interface. I am creator and long time maintainer of Xmla4js, which handles all the protocol stuff. Now I would like to expose that functionality in some ui5 Model implementation, and of course this would also need to provide the various binding implementations.
As you can imagine, since XML/A gives the ability to do MDX queries, the path syntax for this type of binding would be quite different from the document and tabular oriented stuff we see in the OData and JSON models.
So, I looked at the v2 ODataModel and Bindings for reference, and then tried to use that as example to build my own extension of sap.ui.model.Model and its bindings.
I started with the treebinding because that happens to be the use case why we need XML/A in the first place: we have calculation views with parent/child hierarchies, and so far we found none of the components, bindings and models in ui5 capable of extracting the aggregated values of non-leaf nodes in the parent child hierarchy. This is obviously a key functionality and we observed that we can extract this with relative ease and reasonable performance through MDX. So, here we are.
If you have any suggestions on how to implement what I want, with or without XML/A or MDX, we are all ears.
I am currently on the route of trying to see if extending JSONMOdel is somehow easier, but the first signs are not very favorable. For instance, the path syntax with slashes seems pretty much pervasive throughout the design, and it is yet unclear how exactly to decide how to manage the calls to the backend in response to the various requests from the bindings.
Another route still unexplored is extending the ODataModel directly and rewriting only the read requests. However, since the v2 ODataModel is quite heavy and also has particular handling of its metadata, I  fear this too might turn out to be a dead end.
Any advice is greatly appreciated.

What do you think how many nodes a typical hierarchy of yours contains?
The question is whether you'll need the ability to have lazy loading (via paging). If not, then you could load the whole hierarchy upfront and fill that into a JSON Model. That's the typical workaround to get data from non-OData sources into a Tree Table.
However, if you need paging, you may implement a subclass of sap.ui.model.ListBinding rather than any of the TreeBinding classes. You will need to add some TreeTable-specific functions like hasChildren, expand, collapse, etc. to that. Apparently the documentation of those functions is mostly private. We would need to add an abstract Tree Binding class to define this interface. Until then you need to find those yourself.
The Tree Binding (especially with OData) is very complex terrain. Reuse between the different implementations is small. But without knowing much about MDX, your implementation could turn out to be simpler.

What do you think how many nodes a typical hierarchy of yours contains?

Actually, the main problem is breadth. It is the aggregation of the fact rows that needs solving.

The question is whether you'll need the ability to have lazy loading (via paging).

Indeed, that is a requirement.

If not, then you could load the whole hierarchy upfront and fill that into a JSON Model. That's the typical workaround to get data from non-OData sources into a Tree Table.

That's what we did and the approach we are currently trying to avoid.
The main problems with this approach are:

loading the hierarchy clientside might be doable, but that still does not give us measure aggregation at each level.
even if some measures could be aggregated client side if the fact table is sufficiently small, then the code is very far from maintable as each measure needs its own bit of client code. This approach is not flexible for the applications we have in mind.

However, if you need paging, you may implement a subclass of sap.ui.model.ListBinding rather than any of the TreeBinding classes.

Thanks for that info, I appreciate it a lot.


Espresso and Toothpick

Hi,
I am getting the following error when i have more than 1 test in my espresso test class.
java.lang.IllegalStateException: TestModules can only be installed once per scope.
My test rule is as follows;
I noticed it didn't matter if i reset or closed the scope i still got this error. I looked into your code and could the problem be due to a flag not being reset?
ActivityTestRule testRule = new ActivityTestRule(ExampleMainActivity.class, false) {
    @Override
    protected void beforeActivityLaunched() {
        super.beforeActivityLaunched();
        Context appContext = InstrumentationRegistry.getTargetContext().getApplicationContext();
        scope = Toothpick.openScope(appContext);
        scope.installTestModules(new ExampleMainActivityTest.TestModule());
    }

    @Override
    protected void afterActivityFinished() {
        super.afterActivityFinished();
        Toothpick.reset();
    }
};

It all seems to work when i have just one test. Thanks for looking into it.

I would swap the reset and the super call in afterActivityFinished . But it's probably not the issue.
We need you to debug your test and see if really there are consecutive callls to installTestModules without reset being called.

Hi,
I had the wrong method it should have been afterActivityLaunched() and NOT afterActivityFinished(). The reset is now being called however i am getting a new error
java.lang.IllegalStateException: The scope with name au.com.auspost.digitalid.android.app.Application@f1ceca4 has been already closed. It is not possible to use it to create new instances.
With the type of testing i am doing i would need openScope and Install Modules and then reset when it finishes for every test.

here is the test class that is producing the exception "has been already closed"
This occurs when testLaunchApplication2() executes which calls beforeActivityLaunched again with the same application context.
@RunWith(AndroidJUnit4.class)
public class ExampleMainActivityTest {
WeatherManager weatherManager;

ActivityTestRule<ExampleMainActivity> testRule = new ActivityTestRule<ExampleMainActivity>(ExampleMainActivity.class, false) {

    @Override
    protected void beforeActivityLaunched() {
        super.beforeActivityLaunched();
        Context appContext = InstrumentationRegistry.getTargetContext().getApplicationContext();
        Scope scope = Toothpick.openScope(appContext);
        scope.installTestModules(new ExampleMainActivityTest.TestModule());
    }

    @Override
    protected void afterActivityLaunched() {
        Toothpick.reset();
        super.afterActivityFinished();
    }
};

@Test
public void testLaunchApplication1() {
    weatherManager = mock(WeatherManager.class);
    testRule.launchActivity(null);
    when(weatherManager.getWeatherRxJava(anyObject())).thenReturn(rx.Observable.just(getWeather()));
    onView(withId(R.id.navigate)).perform(click());
    assertTrue(true);
}

@Test
public void testLaunchApplication2() {
    weatherManager = mock(WeatherManager.class);
    testRule.launchActivity(null);
    when(weatherManager.getWeatherRxJava(anyObject())).thenReturn(rx.Observable.just(getWeather()));
    onView(withId(R.id.navigate)).perform(click());
}

private class TestModule extends Module {
    public TestModule() {
        bind(WeatherManager.class).toInstance(weatherManager);
    }
}

public Weather getWeather() {
    Weather weather = new Weather();
    Weather.Main main = new Weather.Main();
    weather.setMain(main);
    main.setTempMax(31d);
    return weather;
}

}

Hi,
Apparently afterActivityFinished() wasn't been called so i added a method to do the reset after each test using the @After annotation as below;
@RunWith(AndroidJUnit4.class)
public class ExampleMainActivityTest {
public static String TAG = "toothpick-test";

WeatherManager weatherManager;

ActivityTestRule<ExampleMainActivity> testRule = new ActivityTestRule<ExampleMainActivity>(ExampleMainActivity.class, false) {

    @Override
    protected void beforeActivityLaunched() {
        super.beforeActivityLaunched();
        Log.d(TAG, "beforeActivityLaunched()");
        Context appContext = InstrumentationRegistry.getTargetContext().getApplicationContext();
        Scope scope = Toothpick.openScope(appContext);
        scope.installTestModules(new ExampleMainActivityTest.TestModule());
    }
};

@After
public void tearDown() {
    Log.d(TAG, "teardown");
    Toothpick.reset();
}

@Test
public void testLaunchApplication1() {
    weatherManager = mock(WeatherManager.class);
    Log.d(TAG, "before launchActivity1");
    testRule.launchActivity(null);
    Log.d(TAG, "after launchActivity1");
    when(weatherManager.getWeatherRxJava(anyObject())).thenReturn(rx.Observable.just(getWeather()));
    onView(withId(R.id.navigate)).perform(click());
    assertTrue(true);
}

@Test
public void testLaunchApplication2() {
    weatherManager = mock(WeatherManager.class);
    Log.d(TAG, "before launchActivity2");
    testRule.launchActivity(null);
    Log.d(TAG, "after launchActivity2");
    when(weatherManager.getWeatherRxJava(anyObject())).thenReturn(rx.Observable.just(getWeather()));
    onView(withId(R.id.navigate)).perform(click());
}

private class TestModule extends Module {
    public TestModule() {
        bind(WeatherManager.class).toInstance(weatherManager);
    }
}

public Weather getWeather() {
    Weather weather = new Weather();
    Weather.Main main = new Weather.Main();
    weather.setMain(main);
    main.setTempMax(31d);
    return weather;
}

}
02-02 15:54:52.857 9001-9026/au.com.auspost.digitalid.android.debug D/toothpick-test: before launchActivity1
02-02 15:54:52.862 9001-9026/au.com.auspost.digitalid.android.debug D/toothpick-test: beforeActivityLaunched()
02-02 15:54:53.243 9001-9026/au.com.auspost.digitalid.android.debug D/toothpick-test: after launchActivity1
02-02 15:54:53.923 9001-9026/au.com.auspost.digitalid.android.debug D/toothpick-test: teardown
02-02 15:54:54.098 9001-9026/au.com.auspost.digitalid.android.debug D/toothpick-test: before launchActivity2
02-02 15:54:54.114 9001-9026/au.com.auspost.digitalid.android.debug D/toothpick-test: beforeActivityLaunched()
I am now getting a different exception when the second test case runs.
java.lang.IllegalStateException: The scope with name android.app.Application@f1ceca4 has been already closed. It is not possible to use it to create new instances.

Do you have a stacktrace?
When Toothpick.reset() is called, all TP scopes are closed. Thus, they cannot be used anymore. However, you can open new ones.
Is it possible that your activity is still using the old scope? The one closed after testLaunchApplication1 .

Hi,
Here is the stack trace. The reset is being called before the testLauchApplication2 is executed.
java.lang.IllegalStateException: The scope with name au.com.app.android.app.Application@89995e9 has been already closed. It is not possible to use it to create new instances.
at toothpick.ScopeImpl.crashIfClosed(ScopeImpl.java:509)
at toothpick.ScopeImpl.getInstance(ScopeImpl.java:53)
at toothpick.ScopeImpl.getInstance(ScopeImpl.java:48)
at au.com.app.android.activity.main.ExampleMainFragment$$MemberInjector.inject(ExampleMainFragment$$MemberInjector.java:12)
at au.com.app.android.activity.main.ExampleMainFragment$$MemberInjector.inject(ExampleMainFragment$$MemberInjector.java:9)
at toothpick.InjectorImpl.inject(InjectorImpl.java:25)
at toothpick.Toothpick.inject(Toothpick.java:140)
at au.com.app.android.activity.main.ExampleMainFragment.onCreate(ExampleMainFragment.java:35)
at android.app.Fragment.performCreate(Fragment.java:2198)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:942)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148)
at android.app.BackStackRecord.run(BackStackRecord.java:793)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535)
at android.app.FragmentController.execPendingActions(FragmentController.java:325)
at android.app.Activity.performStart(Activity.java:6252)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
java.lang.RuntimeException: Unable to start activity ComponentInfo{au.com.app.android.debug/au.com.app.android.activity.main.ExampleMainActivity}: java.lang.IllegalStateException: The scope with name au.com.app.android.app.Application@89995e9 has been already closed. It is not possible to use it to create new instances.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.IllegalStateException: The scope with name au.com.app.android.app.Application@89995e9 has been already closed. It is not possible to use it to create new instances.
at toothpick.ScopeImpl.crashIfClosed(ScopeImpl.java:509)
at toothpick.ScopeImpl.getInstance(ScopeImpl.java:53)
at toothpick.ScopeImpl.getInstance(ScopeImpl.java:48)
at au.com.app.android.activity.main.ExampleMainFragment$$MemberInjector.inject(ExampleMainFragment$$MemberInjector.java:12)
at au.com.app.android.activity.main.ExampleMainFragment$$MemberInjector.inject(ExampleMainFragment$$MemberInjector.java:9)
at toothpick.InjectorImpl.inject(InjectorImpl.java:25)
at toothpick.Toothpick.inject(Toothpick.java:140)
at au.com.app.android.activity.main.ExampleMainFragment.onCreate(ExampleMainFragment.java:35)
at android.app.Fragment.performCreate(Fragment.java:2198)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:942)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148)
at android.app.BackStackRecord.run(BackStackRecord.java:793)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535)
at android.app.FragmentController.execPendingActions(FragmentController.java:325)
at android.app.Activity.performStart(Activity.java:6252)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
... 9 more
Test running failed: Instrumentation run failed due to 'java.lang.IllegalStateException'

i even changed to the code

Could I see the code of ExampleMainActivity  and ExampleMainFragment?
According to the stacktrace, it looks like ExampleMainFragment.onCreate() is using an old scope when calling Toothpick.inject

Here the requested classes
public class ExampleMainActivity extends DrawerBaseActivity {
private final String TAG = ExampleMainActivity.class.getSimpleName();

@Override
protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setContentView(R.layout.empty_base);
    addFragment(new ExampleMainFragment());
    setTitle("This is the Main Test Page");
    Log.d(TAG, "onCreate()");
}

public boolean isTopLevelActivity() {
    return true;
}

}
public class ExampleMainFragment extends BaseFragment {
static final String TAG = ExampleMainFragment.class.getSimpleName();
@Inject
Whiteboard whiteboard;

@Inject
WeatherManager weatherManager;

boolean showProgress = true;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Toothpick.inject(this, getApplicationScope());
    Log.d("----- W ------", " whiteboard is " + whiteboard);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view =  inflater.inflate(R.layout.example_fragment_main, container, false);
    return view;
}

@OnClick(R.id.info_button)
public void onInfoClicked() {
    Log.d(TAG, "onInfoClicked()");
    MessageUtils.showInlineInfoMessage("This is an info message.");
}

@OnClick(R.id.warning_button)
public void onWarningButtonClicked() {
    Log.d(TAG, "onWarningButtonClicked()");
    MessageUtils.showInlineWarningMessage("This is an warning message.");
}

@OnClick(R.id.error_button)
public void onErrorButtonClicked() {
    Log.d(TAG, "onErrorButtonClicked()");
    MessageUtils.showInlineErrorMessage("This is an error message.");
}

@OnClick(R.id.sucess_button)
public void onSuccessButtonClicked() {
    Log.d(TAG, "onSuccessButtonClicked()");
    MessageUtils.showInlineSuccessMessage("This is a success message.");
}

@OnClick(R.id.progress_button)
public void onProgressButtonClicked() {
    Log.d(TAG, "onProgressButtonClicked()");
    if (showProgress) {
        ProgressUtils.showProgress();
        showProgress = false;
    } else {
        ProgressUtils.hideProgress();
        showProgress = true;
    }
}

@OnClick(R.id.simple_dialog)
public void onMaterialDialogButtonClicked() {

    MaterialDialog.Builder builder =
        new MaterialDialog.Builder(getActivity())
            .title("This is a test title")
            .content("This is a test message")
            .positiveText(R.string.button_OK)
            .negativeText(R.string.button_no)
            .onPositive((dialog, which) -> {
                dialog.dismiss();
            })
            .onNegative((dialog, which) -> {
                dialog.dismiss();
            });
    MaterialDialog materialDialog = builder.build();
    materialDialog.show();
}

@OnClick(R.id.navigate)
public void onWeatherClicked() {
    addCompositeSubscription(weatherManager.getWeatherRxJava("melbourne, australia")
            .compose(defaultOptions())
            .subscribe(weather -> {
                String msg = String.format("The max temp today in %s is: %s F", weather.getName(), weather.getMain().getTempMax());
                MessageUtils.showInlineSuccessMessage(msg);
            }, error -> {
                MessageUtils.showInlineErrorMessage("Could not retrieve the temp." + error.getMessage());
            })
    );
}

}

@markchristopherng can i see all the logic related to getApplicationScope ?

i am almost giving you all the code :) If i have time over the next couple of weeks i will try to create a public repo (i need to strip out all the company ip). my gut feeling is that this could be related with espresso, do you use espresso at groupon?
BaseFragment.java
public Scope getApplicationScope() {
return ((Application) getActivity().getApplication()).getScope();
}
Application.java
//Toothpick scope
Scope scope;
@Override
public void onCreate() {
    super.onCreate();
    Log.d(TAG, "onCreate()");
    scope = Toothpick.openScope(this);
    scope.installModules(new ApplicationModule(this));
    Toothpick.inject(this, scope);

}

public Scope getScope() {
    return scope;
}

Thx for sharing all the code 😄.
The issue is related to the way you keep the app scope inside Application.java.
These are the steps:

Application.java opens app scope (scope 1) and installs ApplicationModule.
Scope 1 is saved inside the Application instance.
The first activity launch opens scope 1 and install test module.
Scope 1 is used inside the fragment to inject.
The scope 1 is reset. It cannot be used anymore.
The second activity launch opens a new app scope (scope 2) and install test module.
Scope 1 (and not 2) is used inside the fragment to inject. Scope 1 is the one return by Application.getScope().
Scope 1 is closed -> It cannot be used anymore -> It fails

I have a couple of suggestions:

What is defined inside ExampleMainActivityTest.TestModule()? If you don't have mocks or anything that needs to be reset, do you need to reset TP?

// NEEDED?
Context appContext = InstrumentationRegistry.getTargetContext().getApplicationContext();
Scope scope = Toothpick.openScope(appContext);
scope.installTestModules(new ExampleMainActivityTest.TestModule());

If you do need to reset it, you can have a look at this issue: https://github.com/stephanenicolas/toothpick/issues/188

The TestModule is binding to a mock and overriding the real implementation.
I tried your second suggestion and it seems to work, i was wondering if you could describe what is happening in detail like you did above as i am not exactly sure i fully understand it.
Through app the app i used Toothpick.openScope(APP_SCOPE) as suggested in the comments but i was wondering why wouldn't you use Toothpick.openScopes(ROOT_SCOPE, APP_SCOPE) instead. I changed the code code as follows;
Application.java
@Override
public void onCreate() {
super.onCreate();
scope = Toothpick.openScope(ROOT_SCOPE);
scope.installModules(new ApplicationModule(this));
Toothpick.inject(this, scope);
Scope appScope = Toothpick.openScopes(ROOT_SCOPE, APP_SCOPE);

}
Is the openScopes(ROOT_SCOPE, APP_SCOPE) necessary to say APP_SCOPE is a child of ROOT_SCOPE?
Activity.java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toothpick.inject(this, APP_SCOPE);
}
Thanks looking forward for you reply.

Glad it worked!
Steps Production:

Application.java opens ROOT_SCOPE and installs ApplicationModule.
Application.java opens APP_SCOPE and makes it a child of ROOT_SCOPE. So APP_SCOPE inherits the bindings of ROOT_SCOPE.

ROOT_SCOPE
      \
    APP_SCOPE

All injections throughout the app use APP_SCOPE as the base scope. Everything works as if ROOT_SCOPE  didn't exist:

// Here we are reopening the APP_SCOPE.
// It was already defined as a child of ROOT_SCOPE in Application.onCreate
// and we are not changing that.
Toothpick.inject(this, Toothpick.openScope(APP_SCOPE));

Steps Espresso Tests:

Application.java opens ROOT_SCOPE and installs ApplicationModule.
Application.java opens APP_SCOPE (scope 1) and makes it a child of ROOT_SCOPE. So APP_SCOPE inherits the bindings of ROOT_SCOPE.

ROOT_SCOPE
      \
    APP_SCOPE

The first activity launch opens scope 1 and install test module.

// We need to specify ROOT_SCOPE as we will need to link again after the every run
Scope appScope = Toothpick.openScopes(ROOT_SCOPE, APP_SCOPE);
appScope.installTestModules(new YourTestModule());

Scope 1 is used inside the fragment/activity to inject.
Scope 1 is closed when first activity launch is over.

Toothpick.closeScope(APP_SCOPE);

The second activity launch opens a new APP_SCOPE (scope 2) and makes it a child of ROOT_SCOPE (still the one defined at step one, we didn't touch it). It install test module as well.

// We need to specify ROOT_SCOPE as we will need to link again after the every run
Scope appScope = Toothpick.openScopes(ROOT_SCOPE, APP_SCOPE);
appScope.installTestModules(new YourTestModule());

Scope 2 is used inside the fragment/activity to inject.

Feel free to close it once you are happy with the result.
Also, if you come with another solution that you would like to share, I'd be happy to see it.
Regarding your previous question: At Groupon we didn't have this issue as we "don't use mocks" with our Espresso tests.

Thanks for the detailed explanation it really helps, closing this issue.


Gdax Brokerage

Current state of changes to introduce support for gdax brokerage.
Planned features are complete. Testing is on-going as are quality improvements. Currently, unit tests pass and provide good coverage of new features. Gdax production trading tests are still being debugged.
Once the support for a crypto security type is ready, master can be merged into this branch and minor changes made to output Crypto rather than Forex as is currently.

Status update: I've now completed almost all planned production debugging and testing. It is now possible to execute trades and manage orders and receive fills and ticks through a QCAlgorithm with GDAX.
Proving all of this using the production test structure in GDAXBrokerageIntegrationTests is the new focus.
There are several areas that could be implemented later or not at all but I haven't planned for any other features in this PR. If something is missing: please flag this up. Anyone that wishes to assist in identifying bugs would be very welcome and I will do what I can to get you up and running.

The latest GDAX wss API has been introduced and now provides a best bid and ask ticker channel. This removes the need to reconstruct the order book in the brokerage, so is well worth using. This will mean some significant additional changes but should result in a lot less code.

Doesn't the ticker channel only receive a message when a trade/match happens ?
In this case we would only receive bid/ask updates when there is a trade: this can be a problem on less traded instruments like ETH/EUR where there can be no trades for minutes, but bid/ask prices are moving.

The work to use the new wss api is complete and orders, tickers and fills should work again.

One point that is worth raising: the exchange does not support update of orders. This method currently throws a not supported exception if called.
It might be preferable to instead cancel and place a new order to simulate an update. However, this might be misleading for algorithms that expect an update and rely on there not being an exposed window between the cancel and place (like with a stop loss).
In terms of the update tests in QuantConnect.Tests.Brokerages.BrokerageTests I'm probably going to add logic to exclude these for gdax.
We should also catch the update order higher in the stack. I'm thinking CanSubmitOrder in BrokerageModel but there might be somewhere more appropriate?

@jameschch correct CanSubmitOrder is a good place for that. We used to simulate some orders for brokerages but it is too risky so cancelling is fine until the broker has that feature.

The brokerage integration tests have now passed when live trading a cash account. There are some limitations on the scope of testing which will need to be covered off after further discussion.
I am still running reliability and stability tests and will likely continue this until release. Unit tests will fail currently as the needs of production testing conflicts until we merge in the dedicated Crypto security type.
I have added a service to supply missing conversion rates for non USD denominations to enable more production testing scenarios. I do think the missing conversion rates should be a concern of the crypto security type, or the portfolio itself, rather then the brokerage, but we've not yet discussed how to tackle this.

Merged with a fresh PR skipping all the other LEAN changes for cleaner diff #1211


CodeTime: Token validation failed

When I go to codetime.datreks.com to auth, I get:
{"code":-1,"message":"Error 1290: The MySQL server is running with the LOCK_WRITE_GROWTH option so it cannot execute this statement"}

Using Visual Studio Code 1.56-insiders.

@ronilaukkarinen Thanks for the feedback, I will fix it soon.

@ronilaukkarinen The problem has been fixed, thanks for your feedback.


Font not works

I have integrated your library into my engine:
Now i have something like this:
nvgFontSize(vg, 20.0f);
nvgFontFace(vg, "sans");
nvgFillColor(vg, nvgRGBA(255, 255, 255, 32));
nvgTextAlign(vg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE);
nvgText(vg, viewport.width - 300, viewport.height - 300, "HELLO WORLD", NULL);
But text is not shown, is there any prerequesities or define i need to add?
Thanks

carefull with the line
nvgFillColor(vg, nvgRGBA(255, 255, 255, 32));
the 32 alpha value is source of bug, you may not see the font. Use 255 instead if any issue.

I have a very similar issue, rectangles and circle renders fine, but text is not visible (with entypo.ttf or just rectangles (with emoji font).
like this:

The font is loaded (at least the font id is >0).
I assume something with the texture state has gone wrong..
I'm using OpenGL 2.

@petersupan looks text rendering is working, but you get unicode undefined charaters. The text rendering expects UTF-8, and the font needs to support the glyphs you're rendering (i.e. with asian languages). What kind of strings are you rendering?

I render the text "blablablad", (a std::string, i take .c_str(), using multibyte in the project).
I just realized that when I render "blablabla12345", the numbers appear, only the letters do not, so it seems you are right, that is just doesn't find the glyphs..
I get Opengl Errors 502 (invalid operation):
after fill fill /
after tex paint tex/
after triangles fill/
after fill simple

I render the text "blablblad", a std::string (with multibyte character set), passed with bla.c_str().
I just realized that when I render "blabla123556", the numbers are rendered and the letters are not, but only in the Notoemoji font (with entypo nothing is visible). So it really seems i just cant find the glyphs. How I am supposed to pass the string?
I get Opengl errors (502- invalid operation)
after tex paint tex
after triangles fill
after fill simple
after fill fill

@petersupan multiubyte char set can mean a lot of things depending on platform, etc. Take a look at  you platform documentation on how to convert the strings to UTF-8 (which is also multibyte char set, but yours could be UTF-16 or something else).
Note that in the nanovg demo the emoji font is added as fallback font to a regular font which has all the usual glyphs.

Argh, thanks for the hints. In the end it was a combination of using the wrong font as fallback and a typo in the path to the correct font..


cmd/go: test slow/not working

What version of Go are you using (go version)?

go version devel +b6ead9f Tue Jul 7 21:53:11 2015 +0000 windows/amd64

What operating system and processor architecture are you using?

Windows 7 64bit, Intel i7.

What did you do?

Tried to run go test.

What did you expect to see?

Report of the tests. Normally (go 1.4) within two seconds or so.

What did you see instead?

Nothing, after about 30 secs I killed the test and nothing got reported back. Sometimes I get (maybe 1 in 10 times):
exit status 2
FAIL    github.com/Thomasdezeeuw/markdown       15.857s

Tried to run go test.

On what?
(github.com/Thomasdezeeuw/markdown seems to be private)

If your tests take a long time to run, then "go test" is going to take a long time run.  That is definitely the first thing to investigate.
If you are absolutely certain that the problem is not in your code, then you need to give us a test case we can use to replicate the problem ourselves.  Otherwise there is nothing we can do.

The code is indeed private at the moment, however normally the tests run fine in under two seconds. But even if the code is problem isn't there a timeout option normally?

Running go test timeout 2s, it correctly timeouts. Could it be that 1.4 had a default timeout and 1.5 doesn't?

Both Go 1.4 and 1.5 have a default timeout of 10 minutes.  However, I don't how that could be the issue here.    Look at http://tip.golang.org/doc/go1.5#runtime .  Is it possible that your tests or code are depending on a specific goroutine scheduling order?

You could also try to run the test with the race detector on
go test -race

I'm going to close this, running with a timeout is good enough for me.

In case anyone wonders why 'go test' takes forever (>10s) on a Windows machine with Avast, you might want to disable Avast's DeepScreen, it tries to sandbox the code and analyze your binary.
It took my way too long to figure this out. More details here.


Check for abap_true type fails against char01

The following code (which is ok in the playground) reports an error in github using linter (V702)
PROGRAM zfoobar.
DATA: lt_field_cat TYPE lvc_t_fcat,
      ls_variant   TYPE disvariant,
      ls_layout    TYPE lvc_s_layo,
      go_custom_container TYPE REF TO cl_gui_custom_container,
      go_grid             TYPE REF TO cl_gui_alv_grid,
      gt_alv_link_data    TYPE STANDARD TABLE OF mara WITH DEFAULT KEY.

IF go_custom_container IS INITIAL.
  CREATE OBJECT go_custom_container EXPORTING container_name = 'CUSTOM_3000'.
  CREATE OBJECT go_grid EXPORTING i_parent = go_custom_container.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
      EXPORTING
        i_structure_name = 'MARA'
      CHANGING
        ct_fieldcat      = lt_field_cat.

  ls_variant-report = sy-repid.
  ls_layout-cwidth_opt = abap_true.

  go_grid->set_table_for_first_display( EXPORTING is_variant        = ls_variant
                                                    i_save          = abap_true
                                                    is_layout       = ls_layout
                                          CHANGING  it_fieldcatalog = lt_field_cat
                                                    it_outtab       = gt_alv_link_data ).
ENDIF.

if using deps, the finding is correct, https://github.com/abaplint/deps/blob/main/src/alv/cl_gui_alv_grid.clas.abap#L287

if using deps, the finding is correct, https://github.com/abaplint/deps/blob/main/src/alv/cl_gui_alv_grid.clas.abap#L287

But isn't the definition in 'deps' incorrect? This is a CHAR01 in 7.50, would be surprised if it was changed later?

yes, deps is incorrect, pull requests welcome

I'll try to have a look

yes, deps is incorrect, pull requests welcome

Could you check that I'm allowed to create branch/pr . I'm getting this when trying to branch - No option to create

see https://docs.github.com/en/get-started/quickstart/fork-a-repo

closing


eval public

env read only strings
https://github.com/Almeeida/Simplicity/blob/de3c54a0defbc649b71de6fc81de80e9ec5e6a34/commands/eval.js#L6

q

seu cancer


No way to make it work with webpack 3.9.0 ?

Hi, i am using webpack 3.9.0 and babel 6 in my project, and wanted to integrate docz.
I found the plugin to make it work with babel 6 (https://github.com/pedronauck/docz/tree/master/packages/docz-plugin-babel6), but is there anyway to make it work with webpack 3.9.0 or is webpack 4 a must for integrating docz?

@ghostCoder We don`t support webpack 3.*, you need to upgrade your webpack to use docz.


groupPathsBy none

Is your feature request related to a problem?
Currently, a navigation sidebar only supports grouping by tags. Alternatively, when groupPathsBy is not set - no sidebar is shown.
This grouping by tag is not always desired and sometimes there is a need to just list endpoints
Describe the solution you'd like
provide support for groupPathsBy: 'none' which will disable grouping endpoint by tag but still will render a sidebar
Describe alternatives you've considered
Alternatively, when groupPathsBy is not provided then no grouping will happen but the sidebar will be shown.

Hi @tikolakin, if you don't pass any sidebarOptions then you can still use Docusaurus autogenerated sidebars to create a sidebar from the output.

Hi @sserrata
Thanks for the hint 👍🏻 , indeed it work in the way we needed.
I will just leave a reference to docusaurus docs here https://docusaurus.io/docs/2.2.0/sidebar/autogenerated


chore(deps): update reviewdog/action-yamllint digest to efecced

This PR contains the following updates:

Package
Type
Update
Change

reviewdog/action-yamllint
action
digest
8c429df -> efecced

Configuration
📅 Schedule: Branch creation - "" in timezone Europe/Berlin, Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.

[ ] If you want to rebase/retry this PR, click this checkbox.

This PR has been generated by Renovate Bot.

bors merge


Nothings happens

Hi. I follow the readme content on how to basically call a dropdown but nothing happens no error or debug on the console. I tried the normal debugging ( clean build restart xcode) but still had the problem. I am new to github so I'm not sure if I am properly discussing my concern here. Below is my code.
import UIKit
import DropDown

class Faq: UIViewController {

    @IBOutlet weak var lblCopyright: UILabel!
    @IBOutlet weak var lblVersion: UILabel!

    @IBOutlet weak var category: UIView!
    let dropDown = DropDown()

    override func viewDidLoad() {
        super.viewDidLoad()
        lblCopyright.text = AppConstant.copyright_text
        lblVersion.text = AppConstant.appVersion
        dropDown.anchorView = category
        dropDown.show()
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

}

I am using swift 3 and xcode 8.1. Thanks.

Seems you didn't setup your dropDown?
Maybe you can see Demo in the project to get more detail.

You need to set datasource to get the dropdown displayed.


Edit VCV vowel map

Moved 1-char symbols to the end of the list so that 2-char symbols are correctly recognized first

Would you mind looking into the issue more to fix the script, so that we could handle it correctly without depending on certain orders of items in the map?

I checked more closely and the order doesn't matter, as it appears to be sorting correctly by length. It seems the issue I had was actually caused by some common characters being missing from the default list. I'll revise my PR and check the CVVC default lists as well.

Changes LGTM, Thank you!
Could you please also bump up the versions of these two plugins?

💯


Test Python 3.11

This PR adds Python 3.11 to the test matrix.
3.11 hits release candidate in a few weeks

The Python images for pipelines are out of date and the documentation links are broken :-/
Have you considering switching CI to Github Actions yet?

/azp list

/azp run

/azp where

Azure DevOps pipeline doesn't have Python 3.11 available right now:

https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops&tabs=yaml#software
https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2204-Readme.md#python

which is tracked by

https://github.com/actions/runner-images/issues/6459

So we have to wait until Azure DevOps pipeline has Python 3.11 available.

/azp run

CI fails:
https://dev.azure.com/azclitools/public/_build/results?buildId=18451&view=logs&jobId=9af7c6b6-85f2-5509-5b39-c09353ced287&j=9af7c6b6-85f2-5509-5b39-c09353ced287&t=5ea479ae-b0a5-5296-d41f-6c93c3232daa
Traceback (most recent call last):
  File "/mnt/vss/_work/1/s/.tox/py311/bin/pylint", line 8, in <module>
    sys.exit(run_pylint())
             ^^^^^^^^^^^^
  File "/mnt/vss/_work/1/s/.tox/py311/lib/python3.11/site-packages/pylint/__init__.py", line 21, in run_pylint
    from pylint.lint import Run as PylintRun
  File "/mnt/vss/_work/1/s/.tox/py311/lib/python3.11/site-packages/pylint/lint/__init__.py", line 76, in <module>
    from pylint.lint.parallel import check_parallel
  File "/mnt/vss/_work/1/s/.tox/py311/lib/python3.11/site-packages/pylint/lint/parallel.py", line 8, in <module>
    from pylint import reporters
  File "/mnt/vss/_work/1/s/.tox/py311/lib/python3.11/site-packages/pylint/reporters/__init__.py", line 26, in <module>
    from pylint import utils
  File "/mnt/vss/_work/1/s/.tox/py311/lib/python3.11/site-packages/pylint/utils/__init__.py", line 46, in <module>
    from pylint.utils.ast_walker import ASTWalker
  File "/mnt/vss/_work/1/s/.tox/py311/lib/python3.11/site-packages/pylint/utils/ast_walker.py", line 7, in <module>
    from astroid import nodes
  File "/mnt/vss/_work/1/s/.tox/py311/lib/python3.11/site-packages/astroid/__init__.py", line 51, in <module>
    from astroid.nodes import node_classes, scoped_nodes
  File "/mnt/vss/_work/1/s/.tox/py311/lib/python3.11/site-packages/astroid/nodes/__init__.py", line 27, in <module>
    from astroid.nodes.node_classes import (  # pylint: disable=redefined-builtin (Ellipsis)
  File "/mnt/vss/_work/1/s/.tox/py311/lib/python3.11/site-packages/astroid/nodes/node_classes.py", line 47, in <module>
    from astroid import decorators, mixins, util
  File "/mnt/vss/_work/1/s/.tox/py311/lib/python3.11/site-packages/astroid/decorators.py", line 27, in <module>
    import wrapt
  File "/mnt/vss/_work/1/s/.tox/py311/lib/python3.11/site-packages/wrapt/__init__.py", line 10, in <module>
    from .decorators import (adapter_factory, AdapterFactory, decorator,
  File "/mnt/vss/_work/1/s/.tox/py311/lib/python3.11/site-packages/wrapt/decorators.py", line 34, in <module>
    from inspect import ismethod, isclass, formatargspec
ImportError: cannot import name 'formatargspec' from 'inspect' (/opt/hostedtoolcache/Python/3.11.0/x64/lib/python3.11/inspect.py)
ERROR: InvocationError for command /mnt/vss/_work/1/s/.tox/py311/bin/pylint knack --rcfile=.pylintrc -r n -d I0013 (exited with code 1)

Only adding Python 3.11 tests is far from enough. Libraries declared in requirements.txt also need to be upgraded in order to support Python 3.11.
We will continue the work in https://github.com/microsoft/knack/pull/275.


Indexing Project..0

Whenever I start the Fuzzy Finder, it gives a screen stating:  Indexing project..0.
How do I get it to work properly?

https://github.com/atom/fuzzy-finder/issues/205?

+1

Closing as a duplicate of #205 - feel free to subscribe there for updates.


Setup rustfmt

Summary of changes
Changes introduced in this pull request:

Add rustfmt.toml

Reference issue to close (if applicable)
Other information and links
https://github.com/rust-lang/rustfmt

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


[Bug] SnowsightError.PERMISSION / Push worksheets 403

Description
There was an update on SF save-draft endpoint which currently results in 403. Path param, Request body and cookies seem to all have changed. Will investigate.
Seems like as of now, fetch works but not push.
Debugging instructions
Snowflake side
Look at shape of requests with https://<account_url>/v0/queries/<worksheet_id>/save-draft
sf_git side
worksheets_utils.write_worksheet
Fix instructions
Probably need to use the rest_utils.api_post and .api_get functions for most endpoints to naturally flow things such as CSRF, S8_SESSION, etc
ETA
As of Fri Oct 11, I don't have time to look into it. Earliest I can do is late October.
If someone wants to push a tentative fix, I will review.

Fixed in https://github.com/tdambrin/sf_git/releases/tag/v1.4.1


How to get curvature

Hi Marcel
I have a set of WGS84 coordiantes, and I use the coordinates to generate a Bspline line, how could I get the curvature and corresponding coordinate? I could use derive() twice to get the curvature, but I don't know how can I get the relation between coordinate and curvature?
Besides, what's the meaning of control point and knots for the bspline line generated by derive()?
Kind regards,
Luffy

Hi Luffy,

Besides, what's the meaning of control point and knots for the bspline line generated by derive()?

Lets say you have a spline s and use ts_bspline_derive() to create the derivative of s, namely s'. Evaluating s' at, for instance, t = 0.5 gives you the derivative of s at t = 0.5. By deriving s' once more to s'' and evaluating s'' at t = 0.5, you get the second derivative of s at t = 0.5 and so on. That being said, ts_bspline_derive() returns a spline representing the derivative of the given spline. You may have a look at: http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/B-spline/bspline-derv.html for more information.

I have a set of WGS84 coordiantes, and I use the coordinates to generate a Bspline line, how could I get the curvature and corresponding coordinate? I could use derive() twice to get the curvature, but I don't know how can I get the relation between coordinate and curvature?

If I get you right, you just need to use ts_bspline_derive() and evaluate the result at the desired points. Keep in mind that the domain of the your spline and its derivative stay the same. That is, for instance, given a spline s with domain 0 <= t <= 1, the domain of its derivative also is 0 <= t <= 1.

Hi Marcel,
Thanks very much for your quickly reponse, let me try to summary your point and please help me to confirm it.
First I have a set of coordinate, every coordinate is 2 dim, e.g. lat and lon for a Point(lat, lon), to generate a line called s, then I get the first derivative s' and second derivative s'', at each knot I could get the evaluated value, use the value I could caculate the curvature. so that means, I get the Point at s(u) and get the curvate at s''(u), this is the one-to-one relation that I need point(lat,lon)->s''(u), right?
Now I have some more questions, 1) for the method evaluate(), should I use which one as value of s''(u)?
typedef struct
{
double u;         /* the knot u /
size_t k;        / the index [u_k, u_k+1) /
size_t s;        / the multiplicity of u_k /
size_t h;        / how many times u must be inserted /
size_t dim;      / dimension of a control point /
size_t n_points; / number of control points /
double points;   /* the control points of the de Boor net /
double result;   /* the result of the evaluation
} tsDeBoorNet;
points? or result? if points, should I use which one in a 2 dim Point? now the Point should not be (lat, lon) anymore, right?
2) for every knot I get the curvature s''(u), but the position of u are all the most shape curve point? e.g. the line s may have a really big shape curve at u=0.4, but u=0.4 may not in the knot vector of s''?

points? or result? if points, should I use which one in a 2 dim Point? now the Point should not be (lat, lon) anymore, right?

The field result contains the result of the evaluation. In your 2D example result[0] is lat and result[1] is lon.

for every knot I get the curvature s''(u), but the position of u are all the most shape curve point? e.g. the line s may have a really big shape curve at u=0.4, but u=0.4 may not in the knot vector of s''?

The domain (or let's say the knots range) should be the same for all splines.

so that means, I get the Point at s(u) and get the curvate at s''(u), this is the one-to-one relation that I need point(lat,lon)->s''(u), right?

I'm not quite sure what you mean.

Closing this issue for now. Feel free to reopen if necessary.


Bug when pass subfolder parameter in peftmodel.load_adapter method!

System Info
peft 0.4.0.dev0
Who can help?
No response
Information

[ ] The official example scripts
[X] My own modified scripts

Tasks

[ ] An officially supported task in the examples folder
[X] My own task or dataset (give details below)

Reproduction
Given a checkpoint folder as shown below.
drwxr-xr-x 2 root root     4096 Jul 16 09:54 LoraAdapter
-rw-r--r-- 1 root root 23443269 Jul 16 09:54 optimizer.pt
-rw-r--r-- 1 root root       27 Jul 16 09:54 README.md
-rw-r--r-- 1 root root    14575 Jul 16 09:54 rng_state.pth
-rw-r--r-- 1 root root      627 Jul 16 09:54 scheduler.pt
-rw-r--r-- 1 root root     7592 Jul 16 09:54 trainer_state.json
-rw-r--r-- 1 root root     3963 Jul 16 09:54 training_args.bin

LoraAdapter is the name I specified for the Lora adapter, which is a folder here containing the weight files and configuration files of the adapter.
-rw-r--r-- 1 root root      411 Jul 16 09:54 adapter_config.json
-rw-r--r-- 1 root root 11719577 Jul 16 09:54 adapter_model.bin

I want to continue training from this checkpoint, so I need to instantiate a PeftModel and load the weights of the Lora adapter into it. However, my adapter weight file is in a subfolder of the checkpoint, so I use the following method.
from transformers import AutoModel
from peft import PeftModelForCausalLM, LoraConfig

lora_config = LoraConfig.from_pretrained('ChatGlm2-6B_LoRA/QLora_Adapter_THUDM_chatglm2-6b/checkpoint-2000', subfolder='LoraAdapter')
base_model = AutoModel.from_pretrained('THUDM/chatglm2-6b', trust_remote_code=True, device_map='auto').half()
peftmodel = PeftModelForCausalLM(base_model, lora_config, adapter_name='LoraAdapter')

peftmodel.load_adapter(model_id='ChatGlm2-6B_LoRA/QLora_Adapter_THUDM_chatglm2-6b/checkpoint-2000', adapter_name='LoraAdapter', subfolder='LoraAdapter')

But it cannot correctly find my Lora adapter weight file.
I think the problem is here.
https://github.com/huggingface/peft/blob/029f416fced285fe72acd4e1be6c48067f7013d5/src/peft/peft_model.py#L484-L502
This method will put the 'subfolder' keyword argument into 'hf_hub_download_kwargs'.
So here
https://github.com/huggingface/peft/blob/029f416fced285fe72acd4e1be6c48067f7013d5/src/peft/peft_model.py#L519-L522
The 'subfolder' parameter is not present in kwargs anymore.
Expected behavior
please fix

Hi @RuSignalFlag
https://github.com/huggingface/peft/pull/721 should fix the issue, thanks a lot for noticing!


No interface UI after upgrade from v1 to v2

Describe the bug
After upgrading from v1 to v2, our postal interface isn't showing the UI, only text.
To Reproduce
From v1 to v2

mv /usr/bin/postal /usr/bin/postal.v1
a) git clone https://postalserver.io/start/install /opt/postal/install
b) sudo ln -s /opt/postal/install/bin/postal /usr/bin/postal
postal upgrade
postal start

Expected behaviour
To see the default interface of postal.
Screenshots

Environment details

OS: Ubuntu 18.04
Browser: Chrome/Firefox/Opera
Version: latest all of them
Type: desktop

Additional information/context
All the containers are up and running and we don't see any errors in logs.

The original nginx config would need to be updated/replaced because it has some references to the files which no longer make sense
V1: https://github.com/postalserver/postal/blob/4e5b621232f553ed48580bfa678918207ff81cc8/resource/nginx.cfg
V2: https://github.com/postalserver/postal/discussions/1534#discussioncomment-1158045
I think the upgrading documentation needs updating to include this fact.

I confirm it is exactly what it was.
My current nginx configuration:
server {
 2     listen [::]:80;
 3     listen <IP_ADDRESS>:80;
 4     server_name example.com;
 5     return 301 https://$host$request_uri;
 6 }
 7
 8 server {
 9     listen [::]:443 ssl;
10     listen <IP_ADDRESS>:443 ssl;
11     server_name example.com;
12     ssl_certificate      /etc/letsencrypt/live/example.com/fullchain.pem;
13     ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;
14     ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
15     ssl_prefer_server_ciphers on;
16     ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+//cut//GCM:DH+AES256:RSA+AESGCM:!aNU$
17
18     location / {
19        add_header  X-Robots-Tag "noindex, nofollow, nosnippet, noarchive";
20        client_max_body_size 50M;
21        proxy_set_header X-Real-IP  $remote_addr;
22        proxy_set_header Host $host;
23        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
24        proxy_set_header X-Forwarded-Proto https;
25        proxy_pass http://<IP_ADDRESS>:5000;
26     }
27 }

I have replaced my actual domain with example.com in the above snippet.
I agree, the nginx config while upgrading could be mentioned in the Docs.
I would say, overall, that just disabling nginx (if not needed any longer) and replacing it with Caddy would be just fine.
Thanks for your help @willpower232 💪🏻


error on push: "extraneous key [body] is not permitted"

How did you install the Amplify CLI?
npm install --global
If applicable, what version of Node.js are you using?
16.20.0
Amplify CLI Version
12.0.0
What operating system are you using?
Mac 13.3.1
Did you make any manual changes to the cloud resources managed by Amplify? Please describe the changes made.
No manual changes made
Describe the bug
After upgrading Amplify (from version 10.x.x) I've been unable to push any changes to any category or environment due to the following error;
🛑 The following resources failed to deploy:
Resource Name: restApi (AWS::ApiGateway::RestApi)
Event Type: update
Reason: Properties validation failed for resource restApi with message:
#: extraneous key [body] is not permitted
URL: https://console.aws.amazon.com/cloudformation/home?region=eu-west-1#/stacks/[stackid]/events

🛑 Resource is not in the state stackUpdateComplete
Name: restApi (AWS::ApiGateway::RestApi), Event Type: update, Reason: Properties validation failed for resource restApi with message:
#: extraneous key [body] is not permitted

In my amplify/backend/api/restApi/build/restApi-cloudformation-template.json I can see a property called "body" (lowercase) which I assume should be "Body"..? I've tried updating the property name to "Body" before confirming the amplify push command, but it seems like this isn't the only place it gets generated before uploading to CloudFormation as it still errors out 😦 I've tried downgrading @aws-amplify/cli but end up with various other errors as a result.
Running amplify pull -y and then amplify push -y also errors, bizarrely, and I'm just falling into madness attempting to work out what's going on. Any ideas massively appreciated!
Expected behavior
Amplify push should update successfully
Reproduction steps
I've not been able to reproduce this using a new project, nor do I know explicitly what's caused it in my own... It only started appearing after upgrading Amplify CLI.
I've tried the following;

amplify pull the current environment, then immediately amplify push without making any changes (no change, process exits)
Modifying schema.graphql only and running a push; restApi still fails
amplify init in a new directory, followed by a pull, changing a file in a standalone function and running a push; restApi fails
Various combinations of pulls, pushes, category changes and updates

Project Identifier
305d9e06dc750149c600d79902d2f146
Log output

Deploying api restApi [ ---------------------------------------- ] 0/17
	restApi                   AWS::ApiGateway::RestApi       UPDATE_FAILED                  Fri May 12 2023 13:11:00…

[...snip...]

🛑 The following resources failed to deploy:
Resource Name: restApi (AWS::ApiGateway::RestApi)
Event Type: update
Reason: Properties validation failed for resource restApi with message:
#: extraneous key [body] is not permitted
URL: https://console.aws.amazon.com/cloudformation/home?region=eu-west-1#/stacks/[snip]/events

🛑 Resource is not in the state stackUpdateComplete
Name: restApi (AWS::ApiGateway::RestApi), Event Type: update, Reason: Properties validation failed for resource restApi with message:
#: extraneous key [body] is not permitted, IsCustomResource: false

Learn more at: https://docs.amplify.aws/cli/project/troubleshooting/

Session Identifier: e8794f96-4b27-4999-b989-5f2095aee7dc

Additional information
No response
Before submitting, please confirm:

[X] I have done my best to include a minimal, self-contained set of instructions for consistently reproducing the issue.
[X] I have removed any sensitive information from my code snippets and submission.

Hi @alexhouse, Thank you raising this. Do you have any overrides configured for the REST API and also can you please run the diff on cli-inputs.json file and let us know if you see any changes.


Suggestion

Hi, this is great. I have one suggestion and sorry I don't have time to put into a pull request. I frequently find endpoints with some garbage in them, and they have records posted with no geometry. I propose skipping those records entirely. Here's how I modded your script to do that, after line 227:
#original : geom = self.__getGeometry(feature['geometry'])
try:
geom = self.__getGeometry(feature['geometry'])
attributes = []
attributes.append(geom)
for field in self.updateFields:
if 'shape' not in field['name'].lower():
if 'date' in field['type'].lower():
try:
if len(str(feature['attributes'][field['name']])) == 13:
attributes.append(datetime.datetime.fromtimestamp(feature['attributes'][field['name']] / 1000))
else:
attributes.append(datetime.datetime.fromtimestamp(feature['attributes'][field['name']]))
except ValueError:
attributes.append(None)
except TypeError:
attributes.append(None)
else:
#getting strange OverflowError Python int too large to convert to C long, so casting section
#getting problem with some services where some fields aren't returned in results so added try/catch block
try:
newAttribute = feature['attributes'][field['name']]
if type(newAttribute) is long:
if type(int(newAttribute)) is long:
attributes.append(float(newAttribute))
else:
attributes.append(newAttribute)
else:
attributes.append(newAttribute)
except KeyError, e:
attributes.append(None)
cursor.insertRow(attributes)
except:
#no geometry
print "no geometry in record, skipping"
pass

Mike - glad you find this library useful!  It's funny, I just came across this problem a week ago when I was investigating a new data source.  Anyway, I made changes to handle null point geometry locally but didn't update the repo until this morning.  I didn't exactly implement the solution you suggested, although that would work too.  Everything should be working fine now.  Thanks for the heads up!

Awesome, I'm finding it very useful. I've come across another problem - REST endpoints where the field names have a "." in them, which get translated into underscores in the local FGDB, leading to a schema mismatch. I think I have a workaround and if I succeed, I'll do a PR. Awesome work, thank you for putting this together!


Error doing a test program

Hi,
I would like to test the library and I'm getting the following error.
Environment

Windows 11 Pro x64
libclang v<IP_ADDRESS>
cargo 1.83.0

Cargo.toml
[package]
name = "tests_lib_manifold"
version = "0.1.0"
edition = "2021"

[dependencies]
libloading = "0.8.6"
manifold3d = "0.0.5"

Cargo build
cargo build

Cargo build log
   Compiling manifold3d v0.0.5
error[E0308]: mismatched types
  --> <...>\manifold3d-0.0.5\src\error.rs:54:37
   |
54 |             value => Error::Unknown(value),
   |                      -------------- ^^^^^ expected `u32`, found `i32`
   |                      |
   |                      arguments to this enum variant are incorrect

Regards,
Alberto

Hey,
this is probably caused by this piece of code I added: https://github.com/NickUfer/manifold3d-rs/blob/b782324f484396a069dea12801f1498d8895ff5a/src/error.rs#L54-L58
When I tried to build for windows on my linux machine it told me the value is of i32. I added special code for windows to handle this. But now I cannot even reproduce the cause for why I added that...
I will remove it real quick and release a new version so you can continue your tests. But keep in mind:

this is not yet ready for use
the API can change drastically
not all types and methods are implemented yet
documentation is still missing in some places
windows support is not really that great yet, especially with the available crate features - I'm focusing on linux for now


[bug] investigate t e x i m a g type faceting in the frontend

https://calisphere-stage.cdlib.org/search/?q=
These facets found in (all harvested today, 4/25):
University of the Pacific
Palm Springs Public Library
San Jose State University

This should be fixed now. You'll need to re-harvest the affected collections starting from the mapping step. (No need to re-run the fetcher).

Thank you so much! I just tested out on one collection first (https://calisphere-stage.cdlib.org/collections/26715) -- this resolves the type faceting & the icon placeholder. Also re-harvested starting from the mapping step. Thank you!!


Regression run for new docker build gives errors in dbsta find_clks{1,2}

Describe the bug

Build from source in a new docker ubuntu container
Run ./test/regression

Observe:
find_clks1 (tcl) *ERROR* segmentation violation
find_clks2 (tcl) *ERROR* segmentation violation

find_clks1-tcl.log:
[INFO ODB-0222] Reading LEF file: Nangate45/Nangate45.lef
[INFO ODB-0223]     Created 22 technology layers
[INFO ODB-0224]     Created 27 technology vias
[INFO ODB-0225]     Created 135 library cells
[INFO ODB-0226] Finished LEF file:  Nangate45/Nangate45.lef
[INFO ODB-0222] Reading LEF file: pad.lef
[INFO ODB-0225]     Created 1 library cells
[INFO ODB-0226] Finished LEF file:  pad.lef
[INFO ODB-0128] Design: top
[INFO ODB-0130]     Created 3 pins.
[INFO ODB-0131]     Created 4 components and 22 component-terminals.
[INFO ODB-0132]     Created 2 special nets and 6 connections.
[INFO ODB-0133]     Created 6 nets and 10 connections.
Signal 11 received
Stack trace:
 0# 0x000055FBDCE9416B in /home/cdleary/OpenROAD/build/src/openroad
 1# 0x00007FC7C7A03520 in /lib/x86_64-linux-gnu/libc.so.6
 2# 0x00007FC7C7B5E97D in /lib/x86_64-linux-gnu/libc.so.6
 3# odb::dbNet::getName[abi:cxx11]() in /home/cdleary/OpenROAD/build/src/openroad
 4# 0x000055FBDD3B8334 in /home/cdleary/OpenROAD/build/src/openroad
 5# 0x000055FBDD06E4DE in /home/cdleary/OpenROAD/build/src/openroad
 6# TclNRRunCallbacks in /lib/x86_64-linux-gnu/libtcl8.6.so
 7# 0x00007FC7CB89C028 in /lib/x86_64-linux-gnu/libtcl8.6.so
 8# Tcl_EvalEx in /lib/x86_64-linux-gnu/libtcl8.6.so
 9# Tcl_Eval in /lib/x86_64-linux-gnu/libtcl8.6.so
10# sta::sourceTclFile(char const*, bool, bool, Tcl_Interp*) in /home/cdleary/OpenROAD/build/src/openroad
11# ord::tclAppInit(Tcl_Interp*) in /home/cdleary/OpenROAD/build/src/openroad
12# Tcl_MainEx in /lib/x86_64-linux-gnu/libtcl8.6.so
13# main in /home/cdleary/OpenROAD/build/src/openroad
14# 0x00007FC7C79EAD90 in /lib/x86_64-linux-gnu/libc.so.6
15# __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6
16# _start in /home/cdleary/OpenROAD/build/src/openroad
ERROR segmentation violation

Not sure why this would not show in CI? LMK if I likely did something wrong on my end.
Expected Behavior
No errors from regression.
Environment
$ ./etc/Env.sh
Git commit: deed8b941265211d244d78d3e150fe9449b3b49f
kernel: Linux 5.19.11-1rodete1-amd64
os: Ubuntu 22.04.1 LTS (Jammy Jellyfish)
cmake version 3.24.2
gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
Ubuntu clang version 14.0.0-1ubuntu1

### To Reproduce

git clone --recursive https://github.com/The-OpenROAD-Project/OpenROAD.git
sudo ./etc/DependencyInstaller.sh
mkdir build
cd build
cmake ..
make -j
cd ..
./test/regression

### Relevant log output

_No response_

### Screenshots

_No response_

### Additional Context

_No response_

@cdleary do you plan to look into this or are you asking for help?

@maliberty Working on a different bug at the moment, if nobody else is going to be able to look soon I can put it in my queue?

We also ready run the unit tests in a ubuntu docker container and they pass.  See https://jenkins.openroad.tools/job/OpenROAD-Public/job/master/ "Test docker ubuntu20".  How is this different?

Only meaningful difference I see in the logs is there's an argument to the regression script. Let me take assignment until I have something more meaningfully detailed to report.

@cdleary Can you check the commit of the OpenROAD repo as well as the commit of the sta submodule?
src/sta sometimes goes out of sync.

$ git submodule status --recursive
2a2b5cd59f5d1b596f20cbd39609c52b33299e06 src/sta (v2.2.0-524-g2a2b5cd)
95b3543e928640dfa25f9e882e72a090a8883a9c third-party/abc (heads/master)
cdleary@645a06e7adc4:~/OpenROAD$ git show
commit deed8b941265211d244d78d3e150fe9449b3b49f (HEAD -> master, origin/master, origin/HEAD)
Merge: 7c8ef24f8 6c995db65
Author: Matt Liberty<EMAIL_ADDRESS>Date:   Tue Jan 17 10:41:38 2023 -0800
Merge pull request #2761 from Pinata-Consulting/grt-congestion-report-tip

grt: add load congestion report tip routing failure

Just some debugging notes -- I don't have experience debugging across TCL swig bindings yet so getting my sea legs:
cdleary@645a06e7adc4:~/OpenROAD/src/dbSta/test$ gdb --args ../../../build/src/openroad find_clks1.tcl
[INFO ODB-0133]     Created 6 nets and 10 connections.

Thread 1 "openroad" received signal SIGSEGV, Segmentation fault.
__strlen_avx2 () at ../sysdeps/x86_64/multiarch/strlen-avx2.S:74
74      ../sysdeps/x86_64/multiarch/strlen-avx2.S: No such file or directory.
(gdb) up
#1  0x0000560ab4929465 in std::char_traits<char>::length (__s=0x1df6da55e8d369e8 <error: Cannot access memory at address 0x1df6da55e8d369e8>) at /usr/include/c++/11/bits/char_traits.h:399
399             return __builtin_strlen(__s);
(gdb) p *net
$9 = {<odb::_dbObject> = {<odb::dbObject> = {static max_name_length = 256}, _oid =<PHONE_NUMBER>}, _flags = {_sig_type = 15, _wire_type = odb::dbWireType::NONE, _special = 0, _wild_connect = 1, _wire_ordered = 1, _buffered = 0, _disconnected = 1, _spef = 0, _select = 1, _mark = 0, _mark_1 = 0, _wire_altered = 0, _extracted = 0, _rc_graph = 0, _reduced = 0,
    _set_io = 0, _io = 0, _dont_touch = 0, _fixed_bump = 0, _source = odb::dbSourceType::NONE, _rc_disconnected = 0, _block_rule = 0}, _name = 0x1df6da55e8d369e8 <error: Cannot access memory at address 0x1df6da55e8d369e8>, {_gndc_calibration_factor = 4.48415509e-44, _refCC = 4.48415509e-44}, {_cc_calibration_factor = 0, _dbCC = 0, _CcMatchRatio = 0},
  _next_entry = {_id = 33}, _iterms = {_id = 0}, _bterms = {_id =<PHONE_NUMBER>}, _wire = {_id = 22026}, _global_wire = {_id =<PHONE_NUMBER>}, _swires = {_id = 22026}, _cap_nodes = {_id = 13}, _r_segs = {_id = 0}, _non_default_rule = {_id = 49}, guides_ = {_id = 0},
  _groups = {<std::vector<odb::dbId<odb::_dbGroup>, std::allocator<odb::dbId<odb::_dbGroup> > >> = std::vector of length -23649946161907, capacity -23651019903731 = {{_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id = 0}, {
        _id = 0}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id = 0}, {_id = 0}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id = 0}, {_id = 0}, {_id =<PHONE_NUMBER>},
      {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id =<PHONE_NUMBER>}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id = 0}, {_id = 0}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {
        _id = 22026}, {_id = 0}, {_id = 0}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id = 0}, {_id = 0}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {
        _id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {
        _id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {
        _id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {
        _id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {
        _id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {
        _id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {
        _id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}, {_id =<PHONE_NUMBER>}, {_id = 22026}...}, <No data fields>}, _weight = -1117348160, _xtalk = 22026, _ccAdjustFactor = 0, _ccAdjustOrder = 0, _drivingIterm = 49}
  (gdb) p net->_name
$12 = 0x1df6da55e8d369e8 <error: Cannot access memory at address 0x1df6da55e8d369e8>

Perhaps different TCL libraries, platform vs what ./etc/DependencyInstaller.sh gave me / cmake linked against?
$ dpkg --list | grep -i tcl
ii  libtcl8.6:amd64                      8.6.12+dfsg-1build1                     amd64        Tcl (the Tool Command Language) v8.6 - run-time library files
ii  tcl                                  8.6.11+1build2                          amd64        Tool Command Language (default version) - shell
ii  tcl-dev:amd64                        8.6.11+1build2                          amd64        Tool Command Language (default version) - development files
ii  tcl-tclreadline:amd64                2.3.8-1                                 amd64        GNU Readline Extension for Tcl/Tk
ii  tcl8.6                               8.6.12+dfsg-1build1                     amd64        Tcl (the Tool Command Language) v8.6 - shell
ii  tcl8.6-dev:amd64                     8.6.12+dfsg-1build1                     amd64        Tcl (the Tool Command Language) v8.6 - development files
ii  tcllib                               1.20+dfsg-1                             all          Standard Tcl Library

Maybe try running cmake again in the folder, and seeing what versions of libs you're using.

Looks like there's only one version of tcl so far as I can tell and it's the one ldd shows too.
Valgrind indicates we're reading from something that got destructed, looking into that:
==86330== Invalid read of size 8
==86330==    at 0x6BB7150: odb::dbNet::getName[abi:cxx11]() (dbNet.cpp:629)
==86330==    by 0x41EEE50: _wrap_dbNet_getName (odbTCL_wrap.cxx:28731)
==86330==    by 0x3D96191: SWIG_Tcl_MethodCommand (dbStaTCL_wrap.cxx:1328)
==86330==    by 0xA7E6D31: TclNRRunCallbacks (in /usr/lib/x86_64-linux-gnu/libtcl8.6.so)
==86330==    by 0xA7E8027: ??? (in /usr/lib/x86_64-linux-gnu/libtcl8.6.so)
==86330==    by 0xA7E7AA6: Tcl_EvalEx (in /usr/lib/x86_64-linux-gnu/libtcl8.6.so)
==86330==    by 0xA7E8C99: Tcl_Eval (in /usr/lib/x86_64-linux-gnu/libtcl8.6.so)
==86330==    by 0x3E434F2: sta::sourceTclFile(char const*, bool, bool, Tcl_Interp*) (StaMain.cc:95)
==86330==    by 0x3A868A0: tclAppInit(int&, char**, char const*, Tcl_Interp*) (Main.cc:404)
==86330==    by 0x3A86B63: ord::tclAppInit(Tcl_Interp*) (Main.cc:433)
==86330==    by 0xA89AB18: Tcl_MainEx (in /usr/lib/x86_64-linux-gnu/libtcl8.6.so)
==86330==    by 0x3A86205: main (Main.cc:284)
==86330==  Address 0x13140018 is 8 bytes inside a block of size 16 free'd
==86330==    at 0xA793B6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==86330==    by 0x3CAFA30: __gnu_cxx::new_allocator<odb::dbNet*>::deallocate(odb::dbNet**, unsigned long) (new_allocator.h:145)
==86330==    by 0x3CAA76B: std::allocator_traits<std::allocator<odb::dbNet*> >::deallocate(std::allocator<odb::dbNet*>&, odb::dbNet**, unsigned long) (alloc_traits.h:496)
==86330==    by 0x3CA6597: std::_Vector_base<odb::dbNet*, std::allocator<odb::dbNet*> >::_M_deallocate(odb::dbNet**, unsigned long) (stl_vector.h:354)
==86330==    by 0x3CA29B1: std::_Vector_base<odb::dbNet*, std::allocator<odb::dbNet*> >::~_Vector_base() (stl_vector.h:335)
==86330==    by 0x3CA2A06: std::vector<odb::dbNet*, std::allocator<odb::dbNet*> >::~vector() (stl_vector.h:683)
==86330==    by 0x3E1D836: SwigValueWrapper<std::vector<odb::dbNet*, std::allocator<odb::dbNet*> > >::SwigSmartPointer::~SwigSmartPointer() (dbStaTCL_wrap.cxx:1849)
==86330==    by 0x3E1AD43: SwigValueWrapper<std::vector<odb::dbNet*, std::allocator<odb::dbNet*> > >::~SwigValueWrapper() (TritonCTS-pyPYTHON_wrap.cxx:3022)
==86330==    by 0x3E1820D: _wrap_find_all_clk_nets (dbStaTCL_wrap.cxx:39945)
==86330==    by 0xA7E6D31: TclNRRunCallbacks (in /usr/lib/x86_64-linux-gnu/libtcl8.6.so)
==86330==    by 0xA7E8027: ??? (in /usr/lib/x86_64-linux-gnu/libtcl8.6.so)
==86330==    by 0xA7E7AA6: Tcl_EvalEx (in /usr/lib/x86_64-linux-gnu/libtcl8.6.so)
==86330==  Block was alloc'd at
==86330==    at 0xA791013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==86330==    by 0x3CB7D4F: __gnu_cxx::new_allocator<odb::dbNet*>::allocate(unsigned long, void const*) (new_allocator.h:127)
==86330==    by 0x3CB44CA: std::allocator_traits<std::allocator<odb::dbNet*> >::allocate(std::allocator<odb::dbNet*>&, unsigned long) (alloc_traits.h:464)
==86330==    by 0x3CAFC59: std::_Vector_base<odb::dbNet*, std::allocator<odb::dbNet*> >::_M_allocate(unsigned long) (stl_vector.h:346)
==86330==    by 0x3E1F1C4: void std::vector<odb::dbNet*, std::allocator<odb::dbNet*> >::_M_range_initialize<std::_Rb_tree_const_iterator<odb::dbNet*> >(std::_Rb_tree_const_iterator<odb::dbNet*>, std::_Rb_tree_const_iterator<odb::dbNet*>, std::forward_iterator_tag) (stl_vector.h:1582)
==86330==    by 0x3E1C211: std::vector<odb::dbNet*, std::allocator<odb::dbNet*> >::vector<std::_Rb_tree_const_iterator<odb::dbNet*>, void>(std::_Rb_tree_const_iterator<odb::dbNet*>, std::_Rb_tree_const_iterator<odb::dbNet*>, std::allocator<odb::dbNet*> const&) (stl_vector.h:657)
==86330==    by 0x3DA4EB7: find_all_clk_nets() (dbStaTCL_wrap.cxx:7289)
==86330==    by 0x3E1814E: _wrap_find_all_clk_nets (dbStaTCL_wrap.cxx:39923)
==86330==    by 0xA7E6D31: TclNRRunCallbacks (in /usr/lib/x86_64-linux-gnu/libtcl8.6.so)
==86330==    by 0xA7E8027: ??? (in /usr/lib/x86_64-linux-gnu/libtcl8.6.so)
==86330==    by 0xA7E7AA6: Tcl_EvalEx (in /usr/lib/x86_64-linux-gnu/libtcl8.6.so)
==86330==    by 0xA7E8C99: Tcl_Eval (in /usr/lib/x86_64-linux-gnu/libtcl8.6.so)

(I do think the CI is running ubuntu 20 whereas I'm running ubuntu 22. Going to just make sure I don't see it with 20 first before digging more.)

I'm running it on Ubuntu 22 and I do not see this segfault either, so I don't think that would be the cause.

I was able to reproduce the error on the docker image. Looks like the problem is with the version of swig:
4.0.2 -> ok
4.1.0 -> segv
CI is still at 4.0.2.
I will investigate this further to try and fix.

@vvbandeira I see in the release notes it mentions better C++11 and beyond support, perhaps move semantics for the smart wrapper aren't right if those were just enabled in some fashion:

Improved C99, C++11, C++14, C++17 support. Start adding C++20 standard.
-- https://github.com/swig/swig/blob/master/RELEASENOTES

In build/src/dbSta/src/CMakeFiles/dbSta.dir/dbStaTCL_wrap.cxx switching:
      odb::dbNet* ptr = (((std::vector< odb::dbNet * > &)result)[i]);
To:
      odb::dbNet* ptr = (*&result)[i];
Causes the issue to go away, which seems to confirm the rough suspected cause. It's doing a C-style cast to an lvalue reference when that SwigSmartPointer type defined in that file has a rvalue reference cast overload, gonna take a minute to figure out what magic function gets invoked when here. :-) Notably the rvalue reference cast operator overload is guarded by #if __cplusplus>=201103 which seems like it'd be introduced in this rev from those release notes, which is some additional confirmation.

What function does this code appear in?

If it is _wrap_find_all_clk_nets then I see the same code generated by 4.0.1.
Fwiw I built on ubuntu22 (using wsl) with 4.1.0 and got no crash.

Ok, think I've got a handle on it. We're C-style casing to an lvalue reference, and SwigSmartPointer<T>operatorT&&() is not being invoked. So it's just giving us a stack location where the struct is kept (i.e. a wild reference). If you add the following to the #if __cplusplus >=201103L part of the code everything passes:
  operator T&() const { return *pointer.ptr; }

So we just need to figure out how to supplement the SwigSmartPointer with that cast overload.

What function does this code appear in?

@maliberty If you look in build/src/dbSta/src/CMakeFiles/dbSta.dir/dbStaTCL_wrap.cxx with this version of swig in use you should see the following snippets that cause the problem:
 1844 /* SwigValueWrapper is described in swig.swg */
 1845 template<typename T> class SwigValueWrapper {
 1846   struct SwigSmartPointer {
 1847     T *ptr;
 1848     SwigSmartPointer(T *p) : ptr(p) { }
 1849     ~SwigSmartPointer() { delete ptr; }
 1850     SwigSmartPointer& operator=(SwigSmartPointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; }
 1851     void reset(T *p) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = p; }
 1852   } pointer;
 1853   SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
 1854   SwigValueWrapper(const SwigValueWrapper<T>& rhs);
 1855 public:
 1856   SwigValueWrapper() : pointer(0) { }
 1857   SwigValueWrapper& operator=(const T& t) { SwigSmartPointer tmp(new T(t)); pointer = tmp; return *this; }
 1858 #if __cplusplus >=201103L
 1859   SwigValueWrapper& operator=(T&& t) { SwigSmartPointer tmp(new T(std::move(t))); pointer = tmp; return *this; }
 1860   operator T&&() const { return std::move(*pointer.ptr); }
 1861 #else
 1862   operator T&() const { return *pointer.ptr; }
 1863 #endif
 1864   T *operator&() const { return pointer.ptr; }
 1865   static void reset(SwigValueWrapper& t, T *p) { t.pointer.reset(p); }
 1866 };

39916 SWIGINTERN int
39917 _wrap_find_all_clk_nets(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
39918   SwigValueWrapper< std::vector< odb::dbNet * > > result;
39919
39920   if (SWIG_GetArgs(interp, objc, objv,":sta::find_all_clk_nets ") == TCL_ERROR) SWIG_fail;
39921   {
39922     try {
39923       result = find_all_clk_nets();
39924     }
39925     catch (std::bad_alloc &) {
39926       fprintf(stderr, "Error: out of memory.");
39927       exit(0);
39928     }
39929     // This catches std::runtime_error (utl::error) and sta::Exception.
39930     catch (std::exception &excp) {
39931       Tcl_ResetResult(interp);
39932       Tcl_AppendResult(interp, excp.what(), nullptr);
39933       return TCL_ERROR;
39934     }
39935   }
39936   {
39937     for (unsigned int i = 0; i < (&result)->size(); i++) {
39938       odb::dbNet* ptr = (((std::vector< odb::dbNet * > &)result)[i]);
39939       Tcl_ListObjAppendElement(interp, (Tcl_GetObjResult(interp)),  SWIG_NewInstanceObj(ptr, SWIGTYPE_p_odb__dbNet, 0));
39940     }
39941   }
39942   return TCL_OK;
39943 fail:
39944   return TCL_ERROR;
39945 }

I see the same code with 4.0.1 and 4.1.  It works for me both ways.  There must be some other factor that is the problem here.  What compiler are you using?

With the same swig used I believe we were able to observe the same thing -- have a fix coming.
Root cause was that with the change in https://github.com/swig/swig/commit/bf36bf7d8aa8d130f30d0cbb2c260966f96bc108 (noted in the PR description it was causing backwards incompatibility) the previous type maps were using a cast to lvalue reference which is not overloaded for C++ >= C++11 in the SWIG implementation as of 4.1.0. Fix is to change the type maps to use safer conversions -- previously we ended up casting the struct value homed on the stack (containing a pointer in the SwigValueWrapper) to a lvalue vector reference, which clearly made for a wild reference.
With this fix I imagine the 4.1.0 dep and onwards should be good, I'm not seeing test failures anymore -- not sure if it means CI should update its dep as well before we close this. I'll leave that to @maliberty to determine if he wants to open a separate issue for that / how to track.


Make all files OOP

[x] habit.py 1h
[ ] clock.py
[ ] setup.py

B_habit_tracker in main.py command is off

From start.py Create_main_window delete setup1 widgets.
setup.py break into two files, and clock send to setup2
Goals for today and timeline change into widget

finished


UDP

Help me, please!
Code in standart WiFi Arduino module for UDP:
void setup() {
...
Udp.begin(localPort);
}
void loop() {
// if there's data available, read a packet
int packetSize = Udp.parsePacket();
if (packetSize){ ... }
}
How to use your library to listen UDP packets to a specific port?

first of all you should specify what's the version of the firmware flashed on you esp8266 module

FW Version:AT version:<IP_ADDRESS>(Jun  5 2015 16:27:16)
SDK version:1.1.1
Ai-Thinker Technology Co. Ltd.
Jun  5 2015 23:07:20

I would recommend to try my fork #32 for the firmwares version higher than v0.22 for apropriate udp support.
With this implementation you could try something like in the .../examples/.../UDPClientSingle.ino to get UDP server working.
Good luck :)

Everything works! Thanks!


HDFS-17466. Move FsVolumeList#getVolumes() invocation out of DataSetLock

Description of PR
Refer to HDFS-17466. We can remove FsVolumeList#getVolumes() invocation out of DataSetLock, because remove volumes and add volumes are not protected by DataSetLock.
We should remove global fields not protected by DataSetLock to make it more clearly.

:broken_heart: -1 overall

Vote
Subsystem
Runtime
Logfile
Comment

+0 :ok:
reexec
0m 50s

Docker mode activated.

_ Prechecks _

+1 :green_heart:
dupname
0m  0s

No case conflicting files found.

+0 :ok:
codespell
0m  1s

codespell was not available.

+0 :ok:
detsecrets
0m  1s

detect-secrets was not available.

+1 :green_heart:
@author
0m  0s

The patch does not contain any @author tags.

-1 :x:
test4tests
0m  0s

The patch doesn't appear to include any new or modified tests. Please justify why no new tests are needed for this patch. Also please list what manual steps were performed to verify this patch.

_ trunk Compile Tests _

+1 :green_heart:
mvninstall
50m 22s

trunk passed

+1 :green_heart:
compile
1m 40s

trunk passed with JDK Ubuntu-11.0.22+7-post-Ubuntu-0ubuntu220.04.1

+1 :green_heart:
compile
1m 25s

trunk passed with JDK Private Build-1.8.0_402-8u402-ga-2ubuntu1~20.04-b06

+1 :green_heart:
checkstyle
1m 19s

trunk passed

+1 :green_heart:
mvnsite
1m 40s

trunk passed

+1 :green_heart:
javadoc
1m 16s

trunk passed with JDK Ubuntu-11.0.22+7-post-Ubuntu-0ubuntu220.04.1

+1 :green_heart:
javadoc
1m 55s

trunk passed with JDK Private Build-1.8.0_402-8u402-ga-2ubuntu1~20.04-b06

+1 :green_heart:
spotbugs
3m 54s

trunk passed

+1 :green_heart:
shadedclient
44m 56s

branch has no errors when building and testing our client artifacts.

_ Patch Compile Tests _

+1 :green_heart:
mvninstall
1m 24s

the patch passed

+1 :green_heart:
compile
1m 25s

the patch passed with JDK Ubuntu-11.0.22+7-post-Ubuntu-0ubuntu220.04.1

+1 :green_heart:
javac
1m 25s

the patch passed

+1 :green_heart:
compile
1m 14s

the patch passed with JDK Private Build-1.8.0_402-8u402-ga-2ubuntu1~20.04-b06

+1 :green_heart:
javac
1m 14s

the patch passed

+1 :green_heart:
blanks
0m  0s

The patch has no blanks issues.

-0 :warning:
checkstyle
1m  6s
/results-checkstyle-hadoop-hdfs-project_hadoop-hdfs.txt
hadoop-hdfs-project/hadoop-hdfs: The patch generated 1 new + 52 unchanged - 0 fixed = 53 total (was 52)

+1 :green_heart:
mvnsite
1m 26s

the patch passed

+1 :green_heart:
javadoc
1m 12s

the patch passed with JDK Ubuntu-11.0.22+7-post-Ubuntu-0ubuntu220.04.1

+1 :green_heart:
javadoc
1m 41s

the patch passed with JDK Private Build-1.8.0_402-8u402-ga-2ubuntu1~20.04-b06

+1 :green_heart:
spotbugs
3m 48s

the patch passed

+1 :green_heart:
shadedclient
45m 36s

patch has no errors when building and testing our client artifacts.

_ Other Tests _

-1 :x:
unit
263m 42s
/patch-unit-hadoop-hdfs-project_hadoop-hdfs.txt
hadoop-hdfs in the patch passed.

+1 :green_heart:
asflicense
0m 49s

The patch does not generate ASF License warnings.

433m 49s

Reason
Tests

Failed junit tests
hadoop.hdfs.TestRollingUpgrade

Subsystem
Report/Notes

Docker
ClientAPI=1.44 ServerAPI=1.44 base: https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-6728/1/artifact/out/Dockerfile

GITHUB PR
https://github.com/apache/hadoop/pull/6728

Optional Tests
dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient spotbugs checkstyle codespell detsecrets

uname
Linux a6d212bc0247 5.15.0-94-generic #104-Ubuntu SMP Tue Jan 9 15:25:40 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

Build tool
maven

Personality
dev-support/bin/hadoop.sh

git revision
trunk / a7f45345d08ffbec02ac97dacc1b88caf9f3e63f

Default Java
Private Build-1.8.0_402-8u402-ga-2ubuntu1~20.04-b06

Multi-JDK versions
/usr/lib/jvm/java-11-openjdk-amd64:Ubuntu-11.0.22+7-post-Ubuntu-0ubuntu220.04.1 /usr/lib/jvm/java-8-openjdk-amd64:Private Build-1.8.0_402-8u402-ga-2ubuntu1~20.04-b06

Test Results
https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-6728/1/testReport/

Max. process+thread count
2849 (vs. ulimit of 5500)

modules
C: hadoop-hdfs-project/hadoop-hdfs U: hadoop-hdfs-project/hadoop-hdfs

Console output
https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-6728/1/console

versions
git=2.25.1 maven=3.6.3 spotbugs=4.2.2

Powered by
Apache Yetus 0.14.0 https://yetus.apache.org

This message was automatically generated.

@zhangshuyan0 Sir, could you please help me review this PR when you have free time? Thanks a lot.

The failed UT was passed in my local.

:broken_heart: -1 overall

Vote
Subsystem
Runtime
Logfile
Comment

+0 :ok:
reexec
6m 50s

Docker mode activated.

_ Prechecks _

+1 :green_heart:
dupname
0m  0s

No case conflicting files found.

+0 :ok:
codespell
0m  0s

codespell was not available.

+0 :ok:
detsecrets
0m  0s

detect-secrets was not available.

+1 :green_heart:
@author
0m  0s

The patch does not contain any @author tags.

-1 :x:
test4tests
0m  0s

The patch doesn't appear to include any new or modified tests. Please justify why no new tests are needed for this patch. Also please list what manual steps were performed to verify this patch.

_ trunk Compile Tests _

+1 :green_heart:
mvninstall
33m 18s

trunk passed

+1 :green_heart:
compile
0m 41s

trunk passed with JDK Ubuntu-11.0.22+7-post-Ubuntu-0ubuntu220.04.1

+1 :green_heart:
compile
0m 43s

trunk passed with JDK Private Build-1.8.0_402-8u402-ga-2ubuntu1~20.04-b06

+1 :green_heart:
checkstyle
0m 40s

trunk passed

+1 :green_heart:
mvnsite
0m 48s

trunk passed

+1 :green_heart:
javadoc
0m 43s

trunk passed with JDK Ubuntu-11.0.22+7-post-Ubuntu-0ubuntu220.04.1

+1 :green_heart:
javadoc
1m  7s

trunk passed with JDK Private Build-1.8.0_402-8u402-ga-2ubuntu1~20.04-b06

+1 :green_heart:
spotbugs
1m 48s

trunk passed

+1 :green_heart:
shadedclient
23m  3s

branch has no errors when building and testing our client artifacts.

_ Patch Compile Tests _

+1 :green_heart:
mvninstall
0m 38s

the patch passed

+1 :green_heart:
compile
0m 39s

the patch passed with JDK Ubuntu-11.0.22+7-post-Ubuntu-0ubuntu220.04.1

+1 :green_heart:
javac
0m 39s

the patch passed

+1 :green_heart:
compile
0m 34s

the patch passed with JDK Private Build-1.8.0_402-8u402-ga-2ubuntu1~20.04-b06

+1 :green_heart:
javac
0m 34s

the patch passed

+1 :green_heart:
blanks
0m  0s

The patch has no blanks issues.

+1 :green_heart:
checkstyle
0m 29s

the patch passed

+1 :green_heart:
mvnsite
0m 37s

the patch passed

+1 :green_heart:
javadoc
0m 30s

the patch passed with JDK Ubuntu-11.0.22+7-post-Ubuntu-0ubuntu220.04.1

+1 :green_heart:
javadoc
1m  2s

the patch passed with JDK Private Build-1.8.0_402-8u402-ga-2ubuntu1~20.04-b06

+1 :green_heart:
spotbugs
1m 45s

the patch passed

+1 :green_heart:
shadedclient
21m 54s

patch has no errors when building and testing our client artifacts.

_ Other Tests _

-1 :x:
unit
204m 54s
/patch-unit-hadoop-hdfs-project_hadoop-hdfs.txt
hadoop-hdfs in the patch passed.

+1 :green_heart:
asflicense
0m 31s

The patch does not generate ASF License warnings.

304m 15s

Reason
Tests

Failed junit tests
hadoop.hdfs.server.datanode.TestDirectoryScanner

hadoop.hdfs.tools.TestDFSAdmin

Subsystem
Report/Notes

Docker
ClientAPI=1.45 ServerAPI=1.45 base: https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-6728/2/artifact/out/Dockerfile

GITHUB PR
https://github.com/apache/hadoop/pull/6728

Optional Tests
dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient spotbugs checkstyle codespell detsecrets

uname
Linux f0c1ad3790f1 5.15.0-94-generic #104-Ubuntu SMP Tue Jan 9 15:25:40 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

Build tool
maven

Personality
dev-support/bin/hadoop.sh

git revision
trunk / 814377ae9d9dde8bbe8786e0da491220cf156fbe

Default Java
Private Build-1.8.0_402-8u402-ga-2ubuntu1~20.04-b06

Multi-JDK versions
/usr/lib/jvm/java-11-openjdk-amd64:Ubuntu-11.0.22+7-post-Ubuntu-0ubuntu220.04.1 /usr/lib/jvm/java-8-openjdk-amd64:Private Build-1.8.0_402-8u402-ga-2ubuntu1~20.04-b06

Test Results
https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-6728/2/testReport/

Max. process+thread count
3971 (vs. ulimit of 5500)

modules
C: hadoop-hdfs-project/hadoop-hdfs U: hadoop-hdfs-project/hadoop-hdfs

Console output
https://ci-hadoop.apache.org/job/hadoop-multibranch/job/PR-6728/2/console

versions
git=2.25.1 maven=3.6.3 spotbugs=4.2.2

Powered by
Apache Yetus 0.14.0 https://yetus.apache.org

This message was automatically generated.

:broken_heart: -1 overall

Vote
Subsystem
Runtime
Logfile
Comment

_ Prechecks _

+1 :green_heart:
dupname
0m 00s

No case conflicting files found.

+0 :ok:
spotbugs
0m 01s

spotbugs executables are not available.

+0 :ok:
codespell
0m 01s

codespell was not available.

+0 :ok:
detsecrets
0m 01s

detect-secrets was not available.

+1 :green_heart:
@author
0m 00s

The patch does not contain any @author tags.

-1 :x:
test4tests
0m 00s

The patch doesn't appear to include any new or modified tests. Please justify why no new tests are needed for this patch. Also please list what manual steps were performed to verify this patch.

_ trunk Compile Tests _

+1 :green_heart:
mvninstall
90m 04s

trunk passed

+1 :green_heart:
compile
6m 10s

trunk passed

+1 :green_heart:
checkstyle
4m 46s

trunk passed

+1 :green_heart:
mvnsite
6m 46s

trunk passed

+1 :green_heart:
javadoc
6m 00s

trunk passed

+1 :green_heart:
shadedclient
148m 22s

branch has no errors when building and testing our client artifacts.

_ Patch Compile Tests _

+1 :green_heart:
mvninstall
4m 55s

the patch passed

+1 :green_heart:
compile
3m 38s

the patch passed

+1 :green_heart:
javac
3m 38s

the patch passed

+1 :green_heart:
blanks
0m 00s

The patch has no blanks issues.

+1 :green_heart:
checkstyle
2m 28s

the patch passed

+1 :green_heart:
mvnsite
4m 30s

the patch passed

+1 :green_heart:
javadoc
3m 36s

the patch passed

+1 :green_heart:
shadedclient
159m 09s

patch has no errors when building and testing our client artifacts.

_ Other Tests _

+1 :green_heart:
asflicense
5m 21s

The patch does not generate ASF License warnings.

425m 28s

Subsystem
Report/Notes

GITHUB PR
https://github.com/apache/hadoop/pull/6728

Optional Tests
dupname asflicense compile javac javadoc mvninstall mvnsite unit shadedclient spotbugs checkstyle codespell detsecrets

uname
MINGW64_NT-10.0-17763 17e48f8a2a3c 3.4.10-87d57229.x86_64 2024-02-14 20:17 UTC x86_64 Msys

Build tool
maven

Personality
/c/hadoop/dev-support/bin/hadoop.sh

git revision
trunk / 814377ae9d9dde8bbe8786e0da491220cf156fbe

Default Java
Azul Systems, Inc.-1.8.0_332-b09

Test Results
https://ci-hadoop.apache.org/job/hadoop-multibranch-windows-10/job/PR-6728/1/testReport/

modules
C: hadoop-hdfs-project/hadoop-hdfs U: hadoop-hdfs-project/hadoop-hdfs

Console output
https://ci-hadoop.apache.org/job/hadoop-multibranch-windows-10/job/PR-6728/1/console

versions
git=2.44.0.windows.1

Powered by
Apache Yetus 0.14.0 https://yetus.apache.org

This message was automatically generated.


Export to PDF with hyperlinks in numbered lists results in unexpected output.

PHP Version: using docker-compose.yml from solidnerd
MySQL Version: using docker-compose.yml from solidnerd (5.7.12)
Bookstack Version: 13.1
Expected Behavior:
When a numbered lists contains hyperlinks the output behind the number should still be aligned with the number when exporting to pdf.
Actual Behavior:
The output behind the number is slightly below the number when exporting to pdf.

Hi @razem-io, Sorry for my late reply, This issue slipped by. Would you be able to post a screenshot of the issue as I'm finding it hard to reproduce this.

Closing due to lack of response. Feel free to comment still and the issue can be re-opened.


Problem When Downloading

Yet the user do exist/
Loaded session from C:\Users*\AppData\Local\Instaloader**
Logged in as *****.
JSON Query to ******./feed/: Could not find "window._sharedData" in html response. [retrying; skip with ^C]
Trying to find profile ******. using its unique ID ******.
Profile  ******.. has changed its name to ******.
JSON Query to  ******./feed/: Could not find "window._sharedData" in html response. [retrying; skip with ^C]
Profile ******. does not exist.

incomplete bug report.
duplicate of #1553 (and many more).


Added ipyleaflet installation to jupyterlab3 Dockerfile.

This PR includes one change to the jupyterlab3 Dockerfile in which ipyleaflet is now being installed.

(fyi) This change was previously done against UAT, and before we had a discussion about the build pipeline for images. So the change is being brought over to DIT so that the build process for images can make use of this change.


parallelize tests

Should swap to a job matrix and have them run in parallel.
It's just slow waiting for all the tests to complete. Should also check if Godot 4 has an stdout for when it's completed the import process, or a way to trigger that.

RE: Import Process
During testing, I was able to trigger the import process with the --export-debug and --export-pack  arguments.
Doing an export could be a reliable way to import & exit upon completion, though it will also add the overhead of the time required to export.
Let me know what you think 👍 Hope that helps.

Should also check if Godot 4 has an stdout for when it's completed the import process, or a way to trigger that.

Approved #30 , but I'm not sure if that PR resolves the import part of this issue.


Data Box Edge should be renamed to Azure Stack Edge

Data Box Edge should be renamed to Azure Stack Edge

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

ID: f4101294-cb92-3d80-1865-5497f7d1f202
Version Independent ID: 5914818d-56c1-1ff5-0308-e6f38da5a13b
Content: Tutorial to prepare Azure portal, datacenter environment to deploy Azure Data Box Edge
Content Source: articles/databox-online/data-box-edge-deploy-prep.md
Service: databox
Sub-service: edge
GitHub Login: @alkohli
Microsoft Alias: alkohli

Thanks for the feedback and bringing this to our notice . At this time we are reviewing the feedback and will update the document as appropriate .

@alkohli FYI.

@scottstout This was on our radar. It took quite some time to complete because it required these changes both in the files and in the backend such as file names, image names, include names etc. Wanted to inform you that this work is now complete.
#please-close

@alkohli sounds good. Thanks for the update.


SVG size gets bigger with time

Hi Hernan,
I see that you are dynamically adding svg elements as they are needed. As the animation continues, the <svg> element grows in size. From what I can tell, this is because your script is not removing elements that are no longer needed. Is this possible to add?
Thank you,
Steve

Hi, removing elements has a big impact on performance.
If your animation is in loop, I'd need to remove and include them on each iteration.
Instead of removing them, I set them to display: none so they don't get rendered which I've tested some time ago and seemed more performant.

Thank you Hernan-- makes complete sense!