Skip to content

Commit d99db44

Browse files
committed
fix: from coredabbit
1 parent 3409f47 commit d99db44

File tree

6 files changed

+291
-5
lines changed

6 files changed

+291
-5
lines changed

.coderabbit.yaml

+247
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,247 @@
1+
language: en-US
2+
tone_instructions: ''
3+
early_access: true
4+
enable_free_tier: true
5+
reviews:
6+
profile: chill
7+
request_changes_workflow: false
8+
high_level_summary: false
9+
high_level_summary_placeholder: '@coderabbitai summary'
10+
high_level_summary_in_walkthrough: false
11+
auto_title_placeholder: '@coderabbitai'
12+
auto_title_instructions: ''
13+
review_status: true
14+
commit_status: true
15+
fail_commit_status: false
16+
collapse_walkthrough: false
17+
changed_files_summary: true
18+
sequence_diagrams: true
19+
assess_linked_issues: true
20+
related_issues: true
21+
related_prs: true
22+
suggested_labels: true
23+
auto_apply_labels: false
24+
suggested_reviewers: true
25+
auto_assign_reviewers: false
26+
poem: true
27+
labeling_instructions: []
28+
path_filters:
29+
- '!dist/**'
30+
- '!**/*.app'
31+
- '!**/*.bin'
32+
- '!**/*.bz2'
33+
- '!**/*.class'
34+
- '!**/*.db'
35+
- '!**/*.csv'
36+
- '!**/*.tsv'
37+
- '!**/*.dat'
38+
- '!**/*.dll'
39+
- '!**/*.dylib'
40+
- '!**/*.egg'
41+
- '!**/*.glif'
42+
- '!**/*.gz'
43+
- '!**/*.xz'
44+
- '!**/*.zip'
45+
- '!**/*.7z'
46+
- '!**/*.rar'
47+
- '!**/*.zst'
48+
- '!**/*.ico'
49+
- '!**/*.jar'
50+
- '!**/*.tar'
51+
- '!**/*.war'
52+
- '!**/*.lo'
53+
- '!**/*.log'
54+
- '!**/*.mp3'
55+
- '!**/*.wav'
56+
- '!**/*.wma'
57+
- '!**/*.mp4'
58+
- '!**/*.avi'
59+
- '!**/*.mkv'
60+
- '!**/*.wmv'
61+
- '!**/*.m4a'
62+
- '!**/*.m4v'
63+
- '!**/*.3gp'
64+
- '!**/*.3g2'
65+
- '!**/*.rm'
66+
- '!**/*.mov'
67+
- '!**/*.flv'
68+
- '!**/*.iso'
69+
- '!**/*.swf'
70+
- '!**/*.flac'
71+
- '!**/*.nar'
72+
- '!**/*.o'
73+
- '!**/*.ogg'
74+
- '!**/*.otf'
75+
- '!**/*.p'
76+
- '!**/*.pdf'
77+
- '!**/*.doc'
78+
- '!**/*.docx'
79+
- '!**/*.xls'
80+
- '!**/*.xlsx'
81+
- '!**/*.map'
82+
- '!**/*.out'
83+
- '!**/*.ppt'
84+
- '!**/*.pptx'
85+
- '!**/*.pkl'
86+
- '!**/*.pickle'
87+
- '!**/*.pyc'
88+
- '!**/*.pyd'
89+
- '!**/*.pyo'
90+
- '!**/*.pub'
91+
- '!**/*.pem'
92+
- '!**/*.rkt'
93+
- '!**/*.so'
94+
- '!**/*.ss'
95+
- '!**/*.eot'
96+
- '!**/*.exe'
97+
- '!**/*.pb.go'
98+
- '!**/*.pb.gw.go'
99+
- '!**/*.lock'
100+
- '!**/*.ttf'
101+
- '!**/*.yaml'
102+
- '!**/*.yml'
103+
- '!**/*.xml'
104+
- '!**/*.cfg'
105+
- '!**/*.toml'
106+
- '!**/*.ini'
107+
- '!**/*.mod'
108+
- '!**/*.sum'
109+
- '!**/*.work'
110+
- '!**/*.json'
111+
- '!**/*.mmd'
112+
- '!**/*.svg'
113+
- '!**/*.jpeg'
114+
- '!**/*.jpg'
115+
- '!**/*.png'
116+
- '!**/*.gif'
117+
- '!**/*.bmp'
118+
- '!**/*.tiff'
119+
- '!**/*.webm'
120+
- '!**/*.woff'
121+
- '!**/*.woff2'
122+
- '!**/*.dot'
123+
- '!**/*.md5sum'
124+
- '!**/*.wasm'
125+
- '!**/*.snap'
126+
- '!**/*.parquet'
127+
- '!**/gen/**'
128+
- '!**/_gen/**'
129+
- '!**/generated/**'
130+
- '!**/@generated/**'
131+
- '!**/vendor/**'
132+
- '!**/*.min.js'
133+
- '!**/*.min.js.map'
134+
- '!**/*.min.js.css'
135+
- '!**/*.tfstate'
136+
- '!**/*.tfstate.backup'
137+
path_instructions: []
138+
abort_on_close: true
139+
disable_cache: false
140+
auto_review:
141+
enabled: true
142+
auto_incremental_review: true
143+
ignore_title_keywords: []
144+
labels: []
145+
drafts: false
146+
base_branches:
147+
- main
148+
- release/.*
149+
finishing_touches:
150+
docstrings:
151+
enabled: true
152+
tools:
153+
ast-grep:
154+
rule_dirs: []
155+
util_dirs: []
156+
essential_rules: true
157+
packages: []
158+
shellcheck:
159+
enabled: true
160+
ruff:
161+
enabled: true
162+
markdownlint:
163+
enabled: true
164+
github-checks:
165+
enabled: true
166+
timeout_ms: 90000
167+
languagetool:
168+
enabled: true
169+
enabled_rules: []
170+
disabled_rules: []
171+
enabled_categories: []
172+
disabled_categories: []
173+
enabled_only: false
174+
level: default
175+
biome:
176+
enabled: true
177+
hadolint:
178+
enabled: true
179+
swiftlint:
180+
enabled: true
181+
phpstan:
182+
enabled: true
183+
level: default
184+
golangci-lint:
185+
enabled: true
186+
yamllint:
187+
enabled: true
188+
gitleaks:
189+
enabled: true
190+
checkov:
191+
enabled: true
192+
detekt:
193+
enabled: true
194+
eslint:
195+
enabled: true
196+
rubocop:
197+
enabled: true
198+
buf:
199+
enabled: true
200+
regal:
201+
enabled: true
202+
actionlint:
203+
enabled: true
204+
pmd:
205+
enabled: true
206+
cppcheck:
207+
enabled: true
208+
semgrep:
209+
enabled: true
210+
circleci:
211+
enabled: true
212+
sqlfluff:
213+
enabled: true
214+
prismaLint:
215+
enabled: true
216+
oxc:
217+
enabled: true
218+
shopifyThemeCheck:
219+
enabled: true
220+
chat:
221+
auto_reply: true
222+
create_issues: true
223+
integrations:
224+
jira:
225+
usage: auto
226+
linear:
227+
usage: auto
228+
knowledge_base:
229+
opt_out: false
230+
web_search:
231+
enabled: true
232+
learnings:
233+
scope: auto
234+
issues:
235+
scope: auto
236+
jira:
237+
usage: auto
238+
project_keys: []
239+
linear:
240+
usage: auto
241+
team_keys: []
242+
pull_requests:
243+
scope: auto
244+
code_generation:
245+
docstrings:
246+
language: en-US
247+
path_instructions: []

internal/controller/ledger/controller_with_cache.go

+12
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,18 @@ func (c *ControllerWithCache) BeginTX(ctx context.Context, options *sql.TxOption
4949
}, tx, nil
5050
}
5151

52+
func (c *ControllerWithCache) LockLedger(ctx context.Context) (Controller, bun.IDB, func() error, error) {
53+
ctrl, db, release, err := c.Controller.LockLedger(ctx)
54+
if err != nil {
55+
return nil, nil, nil, err
56+
}
57+
return &ControllerWithCache{
58+
registry: c.registry,
59+
ledger: c.ledger,
60+
Controller: ctrl,
61+
}, db, release, nil
62+
}
63+
5264
func NewControllerWithCache(ledger ledger.Ledger, underlying Controller, registry *StateRegistry) *ControllerWithCache {
5365
return &ControllerWithCache{
5466
ledger: ledger,

internal/controller/ledger/controller_with_events.go

+13
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,19 @@ func (c *ControllerWithEvents) BeginTX(ctx context.Context, options *sql.TxOptio
166166
}, tx, nil
167167
}
168168

169+
func (c *ControllerWithEvents) LockLedger(ctx context.Context) (Controller, bun.IDB, func() error, error) {
170+
ctrl, db, release, err := c.Controller.LockLedger(ctx)
171+
if err != nil {
172+
return nil, nil, nil, err
173+
}
174+
return &ControllerWithEvents{
175+
ledger: c.ledger,
176+
Controller: ctrl,
177+
listener: c.listener,
178+
parent: c,
179+
}, db, release, nil
180+
}
181+
169182
func (c *ControllerWithEvents) Commit(ctx context.Context) error {
170183
err := c.Controller.Commit(ctx)
171184
if err != nil {

internal/controller/ledger/controller_with_too_many_client_handling.go

+12
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,18 @@ func (c *ControllerWithTooManyClientHandling) BeginTX(ctx context.Context, optio
132132
}, tx, nil
133133
}
134134

135+
func (c *ControllerWithTooManyClientHandling) LockLedger(ctx context.Context) (Controller, bun.IDB, func() error, error) {
136+
ctrl, db, release, err := c.Controller.LockLedger(ctx)
137+
if err != nil {
138+
return nil, nil, nil, err
139+
}
140+
return &ControllerWithTooManyClientHandling{
141+
Controller: ctrl,
142+
delayCalculator: c.delayCalculator,
143+
tracer: c.tracer,
144+
}, db, release, nil
145+
}
146+
135147
var _ Controller = (*ControllerWithTooManyClientHandling)(nil)
136148

137149
func handleRetry(

internal/controller/system/state_tracker.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ func newLedgerStateTracker(ctrl ledgercontroller.Controller, ledger ledger.Ledge
157157
}
158158

159159
func withLock(ctx context.Context, ctrl ledgercontroller.Controller, fn func(ctrl ledgercontroller.Controller, conn bun.IDB) error) error {
160-
_, conn, release, err := ctrl.LockLedger(ctx)
160+
lockedCtrl, conn, release, err := ctrl.LockLedger(ctx)
161161
if err != nil {
162162
return fmt.Errorf("failed to lock ledger: %w", err)
163163
}
@@ -171,5 +171,5 @@ func withLock(ctx context.Context, ctrl ledgercontroller.Controller, fn func(ctr
171171
}
172172
}()
173173

174-
return fn(ctrl, conn)
174+
return fn(lockedCtrl, conn)
175175
}

internal/storage/ledger/store.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,14 @@ func (store *Store) LockLedger(ctx context.Context) (*Store, bun.IDB, func() err
154154
if err != nil {
155155
return nil, nil, nil, err
156156
}
157-
storeCp.db = conn
158157

159158
_, err = conn.ExecContext(ctx, `SELECT pg_advisory_lock(hashtext(?))`, fmt.Sprintf("ledger:%d", store.ledger.ID))
160159
if err != nil {
160+
_ = conn.Close()
161161
return nil, nil, nil, err
162162
}
163+
storeCp.db = conn
164+
163165
return &storeCp, storeCp.db, func() error {
164166
_, err := conn.ExecContext(ctx, `SELECT pg_advisory_unlock(hashtext(?))`, fmt.Sprintf("ledger:%d", store.ledger.ID))
165167
if err != nil {
@@ -174,8 +176,8 @@ func (store *Store) LockLedger(ctx context.Context) (*Store, bun.IDB, func() err
174176
}
175177

176178
return store, db, func() error {
177-
// nothing to do, the lock will be released when the transaction is closed
178-
return err
179+
// xact-scoped advisory locks are released automatically – nothing to do
180+
return nil
179181
}, nil
180182
default:
181183
panic(fmt.Errorf("invalid db type: %T", store.db))

0 commit comments

Comments
 (0)