Re: [PATCH] chunkd: add support for multiple key/value tables

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/10/2009 11:33 AM, Pete Zaitcev wrote:
On Tue, 10 Nov 2009 06:24:09 -0500, Jeff Garzik<jeff@xxxxxxxxxx>  wrote:

	LOGIN(user="jgarzik")
	TABLE-OPEN(name="tabled")
	GET...

2 more turnarounds per session? Brilliant!

The theory behind this is sound: let's not saddle chunkd with caching
authentication results, which is ineffective anyway, but provide
a way for application to amortize the cost of authentication over
a number of requests explicitly. But in practice it means tabled
needs to keep inactive sessions open, which is a chunk of code for
me to write (and debug!). I guess I'll do it in a few months...

chunkd protocol was never intended to be a connect+request+disconnect model... HTTP 1.0 proved that was a bad model, which is why the world moved on to pipelined, multiple-request protocols. connect+request+disconnect protocols waste kernel, IPVS, firewall and router resources, and are distinctly network unfriendly.

So yeah... tabled does need to keep chunkd sessions open, after a chunkd request completes. That was always true, regardless of the multi-kv API change in $Subject.

As a matter of fact, libchunkdc is actually a limiting factor here: even though the chunkd network protocol is pipeline-able, libchunkdc always waits for a response before returning control back to the application. That is not strictly necessary: an application could choose to submit 10 'DEL' requests in a single write(2), and then wait for 10 responses from the server, if it so wished.


@@ -29,9 +29,15 @@ static void test(bool encrypt)
  	stc1 = stc_new(TEST_HOST, port, TEST_USER, TEST_USER_KEY, encrypt);
  	OK(stc1);

+	rcb = stc_table_openz(stc1, TEST_TABLE, 0);
+	OK(rcb);
+
  	stc2 = stc_new(TEST_HOST, port, TEST_USER2, TEST_USER2_KEY, encrypt);
  	OK(stc2);

Having a default table? Naah, those lazy application programmers have
it too easy already!

Again, from the point of view of chunkd, this makes complete sense:
why carry an extra (default) table in cases when application does
in fact set its own tables, right?

If people want a default table, I can put it in. MySQL tries to connect to a database $Username, if database name is not supplied, for example.

But yes, from point of view of chunkd simplicity, no-default-table is certainly more simple, which makes me reluctant to add it.

If the separate API call is bothersome, we could pass table name to stc_new().


+	/*
+	 * we must supply CHF_TABLE_NEW on the first iteration of
+	 * this test, because we are the first test in the testsuite,
+	 * and must create the database to be used by all other tests.
+	 */
+	rcb = stc_table_openz(stc, TEST_TABLE,
+			      ssl ? 0 : CHF_TABLE_NEW);
+	OK(rcb);

You've got to be kidding me. How is tabled supposed to know that
the request it's making is "first"?! I guess I have to supply
CHF_TABLE_NEW to every call now, or else retry if InvalidTable
is returned, I haven't decided what workaround to apply yet.

A fair question... It seemed logical to create the table at the time a new chunkd node comes online, and that the application would want to always run in normal mode WITHOUT CHF_TABLE_NEW -- thus making a table's unexpected absence a hard error, mirroring real life.

Easy alternatives include (a) create on demand and never worry about this detail, and (b) add an 'exclusive' flag analagous to O_EXCL. This complements CHF_TABLE_NEW, which is analagous to O_CREAT.

	Jeff


--
To unsubscribe from this list: send the line "unsubscribe hail-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Fedora Clound]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux