mirror of
https://github.com/corda/corda.git
synced 2025-01-18 10:46:38 +00:00
Corda is an open source blockchain project, designed for business from the start. Only Corda allows you to build interoperable blockchain networks that transact in strict privacy. Corda's smart contract technology allows businesses to transact directly, with value.
c79ad972d0
If a flow fails outside of its normal error processing code path it will end up in `FlowDefaultUncaughtExceptionHandler`. This handler will put the flow into overnight observation if possible. This is done in-memory and the database. Even with this being done, the fiber itself has blown up and therefore does not manage to get to `SMM.removeFlow` which is where `SMM.decrementLiveFibers` is called. For example, a flow that errored will hit this code eventually. This code is also hit when a flow is suspended and a shutdown event is sent to it. The `liveFibers` latch blocks the SMM from shutting down until all flows have finished or processed shutdown events. The changes described below resolve this problem. Any flow that goes to the `FlowDefaultUncaughtExceptionHandler` will be put marked as dead (`StateMachineState.isDead`). Highlighting that the flow cannot continue to process events normally as it has broken out of its event loop Retrying and shutdown are done manually rather than injecting events into the flow fiber's queue, because it can't execute its event loop. Killing a dead flow executes an altered version of `retryFlowFromSafePoint`. It does this so it can delete the checkpoint and then continue using the checkpoint it just deleted to run the kill flow transition on a new fiber. If a killed flow reaches the `FlowDefaultUncaughtExceptionHandler` it will be forcibly killed via `killFlowForcibly` which deletes the checkpoint/or updates it to KILLED and then calls `removeFlow` to bypass any event processing. This means that a flow that was dead and was killed will be terminated manually if it reaches the handler again. The same is true for flows that were not dead before but reached the handler after being killed. Also, `FlowCreator.createFlowFromCheckpoint` now retains the `isKilled` state of the previous fiber's state. |
||
---|---|---|
.ci | ||
.github | ||
.idea | ||
buildSrc | ||
client | ||
common | ||
confidential-identities | ||
config | ||
core | ||
core-deterministic | ||
core-tests | ||
detekt-plugins | ||
docker | ||
docs | ||
experimental | ||
finance | ||
gradle/wrapper | ||
isolated | ||
jdk8u-deterministic | ||
lib | ||
node | ||
node-api | ||
node-api-tests | ||
release-tools | ||
samples | ||
serialization | ||
serialization-deterministic | ||
serialization-djvm | ||
serialization-tests | ||
testing | ||
tools | ||
.dockerignore | ||
.gitignore | ||
build.gradle | ||
BUILD.md | ||
buildCacheSettings.gradle | ||
constants.properties | ||
CONTRIBUTING.md | ||
CONTRIBUTORS.md | ||
detekt-baseline-config.yml | ||
detekt-baseline.xml | ||
detekt-config.yml | ||
deterministic.gradle | ||
gradle.properties | ||
gradlew | ||
gradlew.bat | ||
java8.gradle | ||
Jenkinsfile | ||
LICENSE | ||
README.md | ||
SECURITY.md | ||
settings.gradle | ||
sizing.sh | ||
TRADEMARK |
Corda
Corda is an open source blockchain project, designed for business from the start. Only Corda allows you to build interoperable blockchain networks that transact in strict privacy. Corda's smart contract technology allows businesses to transact directly, with value.
Features
- Smart contracts that can be written in Java and other JVM languages
- Flow framework to manage communication and negotiation between participants
- Peer-to-peer network of nodes
- "Notary" infrastructure to validate uniqueness and sequencing of transactions without global broadcast
- Enables the development and deployment of distributed apps called CorDapps
- Written in Kotlin, targeting the JVM
Getting started
- Read the Getting Started documentation
- Run the Example CorDapp
- Read about Corda's Key Concepts
- Follow the Hello, World! tutorial
Useful links
- Project Website
- Mailing List
- Documentation
- Stack Overflow Tag
- Slack Channel
- Meetups
- Training Courses
Contributing
Corda is an open-source project and contributions are welcome!
To find out how to contribute, please see our contributing docs.
License
Acknowledgements
YourKit supports open source projects with its full-featured Java Profiler.
YourKit, LLC is the creator of YourKit Java Profiler and YourKit .NET Profiler, innovative and intelligent tools for profiling Java and .NET applications.