Skip to content

Commit 4170b6e

Browse files
authored
Merge branch 'staging' into feat/parquet-2pc
2 parents 27bd550 + 07f190f commit 4170b6e

11 files changed

Lines changed: 221 additions & 64 deletions

File tree

drivers/db2/go.mod

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/ibmdb/go_ibm_db v0.4.5
99
github.com/jmoiron/sqlx v1.4.0
1010
github.com/stretchr/testify v1.11.1
11-
golang.org/x/crypto v0.50.0
11+
golang.org/x/crypto v0.52.0
1212
)
1313

1414
require (
@@ -135,14 +135,14 @@ require (
135135
go.opentelemetry.io/otel/trace v1.43.0 // indirect
136136
go.uber.org/multierr v1.11.0 // indirect
137137
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect
138-
golang.org/x/mod v0.34.0 // indirect
139-
golang.org/x/net v0.53.0 // indirect
138+
golang.org/x/mod v0.35.0 // indirect
139+
golang.org/x/net v0.54.0 // indirect
140140
golang.org/x/oauth2 v0.34.0 // indirect
141141
golang.org/x/sync v0.20.0 // indirect
142-
golang.org/x/sys v0.43.0 // indirect
143-
golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c // indirect
144-
golang.org/x/text v0.36.0 // indirect
145-
golang.org/x/tools v0.43.0 // indirect
142+
golang.org/x/sys v0.45.0 // indirect
143+
golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect
144+
golang.org/x/text v0.37.0 // indirect
145+
golang.org/x/tools v0.44.0 // indirect
146146
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
147147
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
148148
google.golang.org/grpc v1.79.3 // indirect

drivers/kafka/go.mod

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -138,16 +138,16 @@ require (
138138
go.opentelemetry.io/otel/metric v1.43.0 // indirect
139139
go.opentelemetry.io/otel/trace v1.43.0 // indirect
140140
go.uber.org/multierr v1.11.0 // indirect
141-
golang.org/x/crypto v0.50.0 // indirect
141+
golang.org/x/crypto v0.52.0 // indirect
142142
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect
143-
golang.org/x/mod v0.34.0 // indirect
144-
golang.org/x/net v0.53.0 // indirect
143+
golang.org/x/mod v0.35.0 // indirect
144+
golang.org/x/net v0.54.0 // indirect
145145
golang.org/x/oauth2 v0.34.0 // indirect
146146
golang.org/x/sync v0.20.0 // indirect
147-
golang.org/x/sys v0.43.0 // indirect
148-
golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c // indirect
149-
golang.org/x/text v0.36.0 // indirect
150-
golang.org/x/tools v0.43.0 // indirect
147+
golang.org/x/sys v0.45.0 // indirect
148+
golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect
149+
golang.org/x/text v0.37.0 // indirect
150+
golang.org/x/tools v0.44.0 // indirect
151151
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
152152
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
153153
google.golang.org/grpc v1.79.3 // indirect

drivers/mongodb/go.mod

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,10 @@ require (
132132
go.opentelemetry.io/otel/trace v1.43.0 // indirect
133133
go.uber.org/multierr v1.11.0 // indirect
134134
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect
135-
golang.org/x/mod v0.34.0 // indirect
135+
golang.org/x/mod v0.35.0 // indirect
136136
golang.org/x/oauth2 v0.34.0 // indirect
137137
golang.org/x/sync v0.20.0 // indirect
138-
golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c // indirect
138+
golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect
139139
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
140140
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
141141
google.golang.org/grpc v1.79.3 // indirect
@@ -159,11 +159,11 @@ require (
159159
github.com/spf13/cobra v1.9.1 // indirect
160160
github.com/spf13/pflag v1.0.6 // indirect
161161
go.mongodb.org/mongo-driver v1.17.3
162-
golang.org/x/crypto v0.50.0
163-
golang.org/x/net v0.53.0 // indirect
164-
golang.org/x/sys v0.43.0 // indirect
165-
golang.org/x/text v0.36.0 // indirect
166-
golang.org/x/tools v0.43.0 // indirect
162+
golang.org/x/crypto v0.52.0
163+
golang.org/x/net v0.54.0 // indirect
164+
golang.org/x/sys v0.45.0 // indirect
165+
golang.org/x/text v0.37.0 // indirect
166+
golang.org/x/tools v0.44.0 // indirect
167167
)
168168

169169
replace (

drivers/mssql/go.mod

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ require (
1313
github.com/jmoiron/sqlx v1.4.0
1414
github.com/microsoft/go-mssqldb v1.9.5
1515
github.com/stretchr/testify v1.11.1
16-
golang.org/x/crypto v0.50.0
16+
golang.org/x/crypto v0.52.0
1717
)
1818

1919
require (
@@ -143,14 +143,14 @@ require (
143143
go.opentelemetry.io/otel/trace v1.43.0 // indirect
144144
go.uber.org/multierr v1.11.0 // indirect
145145
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect
146-
golang.org/x/mod v0.34.0 // indirect
147-
golang.org/x/net v0.53.0 // indirect
146+
golang.org/x/mod v0.35.0 // indirect
147+
golang.org/x/net v0.54.0 // indirect
148148
golang.org/x/oauth2 v0.34.0 // indirect
149149
golang.org/x/sync v0.20.0 // indirect
150-
golang.org/x/sys v0.43.0 // indirect
151-
golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c // indirect
152-
golang.org/x/text v0.36.0 // indirect
153-
golang.org/x/tools v0.43.0 // indirect
150+
golang.org/x/sys v0.45.0 // indirect
151+
golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect
152+
golang.org/x/text v0.37.0 // indirect
153+
golang.org/x/tools v0.44.0 // indirect
154154
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
155155
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
156156
google.golang.org/grpc v1.79.3 // indirect

drivers/mysql/go.mod

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,10 @@ require (
111111
go.opentelemetry.io/otel/metric v1.43.0 // indirect
112112
go.opentelemetry.io/otel/trace v1.43.0 // indirect
113113
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect
114-
golang.org/x/mod v0.34.0 // indirect
114+
golang.org/x/mod v0.35.0 // indirect
115115
golang.org/x/oauth2 v0.34.0 // indirect
116-
golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c // indirect
117-
golang.org/x/tools v0.43.0 // indirect
116+
golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect
117+
golang.org/x/tools v0.44.0 // indirect
118118
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
119119
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
120120
google.golang.org/grpc v1.79.3 // indirect
@@ -174,11 +174,11 @@ require (
174174
github.com/spf13/viper v1.20.1 // indirect
175175
github.com/xitongsys/parquet-go v1.6.2 // indirect
176176
github.com/xitongsys/parquet-go-source v0.0.0-20241021075129-b732d2ac9c9b // indirect
177-
golang.org/x/crypto v0.50.0
178-
golang.org/x/net v0.53.0 // indirect
177+
golang.org/x/crypto v0.52.0
178+
golang.org/x/net v0.54.0 // indirect
179179
golang.org/x/sync v0.20.0 // indirect
180-
golang.org/x/sys v0.43.0 // indirect
181-
golang.org/x/text v0.36.0 // indirect
180+
golang.org/x/sys v0.45.0 // indirect
181+
golang.org/x/text v0.37.0 // indirect
182182
)
183183

184184
replace (

drivers/oracle/go.mod

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ require (
1414
github.com/jmoiron/sqlx v1.4.0
1515
github.com/sijms/go-ora/v2 v2.8.24
1616
github.com/stretchr/testify v1.11.1
17-
golang.org/x/crypto v0.50.0
17+
golang.org/x/crypto v0.52.0
1818
)
1919

2020
require (
@@ -148,14 +148,14 @@ require (
148148
go.opentelemetry.io/otel/trace v1.43.0 // indirect
149149
go.uber.org/multierr v1.11.0 // indirect
150150
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect
151-
golang.org/x/mod v0.34.0 // indirect
152-
golang.org/x/net v0.53.0 // indirect
151+
golang.org/x/mod v0.35.0 // indirect
152+
golang.org/x/net v0.54.0 // indirect
153153
golang.org/x/oauth2 v0.34.0 // indirect
154154
golang.org/x/sync v0.20.0 // indirect
155-
golang.org/x/sys v0.43.0 // indirect
156-
golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c // indirect
157-
golang.org/x/text v0.36.0 // indirect
158-
golang.org/x/tools v0.43.0 // indirect
155+
golang.org/x/sys v0.45.0 // indirect
156+
golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect
157+
golang.org/x/text v0.37.0 // indirect
158+
golang.org/x/tools v0.44.0 // indirect
159159
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
160160
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
161161
google.golang.org/grpc v1.79.3 // indirect

drivers/postgres/go.mod

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ require (
99
github.com/jackc/pgx/v5 v5.9.2
1010
github.com/lib/pq v1.10.9
1111
github.com/stretchr/testify v1.11.1
12-
golang.org/x/crypto v0.50.0
12+
golang.org/x/crypto v0.52.0
1313
)
1414

1515
require (
@@ -140,12 +140,12 @@ require (
140140
go.opentelemetry.io/otel/trace v1.43.0 // indirect
141141
go.uber.org/multierr v1.11.0 // indirect
142142
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect
143-
golang.org/x/mod v0.34.0 // indirect
144-
golang.org/x/net v0.53.0 // indirect
143+
golang.org/x/mod v0.35.0 // indirect
144+
golang.org/x/net v0.54.0 // indirect
145145
golang.org/x/oauth2 v0.34.0 // indirect
146146
golang.org/x/sync v0.20.0 // indirect
147-
golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c // indirect
148-
golang.org/x/text v0.36.0 // indirect
147+
golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect
148+
golang.org/x/text v0.37.0 // indirect
149149
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
150150
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
151151
google.golang.org/grpc v1.79.3 // indirect
@@ -161,8 +161,8 @@ require (
161161
github.com/jmoiron/sqlx v1.4.0
162162
github.com/spf13/cobra v1.9.1 // indirect
163163
github.com/spf13/pflag v1.0.6 // indirect
164-
golang.org/x/sys v0.43.0 // indirect
165-
golang.org/x/tools v0.43.0 // indirect
164+
golang.org/x/sys v0.45.0 // indirect
165+
golang.org/x/tools v0.44.0 // indirect
166166
)
167167

168168
replace (

drivers/s3/go.mod

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -125,15 +125,15 @@ require (
125125
go.opentelemetry.io/otel/metric v1.43.0 // indirect
126126
go.opentelemetry.io/otel/trace v1.43.0 // indirect
127127
go.uber.org/multierr v1.11.0 // indirect
128-
golang.org/x/crypto v0.50.0 // indirect
128+
golang.org/x/crypto v0.52.0 // indirect
129129
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect
130-
golang.org/x/mod v0.34.0 // indirect
131-
golang.org/x/net v0.53.0 // indirect
130+
golang.org/x/mod v0.35.0 // indirect
131+
golang.org/x/net v0.54.0 // indirect
132132
golang.org/x/sync v0.20.0 // indirect
133-
golang.org/x/sys v0.43.0 // indirect
134-
golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c // indirect
135-
golang.org/x/text v0.36.0 // indirect
136-
golang.org/x/tools v0.43.0 // indirect
133+
golang.org/x/sys v0.45.0 // indirect
134+
golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect
135+
golang.org/x/text v0.37.0 // indirect
136+
golang.org/x/tools v0.44.0 // indirect
137137
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
138138
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
139139
google.golang.org/grpc v1.79.3 // indirect

go.mod

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,14 @@ require (
5151
github.com/rs/xid v1.6.0 // indirect
5252
go.opentelemetry.io/otel/sdk v1.43.0 // indirect
5353
go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect
54-
golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c // indirect
54+
golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect
5555
gopkg.in/ini.v1 v1.66.6 // indirect
5656
)
5757

5858
require (
5959
dario.cat/mergo v1.0.2 // indirect
6060
github.com/paulmach/orb v0.12.0
61-
golang.org/x/tools v0.43.0 // indirect
61+
golang.org/x/tools v0.44.0 // indirect
6262
)
6363

6464
require (
@@ -155,13 +155,13 @@ require (
155155
go.uber.org/atomic v1.11.0 // indirect
156156
go.uber.org/multierr v1.11.0 // indirect
157157
go.uber.org/zap v1.27.0 // indirect
158-
golang.org/x/crypto v0.50.0
158+
golang.org/x/crypto v0.52.0
159159
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect
160-
golang.org/x/mod v0.34.0 // indirect
161-
golang.org/x/net v0.53.0 // indirect
160+
golang.org/x/mod v0.35.0 // indirect
161+
golang.org/x/net v0.54.0 // indirect
162162
golang.org/x/oauth2 v0.34.0 // indirect
163-
golang.org/x/sys v0.43.0 // indirect
164-
golang.org/x/text v0.36.0
163+
golang.org/x/sys v0.45.0 // indirect
164+
golang.org/x/text v0.37.0
165165
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
166166
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect; from staging
167167
gopkg.in/yaml.v3 v3.0.1 // indirect

protocol/root.go

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package protocol
22

33
import (
4+
"context"
45
"fmt"
56
"os"
7+
"os/signal"
68
"path/filepath"
9+
"syscall"
710

811
"github.com/datazip-inc/olake/constants"
912
"github.com/datazip-inc/olake/drivers/abstract"
@@ -80,13 +83,55 @@ var RootCmd = &cobra.Command{
8083
},
8184
}
8285

86+
// CreateRootCommand wires the cobra root for the given driver. It mutates
87+
// package-level state (RootCmd, connector) and installs a process-wide signal
88+
// handler, so it must be called at most once per process — the existing
89+
// connector.RegisterDriver entry point already enforces this.
8390
func CreateRootCommand(_ bool, driver any) *cobra.Command {
8491
RootCmd.AddCommand(commands...)
85-
connector = abstract.NewAbstractDriver(RootCmd.Context(), driver.(abstract.DriverInterface))
92+
93+
// Wire SIGINT/SIGTERM into the root context so CDC, backfill and
94+
// destination-writer paths reach their existing ctx.Done() branches on
95+
// pod eviction, docker stop, or Ctrl-C, instead of being killed mid-read.
96+
ctx := signalAwareRootContext(RootCmd.Context())
97+
RootCmd.SetContext(ctx)
98+
99+
connector = abstract.NewAbstractDriver(ctx, driver.(abstract.DriverInterface))
86100

87101
return RootCmd
88102
}
89103

104+
// signalAwareRootContext wraps parent so that the returned context cancels on
105+
// SIGINT / SIGTERM as well as on any parent cancellation. Used to wire pod
106+
// eviction, docker stop, and Ctrl-C through to the existing ctx.Done()
107+
// branches in CDC, backfill, and destination-writer paths.
108+
//
109+
// Source / destination consistency on cancel is still owned by each
110+
// driver.PostCDC and destination writer.Close implementation. This wrapper only
111+
// makes process signals visible through ctx.Done(); it does not make source
112+
// checkpoints and destination commits atomic. Any implementation that performs
113+
// a final commit after work has been written must continue to check ctx.Done()
114+
// before that commit and must treat a canceled context as a reason to avoid
115+
// advancing only one side of the source/destination boundary.
116+
//
117+
// The Kafka driver has a separate `TODO: Add 2PC support for Kafka` for a
118+
// future stricter contract. Other drivers may have similar source-specific
119+
// checkpointing constraints, so this helper should not be used as a substitute
120+
// for driver-level cancellation safety.
121+
func signalAwareRootContext(parent context.Context) context.Context {
122+
ctx, stop := signal.NotifyContext(parent, syscall.SIGINT, syscall.SIGTERM)
123+
// signal.NotifyContext keeps the signal handler installed until stop() is
124+
// called. Releasing it after the first cancellation lets a subsequent
125+
// SIGINT/SIGTERM fall through to the Go runtime default (terminate), which
126+
// is the behavior an operator hitting Ctrl-C twice expects.
127+
go func() {
128+
<-ctx.Done()
129+
stop()
130+
}()
131+
132+
return ctx
133+
}
134+
90135
func init() {
91136
// TODO: replace --catalog flag with --streams
92137
commands = append(commands, specCmd, checkCmd, discoverCmd, syncCmd, clearCmd)

0 commit comments

Comments
 (0)