программно определить путь к реплицируемой базе

  • Автор темы Vvv
  • Дата начала
V

Vvv

Подскажите пожалуйста как на стороне Notes можно определить списко реплецируемых с сервера баз и путь к ним на сервере.
 
O

Omh

Как узнать список реплицируемых баз, с наскока не скажу.
Найти пусть гораздо проще: ты знаешь сервак и ReplicaID.
Делаешь
Код:
flag = notesDatabase.OpenByReplicaID( server$, replicaID$ )
у получившегося объекта берёшь путь, это он и есть :rolleyes:

Ща гляну насчёт списка реплицируемых баз...
---------------
Ну как вариант:
берёшь через NotesDbDirectory пробегаешь анализируемый сервак, у каждой базы берёшь NotesDatabase.NotesReplication.
Делаешь этому объекту
Код:
Set notesReplicationEntry = notesReplication.GetEntry( source$ , destination$ [ , createflag = FALSE] )
Если Вернулся не Nothing, значит база реплицируется с чем-то.

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

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
только через нотес апи - просматривать єтот список в репликаторе
 
V

Vvv

to Omh
большое спасибо за ответ сейчас обдумываю

to ToxaRat
>только через нотес апи - просматривать єтот список в репликаторе
я пишу именно на С API
подскажите пожалуйста названия функций которыми я могу воспользоваться
пока мне удалось получить
список title и servername для всех реплицируемых баз для данного Notes (ReplId или путь получить не удаеться)
получить историю реплицкаций для заданной базы - NSFDbGetReplHistorySummary

но получить список всех реплицируеммых для данного Notes баз и пути к ним не как не получаеться


аналога flag = notesDatabase.OpenByReplicaID( server$, replicaID$ ) в C API мне тоже найти не удалось
 
D

divankin

аналога flag = notesDatabase.OpenByReplicaID( server$, replicaID$ ) в C API мне тоже найти не удалось

#include <nsfdb.h>

STATUS LNPUBLIC NSFDbLocateByReplicaID(
DBHANDLE hDB,
DBID far *ReplicaID,
char far *retPathName,
WORD PathMaxLen);

Description :

This function takes a database handle (DBHANDLE) to the data directory, or to one of its subdirectories, and the replica ID of a database. It returns an expanded path specification for the replica. The function searches all subdirectories of the data directory for the database.

Note: If you are trying to locate a replica on a remote Lotus Domino Server, obtain the replica ID of the local database replica with NSFDbReplicaInfoGet, build a fully qualified network pathname to the remote server's data directory with OSPathNetConstruct, use that path with NSFDbOpen to obtain a handle to the data directory, and then pass that handle to NSFDbLocateByReplicaID to get the server's pathname for the replica you want. The network path to that database may then be constructed using OSPathNetConstruct.

Parameters :

Input :
hDB - A handle to a directory.

ReplicaID - A pointer to the Replica ID of the database you wish to find in the directory.

PathMaxLen - A WORD containing the length of the buffer minus one (1) for the NULL terminator.

Output :
(routine) - Return status from this call -- indicates either success or what the error is. The return codes include:

NOERROR - Successfully got path specifications for database.

ERR_NOT_DIRECTORY - Handle provided was not a directory.


retPathName - The address of a text buffer into which the expanded pathname for the Domino database Replica is returned. The pathname is returned as a null-terminated string. The buffer should be declared with a length of MAXPATH.
 
T

TIA

Аналог OpenByReplicaId:

NSFDbOpen("MyServer", hDir)
NSFDbLocateByReplicaID(hDir,...)

Не могли бы Вы другими словами сказать, что такое "БД, реплицируеммая для данного Notes"? Кто такой "данный нотес"? Вся директория DATA для указанного сервера, или для текущего сервера, или всех серверов домена? И что в Вашем понимании "реплицируемая"? Имеющая реплику, плюс реплицированная хотя бы раз, плюс без галки "temporary disable replication", плюс настроенное расписание репликации, плюс разрешение по ACL, или какая-либо комбинация перечисленных параметров?
 
V

Vvv

Большое спасибо за помощь.

Мое приложение работает на PC клиента под Lotus Notes.
Мне надо
1) получить списко всех баз реплицируемых с Lorus Domino (сервера) на Lotus Notes (пользовательская PC)
2) проверить что среплицированная в Lotus Notes база находиться по тому же пути в каталоге Data что и на сервере.

реплицируемая" мне надо проверять базы - имеющая реплику, плюс реплицированная хотя бы раз
 
T

TIA

Если набор серверов неизвестен, то как Вы делаете не плохо - читаете историю репликации. Правда, её могут почистить.
Если реплики возможны с небольшого числа заранее известных серверов то всё проще и никакого API не надо:
1. При помощи NotesDbDirectory сканируете локальную DATA, поочерёдно получая все БД.
2. Для каждой БД по её ReplicaId получаете её на каждом из известных серверов.
3. Сравниваете путь для каждой полученной серверной реплики.
 
V

Vvv

TIA большое спасибо за помощь
Ваше описание это то что мне надо для первой версии
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Vvv
вариант предложенный TIA может быть опасен тем что сервера с к оторыми будет осуществлен перебор по репликаид отключены а это в свою очередь создает большие таймаут, хотя они в любом случае возможны
 
T

TIA

вариант предложенный TIA может быть опасен тем что сервера с к оторыми будет осуществлен перебор по репликаид отключены а это в свою очередь создает большие таймаут, хотя они в любом случае возможны

Задача - сравнить путь БД на сервере с локальным. Без получения серверной реплики не обойтись. Поэтому вариант сам по себе не опасен. Опасно не обрабатывать исключения. А они будут при любом варианте решения. Если говорить о быстродействии, то при большом числе проверяемых БД можно выполнить такую оптимизацию. Просканировать всю директорию сервера и запомнить реплики всех имеющихся на нём БД. И перед получением серверной реплики БД, проверять наличие её ReplicaId в запомненном списке. Выигрыш получается за счёт того, что не происходит открытия БД, не имеющей реплики на данном сервере. Получение ReplicaId БД через NotesDbDirectory также не требует открытия БД.
 
D

divankin

Есть еще такая идейка. Кажется, ссылки на все открываемые базы сохраняются в базе bookmarks.nsf. Для каждой базки создается документик, содержащий поле URL, в котором, если посмотреть побайтово, можно увидеть сервер и путь к базе.
Возможно стоит покопать в эту сторону.
 
V

Vvv

спасибо всем ответившим

Есть еще такая идейка. Кажется, ссылки на все открываемые базы сохраняются в базе bookmarks.nsf. Для каждой базки создается документик, содержащий поле URL, в котором, если посмотреть побайтово, можно увидеть сервер и путь к базе.

Это путь который я копаю сейчас
пока из names.nsf только вытащил имя севреа и title базы
сейчас займусь bookmarks.nsf

при программной репликации базы ее нет в names.nsf и скрей всего не будет в bookmarks.nsf
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!