20
20
import static org .neo4j .driver .internal .logging .DevNullLogging .DEV_NULL_LOGGING ;
21
21
import static org .neo4j .driver .internal .util .DriverInfoUtil .driverVersion ;
22
22
23
+ import io .netty .channel .EventLoop ;
23
24
import java .io .File ;
24
25
import java .io .Serial ;
25
26
import java .io .Serializable ;
28
29
import java .util .Collections ;
29
30
import java .util .List ;
30
31
import java .util .Objects ;
32
+ import java .util .Optional ;
33
+ import java .util .Set ;
31
34
import java .util .concurrent .TimeUnit ;
32
35
import java .util .logging .Level ;
36
+ import java .util .stream .Collectors ;
37
+ import org .neo4j .driver .async .AsyncSession ;
33
38
import org .neo4j .driver .exceptions .UnsupportedFeatureException ;
39
+ import org .neo4j .driver .internal .InternalNotificationConfig ;
34
40
import org .neo4j .driver .internal .SecuritySettings ;
35
41
import org .neo4j .driver .internal .async .pool .PoolSettings ;
36
42
import org .neo4j .driver .internal .cluster .RoutingSettings ;
39
45
import org .neo4j .driver .net .ServerAddressResolver ;
40
46
import org .neo4j .driver .util .Experimental ;
41
47
import org .neo4j .driver .util .Immutable ;
48
+ import org .neo4j .driver .util .Preview ;
49
+ import org .neo4j .driver .util .Resource ;
42
50
43
51
/**
44
52
* A configuration class to config driver properties.
@@ -223,6 +231,7 @@ public int connectionTimeoutMillis() {
223
231
224
232
/**
225
233
* Returns the maximum connection pool size.
234
+ *
226
235
* @return the maximum size
227
236
*/
228
237
public int maxConnectionPoolSize () {
@@ -231,6 +240,7 @@ public int maxConnectionPoolSize() {
231
240
232
241
/**
233
242
* Returns the connection acquisition timeout in milliseconds.
243
+ *
234
244
* @return the acquisition timeout
235
245
*/
236
246
public long connectionAcquisitionTimeoutMillis () {
@@ -296,6 +306,7 @@ public long maxTransactionRetryTimeMillis() {
296
306
297
307
/**
298
308
* Returns the fetch size.
309
+ *
299
310
* @return the fetch size
300
311
*/
301
312
public long fetchSize () {
@@ -304,6 +315,7 @@ public long fetchSize() {
304
315
305
316
/**
306
317
* Returns notification config.
318
+ *
307
319
* @return the notification config
308
320
* @since 5.7
309
321
*/
@@ -312,7 +324,35 @@ public NotificationConfig notificationConfig() {
312
324
}
313
325
314
326
/**
315
- * Returns the number of {@link io.netty.channel.EventLoop} threads.
327
+ * Returns a minimum notification severity.
328
+ *
329
+ * @return an {@link Optional} of minimum {@link NotificationSeverity} or an empty {@link Optional} if it is not set
330
+ * @since 5.22.0
331
+ */
332
+ @ Preview (name = "GQL-status object" )
333
+ public Optional <NotificationSeverity > minimumNotificationSeverity () {
334
+ return Optional .ofNullable (((InternalNotificationConfig ) notificationConfig ).minimumSeverity ());
335
+ }
336
+
337
+ /**
338
+ * Returns a set of disabled notification classifications.
339
+ * @return the {@link Set} of disabled {@link NotificationClassification}
340
+ * @since 5.22.0
341
+ */
342
+ @ Preview (name = "GQL-status object" )
343
+ public Set <NotificationClassification > disabledNotificationClassifications () {
344
+ var disabledCategories = ((InternalNotificationConfig ) notificationConfig ).disabledCategories ();
345
+ return disabledCategories != null
346
+ ? ((InternalNotificationConfig ) notificationConfig )
347
+ .disabledCategories ().stream ()
348
+ .map (NotificationClassification .class ::cast )
349
+ .collect (Collectors .toUnmodifiableSet ())
350
+ : Collections .emptySet ();
351
+ }
352
+
353
+ /**
354
+ * Returns the number of {@link EventLoop} threads.
355
+ *
316
356
* @return the number of threads
317
357
*/
318
358
public int eventLoopThreads () {
@@ -328,6 +368,7 @@ public boolean isMetricsEnabled() {
328
368
329
369
/**
330
370
* Returns the {@link MetricsAdapter}.
371
+ *
331
372
* @return the metrics adapter
332
373
*/
333
374
public MetricsAdapter metricsAdapter () {
@@ -373,6 +414,7 @@ public static final class ConfigBuilder {
373
414
private MetricsAdapter metricsAdapter = MetricsAdapter .DEV_NULL ;
374
415
private long fetchSize = FetchSizeUtil .DEFAULT_FETCH_SIZE ;
375
416
private int eventLoopThreads = 0 ;
417
+
376
418
private NotificationConfig notificationConfig = NotificationConfig .defaultConfig ();
377
419
378
420
private boolean telemetryDisabled = false ;
@@ -399,7 +441,7 @@ public ConfigBuilder withLogging(Logging logging) {
399
441
* Enable logging of leaked sessions.
400
442
* <p>
401
443
* Each {@link Session session} is associated with a network connection and thus is a
402
- * {@link org.neo4j.driver.util. Resource resource} that needs to be explicitly closed.
444
+ * {@link Resource resource} that needs to be explicitly closed.
403
445
* Unclosed sessions will result in socket leaks and could cause {@link OutOfMemoryError}s.
404
446
* <p>
405
447
* Session is considered to be leaked when it is finalized via {@link Object#finalize()} while not being
@@ -579,8 +621,8 @@ public ConfigBuilder withTrustStrategy(TrustStrategy trustStrategy) {
579
621
public ConfigBuilder withRoutingTablePurgeDelay (long delay , TimeUnit unit ) {
580
622
var routingTablePurgeDelayMillis = unit .toMillis (delay );
581
623
if (routingTablePurgeDelayMillis < 0 ) {
582
- throw new IllegalArgumentException (String . format (
583
- "The routing table purge delay may not be smaller than 0, but was %d %s." , delay , unit ));
624
+ throw new IllegalArgumentException (
625
+ format ( "The routing table purge delay may not be smaller than 0, but was %d %s." , delay , unit ));
584
626
}
585
627
this .routingTablePurgeDelayMillis = routingTablePurgeDelayMillis ;
586
628
return this ;
@@ -591,11 +633,11 @@ public ConfigBuilder withRoutingTablePurgeDelay(long delay, TimeUnit unit) {
591
633
* This config is only valid when the driver is used with servers that support Bolt V4 (Server version 4.0 and later).
592
634
* <p>
593
635
* Bolt V4 enables pulling records in batches to allow client to take control of data population and apply back pressure to server.
594
- * This config specifies the default fetch size for all query runs using {@link Session} and {@link org.neo4j.driver.async. AsyncSession}.
636
+ * This config specifies the default fetch size for all query runs using {@link Session} and {@link AsyncSession}.
595
637
* By default, the value is set to {@code 1000}.
596
638
* Use {@code -1} to disables back pressure and config client to pull all records at once after each run.
597
639
* <p>
598
- * This config only applies to run results obtained via {@link Session} and {@link org.neo4j.driver.async. AsyncSession}.
640
+ * This config only applies to run results obtained via {@link Session} and {@link AsyncSession}.
599
641
* As with the reactive sessions the batch size is managed by the subscription requests instead.
600
642
*
601
643
* @param size the default record fetch size when pulling records in batches using Bolt V4.
@@ -627,11 +669,11 @@ public ConfigBuilder withConnectionTimeout(long value, TimeUnit unit) {
627
669
var connectionTimeoutMillis = unit .toMillis (value );
628
670
if (connectionTimeoutMillis < 0 ) {
629
671
throw new IllegalArgumentException (
630
- String . format ("The connection timeout may not be smaller than 0, but was %d %s." , value , unit ));
672
+ format ("The connection timeout may not be smaller than 0, but was %d %s." , value , unit ));
631
673
}
632
674
var connectionTimeoutMillisInt = (int ) connectionTimeoutMillis ;
633
675
if (connectionTimeoutMillisInt != connectionTimeoutMillis ) {
634
- throw new IllegalArgumentException (String . format (
676
+ throw new IllegalArgumentException (format (
635
677
"The connection timeout must represent int value when converted to milliseconds %d." ,
636
678
connectionTimeoutMillis ));
637
679
}
@@ -655,7 +697,7 @@ public ConfigBuilder withMaxTransactionRetryTime(long value, TimeUnit unit) {
655
697
var maxRetryTimeMs = unit .toMillis (value );
656
698
if (maxRetryTimeMs < 0 ) {
657
699
throw new IllegalArgumentException (
658
- String . format ("The max retry time may not be smaller than 0, but was %d %s." , value , unit ));
700
+ format ("The max retry time may not be smaller than 0, but was %d %s." , value , unit ));
659
701
}
660
702
this .maxTransactionRetryTimeMillis = maxRetryTimeMs ;
661
703
return this ;
@@ -732,7 +774,7 @@ public ConfigBuilder withMetricsAdapter(MetricsAdapter metricsAdapter) {
732
774
public ConfigBuilder withEventLoopThreads (int size ) {
733
775
if (size < 1 ) {
734
776
throw new IllegalArgumentException (
735
- String . format ("The event loop thread may not be smaller than 1, but was %d." , size ));
777
+ format ("The event loop thread may not be smaller than 1, but was %d." , size ));
736
778
}
737
779
this .eventLoopThreads = size ;
738
780
return this ;
@@ -768,6 +810,42 @@ public ConfigBuilder withNotificationConfig(NotificationConfig notificationConfi
768
810
return this ;
769
811
}
770
812
813
+ /**
814
+ * Sets a minimum severity for notifications produced by the server.
815
+ *
816
+ * @param minimumNotificationSeverity the minimum notification severity
817
+ * @return this builder
818
+ * @since 5.22.0
819
+ */
820
+ @ Preview (name = "GQL-status object" )
821
+ public ConfigBuilder withMinimumNotificationSeverity (NotificationSeverity minimumNotificationSeverity ) {
822
+ if (minimumNotificationSeverity == null ) {
823
+ notificationConfig = NotificationConfig .disableAllConfig ();
824
+ } else {
825
+ notificationConfig = notificationConfig .enableMinimumSeverity (minimumNotificationSeverity );
826
+ }
827
+ return this ;
828
+ }
829
+
830
+ /**
831
+ * Sets a set of disabled classifications for notifications produced by the server.
832
+ *
833
+ * @param disabledNotificationClassifications the set of disabled notification classifications
834
+ * @return this builder
835
+ * @since 5.22.0
836
+ */
837
+ @ Preview (name = "GQL-status object" )
838
+ public ConfigBuilder withDisabledNotificationClassifications (
839
+ Set <NotificationClassification > disabledNotificationClassifications ) {
840
+ var disabledCategories = disabledNotificationClassifications == null
841
+ ? Collections .<NotificationCategory >emptySet ()
842
+ : disabledNotificationClassifications .stream ()
843
+ .map (NotificationCategory .class ::cast )
844
+ .collect (Collectors .toSet ());
845
+ notificationConfig = notificationConfig .disableCategories (disabledCategories );
846
+ return this ;
847
+ }
848
+
771
849
/**
772
850
* Sets if telemetry is disabled on the driver side.
773
851
* <p>
0 commit comments