0
<< предыдущая заметкаследующая заметка >>
16 августа 2013
Самый старый глюк движка

Много лет читатели мне жаловались, что раздел дневника «содержание» /dnevnik/contents ведет себя странно — кнопка «показать больше» внизу иногда не работает, иногда работает, а иногда показывает и без нее. Поскольку я никогда никакого глюка не наблюдал, то не знал, что ответить. А сегодня решил разобраться. Собственно, первое, что пришло в голову (и подтвердилось) — глюки memcache. Потому что для меня (админа) ничего не кэшируется.

Тем, кто не в курсе, напоминаю, что memcache — это софт для Apache, который помогает использовать оперативку сервера для кратковременного кэширования. Движок умеет работать с memcache, если тот есть, а если не установлен — то работает без него.

Итак, выяснилась забавная вещь.

Система memcache досталась мне в наследство еще от Созидателя. Он придумал гнать все запросы MySQL через единую mysql-функцию, которая справлялась в кэше, есть ли результаты для подобного запроса (разумеется, часть запросов, типа записи, не кэшируются). Так вот: в качестве имени использовалась сама строка запроса «SELECT ...» Она может быть длинной, но я не придавал этому значения, и зря. Потому что оказалось, memcache имеет максимальную длину для имени переменной, после которой ее обрезает. Во время запроса содержания SELECT был очень длинным — там пристыковывались кучи данных из других таблиц, калькулировалась посещаемость и т.п. Так что последний параметр «LIMIT 20" уже попадал под обрезку.

Я теперь изменил работу с memcache — использую вместо строки запроса ее md5(), и глюк пропал.

Так что если вы программируете сайты с использованием memcache — имейте в виду: длина имени переменной имеет недокументированное ограничение, после которого идет обрезка.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий
Windows Opera
2
1
Konstantin Vlasov
С хэшами надо быть поаккуратнее. А то однажды случится чудо, хэш совпадёт, и получим что-нибудь в таком роде:
Linux Firefox
 Москва
1
1
Леонит Каганофф
Ну пока что проблема была в том, что совпадал вовсе не хэш, так что хэш вряд ли что-то ухудшит ;)

А на скриншоте... с чего вы взяли, что там совпадение хэша? Там может быть 100500+ разных других глюков ;)
Windows Opera
1
0
Konstantin Vlasov
Согласен, совпадение хэшей менее вероятно, чем совпадение обрезков строк. Но лучше держать в голове, что такое могёт быть.

Касательно скрина: что это именно хэши я взял с того, что один из админов форума это разъяснил:
http://www.rsdn.ru/forum/rsdn/1227031
Хотя, вообще говоря, можно было бы запостить и любую другую картинку: в первую очередь я хотел лишь привести иллюстративный пример того, какого рода плюхи можно огрести в подобных случаях (но потом решил, что будет нагляднее, если взять не какую-то фантазию из головы, а реально произошедший случай).
Mac Safari
2
0
braintunic
Давно заметил, что англоязычные программисты никогда не путают кэш и хэш, а вот русскоязычные путают сплошь и рядом; наверное потому, что в в русском, в отличие от английского, эти термины и пишутся и произносятся почти одинаково.
Mac Safari
0
0
braintunic
А то, что свой коммент здесь нельзя удалить - тоже Созидатель виноват?
Linux Opera
 Москва
0
0
Леонит Каганофф
У меня в конфиге стоит 0 в опции, которая разрешала бы удалять собственные комментарии. А что?
Mac Safari
0
0
braintunic
Ну вот я написал дурацкий коммент насчет путающих кэш и хэш, вроде получается, что я в этом обвиняю автора первого коммента, хотя он таки ничего не путал.
А удалить этот мой дурацкий коммент - не могу, жаль.
Linux Opera
2
0
Mike Novikoff
Почему дурацкий? Я даже хотел там (дурацкий) «+1» поставить, и даже, пожалуй, сейчас поставлю. :-)

А то, что нельзя удалять — это неоднозначно. С одной стороны, т.наз. «все» давно привыкли, что это можно. С другой — исторически (в фидо) это было нельзя. Причём никому. Даже модератору. И это настолько меняло всю картину, что нынешние «уже давно не неофиты, а "ветераны" ливеджоурнала с "далёкого" 2002 года» и представить себе не могут.

Мечтаю о возвращении тех времён, когда написанное было не вырубить. Когда нельзя было отредактировать сообщение, на которое теперь 500 ответов, и теперь все эти 500 отвечавших будут выглядеть идиотами, как будто они отвечали на совсем другое. Не считая ещё тех 200, которые были стёрты — из них 100 автором поста, которому они не понравились, а другие 100 добровольно.

Как говорится, «Милонов был прав!» :-)
Но, кажется, нынче уже такие времена настали, что надо ещё пояснять, что Милонов — Игорь (получивший волчий билет в N5020), а вовсе никакой не депутат, шайтан с ними обоими. :-)

LLeo: а что если и в /dnevnik запретить удалять? Хотя бы временно, в порядке эксперимента... :-)

P.S. Мне тоже порой бывает стыдно за написанное. Да и сейчас я, кстати, дегустирую белорусский портер фирмы «Нельзя писать название». :-) Но я, даже имея возможность, свои комментарии всё-таки не стираю почти никогда. Das ist nicht fair.
Mac Safari
0
0
braintunic
Согласен, что неоднозначно.
Согласен с запретом на удаление и правку сообщений, на которые есть ответы.
Не согласен с тотальным запретом удаления.
Считаю, что мусор желательно за собой убирать.
То есть, разрешить удаление сообщений, на которые нет ответов, и имеющих менее трех оценок.
Но это всего лишь мое частное мнение)
Linux Opera
 Москва
3
0
Леонит Каганофф
Ну... Можно сделать смешнее. Разрешить удалять, но чтобы появлялась надпись - "Комментарий удален автором. Он был таким (показать)"
Windows Firefox
 Израиль
1
0
braintunic
Ну если это будет смешно, то я за))
Linux Opera
0
0
Mike Novikoff
Чисто не там, где убирают, а там, где не сорят.
В том числе и это настолько меняло всю картину!
Ведь были же места, где действительно почти не сорили.

Где убирают — там не столько чисто, сколько фальшиво. Вплоть до того, что кое у кого (да у большинства нынче!) вообще никаких комментариев не бывает, кроме красивых и хвалебных.

А что там говорил Пётр Первый насчёт «дабы глупость каждого видна была»? :-)

Единственное, что одобряю — это возможность редактировать коммент в течение 15 минут. Вполне достаточно, чтобы исправить опечатки или дописать недописанное. Или даже, в крайнем случае, осознать свою неправоту и написать «извините, запощено по ошибке!». И то это ещё сильное послабление по сравнению с настоящей честностью, которая была когда-то: ошибся — корректируй в следующем сообщении, дополняй, уточняй, оправдывайся, что угодно, но исходное уже не заменишь.
Linux Opera
 Москва
0
0
Леонит Каганофф
А разве в лневнике сейчас удалять можно?
Linux Opera
0
0
Mike Novikoff
Не пробовал, но ссылка «del» там есть.

всего комментариев: 15

<< предыдущая заметка следующая заметка >>