Alien-Libjio
view release on metacpan or search on metacpan
libjio/doc/libjio.rst view on Meta::CPAN
simultaneous operations (either across threads or processes). They are
described in detail in the manual pages, we'll only list them here for
completion:
- jopen()
- jread(), jpread(), jreadv()
- jwrite(), jpwrite(), jwritev()
- jtruncate()
- jclose()
ACID warranties
---------------
Database people like ACID (well, that's not news for anybody), which they say
mean "Atomicity, Consistency, Isolation, Durability".
So, even when libjio is not a purely database thing, its transactions provide
those properties. Let's take a look one by one:
Atomicity
In a transaction involving two or more discrete pieces of information,
either all of the pieces are committed or none are. This has been talked
before and we've seen how the library achieves this point, mostly based on
locks and relying on a commit procedure.
Consistency
A transaction either creates a new and valid state of data, or, if any
failure occurs, returns all data to its state before the transaction was
started. This, like atomicity, has been discussed before, specially in the
recovery section, when we saw how in case of a crash we end up with a fully
applied transaction, or no transaction applied at all.
Isolation
A transaction in process and not yet committed must remain isolated from any
other transaction. This comes as a side effect of doing proper locking on
the sections each transaction affect, and guarantees that there can't be two
transactions working on the same section at the same time.
Durability
Committed data is saved by the system such that, even in the event of a
failure, the data is available in a correct state. To provide this, libjio
relies on the disk as a method of permanent storage, and expects that when
it does syncronous I/O, data is safely written and can be recovered after a
crash.
Working from outside
--------------------
If you want, and are careful enough, you can safely use the library and still
do I/O using the regular UNIX calls.
This section provides some general guidelines that you need to follow in order
to prevent corruption. Of course you can bend or break them according to your
use, this is just a general overview on how to interact from outside.
- Lock the sections you want to use: the library, as we have already exposed,
relies on fcntl() locking; so, if you intend to operate on parts on the
file while using it, you should lock them.
- Don't truncate, unlink or rename: these operations have serious
implications when they're done while using the library, because the library
itself assumes that names don't change, and files don't disappear from
underneath it. It could potentially lead to corruption, although most of
the time you would just get errors from every call.
( run in 1.370 second using v1.01-cache-2.11-cpan-2398b32b56e )