You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by "jadami10 (via GitHub)" <gi...@apache.org> on 2023/12/29 19:23:30 UTC

[PR] make all /size users render async [pinot]

jadami10 opened a new pull request, #12210:
URL: https://github.com/apache/pinot/pull/12210

   This is a UI feature change addressing #10504. Apologies for the humungous PR, but I figured it would be best to knock this out in 1 go. There's a couple of things happening here:
   - added a small "NotFound" page if you navigate to tables/schemas/instances/segments that don't exist. It doesn't happen often, but previous the UI just broke if you did this
   - as much as I could, all UI elements should now load async. Meaning the UI will immediately render with "loading" indicators, and then the data will populate the page
     - for a small cluster, this change is likely imperceptible
     - for a large cluster, everything will feel a lot snappier. Table sizes, table status, and instance counts are the slowest things to load. Before this, they would hold up rendering the entire page
     - restarting a server would also previously induce a lot of slowness in the UI. The UI wouldn't load until the /size endpoint from controller->server timed out. Now it just shows that it's "loading" but the rest of the data is on the page
   - I ran prettier (with the Pinot config) over each file I touched. This was mostly because writing JS without a linter is hard, and it was simpler to just reformat the whole file rather than try to get my changes correct.
   


-- 
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: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


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


Re: [PR] make all /size users render async [pinot]

Posted by "jayeshchoudhary (via GitHub)" <gi...@apache.org>.
jayeshchoudhary commented on code in PR #12210:
URL: https://github.com/apache/pinot/pull/12210#discussion_r1442853339


##########
pinot-controller/src/main/resources/app/pages/Tenants.tsx:
##########
@@ -17,84 +17,59 @@
  * under the License.
  */
 
-import React, { useState, useEffect } from 'react';
+import React from 'react';
 import { Grid, makeStyles } from '@material-ui/core';
-import { TableData } from 'Models';
+import { InstanceType } from 'Models';
 import { RouteComponentProps } from 'react-router-dom';
-import CustomizedTables from '../components/Table';
-import AppLoader from '../components/AppLoader';
-import PinotMethodUtils from '../utils/PinotMethodUtils';
 import SimpleAccordion from '../components/SimpleAccordion';
+import AsyncPinotTables from '../components/AsyncPinotTables';
 import CustomButton from '../components/CustomButton';
+import { AsyncInstanceTable } from '../components/AsyncInstanceTable';
 
 const useStyles = makeStyles((theme) => ({
   operationDiv: {
     border: '1px #BDCCD9 solid',
     borderRadius: 4,
-    marginBottom: 20
-  }
+    marginBottom: 20,
+  },
 }));
 
 type Props = {
-  tenantName: string
+  tenantName: string;
 };
 
-const TableTooltipData = [
-  null,
-  "Uncompressed size of all data segments with replication",
-  "Estimated size of all data segments with replication, in case any servers are not reachable for actual size",
-  null,
-  "GOOD if all replicas of all segments are up"
-];
-
 const TenantPage = ({ match }: RouteComponentProps<Props>) => {
-
-  const {tenantName} = match.params;
-  const columnHeaders = ['Table Name', 'Reported Size', 'Estimated Size', 'Number of Segments', 'Status'];
-  const [fetching, setFetching] = useState(true);
-  const [tableData, setTableData] = useState<TableData>({
-    columns: columnHeaders,
-    records: []
-  });
-  const [brokerData, setBrokerData] = useState(null);
-  const [serverData, setServerData] = useState([]);
-
-  const fetchData = async () => {
-    const tenantData = await PinotMethodUtils.getTenantTableData(tenantName);
-    const brokersData = await PinotMethodUtils.getBrokerOfTenant(tenantName);
-    const serversData = await PinotMethodUtils.getServerOfTenant(tenantName);
-    setTableData(tenantData);
-    const separatedBrokers = Array.isArray(brokersData) ? brokersData.map((elm) => [elm]) : [];
-    setBrokerData(separatedBrokers || []);
-    const separatedServers = Array.isArray(serversData) ? serversData.map((elm) => [elm]) : [];
-    setServerData(separatedServers || []);
-    setFetching(false);
-  };
-  useEffect(() => {
-    fetchData();
-  }, []);
-
+  const { tenantName } = match.params;
   const classes = useStyles();
 
   return (
-    fetching ? <AppLoader /> :
-    <Grid item xs style={{ padding: 20, backgroundColor: 'white', maxHeight: 'calc(100vh - 70px)', overflowY: 'auto' }}>
+    <Grid
+      item
+      xs
+      style={{
+        padding: 20,
+        backgroundColor: 'white',
+        maxHeight: 'calc(100vh - 70px)',
+        overflowY: 'auto',
+      }}
+    >
       <div className={classes.operationDiv}>
-        <SimpleAccordion
-          headerTitle="Operations"
-          showSearchBox={false}
-        >
+        <SimpleAccordion headerTitle="Operations" showSearchBox={false}>
           <div>
             <CustomButton
-              onClick={()=>{console.log('rebalance');}}
+              onClick={() => {
+                console.log('rebalance');
+              }}
               tooltipTitle="Recalculates the segment to server mapping for all tables in this tenant"
               enableTooltip={true}
               isDisabled={true}
             >
               Rebalance Server Tenant
             </CustomButton>
             <CustomButton
-              onClick={()=>{console.log('rebuild');}}
+              onClick={() => {
+                console.log('rebuild');
+              }}

Review Comment:
   remove logs



##########
pinot-controller/src/main/resources/app/pages/Tenants.tsx:
##########
@@ -17,84 +17,59 @@
  * under the License.
  */
 
-import React, { useState, useEffect } from 'react';
+import React from 'react';
 import { Grid, makeStyles } from '@material-ui/core';
-import { TableData } from 'Models';
+import { InstanceType } from 'Models';
 import { RouteComponentProps } from 'react-router-dom';
-import CustomizedTables from '../components/Table';
-import AppLoader from '../components/AppLoader';
-import PinotMethodUtils from '../utils/PinotMethodUtils';
 import SimpleAccordion from '../components/SimpleAccordion';
+import AsyncPinotTables from '../components/AsyncPinotTables';
 import CustomButton from '../components/CustomButton';
+import { AsyncInstanceTable } from '../components/AsyncInstanceTable';
 
 const useStyles = makeStyles((theme) => ({
   operationDiv: {
     border: '1px #BDCCD9 solid',
     borderRadius: 4,
-    marginBottom: 20
-  }
+    marginBottom: 20,
+  },
 }));
 
 type Props = {
-  tenantName: string
+  tenantName: string;
 };
 
-const TableTooltipData = [
-  null,
-  "Uncompressed size of all data segments with replication",
-  "Estimated size of all data segments with replication, in case any servers are not reachable for actual size",
-  null,
-  "GOOD if all replicas of all segments are up"
-];
-
 const TenantPage = ({ match }: RouteComponentProps<Props>) => {
-
-  const {tenantName} = match.params;
-  const columnHeaders = ['Table Name', 'Reported Size', 'Estimated Size', 'Number of Segments', 'Status'];
-  const [fetching, setFetching] = useState(true);
-  const [tableData, setTableData] = useState<TableData>({
-    columns: columnHeaders,
-    records: []
-  });
-  const [brokerData, setBrokerData] = useState(null);
-  const [serverData, setServerData] = useState([]);
-
-  const fetchData = async () => {
-    const tenantData = await PinotMethodUtils.getTenantTableData(tenantName);
-    const brokersData = await PinotMethodUtils.getBrokerOfTenant(tenantName);
-    const serversData = await PinotMethodUtils.getServerOfTenant(tenantName);
-    setTableData(tenantData);
-    const separatedBrokers = Array.isArray(brokersData) ? brokersData.map((elm) => [elm]) : [];
-    setBrokerData(separatedBrokers || []);
-    const separatedServers = Array.isArray(serversData) ? serversData.map((elm) => [elm]) : [];
-    setServerData(separatedServers || []);
-    setFetching(false);
-  };
-  useEffect(() => {
-    fetchData();
-  }, []);
-
+  const { tenantName } = match.params;
   const classes = useStyles();
 
   return (
-    fetching ? <AppLoader /> :
-    <Grid item xs style={{ padding: 20, backgroundColor: 'white', maxHeight: 'calc(100vh - 70px)', overflowY: 'auto' }}>
+    <Grid
+      item
+      xs
+      style={{
+        padding: 20,
+        backgroundColor: 'white',
+        maxHeight: 'calc(100vh - 70px)',
+        overflowY: 'auto',
+      }}
+    >
       <div className={classes.operationDiv}>
-        <SimpleAccordion
-          headerTitle="Operations"
-          showSearchBox={false}
-        >
+        <SimpleAccordion headerTitle="Operations" showSearchBox={false}>
           <div>
             <CustomButton
-              onClick={()=>{console.log('rebalance');}}
+              onClick={() => {
+                console.log('rebalance');
+              }}

Review Comment:
   remove logs



##########
pinot-controller/src/main/resources/app/pages/InstanceListingPage.tsx:
##########
@@ -38,13 +39,12 @@ const InstanceListingPage = () => {
   const classes = useStyles();
 
   const [fetching, setFetching] = useState(true);
-  const [instances, setInstances] = useState<DataTable>();
+  // const [instances, setInstances] = useState<DataTable>();
   const [clusterName, setClusterName] = useState('');
 
   const fetchData = async () => {
-    const instanceResponse = await PinotMethodUtils.getAllInstances();
-    const instanceType = startCase(window.location.hash.split('/')[1].slice(0, -1));
-    setInstances(pick(instanceResponse, instanceType));
+    // const instanceResponse = await PinotMethodUtils.getAllInstances();
+    // setInstances(pick(instanceResponse, instanceType));

Review Comment:
   remove unwanted comments



##########
pinot-controller/src/main/resources/app/utils/PinotMethodUtils.ts:
##########
@@ -141,6 +141,10 @@ const getTenantsData = () => {
   });
 };
 
+const getTenantData = (tenant: string) => {
+
+}
+

Review Comment:
   empty function?



##########
pinot-controller/src/main/resources/app/pages/SchemaPageDetails.tsx:
##########
@@ -204,143 +222,146 @@ const SchemaPageDetails = ({ match }: RouteComponentProps<Props>) => {
   const handleSegmentDialogHide = () => {
     setShowEditConfig(false);
     setReloadSegmentsOnUpdate(false);
-  }
+  };
 
-  return fetching ? (
-    <AppLoader />
-  ) : (
-    <Grid
-      item
-      xs
-      style={{
-        padding: 20,
-        backgroundColor: 'white',
-        maxHeight: 'calc(100vh - 70px)',
-        overflowY: 'auto',
-      }}
-    >
-      <div className={classes.operationDiv}>
-        <SimpleAccordion
-          headerTitle="Operations"
-          showSearchBox={false}
-        >
-          <div>
-      <CustomButton
-              onClick={()=>{
-                setActionType('editSchema');
-                setConfig(JSON.stringify(schemaJSON, null, 2));
-                setShowEditConfig(true);
-              }}
-              tooltipTitle="Edit Schema"
-              enableTooltip={true}
-            >
-              Edit Schema
-            </CustomButton>
-            <CustomButton
-              isDisabled={!schemaJSON} onClick={handleDeleteSchemaAction}
-              tooltipTitle="Delete Schema"
-              enableTooltip={true}
-            >
-              Delete Schema
-            </CustomButton>
+  if (fetching) {
+    return <AppLoader />;
+  } else if (schemaNotFound) {
+    return <NotFound message={`Schema ${schemaName} not found`} />;
+  } else {
+    return (
+      <Grid
+        item

Review Comment:
   minor nit: if you are returning from if then it can just be 
   
   ```js
   if(condition1) {
       return 1;
   }
   if(condition2) {
       return 2;
   }
   return default;
   ```



-- 
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: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


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


Re: [PR] make all /size users render async [pinot]

Posted by "jayeshchoudhary (via GitHub)" <gi...@apache.org>.
jayeshchoudhary commented on PR #12210:
URL: https://github.com/apache/pinot/pull/12210#issuecomment-1878649265

   @jadami10 can you also add a video recording?


-- 
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: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


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


Re: [PR] make all /size users render async [pinot]

Posted by "jayeshchoudhary (via GitHub)" <gi...@apache.org>.
jayeshchoudhary commented on code in PR #12210:
URL: https://github.com/apache/pinot/pull/12210#discussion_r1442850718


##########
pinot-controller/src/main/resources/app/utils/PinotMethodUtils.ts:
##########
@@ -141,6 +141,10 @@ const getTenantsData = () => {
   });
 };
 
+const getTenantData = (tenant: string) => {
+
+}
+

Review Comment:
   empty function?



##########
pinot-controller/src/main/resources/app/utils/PinotMethodUtils.ts:
##########
@@ -141,6 +141,10 @@ const getTenantsData = () => {
   });
 };
 
+const getTenantData = (tenant: string) => {
+
+}
+

Review Comment:
   empty function?



-- 
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: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


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


Re: [PR] make all /size users render async [pinot]

Posted by "walterddr (via GitHub)" <gi...@apache.org>.
walterddr merged PR #12210:
URL: https://github.com/apache/pinot/pull/12210


-- 
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: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


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


Re: [PR] make all /size users render async [pinot]

Posted by "jadami10 (via GitHub)" <gi...@apache.org>.
jadami10 commented on code in PR #12210:
URL: https://github.com/apache/pinot/pull/12210#discussion_r1442997050


##########
pinot-controller/src/main/resources/app/utils/PinotMethodUtils.ts:
##########
@@ -141,6 +141,10 @@ const getTenantsData = () => {
   });
 };
 
+const getTenantData = (tenant: string) => {
+
+}
+

Review Comment:
   removed



##########
pinot-controller/src/main/resources/app/pages/SchemaPageDetails.tsx:
##########
@@ -204,143 +222,146 @@ const SchemaPageDetails = ({ match }: RouteComponentProps<Props>) => {
   const handleSegmentDialogHide = () => {
     setShowEditConfig(false);
     setReloadSegmentsOnUpdate(false);
-  }
+  };
 
-  return fetching ? (
-    <AppLoader />
-  ) : (
-    <Grid
-      item
-      xs
-      style={{
-        padding: 20,
-        backgroundColor: 'white',
-        maxHeight: 'calc(100vh - 70px)',
-        overflowY: 'auto',
-      }}
-    >
-      <div className={classes.operationDiv}>
-        <SimpleAccordion
-          headerTitle="Operations"
-          showSearchBox={false}
-        >
-          <div>
-      <CustomButton
-              onClick={()=>{
-                setActionType('editSchema');
-                setConfig(JSON.stringify(schemaJSON, null, 2));
-                setShowEditConfig(true);
-              }}
-              tooltipTitle="Edit Schema"
-              enableTooltip={true}
-            >
-              Edit Schema
-            </CustomButton>
-            <CustomButton
-              isDisabled={!schemaJSON} onClick={handleDeleteSchemaAction}
-              tooltipTitle="Delete Schema"
-              enableTooltip={true}
-            >
-              Delete Schema
-            </CustomButton>
+  if (fetching) {
+    return <AppLoader />;
+  } else if (schemaNotFound) {
+    return <NotFound message={`Schema ${schemaName} not found`} />;
+  } else {
+    return (
+      <Grid
+        item

Review Comment:
   i know there's some convo in JS around whether you should have `else` when all the other branches return since you might accidentally return nothing. But I will leave this as is for now since everything else is implemented like this.



##########
pinot-controller/src/main/resources/app/pages/InstanceListingPage.tsx:
##########
@@ -38,13 +39,12 @@ const InstanceListingPage = () => {
   const classes = useStyles();
 
   const [fetching, setFetching] = useState(true);
-  const [instances, setInstances] = useState<DataTable>();
+  // const [instances, setInstances] = useState<DataTable>();
   const [clusterName, setClusterName] = useState('');
 
   const fetchData = async () => {
-    const instanceResponse = await PinotMethodUtils.getAllInstances();
-    const instanceType = startCase(window.location.hash.split('/')[1].slice(0, -1));
-    setInstances(pick(instanceResponse, instanceType));
+    // const instanceResponse = await PinotMethodUtils.getAllInstances();
+    // setInstances(pick(instanceResponse, instanceType));

Review Comment:
   good catch. though i caught all of these



##########
pinot-controller/src/main/resources/app/pages/Tenants.tsx:
##########
@@ -17,84 +17,59 @@
  * under the License.
  */
 
-import React, { useState, useEffect } from 'react';
+import React from 'react';
 import { Grid, makeStyles } from '@material-ui/core';
-import { TableData } from 'Models';
+import { InstanceType } from 'Models';
 import { RouteComponentProps } from 'react-router-dom';
-import CustomizedTables from '../components/Table';
-import AppLoader from '../components/AppLoader';
-import PinotMethodUtils from '../utils/PinotMethodUtils';
 import SimpleAccordion from '../components/SimpleAccordion';
+import AsyncPinotTables from '../components/AsyncPinotTables';
 import CustomButton from '../components/CustomButton';
+import { AsyncInstanceTable } from '../components/AsyncInstanceTable';
 
 const useStyles = makeStyles((theme) => ({
   operationDiv: {
     border: '1px #BDCCD9 solid',
     borderRadius: 4,
-    marginBottom: 20
-  }
+    marginBottom: 20,
+  },
 }));
 
 type Props = {
-  tenantName: string
+  tenantName: string;
 };
 
-const TableTooltipData = [
-  null,
-  "Uncompressed size of all data segments with replication",
-  "Estimated size of all data segments with replication, in case any servers are not reachable for actual size",
-  null,
-  "GOOD if all replicas of all segments are up"
-];
-
 const TenantPage = ({ match }: RouteComponentProps<Props>) => {
-
-  const {tenantName} = match.params;
-  const columnHeaders = ['Table Name', 'Reported Size', 'Estimated Size', 'Number of Segments', 'Status'];
-  const [fetching, setFetching] = useState(true);
-  const [tableData, setTableData] = useState<TableData>({
-    columns: columnHeaders,
-    records: []
-  });
-  const [brokerData, setBrokerData] = useState(null);
-  const [serverData, setServerData] = useState([]);
-
-  const fetchData = async () => {
-    const tenantData = await PinotMethodUtils.getTenantTableData(tenantName);
-    const brokersData = await PinotMethodUtils.getBrokerOfTenant(tenantName);
-    const serversData = await PinotMethodUtils.getServerOfTenant(tenantName);
-    setTableData(tenantData);
-    const separatedBrokers = Array.isArray(brokersData) ? brokersData.map((elm) => [elm]) : [];
-    setBrokerData(separatedBrokers || []);
-    const separatedServers = Array.isArray(serversData) ? serversData.map((elm) => [elm]) : [];
-    setServerData(separatedServers || []);
-    setFetching(false);
-  };
-  useEffect(() => {
-    fetchData();
-  }, []);
-
+  const { tenantName } = match.params;
   const classes = useStyles();
 
   return (
-    fetching ? <AppLoader /> :
-    <Grid item xs style={{ padding: 20, backgroundColor: 'white', maxHeight: 'calc(100vh - 70px)', overflowY: 'auto' }}>
+    <Grid
+      item
+      xs
+      style={{
+        padding: 20,
+        backgroundColor: 'white',
+        maxHeight: 'calc(100vh - 70px)',
+        overflowY: 'auto',
+      }}
+    >
       <div className={classes.operationDiv}>
-        <SimpleAccordion
-          headerTitle="Operations"
-          showSearchBox={false}
-        >
+        <SimpleAccordion headerTitle="Operations" showSearchBox={false}>
           <div>
             <CustomButton
-              onClick={()=>{console.log('rebalance');}}
+              onClick={() => {
+                console.log('rebalance');
+              }}

Review Comment:
   so this and the log below were already there. Probably just added because an `onClick` function is required. but I removed the console log.



-- 
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: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


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


Re: [PR] make all /size users render async [pinot]

Posted by "codecov-commenter (via GitHub)" <gi...@apache.org>.
codecov-commenter commented on PR #12210:
URL: https://github.com/apache/pinot/pull/12210#issuecomment-1872310282

   ## [Codecov](https://app.codecov.io/gh/apache/pinot/pull/12210?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
   All modified and coverable lines are covered by tests :white_check_mark:
   > Comparison is base [(`a200315`)](https://app.codecov.io/gh/apache/pinot/commit/a20031528da3c29371f3122eccf745061905a00d?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) 61.58% compared to head [(`d972586`)](https://app.codecov.io/gh/apache/pinot/pull/12210?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) 46.43%.
   > Report is 1 commits behind head on master.
   
   
   <details><summary>Additional details and impacted files</summary>
   
   
   ```diff
   @@              Coverage Diff              @@
   ##             master   #12210       +/-   ##
   =============================================
   - Coverage     61.58%   46.43%   -15.16%     
   + Complexity     1152      944      -208     
   =============================================
     Files          2414     1809      -605     
     Lines        131068    95158    -35910     
     Branches      20242    15352     -4890     
   =============================================
   - Hits          80722    44182    -36540     
   - Misses        44444    47826     +3382     
   + Partials       5902     3150     -2752     
   ```
   
   | [Flag](https://app.codecov.io/gh/apache/pinot/pull/12210/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Δ | |
   |---|---|---|
   | [custom-integration1](https://app.codecov.io/gh/apache/pinot/pull/12210/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [integration](https://app.codecov.io/gh/apache/pinot/pull/12210/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [integration1](https://app.codecov.io/gh/apache/pinot/pull/12210/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [integration2](https://app.codecov.io/gh/apache/pinot/pull/12210/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [java-11](https://app.codecov.io/gh/apache/pinot/pull/12210/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [java-21](https://app.codecov.io/gh/apache/pinot/pull/12210/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `46.43% <ø> (-15.01%)` | :arrow_down: |
   | [skip-bytebuffers-false](https://app.codecov.io/gh/apache/pinot/pull/12210/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `46.43% <ø> (-15.15%)` | :arrow_down: |
   | [skip-bytebuffers-true](https://app.codecov.io/gh/apache/pinot/pull/12210/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [temurin](https://app.codecov.io/gh/apache/pinot/pull/12210/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `46.43% <ø> (-15.16%)` | :arrow_down: |
   | [unittests](https://app.codecov.io/gh/apache/pinot/pull/12210/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `46.43% <ø> (-15.16%)` | :arrow_down: |
   | [unittests1](https://app.codecov.io/gh/apache/pinot/pull/12210/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `46.43% <ø> (-0.20%)` | :arrow_down: |
   | [unittests2](https://app.codecov.io/gh/apache/pinot/pull/12210/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   
   Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#carryforward-flags-in-the-pull-request-comment) to find out more.
   
   
   </details>
   
   [:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/apache/pinot/pull/12210?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).   
   :loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
   


-- 
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: commits-unsubscribe@pinot.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


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