출근하자마자 메일에 불이 들어온 것을 확인하고 읽어보니
하나를 제외하고는 전부 예상한 플로우 에러였지만(오래된 필드로 개발서버에서만 발생)
기준일을 잡아서 이후 내용만 처리하는 부분이 아닌
처리되지 않은 품목들도 처리해야 한다는 메일을 받았다.
해당 내용에 대해 확인하고
요구사항에 대한 필드들을 확인했는데
key값이 존재하지 않아서 자동 처리는 힘들 것 같았고
그렇다고 수동으로 하자니 데이터가 지나치게 많았다.
해당 부분은 추가 문의 메일을 작성하는 것으로 넘어갔고
lock을 걸고 푸는 내용을 진행했다.
어제 언급했던 것 처럼 insert, delete, update trigger에서 모두 lock을 풀고 걸어야 했는데
해당 레코드의 Master가 존재했기 떄문에 해당 상위 레코드를 찾아서 풀고 다시 걸어야 해서
조금 더 복잡했고 3개의 트리거에 전부 반영해야 해서 조금 헷갈렸다.
과정은 아래 순서로 갈 것 같은데
각자 다른 트리거의 공통점을 찾아서 한번에 하고 싶지만
그냥 insert trigger부터 진행하고 해당 확인하기로 했다.
1.상위 레코드를 전부 쿼리로 가져온다
2.상위 레코드가 잠겨있는지 확인한다.
3.잠긴 레코드들을 담는 리스트에 넣어 보관한다.
4.dml 처리 하기 전 잠긴 레코드들을 잠금 해제한다
5.dml 처리를 진행한다(insert, update, delete trigger 내부)
6.dml 처리 후 풀었던 레코드들만 다시 잠군다
lock을 풀어준 다음에 확인해보니 에러가 다시 발생했다.
//lock 확인
// for(String id : xxIdList){
// if(Approval.isLocked(id)){
// xxLockedIdList.add(id);
// }
// }
//잠금해제 => update => 잠금
// Approval.UnLock(yyLockedIdList);
if(xxUpdateList.size() > 0){
update xxUpdateList;
}
// Approval.lock(yyLockedIdList);
에러 코드를 확인해보니 아래와 같이 출력되었는데
아무래도 권한 관련 문제 같았다.
“first error: INSUFFICIENT_ACCESS_OR_READONLY, insufficient access rights on object id: []”
권한을 확인해봐도 해당 직함의 사용자의 프로필은 crud 기능을 가지고 있는 상태였지만
Lock을 해제하기 위해서는 추가 권한이 필요해보였다.
lock의 시도는 정상적으로 처리하지만
lock 자체가 되지 않는 것을 확인했기 때문에
lock을 풀 수 있는 권한을 아무리 찾아봐도 쉽지 않았고
팀장님의 조언으로 without sharing을 추가하니 문제가 해결되었다.
하지만 그 부분이 그냥 되는게 이상하다는 말씀을 자꾸 하셨고
원래 기존 세팅이 있다고 하시면서 찾아보니 승인프로세스절차에서 관리자 허용을 해야
관리자 또는 모두수정일 경우 가능한 것 같았고
without sharing이라고 하더라도 승인프로세스절차에서 lock 관련 설정을 하지 않으면
lock 해제를 할 수 없고 관리자도 할 수 없다고 하니 주의가 필요하다.
(1).백준 15964번 이상한 함수는 (a+b)(a-b)를 해야 하는 문제였는데
해당 문제를 풀기 위해서 a^2 - b^2를 처리하면 됐고
문제의 제한을 모르기 때문에 BigInt로 처리했다.
const [a, b] = `4 3`.split(' ').map(BigInt)
const result = a**2n - b **2n
console.log(String(result))
'회고' 카테고리의 다른 글
| [개발일지] - 58(주말) (0) | 2023.08.27 |
|---|---|
| [개발일지] - 57(주말) (0) | 2023.08.26 |
| [개발일지] - 55 (0) | 2023.08.24 |
| [개발일지] - 54 (0) | 2023.08.23 |
| [개발일지] - 53 (0) | 2023.08.22 |
