You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by GitBox <gi...@apache.org> on 2019/07/31 09:41:10 UTC

[GitHub] [incubator-druid] clintropolis commented on a change in pull request #8154: Fix `is_realtime` column behavior in sys.segments table

clintropolis commented on a change in pull request #8154: Fix `is_realtime` column behavior in sys.segments table
URL: https://github.com/apache/incubator-druid/pull/8154#discussion_r309123820
 
 

 ##########
 File path: sql/src/main/java/org/apache/druid/sql/calcite/schema/DruidSchema.java
 ##########
 @@ -431,19 +431,29 @@ void removeSegment(final DataSegment segment)
     }
   }
 
-  private void removeServerSegment(final DruidServerMetadata server, final DataSegment segment)
+  @VisibleForTesting
+  void removeServerSegment(final DruidServerMetadata server, final DataSegment segment)
   {
     synchronized (lock) {
       log.debug("Segment[%s] is gone from server[%s]", segment.getId(), server.getName());
       final Map<SegmentId, AvailableSegmentMetadata> knownSegments = segmentMetadataInfo.get(segment.getDataSource());
       final AvailableSegmentMetadata segmentMetadata = knownSegments.get(segment.getId());
-      final Set<String> segmentServers = segmentMetadata.getReplicas();
-      final ImmutableSet<String> servers = FluentIterable.from(segmentServers)
-                                                         .filter(Predicates.not(Predicates.equalTo(server.getName())))
-                                                         .toSet();
+      final Set<DruidServerMetadata> segmentServers = segmentMetadata.getReplicas();
+      final ImmutableSet<DruidServerMetadata> servers = FluentIterable
+          .from(segmentServers)
+          .filter(Predicates.not(Predicates.equalTo(server)))
+          .toSet();
+      final Optional<DruidServerMetadata> realtimeServer = servers
+          .stream()
+          .filter(metadata -> metadata.getType().equals(ServerType.REALTIME))
+          .findAny();
+
+      // if there is no realtime server in the replicas, isRealtime flag should be unset
+      long isRealtime = realtimeServer.isPresent() ? 1 : 0;
 
 Review comment:
   [Apologies for missing this original discussion](https://github.com/apache/incubator-druid/pull/6094#discussion_r210661609), but is this the most useful thing for the `is_realtime` flag to mean, where it reports true if _any_ of the servers serving a segment is a realtime task?
   
   It might be more useful for `is_realtime` to report true if it is _only_ available on realtime tasks, and false if any server serving the segment is a historical, since that is how the broker will behave at query time (#4764). I think this would probably involve doing this as part of `addSegment` instead of `removeSegment`.

----------------------------------------------------------------
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.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org