This is an automated email from the ASF dual-hosted git repository.

cwylie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 631cda6  Include replicated segment size property for datasources 
endpoint (#8039)
631cda6 is described below

commit 631cda649b388324c6e4d383e56cae2786144c27
Author: Atul Mohan <[email protected]>
AuthorDate: Thu Jul 11 03:10:38 2019 -0500

    Include replicated segment size property for datasources endpoint (#8039)
    
    * Add replication size
    
    * Summon comma
---
 docs/content/operations/api-reference.md           |  4 +-
 .../druid/server/http/DataSourcesResource.java     | 10 ++++
 .../druid/server/http/DataSourcesResourceTest.java | 56 ++++++++++++++++++++++
 3 files changed, 68 insertions(+), 2 deletions(-)

diff --git a/docs/content/operations/api-reference.md 
b/docs/content/operations/api-reference.md
index 473282f..3b49b12 100644
--- a/docs/content/operations/api-reference.md
+++ b/docs/content/operations/api-reference.md
@@ -162,7 +162,7 @@ Returns a list of datasource names found in the cluster.
 
 * `/druid/coordinator/v1/datasources?simple`
 
-Returns a list of JSON objects containing the name and properties of 
datasources found in the cluster.  Properties include segment count, total 
segment byte size, minTime, and maxTime.
+Returns a list of JSON objects containing the name and properties of 
datasources found in the cluster.  Properties include segment count, total 
segment byte size, replicated total segment byte size, minTime, and maxTime.
 
 * `/druid/coordinator/v1/datasources?full`
 
@@ -170,7 +170,7 @@ Returns a list of datasource names found in the cluster 
with all metadata about
 
 * `/druid/coordinator/v1/datasources/{dataSourceName}`
 
-Returns a JSON object containing the name and properties of a datasource. 
Properties include segment count, total segment byte size, minTime, and maxTime.
+Returns a JSON object containing the name and properties of a datasource. 
Properties include segment count, total segment byte size, replicated total 
segment byte size, minTime, and maxTime.
 
 * `/druid/coordinator/v1/datasources/{dataSourceName}?full`
 
diff --git 
a/server/src/main/java/org/apache/druid/server/http/DataSourcesResource.java 
b/server/src/main/java/org/apache/druid/server/http/DataSourcesResource.java
index 9255e7c..a2f04ff 100644
--- a/server/src/main/java/org/apache/druid/server/http/DataSourcesResource.java
+++ b/server/src/main/java/org/apache/druid/server/http/DataSourcesResource.java
@@ -538,6 +538,8 @@ public class DataSourcesResource
     Map<String, HashSet<Object>> tierDistinctSegments = new HashMap<>();
 
     long totalSegmentSize = 0;
+    long totalReplicatedSize = 0;
+
     DateTime minTime = DateTimes.MAX;
     DateTime maxTime = DateTimes.MIN;
     String tier;
@@ -552,6 +554,8 @@ public class DataSourcesResource
       tierDistinctSegments.computeIfAbsent(tier, k -> new HashSet<>());
 
       long dataSourceSegmentSize = 0;
+      long replicatedSegmentSize = 0;
+
       for (DataSegment dataSegment : druidDataSource.getSegments()) {
         // tier segments stats
         if (!tierDistinctSegments.get(tier).contains(dataSegment.getId())) {
@@ -565,6 +569,8 @@ public class DataSourcesResource
           minTime = DateTimes.min(minTime, 
dataSegment.getInterval().getStart());
           maxTime = DateTimes.max(maxTime, dataSegment.getInterval().getEnd());
         }
+        totalReplicatedSize += dataSegment.getSize();
+        replicatedSegmentSize += dataSegment.getSize();
       }
 
       // tier stats
@@ -577,10 +583,14 @@ public class DataSourcesResource
 
       long segmentSize = MapUtils.getLong(tierStats, "size", 0L);
       tierStats.put("size", segmentSize + dataSourceSegmentSize);
+
+      long replicatedSize = MapUtils.getLong(tierStats, "replicatedSize", 0L);
+      tierStats.put("replicatedSize", replicatedSize + replicatedSegmentSize);
     }
 
     segments.put("count", totalDistinctSegments.size());
     segments.put("size", totalSegmentSize);
+    segments.put("replicatedSize", totalReplicatedSize);
     segments.put("minTime", minTime);
     segments.put("maxTime", maxTime);
     return retVal;
diff --git 
a/server/src/test/java/org/apache/druid/server/http/DataSourcesResourceTest.java
 
b/server/src/test/java/org/apache/druid/server/http/DataSourcesResourceTest.java
index 02885ff..1ae294b 100644
--- 
a/server/src/test/java/org/apache/druid/server/http/DataSourcesResourceTest.java
+++ 
b/server/src/test/java/org/apache/druid/server/http/DataSourcesResourceTest.java
@@ -373,11 +373,13 @@ public class DataSourcesResourceTest
     Map<String, Map<String, Object>> result = (Map<String, Map<String, 
Object>>) response.getEntity();
     Assert.assertEquals(1, ((Map) 
(result.get("tiers").get(null))).get("segmentCount"));
     Assert.assertEquals(10L, ((Map) 
(result.get("tiers").get(null))).get("size"));
+    Assert.assertEquals(10L, ((Map) 
(result.get("tiers").get(null))).get("replicatedSize"));
     Assert.assertNotNull(result.get("segments"));
     Assert.assertEquals("2010-01-01T00:00:00.000Z", 
result.get("segments").get("minTime").toString());
     Assert.assertEquals("2010-01-02T00:00:00.000Z", 
result.get("segments").get("maxTime").toString());
     Assert.assertEquals(1, result.get("segments").get("count"));
     Assert.assertEquals(10L, result.get("segments").get("size"));
+    Assert.assertEquals(10L, result.get("segments").get("replicatedSize"));
     EasyMock.verify(inventoryView, server);
   }
 
@@ -413,6 +415,7 @@ public class DataSourcesResourceTest
     Map<String, Map<String, Object>> result = (Map<String, Map<String, 
Object>>) response.getEntity();
     Assert.assertEquals(2, ((Map) 
(result.get("tiers").get("cold"))).get("segmentCount"));
     Assert.assertEquals(30L, ((Map) 
(result.get("tiers").get("cold"))).get("size"));
+    Assert.assertEquals(30L, ((Map) 
(result.get("tiers").get("cold"))).get("replicatedSize"));
     Assert.assertEquals(1, ((Map) 
(result.get("tiers").get("hot"))).get("segmentCount"));
     Assert.assertEquals(20L, ((Map) 
(result.get("tiers").get("hot"))).get("size"));
     Assert.assertNotNull(result.get("segments"));
@@ -420,10 +423,63 @@ public class DataSourcesResourceTest
     Assert.assertEquals("2010-01-23T00:00:00.000Z", 
result.get("segments").get("maxTime").toString());
     Assert.assertEquals(2, result.get("segments").get("count"));
     Assert.assertEquals(30L, result.get("segments").get("size"));
+    Assert.assertEquals(50L, result.get("segments").get("replicatedSize"));
     EasyMock.verify(inventoryView, server, server2, server3);
   }
 
   @Test
+  public void testSimpleGetTheDataSourceWithReplicatedSegments()
+  {
+    server = new DruidServer("server1", "host1", null, 1234, 
ServerType.HISTORICAL, "tier1", 0);
+    DruidServer server2 = new DruidServer("server2", "host2", null, 1234, 
ServerType.HISTORICAL, "tier2", 0);
+    DruidServer server3 = new DruidServer("server3", "host3", null, 1234, 
ServerType.HISTORICAL, "tier1", 0);
+
+    server.addDataSegment(dataSegmentList.get(0));
+    server.addDataSegment(dataSegmentList.get(1));
+    server.addDataSegment(dataSegmentList.get(2));
+    server2.addDataSegment(dataSegmentList.get(0));
+    server2.addDataSegment(dataSegmentList.get(1));
+    server3.addDataSegment(dataSegmentList.get(2));
+
+    EasyMock.expect(inventoryView.getInventory()).andReturn(
+        ImmutableList.of(server, server2, server3)
+    ).atLeastOnce();
+
+    EasyMock.replay(inventoryView);
+
+    DataSourcesResource dataSourcesResource =
+        new DataSourcesResource(inventoryView, null, null, null, new 
AuthConfig(), null);
+    Response response = dataSourcesResource.getTheDataSource("datasource1", 
null);
+    Assert.assertEquals(200, response.getStatus());
+    Map<String, Map<String, Object>> result1 = (Map<String, Map<String, 
Object>>) response.getEntity();
+    Assert.assertEquals(2, ((Map) 
(result1.get("tiers").get("tier1"))).get("segmentCount"));
+    Assert.assertEquals(30L, ((Map) 
(result1.get("tiers").get("tier1"))).get("size"));
+    Assert.assertEquals(30L, ((Map) 
(result1.get("tiers").get("tier1"))).get("replicatedSize"));
+    Assert.assertEquals(2, ((Map) 
(result1.get("tiers").get("tier2"))).get("segmentCount"));
+    Assert.assertEquals(30L, ((Map) 
(result1.get("tiers").get("tier2"))).get("size"));
+    Assert.assertNotNull(result1.get("segments"));
+    Assert.assertEquals("2010-01-01T00:00:00.000Z", 
result1.get("segments").get("minTime").toString());
+    Assert.assertEquals("2010-01-23T00:00:00.000Z", 
result1.get("segments").get("maxTime").toString());
+    Assert.assertEquals(2, result1.get("segments").get("count"));
+    Assert.assertEquals(30L, result1.get("segments").get("size"));
+    Assert.assertEquals(60L, result1.get("segments").get("replicatedSize"));
+
+    response = dataSourcesResource.getTheDataSource("datasource2", null);
+    Assert.assertEquals(200, response.getStatus());
+    Map<String, Map<String, Object>> result2 = (Map<String, Map<String, 
Object>>) response.getEntity();
+    Assert.assertEquals(1, ((Map) 
(result2.get("tiers").get("tier1"))).get("segmentCount"));
+    Assert.assertEquals(30L, ((Map) 
(result2.get("tiers").get("tier1"))).get("size"));
+    Assert.assertEquals(60L, ((Map) 
(result2.get("tiers").get("tier1"))).get("replicatedSize"));
+    Assert.assertNotNull(result2.get("segments"));
+    Assert.assertEquals("2010-01-01T00:00:00.000Z", 
result2.get("segments").get("minTime").toString());
+    Assert.assertEquals("2010-01-02T00:00:00.000Z", 
result2.get("segments").get("maxTime").toString());
+    Assert.assertEquals(1, result2.get("segments").get("count"));
+    Assert.assertEquals(30L, result2.get("segments").get("size"));
+    Assert.assertEquals(60L, result2.get("segments").get("replicatedSize"));
+    EasyMock.verify(inventoryView);
+  }
+
+  @Test
   public void testGetSegmentDataSourceIntervals()
   {
     server = new DruidServer("who", "host", null, 1234, ServerType.HISTORICAL, 
"tier1", 0);


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

Reply via email to