graphiti 1.5.3 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/lib/graphiti/configuration.rb +15 -0
- data/lib/graphiti/scope.rb +18 -1
- data/lib/graphiti/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5804a85dd275e9e5f160f08c4b4f49f151e4fddc1178a90a66f2a28ef88bd647
|
4
|
+
data.tar.gz: 1962ef04b5278bb720e971dca2112e20a9bbb493bbc9428f1b3ca57737e3250f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95c66786278dea821516ebb0b1f47a249e419a681ac0f461006adfe427fe0d81e9591017187611a7f49dcf14479df47d3501e29c97d4b8fbb9f3c2fc988bc615
|
7
|
+
data.tar.gz: 8ccab36d491f3930335d2b42fbddcf18b94403ef7825a80edf33020ba618ff688106719ea49c2f0df798263f12b51b5e0959154ebf85a18737d15c507b024c19
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
graphiti changelog
|
2
2
|
|
3
|
+
# [1.6.0](https://github.com/graphiti-api/graphiti/compare/v1.5.3...v1.6.0) (2024-03-20)
|
4
|
+
|
5
|
+
|
6
|
+
### Features
|
7
|
+
|
8
|
+
* add thread pool and concurrency_max_threads configuration option ([#470](https://github.com/graphiti-api/graphiti/issues/470)) ([697d761](https://github.com/graphiti-api/graphiti/commit/697d76172adec24cd7e7522300c8335233fdcc36))
|
9
|
+
|
3
10
|
## [1.5.3](https://github.com/graphiti-api/graphiti/compare/v1.5.2...v1.5.3) (2024-03-18)
|
4
11
|
|
5
12
|
|
@@ -8,6 +8,20 @@ module Graphiti
|
|
8
8
|
# Defaults to false OR if classes are cached (Rails-only)
|
9
9
|
attr_accessor :concurrency
|
10
10
|
|
11
|
+
# This number must be considered in accordance with the database
|
12
|
+
# connection pool size configured in `database.yml`. The connection
|
13
|
+
# pool should be large enough to accommodate both the foreground
|
14
|
+
# threads (ie. web server or job worker threads) and background
|
15
|
+
# threads. For each process, Graphiti will create one global
|
16
|
+
# executor that uses this many threads to sideload resources
|
17
|
+
# asynchronously. Thus, the pool size should be at least
|
18
|
+
# `thread_count + concurrency_max_threads + 1`. For example, if your
|
19
|
+
# web server has a maximum of 3 threads, and
|
20
|
+
# `concurrency_max_threads` is set to 4, then your pool size should
|
21
|
+
# be at least 8.
|
22
|
+
# @return [Integer] Maximum number of threads to use when fetching sideloads concurrently
|
23
|
+
attr_accessor :concurrency_max_threads
|
24
|
+
|
11
25
|
attr_accessor :respond_to
|
12
26
|
attr_accessor :context_for_endpoint
|
13
27
|
attr_accessor :links_on_demand
|
@@ -26,6 +40,7 @@ module Graphiti
|
|
26
40
|
def initialize
|
27
41
|
@raise_on_missing_sideload = true
|
28
42
|
@concurrency = false
|
43
|
+
@concurrency_max_threads = 4
|
29
44
|
@respond_to = [:json, :jsonapi, :xml]
|
30
45
|
@links_on_demand = false
|
31
46
|
@pagination_links_on_demand = false
|
data/lib/graphiti/scope.rb
CHANGED
@@ -2,6 +2,23 @@ module Graphiti
|
|
2
2
|
class Scope
|
3
3
|
attr_accessor :object, :unpaginated_object
|
4
4
|
attr_reader :pagination
|
5
|
+
|
6
|
+
@thread_pool_executor_mutex = Mutex.new
|
7
|
+
|
8
|
+
def self.thread_pool_executor
|
9
|
+
return @thread_pool_executor if @thread_pool_executor
|
10
|
+
|
11
|
+
concurrency = Graphiti.config.concurrency_max_threads || 4
|
12
|
+
@thread_pool_executor_mutex.synchronize do
|
13
|
+
@thread_pool_executor ||= Concurrent::ThreadPoolExecutor.new(
|
14
|
+
min_threads: 0,
|
15
|
+
max_threads: concurrency,
|
16
|
+
max_queue: concurrency * 4,
|
17
|
+
fallback_policy: :caller_runs
|
18
|
+
)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
5
22
|
def initialize(object, resource, query, opts = {})
|
6
23
|
@object = object
|
7
24
|
@resource = resource
|
@@ -49,7 +66,7 @@ module Graphiti
|
|
49
66
|
@resource.adapter.close if concurrent
|
50
67
|
}
|
51
68
|
if concurrent
|
52
|
-
promises << Concurrent::Promise.execute(&resolve_sideload)
|
69
|
+
promises << Concurrent::Promise.execute(executor: self.class.thread_pool_executor, &resolve_sideload)
|
53
70
|
else
|
54
71
|
resolve_sideload.call
|
55
72
|
end
|
data/lib/graphiti/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphiti
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lee Richmond
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-03-
|
11
|
+
date: 2024-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jsonapi-serializable
|