Summary

  • 17 апреля 2009 года OpenStreetMap объявила API доступным только для чтения на время перехода к версии 0.6; временами он мог вовсе не работать. Сохранять правки стало нельзя, Potlatch отключили, а другие редакторы потребовали обновления.
  • Новая API объединяла изменения в changeset, проверяла версии объектов и добавляла цифровые ID к публичным правкам. Один запрос на загрузку различий мог выполняться атомарно. Changeset, охватывающий несколько запросов, единым действием через API откатить было нельзя.

Картограф нашел ошибку, но сервер отказался принимать исправление. В сообщении OpenStreetMap от 17 апреля 2009 года говорилось, что API переведен в режим только для чтения на время миграции к версии 0.6; иногда возможно полное отключение. Изменения нельзя было сохранить в базе данных, а онлайн-редактор Potlatch перестал работать. Завершение ожидалось в понедельник, 20 апреля, без точного часа. Пользователям других редакторов советовали установить совместимые версии. Этот срок был планом на старте работ, а не журналом восстановления каждой функции.

Зачем закрывать вход в карту, которую создают участники? Документ проекта об изменениях от API 0.5 к 0.6 отвечает устройством новой записи. Он относит выпуск версии 0.6 к 20 апреля и требует включать каждую правку узла, линии или отношения в changeset. Группе можно дать понятный комментарий; она может включать несколько вызовов API. Теперь работа становилась видна как связанная последовательность, а не только как отдельные измененные объекты.

Группа правок при этом не была одной транзакцией. Спецификация прямо указывала, что целый changeset не атомарен и не откатывается через API целиком. Один запрос с загрузкой различий, напротив, может быть атомарным. Группа отвечает на вопрос, какие действия относятся к одной задаче; запрос — какие данные записываются вместе. Если перепутать эти единицы, исправление ошибки начнется с поисков несуществующей кнопки общего возврата.

Номер версии защищал от другой ошибки. Клиент получал текущую версию узла или дороги и должен был отправить ее при сохранении. Если другой участник успел записать более новую версию, сервер отвергал устаревшую попытку. Редактору следовало сообщить о конфликте и предложить загрузить свежий участок карты. Изменение в интерфейсе хранения превратилось в правило повседневной работы двух людей над одним объектом.

Более надежной стала и атрибуция. Старый API возвращал отображаемое имя, которое владелец мог сменить без истории смены имен. Версия 0.6 добавила числовой ID учетной записи для публичных правок. Документ проекта признавал конкретную границу: прежним анонимным изменениям недостающие ID не стали видны задним числом. Новая запись укрепляла связь будущих правок с аккаунтом, не дорисовывая автора в старых пустотах.

Сохраненная проектом страница испытаний миграции раскрывает зависимость от внешних редакторов. Испытательные серверы открыли для проверки создания changeset, отклонения старой версии, работы Potlatch, вариантов JOSM и инструментов репликации. Некоторые устаревшие выпуски JOSM вообще не могли работать с 0.6. Смена правил центрального сервера коснулась каждого инструмента, которым доброволец чертил карту.

Сам сервер тоже менялся. Протокол заседания совета OpenStreetMap Foundation от 12 мая сообщает, что система перешла с MySQL на PostgreSQL. Несколько стадий миграции пришлось повторить, поэтому она заняла больше времени, чем планировали; оставались исправления, наблюдение и закупка дисков. Майский отчет объясняет перерасход времени, но не дает поминутного графика возвращения всех путей записи.

Более ясная история правок стоила остановки новых правок. Добровольцы ждали, авторы редакторов меняли программы, сервер учился группировать работу и отказывать устаревшим версиям. После этого линии на карте оставались линиями; их сохранение стало другим процессом.

Исходные документы