Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRXls-0007eo-1I for pgsql-hackers@arkaria.postgresql.org; Tue, 08 Mar 2022 11:12:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nRXlq-0000dp-E9 for pgsql-hackers@arkaria.postgresql.org; Tue, 08 Mar 2022 11:12:50 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRXlp-0000df-TG for pgsql-hackers@lists.postgresql.org; Tue, 08 Mar 2022 11:12:50 +0000 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nRXlm-0004sq-QJ for pgsql-hackers@lists.postgresql.org; Tue, 08 Mar 2022 11:12:49 +0000 Received: by mail-wr1-x430.google.com with SMTP id u1so27888624wrg.11 for ; Tue, 08 Mar 2022 03:12:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cybertec-at.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:comments:mime-version :date:message-id; bh=6muczis6Gj/0LkfkQL1+kc0zI06g+JGO0tFDM7N/AWI=; b=6VmN76LK+SCQvART5w1rofwvhexyX2q225A0MzXd6aHxZRPJ53Du0jaSF+dVfjuK5R P9IMu1UHrMqIAy152xezjF8wJ3DaCTVmZLU4/kqwkT6WL9ADsvQpRidiBMXqOKfs25i+ 4n5LzW8BsLV1mY3hjjC8XH2BDzZ3OOlbGpdAM0UzGx7HfJKddbvHklQs70FUKEAUK8vS 3gFUlevg2X8G+YC/uGsNzF8sJfgi+8UV0DR07IbGIgrhrY3OZ0rFyz1k2pJ2eNccVmI7 AntZOTVBwThtKXUbaddy2mIBMOZ/A0xiqvWxYwi39IcdMFnMKXR3+7rE3af5wpwj62Zi gSAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references :comments:mime-version:date:message-id; bh=6muczis6Gj/0LkfkQL1+kc0zI06g+JGO0tFDM7N/AWI=; b=HWNX1cC8otAoRN/+87wnZIhzrk3Fg2jUZDElg77SjdQ+mdQonwzzyV/hhem6uGId/v pnbmsDr6UDAzvyITOdE7Gtr3db116oNK8uIGoReDSQtajTwCdJQloxf2ImyJ1Vl3vjvg B5uWvdRxRCipqaGVzlMiSGRs0ZS020LwwqWkuHs3CNK4ojhg9FR0cd8KnantLSOtEwJd 8eIBxJI/i8I0vnI+F02BKF+cNFf9uJXXUVq1Oj5CjzeGi3zRSAxfwti94nMr1rkiQNEL 2jqLtcVkQYxJotB30a0EENkdvLJ1N1XXE8/jKymddRJq1Wm7gek7mwQs9bsE7cD2VtT+ CNcw== X-Gm-Message-State: AOAM530Jm80J2RhehB0YhbtR/Oh72MX2K7bIaJhV1fH79stlxAtAaj0V 39uctA3XIQjGOOfLJxtPk3uXMzUgiBPA+g== X-Google-Smtp-Source: ABdhPJzqd7E/uopvD2Ixsf0aeJsjH3BwJQflfmXPl2mSrRmAk+94nbH+ghfKXTtqSXZZcpIlvl8SXg== X-Received: by 2002:a5d:64af:0:b0:1f1:e6e5:c7cb with SMTP id m15-20020a5d64af000000b001f1e6e5c7cbmr9330887wrp.642.1646737965212; Tue, 08 Mar 2022 03:12:45 -0800 (PST) Received: from antos (85-207-121-76.static.bluetone.cz. [85.207.121.76]) by smtp.gmail.com with ESMTPSA id f2-20020a056000128200b001f1f39d05b0sm5636270wrx.100.2022.03.08.03.12.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 03:12:44 -0800 (PST) From: Antonin Houska To: Stephen Frost cc: pgsql-hackers@lists.postgresql.org Subject: Re: Temporary file access API In-reply-to: <20220301143431.GT10577@tamriel.snowman.net> References: <4987.1644323098@antos> <20220301143431.GT10577@tamriel.snowman.net> Comments: In-reply-to Stephen Frost message dated "Tue, 01 Mar 2022 09:34:31 -0500." X-Mailer: MH-E 8.6+git; nmh 1.7+dev; GNU Emacs 27.2.50 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Date: Tue, 08 Mar 2022 12:14:59 +0100 Message-ID: <27013.1646738099@antos> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-=-= Content-Type: text/plain Stephen Frost wrote: > * Antonin Houska (ah@cybertec.at) wrote: > > Here I'm starting a new thread to discuss a topic that's related to the > > Transparent Data Encryption (TDE), but could be useful even without that. The > > problem has been addressed somehow in the Cybertec TDE fork, and I can post > > the code here if it helps. However, after reading [1] (and the posts > > upthread), I've got another idea, so let's try to discuss it first. > > Yeah, I tend to agree that it makes sense to discuss the general idea of > doing buffered I/O for the temporary files that are being created today > with things like fwrite and have that be independent of encryption. As > mentioned on that thread, doing our own buffering and having file > accesses done the same way throughout the system is just generally a > good thing and focusing on that will certainly help with any TDE effort > that may or may not happen later. Thanks for your comments, the initial version is attached here. The buffer size is not configurable yet. Besides the new API itself, the patch series shows how it can be used to store logical replication data changes as well as statistics. Further comments are welcome, thanks in advance. -- Antonin Houska Web: https://www.cybertec-postgresql.com --=-=-= Content-Type: application/gzip Content-Disposition: attachment; filename=temp_file_api_v1.tgz Content-Transfer-Encoding: base64 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 --=-=-=--