You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kylin.apache.org by "Shaofeng SHI (JIRA)" <ji...@apache.org> on 2018/09/03 10:46:00 UTC

[jira] [Updated] (KYLIN-2973) Potential issue of not atomically update cube instance map

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

Shaofeng SHI updated KYLIN-2973:
--------------------------------
    Fix Version/s:     (was: v2.5.0)
                   Backlog

> Potential issue of not atomically update cube instance map
> ----------------------------------------------------------
>
>                 Key: KYLIN-2973
>                 URL: https://issues.apache.org/jira/browse/KYLIN-2973
>             Project: Kylin
>          Issue Type: Bug
>            Reporter: Zhong Yanghong
>            Assignee: Zhong Yanghong
>            Priority: Major
>             Fix For: Backlog
>
>
> P1
> {code}
>         try {
>             getStore().putResource(cube.getResourcePath(), cube, CUBE_SERIALIZER);
>         } catch (IllegalStateException ise) {
>             logger.warn("Write conflict to update cube " + cube.getName() + " at try " + retry + ", will retry...");
>             if (retry >= 7) {
>                 logger.error("Retried 7 times till got error, abandoning...", ise);
>                 throw ise;
>             }
>             cube = reloadCubeLocal(cube.getName());
>             update.setCubeInstance(cube);
>             retry++;
>             cube = updateCubeWithRetry(update, retry);
>         }
> {code}
> P2
> {code}
>         if (toRemoveResources.size() > 0) {
>             for (String resource : toRemoveResources) {
>                 try {
>                     getStore().deleteResource(resource);
>                 } catch (IOException ioe) {
>                     logger.error("Failed to delete resource " + toRemoveResources.toString());
>                 }
>             }
>         }
> {code}
> P3
> {code}
>         cubeMap.put(cube.getName(), cube);
> {code}
> There's a chance like:
> # Thread t1, goes into P2;
> # Then Thread t2, goes into P1, P2, P3; the cube instance in the map will be updated by t2
> # Then Thread t1 goes into P3; the cube instance in the map will be updated by t1, which is not correct



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)