/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2001, 2015 Oracle and/or its affiliates. All rights reserved. * * $Id$ */ DBPRIVATE PREFIX __fop INCLUDE #include "db_int.h" INCLUDE #include "dbinc/crypto.h" INCLUDE #include "dbinc/db_page.h" INCLUDE #include "dbinc/db_am.h" INCLUDE #include "dbinc/txn.h" INCLUDE #include "dbinc/fop.h" INCLUDE /* * create -- create a file system object. * * name: name in the file system * appname: indicates if the name needs to go through __db_appname * mode: file system mode */ BEGIN_COMPAT create 42 143 DBT name DBT s ARG appname u_int32_t lu ARG mode u_int32_t o END BEGIN_COMPAT create 60 143 DBT name DBT s DBT dirname DBT s ARG appname u_int32_t lu ARG mode u_int32_t o END BEGIN create 60p1 143 DBT name DBT s DBT dirname DBT s ARG appname u_int32_t lu ARG mode u_int32_t o END /* * remove -- remove a file system object. * * name: name in the file system * appname: indicates if the name needs to go through __db_appname */ BEGIN_COMPAT remove 60 144 DBT name DBT s DBT fid DBT s ARG appname u_int32_t lu END BEGIN remove 60p1 144 DBT name DBT s DBT fid DBT s ARG appname u_int32_t lu END /* * write: log the writing of data into an object. * * name: file containing the page. * appname: indicates if the name needs to go through __db_appname * pgsize: page size. * pageno: page number in the file. * offset: offset on the page. * page: the actual meta-data page. * flag: non-0 indicates that this is a tempfile, so we needn't undo * these modifications (we'll toss the file). */ BEGIN_COMPAT write 42 145 DBT name DBT s ARG appname u_int32_t lu ARG pgsize u_int32_t lu ARG pageno db_pgno_t lu ARG offset u_int32_t lu DBT page DBT s ARG flag u_int32_t lu END BEGIN_COMPAT write 60 145 DBT name DBT s DBT dirname DBT s ARG appname u_int32_t lu ARG pgsize u_int32_t lu ARG pageno db_pgno_t lu ARG offset u_int32_t lu DBT page DBT s ARG flag u_int32_t lu END BEGIN write 60p1 145 DBT name DBT s DBT dirname DBT s ARG appname u_int32_t lu ARG pgsize u_int32_t lu ARG pageno db_pgno_t lu ARG offset u_int32_t lu DBT page DBT s ARG flag u_int32_t lu END /* * write_file: log the writing of data into a file. * * name: file containing the data. * appname: indicates if the name needs to go through __db_appname * offset_lo: offset in the file, low part of a 64 bit integer. * offset_hi: offset in the file, high part of a 64 bit integer. * old_data: Data being overwritten, if there is any * new_data: Data being written to the file. * flag: DB_FOP_APPEND (0x00000001), DB_FOP_CREATE (0x00000002) and * DB_FOP_REDO (0x00000008). Used to tell how the operation can be * undone, truncating in the case of append and deleting the file in * the case of create, and whether enough information was logged so * that the operation can be redone. */ BEGIN_COMPAT write_file 60 86 DBT name DBT s DBT dirname DBT s ARG appname u_int32_t lu ARG offset_lo u_int32_t lu ARG offset_hi u_int32_t lu DBT old_data DBT s DBT new_data DBT s ARG flag u_int32_t lu END BEGIN write_file 60p1 86 DBT name DBT s DBT dirname DBT s ARG appname u_int32_t lu LONGARG offset u_int64_t llu DBT old_data DBT s DBT new_data DBT s ARG flag u_int32_t lu END /* * rename: move a file from one name to another. * The appname value indicates if this is a path name that should be used * directly (i.e., no interpretation) or if it is a pathname that should * be interpreted via calls to __db_appname. The fileid is the 20-byte * DB fileid of the file being renamed. We need to check it on recovery * so that we don't inadvertently overwrite good files. * * There are two variants of this log record: one that must be both done * and undone and one that is not undone (used for renaming tmp files, see * SR #15119) * * These two record types use the same structure, read, and print functions, * but have different recovery functions. */ BEGIN_COMPAT rename 42 146 DUPLICATE rename_noundo 46 150 DBT oldname DBT s DBT newname DBT s DBT fileid DBT s ARG appname u_int32_t lu END BEGIN_COMPAT rename 60 146 DUPLICATE rename_noundo 60 150 DBT oldname DBT s DBT newname DBT s DBT dirname DBT s DBT fileid DBT s ARG appname u_int32_t lu END BEGIN rename 60p1 146 DUPLICATE rename_noundo 60p1 150 DBT oldname DBT s DBT newname DBT s DBT dirname DBT s DBT fileid DBT s ARG appname u_int32_t lu END /* * File removal record. This is a DB-level log record that indicates * we've just completed some form of file removal. The purpose of this * log record is to logically identify the particular instance of the * named file so that during recovery, in deciding if we should roll-forward * a remove or a rename, we can make sure that we don't roll one forward and * delete or overwrite the wrong file. * real_fid: The 20-byte unique file identifier of the original file being * removed. * tmp_fid: The unique fid of the tmp file that is removed. * name: The pre- __db_appname name of the file * child: The transaction that removed or renamed the file. */ */ BEGIN_COMPAT file_remove 60 141 DBT real_fid DBT s DBT tmp_fid DBT s DBT name DBT s ARG appname u_int32_t lu ARG child u_int32_t lx END BEGIN file_remove 60p1 141 DBT real_fid DBT s DBT tmp_fid DBT s DBT name DBT s ARG appname u_int32_t lu ARG child u_int32_t lx END