Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:73476 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 22347 invoked from network); 29 Mar 2014 01:10:00 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 29 Mar 2014 01:10:00 -0000 Authentication-Results: pb1.pair.com header.from=yohgaki@gmail.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=yohgaki@gmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.215.44 as permitted sender) X-PHP-List-Original-Sender: yohgaki@gmail.com X-Host-Fingerprint: 209.85.215.44 mail-la0-f44.google.com Received: from [209.85.215.44] ([209.85.215.44:59638] helo=mail-la0-f44.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 03/10-20177-66D16335 for ; Fri, 28 Mar 2014 20:09:58 -0500 Received: by mail-la0-f44.google.com with SMTP id hr13so4325807lab.3 for ; Fri, 28 Mar 2014 18:09:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=nJc/NIW3fZe0dSm9ABNjE9H9VKvlqaD2DNDH/8g8GXg=; b=EMqfkqt04URfBr39GBP1T7mKaEMGq7G4UasH8rDPrn+XyW5B8/hbzH4g9yujBKh7GX qeOEObzr2ZWd6T3Fz1/p/GSTb1Ziu5VnlBHsM84dHzdytje/JlhEbmKTARo5Axa3CXo5 L78bXhpVO6H/w1T696jxBChCen7fMbveR9ycj72RPFcxUOpkXkZPzd+ycH10wbKm2gvb 9C20Zf2gAvhHMQX2Bfpb918t4PWTlsxX7UzywkuiKKZcecKquIXpAiWxhQCXzPwXXq71 cGxKksmfDvKsTc2NhJLA0zRo8sQf1k54970fboP+6gP+hlaAUEsjZFObFBSb757hrVZM IQMA== X-Received: by 10.152.26.66 with SMTP id j2mr7898898lag.25.1396055395033; Fri, 28 Mar 2014 18:09:55 -0700 (PDT) MIME-Version: 1.0 Sender: yohgaki@gmail.com Received: by 10.112.205.73 with HTTP; Fri, 28 Mar 2014 18:09:14 -0700 (PDT) In-Reply-To: References: <010e01cf4788$05f3c5a0$11db50e0$@devtemple.com> <01c801cf47c0$59acbf20$0d063d60$@devtemple.com> Date: Sat, 29 Mar 2014 10:09:14 +0900 X-Google-Sender-Auth: H7DupAkBu_5yQ4hDpY7vLLwLuKg Message-ID: To: Andrey Andreev Cc: Julien Pauli , Bill Salak , "internals@lists.php.net" Content-Type: multipart/alternative; boundary=089e0160be54e8682c04f5b47950 Subject: Re: [PHP-DEV] [RFC] session_start(), read_only, lazy_write; Take 2 From: yohgaki@ohgaki.net (Yasuo Ohgaki) --089e0160be54e8682c04f5b47950 Content-Type: text/plain; charset=UTF-8 Hi Andrey, On Sat, Mar 29, 2014 at 8:41 AM, Andrey Andreev wrote: > You yourself told me that there's no way for the SessionHandler class > to know if the storage module supports PS_UPDATE_TIMESTAMP_FUNC() or > not, and that because of that we can't have > SessionHandler::updateTimestamp(). > It's only applicable for object based user save handler. Since user is implemented their own handler, this limitation should not matter. > > > Writing data and updating time stamp for GC is distinct feature. > > For file-based sessions - it is, but for i.e. a database, there's not > much difference. write() does update the timestamp, I see no reason > why it shouldn't be able to update just the timestamp. > How to update time stamp is up to save handler and its storage. Write and updating time stamp is different operation. Memcache does not need it if data is read. RDBMS may have separate table to keep track time stamp. For PostgreSQL, updating one field is faster than updating whole record. > > > I don't see good reason not to have API for it. > > - Not being able to call parent::updateTimestamp() is a good reason. > - Having the completely unnecessary SessionUpdateTimestampInterface > is a good reason. > - Breaking the design of current userland implementations is a good > reason. > - Not being able to have lazy_write (a performance improvement, I > remind you) by default is a good reason. > I think current design of object based save handler is better to be redesigned. Current object based save handler registers "previous" save handler as its base. However, it's mostly useless without calling parent open() function. i.e. Other calls simply fails when it does not. When open() is called, some resource, e.g. file handle, db connection, etc, is opened. These resources cannot be accessed from user land, since it's not "PHP resource", but raw resource. Thus it's only useful for file based storage. If user is using their own file based storage for some reason, they are better to implement their own handler fully. I would like to remove and clean up this in future release. > > >> > Besides modular design, if write() and updateTimestamp() are merged, > >> > flag > >> > parameter > >> > for write() should be added. It breaks compatibility with current save > >> > handlers. I don't > >> > want BC that could be avoided also. > >> > >> No it shouldn't, the decision whether to write or just update the > >> timestamp is based on an internal flag, or on $session_data. No > >> additional parameters are required. > > > > > > I removed PS(id) dependency from s_read() with new patch as planned. Why > > should I introduce new dependency to s_write(), i.e. sub module, that > breaks > > design? It does not make sense. > > Convenience and consistency in the userland APIs is more important > than "breaking" internal design. I understand you want to stick to > best practices, but those practices are not a religion and sometimes > you need to break them. If you ask me, a lot of things in ext/session > are broken by design ... creating files from inside read() is one > example, all methods exposed to userland to be in an interface is > another. I agree, it's not perfect, but that's just what happens when > we introduce new features into something that was never designed with > possible changes in the future in mind. For PHP6, we'll have the > freedom to redesign the whole thing completely, but for the time being > - userland code is more important than not having some dependancy in > write(). > It's better to stick to cleaner code. Clean code is worth to have. As I mentioned in previous, current object based save handler design has very limited usage and base class part would be better to be removed in the future. (It's not documented also :) Regards, -- Yasuo Ohgaki yohgaki@ohgaki.net --089e0160be54e8682c04f5b47950--