742 Commits

Author SHA1 Message Date
Joseph Zuniga-Daly
a4e55cec83 Remove new line character 2020-07-13 16:55:23 +01:00
Joseph Zuniga-Daly
25a7bcc6c6 Testing has shown that registering custom serializers as default is more robust when adding new cordapps 2020-07-13 16:42:22 +01:00
Joseph Zuniga-Daly
e0d29d154d Store custom serializer type in the Kryo stream so we can spot when a different serializer is being used to deserialize 2020-07-13 15:53:12 +01:00
Joseph Zuniga-Daly
6520aa62d6 Sort serializers by classname so we are not registering in an unknown or random order 2020-07-08 15:57:28 +01:00
Joseph Zuniga-Daly
9e3242b234 Do not log the duplicate serializer warning when the duplicate is the same class 2020-07-08 15:41:37 +01:00
Joseph Zuniga-Daly
beb87fd6ae Add test to check duplicate serializers are logged 2020-07-08 15:13:00 +01:00
Joseph Zuniga-Daly
a1b4aa1ec2 Add doc comments to CustomSerializerCheckpointAdaptor 2020-07-08 11:40:45 +01:00
Joseph Zuniga-Daly
b45b8cf365 Add doc comments 2020-07-08 11:29:28 +01:00
Joseph Zuniga-Daly
f0ebaab3e9 Check for duplicate custom checkpoint serializers 2020-07-08 11:23:39 +01:00
Joseph Zuniga-Daly
a719163caf Split serializer registration into default and non-default registrations. Run registrations at the right time to preserve Cordas own custom serializers. 2020-07-07 11:27:35 +01:00
Joseph Zuniga-Daly
14d8651817 Register as default unless the target class is final 2020-07-03 16:53:38 +01:00
Joseph Zuniga-Daly
223cfe640d Remove unused imports 2020-06-26 15:06:03 +01:00
Joseph Zuniga-Daly
bc921f0cb4 Use kryo default for abstract classes 2020-06-26 14:20:57 +01:00
Joseph Zuniga-Daly
b1408453ee Wire up the new CheckpointCustomSerializer interface 2020-06-26 14:18:54 +01:00
Joseph Zuniga-Daly
fbe234574e Tidy up the fetching of types 2020-06-24 12:58:40 +01:00
Joseph Zuniga-Daly
4ab9241416 Explain why we are looking for two type parameters when we only use one 2020-06-24 12:39:03 +01:00
Joseph Zuniga-Daly
d41a1f39fb Give field a descriptive name 2020-06-24 12:33:26 +01:00
Joseph Zuniga-Daly
e95757426f Remove unused proxyType field 2020-06-24 12:32:22 +01:00
Joseph Zuniga-Daly
b43ec6a103 Remove unused constructors from exception 2020-06-24 12:31:30 +01:00
Joseph Zuniga-Daly
65b6e05a98 Put calls to the userSerializer on their own lines to improve readability 2020-06-24 12:26:15 +01:00
Joseph Zuniga-Daly
dffc7e832b Extract method 2020-06-24 11:42:04 +01:00
Joseph Zuniga-Daly
5f9d2a68bb Rename exception 2020-06-24 11:38:09 +01:00
Joseph Zuniga-Daly
ae3396a7c3 Remove try/catch to fix TooGenericExceptionCaught detekt rule 2020-06-24 11:34:07 +01:00
Joseph Zuniga-Daly
a66e140185 CORDA-3717: Apply custom serializers to checkpoints 2020-06-24 11:15:08 +01:00
Schife
c47c586955 Merge branches 'release/os/4.5' and 'release/os/4.6' of https://github.com/corda/corda into raz/os45to46
 Conflicts:
	Jenkinsfile
2020-06-12 17:28:40 +01:00
Schife
b39aaacd3a Merge branch 'release/os/4.4' of https://github.com/corda/corda into raz/os44to45 2020-06-12 15:35:33 +01:00
Joseph Zuniga-Daly
d7e55ed4e5
CORDA-3837: When delivering a lifecycle event, copy the database context into the lifecycle event thread (#6331) 2020-06-11 11:14:51 +01:00
Denis Rekalov
5afdb63c94 CORDA-3818: Synchronize OS implementation of PublicKeyToOwningIdentityCache with CE 2020-05-26 16:10:14 +01:00
Viktor Kolomeyko
31612901cf
CORDA-3800: Flaky ProtonWrapperTests test investigation (#6258) 2020-05-21 12:33:56 +01:00
Adel El-Beik
b9b0ca58e3 Merge remote-tracking branch 'origin/release/os/4.5' into adel/merge-from-4.5 2020-05-15 10:23:17 +01:00
James Higgs
06467d04b1
EG-1980 - Remove stale docs links from OS (#6251)
Remove hardcoded docs references, push docs link to gradle
2020-05-14 12:57:59 +01:00
Viktor Kolomeyko
c5950d6a3a
ENT-5277: Reflect node-api changes in OS (#6238) 2020-05-12 13:22:30 +01:00
Denis Rekalov
32407b2c46
CORDA-3753: Increase Artemis security-invalidation-interval to avoid frequent CRL checks (#6207) 2020-05-04 13:00:22 +01:00
James Higgs
1956bdb5d4 [MERGE] Fix detekt issues 2020-04-29 11:57:37 +01:00
James Higgs
adbe030a2c Merge branch 'release/os/4.5' into jamesh/error-reporting-sync-29-04-20
# Conflicts:
#	node/src/main/kotlin/net/corda/node/internal/AbstractNode.kt
2020-04-29 11:47:14 +01:00
James Higgs
ab43238420
[EG-438] Error Reporting Framework (#6125)
* [EG-438] First commit of error code interface

* [EG-438] Implement error reporter and a few error codes

* [EG-438] Add unit tests and default properties files

* [EG-438] Add the error table builder

* [EG-438] Update initial properties files

* [EG-438] Add some Irish tests and the build.gradle

* [EG-438] Fall back for aliases and use different resource strategy

* [EG-438] Define the URL using a project-specific context

* [EG-438] Tidy up initialization code

* [EG-438] Add testing to generator and tidy up

* [EG-438] Remove direct dependency on core and add own logging config

* [EG-438] Fix compiler warnings and tidy up logging

* [EG-438] Fix detekt warnings

* [EG-438] Improve error messages

* [EG-438] Address first set of review comments

* [EG-438] Use enums and a builder for the reporter

* [EG-438] Add kdocs for error resource static methods

* [EG-438] Handle enums defined with underscores

* [EG-438] Slight refactoring of startup code

* [EG-438] Port changes to error reporting code from future branch

* [EG-438] Also port test changes

* [EG-438] Suppress a deliberately unused parameter
2020-04-28 14:07:50 +01:00
Dan Newton
9a2ae8ae19
CORDA-3722 withEntityManager can rollback its session (#6187)
* CORDA-3722 withEntityManager can rollback its session

## Summary

Improve the handling of database transactions when using
`withEntityManager` inside a flow.

Extra changes have been included to improve the safety and
correctness of Corda around handling database transactions.

This focuses on allowing flows to catch errors that occur inside an
entity manager and handle them accordingly.

Errors can be caught in two places:

- Inside `withEntityManager`
- Outside `withEntityManager`

Further changes have been included to ensure that transactions are
rolled back correctly.

## Catching errors inside `withEntityManager`

Errors caught inside `withEntityManager` require the flow to manually
`flush` the current session (the entity manager's individual session).
By manually flushing the session, a `try-catch` block can be placed
around the `flush` call, allowing possible exceptions to be caught.

Once an error is thrown from a call to `flush`, it is no longer possible
to use the same entity manager to trigger any database operations. The
only possible option is to rollback the changes from that session.
The flow can continue executing updates within the same session but they
will never be committed. What happens in this situation should be handled
by the flow. Explicitly restricting the scenario requires a lot of effort
and code. Instead, we should rely on the developer to control complex
workflows.

To continue updating the database after an error like this occurs, a new
`withEntityManager` block should be used (after catching the previous
error).

## Catching errors outside `withEntityManager`

Exceptions can be caught around `withEntityManager` blocks. This allows
errors to be handled in the same way as stated above, except the need to
manually `flush` the session is removed. `withEntityManager` will
automatically `flush` a session if it has not been marked for rollback
due to an earlier error.

A `try-catch` can then be placed around the whole of the
`withEntityManager` block, allowing the error to be caught while not
committing any changes to the underlying database transaction.

## Savepoints / Transactionality

To make `withEntityManager` blocks work like mini database transactions,
save points have been utilised. A new savepoint is created when opening
a `withEntityManager` block (along with a new session). It is then used
as a reference point to rollback to if the session errors and needs to
roll back. The savepoint is then released (independently from
completing successfully or failing).

Using save points means, that either all the statements inside the
entity manager are executed, or none of them are.

## Some implementation details

- A new session is created every time an entity manager is requested,
but this does not replace the flow's main underlying database session.
- `CordaPersistence.transaction` can now determine whether it needs
to execute its extra error handling code. This is needed to allow errors
escape `withEntityManager` blocks while allowing some of our exception
handling around subscribers (in `NodeVaultService`) to continue to work.
2020-04-28 11:20:00 +01:00
Rick Parker
e6e1caa58a
Merge pull request #6185 from corda/nnagy-os4.4-os4.5-20200426-2
os4.4->os4.5 2020-04-26
2020-04-28 09:02:36 +01:00
Joseph Zuniga-Daly
e618416861 Move files to their new home 2020-04-24 17:11:15 +01:00
nikinagy
ee7700e28f Add Hibernate UTC Fix 2020-04-24 17:00:10 +01:00
nikinagy
8eab8653cd Merge branch 'release/os/4.4' of https://github.com/corda/corda into nnagy-os4.4-os4.5-20200426-2
 Conflicts:
	node-api/src/main/kotlin/net/corda/nodeapi/internal/persistence/HibernateConfiguration.kt
	node-api/src/main/kotlin/net/corda/nodeapi/internal/rpc/client/AMQPClientSerializationScheme.kt
2020-04-24 16:57:57 +01:00
Denis Rekalov
c86249adb3 ENT-5222: Prevent from blocking further connections after transport failure on TLS handshake 2020-04-24 13:59:19 +01:00
nikinagy
335372cfc1 Merge branch 'release/os/4.3' into nnagy-os-4.3-os-4.4-20200423 2020-04-23 16:03:17 +01:00
Denis Rekalov
824c01daad
ENT-5219: Synchronize BCCryptoService between OS and ENT (#6178) 2020-04-23 12:44:27 +01:00
Viktor Kolomeyko
257026f606
CORDA-3726: Remove memory leaks when many InProcess nodes started (#6169)
* CORDA-3762: Integration test exposing the problem reported

* CORDA-3726: Additional logging

* CORDA-3726: Prevent thread leaks

* CORDA-3726: New `journalBufferTimeout` parameter

* CORDA-3726: Override `journalBufferTimeout` parameter

* CORDA-3726: Making Detekt happier

* CORDA-3276: Account for extra thread user in MockNetwork

For real node this does not matter as `shutdown` can safely be called multiple times, which is not true for server thread provided by MockNetwork

* CORDA-3276: Do not make SMM shutdown "executor" as it belongs to AbstractNode

* CORDA-3276: Address input from @rick-r3

* CORDA-3276: Fix test after rebase
2020-04-23 08:53:51 +01:00
Rick Parker
28f00ce92a
CORDA-3701 Fix bugs in some iterator checkpoint serializers (#6135)
* CORDA-3701 Fix bugs in some iterator checkpoint serializers

* Added some more tests and tidied up implementation some more.

* Fix imports to be detekt compliant

* Add timeouts to tests
2020-04-22 16:21:39 +01:00
nikinagy
02d21c7bac
making sure hibernate uses UTC time zone (#6168) 2020-04-22 13:34:17 +01:00
Denis Rekalov
0d441c3760
ENT-4912: Enable CRL checking with embedded Artemis (#6154) 2020-04-22 10:35:58 +01:00
nikinagy
2bcaa2ac80
CORDA-3569 - Add RestrictedConnection and more blocked methods to RestrictedEntityManager (#6129)
* adding blocked functions ro RestrictedEntityManager and creating RestrictedConnection class

* adding flow tests and fixing issues regarding the review

* adding quasar util to gradle

* updating flow tests

* adding space before } at .isThrownBy()

* adding spaces
2020-04-21 14:39:41 +01:00
Christian Sailer
9ca251c65f
ENT-4494 revert postgre to previous open source behaviour (#6166)
* ENT-4494 revert to previous open source behaviour re postgres while discussions about DB harmonization is ongoing

* Remove unused imports
2020-04-21 13:14:12 +01:00