[
https://issues.apache.org/jira/browse/ACCUMULO-3888?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14586533#comment-14586533
]
Josh Elser edited comment on ACCUMULO-3888 at 6/15/15 7:52 PM:
---------------------------------------------------------------
Was stewing on this last night and this morning. Instead of {{close()}} being a
noop, is it possible to make some new Thrift RPC that the scanner could
leverage to automatically remove the session from the SessionManager instead of
leaving it to expire on its own accord.
* When a Scanner talks to many tabletservers, the Scanner could close the
session on the previous server before it switches to the new server
* More RPCs, but more well-defined resource management
* Is at least one extra RPC a concern for all of the Scanners running over
{{accumulo.metadata}} as a part of normal operations?
* Would have to re-architect ScannerImpl and ScannerIterator a little bit to
get at the "current" or "last" tabletserver to implement {{close()}}
* Is returning {{ActiveScan}} s from {{getActiveScans}} for "old" scanners a
concern to begin with?
Any thoughts/discussion would be appreciated. I feel like this is a glaring
hole in our grasp on tserver resource management, but I'm also concerned that
it would be difficult to implement correctly w/o impacting performance.
was (Author: elserj):
Was stewing on this last night and this morning. Instead of {{close()}} being a
noop, is it possible to make some new Thrift RPC that the scanner could
leverage to automatically remove the session from the SessionManager instead of
leaving it to expire on its own accord.
* When a Scanner talks to many tabletservers, the Scanner could close the
session on the previous server before it switches to the new server
* More RPCs, but more well-defined resource management
* Is at least one extra RPC a concern for all of the Scanners running over
{{accumulo.metadata}} as a part of normal operations?
* Would have to re-architect ScannerImpl and ScannerIterator a little bit to
get at the "current" or "last" tabletserver to implement {{close()}}
* Is returning {{ActiveScan}}s from {{getActiveScans}} for "old" scanners a
concern to begin with?
Any thoughts/discussion would be appreciated. I feel like this is a glaring
hole in our grasp on tserver resource management, but I'm also concerned that
it would be difficult to implement correctly w/o impacting performance.
> getActiveScans should not eat TableNotFoundException
> ----------------------------------------------------
>
> Key: ACCUMULO-3888
> URL: https://issues.apache.org/jira/browse/ACCUMULO-3888
> Project: Accumulo
> Issue Type: Bug
> Components: client
> Reporter: Josh Elser
> Assignee: Josh Elser
> Priority: Critical
> Fix For: 1.8.0
>
>
> Noticed this awkwardness during integration tests running against a real
> cluster.
> {noformat}
> org.apache.accumulo.core.client.TableNotFoundException: Table (Id=r) does not
> exist
> at org.apache.accumulo.core.client.impl.Tables.getTableName(Tables.java:128)
> at
> org.apache.accumulo.core.client.impl.ActiveScanImpl.<init>(ActiveScanImpl.java:63)
> at
> org.apache.accumulo.core.client.impl.InstanceOperationsImpl.getActiveScans(InstanceOperationsImpl.java:138)
> at org.apache.accumulo.test.functional.ScanIdIT.testScanId(ScanIdIT.java:151)
> {noformat}
> The table from the previous test was deleted at the end of the test, but,
> somehow, a tabletserver returned an ActiveScan for that table. When the
> client tried to unwrap the table ID into a table name, it got a
> TableNotFoundException.
> Semantically, if a client is asking for active scans on a server, and the
> server reports a scan for a table the client doesn't think exists, it's
> reasonable to assume it was just deleted and not return that ActiveScan from
> the API call.
> Right now, this situation results in an exception back to the client and they
> get no results.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)