Обновление Кодов И Их Кеширование

Kizarek86

Well-Known Member
Lotus team
20.07.2007
863
6
#1
Доброго дня, Всем.

Что-то тихо стало на форуме)

Есть следующая проблема:
Выполняются какие либо доработки, заливаются в рабочую базу,
и тут сталкиваемся с ситуацией когда код закеширован (наблюдаю такую штуку в 6.5, в 8 такого нету), следовательно новый функционал не работает.
Если обновления были глобальные, то и старый может перестать работать.
Лечится переоткрытие базы/клиента.

кто как с этим борется?
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#2
Обновления надо делать тогда, когда люди не работают с приложением.

Вообще, нотес довольно хитро кеширует код. Обычно, агенты не кешируются. Форма кеширует библиотеки и т.п. Переоткрытие формы обычно сбрасывает этот кеш. Код БД кешируется до закрытия БД.
Если переоткрытие БД не помогает, возможно, проблемы с сетью. Если нотес думает, что связь с сервером не устойчива, то он создает кеш кода в спец базе, и переоткрытие может не сработать. В сложных случаях приходится и иконку с рабочей области удалять или убивать кеш-бд.
 

hosm

* so what *
18.05.2009
2 442
9
#3
Akupaka а откуда инфа, что и как кешируется? опыт или это где-то описано? если последнее, укажи ссылку, плз...
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
#4
Совсем недавно мучился с кэшированием кода java-библиотеки, вызываемой из LS через LS2J. Помогало только переоткрытие Лотоса.
 

Kizarek86

Well-Known Member
Lotus team
20.07.2007
863
6
#5
Обновления надо делать тогда, когда люди не работают с приложением.
Увы и ах но в данном случае это нереально)

В лотусе вроде нету штатных средств по "выбросу" пользователей из баз... или я ошибаюсь?
 

Kizarek86

Well-Known Member
Lotus team
20.07.2007
863
6
#8
из админа drop all в таком случае можно попробовать
вроде это то, что надо.
Что при этом дропается? Только текущий коннект пользователя к базе?
База то открыта у него останется, следовательно и кеш тоже, при любом действии пользователя должен выполниться новый коннект по идее.
 

susinmn

Well-Known Member
16.10.2007
529
8
#9
из админа drop all в таком случае можно попробовать
вроде это то, что надо.
А удаление документов Cache-базы не помогает?
<!--shcode--><pre><code class='avto'>Set dbcache=New NotesDatabase("","cache.ndk")
If dbcache.IsOpen Then
Set coll=dbcache.AllDocuments
Set cachedoc=coll.GetFirstDocument

While Not cachedoc Is Nothing
Set delcachedoc=cachedoc
Set cachedoc=coll.GetNextDocument(cachedoc)
Call delcachedoc.Remove(True)
Wend
End If[/CODE]
 

Kizarek86

Well-Known Member
Lotus team
20.07.2007
863
6
#10
А удаление документов Cache-базы не помогает?
Да поможет скорее всего, просто сей скрипт не обладает быстротой работы, а реально вешать его придется на больше кол-во действий, что реально затормозить и без того тормозную систему)
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 226
25
#11
Увы и ах но в данном случае это нереально)
версию 6.5.1 помоему прекрасна еще тем, что если сделать обновление в момент когда юзер в базе, но "кешь" закрепится навсегда и будет горе

и что значит не реально, неужели так тяжело работать не с рабочей базой а шаблоном, который по дефоулту сам в 2 часа ночи всё обновит?
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#12
Увы и ах но в данном случае это нереально)
В лотусе вроде нету штатных средств по "выбросу" пользователей из баз
Обновление приложения - процесс организационный! Проводится в нерабочее время, либо, если критично, то требуется организационно выход всех пользователей из системы.

а реально вешать его придется на больше кол-во действий, что реально затормозить и без того тормозную систему
Какой "вешать"? Этот код необходимо выполнять лишь изредка в совсем критичных случаях! И то, не удалять все документы, а закрыть нотес, убить файл БД cache.ndk, запустить нотес. И этот код не понадобится. А, если уж удалять документы, так не все, а лишь те, которые относятся к конкретному приложению.

версию 6.5.1 помоему прекрасна еще тем, что если сделать обновление в момент когда юзер в базе, но "кешь" закрепится навсегда и будет горе
Никогда не сталкивался с чем-либо подобным в нормальной сети, хотя имели место пару случаев с глюками кеша у "дальних" клиентов, лечилось удалением БД кеша.

Добавлено: OKEN ,
эт по памяти... Возможно про кеш есть в inside notes, я уже не помню.
 

Kizarek86

Well-Known Member
Lotus team
20.07.2007
863
6
#13
Да понятно что вопрос организационный, не всегда можно решить, находятся индивиды которые не делают то что просят.
Обновление с шаблона в не рабочее время не решает проблему, т.к. никто не запрещает оставить открытым документ/базу и вне рабочее время.
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
#14
Обновление с шаблона в не рабочее время не решает проблему, т.к. никто не запрещает оставить открытым документ/базу и вне рабочее время.
Не стоит пытаться решить организационные задачи техническими средствами. Такие проблемы решаются приказом по организации, обязующим пользователей выключать ПК на ночь и предусматривающим санкции за неисполнение. Для проталкивания такого приказа можете указать следующие аргументы: экономия электроэнергии, экономия ресурса ПК/увеличение их сроков эксплуатации, снижение риска возникновения пожара от невыключенных электроприборов.
 

Kizarek86

Well-Known Member
Lotus team
20.07.2007
863
6
#15
Не стоит пытаться решить организационные задачи техническими средствами. Такие проблемы решаются приказом по организации, обязующим пользователей выключать ПК на ночь и предусматривающим санкции за неисполнение. Для проталкивания такого приказа можете указать следующие аргументы: экономия электроэнергии, экономия ресурса ПК/увеличение их сроков эксплуатации, снижение риска возникновения пожара от невыключенных электроприборов.
Да я прекрасно понимаю что этот вопрос нужно решать организационно, но как говорил небезызвестный поручик
"Кто на это согласится, Господа?".

Вообще считаю что нужен функционал по блокировке работы пользователей в системе, в том же 1С неплохая схема, жаль что в Lotus нет такой)
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
#16
Вообще считаю что нужен функционал по блокировке работы пользователей в системе, в том же 1С неплохая схема, жаль что в Lotus нет такой)
ACL Вам в руки :). Как говорилось в известном фильме, если пользователь не хочет добровольно закрывать БД — "Отключим газ".
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 491
367
#17
ну можно проверить - закрывал ли юзер приложение...
например создавать очередь при открытии приложения и убивать её при закрытии
в очереди хранить дату ну и чекать при опред событиях, при надобности - просить закрыть
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 491
367
#19
Akupaka это ты про сервер, я про клиент, обрыв коннекта не даст инфы о перезагрузке базы на клиенте
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#20
А, ты имеешь в виду, что БД должна сама проситься закрыться? Понял, вроде...
Но что должно проверяться в конце концов, как определять необходимость переоткрыть БД? Создавать где-то на сервере объект, сигнализирующий необходимость переоткрытия БД, и проверять время его создания и время начала сессии на клиенте?