Transaction that is added to a node's pool may not be propagated to the pools of its peer nodes

Introduction
In certain situations, a transaction that is added to a node's pool (of sequenced type) may not be propagated to the pools of its peer nodes, resulting in the transaction being present only in the transaction receptor node's pool rather than being distributed across all nodes' pools.
Summary
We are using the following five nodes setup for a private Besu network with QBFT protocol:

A non-validator node that doesn’t participate in the consensus protocol.
One node acting as a validator.

Users connect to the non-validator node to send transactions, and it propagates them to the validator so that they are included in new blocks.
Starting from a scenario where all the nodes have a transaction (let’s call it “tx_a”) in the pool, as shown in the first image.

If the transaction is dropped from the pool of the nodes for any reason, the pools of the nodes are empty as we can see in the second image.

Then, if the transaction is sent again to the non-validator, it is added to its pool, but it is not added to the validator pool as we can see in the third image.

Detailed description
We have observed 2 problematic scenarios related to how the nodes handle their caches:

When a client sends a transaction to the non-validator node, if this node dropped the transaction before, the node doesn't propagate the transaction to the peers in the network. If the transaction is not propagated to a validator, it will never be mined.
When a peer propagates a transaction to the validator node, if this node has already received the transaction from a peer, the transaction is not promoted to the transactions pool. If the transaction is not promoted to the transactions pool, it will never be mined.

Both scenarios are problematic if the transaction is valid but the node dropped it from the pool before mining the transaction for any reason, e.g. exceeding tx-pool-retention-hours limit.
We were able to add that transaction again to the validator’s pool only by restarting all the nodes and sending the transaction again.
It seems to be a bug by which internal caches are not updated properly when transactions are dropped/evicted from the pool, not allowing those transactions to be added into new blocks as they are not propagated by the non-validator node and they are rejected by the validator as well.
Versions
This issue occurs in the latest version of the system, as of the time of this writing (v24.3.3). We believe that this occurs in previous versions as well.
Steps to reproduce
This is an explanation of how we were able to reproduce the bug:
1 . Set up at least one non-validator node and at least one validator node with a QBFT network configuration.
3. Send a new transaction using a higher nonce than the expected one, so a nonce gap is created, and that transaction will remain in the pool of both the non-validator and validator nodes.
4. Force the transaction to be dropped from the pool (for example waiting for the tx-pool-retention-hours to expire).
5. Resend the transaction to the non-validator node and you will be able to check that it won’t appear in the validator’s pool (as it does not get propagated by the non-validator nor accepted by the validator because it gets filtered due to be categorized as an already seen transaction).
Expected behavior
:white_check_mark: = already happening
:x: = not happening

The user sends a transaction, which is received by the non-validator node and added to the pool :white_check_mark:
The transaction is propagated to the validator nodes. :white_check_mark:
The validator nodes accept the transaction and add it to their pool. :white_check_mark:
Every node drops the transaction from its pool. :white_check_mark:
The user resends the transaction, which is received by the non-validator node and added to the pool. :white_check_mark:
The same as step 2. :x:
The same as step 3. :x:

Nodes execution arguments
--tx-pool-max-size=5
--tx-pool=sequenced
--tx-pool-limit-by-account-percentage=1

Nodes config
Non-validator node
# Network
p2p-host="<IP_ADDRESS>"
p2p-port=1232
max-peers=42

rpc-http-enabled=true
rpc-http-api=["ETH","NET","WEB3","IBFT","QBFT","TXPOOL","ADMIN"]

host-whitelist=["*"]
rpc-http-cors-origins=["all"]

rpc-http-host="<IP_ADDRESS>"
rpc-http-port=8545

rpc-ws-enabled=true
rpc-ws-host="<IP_ADDRESS>"
rpc-ws-port=30303

# Mining
miner-enabled=true
miner-coinbase="0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"

min-gas-price="0"
revert-reason-enabled=true

metrics-category=[ "ETHEREUM", "BLOCKCHAIN","EXECUTORS","JVM","NETWORK","PEERS","PROCESS","KVSTORE_ROCKSDB","KVSTORE_ROCKSDB_STATS","RPC","SYNCHRONIZER", "TRANSACTION_POOL" ]
metrics-enabled=true
metrics-host="<IP_ADDRESS>"
metrics-port=9095

Validator node config
# Network
p2p-host="<IP_ADDRESS>"
p2p-port=1234
max-peers=42

rpc-http-enabled=true
rpc-http-api=["ETH","NET","WEB3","IBFT","QBFT","TXPOOL"]

host-whitelist=["*"]
rpc-http-cors-origins=["all"]

rpc-http-host="<IP_ADDRESS>"
rpc-http-port=8585

rpc-ws-enabled=true
rpc-ws-host="<IP_ADDRESS>"
rpc-ws-port=30305

# Mining
miner-enabled=true
miner-coinbase="0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"

min-gas-price="0"
revert-reason-enabled=true

metrics-category=[ "ETHEREUM", "BLOCKCHAIN","EXECUTORS","JVM","NETWORK","PEERS","PROCESS","KVSTORE_ROCKSDB","KVSTORE_ROCKSDB_STATS","RPC","SYNCHRONIZER", "TRANSACTION_POOL" ]
metrics-enabled=true
metrics-host="<IP_ADDRESS>"
metrics-port=9097

genesis.json
{
 "config": {
   "muirGlacierBlock": 0,
   "chainId": 44844,
   "contractSizeLimit":<PHONE_NUMBER>,
   "qbft": {
     "blockperiodseconds": 1,
     "epochlength": 30000,
     "requesttimeoutseconds": 10
   }
 },
 "nonce": "0x0",
 "timestamp": "0x58ee40ba",
 "gasLimit": "0x5F5E100",
 "difficulty": "0x1",
 "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
 "coinbase": "0x0000000000000000000000000000000000000000",
 "alloc": {
   "fe3b557e8fb62b89f4916b721be55ceb828dbd73": {
     "privateKey": "8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63",
     "comment": "private key and this comment are ignored.  In a real chain, the private key should NOT be stored",
     "balance": "0xad78ebc5ac6200000"
   },
   "627306090abaB3A6e1400e9345bC60c78a8BEf57": {
     "privateKey": "c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3",
     "comment": "private key and this comment are ignored.  In a real chain, the private key should NOT be stored",
     "balance": "90000000000000000000000"
   },
   "f17f52151EbEF6C7334FAD080c5704D77216b732": {
     "privateKey": "ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f",
     "comment": "private key and this comment are ignored.  In a real chain, the private key should NOT be stored",
     "balance": "90000000000000000000000"
   }
 },
 "extraData": "0xf87aa00000000000000000000000000000000000000000000000000000000000000000f85494792fc5093a85bd8fb52c781aefee7da96d2180cf9414275b2f4cefb4c72f12ca32ce0044578923e1b694fcbc96c1e8a673b7cdc333c6687f07fa2c28befe94b5ec93ab0a6ad8f8c0e404e3225b16cb2ea23a1ec080c0"
}

I added the node execution arguments into the issue. This is using the sequenced node pool

Hello @fab-10,
So as an answer to your last question, is not happening that much, once a month, but the real problem with that is that whenever happens, the only solution is to restart the besu clients.
Sorry for the late answer.
Ill include Fernando @chookly314 and Coenie @coeniebeyers in the topic to move forward in the conversation.

Hi @nano-adhara - sorry this hasn't moved. I am wondering if this may be an issue that we could work with @matthew1001 as its in QBFT and the sequenced pool. Was there other context needed from the folks you tagged in your comment?

I'd be happy to look into this at some point if @fab-10 doesn't get there first. I'm a bit focused on bonsai archive and empty block period for the time being so might not be that soon for me to take a look

No context from the other folks i tagged. Just did so they have all the context as well

@matthew1001 Hope you are doing well? I was wondering if you could advise when you would be able to look into the issue above? Kind regards

sorry for being slow on this one, but I can start working on it, and hope to have something by the next week.

Hi @fab-10 , thank you very much, much appreciated! Regards

Hi @fab-10 hope you are doing well? Was just wondering if still possible for something this week? Kind regards, Louis

Hi @louisrushin, still not done, definitely not for this week

it is on main now, so you can start trying the develop version, before the next release is out

Thank you very much!

@fab-10 @matthew1001 what is the process now?  This ticket is closed, but the problem is not solved as demonstrated by @nano-adhara above.  Can you give us some guidance on how we should proceed.  We have a live environment with this problem in which is getting a lot of attention.

@petermunnings I am reopening the ticket, and will take a look at your report to reproduce it and fix in the next days, if in the meantime if you already have in idea of the solution, you can propose a PR for review.

Hi @fab-10 just following up, any progress on this?

thanks to @nano-adhara for the detailed steps to reproduce the issue, I was able to reproduce the issue and submit a fix in PR #7858.
Could you try out that branch and confirm that it works for you?
One important note on an edge case: the eviction task is triggered every minute, so depending on the start time of each node, there could be 1 minute delay between the eviction of a tx between 2 nodes in the worst case, this means that if you try to resubmit the tx just after it has evicted on one node, it is possible that the same tx isn't still evicted on every node, so I suggest to wait 1 minute to resend the tx after it has been evicted.

let me review the branch and let you know the outcome. thank you @fab-10

hello @fab-10. I was able to test the scenario and now its working :+1:.
i was considering the edge case you provided. i was able to test it aswell and i have some doubts that id like to know the answer on how to proceed when we apply this besu patch.

For long-living networks, i guess this should not be a problem as the eviction is a one time minute compared to default thirteen hours default retencion policy. Still, as this is something that can happen in a very edgy scenario. Is there something that can be done to force manually (or via API) an eviction check?
In the scenario that transaction was evicted from client node, but not from validator node (because we are in that 1minute gap). If we provide the transaction again, there are two transactions that look like the same, but are different for each node. The client node will hold the new one, and the validator node is still holding the old one until evicted. Are they the same transaction?

Considering the scenario above. Imagine that i send another transaction in that 1 minute gap that fixes the nonce gap. What will happen is that the validator node inmediately mine both transactions from the pool. Is that right? what will happen with the transaction in the client node?

Lastly, even for this edge cases, i can assume that for this patch, even with the time eviction gaps, the important thing is that if BOTH transactions ends up evicted in both pools, the moment we resend the transaction that will be shared again inthe two nodes, is this assumption right?

hello @fab-10. I was able to test the scenario and now its working 👍.

great, I will merge the PR then

* For long-living networks, i guess this should not be a problem as the eviction is a one time minute compared to default thirteen hours default retencion policy. Still, as this is something that can happen in a very edgy scenario. Is there something that can be done to force manually (or via API) an eviction check?

at the moment there is way to trigger the eviction manually.

* In the scenario that transaction was evicted from client node, but not from validator node (because we are in that 1minute gap). If we provide the transaction again, there are two transactions that look like the same, but are different for each node. The client node will hold the new one, and the validator node is still holding the old one until evicted. Are they the same transaction?

yes it will be the same tx (same hash), otherwise in case any of the tx field has changed then it will be a different one, and it could replace the previous one, according to the transaction replacement rule.

  * Considering the scenario above. Imagine that i send another transaction in that 1 minute gap that fixes the nonce gap. What will happen is that the validator node inmediately mine both transactions from the pool. Is that right? what will happen with the transaction in the client node?

Yes the validator could mine both, and the one in the node will be removed as soon as the new block will be imported.

* Lastly, even for this edge cases, i can assume that for this patch, even with the time eviction gaps, the important thing is that if BOTH transactions ends up evicted in both pools, the moment we resend the transaction that will be shared again inthe two nodes, is this assumption right? This is important as we are looking forward to a solution that **does not require to restart the full network**

Correct, with this fix, if the tx has been evicted by all pools, then after re-sending it will be added again to every pool


Add fish shell completions

[ ] -d --dimensions

[ ] -e command

I'd like to get -d and -e working before this gets merged. I just ran out of time for this morning.

Thanks for adding these! I've thought about doing fish completions but I don't use it myself and haven't used it before.
Please don't forget to add installation instructions in the readme too. :)

Thanks for sharing!


Issue on running innerEye deep learning with a local dataset instead of Azure blob storage.

Is there an existing issue for this?

[X] I have searched the existing issues

Problem summary
I'm trying to implement the Sample classification task: Glaucoma Detection on OCT volumes following the steps in the following link:
https://innereye-deeplearning.readthedocs.io/md/sample_tasks.html
But I want to run the model on a local dataset instead of Azure blob dataset. I created the following file myglaucoma.py:
from InnerEye.ML.configs.classification.GlaucomaPublic import GlaucomaPublic
class MyGlaucomaModel(GlaucomaPublic):
def init(self) -> None:
super().init()
self.azure_dataset_id="glaucoma_detection".
Where the "glaucoma_detection" is the folder where the dataset is located. When I try to run it using the following command:
python InnerEye/ML/runner.py --model=MyGlaucomaModel
But I get the following error: Unable to make dataset 'glaucoma_detection available for a local run because no AzureML workspace has been provided. Provide a workspace, or set a folder for local execution.
Code for reproduction
class MyGlaucomaModel(GlaucomaPublic):
    def __init__(self) -> None:
        super().__init__()
        self.azure_dataset_id="glaucoma_detection".

Actual outcome
Traceback (most recent call last):
File "InnerEye/ML/runner.py", line 467, in
main()
File "InnerEye/ML/runner.py", line 461, in main
run(project_root=fixed_paths.repository_root_directory(),
File "InnerEye/ML/runner.py", line 457, in run
return runner.run()
File "InnerEye/ML/runner.py", line 219, in run
azure_run_info = self.submit_to_azureml_if_needed()
File "InnerEye/ML/runner.py", line 352, in submit_to_azureml_if_needed
azure_run_info = submit_to_azure_if_needed(
File "/home/ai/anaconda3/envs/InnerEye/lib/python3.8/site-packages/health_azure/himl.py", line 502, in submit_to_azure_if_needed
mounted_input_datasets, mount_contexts = setup_local_datasets(cleaned_input_datasets,
File "/home/ai/anaconda3/envs/InnerEye/lib/python3.8/site-packages/health_azure/datasets.py", line 342, in setup_local_datasets
target_path, mount_context = d.to_input_dataset_local(workspace)
File "/home/ai/anaconda3/envs/InnerEye/lib/python3.8/site-packages/health_azure/datasets.py", line 139, in to_input_dataset_local
raise ValueError(f"Unable to make dataset '{self.name} available for a local run because no AzureML "
ValueError: Unable to make dataset 'glaucoma_detection available for a local run because no AzureML workspace has been provided. Provide a workspace, or set a folder for local execution.
Error messages
Unable to make dataset 'glaucoma_detection available for a local run because no AzureML workspace has been provided. Provide a workspace, or set a folder for local execution.
Expected outcome
Train the model
System info
No response
AB#7859

Solved
local_dataset=full_ml_test_data_path(),
self.azure_dataset_id="glaucoma_detection",


Add build support for Linux (Ubuntu)

Fixes issue #1094.
Brief summary of changes
I've added a build target for Linux in Ant.
# Necessary to build
sudo apt install build-essentials git cmake openjdk-8-jdk

# Necessary to run
sudo apt install openjdk-8-jdk liblapack libgconf2-4

wget https://download.netbeans.org/netbeans/8.2/final/bundles/netbeans-8.2-javase-linux.sh
chmod 755 netbeans-8.2-javase-linux.sh
./netbeans-8.2-javase-linux.sh --silent

wget https://prdownloads.sourceforge.net/myosin/opensim-core/opensim-core-latest_linux_Release.zip
unzip -q opensim-core-latest_linux_Release.zip -d ~

git clone --depth=10 --branch=initial-linux-support https://github.com/halleysfifthinc/opensim-gui.git

cmake ../opensim-gui -DCMAKE_PREFIX_PATH=~/opensim-core \
    -DAnt_EXECUTABLE="~/netbeans-8.2/extide/ant/bin/ant" \
    -DANT_ARGS="-Dnbplatform.default.netbeans.dest.dir=~/netbeans-8.2;-Dnbplatform.default.harness.dir=~/netbeans-8.2/harness"

make CopyOpenSimCore
make PrepareInstaller

# Tar build file is left in the "dist" folder

Testing I've completed
Tested against on Ubuntu 18.04 LTS in VirtualBox and my own computer:

[x] Build and run on fresh/clean VM
[x] Extract tar file (from build on other VM) and run on fresh/clean VM

Superficial interaction shows that everything appears to work properly. Would the best/most thorough way to test that everything works be to run through one of the tutorials?
TODO:
There are several things (that I'm aware of) remaining to be done and/or discussed:

[x] Installing

It seems opensim-core depends on the system libbas/liblapack
jxbrowser (certain versions at least) has a known dependency on libgconf. The solution is either to install libgconf (sudo apt install libgconf2-4 on Ubuntu), or get an updated version of jxbrowser (see the linked issue).
libgif7 is needed for the splash screen
All that to say, would the preference be to make the tar completely self-contained (copy in the necessary .so files), or would it be ok to take a more Unix approach of depending on system libraries by having the install shell script install necessary packages (java, lapack, gconf, etc)?

[x] CI builds

It looks like y'all have (recently?) added a Github Action for CI, as well as having Travis and Appveyor. I wasn't sure what the plan is for CI for the future; I can add to whichever CI (Github vs Travis) or both as is preferred.

Thanks @halleysfifthinc 👍  It sure is exciting to have you contribute this PR, will review when you tell us it's ready. To answer your TODO items:

Yes opensim-core depends on the systems lapack/blas, this intentional for users running on clusters that may have optimized versions, suggestions are welcome.
We'd avoid upgrading jxbrowser unless there's a significant upside, since that would require manual testing on all platforms.
Your call regarding what's typical on linux/ubuntu, just want to be good citizens
CI Ideally would use github actions since the other services are paid and the long term plan is to migrate to it anyways.

Ready for review! A few things to consider/highlight:

Uploading artifacts in CI

GitHub has storage limits, and uploads after reaching the limits incur fees, so uploading for every push/PR might not be a great idea? (At the moment, there aren't any automatic ways to remove old/irrelevant artifacts, besides through the web interface. See the billing details here)

Distribution support

Given that Linux hasn't been supported until now, it seems best to limit the supported distribution(s) to the one(s) with the most users, eg Ubuntu, and limit that to only the LTS releases. Currently this is tested against Ubuntu 18.04, we can add support for this year's LTS release when it comes out in a month.

GUI installation

App icon

There appear to be a handful of icon version to choose from, the one I used may not be the preference?

(Default) Install directory

Currently set to /opt/opensim-gui, /opt/opensim or /opt/opensim-$VER are other possibilities.

Thanks much @halleysfifthinc much appreciated.

We likely will not upload builds on regular basis, we can selectively upload prebuilt binaries with distributions on simtk.org. Since we don't have the manpower/cycles to support three platforms, we can include as Beta/experimental so that users on linux can build on your excellent contributions.
In current situation, I have no access to a linux machine to test/try, so it would be good to get input from others using linux on more regular basis (do you have access to a linux machine @chrisdembia @carmichaelong )?

In current situation, I have no access to a linux machine to test/try, so it would be good to get input from others using linux on more regular basis (do you have access to a linux machine @chrisdembia @carmichaelong )?

@mitkof6 may also be interested.

@chrisdembia I can try this out and come back with comments. @aymanhab if you need Linux support let me know how I might help or what is required?

@halleysfifthinc can you share a screen capture of the GUI working on Ubuntu? That'd be fun to see :)

@chrisdembia I can try this out and come back with comments. @aymanhab if you need Linux support let me know how I might help or what is required?

Thanks @mitkof6 we're basically all working remotely and I don't have a local machine with linux to test with. We mainly want to see that it works on other machines not only locally, and if you have input on layout.

Hi. The good news is that I was able to build it on Arch Linux. However, I had functionality problems (e.g., model not showing on the View) with the GUI. I want to check if I did something wrong in the building process. Unfortunately, currently I do not have access to Ubuntu to test also there. Nevertheless, I am very happy that at least now we can build the GUI on Linux. Thanks a lot @halleysfifthinc!

@chrisdembia here is a screenshot!

It shows one a few bugs/kinks I've found in playing with the Linux build some more. The layout of the motion controls at the top is messed up compared to how it looks on Windows. I wonder if that might be related to the system font size setting, but I have not had time to play with it yet. @mitkof6 do you notice any issues on Arch?
The other bug I've found is a NullPointerException when clicking in the table inferface in the Scale and IK tools at a minimum (not sure about other tools, but it appears to be a deeper problem, not specific to a particular tool).

Stacktraces
java.lang.NullPointerException
	at org.opensim.tracking.IKTasksValueCellRenderer.setValue(IKTasksTableModel.java:91)
	at javax.swing.table.DefaultTableCellRenderer.getTableCellRendererComponent(DefaultTableCellRenderer.java:257)
	at org.opensim.tracking.IKTasksCellRenderer.getTableCellRendererComponent(IKTasksTableModel.java:69)
	at javax.swing.JTable$AccessibleJTable.getAccessibleChild(JTable.java:7037)
	at javax.swing.JTable$AccessibleJTable.getAccessibleAt(JTable.java:7424)
	at javax.swing.JTable$AccessibleJTable.valueChanged(JTable.java:6939)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:184)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:154)
	at javax.swing.DefaultListSelectionModel.setValueIsAdjusting(DefaultListSelectionModel.java:685)
	at javax.swing.plaf.basic.BasicTableUI$Handler.setValueIsAdjusting(BasicTableUI.java:953)
	at javax.swing.plaf.basic.BasicTableUI$Handler.mouseReleased(BasicTableUI.java:1166)
	at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
	at java.awt.Component.processMouseEvent(Component.java:6539)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
	at java.awt.Component.processEvent(Component.java:6304)
	at java.awt.Container.processEvent(Container.java:2239)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2297)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
	at java.awt.Container.dispatchEventImpl(Container.java:2283)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
	at java.awt.EventQueue$4.run(EventQueue.java:733)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
	at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159)
[catch] at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

java.lang.NullPointerException
	at org.opensim.tracking.BodyScaleFactorsCellRenderer.getTableCellRendererComponent(ScaleFactorsTableModel.java:137)
	at javax.swing.JTable$AccessibleJTable.getAccessibleChild(JTable.java:7037)
	at javax.swing.JTable$AccessibleJTable.getAccessibleAt(JTable.java:7424)
	at javax.swing.JTable$AccessibleJTable.valueChanged(JTable.java:6939)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:184)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:154)
	at javax.swing.DefaultListSelectionModel.setValueIsAdjusting(DefaultListSelectionModel.java:685)
	at javax.swing.plaf.basic.BasicTableUI$Handler.setValueIsAdjusting(BasicTableUI.java:953)
	at javax.swing.plaf.basic.BasicTableUI$Handler.mouseReleased(BasicTableUI.java:1166)
	at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
	at java.awt.Component.processMouseEvent(Component.java:6539)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
	at java.awt.Component.processEvent(Component.java:6304)
	at java.awt.Container.processEvent(Container.java:2239)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2297)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
	at java.awt.Container.dispatchEventImpl(Container.java:2283)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
	at java.awt.EventQueue$4.run(EventQueue.java:733)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
	at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159)
[catch] at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

@mitkof6 My best guess is that you are missing the libgconf shared library on Arch. See my original comments regarding jxbrowser's dependency on this. The response (evidently by a jxbrowser employee) to the StackOverflow question I linked to appeared to suggest that they would be able to fix that (by including the library) without a major/minor version change (presumably avoiding the need to retest the GUI on all platforms noted by @aymanhab, etc).

Since we don't have the manpower/cycles to support three platforms, we can include as Beta/experimental so that users on linux can build on your excellent contributions.

@aymanhab That's totally reasonable, I will tweak my changes to the README and elsewhere to reflect a beta status.

Thanks for the screenshot! So awesome!

@halleysfifthinc We ran into issues along the same line with early releases on mac as well, likely due to jdk in use, also we have code that customizes slider UI that is platform dependent. We can look at this later, mainly this PR targets making a build of the GUI on linux, once build process final details are sorted out we can merge. Thank you.

Ready for final review!

@chrisdembia The ci build fails on windows because core is built with no C3D support, this is unrelated to this PR but I prefer to resolve the core issue first since it breaks all GUI builds moving forward. I'm investigating.

Thanks @halleysfifthinc !
LGTM.

Thanks @halleysfifthinc. I will test this on Ubuntu as soon as get back to my office computer.

Hi! This is awsome! Build on a Debian testing here!
Things I had to change that might have to be updated in the readme:

Clone submodules Gui/opensim/threejs, opensim-visualizer and opensim-modules
Resolve the ~/netbeans-8.2 part to the full /home/thisuser/netbeans-8.2 in the ANT_ARGS, otherwise it wouldn't find harness (at least for me)
Make sure to use openjdk-8 instead of the default openjdk-13 that comes by default with newer debian installs

Thanks to everyone involved it this!

Good catch on the first two bullet points! Regarding the third point, the README does specify that openjdk-8 is needed.
Interesting to see that the layout of the motion controls is fine for you (see my screenshot above for reference).

Oh sure, I had openjdk-8 properly installed, but if you have update-alternatives settings set to auto (such as I did), it defaults to the newer openjdk available. The build then complains that "Source option 6 is no longer supported. Use 7 or later".

What a beautiful sight!

That previous screenshot was taken with OpenSIM within an i3 session (a tiling window manager). So no GNOME or KDE.
This is the same OpenSIM install within a Gnome Shell session:

It looks like a Gnome thing.

On a related note: if I were to try a "sudo python3 setup.py install" on the SDK of this build, I'd be forcing a 3.4 binding into the current system python, more likely a 3.7 or 3.8. And it complains that it cant find "libpython3.4.so.1.0".
Is there a way to compile the "opensim-core-latest_linux_Release.zip" against a generic python3 instead of a python3.4?

Many thanks for going through with a Linux implementation. Might I ask what modifications would be necessary on the INSTALL script to make it compatible with an earlier version of Ubuntu? (16.04 in particular).

It's possible that no modifications are necessary except for adding 16.04 to the list of known working Ubuntu versions in the INSTALL script. I would walk through each step of the INSTALL script in the terminal to confirm what works and what needs modification; then, if there are any modifications needed, you would need to add a new if statement around the necessary differences.

I was planning to update the INSTALL script to include Debian, the changes to be made are few.
There's no $VERSION_ID in /etc/os-release, and ldconfig must be run as sudo. Aside from that, package names are the same, it should work perfectly.

I extended your if statement to include the 16.04 version and the INSTALL script ran normally after prompting me to overwrite some files:

The software seems to be loading normally and I tried loading an .osim model. However, I am not seeing the visualizer window:

I cloned the visualizer submodule during installation so I am not sure what might be wrong here.

If the visualizer is not showing, then jxbrowser is probably missing a .so library. libgconf-2.so.4 (located at '/lib/x86_64-linux-gnu/libgconf-2.so.4' for Ubuntu 20.04) is the only one that was missing for Ubuntu 18.04 and 20.04, and running the INSTALL script should have installed that.
While OpenSim is running, go to /tmp/jxbrowser-chromium-55.0.28<IP_ADDRESS>.2. The command LD_LIBRARY_PATH=. ldd jxbrowser-chromium will list all the shared libraries that jxbrowser needs, and it will show if any libraries are not found. After that, figure out which package supplies the missing library(s) and add it to the INSTALL script for 16.04.

While OpenSim is running, go to /tmp/jxbrowser-chromium-55.0.28<IP_ADDRESS>.2. The command LD_LIBRARY_PATH=. ldd jxbrowser-chromium will list all the shared libraries that jxbrowser needs, and it will show if any libraries are not found. After that, figure out which package supplies the missing library(s) and add it to the INSTALL script for 16.04.

Hmm, I opened OpenSim and navigated to /tmp/ but there is no jxbrowser file there. Doing a "locate" I only found jxbrowser mentioned in /opt/MATLAB and /home/.../opensim folders
Does that mean I am missing something more fundamental?

I am trying to install it on Ubuntu 18.04 now:
I followed the instructions plus changed the netbeans paths from ~/netbeans-8.2 to   /home/plinardos/netbeans-8.2
Also manually added the 3 submodules (models, visualizer and threejs) with git
However, I am getting a new error when I try to run the PrepareInstaller

Have you double-checked that openjdk-8 is your active Java? java -version and javac -version

Hi, again many thanks for this linux implementation. However, I'm also having an issue about the installation of Opensim-GUI on Ubuntu 18.04. I followed the installation instructions and everything went fine, but I am not seeing the visualizer window on the GUI.
I also noticed that when going to the /tmp folder, the jxbrowser-chromium-[...] folder is not present when running Opensim. However, running the netbeans opensim-visualizer project in opensim-gui (via the Netbeans 8.2 IDE) brings up this folder. Within it, jxbrowser-chromium is able to find all the necessary libraries, including libgconf.
Do you think that the lack of a visualizer window could be related to a problem with Opensim-viewer being launched by the Opensim executable?

I'm not sure what could be the problem. For the record, I tried to build the GUI this weekend on a new computer and had trouble with the instructions (which I wrote :roll_eyes: ), so I need to spend some time refining/improving them. However, I had no trouble at all installing and running the CI build artifact from the latest commit.
If you want to use your own build, I suggest adding -J-Dnetbeans.logger.console=true -J-ea to the default_options in etc/OpenSim.conf in the build package folder. Starting the GUI from a terminal would then show the debug output and might help you determine what/where the problem is.

All right, I'll try this and if I don't make any progress, I'll wait for your corrections for the installation procedure. Thank you!


Ktlint report json add non json data.

Expected Behavior
Danger-ktlint can parse json file output from Ktlint
Observed Behavior
Danger ktlint raise this error:
!] Invalid Dangerfile file: unexpected token at 07:59:55.010 [main] WARN com.pinterest.ktlint.cli.internal.KtlintCommandLine - Lint has found errors than can be autocorrected using ktlint --format
Steps to Reproduce
with 0.50.0, the output of ktlint --reporter=json --relative is
08:48:36.790 [main] WARN com.pinterest.ktlint.cli.internal.KtlintCommandLine - Lint has found errors than can be autocorrected using 'ktlint --format' [     {         "file": "app/src/main/java/com/shopmium/core/managers/UserManager.kt",         "errors": [             {                 "line": 69,                 "column": 22,                 "message": "Missing newline after \"(\"",                 "rule": "standard:wrapping"             },             {                 "line": 79,                 "column": 13,                 "message": "Missing newline before \")\"",                 "rule": "standard:wrapping"             }         ]     },     {         "file": "app/src/main/java/com/shopmium/features/preferences/fragments/PersonalInformationFragment.kt",         "errors": [             {                 "line": 330,                 "column": 27,                 "message": "Missing newline after \"(\"",                 "rule": "standard:wrapping"             },             {                 "line": 334,                 "column": 13,                 "message": "Missing newline before \")\"",                 "rule": "standard:wrapping"             }         ]     },     {         "file": "app/src/main/java/com/shopmium/features/preferences/presenters/ProfileSettingsPresenter.kt",         "errors": [             {                 "line": 175,                 "column": 1,                 "message": "Exceeded max line length (120)",                 "rule": "standard:max-line-length"             },             {                 "line": 175,                 "column": 68,                 "message": "Argument should be on a separate line (unless all arguments can fit a single line)",                 "rule": "standard:argument-list-wrapping"             },             {                 "line": 175,                 "column": 95,                 "message": "Argument should be on a separate line (unless all arguments can fit a single line)",                 "rule": "standard:argument-list-wrapping"             },             {                 "line": 175,                 "column": 127,                 "message": "Missing newline before \")\"",                 "rule": "standard:argument-list-wrapping"             },             {                 "line": 301,                 "column": 14,                 "message": "Missing newline after \"(\"",                 "rule": "standard:wrapping"             },             {                 "line": 302,                 "column": 76,                 "message": "Missing newline before \")\"",                 "rule": "standard:wrapping"             }         ]     } ]
The output of 0.49.1 is
[     {         "file": "app/src/main/java/com/shopmium/core/managers/UserManager.kt",         "errors": [             {                 "line": 69,                 "column": 22,                 "message": "Missing newline after \"(\"",                 "rule": "standard:wrapping"             },             {                 "line": 79,                 "column": 13,                 "message": "Missing newline before \")\"",                 "rule": "standard:wrapping"             }         ]     },     {         "file": "app/src/main/java/com/shopmium/features/preferences/fragments/PersonalInformationFragment.kt",         "errors": [             {                 "line": 330,                 "column": 27,                 "message": "Missing newline after \"(\"",                 "rule": "standard:wrapping"             },             {                 "line": 334,                 "column": 13,                 "message": "Missing newline before \")\"",                 "rule": "standard:wrapping"             }         ]     },     {         "file": "app/src/main/java/com/shopmium/features/preferences/presenters/ProfileSettingsPresenter.kt",         "errors": [             {                 "line": 175,                 "column": 1,                 "message": "Exceeded max line length (120)",                 "rule": "standard:max-line-length"             },             {                 "line": 175,                 "column": 68,                 "message": "Argument should be on a separate line (unless all arguments can fit a single line)",                 "rule": "standard:argument-list-wrapping"             },             {                 "line": 175,                 "column": 95,                 "message": "Argument should be on a separate line (unless all arguments can fit a single line)",                 "rule": "standard:argument-list-wrapping"             },             {                 "line": 175,                 "column": 127,                 "message": "Missing newline before \")\"",                 "rule": "standard:argument-list-wrapping"             },             {                 "line": 301,                 "column": 14,                 "message": "Missing newline after \"(\"",                 "rule": "standard:wrapping"             },             {                 "line": 302,                 "column": 76,                 "message": "Missing newline before \")\"",                 "rule": "standard:wrapping"             }         ]     } ]
It seems that the first line is embedded in the standard exit instead of exit error
Your Environment
Ktlint 0.50.0

See documentation how to write the output to a file. In this way the logging is still printed to  and the JSON into the file.

@paul-dingemans not sure what you are referring to - documentation is big.
It feels clear that errors are supposed to be on stderr
https://pinterest.github.io/ktlint/0.50.0/install/cli/#format-autocorrect

Most style violations can be corrected automatically. Errors that can not be corrected, are printed to stderr.

Why is this
07:59:55.010 [main] WARN com.pinterest.ktlint.cli.internal.KtlintCommandLine - Lint has found errors than can be autocorrected using ktlint --format

printed on stdout?

Actually, seems like this line is considered a "log" which ends on stdout
https://pinterest.github.io/ktlint/0.50.0/install/cli/#logging

Logging information is written to stdout

Adding this log here broke danger-ktlint with 0.50.0
Other third parties might be concerned too

Use:
ktlint --reporter=plain --reporter=checkstyle,output=ktlint-report-in-checkstyle-format.xml

to write output of a reporter to the file.


Remove the quotes that get added when we pass through

BuildVariableTask fails when project name contains spaces (linux only) #1084

fixes #1084


Try failing fast if prereq gems fail to install

One of the causes of builds that fail late is gems that didn't install but also didn't raise an error (until the tests that depend on them fail, much much later). This tries to fail those quickly, and maybe means that we can add some retry logic.

@homu r+ (I want to see how the tests do, this still needs code review)

:pushpin: Commit 24392e2 has been approved by indirect

:hourglass: Testing commit 24392e2 with merge a147065...

:broken_heart: Test failed - status

@homu r+

:pushpin: Commit 7c7d617 has been approved by indirect

:hourglass: Testing commit 7c7d617 with merge faa06e4...

@segiddins r?

@homu r+

:pushpin: Commit 95270c8 has been approved by segiddins

:hourglass: Testing commit 95270c8 with merge 6a3096b...

:sunny: Test successful - status


Recovery from 'ClaimTrieSync: unable to sync claim'?

Is there a recovery instruction from the ClaimTrieSync: unable to sync claim error?

Yes I ran into this today with the sync on dev. It is a problem with a few fields not being large enough. I fixed the database in production and locally but I need to create a migration for it. I can get fixed for you tonight if you need it urgently.

No worries. I'm re-syncing now.
Reading the paper in the mean time.
Thanks.

a quick fix for the problem above is to make the decimal columns DECIMAL(50,8). Ultimately, I will also have a migration to fix that as they should not be decimal they should be integers.

accidentally closed. We need a migration so from scratch startup works seamlessly.

added migration for effective_amount and fee on table claim to resolve this sync claim issue.
f81d9ead05355f290d1fbed0a8a1fb4af68cc954


The opacity option does not work on selected text

Won't fix. This is how it work in the original version.


refactor: remove multiple relation check in charm code.

The metadata.yaml support limit for interface, this can limits how many relation the interface can be connected to, and we can handle the relation checks in juju level.
Also removed the incorrect usage of envdir in tox.ini this is no longer working in tox >= 4.
Old behavior:
$ juju status
hardware-observer/1*  active    blocked            <IP_ADDRESS>            Cannot relate to more than one grafana-agent

New behavior:
$ juju relate g2  hardware-observer
ERROR cannot add relation "g2:cos-agent hardware-observer:cos-agent": establishing a new relation for hardware-observer:cos-agent would exceed its maximum relation limit of 1 (quota limit exceeded)

Although I'm in favor of the changes, I think it would be nice to remove the get_num_cos_agent_relations method as well since there would only be either 1 or 0 cos-agent relations now (ie, the relation is either present/ absent). It might be better to have the method be cos_agent_relation_present and use something like self.cos_agent_relation_present == True instead of handling the number of relations now. But if you feel like it expands the scope of the PR too much, we can handle it on separate PR as well 😄

good point, the property can be removed and replace with the function call directly. (save few lines of code)

Rebased onto master branch

Func tests are failing due to this issue: https://github.com/charmed-kubernetes/pytest-operator/issues/131

rebased onto main


Frustrated Comma Owner

I got my first Comma2 and it was working well and I wanted it brighter.  I contacted customer service and they said to send it back.  I did and when I received the replacement the EON started unsupported system.  I have written many messages to people in the forum but since I'm new I guess I'm doing it wrong.  I think I have figured out how to go into Workbench and upload but every time I do the screen is either black or it doesn't work.  I new to this and I really need help.  The week that I could use it, it was great.  since then it has been nothing but issues.

Be patient... Comma is not a product that you can just call and get customer support. They only take care of hardware issues.

Confirmed master-ci fixed this user's issue. They were missing the fpv2 for their car.


Merge new sdk build test & badging.

Update to README.md to include build, coverage, and LGTM badging.
Since the CI & coverage portions are still a work in progress, this is a draft pull request for now.

Assuming the SDK Tests pass, this should be ready.


Implemented a re-fetch logic for the blocks that were missing due to various reasons

Your PR Server URL is https://near-explorer-frontend-pr-37.onrender.com.
Follow its progress at https://dashboard.render.com/web/srv-bkqvvq8rvnpmdf3dp1lg.
Cheers,
The Render Team


Feat: add persistent queries cache

What is the purpose of the change:
The goal is to integrate a local cache using localstorage for the queries we make, this allows on page refresh to still have data and while doing so we invalidate it in the background if necessary based on the stale time configured for each query.
Linear Task
Linear Task URL
Brief Changelog

Testing and Verifying

Summary by CodeRabbit

New Features

Enhanced data synchronization and persistence capabilities in the app using new libraries.

Chores

Updated development dependencies and cleaned up unnecessary regular dependencies.

Nice. This makes the app appear faster for subsequent visits 🔥. Why not set the value to Infinity for subsequent visits? Since we know it will always be re-fetched since it's stale?

The idea of the cacheTime is to determine after how long that data can be considered totally invalid, assuming the background fetch fails for more than 24 hours, before the end of the cacheTime we will continue to see the last available data, after which it will be removed from the cache and possibly if expected show an error.
This is kind of the approach of an offline app first.
In any case, whenever the refetch is successful the end date of the cacheTime gets longer, so if the request never fails it is as if the cache is infinite say


ISPN-5609 Create CommandUUID

https://issues.jboss.org/browse/ISPN-5609

@pruivo Last CI build also had 2 weird failures in the spring module, please have a look.

@danberindei updated. I'm not able to reproduce the failures but it does not seem related. Mainly because the ids are not used anywhere yet.
I left a question to you: https://github.com/infinispan/infinispan/pull/3586#discussion_r34992226

@danberindei no problem about the commit message :)

@pruivo Oops, I missed something: We should probably not generate an id for write commands in a transactional cache (maybe with the exception of PFER?)


Docker image questions?

Buenos dias o noches.
Sorry if I sound like a noob, but the operative system can be  Ubuntu Server 14 04 for the docker image, right?
The operative system must to have installed Tomcat, right?
Which version of tomcat?
I'm a student in big data and I am trying with many another big data tools. I looked your tool. Your tool is awesome.

Docker image can run on cross-platform. As of now, it would be better to run in tomcat version is not a strict requirement. There has an uncompleted document for reference

but the document is for download from git, not from docker, right?


*: mute useless log

We don't care about the pending status changes if not for debugging. Stale epoch logs are useless too as it shows nothing we can't get from client log or metrics, and it can pollute the log file every time split happens.

LGTM

LGTM

/run-integration-tests

/run-all-tests

/run-all-tests

PTAL

OMG, I'm so tired of updating branch again and again.


Question: How to add board and organization members?

Hi,
I'm trying to add members to both an organization and a board.
Regarding the board, I've tried things like:
$board->setMemberships(['idMembership' => $baboon->trello_username, 'type' => $role])
->save();
And loads of other things but without success. I also tried to put that member above into an array because the function's doc says 'An array of array' but that's pretty much all.
Any ideas?

I'm running into the same problem.
I'm seeing that calling getId() on a Trello\Model\Member object returns the username instead...
So I think that's the issue.

Guys, did you find out how to do it?

Partially responded on #43


Failure to run v0.2 container on x86_64 systems

What steps did you take and what happened:
Looking at the container history from the gcr.io/heptio-images/sonobuoy-plugin-systemd-logs:v0.2 image it looks like it was built with the wrong QEMUARCH defined. I see this same error when running sonobuoy but tracked the issue down to this container.
What did you expect to happen:
Expected:
# podman run -it gcr.io/heptio-images/sonobuoy-plugin-systemd-logs:v0.1  date
Tue Nov 19 17:44:27 UTC 2019

Actual:
# podman run -it gcr.io/heptio-images/sonobuoy-plugin-systemd-logs:v0.2 date
standard_init_linux.go:211: exec user process caused "exec format error"

Anything else you would like to add:
Looking at the newest tag v0.2 i can see QEMUARCH=ppc64le
#  docker history gcr.io/heptio-images/sonobuoy-plugin-systemd-logs:v0.2 --no-trunc
IMAGE                                                                     CREATED             CREATED BY                                                                                SIZE                COMMENT
sha256:5e319ef2bd5b52eeef2d1ef625a387d341f2f7ff41f0dc108d71708502b6ce4c   2 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash" "-c" "/get_systemd_logs.sh"]                                                                                0B
<missing>                                                                 2 months ago        |1 QEMUARCH=ppc64le /bin/sh -c rm -f /usr/bin/qemu-${QEMUARCH}-static                                                                                0B

Looking at the previous image before v0.2 i can see QEMUARCH=x86_64  was defined correctly.
# docker history --no-trunc gcr.io/heptio-images/sonobuoy-plugin-systemd-logs@sha256:004b11e6f2096bc72684f1d84ebaac28ed9edff96ee4ef8d5b9a75471acd1109
IMAGE                                                                     CREATED             CREATED BY                                                                                SIZE                COMMENT
sha256:5f5bf6e0bf042c40e8797ee3362a46cf0d7b85c9a11e67e1712ff9bd4c18d618   2 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash" "-c" "/get_systemd_logs.sh"]                                                                                0B
<missing>                                                                 2 months ago        |1 QEMUARCH=x86_64 /bin/sh -c rm -f /usr/bin/qemu-${QEMUARCH}-static                                                                                0B

Environment:

Sonobuoy version: (use sonobuoy version): v0.14.3
Kubernetes version: (use kubectl version): 1.14.8
Kubernetes installer & version: 1.14.8
Cloud provider or hardware configuration: none
OS (e.g. from /etc/os-release):

[root@olcne-conformance-001 ~]# cat /etc/os-release
NAME="Oracle Linux Server"
VERSION="7.7"
...

💯 thanks for this issue!
I think the issue has now been resolved. I accidentally pushed this morning but saw an error and thought it resulted in a noop. Rebuilt/pushed a valid v0.2 release and tagged with latest.
Let me know if you continue to see this problem; I was able to repro and then confirmed the fix though.


Added notes related to SQL Server 2016 SP2

Added notes related to SQL Server 2016 SP2 support for distributed transactions with several databases in the same instance.

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

biztalk/core/high-availability-using-sql-server-always-on-availability-groups.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

biztalk/core/high-availability-using-sql-server-always-on-availability-groups.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


Fixing issues running the operator with IS 5.11.x

Purpose

Describe the problems, issues, or needs driving this feature/fix and include links to related issues in the following format: The PR aims to solve issues that occur when running the operator to get a minimal working setup of WSO2 IS 5.11.x

[x] Correcting some incorrect comments
[ ] https://github.com/wso2/k8s-wso2is-operator/issues

Test environment

List all JDK versions, operating systems, databases, and browser/versions on which this feature/fix was tested

Ubuntu 22.04.02 LTS
H2 default database
minikube v1.29.0 on Ubuntu 22.04
Kubernetes v1.26.1 on Docker 20.10.23

Learning

Describe the research phase and any blog posts, patterns, libraries, or add-ons you used to solve the problem.

IS docs

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.1 out of 2 committers have signed the CLA.:white_check_mark: gnudeep:x: RukshanJSYou have signed the CLA already but the status is still pending? Let us recheck it.


noscript

Closes #1977

plz2sans-serif?<3

Coverage remained the same at 71.348% when pulling 0c87c195d5e8bc9559e3a7885f735c66591c539c on na3d:noscript into 91253c484b0277ba78951abffe17f7b3714e7385 on linode:develop.

@eatonphil, yeah.  I wanted to use the PR review to verify how we wanted to approach the CSS.

Coverage remained the same at 71.348% when pulling e19bd1ba22567eb0007a5b473dc6069cdca94931 on na3d:noscript into 91253c484b0277ba78951abffe17f7b3714e7385 on linode:develop.

Coverage remained the same at 71.348% when pulling 271355d36842bc0b2f073d0c101302d3a9bb965c on na3d:noscript into 91253c484b0277ba78951abffe17f7b3714e7385 on linode:develop.

Not exactly what I meant, but fine for now.


Update example code in README

Hello! I updated the example code in README because many beginners refer to this code.
This code is almost same as following hello world code, except the argument "&ui" of build().
https://github.com/Gekkio/imgui-rs/blob/master/imgui-examples/examples/hello_world.rs

Thanks! :smile:


increase burst to rps * 3

Description of your changes

Fixes burst as mentioned in crossplane/crossplane#3176
I have:

[x] Read and followed Crossplane's contribution process.
[ ] Run make reviewable test to ensure this PR is ready for review.

How has this code been tested

@avalanche123 Could you fill out the "how has this code been tested" block, please. Specifically I'm curious whether it helped with https://github.com/crossplane/crossplane/pull/3176#pullrequestreview-1035059572.

@negz done. I was able to install the official providers without hitting a context timeout or client side throttling.


Disable days before minimum  date

howa can we disable those days as they cannot be selected anymore.

@ghadeermohameedelmahdy you can ignore taps for certain items in your daySelectionHandler
calendarView.daySelectionHandler = { [weak self] day in
if isDaySelectable(day) {
self?.selectedDay = day
}
}


Missed CA2101 rule

@bocus commented on Tue Apr 21 2020
There is page https://docs.microsoft.com/ru-ru/visualstudio/code-quality/ca2101?view=vs-2019, but current page has no link to it

Сведения о документе
⚠ Не вносите правки в этот раздел. Это необходимо для связывания страницы сайта docs.microsoft.com с вопросом на GitHub.

ID: f1295961-36c4-75a0-f50a-c5d86159746c
Version Independent ID: 3d4bba1e-0d05-f577-3b78-65dd6ab10635
Content: Предупреждения безопасности - Visual Studio
Content Source: docs/code-quality/security-warnings.md
Product: visual-studio-windows
Technology: vs-ide-code-analysis
GitHub Login: @Mikejo5000
Microsoft Alias: mikejo

@srvbpigh commented on Tue Apr 21 2020
Hello, @bocus
Thank you for your feedback.
We are actively reviewing your comments and will get back to you soon.
Kind regards,
Microsoft DOCS International Team

@CeciAc -- Cecilia, thank you for forwarding this issue.
@Mikejo5000 -- Mike, please look into this issue.

#2101 is under the Globalization warnings.
https://docs.microsoft.com/en-us/visualstudio/code-quality/globalization-warnings?view=vs-2019

Looks like it's wrong place... hmm

I'll check. Thx!

@dotpaul Paul, In the CA2101 doc, this rule is tagged as Microsost.Globalization. Is that correct, or should it be changed to security?

I'd keep this rule categorized as Globalization.
Dunno if we should have a list of rules that could have potential security implications, because most rules could arguably fall under that list.
This rule's docs should probably note that CAS should not be considered a security boundary; see the "Caution" in https://docs.microsoft.com/en-us/dotnet/framework/misc/code-access-security

Adding a note to CA2101 per recommendation.


Bug: input on delete list doesn't clear from previous delete

Describe the bug
When I delete a list, I have to type in the name of the list. However, the name of the list I previously deleted is still in the input.
Steps to reproduce

To reproduce this, you need to have previously deleted another list. So start there.
Go to your lists and try to delete a different list of a different name.
Notice that the previous word you typed to delete the list now appears in the input on the modal.

Browsers
Chrome
Additional context (Is this in dev or production?)
No response
Code of Conduct

[X] I agree to follow this project's Code of Conduct

Contributing Docs

[X] I agree to follow this project's Contribution Docs

Duplicate of #1848

Closing since this is duplicate of #1848 and has been resolved on https://beta.app.opensauced.pizza/. Should show up on the production app once we cut that over from beta!


Set a standard for unit-testing

We should set a proper standard for unit testing. https://github.com/storybooks/storybook/pull/771

Jest run over the entire codebase
Coverage reporting
Place unit-tests next to code-files

DONE!


Update mzLib to 427

mzlib version 427 contains fix that ensures that variant containing proteins are named correctly

There's been another release of mzlib since this one; can we close this one and accept the new one to prevent merge conflicts? #1659


FlatList - while list is scrolling/rendering items the JS thread is blocked, onPress are super delayed.

Description
While FlatList is scrolling and/or rendering items the JS thread is blocked.. any events (onPress etc) on TocuchableWhatever are ingored or processed after FlatList finishes rendering. How can I pause FlatList rendering and process onPress?

Content rendered by FlatList while scrolling uses InteractionManager so if you want to pause it you just need to create an interaction handle. (c) @sahrens

I've tried that on my ListItem:
export default class ListItem extends Component {

    shouldComponentUpdate() {
        return false;
    }

    render() {
        const {item} = this.props;

        return (
                <TouchableHighlight style={styles.item} underlayColor='rgba(255,255,255,.3)' activeOpacity={0.7} onPress={this._onPress}>
                     <View style={styles.row}>
                        <Image style={styles.image} source={{ uri: item.imgUrl}} />
                        <View style={styles.details}>
                            <BaseText style={styles.caption} weight={600}>{item.caption}</BaseText>
                            <BaseText style={styles.points}>{item.points} points</BaseText>
                        </View>
                        <TouchableOpacity hitSlop={{top: 10, left: 10, right: 10, bottom: 10}} >
                            <Icon style={styles.icon} name={item.favorite ? 'heart' : 'heart-outline'} size={24} color={'white'} />
                        </TouchableOpacity>
                    </View>
                </TouchableHighlight>
                )
    }

    _onPress = () => {
        const handle = InteractionManager.createInteractionHandle();
        this.props.onPress(this.props.item.key);
        InteractionManager.clearInteractionHandle(handle);
    }

}

but it does not fix the issue.
Am I doing it wrong?
Additional Information

React Native version: 0.42.0
Platform: tired only on iOS (device)
Operating System: MacOS
Dev tools: Xcode

Can you describe more precisely the problem you're seeing? How much of a delay is there when you press the button? If you let it sit for a bit before pressing, is there any delay? Or only if you just finished scrolling? What is triggered by the onpress? More code is helpful, e.g. in a gist.
Creating a handle can only pause queued tasks, it can't stop already running tasks, so if you're already doing something expensive when the onpress happens you'll have to wait for it to finish.
Does this only repro with FlatList? No issue with ListView?

for me, around 70 items, all with same height, had to change TouchableOpacity for TouchableWithoutFeedback, was getting 4-5 second delay for the press to happen

Can you describe more precisely the problem you're seeing?
When FlatList is scrolled (some items are rendered, but still renders offscreen items) and I press on any already rendered item the press is ignored/or is delayed few sec/or TouchableHighlight laggs: underlayColor is visible for few seconds. When I scroll and wait few sec (till it finishes rendering items batch) - everything ok.
How much of a delay is there when you press the button?
No on press event is fired at all and I have to press several times before ListItem becomes responsive. Sometimes TouchableHighlight laggs: underlayColor is visible for few seconds.
In the perf monitor I see that JS FPS is <10 - list is rendering offscreen items(?).
If you let it sit for a bit before pressing, is there any delay?
Almost no delay. Everything works as expected.
Or only if you just finished scrolling?
"just finished scrolling" - as described above - there is a noticeable delay.
What is triggered by the onpress?
Nothing, empty fn.
ListView - no issue.
import React, { PureComponent } from 'react'
import { View, StyleSheet, InteractionManager } from 'react-native'
import { colors,  componentSpecific } from 'src/theme'
import FlatList from 'react-native/Libraries/Experimental/FlatList';
import ListItem from './ListItem'

const { slider, list } = componentSpecific;

const viewabilityConfig = {
  minimumViewTime: 3000,
  viewAreaCoveragePercentThreshold: 100,
  waitForInteraction: true,
};

export default class List extends PureComponent {

    render() {
        return (
            <FlatList
                SeparatorComponent={this._renderSeparatorComponent}
                data={this.props.data}
                getItemLayout={this._getItemLayout}
                key={'List'}
                legacyImplementation={false}
                numColumns={1}
                //onRefresh={this._onRefresh}
                ref={(ref) => { this._listRef = ref; }}
                refreshing={false}
                renderItem={this._renderItemComponent}
                shouldItemUpdate={this._shouldItemUpdate}
                viewabilityConfig={viewabilityConfig}
                keyExtractor={this._keyExtractor}

                // ScrollView props
                directionalLockEnabled={true}

                style={styles.list}
            />
        )
    }

    _renderItemComponent = ({item}) => {
        return (
            <ListItem item={item} onPress={this._pressItem}/>
        )
    }

    _renderSeparatorComponent = () => {
        return (
            <View style={styles.separator} />
        )
    }

    _shouldItemUpdate = (prev, next) => {
        return prev.item !== next.item;
    }

    _getItemLayout = (data, index) => {
        return { length: list.itemHeight, offset: (list.itemHeight + list.separatorHeight) * index, index }
    }

    _keyExtractor = (item) => {
        return item.id.toString();
    }

    _pressItem = (water) => {

    }

}
const styles = StyleSheet.create({
    list: {
        flex: 1,
    },
    separator: {
        height: list.separatorHeight,
        backgroundColor: 'white',
        opacity: 0.3,
    },
});

Hmm, worrisome. Do you see any similar issues with FlatListExample in the UIExplorer?

Some other debugging tools:

set debug={true} on the FlatList and see if anything looks weird
call InteractionStallDebugger.install in init

Just a tiny delay in FlatListExample in UIExplorer. It is a neglectable delay compared to one in my app.

Oh, how are you updating your data prop? Do you maintain immutability of your items? Does your shouldItemUpdate ever return false?

There is also a "performance" option in the inspector that might help.

data pop is coming from a container component which is tied to the redux. The data is static for now.
Can't find InteractionStallDebugger in RN 0.42.0 /Libraries/Interaction.
shouldItemUpdate always return false.
Setting debug={true} gives me a red screen error:

'Tried to get frame for out of range index 0' __getFrameMetrics VirtualizedList.js:652:14

Don't know why, becuase I don't render FlatList if the data is empty:
    render() {
        if (!this.props.data) {
            return (
                <SpinnerOverlay text={'Loading...'}/>
            )
        }

        return (
            <FlatList
                SeparatorComponent={this._renderSeparatorComponent}
                data={this.props.data}
                getItemLayout={this._getItemLayout}
                key={'List'}
                legacyImplementation={false}
                numColumns={1}
                //onRefresh={this._onRefresh}
                ref={(ref) => { this._listRef = ref; }}
                refreshing={false}
                renderItem={this._renderItemComponent}
                shouldItemUpdate={this._shouldItemUpdate}
                viewabilityConfig={viewabilityConfig}
                keyExtractor={this._keyExtractor}

                // ScrollView props
                directionalLockEnabled={true}

                //debug
                debug={true}

                style={styles.list}
            />
        )
    }

I want to better describe what behaviour I am experiencing:
When FlatList was just scrolled and stopped (wtih a finger) first few taps on the ListItem are ignored, the same is in the FlatListExample in UIExplorer, but there FlatList items are rendered faster and only the 1st tap on the ListItem is ignored. My ListItems are a bit "heavier" and it could take several taps before they become responsive. Although if you wait ~1.5s seconds after scrolling fully stops - everything ok. So I think the problem is with a "heavier" items, that are taking longer to load.
I have 75 items in my list.
P.S.
What is the best way to push a screen on the ListItem press?
    _pressItem = (data) => {
        //const handle = InteractionManager.createInteractionHandle(); <-- will it help with performance issues?

        //this._listRef.recordInteraction(); <-- when should we call it? What is it for?
        // Push screen
        this.props.onListItemPress(data);

        //InteractionManager.clearInteractionHandle(handle);

    }

https://github.com/facebook/react-native/blob/master/Libraries/Interaction/InteractionStallDebugger.js
You could potentially grab the interaction handle earlier, for example when scrolling stops or in onResponderGrant or shouldSetResponder.
You can also try mucking with the advanced props from VirtualizedList like the windowSize, updateCellsBatchingPeriod, and maxToRenderPerBatch
Not sure what you're asking about pushing a screen there are many navigation options out there but I think react-navigation is recommended?

thnx, I'll try InteractionStallDebugger and let you know.
Sorry for the confusion. I already use RNN. Let me rephrase my question:
Should I call InteractionManager.createInteractionHandle and/or recordInteraction() when the only thing that I am doing in the onPress is calling navigator.push({...params})?
Do I need interaction handle in this scenario at all? Do you think it can help with ListItem responsiveness issues?

You can also try mucking with the advanced props from VirtualizedList like the windowSize, updateCellsBatchingPeriod, and maxToRenderPerBatch

I'll try it and let you know.
Although what exactly waitForInteraction does? It wait's for interactions before doing what? May you explain a bit more?

May you provide an example on how to grab an interaction handle in onResponderGrant or shouldSetResponder.

for me, when more than 40 items, all with same layout ，and all has been rendered，no data update，all "performance" option has been used， when scroll，was getting above 5 second delay for the press or other interaction，the cssRoot.calculateLayout cost cpu time so much. in a device with better CPU，such as iphone 7 or other android device，the delay will disappear。so  I am disappointed with the Yoga performance。

@sahrens so I ended up setting maxToRenderPerBatch={1} it gives me worse fill rate, but a lot better perfomance..
Thanks for your help.
Can't wait when the cell reuse will be implemented natively.... it will be a huge step forward in performance and UX.

Yeah, it is is pretty tricky balancing memory, fill rate, responsiveness, and frame rate but we'll keep optimizing!

Getting the same issue. ~100 records, about a 1.5s delay. I can tap around 7 times during that time while the list is being rendered before I can navigate to the next stack.

Hi, we experience similar issues.

js thread drops heavily (to -2 Oo) when start scrolling
touches on items gets lost / are heavily delayed
using redux-observables with apollo-client to load more items with onEndReached
i think we follow all the performance guidelines (PureComponents, initialListSize)

after spending all the day searching for a solution, i try to reproduce this issue in an example app, perhaps there is a performance bottleneck while running http requests?

Having same issue as @gregblass; the simplest ListHeaderComponent (<View style={ {backgroundColor: 'lime', height: 50} }/>) causes a 4s delay. My list contains 100 items.

Yep! This is a regression introduced in 0.45. As soon as the Expo Snack supports 0.45, I can prove it.
But anyone can make this happen themselves by making a flat list with 50+ items and adding literally anything to the header component in 0.45.

legacyImplementation={true}  even more performance.
when the FlatList RenderItem has Image , the flat is so slow and re-render many times ,you can see the screen is blink and blink.
"react": "16.0.0-alpha.12",
"react-native": "^0.46.2",
legacyImplementation={true} is very quick. but has a bug, when render more than 55 items,
no IMage will be show

@gregblass @wouteralberts I have the same issue in my app. When I render a large observable collection in a SectionList with a ListHeaderComponent it takes forever.
But when I tried to reproduce it in a new vanilla project, I couldn't do it. Are either of you using the legacy navigator? It seems like the Navigator might be the variable. I'm only getting the delay when I nav to the scene through the navigator.

@jpokrzyk Interesting. I do indeed use the Navigator from react-native-deprecated-custom-components.
If React Navigation fixes this for you, I may follow a similar upgrade path.

same

My problem is worst than yours. On android touch event(onPress) never work.
On android console the log I'm always getting:
"E/unknown:ReactNative: Got DOWN touch before receiving UP or CANCEL from last gesture"
navigator: Wix react-native-navigation
Flatlist -> ListItem(onPress)

I have the same issue

@sahrens May I know the process of the optimizing of this issue. I use FlatList to render 40 - 50 items the rendering performance is great, but the down-side is the action responsive got blocking during items are being scrolled. Which will cause very bad UX for user. But if I switch back to ScrollView the initial rendering performance also cause bad UX for user. So, as a product creator and developer. these trading off really bothering me :(

as an alternative and cleaner solution, I ended up wrap FlatList over ScrollView.
something like this:
<ScrollView>
  <FlatList />
</ScrollView>

Hmm, is anyone having a problem when not using a navigator? What about when not using a header component? Note that using the element form ListHeaderComponent={<Foo />} will break PureComponent because it will always be a new instance. You should memoize/cache the element or use a class or bound function like ListHeaderComponent={Foo} or ListHeaderComponent={this._renderHeader}. It shouldn't make a huge difference, but might help.

@farhanfahrezi Not work for me.

I am having the issue without a header. I am using React Navigation but even the animation I have for selection is heavily delayed.  The touch event is being blocked.

@sahrens In my case, it is in a react navigation navigator. Remove the header component, problem gone - no delay. I'm using ListHeaderComponent={this.renderHeader}.
Just tried upgrading to the latest version of RN, and the issue is still there. This is keeping my app stuck at 0.44.
I provided a snack in another issue. Let me find it.

I still cannot for the life of me figure out why this is happening. It is a screen in a stack navigator (react navigation). The moment I add anything into the header component into my virtualized list (with about 500 list items) after 0.44, I get a super long delay to be able to press to navigate to the next screen.
@sahrens I tried all the variations you mentioned above.
What I noticed in the contacts app in iOS 11 is that the search feature sticks to the screen while you scroll. In my app use case, it could definitely be argued that the search bar should always be visible.
So because I just cannot figure out why this is happening, I'm going to move the search bar out of my VirtualizedList component and place it in the header, which will allow me to move on with the project.
Something is going wrong somewhere though. I wish I had time to break apart my app into different components to try to isolate this further. One day I'll try to!

I just remembered - I posted a snack about this. https://github.com/facebook/react-native/issues/15115
https://snack.expo.io/rJwjIi6Sb
Upon testing it again, it works just fine. So there has to be something else going on in my app. I'll try to recreate it in a react navigation stack navigator as a next step.

Also - all my components that I'm passing into the VirtualizedList are functional components - which I was assuming would be even more efficient than a React Pure Component.
If anyone know that this is not the case, please let me know!

I'm curious what you based that assumption on - functional components don't do any optimizations yet. https://moduscreate.com/react_component_rendering_performance/
That is very odd that the combination of the navigator with a header component breaks things. Another workaround until we figure out the root cause is to render your header as just another item - just prepend a special item to your data array and add some logic to renderItem to render the header when that special item is encountered.

Thanks @sahrens! That article is great. I changed them to be react components and optimized their shouldComponentUpdate methods, and it improved performance significantly.
The header issue still remains though. I also found that passing in a ListEmpty component has the same issue.

I have the same problem, it takes few seconds till it onPress() executes after a scroll...
Any advance?

Any solution to this issue? It hampers user experience alot.

@swampnil001
I have been using this solution on prod w/ tens of thousands of users since October. Performance has been great!
https://github.com/facebook/react-native/issues/15115#issuecomment-324481796

FlatList and SectionList is bad performance. Try this,please. may be it is a surprise for you
https://github.com/bolan9999/react-native-largelist

@bolan9999: Looks like react-native-largelist requires the heightForCell prop, which is a major limitation relative to FlatList - I assume when you claim it's more performant you are comparing to using FlatList with getItemLayout provided?
I can imagine LargeList being more performance for certain use-cases, though - do you have a sense of what actually makes it more performant, especially on Android which doesn't have any experimental native optimizations? Ideas for how to adapt those improvements/optimizations to VirtualizedList?

Yes, I think it's terrible to measure an element in a large data source list. To get better performfance , I git up auto measuring.
react-native-largelist render elements only in safeArea, when you slide down, I move items which is out of top safeArea bottom. Use new data source re-render it. When you slide too fast, I just move it, but not re-render. I'll re-render it when the speed slow down.
Read the docs of react-native-largelist,you'll find out the principle and design.
Forgive me for my poor English，thank you

I've just posted on SO with similar issue, as solutions provided here don't really help my case.
https://stackoverflow.com/questions/48626555/figuring-out-performance-issues

I spent hours working around this issue i ended up switching to to DEV=FALSE and the issue disappeared

still in v0.53.0

The same problem here. I don't understand why this issue is closed if the problem is still active? Is there any solution for this?

No the problem still exist.

This is a very common pattern, i'm surprised it is that hard to implement 🙄

The problem still exists and on the nerve !:|

I had this problem too.  This component gets its list from the Redux store.  When the user scrolls the list, it requests the next 10 film titles to append to the list.
Each time a request for more titles is resolved, it created a new list with something like [...oldList, ...newList], as I had learned to do when modifying the redux state.  This caused the FlatList to re-render everything including items previous items, even though my item component extends React.PureComponent.
I modified the reducer appended additional data from the same query to the original list without creating a new list.  Now, it renders only the new entries.  The delay after appending to the list in response to scrolls is no longer noticable.  There is still a 1-2 second delay until items will respond to touches when it renders the first screenful of items after a new query, but I don't think that will be an issue for casual users.
I also set maxToRenderPerBatch={2} but I can no longer perceive a difference in performance.
Here's my FlatList:
<FlatList
  data={films}
  renderItem={renderItem}
  keyExtractor={item => item.imdbID}
  ListHeaderComponent={<Header totalResults={totalResults} />}
  ListFooterComponent={<Footer />}
  onEndReached={() => dispatchFetchPage()}
  initialNumToRender={8}
  maxToRenderPerBatch={2}
  onEndReachedThreshold={0.5}
/>

My flatlist (and sectionlist) have a header component. I am console logging both the render method and the header method, and though nothing is being rerendered, it seems the header is being rerendered as I scroll screenshot.
(Also, the data that the section list relies on never changes)
Here's my relevant code:
(in render method)
<SectionList
sections={this.state.alphabet}
keyboardShouldPersistTaps="always"
initialNumToRender={12}
ref={ref => this.list = ref}
keyExtractor={(item, index) => item.uuid}
renderItem={this.renderItem}
ListHeaderComponent={this.profileScreenHeader}
removeClippedSubviews
SectionSeparatorComponent={this.separator}
getItemLayout={(data, index) => ({
    length: 53, offset: 53 * index, index
})} />

(in rest of class)
    profileScreenHeader = () => {
        console.log('header rerender',)
        return (
            <View>
                <this.SearchBar/>
                { this.state.searching ? null : <this.GroupsFlatlist/> }
                <this.friendsHeader/>
            </View>
        )
    }

    SearchBar = () => {
            return (
                <View style={{ flexDirection: 'row', alignItems: 'center', borderColor: Colors.grayColor, borderWidth: StyleSheet.hairlineWidth, }}>
                    <TextInput
                        style={{ width: width * .95, backgroundColor: 'white', paddingLeft: 15, fontSize: 18, paddingVertical: 15 }}
                        value={this.state.searchText}
                        ref={ref => this.textInput = ref}
                        onChangeText={this.setSearchText}
                        placeholder='Search friends'
                        autoCapitalize={'none'}
                        autoCorrect={false}
                        clearButtonMode="while-editing"
                    />
                </View>
            )
        }

@prodigynelson, as it is now, every time state changes, everything will re-render.  I would try converting the header and all it's sub-components into pure components that depend only on properties, not state.  Subclass them from React.PureComponent which defines shouldComponentUpdate() with a shallow comparison of properties, which I think is what you want.  Let me know if that helps.

@lsiden I changed it from ListHeaderComponent={this.profileScreenHeader} to ListHeaderComponent={this.profileScreenHeader()} and that prevented it rerendering as it scrolled.

This problem still exists  in 0.57.1

If it's a performance problem caused by listview
You can try this library
react-native-nlist

i also had this problem and i fixed the delay on TouchableOpacity inside rows with flex: 1 on FlatList. I also have only stateless components and PureComponents in row depth. The fix with flex 1 is strange but i got inspired by react-native-largelist docs.
hope it helps
<FlatList
        style={{ flex: 1 }}
...

So I also had this problem for long time but then I rearchitectured my listItem template to be PureComponent and the problem disappeared. Hope it helps some newbie like me ;)


add exclusive-time-function py

I have added the solution of 636 | Exclusive Time of Functions | Python #1170
https://github.com/SHY-Corp/LeetCode-Solutions/issues/1170
Thanks in advanced

I'm afraid you are not assigned to the original issue (#1170)

You've not been assigned to this issue.


Fully populate chapter 10 in preparation for completing the challenges

Adds all the lesson objects in accordance with the figma and all the challenges for chapter 10
Preview

Adds all the lesson objects in accordance with the figma and all the challenges for chapter 10
Preview

@benalleng  is there a place where this copy was updated, can't see them on figma or the challenges repo for intro-1


macOS cmd+h doesn't hide window and change active app

Which operating system does the issue occur on?
macOS
When pressing cmd+h it still stays active... (window hides, but alacrity is active app).

In your title you say that it doesn't hide the window, however in your description you mention it does. Could you clarify this?
I think this is a duplicate of https://github.com/jwilm/alacritty/issues/1465, does that sound right?

Sorry, it hides the alacrity window but it doesn't make the application inactive, so if I continued to type or click it would still go into the alacrity window and not the most immediate window that was last active before it (cmd+tab).

Yes it's similar to #1465 however I can regain focus by cmd+tabbing back into it after making another application active by clicking on it.

I think this should be resolved when #1465 is fixed. So we can just use that issue to track this.


Inspector control loses focus after adding a property

Describe the bug
When adding 8px padding via the inspector, tab causes the control to lose focus and set focus on the first inspector control (width)
To Reproduce
Steps to reproduce the behavior. For canvas tasks, take care to note down all relevant key holds, keys typed, selected state etc. E.g:

Select a div
Via the inspector, type 8 into the first padding value
Press tab key

Expected: 2nd padding value (0) is selected and ready to be overwritten, because the 2nd input has focus
Observed: the inspector seems to re-render (?) and the first control in the inspector (here: width) has focus.
Discovered via #1803  / #1804

Seems like we fixed this, along with #1804 and #1803. Closing.


delete e2e cases

Description
I left an empty file, as deleting the whole folder caused errors in the pipeline. I didn't want to make changes to the whole flow as we are going to make new ones in a matter of days
closes #4280
Self Check:
Strike through any lines that are not applicable (~~line~~) then check the box

[ ] Attached issue to pull request
[ ] Changelog entry
[ ] Code is clear and sufficiently documented
- [ ] Sufficient test cases (reproduces the bug/tests the requested feature)
[ ] Correct, in line with design
- [ ] End user documentation is included or an issue is created for end-user documentation (add ref to issue here: )

Reviewer Checklist:

[ ] Sufficient test cases (reproduces the bug/tests the requested feature)
[ ] Code is clear and sufficiently documented
[ ] Correct, in line with design

I was taking care of this in my ticket so you can close this one ;) The PR for the setup will be done today in the afternoon somewhere


add config CMAKE_OSX_ARCHITECTURES for RmlUi

fix RmlUi build error on macOS Apple M1 arch arm64
https://github.com/xmake-io/xmake/issues/3469

please push to dev branch to trigger ci next.

@waruqi


Send screen - regular/max privacy/non-interactive transactions

New design.
Send screens: https://app.zeplin.io/project/5b379c2c38cb39e73e5f8889/dashboard?seid=5f104dfedf8f3a832a36c9a9

Empty (regular transaction). Please make Fee and Comment blocks hidden by default. https://zpl.io/2ZEonL1

Empty (max privacy tx). Fee in BEAM https://zpl.io/awRjOzj

Send (max privacy tx) to permanent token https://zpl.io/bLzYW6Q

Send (max privacy tx) to one-time token https://zpl.io/a3nYRP1

Max privacy requested https://zpl.io/amkleJ6

Non-interactive tx https://zpl.io/2GKeWkE

Send confirmation https://zpl.io/VkqJe8v

Show transaction token https://zpl.io/2jnnkqm

Save to address book https://zpl.io/aNg6JRd

Updates:

All Fees in GROTH
Add explanation why fee is high https://zpl.io/VDE60Oq

added separate issue for the fee message #88

@anatolse design updates:

non-interactive transactions we replace with offline transaction https://zpl.io/2GKeWkE

@anatolse no need to show popup dialog with save the name. keep the logic that is now. is user fill comment field - it will be comment in address book.

@anatolse please add numeric delimiters to the fee in GROTH.
Was 1200000 GROTH - should be 1,200,200 GROTH

1-6 Checked

Looks like here additional text fo offline transaction is missed
Actual:

Design:

There are no changes here according to design
Need to:

remove Identity field
add Type field
recipient field should contain token, as I understand
Actual:

Design:

Field Token type is missed for all Show token pop-ups
Actual:

Design:

Also looks like a forgotten place
Both mean the same value but have a different measure, that can confuse users
Actual:

Design:

Different units for Fee was accepted by @gingervik

p.6  please, create a separate issue

p.6 was moved to a separate issue https://github.com/BeamMW/beam-ui/issues/133

p.7 still have problems
The recipient field in confirmation dialog should contain token or SBBS address depending on what the user paste/enter to field address

if user paste/enter SBBS address - show SBBS address in field Recipient
if user paste/enter Token - show Token in field Recipient

Currently, in both cases, it shows SBBS address

checked
Adding additional text with a counter for an offline transaction was moved to https://github.com/BeamMW/beam-ui/issues/133


Prevent crash when switching REPL to missing interpreter

Fix #2820
Exceptions come from UpdatePropertiesFromProjectMoniker, I catch the same exceptions as other callers to that function.
Tested both "Switch this window" and "Open new window" options. Behavior is consistent after failure in both cases: error message is printed, and combo box shows "Unknown".

👍


add bulk upsert function

This looks like an awful lot of duplication. I think it would be better to create one method that takes an bulk action (INSERT, INSERT IGNORE, INSERT ... ON DUPLICATE KEY etc) and then just pass that query to the bulk function. By doing this there will be a lot of places to keep track of and update when needed. You can have a look at this implementation as a reference.
Sorry for shameless self promotion, although not saying you should switch library, just linking as an example.

Also, don't spend too much time on this, according to https://github.com/jinzhu/gorm/issues/255#issuecomment-590287329 this bulk feature will be featured in Gorm v2 which will be released soon.

OK. Thanks.

@Betula-L Didn't mean you should close this! The hint about the coming feature was just so you don't feel you spend unnecessary time but I'll gladly accept the feature in this project!
I think the feature you added is great, I just thing a different approach would be better to improve maintainability and keep it more DRY.
Please feel free to reopen this issue and I'll gladly help you out with tips and/or ideas!


write tests for shiftCoords function

write tests for shiftCoords in utils.
Description
created file test/specs/lib.utils.spec.js and wrote test cases for shiftCoords. which is covering all below cases.

[x] should receive one object
[x] input object should be a coordinate
[x] should return one object
[x] return object should be a coordinate

Related Issue
issue #150
Motivation and Context
As a project that relies on a large community of contributors, it is very important for us to have good tests to make sure changes don't break anything.
How Has This Been Tested?
using npm test command.
Types of changes

[x] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)

Checklist:

[ ] My code follows the code style of this project.
[ ] My change requires a change to the documentation.
[x] I have read the CONTRIBUTING document.
[ ] I have added tests to cover my changes.
[x] All new and existing tests passed.

'if the function has been called once.' wouldn't really test the function since the test is directly calling it.
i agree that if it doesn't throw an error a null value should be check instead.
thanks!

Great work @pawangspandey  - Thanks!

thanks, @srfrnk looking forward to contributing more.


Add option to ignore CBOR tags

This issue implements a proposal to address #1968. CBOR tags can be ignored then. To avoid breaking changes, the default will still throw a parse error. A treatment of CBOR tags is also the prerequisite of #2244.
Closes #1968.

Coverage remained the same at 100.0% when pulling 93cdf05928a38448a7ba0fa3e38d9f168d3ca1e1 on issue1968 into 1a521cbd3657eea6ba90cded2aecca93e3cd78d4 on develop.

🔖 Release item
This issue/PR will be part of the next release of the library. This template helps preparing the release notes.
Type

[x] ✨ New Feature
[ ] 🐛 Bug Fix
[ ] ⚡ Improvement
[ ] 🔨 Further Change
[ ] 🔥 Deprecated function

Description

Add option to ignore CBOR tags. #1968 #2273


Allow producers to register  WTMsig block signing authorities in system contract

Change Description
Change setprods action of the eosio.bios contract to take a vector of eosio::producer_authority instead and use the new set_proposed_producers_ex intrinsic to propose producer schedules using weighted threshold multisig block signing authorities.
Add the regproducer2 action to the eosio.system contract to allow block producers candidates to register a weighted threshold multisig block signing authority instead of just a single block signing key. The old regproducer action is still usable.
Deployment Changes

[X] Deployment Changes

The eosio.system contract and eosio.bios contract can now only be deployed on an EOSIO chain that has activated the WTMSIG_BLOCK_SIGNATURES protocol feature.
API Changes

[X] API Changes

The eosio.bios contract's setprods action now takes a vector of eosio::producer_authority as the schedule rather than a vector of eosio::producer_key.
The eosio.system contract adds a new action regproducer2 which does the same thing as the existing regproducer action except that it allows the block producer candidate to register a weighted threshold multisig block signing authority rather than just a single block signing key.
This PR also adds a binary extension field producer_authority to the producers table of the eosio.system contract and it subtly changes the meaning of the producer_key field. The producer_key will still be set as it was before if the block producer candidate uses the regproducer action to register a block signing key or even if the regproducer2 action is used to set a block signing authority consisting of a single key (that single key is repeated in producer_key). However, if a block signing authority with multiple keys is registered, then producer_key will be set to the null key (the same key it would have if the block producer candidate was disabled through unregprod or rmvproducer).
The changes in this PR introduce both variants (through block_signing_authority) and binary extensions (two new features of ABI 1.1) to the eosio.system contract ABI. They also introduce variants (through the authority field of producer_authority) to the eosio.bios contract ABI. Clients must be able to parse v1.1 ABIs to interact with this new version of the system contract.
Documentation Additions

[ ] Documentation Additions

this PR also closes #296


Documenting Lookup not working on ref which are in embedded doc.

Q
A

Type
improvement

BC Break
no

Summary
Lookup is not working with embedDoc.refDocs. (ReferenceOne and Many) It's not really a problem because when passing refDoc::class in lookup and manually setting localField, foreignField, it's working great.
I just wrote some documentation for it and added an Exception (thrown error wasn't understandable)
Plus, the simple lookup()->alias() with ReferenceMany seems not to work with Mongo 3.2. Which seems to be confirmed by the tests (https://github.com/doctrine/mongodb-odm/blob/1.2.x/tests/Doctrine/ODM/MongoDB/Tests/Aggregation/Stage/LookupTest.php#L191) but not indicated in doc, I added a line about that.

@daganM can you drop the new exception factory and squash commits so we can merge this? Thanks!

Thanks @daganM! Only thing left to do was to squash the commits which I've taken care of for you.


fix: skip resources not found for json patch

What type of PR is this?

/kind bug
What this PR does / why we need it:
This PR allows skipping resources not found for JSON patch.
Which issue(s) this PR fixes:

Fixes #
Special notes for your reviewer:
Does this PR introduce a user-facing change?

Additional documentation e.g., design docs, usage docs, etc.:

Pull Request Test Coverage Report for Build<PHONE_NUMBER>7
Details

2 of 2 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.02%) to 52.465%

Totals

Change from base Build<PHONE_NUMBER>1:
0.02%

Covered Lines:
9874

Relevant Lines:
18820

💛  - Coveralls