Summary: | Завершить минимальный функционал для сервиса RECT | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Евгений Синельников <sin> |
Component: | Общее | Assignee: | Ivan Melnikov <imelnikov> |
Status: | CLOSED FIXED | QA Contact: | |
Severity: | minor | ||
Priority: | P4 | CC: | kipruss, lav, sin |
Version: | unspecified | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 1889 |
Description
Евгений Синельников
2008-07-02 16:31:53 MSD
Базовая логика уточнена... Готовимся проверять rect-0.0.3 Выложена в http://git.etersoft.ru/people/imelnikov/packages/rect.git/ очередная версия rect, 0.0.3 Работает монтирование, написаны простейшие тесты для примера. Необходимо ещё потестировать функционал, связанный с локами. В python-module-Ice найдена проблема, с записью 0 указателя в прокси вместо возврата None из функций propertyToProxy() и stringToProxy(). Проблема мешала при использовании тестов - возникала трудноотслеживаемая ситуация при запросах к объектам, которых ещё не было... Например, при запрсах к ещё не запущенным сервисам на других хостах. Проблему можно повторить так: $ python Python 2.5.1 (r251:54863, Feb 8 2008, 15:19:12) [GCC 4.1.1 20070105 (ALT Linux, build 4.1.1-alt12)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import Ice >>> c = Ice.initialize() >>> p = c.propertyToProxy("AAAAAAA") >>> p terminate called after throwing an instance of 'IceUtil::NullHandleException' what(): N7IceUtil19NullHandleExceptionE Аварийный останов исправленный вариант лежит в git.etersoft и git.altlinux: http://git.etersoft.ru/people/sin/packages/python-module-Ice.git (История пакета объеденина и историей старого python-module-ice). Выложена в http://git.etersoft.ru/people/imelnikov/packages/rect.git/ очередная версия rect, 0.0.4 Улучшения коснулись исправления обнаруженных в предыдущей версии проблем и работоспособности "из коробки" Осторожно: функционал, связаный с блокировками, по прежнему не тестировался... Нашел следующую ошибку: 0. Исходные файлы неизменны - из твоего rect.git на данную минуту. Все работает. 1. В файле examples/readwrite.py закомментируем строку 25 - это закрытие файла после записи в него в процедуре _testReadWriteFile 1a. По идее строка 37 в файле examples/rectc.py, а именно self.slave.closeAll() должна исправить ситуацию. 2. Но имеем следующее: 2a. вывод на клиентской стороне: [kipruss@localhost tests]$ ./readwrite.py ====================================================================== ERROR: testMounts (__main__.TheTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "./readwrite.py", line 40, in testMounts self.slave.umount(self.share) File "../slice/linux.ice", line 297, in umount Error: exception ::RECT::Linux::Error { reason = Failed: unmounting share code = 65280 } ---------------------------------------------------------------------- Ran 2 tests in 1.506s FAILED (errors=1) [kipruss@localhost tests]$ 2b. вывод на серверной стороне: creating mountpoint: mkdir -p '/tmp/rect//server/upload' mounting share: cifsmount //server/upload /tmp/rect//server/upload -o guest Opening file: /tmp/rect//server/upload/test.dat fd = 10 Opening file: /tmp/rect//server/upload/test.dat fd = 12 Closing file fd = 12 unmounting share: cifsumount '/tmp/rect//server/upload' Closing file in cleanup, fd = 10 unmounting share: cifsumount '/tmp/rect//server/upload' Opening file: test.dat fd = 10 Opening file: test.dat fd = 12 Closing file fd = 12 Closing file in cleanup, fd = 10 Файл в итоге не закрылся, посему и отмонтирование неудачно. (In reply to comment #5) Кратко: this behaviour is by design. Подробнее: клонируем мой репозиторий, собираем slave, запускаем. комментируем строку 25 в readwrite.py Что происходит? 1. файл открывается в строке 22 2. файл не закрывается 3. self.slave.umount в строке 40 выбрасывает исключение 4. unittest считает это ошибкой -- тест провален 5. и тем не менее вызывает SingleSlaveTest.tearDown(...), который призван не "исправить", а "собрать мусор" (подчистить), что он и делает: 6. slave закрывает файл (сообщение Closing file in clean-up, fd = ...), 7. slave отмонтирует шару 8. но, тем не менее, запись о ней остается в mtab из-за бага в cifsumount В том, что шара отмонтировалась, легко убедиться, сделав cat /proc/mounts Создан простейший набор тестов для rect, который тестирует, в том числе и блокировки. Пока они ведут себя предсказуемо. Создан новый гит-репозиторий, чтобы не мешать в одну кучу код серверной части и тестов. http://git.etersoft.ru/people/kipruss/packages/rect-tests.git/ Выложена в http://git.etersoft.ru/people/imelnikov/packages/rect.git/ очередная версия rect, 0.0.5. Весь требуемый функционал серверной части (slave) реализован и протестирован. Дальнейшие пожелания по её развитию считаю разумным оформлять в виде отдельных ошибок. Эту закрываю. |