You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2017/07/25 09:45:02 UTC

[15/24] kylin git commit: 1653 bugfix:remove the usage that delete resource first and then put.Use put without check (#1664)

1653 bugfix:remove the usage that delete resource first and then put.Use put without check (#1664)



Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/c53ef3f0
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/c53ef3f0
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/c53ef3f0

Branch: refs/heads/2.1.x
Commit: c53ef3f0a71ba085fb84917a55ded0f122cf9860
Parents: cfaeb7e
Author: Jiatao Tao <24...@qq.com>
Authored: Sun Jul 23 22:17:03 2017 -0500
Committer: Hongbin Ma <ma...@apache.org>
Committed: Mon Jul 24 12:47:39 2017 +0800

----------------------------------------------------------------------
 .../kylin/common/persistence/ResourceStore.java    | 17 +++++++++++++++++
 .../org/apache/kylin/rest/service/AclService.java  |  3 +--
 .../kylin/rest/service/AclTableMigrationTool.java  |  8 ++++----
 .../apache/kylin/rest/service/QueryService.java    |  8 ++++----
 .../org/apache/kylin/rest/service/UserService.java |  3 +--
 5 files changed, 27 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/c53ef3f0/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
----------------------------------------------------------------------
diff --git a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
index 997424b..ac29dc0 100644
--- a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
+++ b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
@@ -223,6 +223,23 @@ abstract public class ResourceStore {
     /**
      * overwrite a resource without write conflict check
      */
+    final public <T extends RootPersistentEntity> void putResourceWithoutCheck(String resPath, T obj, long ts,
+            Serializer<T> serializer) throws IOException {
+        resPath = norm(resPath);
+        logger.trace("Directly saving resource " + resPath + " (Store " + kylinConfig.getMetadataUrl() + ")");
+        ByteArrayOutputStream buf = new ByteArrayOutputStream();
+        DataOutputStream dout = new DataOutputStream(buf);
+        serializer.serialize(obj, dout);
+        dout.close();
+        buf.close();
+        ByteArrayInputStream is = new ByteArrayInputStream(buf.toByteArray());
+        putResourceCheckpoint(resPath, is, ts);
+        is.close();
+    }
+
+    /**
+     * overwrite a resource without write conflict check
+     */
     final public void putResource(String resPath, InputStream content, long ts) throws IOException {
         resPath = norm(resPath);
         logger.trace("Directly saving resource " + resPath + " (Store " + kylinConfig.getMetadataUrl() + ")");

http://git-wip-us.apache.org/repos/asf/kylin/blob/c53ef3f0/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java b/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java
index 79ed4aa..ac5d098 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/AclService.java
@@ -232,7 +232,6 @@ public class AclService implements MutableAclService {
         try {
             String id = getQueryKeyById(String.valueOf(mutableAcl.getObjectIdentity().getIdentifier()));
             AclRecord record = aclStore.getResource(id, AclRecord.class, SERIALIZER);
-            aclStore.deleteResource(id);
             if (mutableAcl.getParentAcl() != null) {
                 record.setParentDomainObjectInfo(new DomainObjectInfo(mutableAcl.getParentAcl().getObjectIdentity()));
             }
@@ -252,7 +251,7 @@ public class AclService implements MutableAclService {
                 AceInfo aceInfo = new AceInfo(ace);
                 allAceInfo.put(String.valueOf(aceInfo.getSidInfo().getSid()), aceInfo);
             }
-            aclStore.putResource(id, record, 0, SERIALIZER);
+            aclStore.putResourceWithoutCheck(id, record, System.currentTimeMillis(), SERIALIZER);
             logger.debug("ACL of " + mutableAcl.getObjectIdentity() + " updated successfully.");
         } catch (IOException e) {
             throw new InternalErrorException(e);

http://git-wip-us.apache.org/repos/asf/kylin/blob/c53ef3f0/server-base/src/main/java/org/apache/kylin/rest/service/AclTableMigrationTool.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/AclTableMigrationTool.java b/server-base/src/main/java/org/apache/kylin/rest/service/AclTableMigrationTool.java
index bb07c22..fe91f52 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/AclTableMigrationTool.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/AclTableMigrationTool.java
@@ -130,8 +130,8 @@ public class AclTableMigrationTool {
                         record.setOwnerInfo(getOwnerSidInfo(result));
                         record.setEntriesInheriting(getInheriting(result));
                         record.setAllAceInfo(getAllAceInfo(result));
-                        store.deleteResource(AclService.getQueryKeyById(object.getId()));
-                        store.putResource(AclService.getQueryKeyById(object.getId()), record, 0, AclService.SERIALIZER);
+                        store.putResourceWithoutCheck(AclService.getQueryKeyById(object.getId()), record,
+                                System.currentTimeMillis(), AclService.SERIALIZER);
                         result = rs.next();
                     }
                 }
@@ -148,8 +148,8 @@ public class AclTableMigrationTool {
                     Result result = rs.next();
                     while (result != null) {
                         ManagedUser user = hbaseRowToUser(result);
-                        store.deleteResource(UserService.getId(user.getUsername()));
-                        store.putResource(UserService.getId(user.getUsername()), user, 0, UserService.SERIALIZER);
+                        store.putResourceWithoutCheck(UserService.getId(user.getUsername()), user,
+                                System.currentTimeMillis(), UserService.SERIALIZER);
                         result = rs.next();
                     }
                 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/c53ef3f0/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java b/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
index f3402ef..4061c82 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
@@ -186,8 +186,8 @@ public class QueryService extends BasicService {
         queries.add(query);
         Query[] queryArray = new Query[queries.size()];
         QueryRecord record = new QueryRecord(queries.toArray(queryArray));
-        queryStore.deleteResource(getQueryKeyById(creator));
-        queryStore.putResource(getQueryKeyById(creator), record, 0, QueryRecordSerializer.getInstance());
+        queryStore.putResourceWithoutCheck(getQueryKeyById(creator), record, System.currentTimeMillis(),
+                QueryRecordSerializer.getInstance());
         return;
     }
 
@@ -210,8 +210,8 @@ public class QueryService extends BasicService {
         }
         Query[] queryArray = new Query[queries.size()];
         QueryRecord record = new QueryRecord(queries.toArray(queryArray));
-        queryStore.deleteResource(getQueryKeyById(creator));
-        queryStore.putResource(getQueryKeyById(creator), record, 0, QueryRecordSerializer.getInstance());
+        queryStore.putResourceWithoutCheck(getQueryKeyById(creator), record, System.currentTimeMillis(),
+                QueryRecordSerializer.getInstance());
         return;
     }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/c53ef3f0/server-base/src/main/java/org/apache/kylin/rest/service/UserService.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/UserService.java b/server-base/src/main/java/org/apache/kylin/rest/service/UserService.java
index 6682c03..16fafa3 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/UserService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/UserService.java
@@ -82,9 +82,8 @@ public class UserService implements UserDetailsManager {
         Preconditions.checkState(user instanceof ManagedUser, "User {} is not ManagedUser", user);
         ManagedUser managedUser = (ManagedUser) user;
         try {
-            deleteUser(user.getUsername());
             String id = getId(user.getUsername());
-            aclStore.putResource(id, managedUser, 0, SERIALIZER);
+            aclStore.putResourceWithoutCheck(id, managedUser, System.currentTimeMillis(), SERIALIZER);
             logger.trace("update user : {}", user.getUsername());
         } catch (IOException e) {
             throw new InternalErrorException(e);