11package  tech .ydb .topic .impl ;
22
3- import  java .util .UUID ;
3+ import  java .util .Random ;
44import  java .util .concurrent .CompletableFuture ;
55import  java .util .concurrent .RejectedExecutionException ;
66import  java .util .concurrent .ScheduledExecutorService ;
@@ -22,6 +22,9 @@ public abstract class GrpcStreamRetrier {
2222    private  static  final  int  EXP_BACKOFF_BASE_MS  = 256 ;
2323    private  static  final  int  EXP_BACKOFF_CEILING_MS  = 40000 ; // 40 sec (max delays would be 40-80 sec) 
2424    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 ();
2528
2629    protected  final  String  id ;
2730    protected  final  AtomicBoolean  isReconnecting  = new  AtomicBoolean (false );
@@ -31,14 +34,22 @@ public abstract class GrpcStreamRetrier {
3134
3235    protected  GrpcStreamRetrier (ScheduledExecutorService  scheduler ) {
3336        this .scheduler  = scheduler ;
34-         this .id  = UUID . randomUUID (). toString ( );
37+         this .id  = generateRandomId ( ID_LENGTH );
3538    }
3639
3740    protected  abstract  Logger  getLogger ();
3841    protected  abstract  String  getStreamName ();
3942    protected  abstract  void  onStreamReconnect ();
4043    protected  abstract  void  onShutdown (String  reason );
4144
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+ 
4253    private  void  tryScheduleReconnect () {
4354        int  currentReconnectCounter  = reconnectCounter .get () + 1 ;
4455        if  (MAX_RECONNECT_COUNT  > 0  && currentReconnectCounter  > MAX_RECONNECT_COUNT ) {
@@ -49,8 +60,8 @@ private void tryScheduleReconnect() {
4960                shutdownImpl (errorMessage );
5061                return ;
5162            } 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 ());
5465            }
5566        }
5667        if  (isReconnecting .compareAndSet (false , true )) {
0 commit comments