From 9121aaf7119b9b8a03ba8e24eb3acae3bdca2e34 Mon Sep 17 00:00:00 2001 From: Leo Yuriev Date: Mon, 10 Jul 2017 17:45:50 +0300 Subject: [PATCH] mdbx: update TODO. --- TODO.md | 132 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 71 insertions(+), 61 deletions(-) diff --git a/TODO.md b/TODO.md index 1508c944..b713830b 100644 --- a/TODO.md +++ b/TODO.md @@ -1,79 +1,89 @@ Допеределки -- [x] разделение errno и GetLastError() -- [x] CI посредством AppVeyor +=========== +- [ ] Перевод mdbx-tools на С++ и сборка для Windows. +- [ ] Переход на CMake, замена заглушек mdbx_version и mdbx_build. +- [ ] Актуализация README.md +- [ ] Переход на C++11, добавление #pramga detect_mismatch(). +- [ ] Убрать MDB_DEBUG (всегда: логирование важный ситуаций и ошибок, опционально: включение ассертов и трассировка). +- [ ] Заменить mdbx_debug на mdbx_trace, и почистить... +- [ ] Заметить максимум assert() на mdbx_assert(env, ...). + +Качество и CI +============= +- [ ] Добавить в CI linux сборки для 32-битных таргетов. + +Доработки API +============= +- [ ] Поправить/Добавить описание нового API. +- [ ] Добавить возможность "подбора" режима для mdbx_env_open(). +- [ ] Переименовать в API: env->db, db->tbl. + +Тесты +===== +- [ ] Тестирование поддержки lockless-режима. +- [ ] Додумать имя и размещение тестовой БД по-умолчанию. +- [ ] Реализовать cleanup в тесте. +- [ ] usage для теста. +- [ ] Логирование в файл, плюс более полный progress bar. +- [ ] Опция игнорирования (пропуска части теста) при переполнении БД. +- [ ] Базовый бенчмарк. + +Развитие +======== +- [ ] Отслеживание времени жизни DBI-хендлов. +- [ ] Отрефакторить mdbx_freelist_save(). +- [ ] Хранить "свободный хвост" не связанный с freeDB в META. +- [ ] Возврат выделенных страниц в unallocated tail-pool. +- [ ] Валидатор страниц БД по номеру транзакции: + ~0 при переработке и номер транзакции при выделении, + проверять что этот номер больше головы реклайминга и не-больше текущей транзакции. +- [ ] Размещение overflow-pages в отдельном mmap/файле с собственной геометрией. +- [ ] Зафиксировать формат БД. +- [ ] Валидатор страниц по CRC32, плюс контроль номер транзакии под модулю 2^32. +- [ ] Валидатор страниц по t1ha c контролем снимков/версий БД на основе Merkle Tree. +- [ ] Возможность хранения ключей внутри data (libfptu). +- [ ] Асинхронная фиксация (https://github.com/ReOpen/libmdbx/issues/5). +- [ ] (Пере)Выделять память под IDL-списки с учетом реального кол-ва страниц, т.е. max(MDB_IDL_UM_MAX/MDB_IDL_UM_MAX, npages). + +----------------------------------------------------------------------- + +Сделано +======= +- [x] разделение errno и GetLastError(). +- [x] CI посредством AppVeyor. - [x] тест конкурентного доступа. - [x] тест основного функционала (заменить текущий треш). -- [x] uint32/uint64 в структурах -- [x] Завершить переименование -- [x] Макросы версионности, сделать как в fpta (cmake?) -- [x] Попробовать убрать yield (или что там с местом?) -- [x] trinity для copy/compaction -- [x] trinity для mdbx_chk и mdbx_stat -- [x] проверки с mdbx_meta_eq -- [x] Не проверять режим при открытии в readonly -- [x] Поправить выбор tail в mdbx_chk -- [x] Там-же проверять позицию реклайминга +- [x] uint32/uint64 в структурах. +- [x] Завершить переименование. +- [x] Макросы версионности, сделать как в fpta (cmake?). +- [x] Попробовать убрать yield (или что там с местом?). +- [x] trinity для copy/compaction. +- [x] trinity для mdbx_chk и mdbx_stat. +- [x] проверки с mdbx_meta_eq. +- [x] Не проверять режим при открытии в readonly. +- [x] Поправить выбор tail в mdbx_chk. +- [x] Там-же проверять позицию реклайминга. - [x] поправить проблему открытия после READ-ONLY. - [x] static-assertы на размер/выравнивание lck, meta и т.п. -- [x] Зачистить size_t -- [x] Добавить локи вокруг dbi -- [x] Привести в порядок volatile -- [x] контроль meta.mapsize +- [x] Зачистить size_t. +- [x] Добавить локи вокруг dbi. +- [x] Привести в порядок volatile. +- [x] контроль meta.mapsize. - [x] переработка формата: заголовки страниц, meta, clk... - [x] зачистка Doxygen и бесполезных коментариев. - [x] Добавить поле типа контрольной суммы. - [x] Добавить поле/флаг размера pgno_t. - [x] Поменять сигнатуры. -- [x] Добавить мета-страницы в coredump, проверить lck -- [x] Сделать список для txnid_t, кода sizeof(txnid_t) > sizeof(pgno_t) и вернуть размер pgno_t +- [x] Добавить мета-страницы в coredump, проверить lck. +- [x] Сделать список для txnid_t, кода sizeof(txnid_t) > sizeof(pgno_t) и вернуть размер pgno_t. - [x] Избавиться от умножения на размер страницы (заменить на сдвиг). - [x] Устранение всех предупреждений (в том числе под Windows). - [x] Добавить 'mti_reader_finished_flag'. - [x] Погасить все level4-warnings от MSVC, включить /WX. -- [ ] Отрефакторить mdbx_freelist_save(). -- [ ] Хранить "свободный хвост" не связанный с freeDB в META. -- [ ] Перевод mdbx-tools на С++ и сборка для Windows. -- [ ] Заменить заглушки mdbx_version и mdbx_build. -- [ ] Актуализация README.md -- [ ] Переход на C++11, добавление #pramga detect_mismatch(). - -CI -- [ ] Прикрутить проверку coverity -- [ ] Добавить в CI linux сборки для 32-битных таргетов - -Доработки API +- [x] Проверка посредством Coverity с гашением всех дефектов. +- [x] Полная матрица Windows-сборок (2013/2015/2017). - [x] Дать возможность задавать размер страницы при создании БД. -- [x] Изменение mapsize через API с блокировкой и увеличением txn +- [x] Изменение mapsize через API с блокировкой и увеличением txn. - [x] Контроль размера страницы полного размера и кол-ва страниц при создании и обновлении. - [x] Инкрементальный mmap. - [x] Инкрементальное приращение размера (колбэк стратегии?). -- [ ] Поправить/Добавить описание нового API. -- [ ] Возврат выделенных страниц в unallocated tail-pool. -- [ ] Добавить возможность "подбора" режима для mdbx_env_open() -- [ ] Переименовать в API: env->db, db->tbl - -Тест -- [ ] Тестирование поддержки lockless-режима. -- [ ] Додумать имя и размещение тестовой БД по-умолчанию. -- [ ] Реализовать cleanup в тесте -- [ ] usage для теста -- [ ] Логирование в файл, плюс более полный progress bar -- [ ] Опция игнорирования (пропуска части теста) при переполнении БД -- [ ] Базовый бенчмарк - -Отладка -- [ ] Убрать MDB_DEBUG (всегда: логирование важный ситуаций и ошибок, опционально: включение ассертов и трассировка) -- [ ] Заменить mdbx_debug на mdbx_trace, и почистить... -- [ ] Заметить максимум assert() на mdbx_assert(env, ...) - -Развитие -- [ ] Валидатор страниц БД по номеру транзакции: - ~0 при переработке и номер транзакции при выделении, - проверять что этот номер больше головы реклайминга и не-больше текущей транзакции. -- [ ] Размещение overflow-pages в отдельном mmap/файле с собственной геометрией. -- [ ] Разместить free_backlog в конце meta -- [ ] Валидатор страниц по CRC32, плюс контроль номер транзакии под модулю 2^32. -- [ ] Валидатор страниц по t1ha c контролем снимков/версий БД на основе Merkle Tree. -- [ ] Возможность хранения ключей внутри data (libfptu) -- [ ] Асинхронная фиксация (https://github.com/ReOpen/libmdbx/issues/5) -- [ ] (Пере)Выделять память под IDL-списки с учетом реального кол-ва страниц, т.е. max(MDB_IDL_UM_MAX/MDB_IDL_UM_MAX, npages)