‘다른 창에서 초안을 편집 중입니다’ 경고 표시 빈도 줄이기

안녕하세요.

저는 Discourse 포럼(BlenderArtists.org)의 회원이며, 두 개의 포럼 페이지를 나란히 배치할 수 있는 4K 모니터를 사용하고 있습니다.

가끔 긴 댓글을 작성할 계획일 때, 현재 긴 스레드에서 여러 인용을 포함해 답변을 준비하면서 왼쪽 페이지에 메시지 편집기를 열고 오른쪽 페이지에서 같은 스레드를 탐색합니다.

그러면 다음과 같은 메시지가 매우 자주 표시됩니다:

초안이 다른 창에서 편집 중입니다. 이 페이지를 다시 불러오세요.

저는 이 경고에 반대하지 않습니다(일정한 상황에서 유용하다고 확신합니다).

하지만 사용자 설정에 이 경고를 비활성화할 수 있는 옵션을 추가할 수 있을까요? 아니면 표시 빈도(타이머)를 설정할 수 있을까요?

이 경고 메시지는 편안하게 메시지를 작성하는 것을 방해합니다.

이 옵션을 추가하는 것을 검토해 주시면 감사하겠습니다.

5개의 좋아요

죄송합니다. 이 건에 대한 지원 요청이 너무 많아서 일부러 계속 안내하고 있습니다. 매우 위험한 워크플로우이며, 게시물을 전부 잃을 수 있습니다.

잠깐, 실제로 두 곳에서 편집하고 있는 건가요? 정확한 재현 방법을 알려주세요.

단순히 파일을 열고 둘러보는 것만으로는 이 경고가 표시되지 않아야 합니다. 두 개의 창에서 동시에 편집 중이시겠네요.

1개의 좋아요

주제를 입력하면 자동으로 (시도하여) 초안을 편집하도록 열립니다. 바로 작성기를 최소화하더라도 여전히 활성화되어 있고 충돌이 발생합니다.

4개의 좋아요

네, 저도 이런 상황을 겪어봤습니다. 발생하면 확실히 짜증나지만, 제프의 의견에 동의합니다. 과거의 문제들 때문에 여기서 신중해야 합니다.

제 해결 방법은 보통 해당 주제를 두 개의 탭에서 여는 것입니다. 그리고 두 탭 모두 로드된 후에야 작성을 시작합니다.

1개의 좋아요

이것은 분명히 버그입니다. 가드는 사용자가 타이핑을 시작할 때만 작동해야 합니다.

3개의 좋아요

좋아요, 재현할 수 있으면 수정할 수 있겠네요.

저도 초안이 자동으로 열리는 문제로 인해 곤란을 겪었습니다. 하지만 단순히 경고 메시지가 표시되는 것보다 상황이 더 나쁩니다. 게시글 작성으로 돌아가다가 나중에 팝업이 나타나 제 2의 탭에 있는 더 오래된 초안으로 돌아가라고 안내하는 경우가 있습니다. 그 시점에서 페이지를 새로고침하면 제 초안의 더 오래된 버전만 표시되므로, 이 기능은 본래 방지하려는 문제를 실제로 방지하지 못하고 있다고 볼 수 있습니다.

타이핑을 시작하기 전에 발생하는지 확실하지 않습니다. 메타(Meta)에서 재현을 시도해 보았더니, 두 번째 탭에서 타이핑을 시작할 때만 발생했습니다. 저는 작성 중인 내용을 교차 참조하기 위해 탭을 복제하는 직후 이 문제를 일으키는 경향이 있습니다. 어느 탭에서 시작했는지 혼동하다가 실수로 두 번째 탭에서 타이핑을 시작하면 경고가 나타납니다.

다른 탭에서 이미 해당 주제에 대한 작성 창이 열려 있는지 감지하고, 그렇다면 새 탭에서는 작성 창을 열지 않도록 하는 것이 가능하거나 합리적일까요?

4개의 좋아요

정말 너무 복잡한 문제입니다… 웹 워커(web workers)로 뭔가 할 수 있을지 모르겠지만, 제가 하고 싶지 않은 엄청난 변경 사항입니다.

정확한 단계별 재현 방법을 알려주세요. 우리의 경고는 매우 초기 단계에서 작동하므로, 최악의 경우에도 몇 단어만 잃을 수 있습니다. 오프라인 상태라면 상황이 이상해질 수 있겠지만, 그것은 매우 큰 엣지 케이스입니다… 우회 방법은 잘라내기-붙여넣기입니다.

방금 OP(원글)를 확인해 보았습니다.

이 문제를 재현할 수 없습니다. 이 잘못된 메시지로 이어지는 정확한 단계를 제공해 주실 수 있나요? 편집 중이 아니라면, 이 메시지가 arguably(논쟁의 여지 없이) 잘못 표시되는 것은 1가지의 엣지 케이스뿐입니다. 하지만 그것은 매우 사소한 엣지 케이스입니다.

  1. 탭 1을 엽니다 … 답변 작성을 시작합니다
  2. 탭 2를 엽니다 … 여기저기 둘러봅니다
  3. 탭 1에서 … 작성을 계속합니다
  4. 탭 2에서 … 작성기를 최소화합니다 (경고 메시지가 나타납니다… 하지만 한 번만)

당신을 혼란스럽게 할 수 있는 일이 발생할 수 있습니다:

  1. 탭 1을 엽니다 … 답변 작성을 시작합니다
  2. 탭 2를 엽니다 … 실수로 답변을 위해 무언가를 인용합니다
  3. 탭 1에서 … 작성을 계속합니다 … 경고가 있습니다 … 지속적으로 (우리가 (2)의 인용을 폐기하게 되기 때문)

여기서 무엇을 수정해야 할지 확신이 서지 않습니다… 재현 방법을 필요로 합니다.

1개의 좋아요

저도 상당한 양의 콘텐츠를 잃어버린 적이 분명히 있습니다. 하지만 그 이유 때문에 이 경고를 트리거하지 않도록 주의해 왔기 때문에, 지금은 상당한 손실이 발생했던 정확한 단계를 기억하지 못합니다.

이것이 초안을 저장하면서 탭 1에서 작성한 내용을 덮어쓰는 것이 문제일 수 있다고 생각합니다. 만약 그렇게 된다면 상당한 양의 콘텐츠가 손실될 수 있습니다. 지금은 추측에 불과하지만, 그렇게 해서 문제를 재현해 볼 수 있는지 확인해 보고 알려드리겠습니다.

그럴 수 없습니다. 제발… 재현 사례가 필요합니다… 초안이 저장될 때마다 충돌 변경 테스트가 수행됩니다.

상당한 콘텐츠 손실에 대한 단계별 재현 사례가 필요합니다

1개의 좋아요

재현 단계를 필요로 한다는 점을 이해합니다. 내일 밤에 확인하기 위해 리마인더를 설정해 두었습니다 (:tada:). 충돌 테스트가 어떻게 작동하는지(대략적인 수준에서) 알면 도움이 될 것 같습니다. 페이지 로드 시 고유 식별자가 생성되거나, 그런 방식인가요?

각 초안은 고유한 id를 통해 작성자와 강하게 연결됩니다. 이 id는 오직 앞으로만 진행됩니다.

그게 무슨 뜻인가요?

요약하자면, 레이스 컨디션이 발생하여 두 명의 작곡가가 동일한 사용자의 동일한 주제에 응답하는 경우, 항상 한 명만 성공합니다. 저장할 때마다 소유자가 하나씩 선택됩니다.

1개의 좋아요

알겠습니다 @sam, 재현 단계를 확보했습니다. 이 문제가 원포스터(OP)의 원래 이슈와 관련이 있는지 확신은 없지만(이 대화가 약간 다른 방향으로 흘러갔기 때문에), 어쨌든 제가 확인한 내용은 다음과 같습니다. 기본적으로, 탭 2를 열되 탭 2가 완전히 로드되기 전에 탭 1에서 계속 입력하면 새 페이지가 잘못된 상태로 전환됩니다. 탭 2가 로딩 중인 동안 탭 1에서 계속 입력하면, 탭 2는 페이지가 열렸을 때의 탭 1 초안 상태로 로드되지만, 탭 1이 추가 변경 사항을 저장한 후에도 탭 2에서 여전히 편집할 수 있게 됩니다(이로 인해 해당 변경 사항이 덮어써집니다). 재현 단계는 다음과 같습니다:

  1. 주제 A를 열고 답글 작성을 시작합니다.
  2. 입력을 멈추어 초안이 저장되도록 합니다.
  3. 새 탭에서 주제 A를 엽니다(탭 복제 또는 주제 제목에 우클릭/중간 클릭하는 것이 전체 페이지 로딩을 수행해야 하므로 더 느리지만 재현하기에 가장 쉬운 방법입니다).
  4. 즉시 탭 2가 로딩을 완료하기 전에 탭 1에서 답글 작성을 계속합니다.
  5. 입력을 멈추어 초안이 다시 저장되도록 합니다(예상대로 이 작업은 성공합니다).
  6. 탭 2로 이동하여 작성기에 입력합니다.
  7. 입력을 멈춥니다. 경고가 표시되어야 하지만, 초안이 저장됩니다. 이는 4단계에서 탭 1에 추가한 모든 변경 사항을 덮어씁니다. (예상대로 경고가 표시되었다면 4단계에서 입력을 시작하기까지 너무 오래 기다린 것입니다.) 이 시점에서 해당 탭을 새로 고치지 않으면 탭 1에서도 다시 입력할 수 없음을 유의하십시오.

4단계에서 탭 2가 로딩을 완료하기 전에 입력을 멈추고 초안을 저장할 필요가 없다는 점에 유의하십시오. 단순히 입력을 시작하는 것만으로도 모든 것이 잘못된 상태로 전환됩니다. 나중에 확인하기 위해 백그라운드에서 탭을 복제하고 그 사이에 탭 1에서 계속 입력하는 것은 비합리적이지 않은 행동입니다. 그러나 이를 너무 빨리 수행하면 탭이 잘못된 상태로 전환되어 탭 1에 추가한 내용을 실수로 덮어쓸 수 있습니다. 물론 작성기를 최소화해도 초안이 저장되므로, 이 잘못된 상태에 빠진 후 탭 2에서 작성기를 최소화하여 화면에서 치워버리는 것만으로도 탭 1의 최신 초안이 덮어써집니다.

이 시점에서 원래 메시지를 작성하던 탭 1로 돌아가면 더 이상 입력할 수 없으며, 탭 2에 표시되어야 했던 경고가 표시됩니다. 초안이 사라졌다는 것을 깨달았다면, 물론 탭 1의 작성기 내용을 복사할 수 있습니다. 하지만 이를 인지하지 못하고 페이지를 새로 고침(경고의 지시에 따름)하면, 자신이 만든 변경 사항을 잃어버리게 되며 이를 되돌릴 방법이 없습니다.

이 단계로 문제를 재현하는 데 여전히 어려움이 있다면 알려주세요. 이 단계를 따르면 문제를 꽤 일관되게 재현할 수 있습니다(새로운 주제로 전환하여 새 초안을 얻는 경우가 간혹 있음), 따라서 hopefully 이 정보가 충분할 것입니다.

10개의 좋아요

네, 여기서 수정 사항을 올립니다:

재현해 주셔서 정말 감사합니다. 스펙터클한 재현 덕분에 문제를 빠르게 분리할 수 있었습니다.

초안 버전을 어떻게 추적하는지에 대해 제가 다소 모호한 답변을 드린 것 같습니다. 알고리즘이 너무 단순하면서도 동시에 지나치게 복잡하게 설계된 것이 원인이었던 것 같습니다. 이는 치명적인 조합이죠. 새로운 알고리즘은 훨씬 설명하기 쉽습니다.

  • 클라이언트가 초안을 저장할 때, 서버에 현재 가지고 있는 "시퀀스 번호"를 알려줍니다.

  • 시퀀스 번호가 일치하면, 서버는 시퀀스 번호를 1 증가시켜 클라이언트에 반환합니다(새로운 시퀀스 번호).

  • 시퀀스 번호가 일치하지 않으면, 서버는 클라이언트에 충돌이 발생했다고 알리고 초안을 저장하지 않습니다.

  • 페이지를 새로고침하거나 로드할 때, 서버는 클라이언트에 현재 시퀀스 번호를 알려줍니다.

이전 구현 방식은 너무 복잡했습니다. 시퀀스의 소유자를 추적함으로써 많은 조건에서 시퀀스 번호 증가를 피하려 했기 때문입니다. 여러분의 테스트 케이스가 그 방식이 얼마나 위험한지, 그리고 어떻게 콘텐츠 손실을 초래할 수 있는지를 보여 주었습니다.

이 변경 사항은 메타에 배포되어야 합니다. 이 시스템에서 더 많은 엣지 케이스를 발견할 수 있다면 알려 주세요.

10개의 좋아요

@seanblue 정말 큰 칭찬이네요. 이번 작업에 대해 자부심을 가져도 될 것 같습니다 :tada:

4개의 좋아요

meta에서도 동일한 문제를 겪고 있습니다:

  • 작성기(composer)를 열고 제목을 입력했습니다.
  • 이 버그에 대한 스크린샷을 찍으려고 "새 주제"를 "새 메시지"로 변경했습니다.
  • 주제를 다시 변경할 수 없어서 주제(즉, 메시지)를 취소했습니다.
  • 새 주제를 다시 시작했습니다.

경고 메시지가 잘못 표시되었습니다(이미 메시지를 취소했음에도):

이제 "포기"를 선택하더라도 10~20초마다 이 메시지가 계속 표시됩니다:

그런데 다른 탭은 없습니다.

이 문제는 주제에서 메시지로 변경할 때만 발생합니다. 메시지 취소가 실제로 취소되지 않는 것 같습니다.

2개의 좋아요

이 작업에는 꽤 많은 노력이 필요하며, 브라우저에서 탭을 계속 오가야 하지만, 어쨌든 … 이 경우 abandon(포기) 기능이 실제로 동작하지 않고 있습니다. 이 문제를 수정해야 합니다.

5개의 좋아요