Поведение не стало более некорректным после этого изменения — это верно. В остальном, мы таким образом разрешаем выполнить запрос со старым space_id / index_id. Мы также предоставляем пользователю информацию о схеме в space like объектах, и пользователь может воспользоваться ей при формировании запроса (например, для выделения первичного или вторичного ключа из тапла для использования в запросе).
Ошибка E_WRONG_SCHEMA_VERSION нужна, чтобы запрос
не был выполнен, если клиент имел неактуальную информацию о схеме. Мы не можем и не должны делать предположений о том, что схема не использовалась при формировании запроса. Более того, мы сами используем потенциально устаревшую схему для разрешения имен спейса и индекса. После рефетчинга схемы мы должны заново отмапить space name и index name в числовые id: в этом случае мы можем дать гарантию о том, что запрос был сделан по схеме, актуальной на момент вызова net.box-метода или более новой. В текущем варианте схема может быть любой: из прошлого, настоящего или будущего.
На мой взгляд, хорошей схемой взаимодействия является описанная
тут (и, несколько детальней,
тут). Кроме указанных моментов (когда дропать схему, когда слать IPROTO_PING и т. п.) я бы еще отметил парочку:
* Двух случаях
необходимо делать запросы без schema_id: когда качаем саму схему (но мы должны убедиться, что все связанные со схемой ответы содержат одинаковый schema_id) и когда аутентифицируемся.
* Перед повторением запроса, получившего E_WRONG_SCHEMA_VERSION, мы должны заново отрезолвить имена спейса / индекса, если они использовались при запросе.