@@ -95,8 +95,12 @@ public TableEntry refreshMeta(String tableName, ServerRoster serverRoster,
9595 long runtimeMaxWait = tableClient .getRuntimeMaxWait ();
9696 int tableEntryRefreshContinuousFailureCeiling = tableClient
9797 .getTableEntryRefreshContinuousFailureCeiling ();
98+ long tableEntryRefreshIntervalBase = tableClient .getTableEntryRefreshIntervalBase ();
99+ long tableEntryRefreshIntervalCeiling = tableClient .getTableEntryRefreshIntervalCeiling ();
98100 long tableEntryRefreshLockTimeout = tableClient .getTableEntryRefreshLockTimeout ();
99- long refreshMetaInterval = 100L ;
101+ long refreshMetaInterval = (long ) (tableEntryRefreshIntervalBase * Math .pow (2 ,
102+ -serverRoster .getMaxPriority ()));
103+ refreshMetaInterval = Math .min (refreshMetaInterval , tableEntryRefreshIntervalCeiling );
100104
101105 TableEntry tableEntry = locations .get (tableName );
102106 // avoid bad contention in high concurrent situation
@@ -288,7 +292,7 @@ public TableEntry refreshPartitionLocation(TableEntry tableEntry, String tableNa
288292 long runtimeMaxWait = tableClient .getRuntimeMaxWait ();
289293 long tableEntryRefreshLockTimeout = tableClient .getTableEntryRefreshLockTimeout ();
290294 long lastRefreshTime = locationInfo .getLastUpdateTime ();
291- long tableEntryRefreshInterval = 100L ;
295+ long tableEntryRefreshInterval = tableClient . getTableEntryRefreshIntervalCeiling () ;
292296 long currentTime = System .currentTimeMillis ();
293297 // do not refresh tablet location if refreshed within 300 milliseconds
294298 if (currentTime - lastRefreshTime < tableEntryRefreshInterval ) {
@@ -421,14 +425,18 @@ public TableEntry refreshTabletLocationBatch(TableEntry tableEntry, String table
421425 long runtimeMaxWait = tableClient .getRuntimeMaxWait ();
422426 long tableEntryRefreshLockTimeout = tableClient .getTableEntryRefreshLockTimeout ();
423427 long lastRefreshTime = tableEntry .getPartitionEntry ().getLastRefreshAllTime ();
424- long tableEntryRefreshInterval = 100L ;
428+ long tableEntryRefreshIntervalBase = tableClient .getTableEntryRefreshIntervalBase ();
429+ long tableEntryRefreshIntervalCeiling = tableClient .getTableEntryRefreshIntervalCeiling ();
430+ long refreshBatchTabletInterval = (long ) (tableEntryRefreshIntervalBase * Math .pow (2 ,
431+ -serverRoster .getMaxPriority ()));
432+ refreshBatchTabletInterval = Math .min (refreshBatchTabletInterval , tableEntryRefreshIntervalCeiling );
425433 long currentTime = System .currentTimeMillis ();
426434 // do not refresh tablet location if refreshed within 300 milliseconds
427- if (currentTime - lastRefreshTime < tableEntryRefreshInterval ) {
435+ if (currentTime - lastRefreshTime < refreshBatchTabletInterval ) {
428436 logger
429437 .info (
430438 "punish table entry {}, last batch location refresh time {}, punish interval {}, current time {}." ,
431- tableName , lastRefreshTime , tableEntryRefreshInterval , currentTime );
439+ tableName , lastRefreshTime , refreshBatchTabletInterval , currentTime );
432440 return tableEntry ;
433441 }
434442 Lock lock = getLocationBatchRefreshLock (tableName );
@@ -463,11 +471,11 @@ public TableEntry refreshTabletLocationBatch(TableEntry tableEntry, String table
463471 logger .warn ("[latency monitor] success to acquire refresh tablet locations in batch lock, tableName: {}" , tableName );
464472 lastRefreshTime = tableEntry .getPartitionEntry ().getLastRefreshAllTime ();
465473 currentTime = System .currentTimeMillis ();
466- if (currentTime - lastRefreshTime < tableEntryRefreshInterval ) {
474+ if (currentTime - lastRefreshTime < refreshBatchTabletInterval ) {
467475 logger
468476 .info (
469477 "punish table entry {}, last batch location refresh time {}, punish interval {}, current time {}." ,
470- tableName , lastRefreshTime , tableEntryRefreshInterval , currentTime );
478+ tableName , lastRefreshTime , refreshBatchTabletInterval , currentTime );
471479 return tableEntry ;
472480 }
473481 logger .warn ("[latency monitor] do refresh tablet locations in batch lock, tableName: {}" , tableName );
0 commit comments