github-actions[bot] commented on code in PR #69554:
URL: https://github.com/apache/doris/pull/69554#discussion_r4361269076


##########
fe/fe-core/src/main/java/org/apache/doris/catalog/Tablet.java:
##########
@@ -216,7 +216,7 @@ protected Multimap<Long, Long> 
getNormalReplicaBackendPathMapImpl(String beEndpo
         SystemInfoService infoService = Env.getCurrentSystemInfo();
         for (Replica replica : getReplicas()) {
             long backendId = idGetter.get(replica, beEndpoint);
-            if (!infoService.checkBackendAlive(backendId)) {
+            if (!infoService.checkBackendLoadAvailable(backendId)) {

Review Comment:
   [P1] Preserve alive replicas for metadata callers
   
   `getNormalReplicaBackendIds()` also delegates to this helper, so the new 
load filter changes metadata operations. With all replicas of a 
non-light-schema table alive but load-disabled, 
`AlterLightSchChangeHelper.buildParams()` now issues no column-ID RPCs, yet 
`updateTableMeta()` still sets light schema change to true and journals success 
with the existing FE column IDs/max IDs unset. This is reachable through `ALTER 
TABLE ... SET ("light_schema_change"="true")` or the enabled conversion daemon.
   
   Even one disabled backend in a healthy three-replica table makes 
`OlapTable.getArbitraryTabletBucketsSeq()` see two IDs against an allocation of 
three, rejecting `ALTER TABLE t SET ("colocate_with"="new_group")`. That check 
also runs during `Env.replayModifyTableColocate()`: an operation accepted by an 
older master is caught and skipped on this head, leaving follower colocation 
metadata different. Preserve alive-replica enumeration for these metadata 
callers and apply load eligibility only to load destinations.



##########
fe/fe-core/src/main/java/org/apache/doris/catalog/Tablet.java:
##########
@@ -216,7 +216,7 @@ protected Multimap<Long, Long> 
getNormalReplicaBackendPathMapImpl(String beEndpo
         SystemInfoService infoService = Env.getCurrentSystemInfo();
         for (Replica replica : getReplicas()) {
             long backendId = idGetter.get(replica, beEndpoint);
-            if (!infoService.checkBackendAlive(backendId)) {
+            if (!infoService.checkBackendLoadAvailable(backendId)) {

Review Comment:
   [P2] Reroute cloud loads before dropping shutdown backends
   
   This shared path also handles `CloudTablet`, whose single logical replica 
has already selected one backend. During `stop_be.sh --grace`, heartbeats set 
`isShutdown=true` while the backend remains alive waiting for existing queries. 
`CloudReplica.getColocatedBeId()` still hashes over alive backends, and 
`hashReplicaToBes()` likewise permits the draining backend. If bucket A is 
assigned there while another healthy backend exists, this new gate removes its 
only entry and `OlapTableSink.createLocation()` fails with `REPLICA_FEW_ERR`; 
colocated retries keep the same assignment throughout the drain. Configured 
multi-replica routing can hit the same failure intermittently.
   
   Previously the alive target remained usable while its writer RPC service was 
still running during the drain. The shutdown exclusion needs an eligible 
replacement selected upstream, or this change needs to remain scoped until 
those cloud selectors support it. Simply filtering their sole result introduces 
load failures during a graceful restart.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to