Commit graph

13374 commits

Author SHA1 Message Date
ghubstan
63564760a8
Support more fine grained rate metering
We need to be able to define call rate meters for time spans not limited
to TimeUnit intervals of 1 SECOND, 1 HOUR, or 1 DAY.  This change allows
more flexibility, e.g., 10 per 5 seconds, 10 per 5 hrs, 100 per 7 days.
2020-12-22 21:11:04 -03:00
ghubstan
c8ef4141e3
Fix comment 2020-12-22 18:33:18 -03:00
ghubstan
0d4ed952e7
Remove redundant callCount field
The size of the timestamp queue is the call count
2020-12-22 17:00:01 -03:00
ghubstan
d61521276f
Remove unused local var 2020-12-22 16:30:37 -03:00
ghubstan
01546ad11d
Use a simpler, time windowing call rate meter
Rewrote the GrpcCallRateMeter class and adjusted afected classes.

These changes were requested in PR review
https://github.com/bisq-network/bisq/pull/4966#pullrequestreview-557040093
2020-12-22 16:14:49 -03:00
ghubstan
27efc5f3c2
Merge branch '09-refactor-grpc-error-handling' into 10-callrate-interceptor
Adjust to reverting to reverting 6aa385e, and fix test file conflict.
2020-12-21 15:44:34 -03:00
ghubstan
8ee3a1599c
Merge branch '08-gettransaction' into 09-refactor-grpc-error-handling
Adjust to reverting 6aa385e.
2020-12-21 15:35:15 -03:00
ghubstan
1507a2c791
Resolve file conflict w/ master 2020-12-21 15:31:07 -03:00
ghubstan
4aa4270ed9
Adjust TradeTest to reverting 6aa385e494 2020-12-21 15:23:23 -03:00
ghubstan
3a770f4bc0
Adjust TakeSellBTCOfferTest to reverting 6aa385e494 2020-12-21 15:22:05 -03:00
ghubstan
97dcac2a2d
Adjust TradeFormat to reverting 6aa385e494 2020-12-21 15:19:10 -03:00
ghubstan
64c2ac5169
Adjust grpc.proto to reverting 6aa385e494 2020-12-21 15:17:52 -03:00
ghubstan
bdde24a463
Ajust TradeInfo to reverting 6aa385e494 2020-12-21 15:10:43 -03:00
ghubstan
672eb79f95
Revert "Append nullable withdrawalTxId field to Trade proto message"
This reverts commit 6aa385e494.
2020-12-21 15:05:54 -03:00
ghubstan
a3eb4ed59a
Remove unused import 2020-12-19 17:37:24 -03:00
ghubstan
abc39402b5
Test CallRateMeteringInterceptor 2020-12-19 17:31:02 -03:00
ghubstan
fabd7c8776
Refactor testcase superclasses to support rate metering configs 2020-12-19 17:08:53 -03:00
ghubstan
d5657e9760
Install call rate metering config file before startup
Copy the config file at --callRateMeteringConfigPath to each daemon's
appDataDir, where it will be detected at server startup.
2020-12-19 17:04:40 -03:00
ghubstan
56a5c7938d
Add ApiTestConfig option --callRateMeteringConfigPath
Points to a call rate metering interceptor configuration file.

Test cases can build a config file, and the test harness will
install it into a daemon's appDataDir before startup.
The installed config file will be used to configure gRPC
service rate metering interceptors.
2020-12-19 16:54:44 -03:00
ghubstan
87f75ee10c
Configure GrpcVersionService's rate metering interceptor
This change demonstrates how a method call rate metering interceptor
is configured for a gRPC service.  GrpcVersionService uses a custom
rate metering interceptor, or none.  A commented out, 'default'
interceptor is defined as a usage example.
2020-12-19 16:41:26 -03:00
ghubstan
ea97a801e5
Don't cancel gRPC call if an interceptor does not meter all methods 2020-12-19 16:31:41 -03:00
ghubstan
bb8d2ae7c4
Inject Config into CoreApi 2020-12-19 15:50:00 -03:00
ghubstan
9f679deb08
Add license note and toString method 2020-12-19 15:47:20 -03:00
ghubstan
830a5f009a
Add license note 2020-12-19 15:43:44 -03:00
ghubstan
455ed67f9b
Add GrpcServiceRateMeteringConfigTest 2020-12-19 15:41:55 -03:00
ghubstan
5de910a03d
Add unit test dependencies to daemon subproject 2020-12-19 15:40:27 -03:00
ghubstan
b307593c82
Make CallRateMeteringInterceptor configurable via json
This adds a GrpcServiceRateMeteringConfig class that can read and
write rate metering interceptor config files, and configure
a gRPC rate metering service interceptor at startup.

This seems excessive, but we need to be able to test and tune
method rate metering without having to change hard coded, default
interceptor rate meters.
2020-12-19 15:32:40 -03:00
ghubstan
a5ed17e43f
Add license comment, stop & toString methods, and make isRunning transient 2020-12-19 13:14:06 -03:00
ghubstan
89e2187878
Change long to int, tidy up error msg 2020-12-17 14:12:04 -03:00
ghubstan
2148a4d958
Prevent excessive api calls
This change provides a gRPC CallRateMeteringInterceptor to help protect
the server and network against being overloaded by CLI scripting mistakes.

An interceptor instance can be configured on a gRPC service to set
individual method call rate limits on one or more of the the service's
methods. For example, the GrpcOffersService could be configured with
this interceptor to set the createoffer rate limit to 5/hour, and
the takeoffer call rate limit could be set to 20/day.  Whenever a
call rate limit is exceeded, the gRPC call is aborted and the client
recieves a "rate limit exceeded" error.

Below is a simple example showing how to set rate limits for one method
in GrpcVersionService.

    final ServerInterceptor[] interceptors() {
        return new ServerInterceptor[]{
                new CallRateMeteringInterceptor(new HashMap<>() {{
                    put("getVersion", new GrpcCallRateMeter(2, SECONDS));
                }})
        };
    }

It specifies a CLI can execute getversion 2 times / second.

This is not a throttling mechansim, there is no blocking nor locking
to slow call rates.  When call rates are exceeded, calls are
simply aborted.
2020-12-17 12:33:45 -03:00
ghubstan
fa9ffa1fb2
Put arguments on separate lines 2020-12-16 15:35:12 -03:00
ghubstan
2572e8641d
Create grpc interceptor pkg, move auth interceptor into it 2020-12-16 15:30:40 -03:00
ghubstan
f7c1103848
Rename gRPC exception handler class 2020-12-16 14:42:23 -03:00
ghubstan
c60605f75c
Fix class level comment 2020-12-16 14:26:12 -03:00
ghubstan
1cd47fd0aa
Merge branch 'master' into 09-refactor-grpc-error-handling 2020-12-16 13:45:29 -03:00
ghubstan
e6c6d3b8d3
Add new CoreApiExceptionHandler to gRPC services
This change reduces gRPC service error handling duplication by moving
it into a @Singleton encapsulating everything needed to wrap
an expected or unexpected core api exception into a gRPC
StatusRuntimeException before sending it to the client.  It also
fixes some boilerpate classes were gRPC error handling was missing.
2020-12-16 13:34:21 -03:00
sqrrm
86d81762f6
Merge pull request #4949 from chimp1984/show-pricedeviation-for-fixed-price-offers
Show price deviation in % for fixed price offers and BSQ
2020-12-16 15:30:14 +01:00
Christoph Atteneder
0789180bb0
Merge pull request #4957 from sqrrm/sign-single-account
Sign single account
2020-12-16 14:07:34 +01:00
sqrrm
4cdd94ac28
Merge pull request #4955 from chimp1984/cache-frequent-method-calls
Cache results of isFiatCurrency and isCryptoCurrency
2020-12-16 12:11:58 +01:00
sqrrm
25328167de
Merge pull request #4958 from chimp1984/disable-tx-broadcast-if-connected-to-local-node
Do not use tx broadcast to mempool nodes if a local btc nodes is used
2020-12-16 12:10:19 +01:00
chimp1984
bb3dbf3d78
Add null check (for tests) and fix missing param for test class.
Fix test with price display.
2020-12-15 23:29:53 -05:00
chimp1984
1106d01ff7
Set bsq30DayAveragePrice only at activate as its expensive
call and does not change frequently and is only used for
informational purpose as % display.
2020-12-15 23:29:52 -05:00
chimp1984
c858ac7b7d
Add check to not devide by 0
Cleanups
2020-12-15 23:29:52 -05:00
chimp1984
34f10d37ef
Add price deviation in % to BSQ using 30 day average 2020-12-15 23:29:52 -05:00
chimp1984
f97bb6228b
Show also % price deviation for fixed price and
sort according to it
Allow sorting at show all. This helps to spot
good offers with negative % over the whole market.
2020-12-15 23:29:52 -05:00
chimp1984
59cfb2d3a9
Do not use tx broadcast to mempool nodes if a local btc nodes is used
See discussion at: https://github.com/bisq-network/bisq/pull/4943#issuecomment-745615764
2020-12-15 20:04:38 -05:00
chimp1984
ecad724046
Add null checks, improve comment 2020-12-15 19:08:37 -05:00
sqrrm
f61e62c7c0
Merge pull request #4956 from chimp1984/sort-paymentmethods-by-name
Sort payment methods by display string not by id.
2020-12-16 00:17:26 +01:00
sqrrm
fa01192661
Merge pull request #4952 from chimp1984/fix-priv-message-from-peer-icon
Allow sending private notifications from avatar icon at trade
2020-12-16 00:15:46 +01:00
sqrrm
9b8073b94a
Merge pull request #4954 from chimp1984/various-small-improvements
Various small improvements
2020-12-15 23:04:15 +01:00