A good example of a tail recursive function. There is a bug, however:
if (partitionFunctions.isEmpty) {
results
}
When the recursive function runs out of partition matching functions in the list, it returns the data that has been partitioned successfully thus far. The rest of the data that has not been matched is lost. I would suggest adding the remainder of the input to the result map using a default partition key, e.g. 'others'.
I am glad they are using the open source for the flight control software now. Not only it is a great way to learn more about the technology, but it might actually benefit from extra set of eyes reviewing this safety critical code.
Ada language had generics since the first 1983 standard. When C++ came about it introduced OOP features that Ada lacked and didn't get for another 12 years when 1995 standard was introduced. C++ users never missed generics for many years and the language became ubiquitous while Ada remained marginalized. What's interesting is that all strongly typed languages have now jumped on the generics bandwagon, which to me shows that being ahead of its time doesn't pay off.
Walmart seems to be in the middle of a major technology upgrade. They understand very well that they must compete against Amazon if they want to have a future.
Guarding information and guarding physical assets have one thing in common. It is largely a passive exercise in waiting for something to happen. For this reason it is very boring and unreliable. The only way to improve the situation is to have active and random drills when someone attempts to steal the assets. This would make the work of the Blue team a lot more rewarding rather than just be relegated to mindless blocking access to anything and everything.
GC of 500 request/s could not have possibly caused a performance issue. Most likely the problem was due to JS code holding on to the 1MB requests for the duration of the asynchronous Kinesis request or a bug in the Kinesis JS library itself. With timeout of 2 minutes, you may end up with up to 30K/min x 2min x 1mb = 60GB RAM used. GC would appear running hot during this time but it is only because it is has to scrape more memory somewhere while up to 60gb is being in use.
When the recursive function runs out of partition matching functions in the list, it returns the data that has been partitioned successfully thus far. The rest of the data that has not been matched is lost. I would suggest adding the remainder of the input to the result map using a default partition key, e.g. 'others'.