Skip to content

Commit 08d2360

Browse files
committed
feat: Rename DataTimeout to InsertTimeout and update related documentation
1 parent 52d527a commit 08d2360

File tree

7 files changed

+35
-84
lines changed

7 files changed

+35
-84
lines changed

docs/DEPENDENCY_INJECTION.md

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ var app = builder.Build();
5252
"UseSsl": false,
5353
"DefaultTimeout": "00:00:30",
5454
"InitTimeout": "00:00:02",
55-
"DataTimeout": "00:02:00",
55+
"InsertTimeout": "00:02:00",
5656
"QueryTimeout": "00:01:00"
5757
}
5858
}
@@ -108,7 +108,7 @@ public class CatService
108108
| `Credentials` | `ICredentials?` | `null` | Authentication credentials |
109109
| `DefaultTimeout` | `TimeSpan?` | `30s` | Default timeout for all operations |
110110
| `InitTimeout` | `TimeSpan?` | `2s` | Timeout for initialization |
111-
| `DataTimeout` | `TimeSpan?` | `120s` | Timeout for data operations |
111+
| `InsertTimeout` | `TimeSpan?` | `120s` | Timeout for data operations |
112112
| `QueryTimeout` | `TimeSpan?` | `60s` | Timeout for query operations |
113113
| `Headers` | `Dictionary<string, string>?` | `null` | Additional HTTP headers |
114114
| `RetryPolicy` | `RetryPolicy?` | Default | Retry policy for failed requests |
@@ -150,11 +150,13 @@ builder.Services.AddWeaviate(options => { ... }, eagerInitialization: true);
150150
```
151151

152152
**Benefits:**
153+
153154
- ✅ Client is ready when first request arrives
154155
- ✅ Fails fast if connection issues exist
155156
- ✅ Simpler usage - no need to await initialization
156157

157158
**How it works:**
159+
158160
1. `WeaviateClient` is constructed with DI
159161
2. `IHostedService` runs on app startup
160162
3. Calls `client.InitializeAsync()` which:
@@ -172,11 +174,13 @@ builder.Services.AddWeaviate(options => { ... }, eagerInitialization: false);
172174
```
173175

174176
**When to use:**
177+
175178
- Application startup time is critical
176179
- Weaviate connection isn't needed immediately
177180
- You want to handle connection failures gracefully
178181

179182
**Usage with lazy initialization:**
183+
180184
```csharp
181185
public class MyService
182186
{
@@ -222,6 +226,7 @@ var client = await Connect.Local(
222226
```
223227

224228
These methods:
229+
225230
- ✅ Return a fully initialized client
226231
- ✅ Use async initialization (no blocking)
227232
- ✅ Follow the same REST → Meta → gRPC initialization flow
@@ -345,6 +350,7 @@ public class MyIntegrationTests : IAsyncLifetime
345350
- Runs initialization task (only once, thread-safe)
346351

347352
3. **Initialization Task**
353+
348354
```
349355
┌─────────────────────────────────────────┐
350356
│ 1. Initialize Token Service (OAuth, etc)│
@@ -366,16 +372,18 @@ public class MyIntegrationTests : IAsyncLifetime
366372
- `EnsureInitializedAsync()` returns immediately (already initialized)
367373
- No performance penalty
368374

369-
### No More `GetAwaiter().GetResult()`!
375+
### No More `GetAwaiter().GetResult()`
370376

371377
The old pattern had to block:
378+
372379
```csharp
373380
// ❌ Old: Blocking async call in constructor
374381
var client = new WeaviateClient(config);
375382
var meta = GetMetaAsync().GetAwaiter().GetResult(); // Deadlock risk!
376383
```
377384

378385
The new pattern is fully async:
386+
379387
```csharp
380388
// ✅ New: Lazy async initialization
381389
var client = new WeaviateClient(options);
@@ -390,6 +398,7 @@ await client.InitializeAsync(); // Or called automatically
390398
### From Old Constructor Pattern
391399

392400
**Before:**
401+
393402
```csharp
394403
var config = new ClientConfiguration
395404
{
@@ -401,6 +410,7 @@ var client = new WeaviateClient(config);
401410
```
402411

403412
**After (DI):**
413+
404414
```csharp
405415
builder.Services.AddWeaviate(options =>
406416
{
@@ -413,6 +423,7 @@ public MyService(WeaviateClient client) { ... }
413423
```
414424

415425
**After (Non-DI):**
426+
416427
```csharp
417428
var client = await Connect.Local();
418429
// Or
@@ -424,6 +435,7 @@ await client.InitializeAsync();
424435
### From `WeaviateClientBuilder`
425436

426437
**Before:**
438+
427439
```csharp
428440
var client = await WeaviateClientBuilder
429441
.Local()
@@ -432,6 +444,7 @@ var client = await WeaviateClientBuilder
432444
```
433445

434446
**After (still works!):**
447+
435448
```csharp
436449
// This pattern still works exactly as before
437450
var client = await WeaviateClientBuilder
@@ -441,6 +454,7 @@ var client = await WeaviateClientBuilder
441454
```
442455

443456
**Or with DI:**
457+
444458
```csharp
445459
builder.Services.AddWeaviate(options =>
446460
{

src/Weaviate.Client/ClientConfiguration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public sealed record ClientConfiguration(
1414
ICredentials? Credentials = null,
1515
TimeSpan? DefaultTimeout = null,
1616
TimeSpan? InitTimeout = null,
17-
TimeSpan? DataTimeout = null,
17+
TimeSpan? InsertTimeout = null,
1818
TimeSpan? QueryTimeout = null,
1919
RetryPolicy? RetryPolicy = null,
2020
DelegatingHandler[]? CustomHandlers = null,

src/Weaviate.Client/DependencyInjection/WeaviateOptions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public class WeaviateOptions
6363
/// <summary>
6464
/// Timeout for data operations (Insert, Delete, Update, Reference management).
6565
/// </summary>
66-
public TimeSpan? DataTimeout { get; set; }
66+
public TimeSpan? InsertTimeout { get; set; }
6767

6868
/// <summary>
6969
/// Timeout for query/search operations (FetchObjects, NearText, BM25, Hybrid, etc.).
@@ -92,7 +92,7 @@ internal ClientConfiguration ToClientConfiguration()
9292
Credentials: Credentials,
9393
DefaultTimeout: DefaultTimeout,
9494
InitTimeout: InitTimeout,
95-
DataTimeout: DataTimeout,
95+
InsertTimeout: InsertTimeout,
9696
QueryTimeout: QueryTimeout,
9797
RetryPolicy: RetryPolicy
9898
);

src/Weaviate.Client/DependencyInjection/WeaviateServiceCollectionExtensions.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public static IServiceCollection AddWeaviate(
108108
/// <param name="headers">Additional HTTP headers to include in requests.</param>
109109
/// <param name="defaultTimeout">Default timeout for all operations.</param>
110110
/// <param name="initTimeout">Timeout for initialization operations.</param>
111-
/// <param name="dataTimeout">Timeout for data operations.</param>
111+
/// <param name="insertTimeout">Timeout for data operations.</param>
112112
/// <param name="queryTimeout">Timeout for query operations.</param>
113113
/// <param name="eagerInitialization">Whether to initialize the client eagerly on application startup. Default is true.</param>
114114
/// <returns>The service collection for method chaining.</returns>
@@ -122,7 +122,7 @@ public static IServiceCollection AddWeaviateLocal(
122122
Dictionary<string, string>? headers = null,
123123
TimeSpan? defaultTimeout = null,
124124
TimeSpan? initTimeout = null,
125-
TimeSpan? dataTimeout = null,
125+
TimeSpan? insertTimeout = null,
126126
TimeSpan? queryTimeout = null,
127127
bool eagerInitialization = true
128128
)
@@ -139,7 +139,7 @@ public static IServiceCollection AddWeaviateLocal(
139139
options.Headers = headers;
140140
options.DefaultTimeout = defaultTimeout;
141141
options.InitTimeout = initTimeout;
142-
options.DataTimeout = dataTimeout;
142+
options.InsertTimeout = insertTimeout;
143143
options.QueryTimeout = queryTimeout;
144144
},
145145
eagerInitialization
@@ -158,7 +158,7 @@ public static IServiceCollection AddWeaviateLocal(
158158
/// <param name="headers">Additional HTTP headers to include in requests.</param>
159159
/// <param name="defaultTimeout">Default timeout for all operations.</param>
160160
/// <param name="initTimeout">Timeout for initialization operations.</param>
161-
/// <param name="dataTimeout">Timeout for data operations.</param>
161+
/// <param name="insertTimeout">Timeout for data operations.</param>
162162
/// <param name="queryTimeout">Timeout for query operations.</param>
163163
/// <param name="eagerInitialization">Whether to initialize the client eagerly on application startup. Default is true.</param>
164164
/// <returns>The service collection for method chaining.</returns>
@@ -169,7 +169,7 @@ public static IServiceCollection AddWeaviateCloud(
169169
Dictionary<string, string>? headers = null,
170170
TimeSpan? defaultTimeout = null,
171171
TimeSpan? initTimeout = null,
172-
TimeSpan? dataTimeout = null,
172+
TimeSpan? insertTimeout = null,
173173
TimeSpan? queryTimeout = null,
174174
bool eagerInitialization = true
175175
)
@@ -186,7 +186,7 @@ public static IServiceCollection AddWeaviateCloud(
186186
options.Headers = headers;
187187
options.DefaultTimeout = defaultTimeout;
188188
options.InitTimeout = initTimeout;
189-
options.DataTimeout = dataTimeout;
189+
options.InsertTimeout = insertTimeout;
190190
options.QueryTimeout = queryTimeout;
191191
},
192192
eagerInitialization
@@ -248,7 +248,7 @@ Action<WeaviateOptions> configureOptions
248248
/// <param name="headers">Additional HTTP headers to include in requests.</param>
249249
/// <param name="defaultTimeout">Default timeout for all operations.</param>
250250
/// <param name="initTimeout">Timeout for initialization operations.</param>
251-
/// <param name="dataTimeout">Timeout for data operations.</param>
251+
/// <param name="insertTimeout">Timeout for data operations.</param>
252252
/// <param name="queryTimeout">Timeout for query operations.</param>
253253
/// <returns>The service collection for method chaining.</returns>
254254
public static IServiceCollection AddWeaviateLocal(
@@ -262,7 +262,7 @@ public static IServiceCollection AddWeaviateLocal(
262262
Dictionary<string, string>? headers = null,
263263
TimeSpan? defaultTimeout = null,
264264
TimeSpan? initTimeout = null,
265-
TimeSpan? dataTimeout = null,
265+
TimeSpan? insertTimeout = null,
266266
TimeSpan? queryTimeout = null
267267
)
268268
{
@@ -279,7 +279,7 @@ public static IServiceCollection AddWeaviateLocal(
279279
options.Headers = headers;
280280
options.DefaultTimeout = defaultTimeout;
281281
options.InitTimeout = initTimeout;
282-
options.DataTimeout = dataTimeout;
282+
options.InsertTimeout = insertTimeout;
283283
options.QueryTimeout = queryTimeout;
284284
}
285285
);
@@ -311,7 +311,7 @@ Action<WeaviateOptions> configureOptions
311311
/// <param name="headers">Additional HTTP headers to include in requests.</param>
312312
/// <param name="defaultTimeout">Default timeout for all operations.</param>
313313
/// <param name="initTimeout">Timeout for initialization operations.</param>
314-
/// <param name="dataTimeout">Timeout for data operations.</param>
314+
/// <param name="insertTimeout">Timeout for data operations.</param>
315315
/// <param name="queryTimeout">Timeout for query operations.</param>
316316
/// <returns>The service collection for method chaining.</returns>
317317
public static IServiceCollection AddWeaviateCloud(
@@ -322,7 +322,7 @@ public static IServiceCollection AddWeaviateCloud(
322322
Dictionary<string, string>? headers = null,
323323
TimeSpan? defaultTimeout = null,
324324
TimeSpan? initTimeout = null,
325-
TimeSpan? dataTimeout = null,
325+
TimeSpan? insertTimeout = null,
326326
TimeSpan? queryTimeout = null
327327
)
328328
{
@@ -339,7 +339,7 @@ public static IServiceCollection AddWeaviateCloud(
339339
options.Headers = headers;
340340
options.DefaultTimeout = defaultTimeout;
341341
options.InitTimeout = initTimeout;
342-
options.DataTimeout = dataTimeout;
342+
options.InsertTimeout = insertTimeout;
343343
options.QueryTimeout = queryTimeout;
344344
}
345345
);

src/Weaviate.Client/WeaviateClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ static bool IsWeaviateDomain(string url)
141141

142142
public TimeSpan? DefaultTimeout => Configuration.DefaultTimeout;
143143
public TimeSpan? InitTimeout => Configuration.InitTimeout;
144-
public TimeSpan? DataTimeout => Configuration.DataTimeout;
144+
public TimeSpan? InsertTimeout => Configuration.InsertTimeout;
145145
public TimeSpan? QueryTimeout => Configuration.QueryTimeout;
146146

147147
/// <summary>

src/Weaviate.Client/WeaviateClientBuilder.cs

Lines changed: 0 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -288,69 +288,6 @@ public async Task<WeaviateClient> BuildAsync()
288288
return await config.BuildAsync();
289289
}
290290

291-
/// <summary>
292-
/// Synchronous build method - deprecated. Use BuildAsync() instead.
293-
/// </summary>
294-
[Obsolete(
295-
"Use BuildAsync() instead. Synchronous initialization can cause blocking issues.",
296-
false
297-
)]
298-
public WeaviateClient Build()
299-
{
300-
var loggerFactory = LoggerFactory.Create(builder => builder.AddSimpleConsole());
301-
var logger = loggerFactory.CreateLogger<WeaviateClient>();
302-
303-
var config = new ClientConfiguration(
304-
_restEndpoint,
305-
_restPath,
306-
_grpcEndpoint,
307-
_grpcPath,
308-
_restPort,
309-
_grpcPort,
310-
_useSsl,
311-
_headers.Count > 0 ? new Dictionary<string, string>(_headers) : null,
312-
_credentials,
313-
_defaultTimeout,
314-
_initTimeout,
315-
_insertTimeout,
316-
_queryTimeout,
317-
_retryPolicy,
318-
_customHandlers.Count > 0 ? _customHandlers.ToArray() : null
319-
);
320-
321-
// Initialize token service synchronously
322-
var tokenService = ClientConfiguration.InitializeTokenServiceSync(config);
323-
324-
// Create REST client
325-
var restClient = WeaviateClient.CreateRestClient(
326-
config,
327-
_httpMessageHandler,
328-
tokenService,
329-
logger
330-
);
331-
332-
// Fetch metadata synchronously (blocking)
333-
ulong? maxMessageSize = null;
334-
try
335-
{
336-
var metaDto = restClient.GetMeta(CancellationToken.None).GetAwaiter().GetResult();
337-
if (metaDto?.GrpcMaxMessageSize is not null)
338-
{
339-
maxMessageSize = Convert.ToUInt64(metaDto.GrpcMaxMessageSize);
340-
}
341-
}
342-
catch
343-
{
344-
// If metadata fetch fails, use defaults
345-
}
346-
347-
// Create gRPC client with metadata
348-
var grpcClient = WeaviateClient.CreateGrpcClient(config, tokenService, maxMessageSize);
349-
350-
// Return the client with pre-built services
351-
return new WeaviateClient(config, restClient, grpcClient, logger);
352-
}
353-
354291
public static implicit operator Task<WeaviateClient>(WeaviateClientBuilder builder) =>
355292
builder.BuildAsync();
356293
}

src/Weaviate.Client/WeaviateDefaults.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ public static class WeaviateDefaults
1919

2020
/// <summary>
2121
/// Default timeout for data operations (Insert, Delete, Update, Reference management). Default is 120 seconds.
22-
/// This can be overridden per client via ClientConfiguration.WithDataTimeout().
22+
/// This can be overridden per client via ClientConfiguration.WithInsertTimeout().
2323
/// </summary>
24-
public static TimeSpan DataTimeout { get; set; } = TimeSpan.FromSeconds(120);
24+
public static TimeSpan InsertTimeout { get; set; } = TimeSpan.FromSeconds(120);
2525

2626
/// <summary>
2727
/// Default timeout for query/search operations (FetchObjects, NearText, BM25, Hybrid, etc.). Default is 60 seconds.

0 commit comments

Comments
 (0)