1PMEMOBJ_TX_ADD_RANGE(3)    PMDK Programmer's Manual    PMEMOBJ_TX_ADD_RANGE(3)
2
3
4

NAME

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

SYNOPSIS

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

DESCRIPTION

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

RETURN VALUE

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

SEE ALSO

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)
Impressum