Как избежать конфликтов при кластерной репликации

Тема в разделе "Lotus - Программирование", создана пользователем anvarikus, 12 окт 2007.

Статус темы:
Закрыта.
  1. anvarikus

    anvarikus Гость

    Доброе время суток. В ходе разработки стала проблема, а как же все таки избежать конфликтов..
    Ситуация такая.. Имеется два сервера в кластере, возможно и третий добавится... Статусы документов (Платежей) должны фиксироваться в главном документе (Договоре), + агент должен прокладывать данные из ERP в главный документ (Договор).. То есть фоновых сохранения главного документа не избежать, а соотв-но конфликтов... Хотел сделать защиту с помощью Lock / UnLock .. но тут вопросы появляются...

    Или если пользователь заблокировал документы и не смог корректно их разблокировать. Лотус например глюканул и вылетел... Можно ли получить коллекцию заблокированных доков для быстрого восстановления. Или как лучше поступить в таком случае.

    как блокировка работает в кластерах? будет ли заблокированный документ на одном из серверов заблокированным на другом сервере кластера. Или блокировка действует только на текущем сервере.

    не будет ли перезапись данных, занесенных агентом в случае если произошло примерно следующее
    1) Пользователь на сервере А открыл документ для редактирования и начал изменять документ
    2) агент на сервере Б изменил данные и произошла репликация
    3) что будет с документом, который редактировал пользователь. Он затрёт изменения сделанные агентом или, агент на сервере Б увидит, что документ заблокирован на сервере А и изменять его не будет..

    В общем вопросов много, ответов мало... Если кто сталкивался с подобным может поделитесь советом.
    Спасибо за помощь :D
     
  2. Ronchik

    Ronchik Гость

    <!--QuoteBegin-anvarikus+12:10:2007, 07:50 -->
    <span class="vbquote">(anvarikus @ 12:10:2007, 07:50 )</span><!--QuoteEBegin-->Или если пользователь заблокировал документы и не смог корректно их разблокировать. Лотус например глюканул и вылетел... Можно ли получить коллекцию заблокированных доков для быстрого восстановления. Или как лучше поступить в таком случае.
    [snapback]81495" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    делаеться агент по разблокировке документов
    Код (Text):
    If Len(Source.Document.LockHolders(0))>0 Then Call Source.Document.UnLock
    условие что документ залочен<!--QuoteBegin-anvarikus+12:10:2007, 07:50 -->
    <span class="vbquote">(anvarikus @ 12:10:2007, 07:50 )</span><!--QuoteEBegin-->не будет ли перезапись данных, занесенных агентом в случае если произошло примерно следующее
    1) Пользователь на сервере А открыл документ для редактирования и начал изменять документ
    2) агент на сервере Б изменил данные и произошла репликация
    3) что будет с документом, который редактировал пользователь. Он затрёт изменения сделанные агентом или, агент на сервере Б увидит, что документ заблокирован на сервере А и изменять его не будет..
    [snapback]81495" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    данную ситуацию нужно прорабатывать кодом.....
     
  3. anvarikus

    anvarikus Гость

    Для: Ronchik

    Я понимаю что можно разблокировать конкретно выбранный документ

    Код (Text):
    If Len(Source.Document.LockHolders(0))>0 Then Call Source.Document.UnLock
    Я спрашиваю как получить коллекцию залоченных доков... Без перебора всех доков.. +не факт что в эту коллекцию не попадут корректно залоченные доки, которые разлочить крайне не рекомендуется.

    и на счет второго... Может я не в курсе, но как программно отследить процесс репликации... ведь в описанной выше ситуации затирание данных сделанных агентом будет происходить в процессе репликации, а не выполнения кода... Или Вы имеете в виду "проработать кодом" еще во время выполнения агентом... Если да, то как раз всплывает вопрос о том, можно ли узнать, залочен ли док на другом сервере кластера или нет...
     
  4. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--QuoteBegin-anvarikus+12:10:2007, 09:55 -->
    <span class="vbquote">(anvarikus @ 12:10:2007, 09:55 )</span><!--QuoteEBegin-->Я спрашиваю как получить коллекцию залоченных доков... Без перебора всех доков.. +не факт что в эту коллекцию не попадут корректно залоченные доки, которые разлочить крайне не рекомендуется.
    [snapback]81505" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    У заблокированных документов есть непустое поле $Writers. Отбирай в представлении. Представление будет правильно работать только на сервере блокировки.
     
  5. anvarikus

    anvarikus Гость

    Для: Medevic

    Во..Точно.. Так. с разблокировкой наполовину понятно...
    но это опять же, не позволяет определить - корректен ли документ и заблокирован в данный момент пользователем для работы, или нужно вмешиваться агентом и разблокировать документ...

    Или просто админу фичу сделать, чтобы в случае жалоб все документы разом разблокировать можно было.
     
  6. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--QuoteBegin-anvarikus+12:10:2007, 10:11 -->
    <span class="vbquote">(anvarikus @ 12:10:2007, 10:11 )</span><!--QuoteEBegin-->но это опять же, не позволяет определить - корректен ли документ и заблокирован в данный момент пользователем для работы, или нужно вмешиваться агентом и разблокировать документ...
    [snapback]81508" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Никак не определить.

    <!--QuoteBegin-anvarikus+12:10:2007, 10:11 -->
    <span class="vbquote">(anvarikus @ 12:10:2007, 10:11 )</span><!--QuoteEBegin-->Или просто админу фичу сделать, чтобы в случае жалоб все документы разом разблокировать можно было.
    [snapback]81508" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Менеджер может делать это (или агент). Или сам пользователь для заблокированных им документов.
     
  7. anvarikus

    anvarikus Гость

    Для: Medevic

    в принципе да... Во время открытия БД пользователем можно пробежаться по всем заблоченным докам и разблочить те доки, которые заблокированы пользователем. Кажись выход, может не совсем шустрый, но более менее корректный...

    С этим более менее ясно... А что вот на счет работы на кластерах... Блокировка корректно работает или лучше вообще не использовать? То есть, залоченный док на сервере А, сможет ли открыть для редактирования или просто залочить пользователь на сервере Б.. ?
     
  8. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--QuoteBegin-anvarikus+12:10:2007, 10:25 -->
    <span class="vbquote">(anvarikus @ 12:10:2007, 10:25 )</span><!--QuoteEBegin-->в принципе да... Во время открытия БД пользователем можно пробежаться по всем заблоченным докам и разблочить те доки, которые заблокированы пользователем. Кажись выход, может не совсем шустрый, но более менее корректный...
    [snapback]81510" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Да. Но пользователь может не открывать базу заново. :) Или пользователь может захотеть специально заблокировать документ (и такая возможность у него есть), чтобы защитить от изменений некоторое время.
    По-моему, точно никак не определить.

    <!--QuoteBegin-anvarikus+12:10:2007, 10:25 -->
    <span class="vbquote">(anvarikus @ 12:10:2007, 10:25 )</span><!--QuoteEBegin-->С этим более менее ясно... А что вот на счет работы на кластерах... Блокировка корректно работает или лучше вообще не использовать? То есть, залоченный док на сервере А, сможет ли открыть для редактирования или просто залочить пользователь на сервере Б.. ?
    [snapback]81510" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Не сможет при наличии нормальной связи.
     
  9. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Под R5 писал когда-то функциональность блокировки документов.
    Сейчас вижу, что она была не идеальна, но тем не менее работала.

    Было сделано примерно так:
    каждая реплика в настройках знала, где находиться главный сервер.
    при открытии, закрытии и прочих опреациях для которых нужна проверка лока, скрипт лез на главный сервак и проверял там документ (в то время это был профильный документ).

    Из плюсов вижу:
    1. ты сам знаешь как это работает
    2. можно что-то продебажить, оптимизнуть и т.д.

    Из минусов:
    1. скорость сильно зависит от скорости сетки до главного сервака
    2. при отваливании интернета отваливался механиз блокировки
     
  10. anvarikus

    anvarikus Гость

    <!--QuoteBegin-Medevic+12:10:2007, 08:30 -->
    <span class="vbquote">(Medevic @ 12:10:2007, 08:30 )</span><!--QuoteEBegin-->Цитата(anvarikus @ 12:10:2007, 10:25 )
    Блокировка корректно работает или лучше вообще не использовать? То есть, залоченный док на сервере А, сможет ли открыть для редактирования или просто залочить пользователь на сервере Б.. ?
    *

    Не сможет при наличии нормальной связи.
    [snapback]81511" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    ТО есть не сможет? То есть для пользователя документ будет заблокирован... если он ранее заблокирован другим пользователем на другом сервере? Так?.. или наоборот?
     
  11. Sandr

    Sandr Гость

    Вообще, в кластерной репликции, на одном сервере лучше отключить агент-менеджер...
     
  12. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Sorry за нравоучения вместо конкретного решения:

    IMHO вы пытаетесь взвалить на Домину несвойственную ему задачу. Уже помянуты блокировки, сейчас кто-нибудь транзакцию вбросит. В общем - СУБД.
    Т.е. либо переформулируйте задачку, либо меняйте инструмент.

    Совет на будущее: Домина "транзакционна" на уровне ОДНОГО документа. При синхронной модификации группы док-тов вы рано или поздно вляпаетесь (при репликации с филиалом туда попадет только половинка "транзакции")
     
Загрузка...
Статус темы:
Закрыта.

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