Странная работа штатного локера

Тема в разделе "Lotus - Программирование", создана пользователем fedotxxl, 20 авг 2010.

  1. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Возникла странная проблема, которую я не могу решить:
    1. Мы используем штатный блокиратор
    2. Если master сервер недоступен, то при исполнении обычного кода у пользователей могут возникать конфликты репликации.
    3. Все конфликтные документы заблокированы пользователями (поле $PTWriters)
    4. Повторить ошибку мне пока не удается, поэтому я не могу сказать какой код виноват
    5. Вероятность того, что документ кто-то поменял другой мала, т.к. между моментом открытия и нажатием на кнопку (которая приводит к конфликту) проходит достаточно мало времени

    Я заметил, что документ остается заблокированным пользователем, даже когда он выходит из документа. Как в этом случае контролировать разблокирование документа?
     
  2. alik86

    alik86 Lotus team
    Lotus team

    Регистрация:
    20 ноя 2008
    Сообщения:
    465
    Симпатии:
    0
    Я проверяю заблокирован ли документ через LockHolders property -- может и Вам поможет. Или не в ту степь?
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"У меня тоже недавно вылезла ситуация (вроде похожая):"</div></div><div class="sp-body"><div class="sp-content">
    Пользователь создает документ, при выполнении определённого действия программно создается еще некоторое количество документов-ответов, сохраняются, сохраняется и закрывается основной документ. При этом вылезла ситуация, что как основной так и подчиненные документы заблокировались создавшим его пользователем и там и остались. Правда на нескольких тысячах доков это вылезло лишь в 2-3х случаях, но как обычно у очень важного пользователя - у себя добиться такого результата не смог.
     
  3. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Ура! Удалось хотябы воспроизвести проблему. Итак:

    1. Недоступен master server
    2. На queryModeChange вызывается метод Call nd.UnLock

    При попытке сохранить документ вылетает сообщение о конфликтном документе.
    Кто что знает по поводу этой проблемы?
     
  4. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
  5. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Гм... не совсем это мне подходит... прочти плс более внимательно мою проблему
     
  6. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Все проблемы с блокировкой те же, тут более внимательно не прочитаешь ))

    Для того, чтобы это работало, желательно:
    Чтобы Master lock server всегда был доступен. Если нет, то отлавливать ошибку и выходить из QMCh + Вообще запрещать переводить в режим редактирования, если документ нельзя редактировать либо он заблокирован любой блокировкой не текущего процесса (Soft или Hard), тогда попросту не возникнет ситуации, когда пользователь может сохранить документ.
     
  7. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Стало самому интересно, и я прокатал эту ситуацию. Сразу же дико извиняюсь - ситуация действительно из ряда вон...

    Итак, что мы имеем, если описывать подробнее.

    Условие: Master-lock сервером установлен не текущий сервер.


    Ситуация 1: Master-lock сервер доступен.

    - Hard-lock выдаёт ошибку 4000 "You cannot update or delete the document(s) since you are not listed as an allowable Author for this document" как и было указано автором здесь, что странно, хотя в доке нет полей типа Author, но доступ к базе Editor и выше... Документ при этом не блокируется. Если можно как-то обойти - подскажите, плз!!!
    - Soft-lock работает нормально: создаются поля $Writers...
    - Если открывать док по Ctrl+E, то Soft-lock, естессно не срабатывает, т.е. на QMCh приходится вызывать Hard-lock, т.е. разблокировать документ при закрытии в этом случае приходится также вручную, что не красиво, но не есть проблема.


    Ситуация 2: Master-lock сервер НЕдоступен.

    - Hard-lock выбивает ошибку 4597, которую можно отловить и подавить, выдав нормальное сообщение.
    - Soft-lock выдаёт дебильное окошко
    [​IMG]
    Вывод этого окошка подавить не удастся (оно появляется перед QMCh, при даблклике по документу), но можно обойти.., чтобы при нажатии на ОК не было сообщения о том, что док изменён и избежать конфликта.

    Интересный факт №1: Soft-lock по нажатию OK всё-таки блокирует документ! Он сначала пытается найти Master-lock сервер, а затем блокирует на текущем.

    Интересный факт №2: при Soft-lock документ блокируется не полями $Writers, а полем $PTWriters! также было указано автором
    Свойство LockHolders при этом возвращает значение из этого поля.
    Метод Unlock также культурно подчищает это поле.

    Интересный факт №3: если включить отключенный Master-lock сервер и на нём ещё поизвращаться блокированием/разблокированием того же самого документа, а затем отреплицировать базу, то конфликтов не будет! Хоть что-то сделано хорошо...


    Итого:
    1. Возникновние конфликтов можно обойти.
    2. Hard-lock, если Master-lock сервер не текущий, не работает. Во втором случае это нормально, а вот в первом...

    Т.е. вывод прежний: если Master-lock сервер не является текущим, то строить систему на такой блокировке гиблое дело.
     
Загрузка...
Похожие Темы - Странная работа штатного
  1. acs-nexus
    Ответов:
    0
    Просмотров:
    386
  2. acs-nexus
    Ответов:
    0
    Просмотров:
    305
  3. acs-nexus
    Ответов:
    0
    Просмотров:
    425
  4. acs-nexus
    Ответов:
    0
    Просмотров:
    452
  5. acs-nexus
    Ответов:
    0
    Просмотров:
    446

Поделиться этой страницей