[
https://issues.apache.org/jira/browse/GEODE-8405?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17339026#comment-17339026
]
ASF GitHub Bot commented on GEODE-8405:
---------------------------------------
pdxcodemonkey commented on pull request #800:
URL: https://github.com/apache/geode-native/pull/800#issuecomment-831982865
> Sending GET_CLIENT_PR_METADATA to a server for a replicated region
generated an EXCEPTION response message, which the native client would then
ignore. Convention in the Java client is to check for a bucket count of -1,
indicating replicated region, and skip the metadata request in that case.
>
> @gaussianrecurrence
> I wonder if it's best to add this behaviour to enqueueForMetadataRefresh
instead. Maybe that function could be refactored, so instead of accepting the
full path, it accepts the region object. This way it can be check if the region
is partitioned or replicated. And if replicated, then don't add the request to
the queue.
Given the complexity of our dependency graph, I'm reluctant to pass around
yet another reference to a `region` object that must be accounted for at
shutdown, esp to a thread with dubious timing like the metadata service. We
could, however, potentially save some network traffic by storing a map of
region name to server region type in `ClientMetadataService` *if* we knew it
was not possible for server region type to change "on the fly".
@pivotal-jbarrett do you know if this is the case? If so, we could save the
server region type and never send GET_CLIENT_PARTITION_ATTRIBUTES for a known
region with replicated type. I also wonder if the optimization is worth the
effort, though, since metadata refresh isn't intended to be a high-frequency
event.
--
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:
[email protected]
> Native Client asks for metadata for replicated region, causes server exception
> ------------------------------------------------------------------------------
>
> Key: GEODE-8405
> URL: https://issues.apache.org/jira/browse/GEODE-8405
> Project: Geode
> Issue Type: Bug
> Components: native client
> Reporter: Blake Bender
> Priority: Major
> Labels: pull-request-available
>
> For some reason, Geode Native is not checking region attributes on the server
> prior to issuing a GET_CLIENT_PR_METADATA message. It does, in fact, get the
> region attributes from the server, as you can see from this message dump:
> {code:java}
> {
> "Timestamp": "2020-08-05 15:37:42.595294",
> "Connection": "0x7fb1f89042d0",
> "Direction": "--->",
> "Type": "GET_CLIENT_PARTITION_ATTRIBUTES",
> "Length": 22,
> "Parts": 1,
> "TransactionId": -1,
> "SecurityFlag": 0,
> "RegionPart": {
> "Size": 17,
> "IsObject": 0,
> "Name": "/example_userinfo"
> }
> }
> ,{
> "Timestamp": "15:37:42.595590",
> "Connection": "0",
> "Direction": "<---",
> "Type": "RESPONSE_CLIENT_PARTITION_ATTRIBUTES",
> "Length": 35,
> "Parts": 2,
> "TransactionId": -1,
> "SecurityFlag": 0,
> "BucketCount": {
> "Size": 5,
> "IsObject": 1,
> "Data":{
> "DSCode": "CacheableInt32",
> "Value": -1
> }
> },
> "ColocatedWith": {
> "Size": 20,
> "IsObject": 1,
> "Data":{
> "DSCode": "CacheableASCIIString",
> "StringLength": 17,
> "Value": "/example_userinfo"
> }
> }
> }
> {code}
>
> The critical value here is `BucketCount` in the
> `RESPONSE_CLIENT_PARTITION_ATTRIBUTES` message. If this value is -1, the
> region is replicated rather than partitioned, and we should not be querying
> for PR metadata.
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)