익명 사용자의 답글 쓰기 테스트 부탁드립니다.

권순선의 이미지

http://kldp.org/node/85771#comment-407971 에 modestcode님이 올려주신 패치를 적용하였습니다. 현재 kldp에서는 익명 사용자가 접속할 경우 캐쉬 기능을 사용하여 서버의 부하를 줄이고 있습니다. 따라서 익명 사용자가 접속할 경우에는 업데이트된 내용이 곧바로 보이지 않게 됩니다.

그런데 이 기능의 문제점은 익명 사용자가 답글을 올렸을 경우 답글이 달린 사실 또한 곧바로 보이지 않고 캐쉬에서 정해진 시간 이후에 보이게 되므로 그동안 익명 사용자가 답글이 제대로 올라가지 않은 것으로 오해하여 여러 번 답글을 올리는 일이 종종 발생하였던 바, 금번 패치는 그러한 문제점을 개선한 것입니다.

많은 테스트 부탁 드리고 혹 문제점이나 더 좋은 방안이 있으면 알려 주세요. modestcode님께도 감사 드립니다...

관리자 주제: 

댓글

익명 사용자의 이미지

익명 답글 테스트입니다...

익명 사용자의 이미지

잘 되는 것 같네요. :-)

익명 사용자의 이미지

테스트 1

익명 사용자의 이미지

fgjfhgf

익명 사용자의 이미지

test2

익명 사용자의 이미지

asdf

권순선의 이미지

이 위의 익명 답글은 제가 올렸는데... 이상하네요. 처음 올린 것은 바로 잘 올라갔는데 두번째 올린 것(잘 되는 것 같네요. :-))는 올린 것이 곧바로 보이지 않았습니다. 다른 분들은 어떤지 한번 테스트 부탁드립니다.

익명 사용자의 이미지

아아아아아아하하하하 <-- 방금 이거 적었고..
댓글 쓰기 눌렀을때
원글의 댓글 갯수는 3으로
안 올린 것 처럼 보여요..

SoftOn의 이미지

처음 썼다고 생각되는 댓글이 없네요;;

익명 사용자의 이미지

test3

modestcode의 이미지

제대로 동작 안하는 것 같습니다.
memcached를 사용하나요?
설정한 값을 확인하고 싶은데요?

권순선의 이미지

아니요... memcached는 사용하지 않고 있습니다. 어느 값이 필요하신가요?

modestcode의 이미지

소스를 보니 memcached를 쓰지 않는 것을 알게 됐습니다.
Caching mode: Normal, Aggressive, Minimum cache lifetime 설정에 관계없이 동작하는 것을 확인했고요,
DB를 혹시 master/slave 로 구성해서 쓰는지요?
그렇다면 read query 를 날리는 서버에 제대로 지워졌는지 확인해 보시기 바랍니다.
그리고 에러 로그가 있으면 붙여 주시기 바랍니다.

권순선의 이미지

db는 그냥 한대로 쓰고 있습니다. 관련해서 별도의 에러 로그는 없었고요...

modestcode의 이미지

테스트 서버가 없으신 것 같은데요, 여건이 좀 안좋지만, 일단 다음과 같이 확인 해 보시기 바랍니다.

1. 익명으로 글을 쓴 후 cache_page table에 그 글타래의(여기서는 http://kldp.org/node/86229) 글이 지워졌나 확인합니다.
mysql> select cid, created, expire from cache_page where cid = 'http://kldp.org/node/86229'

2. 인증된 유저로 글을 쓴 후 마찬가지로 cache_page table에 그 글타래의(여기서는 http://kldp.org/node/86229) 글이 지워졌나 확인합니다.

1, 2가 아니라면 제 환경에서는 안 일어나는 다른 문제가 있는 것입니다.

권순선의 이미지

Quote:
mysql> select cid, created, expire from cache_page where cid = 'http://kldp.org/node/86229';
+----------------------------+------------+--------+
| cid | created | expire |
+----------------------------+------------+--------+
| http://kldp.org/node/86229 | 1189428142 | -1 |
+----------------------------+------------+--------+
1 row in set (0.00 sec)

mysql> select cid, created, expire from cache_page where cid = 'http://kldp.org/node/86229';
+----------------------------+------------+--------+
| cid | created | expire |
+----------------------------+------------+--------+
| http://kldp.org/node/86229 | 1189428142 | -1 |
+----------------------------+------------+--------+
1 row in set (0.00 sec)

위에서 첫번째 쿼리 결과는 제가 http://kldp.org/node/86229#comment-408032 를 올리고 난 후 실행한 것이고, 두번째는 http://kldp.org/node/86229#comment-408033 를 올리고 난 후 실행한 것입니다. 좀 이상한듯...

modestcode의 이미지

결과가 안 나와야 하는데 나왔군요.
원래 버젼에서 다음 patch를 적용 후 로그인 유저로 댓글을 한 번 포스팅 후 로그를 올려주시기 바랍니다.

Index: bootstrap.inc
===================================================================
--- bootstrap.inc       (revision 89)
+++ bootstrap.inc       (working copy)
@@ -461,15 +461,49 @@
 function page_get_cache() {
   global $user, $base_root;
 
+
+  if ($user && $user->uid > 0) {
+    // clear the cached page for anonymous users
+    if ($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_SESSION['nocache_anon'])) {
+      watchdog('php', "user reqest_uri : $base_root " . request_uri(), WATCHDOG_WARNING);
+      cache_clear_all($base_root . request_uri(), 'cache_page');
+      unset($_SESSION['nocache_anon']);
+    }
+    elseif ($_SERVER['REQUEST_METHOD'] == 'POST') {
+      if (($cnt = count(drupal_get_messages('error', FALSE))) == 0) {
+        // flag for prevent from using the cached page for anonymous users
+        $_SESSION['nocache_anon'] = 1;
+        watchdog('php', "user count(drupal_get_messages('error'), FALSE) : " . $cnt, WATCHDOG_WARNING);
+      }
+      else {
+        watchdog('php', "user count(drupal_get_messages('error'), FALSE) : " . $cnt, WATCHDOG_WARNING);
+      }
+    }
+
+    return NULL;
+  }
+
+  if (count(drupal_set_message()) != 0) {
+    return NULL;
+  }
+
   $cache = NULL;
 
-  if (!$user->uid && $_SERVER['REQUEST_METHOD'] == 'GET' && count(drupal_set_message()) == 0) {
-    $cache = cache_get($base_root . request_uri(), 'cache_page');
-
+  if ($_SERVER['REQUEST_METHOD'] == 'GET') {
+    if (isset($_SESSION['nocache_anon'])) {
+      cache_clear_all($base_root . request_uri(), 'cache_page');
+      unset($_SESSION['nocache_anon']);
+    }
+    else {
+      $cache = cache_get($base_root . request_uri(), 'cache_page');
+    }
     if (empty($cache)) {
       ob_start();
     }
   }
+  elseif ($_SERVER['REQUEST_METHOD'] == 'POST') {
+    $_SESSION['nocache_anon'] = 1;
+  }
 
   return $cache;
 }
@@ -738,7 +772,9 @@
       if ($clear_queue) {
          unset($_SESSION['messages'][$type]);
       }
-      return array($type => $messages[$type]);
+      if (isset($messages[$type])) {
+        return array($type => $messages[$type]);
+      }
     }
     else {
       if ($clear_queue) {

권순선의 이미지

원래 버전이라 함은 지금 사용중인 패치를 적용하기 전의 bootstrap.inc 파일을 이야기하시는 것인가요? 아니면 지금 사용중인(패치가 적용된) bootstrap.inc 파일을 이야기하시는 것인가요?

modestcode의 이미지

네 지금 사용중인 패치 적용하기 전의 bootstrap.inc 입니다.

권순선의 이미지

혹시나 해서 원래 파일을 저장해 놓았는데 다행이네요. 안그랬으면 약간 귀찮을뻔 했네요. 바로 적용/테스트 후 답글 올리겠습니다.

권순선의 이미지

음... 아래 http://kldp.org/node/86229#comment-408050http://kldp.org/node/86229#comment-408051 올리면서 테스트해 보았는데 잘 동작합니다. 다른 분들은 어떤지 확인 부탁드려요....

modestcode의 이미지

익명 말고 로그인 유저로 테스트 해 보시겠어요?
그래야 로그가 찍히게 해 놨거든요.

권순선의 이미지

참고로, 아까 첫번째 패치는 제가 테스트할 때 패치를 제대로 적용하지 않았던 것 같습니다. 즉 bootstrap.inc가 바뀌지 않았던 거죠. 패치 테스트를 위해서 --dry-run 옵션을 넣었었는데 실제 적용을 위해 sudo patch ... 하면서 정작 --dry-run 은 빼지 않았던 거죠. -_-;; 확실하진 않은데 아마도 그랬던 것 같습니다. .bash_history를 보니 --dry-run이 그대로 있더군요. 제가 지금 감기에 걸려 있어서 조금 정신이 없었네요. ;;;

modestcode의 이미지

그럼 처음 원본에,
http://kldp.net/tracker/download.php/824/351874/304270/389/update_cached_page_for_anonyous_when_posting_r4.diff
의 패치를 적용하시면 됩니다.
다행이네요.
그리고 drupal.org에 올려 놨는데 문제가 심각하면 뭐라고 하겠죠?
http://drupal.org/node/174375

권순선의 이미지

적용 완료 했고요... drupal.org 에 올리신 것 지원사격(?)도 해 드렸습니다. 부디 반영되길... :-)

modestcode의 이미지

감기 빨리 나으시고요,

!!
이제 처음 의도대로 동작하네요.

익명 사용자의 이미지

답글 테스트...

권순선의 이미지

테스트....

익명 사용자의 이미지

네 익명 사용자입니다!!

저를 많이좀 사랑해 주세요!!

사랑받고 싶습니다. 외롭습니다.

익명 사용자의 이미지

저를 사랑 안하시는군요..ㅠㅠ

바로 보이지 않습니다.!!

사랑받고 싶습니다

익명 사용자의 이미지

익명 답글 테스트입니다. 바로 보이나...

익명 사용자의 이미지

위의 건 바로 보이고.... 이건 어떤지....

익명 사용자의 이미지

imyejin의 이미지

정책적으로 깨끗한 해결방법이 아닐까요?

패스워드 입력이 필요 없는 guest 계정을 하나 만들어 놓는 것도 방법이고요.

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

modestcode의 이미지

Quote:
패스워드 입력이 필요 없는 guest 계정을 하나 만들어 놓는 것도 방법이고요.

첫 글에도 언급돼 있지만 이런 방법은 현재 drupal에서는 익명 사용자들에게만 page cache가 사용되기 때문에 (guest 계정을 동시에 사용하는 유저가 적다면 상관없겠지만) 아마도 심각한 성능 저하를 가져 올 것으로 생각합니다. 보통 인증된 한 계정이 동시에 여러곳에서 많은 수가 사용하도록 하는 경우는 일반적이지 않기 때문에 drupal이 어떤 식으로 반응할지도 흥미롭군요.
지금 익명 사용자들에게 cache로 인한 보이기 지연을 없앤 상태에서는 cache life time을 길게 설정하는 것이 가능하게 때문에 보통 쓰기가 많지 않기 때문에 전체적인 성능 향상을 꾀할 수 있습니다.

익명입니다의 이미지

테스트~

익명 사용자의 이미지

익명 글쓰기 테스트~

익명 사용자의 이미지

시험입니다

익명 사용자의 이미지

테스트 248 은 바로 쓰자마자 바로 보이는군요

익명 사용자의 이미지

테스트 250 : 테스트 249도 쓰자마자 바로 보이는군요

익명 사용자의 이미지

테스트 251 : 테스트 250도 쓰자마자 바로 보이는군요
답글의 답글도 이상이 없습니다

익명 사용자의 이미지

테스트합니다.

익명 사용자의 이미지

잘 되네요.

익명 사용자의 이미지

테스트..

익명 사용자의 이미지

ok..

익명 사용자의 이미지

real??

true??

익명 사용자의 이미지

oh!! Good!!

익명 사용자의 이미지

very very Good!!!!!!!
NICE!!!!!!!

익명 사용자의 이미지

죄송하지만...저도 드루팔을 쓰고 있는데....

패치 방법을 알 수 있을까요??

부탁드립니다...

권순선의 이미지

http://kldp.org/node/85771 에 보시면 패치 & 관련 소스를 얻을 수 있는 링크가 있습니다. 답글들 중에서 저와 modestcode 님이 쓴 답글을 참고하시면 됩니다.

댓글 달기