You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by "Yingyi Bu (JIRA)" <ji...@apache.org> on 2017/06/21 21:26:00 UTC

[jira] [Closed] (ASTERIXDB-1947) Revisit thread safety in FileMapManager

     [ https://issues.apache.org/jira/browse/ASTERIXDB-1947?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Yingyi Bu closed ASTERIXDB-1947.
--------------------------------
    Resolution: Fixed

> Revisit thread safety in FileMapManager
> ---------------------------------------
>
>                 Key: ASTERIXDB-1947
>                 URL: https://issues.apache.org/jira/browse/ASTERIXDB-1947
>             Project: Apache AsterixDB
>          Issue Type: Improvement
>          Components: STO - Storage
>            Reporter: Yingyi Bu
>            Assignee: Abdullah Alamoudi
>
> Synchronizations on FileMapManager (e.g., synchronized register/unregister, and ConcurrentHashMap for id2namemap and name2idmap) is added in change https://asterix-gerrit.ics.uci.edu/#/c/1840/.
> However,  this class seems 50%-baked -- there are some synchronizations but there could be inconsistency between id2nameMap and name2IdMap.  For example, register/unregister
> are not atomic -- a caller can lookupFileId(...) while the file hasn't fully registered or unregistered, and possibly open an non-existent file?
> I think we probably don't want thread-safety for FileMapManager at all, since the call sites anyway has to orchestrate multiple steps and make sure the bigger block is synchronized:
> E.g. BufferCache.openFile(...):
> {noformat}
> synchronized (fileInfoMap) {
>             if (fileMapManager.isMapped(fileRef)) {
>                 fileId = fileMapManager.lookupFileId(fileRef);
>             } else {
>                 fileId = fileMapManager.registerFile(fileRef);
>             }
>             openFile(fileId);
>         }
>         return fileId;
> {noformat}
> Even if FileMapManager is thread-safe, it doesn't help and you still have to synchronized on the big block to make sure atomicity of the sequence of isMapped/lookup/register.  Most call sites have a similar pattern.  Thoughts?



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)