From d94421e84c94bd0b8a17abcf05eb604007e20164 Mon Sep 17 00:00:00 2001 From: "Lam, Doris T (319E)" Date: Wed, 3 Feb 2021 17:54:17 -0800 Subject: [PATCH 1/5] mitigate cases where doc isn't found --- .../org/openmbee/mms/crud/services/NodeDeleteHelper.java | 3 +++ .../org/openmbee/mms/crud/services/NodeGetHelper.java | 8 ++++++++ .../org/openmbee/mms/crud/services/NodePostHelper.java | 7 ++++--- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/crud/src/main/java/org/openmbee/mms/crud/services/NodeDeleteHelper.java b/crud/src/main/java/org/openmbee/mms/crud/services/NodeDeleteHelper.java index 1e3bd75f3..59726d66f 100644 --- a/crud/src/main/java/org/openmbee/mms/crud/services/NodeDeleteHelper.java +++ b/crud/src/main/java/org/openmbee/mms/crud/services/NodeDeleteHelper.java @@ -27,6 +27,9 @@ public NodeChangeInfo processDeleteJson(List elements, CommitJson c info.addRejection(nodeId, new Rejection(indexElement, 304, "Already deleted")); continue; } + if (indexElement == null) { + indexElement = Map.of("id", nodeId); + } ElementJson request = info.getReqElementMap().get(nodeId); request.putAll(indexElement); processElementDeleted(request, node, info); diff --git a/crud/src/main/java/org/openmbee/mms/crud/services/NodeGetHelper.java b/crud/src/main/java/org/openmbee/mms/crud/services/NodeGetHelper.java index 611238ce4..adff40a3c 100644 --- a/crud/src/main/java/org/openmbee/mms/crud/services/NodeGetHelper.java +++ b/crud/src/main/java/org/openmbee/mms/crud/services/NodeGetHelper.java @@ -35,6 +35,10 @@ private NodeGetInfo processLatest(NodeGetInfo info, NodeService service) { continue; } ElementJson indexElement = info.getExistingElementMap().get(nodeId); + if (indexElement == null) { + rejectNotFound(info, nodeId); + continue; + } if (info.getExistingNodeMap().get(nodeId).isDeleted()) { rejectDeleted(info, nodeId, indexElement); continue; @@ -75,6 +79,10 @@ private NodeGetInfo processCommit(NodeGetInfo info, String commitId, NodeService continue; } ElementJson indexElement = info.getExistingElementMap().get(nodeId); + if (indexElement == null) { + rejectNotFound(info, nodeId); + continue; + } Instant modified = Instant.from(formatter.parse(indexElement.getModified())); Instant created = Instant.from(formatter.parse(indexElement.getCreated())); diff --git a/crud/src/main/java/org/openmbee/mms/crud/services/NodePostHelper.java b/crud/src/main/java/org/openmbee/mms/crud/services/NodePostHelper.java index 1410120cc..34ac00f3a 100644 --- a/crud/src/main/java/org/openmbee/mms/crud/services/NodePostHelper.java +++ b/crud/src/main/java/org/openmbee/mms/crud/services/NodePostHelper.java @@ -34,7 +34,7 @@ public boolean diffUpdateJson(BaseJson element, Map existing, String jsonModified = element.getModified(); Object existingModified = existing.get(BaseJson.MODIFIED); - if (jsonModified != null && !jsonModified.isEmpty()) { + if (jsonModified != null && !jsonModified.isEmpty() && existingModified != null) { try { Date jsonModDate = Formats.SDF.parse(jsonModified); Date existingModDate = Formats.SDF.parse(existingModified.toString()); @@ -72,8 +72,9 @@ public NodeChangeInfo processPostJson(List elements, boolean overwr added = true; } else if (indexElement == null) { logger.warn("node db and index mismatch on element update: nodeId: " + n.getNodeId() + ", docId not found: " + n.getDocId()); - info.addRejection(element.getId(), new Rejection(element, 500, "Update failed: previous element not found")); - continue; + //info.addRejection(element.getId(), new Rejection(element, 500, "Update failed: previous element not found")); + //continue; + indexElement = new ElementJson().setId(n.getNodeId()).setDocId(n.getDocId()); } if (!added) { From 2a2f911cea0704a18486f5b1b61e2b05b91d4f34 Mon Sep 17 00:00:00 2001 From: "Lam, Doris T (319E)" Date: Wed, 3 Feb 2021 19:57:28 -0800 Subject: [PATCH 2/5] ordering --- .../org/openmbee/mms/crud/services/NodeGetHelper.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crud/src/main/java/org/openmbee/mms/crud/services/NodeGetHelper.java b/crud/src/main/java/org/openmbee/mms/crud/services/NodeGetHelper.java index adff40a3c..e92f000eb 100644 --- a/crud/src/main/java/org/openmbee/mms/crud/services/NodeGetHelper.java +++ b/crud/src/main/java/org/openmbee/mms/crud/services/NodeGetHelper.java @@ -35,12 +35,12 @@ private NodeGetInfo processLatest(NodeGetInfo info, NodeService service) { continue; } ElementJson indexElement = info.getExistingElementMap().get(nodeId); - if (indexElement == null) { - rejectNotFound(info, nodeId); + if (info.getExistingNodeMap().get(nodeId).isDeleted()) { + rejectDeleted(info, nodeId, indexElement == null ? new ElementJson().setId(nodeId) : indexElement); continue; } - if (info.getExistingNodeMap().get(nodeId).isDeleted()) { - rejectDeleted(info, nodeId, indexElement); + if (indexElement == null) { + rejectNotFound(info, nodeId); continue; } if (service != null) { From 2e08cf5cd3f84b37794f3285f73ff721b33ce2b7 Mon Sep 17 00:00:00 2001 From: "Lam, Doris T (319E)" Date: Wed, 3 Feb 2021 21:11:46 -0800 Subject: [PATCH 3/5] add logs, attempt to find element if commit is given --- .../mms/crud/services/NodeDeleteHelper.java | 2 ++ .../mms/crud/services/NodeGetHelper.java | 19 +++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/crud/src/main/java/org/openmbee/mms/crud/services/NodeDeleteHelper.java b/crud/src/main/java/org/openmbee/mms/crud/services/NodeDeleteHelper.java index 59726d66f..98caddfc7 100644 --- a/crud/src/main/java/org/openmbee/mms/crud/services/NodeDeleteHelper.java +++ b/crud/src/main/java/org/openmbee/mms/crud/services/NodeDeleteHelper.java @@ -28,6 +28,8 @@ public NodeChangeInfo processDeleteJson(List elements, CommitJson c continue; } if (indexElement == null) { + logger.warn("node db and index mismatch on element delete: nodeId: " + nodeId + + ", docId not found: " + info.getExistingNodeMap().get(nodeId).getDocId()); indexElement = Map.of("id", nodeId); } ElementJson request = info.getReqElementMap().get(nodeId); diff --git a/crud/src/main/java/org/openmbee/mms/crud/services/NodeGetHelper.java b/crud/src/main/java/org/openmbee/mms/crud/services/NodeGetHelper.java index e92f000eb..8e1d3e777 100644 --- a/crud/src/main/java/org/openmbee/mms/crud/services/NodeGetHelper.java +++ b/crud/src/main/java/org/openmbee/mms/crud/services/NodeGetHelper.java @@ -40,6 +40,8 @@ private NodeGetInfo processLatest(NodeGetInfo info, NodeService service) { continue; } if (indexElement == null) { + logger.warn("node db and index mismatch on element get: nodeId: " + nodeId + + ", docId not found: " + info.getExistingNodeMap().get(nodeId).getDocId()); rejectNotFound(info, nodeId); continue; } @@ -80,8 +82,21 @@ private NodeGetInfo processCommit(NodeGetInfo info, String commitId, NodeService } ElementJson indexElement = info.getExistingElementMap().get(nodeId); if (indexElement == null) { - rejectNotFound(info, nodeId); - continue; + Node n = info.getExistingNodeMap().get(nodeId); + logger.warn("node db and index mismatch on element commit get: nodeId: " + nodeId + + ", docId not found: " + n.getDocId()); + Optional last = commitRepository.findByCommitId(n.getLastCommit()); + Optional first = commitRepository.findByCommitId(n.getInitialCommit()); + if (!last.isPresent() || !first.isPresent()) { + rejectNotFound(info, nodeId); + continue; + } + indexElement = new ElementJson().setId(nodeId).setDocId(n.getDocId()); + indexElement.setModified(formatter.format(last.get().getTimestamp())); + indexElement.setModifier(last.get().getCreator()); + indexElement.setCommitId(last.get().getCommitId()); + indexElement.setCreator(first.get().getCreator()); + indexElement.setCreated(formatter.format(first.get().getTimestamp())); } Instant modified = Instant.from(formatter.parse(indexElement.getModified())); Instant created = Instant.from(formatter.parse(indexElement.getCreated())); From 258c9fad363bfd6da4221f1e88aafebf2391ab36 Mon Sep 17 00:00:00 2001 From: "Lam, Doris T (319E)" Date: Wed, 3 Feb 2021 22:27:12 -0800 Subject: [PATCH 4/5] add in creator/created if previous not found on update --- .../org/openmbee/mms/crud/services/NodePostHelper.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/crud/src/main/java/org/openmbee/mms/crud/services/NodePostHelper.java b/crud/src/main/java/org/openmbee/mms/crud/services/NodePostHelper.java index 34ac00f3a..082b0db21 100644 --- a/crud/src/main/java/org/openmbee/mms/crud/services/NodePostHelper.java +++ b/crud/src/main/java/org/openmbee/mms/crud/services/NodePostHelper.java @@ -5,11 +5,13 @@ import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.UUID; import org.openmbee.mms.core.config.Formats; import org.openmbee.mms.core.objects.Rejection; import org.openmbee.mms.core.services.NodeChangeInfo; import org.openmbee.mms.core.services.NodeService; +import org.openmbee.mms.data.domains.scoped.Commit; import org.openmbee.mms.json.BaseJson; import org.openmbee.mms.json.CommitJson; import org.openmbee.mms.json.ElementJson; @@ -75,6 +77,11 @@ public NodeChangeInfo processPostJson(List elements, boolean overwr //info.addRejection(element.getId(), new Rejection(element, 500, "Update failed: previous element not found")); //continue; indexElement = new ElementJson().setId(n.getNodeId()).setDocId(n.getDocId()); + Optional init = commitRepository.findByCommitId(n.getInitialCommit()); + if (init.isPresent()) { + indexElement.setCreator(init.get().getCreator()); + indexElement.setCreated(formatter.format(init.get().getTimestamp())); + } } if (!added) { From e7e3781f756a639d0583d34c18e1bb14de3a3fe1 Mon Sep 17 00:00:00 2001 From: "Lam, Doris T (319E)" Date: Fri, 5 Feb 2021 10:28:58 -0800 Subject: [PATCH 5/5] add try catch on get all ref --- .../crud/controllers/branches/BranchesController.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/crud/src/main/java/org/openmbee/mms/crud/controllers/branches/BranchesController.java b/crud/src/main/java/org/openmbee/mms/crud/controllers/branches/BranchesController.java index 60e61318b..1c255e63c 100644 --- a/crud/src/main/java/org/openmbee/mms/crud/controllers/branches/BranchesController.java +++ b/crud/src/main/java/org/openmbee/mms/crud/controllers/branches/BranchesController.java @@ -45,8 +45,14 @@ public RefsResponse getAllRefs( if (!permissionService.isProjectPublic(projectId)) { List filtered = new ArrayList<>(); for (RefJson ref: res.getRefs()) { - if (mss.hasBranchPrivilege(auth, projectId, ref.getId(), Privileges.BRANCH_READ.name(), false)) { - filtered.add(ref); + try { + if (mss.hasBranchPrivilege(auth, projectId, ref.getId(), + Privileges.BRANCH_READ.name(), false)) { + filtered.add(ref); + } + } catch (MMSException e) { + logger.warn("error in getting branch permissions: projectId=" + + projectId + ", refId=" + ref.getId(), e); } } res.setRefs(filtered);