1
1
package tech .ydb .topic .impl ;
2
2
3
- import java .util .UUID ;
3
+ import java .util .Random ;
4
4
import java .util .concurrent .CompletableFuture ;
5
5
import java .util .concurrent .RejectedExecutionException ;
6
6
import java .util .concurrent .ScheduledExecutorService ;
@@ -22,6 +22,9 @@ public abstract class GrpcStreamRetrier {
22
22
private static final int EXP_BACKOFF_BASE_MS = 256 ;
23
23
private static final int EXP_BACKOFF_CEILING_MS = 40000 ; // 40 sec (max delays would be 40-80 sec)
24
24
private static final int EXP_BACKOFF_MAX_POWER = 7 ;
25
+ private static final int ID_LENGTH = 6 ;
26
+ private static final char [] ID_ALPHABET = "abcdefghijklmnopqrstuvwxyzABSDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
27
+ .toCharArray ();
25
28
26
29
protected final String id ;
27
30
protected final AtomicBoolean isReconnecting = new AtomicBoolean (false );
@@ -31,14 +34,22 @@ public abstract class GrpcStreamRetrier {
31
34
32
35
protected GrpcStreamRetrier (ScheduledExecutorService scheduler ) {
33
36
this .scheduler = scheduler ;
34
- this .id = UUID . randomUUID (). toString ( );
37
+ this .id = generateRandomId ( ID_LENGTH );
35
38
}
36
39
37
40
protected abstract Logger getLogger ();
38
41
protected abstract String getStreamName ();
39
42
protected abstract void onStreamReconnect ();
40
43
protected abstract void onShutdown (String reason );
41
44
45
+ protected static String generateRandomId (int length ) {
46
+ return new Random ().ints (0 , ID_ALPHABET .length )
47
+ .limit (length )
48
+ .map (charId -> ID_ALPHABET [charId ])
49
+ .collect (StringBuilder ::new , StringBuilder ::appendCodePoint , StringBuilder ::append )
50
+ .toString ();
51
+ }
52
+
42
53
private void tryScheduleReconnect () {
43
54
int currentReconnectCounter = reconnectCounter .get () + 1 ;
44
55
if (MAX_RECONNECT_COUNT > 0 && currentReconnectCounter > MAX_RECONNECT_COUNT ) {
@@ -49,8 +60,8 @@ private void tryScheduleReconnect() {
49
60
shutdownImpl (errorMessage );
50
61
return ;
51
62
} else {
52
- getLogger ().debug ("[{}] Maximum retry count ({}}) exceeded. But {} is already shut down." , id ,
53
- MAX_RECONNECT_COUNT , getStreamName ());
63
+ getLogger ().info ("[{}] Maximum retry count ({}}) exceeded. Need to shutdown {} but it's already " +
64
+ "shut down." , id , MAX_RECONNECT_COUNT , getStreamName ());
54
65
}
55
66
}
56
67
if (isReconnecting .compareAndSet (false , true )) {
0 commit comments