Skip to content

Commit 420a067

Browse files
authored
fix wait time when schema version mismatched (#327)
1 parent 2c7ffdd commit 420a067

File tree

1 file changed

+20
-19
lines changed

1 file changed

+20
-19
lines changed

src/main/java/com/alipay/oceanbase/rpc/location/model/TableLocations.java

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -95,19 +95,15 @@ 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();
10098
long tableEntryRefreshLockTimeout = tableClient.getTableEntryRefreshLockTimeout();
101-
long refreshMetaInterval = (long) (tableEntryRefreshIntervalBase * Math.pow(2,
102-
-serverRoster.getMaxPriority()));
103-
refreshMetaInterval = Math.min(refreshMetaInterval, tableEntryRefreshIntervalCeiling);
99+
long refreshMetaInterval = getTableLevelRefreshInterval(serverRoster);
104100

105101
TableEntry tableEntry = locations.get(tableName);
106102
// avoid bad contention in high concurrent situation
107103
if (tableEntry != null) {
108104
long current = System.currentTimeMillis();
109105
long fetchMetaInterval = current - tableEntry.getRefreshMetaTimeMills();
110-
// if refreshed within 3 seconds, do not refresh
106+
// if refreshed within refreshMetaInterval, do not refresh
111107
if (fetchMetaInterval < refreshMetaInterval) {
112108
logger
113109
.info(
@@ -150,7 +146,7 @@ public TableEntry refreshMeta(String tableName, ServerRoster serverRoster,
150146
if (tableEntry != null) {
151147
long current = System.currentTimeMillis();
152148
long fetchMetaInterval = current - tableEntry.getRefreshMetaTimeMills();
153-
// if refreshed within 100 ms, do not refresh
149+
// if refreshed within refreshMetaInterval, do not refresh
154150
if (fetchMetaInterval < refreshMetaInterval) {
155151
logger
156152
.info(
@@ -283,6 +279,7 @@ public TableEntry refreshPartitionLocation(TableEntry tableEntry, String tableNa
283279
}
284280
ObPartitionLocationInfo locationInfo = tableEntry.getPartitionEntry().getPartitionInfo(
285281
tabletId);
282+
long refreshMetaInterval = getTableLevelRefreshInterval(serverRoster);
286283
int tableEntryRefreshContinuousFailureCeiling = tableClient
287284
.getTableEntryRefreshContinuousFailureCeiling();
288285
long runtimeMaxWait = tableClient.getRuntimeMaxWait();
@@ -358,10 +355,9 @@ public TableEntry refreshPartitionLocation(TableEntry tableEntry, String tableNa
358355
"schema_version mismatch when refreshing tablet location, old schema_version is: {}", schemaVersion);
359356
tableEntry = locations.get(tableName);
360357
// sleep over waiting interval of refreshing meta to refresh meta
361-
long interval = System.currentTimeMillis()
362-
- tableEntry.getRefreshMetaTimeMills();
363-
if (interval < 100) {
364-
Thread.sleep(100 - interval);
358+
long interval = System.currentTimeMillis() - tableEntry.getRefreshMetaTimeMills();
359+
if (interval < refreshMetaInterval) {
360+
Thread.sleep(refreshMetaInterval - interval);
365361
}
366362
tableEntry = locations.get(tableName);
367363
// if schema_version has been updated, directly retry
@@ -416,13 +412,9 @@ public TableEntry refreshTabletLocationBatch(TableEntry tableEntry, String table
416412
long runtimeMaxWait = tableClient.getRuntimeMaxWait();
417413
long tableEntryRefreshLockTimeout = tableClient.getTableEntryRefreshLockTimeout();
418414
long lastRefreshTime = tableEntry.getPartitionEntry().getLastRefreshAllTime();
419-
long tableEntryRefreshIntervalBase = tableClient.getTableEntryRefreshIntervalBase();
420-
long tableEntryRefreshIntervalCeiling = tableClient.getTableEntryRefreshIntervalCeiling();
421-
long refreshBatchTabletInterval = (long) (tableEntryRefreshIntervalBase * Math.pow(2,
422-
-serverRoster.getMaxPriority()));
423-
refreshBatchTabletInterval = Math.min(refreshBatchTabletInterval, tableEntryRefreshIntervalCeiling);
415+
long refreshBatchTabletInterval = getTableLevelRefreshInterval(serverRoster);
424416
long currentTime = System.currentTimeMillis();
425-
// do not refresh tablet location if refreshed within 300 milliseconds
417+
// do not refresh tablet location if refreshed within refreshBatchTabletInterval
426418
if (currentTime - lastRefreshTime < refreshBatchTabletInterval) {
427419
logger
428420
.info(
@@ -491,8 +483,8 @@ public TableEntry refreshTabletLocationBatch(TableEntry tableEntry, String table
491483
tableEntry = locations.get(tableName);
492484
// sleep over waiting interval of refreshing meta to refresh meta
493485
long interval = System.currentTimeMillis() - tableEntry.getRefreshMetaTimeMills();
494-
if (interval < 100) {
495-
Thread.sleep(100 - interval);
486+
if (interval < refreshBatchTabletInterval) {
487+
Thread.sleep(refreshBatchTabletInterval - interval);
496488
}
497489
tableEntry = locations.get(tableName);
498490
// if schema_version has been updated, directly retry
@@ -530,6 +522,15 @@ public TableEntry refreshTabletLocationBatch(TableEntry tableEntry, String table
530522
}
531523
}
532524

525+
private long getTableLevelRefreshInterval(ServerRoster serverRoster) {
526+
long tableEntryRefreshIntervalBase = tableClient.getTableEntryRefreshIntervalBase();
527+
long tableEntryRefreshIntervalCeiling = tableClient.getTableEntryRefreshIntervalCeiling();
528+
long refreshInterval = (long) (tableEntryRefreshIntervalBase * Math.pow(2,
529+
-serverRoster.getMaxPriority()));
530+
refreshInterval = Math.min(refreshInterval, tableEntryRefreshIntervalCeiling);
531+
return refreshInterval;
532+
}
533+
533534
/**
534535
* fetch ODP partition meta information
535536
* @param tableName table name to query

0 commit comments

Comments
 (0)