1PMEMOBJ_TX_ADD_RANGE(3) PMDK Programmer's Manual PMEMOBJ_TX_ADD_RANGE(3)
2
3
4
6 pmemobj_tx_add_range(), pmemobj_tx_add_range_direct(), pmemo‐
7 bj_tx_xadd_range(), pmemobj_tx_xadd_range_direct()
8
9 TX_ADD(), TX_ADD_FIELD(), TX_ADD_DIRECT(), TX_ADD_FIELD_DIRECT(),
10
11 TX_XADD(), TX_XADD_FIELD(), TX_XADD_DIRECT(), TX_XADD_FIELD_DIRECT(),
12
13 TX_SET(), TX_SET_DIRECT(), TX_MEMCPY(), TX_MEMSET() - transactional ob‐
14 ject manipulation
15
17 #include <libpmemobj.h>
18
19 int pmemobj_tx_add_range(PMEMoid oid, uint64_t off, size_t size);
20 int pmemobj_tx_add_range_direct(const void *ptr, size_t size);
21 int pmemobj_tx_xadd_range(PMEMoid oid, uint64_t off, size_t size, uint64_t flags);
22 int pmemobj_tx_xadd_range_direct(const void *ptr, size_t size, uint64_t flags);
23
24 TX_ADD(TOID o)
25 TX_ADD_FIELD(TOID o, FIELD)
26 TX_ADD_DIRECT(TYPE *p)
27 TX_ADD_FIELD_DIRECT(TYPE *p, FIELD)
28
29 TX_XADD(TOID o, uint64_t flags)
30 TX_XADD_FIELD(TOID o, FIELD, uint64_t flags)
31 TX_XADD_DIRECT(TYPE *p, uint64_t flags)
32 TX_XADD_FIELD_DIRECT(TYPE *p, FIELD, uint64_t flags)
33
34 TX_SET(TOID o, FIELD, VALUE)
35 TX_SET_DIRECT(TYPE *p, FIELD, VALUE)
36 TX_MEMCPY(void *dest, const void *src, size_t num)
37 TX_MEMSET(void *dest, int c, size_t num)
38
40 pmemobj_tx_add_range() takes a “snapshot” of the memory block of given
41 size, located at given offset off in the object specified by oid, and
42 saves it to the undo log. The application is then free to directly
43 modify the object in that memory range. In case of a failure or abort,
44 all the changes within this range will be rolled back. The supplied
45 block of memory has to be within the pool registered in the transac‐
46 tion. This function must be called during TX_STAGE_WORK.
47
48 The pmemobj_tx_xadd_range() function behaves exactly the same as pmemo‐
49 bj_tx_add_range() when flags equals zero. flags is a bitmask of the
50 following values:
51
52 · POBJ_XADD_NO_FLUSH - skip flush on commit when application deals with
53 flushing or uses pmemobj_memcpy_persist)
54
55 · POBJ_XADD_NO_SNAPSHOT - added range will not be “snapshotted”,
56 i.e. any changes made within it during the transaction will not be
57 rolled backed after abort
58
59 · POBJ_XADD_ASSUME_INITIALIZED - added range is assumed to be initial‐
60 ized. If this flag is not specified, passing uninitialized memory
61 will result in an error when run under Valgrind memcheck.
62
63 pmemobj_tx_add_range_direct() behaves the same as pmemo‐
64 bj_tx_add_range() with the exception that it operates on virtual memory
65 addresses and not persistent memory objects. It takes a “snapshot” of
66 a persistent memory block of given size, located at the given address
67 ptr in the virtual memory space and saves it to the undo log. The ap‐
68 plication is then free to directly modify the object in that memory
69 range. In case of a failure or abort, all the changes within this
70 range will be rolled back. The supplied block of memory has to be
71 within the pool registered in the transaction. This function must be
72 called during TX_STAGE_WORK.
73
74 The pmemobj_tx_xadd_range_direct() function behaves exactly the same as
75 pmemobj_tx_add_range_direct() when flags equals zero. flags is a bit‐
76 mask of the following values:
77
78 · POBJ_XADD_NO_FLUSH - skip flush on commit (when application deals
79 with flushing or uses pmemobj_memcpy_persist)
80
81 Similarly to the macros controlling the transaction flow, libpmemobj
82 defines a set of macros that simplify the transactional operations on
83 persistent objects. Note that those macros operate on typed object
84 handles, thus eliminating the need to specify the size of the object,
85 or the size and offset of the field in the user-defined structure that
86 is to be modified.
87
88 The TX_ADD_FIELD() macro saves the current value of given FIELD of the
89 object referenced by a handle o in the undo log. The application is
90 then free to directly modify the specified FIELD. In case of a failure
91 or abort, the saved value will be restored.
92
93 The TX_XADD_FIELD() macro works exactly like TX_ADD_FIELD when flags
94 equals 0. The flags argument is a bitmask of values described in pmem‐
95 obj_tx_xadd_range, above.
96
97 The TX_ADD() macro takes a “snapshot” of the entire object referenced
98 by object handle o and saves it in the undo log. The object size is
99 determined from its TYPE. The application is then free to directly
100 modify the object. In case of a failure or abort, all the changes
101 within the object will be rolled back.
102
103 The TX_XADD() macro works exactly like TX_ADD when flags equals 0. The
104 flags argument is a bitmask of values as described in pmemo‐
105 bj_tx_xadd_range, above.
106
107 The TX_ADD_FIELD_DIRECT() macro saves the current value of the given
108 FIELD of the object referenced by (direct) pointer p in the undo log.
109 The application is then free to directly modify the specified FIELD.
110 In case of a failure or abort, the saved value will be restored.
111
112 The TX_XADD_FIELD_DIRECT() macro works exactly like TX_ADD_FIELD_DIRECT
113 when flags equals 0. The flags argument is a bitmask of values as de‐
114 scribed in pmemobj_tx_xadd_range_direct, above.
115
116 The TX_ADD_DIRECT() macro takes a “snapshot” of the entire object ref‐
117 erenced by (direct) pointer p and saves it in the undo log. The object
118 size is determined from its TYPE. The application is then free to di‐
119 rectly modify the object. In case of a failure or abort, all the
120 changes within the object will be rolled back.
121
122 The TX_XADD_DIRECT() macro works exactly like TX_ADD_DIRECT when flags
123 equals 0. The flags argument is a bitmask of values as described in
124 pmemobj_tx_xadd_range_direct, above.
125
126 The TX_SET() macro saves the current value of the given FIELD of the
127 object referenced by handle o in the undo log, and then sets its new
128 VALUE. In case of a failure or abort, the saved value will be re‐
129 stored.
130
131 The TX_SET_DIRECT() macro saves in the undo log the current value of
132 given FIELD of the object referenced by (direct) pointer p, and then
133 set its new VALUE. In case of a failure or abort, the saved value will
134 be restored.
135
136 The TX_MEMCPY() macro saves in the undo log the current content of dest
137 buffer and then overwrites the first num bytes of its memory area with
138 the data copied from the buffer pointed by src. In case of a failure
139 or abort, the saved value will be restored.
140
141 The TX_MEMSET() macro saves the current content of the dest buffer in
142 the undo log and then fills the first num bytes of its memory area with
143 the constant byte c. In case of a failure or abort, the saved value
144 will be restored.
145
147 On success, pmemobj_tx_add_range(), pmemobj_tx_xadd_range(), pmemo‐
148 bj_tx_add_range_direct() and pmemobj_tx_xadd_range_direct() return 0.
149 Otherwise, the stage is changed to TX_STAGE_ONABORT and an error number
150 is returned.
151
153 pmemobj_tx_alloc(3), pmemobj_tx_begin(3), libpmemobj(7) and
154 <http://pmem.io>
155
156
157
158PMDK - pmemobj API version 2.3 2019-09-19 PMEMOBJ_TX_ADD_RANGE(3)