<HTML>
<HEAD>
<TITLE>Re: Some debugging code</TITLE>
</HEAD>
<BODY>
<FONT FACE="Verdana, Helvetica, Arial"><SPAN STYLE='font-size:12.0px'>The problem with this is that it assumes exactly how item** hashtable is implemented. &nbsp;Given recent changes to assoc.c to resize the hashtable dynamically, this code would break. &nbsp;I&#8217;d like to see the assoc.c API become more opaque not less.<BR>
<BR>
What might solve the problem is a NEXT command, ie;<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;next &lt;key&gt;\r\n<BR>
&nbsp;&nbsp;&nbsp;&nbsp;=&gt;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;value &lt;key&gt; &lt;f&gt; &lt;exptime&gt;\r\n&lt;value&gt;\r\nnext &lt;next-key&gt;\r\nend\r\n<BR>
<BR>
Where next key is the &#8220;next&#8221; key after the current one by whatever rules assoc.c::hashtable decides. &nbsp;To implement this, one would add assoc.c::assoc_find_next to get the next key given the current one. &nbsp;Something like that seems to me suitable to left around in production code.<BR>
<BR>
<BR>
On 10/31/06 8:54 AM, &quot;Randy Wigginton&quot; &lt;krw@nobugz.com&gt; wrote:<BR>
<BR>
</SPAN></FONT><BLOCKQUOTE><FONT FACE="Verdana, Helvetica, Arial"><SPAN STYLE='font-size:12.0px'><BR>
Many times someone has asked this list &quot;How can I see all the keys in my memcache server?&quot;, and the response is always, &quot;You can't, that isn't the point, etc.&quot;  First, in general I agree that memcache operations need to be extremely fast and not run the risk of tying up the server for any length of time.  However, when debugging, I am not hitting the server very hard, and I've encountered numerous times when I needed to find out what was in the server.  So, if you need to see what your server knows about, you can add this code into the main command handler in memcached.c, and then you will be able to send the &quot;keys&quot; command to get a listing of all keys in that server.<BR>
<BR>
This may not help anyone,and this is not recommended to be used in a high-volume production server.  YMMV.  First, add the following line to assoc.c:<BR>
</SPAN></FONT><FONT SIZE="2"><FONT FACE="Monaco, Courier New"><SPAN STYLE='font-size:10.0px'>item ** getHashtable() { <FONT COLOR="#760F50">return</FONT> hashtable; }<BR>
</SPAN></FONT></FONT><FONT FACE="Verdana, Helvetica, Arial"><SPAN STYLE='font-size:12.0px'><BR>
Then add this code to memcached.c, its pretty obvious where it belongs.<BR>
<BR>
</SPAN></FONT><FONT SIZE="2"><FONT FACE="Monaco, Courier New"><SPAN STYLE='font-size:10.0px'>    <FONT COLOR="#760F50">if</FONT> (strcmp(command, <FONT COLOR="#891315">&quot;keys&quot;</FONT>) == <FONT COLOR="#0000FF">0</FONT>) {<BR>
        <FONT COLOR="#760F50">extern</FONT> item** getHashtable();<BR>
        item **hashtable = getHashtable();<BR>
        <FONT COLOR="#760F50">unsigned</FONT> <FONT COLOR="#760F50">long</FONT> i;<BR>
        <FONT COLOR="#760F50">for</FONT> (i=<FONT COLOR="#0000FF">0</FONT>; i&lt;<FONT COLOR="#0000FF">1</FONT>&lt;&lt;<FONT COLOR="#0000FF">20</FONT><FONT COLOR="#236E25">/*HASHPOWER*/</FONT>; i++) {<BR>
            item *it = hashtable[i];<BR>
<FONT COLOR="#760F50">int</FONT> outOfMem = <FONT COLOR="#0000FF">0</FONT>;<BR>
            <FONT COLOR="#760F50">while</FONT> (it &amp;&amp; !outOfMem) {<BR>
                <FONT COLOR="#760F50">char</FONT> *key = ITEM_key(it);<BR>
outOfMem = add_iov(c, key, strlen(key));<BR>
outOfMem += add_iov(c, <FONT COLOR="#891315">&quot;\r\n&quot;</FONT>, <FONT COLOR="#0000FF">2</FONT>);<BR>
                it = it-&gt;h_next;<BR>
            }<BR>
        }<BR>
        add_iov(c, <FONT COLOR="#891315">&quot;END\r\n&quot;</FONT>, <FONT COLOR="#0000FF">5</FONT>);<BR>
</SPAN></FONT></FONT><FONT FACE="Verdana, Helvetica, Arial"><SPAN STYLE='font-size:12.0px'><BR>
</SPAN></FONT><FONT SIZE="2"><FONT FACE="Monaco, Courier New"><SPAN STYLE='font-size:10.0px'>conn_set_state(c, conn_write);<BR>
c-&gt;write_and_go = conn_read;<BR>
<FONT COLOR="#760F50">return</FONT>;<BR>
    }<BR>
</SPAN></FONT></FONT><FONT FACE="Verdana, Helvetica, Arial"><SPAN STYLE='font-size:12.0px'><BR>
Since this code is NOT a part of the true memcache release, and has not been tested, please be cautious with this.  Good debugging!<BR>
<BR>
<BR>
</SPAN></FONT></BLOCKQUOTE><FONT FACE="Verdana, Helvetica, Arial"><SPAN STYLE='font-size:12.0px'><BR>
</SPAN></FONT>
</BODY>
</HTML>