[
https://issues.apache.org/jira/browse/PHOENIX-2119?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15098662#comment-15098662
]
James Taylor commented on PHOENIX-2119:
---------------------------------------
[~samarthjain] - would you have some spare cycles for this one? It's pretty
straightforward and will help our ReadOnlyDatabase use case. The fix would be
isolated in ReadOnlyProps and here's what would be required:
- Define a new member variable in ReadOnlyProps such as overrideProps that
would define a nested ReadOnlyProps for overrides.
- In the private ReadOnlyProps(ReadOnlyProps defaultProps, Properties
overrides) constructor, instead of creating a new flattened Map with the
overrides (which is expensive because the defaultProps can be quite large),
create a new ReadOnlyProps with just the overrides and set the new member
overrideProps variable.
{code}
private ReadOnlyProps(ReadOnlyProps defaultProps, Properties overrides) {
Map<String,String> combinedProps =
Maps.newHashMapWithExpectedSize(defaultProps.props.size() + overrides.size());
combinedProps.putAll(defaultProps.props);
for (Entry<Object, Object> entry : overrides.entrySet()) {
String key = entry.getKey().toString();
String value = entry.getValue().toString();
combinedProps.put(key, value);
}
this.props = ImmutableMap.copyOf(combinedProps);
}
{code}
- In the ReadOnlyProps.getRaw() method, if overrideProps is non null, call
getRaw() on that first. If null, then proceed with existing logic.
- Make sure we have some test coverage of this in new ReadOnlyPropsTest or
existing PhoenixDriverTest.
This will prevent us from making a copy of a very large map on every new
connection (because at SFDC, it turns out we always have override props that
pass in the org iD).
> Do not copy underlying HBase configuration properties when connection
> properties are supplied
> ---------------------------------------------------------------------------------------------
>
> Key: PHOENIX-2119
> URL: https://issues.apache.org/jira/browse/PHOENIX-2119
> Project: Phoenix
> Issue Type: Improvement
> Reporter: James Taylor
> Labels: ReadOnlyDB, SFDC
>
> Related to PHOENIX-1958, we can avoid copying the underlying HBase
> configuration properties when connection properties are supplied by keeping
> an override maps on ConnectionQueryServices. In this case, a ReadOnlyProperty
> get will be first done on the override map and then subsequently on the
> base/shared map for the HBase configuration properties.
> The reason to do this is because some applications always provide connection
> properties (usually for custom annotations that identify the tenant and
> request) and the memory overhead of copying *all* properties is too high.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)