Github user ramkrish86 commented on a diff in the pull request:
https://github.com/apache/phoenix/pull/8#discussion_r16698962
--- Diff:
phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
---
@@ -664,14 +698,161 @@ private PTable getTable(RegionScanner scanner, long
clientTimeStamp, long tableT
} else {
addColumnToTable(results, colName, famName, colKeyValues,
columns, saltBucketNum != null);
}
+ }
+ byte[] tenIdBytes = QueryConstants.EMPTY_BYTE_ARRAY;
+ if (tenantId != null) {
+ tenIdBytes = tenantId.getBytes();
}
-
+ byte[] schNameInBytes = QueryConstants.EMPTY_BYTE_ARRAY;
+ if (schemaName != null) {
+ schNameInBytes = Bytes.toBytes(schemaName.getString());
+ }
+ PTableStats stats = updateStats(SchemaUtil.getTableKey(tenIdBytes,
schNameInBytes, tableNameBytes));
return PTableImpl.makePTable(tenantId, schemaName, tableName,
tableType, indexState, timeStamp,
tableSeqNum, pkName, saltBucketNum, columns, tableType ==
INDEX ? dataTableName : null,
indexes, isImmutableRows, physicalTables, defaultFamilyName,
viewStatement, disableWAL,
- multiTenant, viewType, viewIndexId, indexType);
+ multiTenant, viewType, viewIndexId, indexType, stats);
}
+ private PTableStats updateStats(final byte[] tableNameBytes) {
+ lock.readLock().lock();
+ try {
+ PTableStats stats =
tableStatsMap.get(Bytes.toString(tableNameBytes));
+ return stats;
+ } finally {
+ lock.readLock().unlock();
+ }
+ }
+
+ private void updateStatsInternal(byte[] tableNameBytes,
RegionCoprocessorEnvironment env)
--- End diff --
Then an updateStats would just need to invalidate the cache entry for
the table. Next time the table is accessed, the stats table would be re-read.
How about if we just read the stats anytime we re-load the PTable
So you mean when ever getTable() is called collect the udpateStats in a
seperate thread. If the stats was really changed then we would be returning
the new stats that was updated (after invalidation). Or you mean that when ever
we reload the table and populate the cache we do a scan of the STATS table and
get the updated stats info in the main thread only. The invalidation is done
only when the schema changes or index is removed/added which also means there
is no need for periodic scanning of stats table. Am i right here?
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---