Skip to content

Commit 62e3dbe

Browse files
committed
Add debug logging to @ydbjs/coordination
- Add 'coordination' category to @ydbjs/debug loggers - Log session lifecycle: start, ready, close, destroy, reconnect, expiry - Log all semaphore operations: acquire, release, create, update, delete, describe, watch - Log stream events: open, close, send/recv messages, protocol frames (ping/pong, started, stopped, failure) - Log node management: describe, create, alter, drop - Log client-level operations: createSession, openSession, withSession - Use loggers.coordination.extend('session|stream|client|node') for scoped namespaces
1 parent 7f91188 commit 62e3dbe

File tree

5 files changed

+146
-10
lines changed

5 files changed

+146
-10
lines changed

packages/coordination/src/client.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import type { Driver } from '@ydbjs/core'
2+
import { loggers } from '@ydbjs/debug'
23

34
import { CoordinationNodeRuntime } from './runtime/node-runtime.js'
45
import { getSessionRuntime } from './internal/session-runtime.js'
56
import type { CoordinationNodeConfig, CoordinationNodeDescription } from './runtime/node-runtime.js'
67
import { CoordinationSession } from './session.js'
78

9+
let dbg = loggers.coordination.extend('client')
10+
811
export interface SessionOptions {
912
description?: string
1013
recoveryWindow?: number
@@ -22,18 +25,22 @@ export class CoordinationClient {
2225
}
2326

2427
describeNode(path: string, signal?: AbortSignal): Promise<CoordinationNodeDescription> {
28+
dbg.log('describeNode path=%s', path)
2529
return this.#nodeRuntime.describe(path, signal)
2630
}
2731

2832
createNode(path: string, config: CoordinationNodeConfig, signal?: AbortSignal): Promise<void> {
33+
dbg.log('createNode path=%s', path)
2934
return this.#nodeRuntime.create(path, config, signal)
3035
}
3136

3237
alterNode(path: string, config: CoordinationNodeConfig, signal?: AbortSignal): Promise<void> {
38+
dbg.log('alterNode path=%s', path)
3339
return this.#nodeRuntime.alter(path, config, signal)
3440
}
3541

3642
dropNode(path: string, signal?: AbortSignal): Promise<void> {
43+
dbg.log('dropNode path=%s', path)
3744
return this.#nodeRuntime.drop(path, signal)
3845
}
3946

@@ -46,12 +53,15 @@ export class CoordinationClient {
4653
throw signal.reason
4754
}
4855

56+
dbg.log('createSession path=%s', path)
4957
let session = new CoordinationSession(this.#driver, { path, ...options }, signal)
5058

5159
try {
5260
await getSessionRuntime(session).waitReady(signal)
61+
dbg.log('createSession ready path=%s sessionId=%s', path, session.sessionId)
5362
return session
5463
} catch (error) {
64+
dbg.log('createSession failed path=%s %O', path, error)
5565
session.destroy(error)
5666
throw error
5767
}
@@ -62,8 +72,10 @@ export class CoordinationClient {
6272
options?: SessionOptions,
6373
signal?: AbortSignal
6474
): AsyncIterable<CoordinationSession> {
75+
dbg.log('openSession started path=%s', path)
6576
for (;;) {
6677
if (signal?.aborted) {
78+
dbg.log('openSession stopped (signal aborted) path=%s', path)
6779
return
6880
}
6981

@@ -74,8 +86,11 @@ export class CoordinationClient {
7486
// oxlint-disable-next-line no-await-in-loop
7587
let shouldOpenNext = await shouldOpenNextSession(session, signal)
7688
if (!shouldOpenNext) {
89+
dbg.log('openSession ended (no reconnect needed) path=%s', path)
7790
return
7891
}
92+
93+
dbg.log('openSession reconnecting path=%s', path)
7994
}
8095
}
8196

@@ -85,11 +100,13 @@ export class CoordinationClient {
85100
options?: SessionOptions,
86101
signal?: AbortSignal
87102
): Promise<T> {
103+
dbg.log('withSession path=%s', path)
88104
let session = await this.createSession(path, options, signal)
89105

90106
try {
91107
return await callback(session)
92108
} finally {
109+
dbg.log('withSession closing path=%s', path)
93110
await session.close(signal)
94111
}
95112
}

packages/coordination/src/runtime/node-runtime.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@ import {
1616
import { StatusIds_StatusCode } from '@ydbjs/api/operation'
1717
import type { Entry } from '@ydbjs/api/scheme'
1818
import type { Driver } from '@ydbjs/core'
19+
import { loggers } from '@ydbjs/debug'
1920
import { YDBError } from '@ydbjs/error'
2021
import type { Client } from 'nice-grpc'
2122

23+
let dbg = loggers.coordination.extend('node')
24+
2225
export interface CoordinationNodeConfig {
2326
selfCheckPeriod?: number
2427
sessionGracePeriod?: number
@@ -41,6 +44,7 @@ export class CoordinationNodeRuntime {
4144
}
4245

4346
async describe(path: string, signal?: AbortSignal): Promise<CoordinationNodeDescription> {
47+
dbg.log('describe path=%s', path)
4448
let request = create(DescribeNodeRequestSchema, { path })
4549
let response = signal
4650
? await this.#client.describeNode(request, { signal })
@@ -72,6 +76,7 @@ export class CoordinationNodeRuntime {
7276
}
7377

7478
async create(path: string, cfg: CoordinationNodeConfig, signal?: AbortSignal): Promise<void> {
79+
dbg.log('create path=%s', path)
7580
let request = create(CreateNodeRequestSchema, { path, config: toNodeConfigMessage(cfg) })
7681
let response = signal
7782
? await this.#client.createNode(request, { signal })
@@ -88,6 +93,7 @@ export class CoordinationNodeRuntime {
8893
}
8994

9095
async alter(path: string, cfg: CoordinationNodeConfig, signal?: AbortSignal): Promise<void> {
96+
dbg.log('alter path=%s', path)
9197
let request = create(AlterNodeRequestSchema, { path, config: toNodeConfigMessage(cfg) })
9298
let response = signal
9399
? await this.#client.alterNode(request, { signal })
@@ -104,6 +110,7 @@ export class CoordinationNodeRuntime {
104110
}
105111

106112
async drop(path: string, signal?: AbortSignal): Promise<void> {
113+
dbg.log('drop path=%s', path)
107114
let request = create(DropNodeRequestSchema, { path })
108115
let response = signal
109116
? await this.#client.dropNode(request, { signal })

0 commit comments

Comments
 (0)