Read Me
FFFFF L M M
F L ooo MM MM FLoM
FFF L o o M M M Free Lock Manager
F L o o M M a free and open source lock manager
F LLLLL ooo M M
FLoM (Free Lock Manager) is an open source and free lock manager designed to
serialize and synchronize shell command execution and custom programs
developed in C, C++, Java, Perl, PHP, Python.
Both GitHub https://github.com/tiian/flom and
SourceForge https://sourceforge.net/projects/flom/ host FLoM source code.
Basic usage examples are in doc/examples directory (default installation path
is /usr/local/share/doc/flom/examples/)
API documentation is distributed in directory doc/html/ (default installation
path is /usr/local/share/doc/flom/html/) and on the web at http://flom.sourceforge.net/
FLoM is implemented using state of the art reactive programming:
independent non blocking threads reach unparalleled scalability and C language
source code guarantee the best performance. The usage of mutexes is reduced to
trifling functions: FLoM can be considered a "lock free lock manager".
A list of implemented use cases is listed at this URL:
http://sourceforge.net/p/flom/wiki/FLOM%20by%20examples/
This is a brief list of the available features:
- synchronization of shell commands to avoid conflicts on files, directories,
abstract resources
- enforcement of command order execution to avoid one command is executed
before another one
- resource utilization leveling to avoid too many similar tasks run at the
same time
- all the synchronization features are available inside a single host or in
a distributed environment using TCP/IP networking (both IPv4 and IPv6 are
suppoted)
- an autodiscovery feature is available to reduce deployment complexity in a
cloud environment (every node at any time may become a "server" for
the others node)
- easy API (Application Programming Interface) to synchronize your own
programs with shell executed flom commands. These languages have a ready
to use binding: C, C++, Java, Perl, PHP, Python.
- TLS (Transport Layer Security) support to protect network communication and
to supply peer to peer mutual authentication based on X.509 certificates
- a large spectrum of different resources:
1. simple: basic locking using DLM semantic
2. hierarchical: HFS like semantic
3. numerical: pools of undifferentiated resources
4. set: sets of differentiated resources
5. sequence: arrays of transactional (or non transactional) sequences
6. timestamp: arrays of unique timestamp sequences
FLoM central documentation site is hosted by SourceForge Wiki:
https://sourceforge.net/p/flom/wiki/Home/
* FLoM is free software: you can redistribute it and/or modify under the terms
* of GNU General Public License version 2 as published by the Free Software
* Foundation.
*
* FLoM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
Download the tarball from SourceForge: https://sourceforge.net/projects/flom/
and install FLoM using standard GNU build chain:
tar xvzf flom-X.Y.Z.tar.gz
cd flom-X.Y.Z
./configure
make
make
sudo make install
if you are using a Red Hat derivative you will probably use
su
make install
exit
instead of "sudo make install".
NOTE: sorry for the second make command, but there's a dependency related to
Java Native Interface (JNI) that dynamically create a file and
invalidates a dependency.
Take a look to file INSTALL for more details.
Use
man flom
to read man page and pick up Internet relevant URLs for FLOM project.
Use
make check
to perform package automatic tests.
NOTE: do *NOT* run tests on a system that's using flom because some tests
need to kill all FLoM running instances and this is not acceptable if
you are playing production workloads. DO USE A TEST SYSTEM!
NOTE: tests needs the system is NOT overloaded because they stick on timing
and timing breaks if the system is overloaded.
NOTE: FLoM must be installed with "sudo make install" before tests can
proceed (this is a library path issue...)
NOTE: if you are not interested in C++ API library support, specify
"--disable-cpp" at configure time; example:
./configure --disable-cpp
NOTE: if you are not interested in Java API library support, specify
"--disable-java" at configure time; example:
./configure --disable-java
NOTE: if you are not interested in Perl API library support, specify
"--disable-perl" at configure time; example:
./configure --disable-php
NOTE: if you are not interested in PHP API library support, specify
"--disable-php" at configure time; example:
./configure --disable-php
NOTE: if you are not interested in Python API library support, specify
"--disable-python" at configure time; example:
./configure --disable-python
Issues related to multicast and internal Linux firewalling:
the easiest way is to completely disable the internal firewall with
commands
systemctl stop firewalld
systemctl disable firewalld
or alternatively
service ipchains stop
service iptables stop
chkconfig ipchains off
chkconfig iptables off
If you cannot disable the firewall and you want to use FLoM autodiscovery
feature (IP multicast based), you will have to configure the internal
firewall allowing FLoM multicast packets.
If you need some help (usage tricks, hints, etc...) please post a message in
the forum: http://sourceforge.net/p/flom/discussion/
If you think you have discovered a bug, please open an issue here:
https://github.com/tiian/flom/issues
If you avoid to send me an e-mail I will be happy: forum posts and tickets
can be seen by many people and I should not answer the same questions many
times.
Dependencies report:
O.S. Feature Packages
Ubuntu Basic make gcc libglib2.0-dev dbus libdbus-1-dev libssl-dev pkg-config automake
Ubuntu C++ API g++
Ubuntu PHP API swig php5-cli php5-dev
Ubuntu 16.04 PHP API swig php7.0-cli php7.0-dev *
Ubuntu Python API swig python-dev
Ubuntu 10.04 Java API openjdk-6-jdk
Ubuntu 12.04 Java API default-jdk (openjdk 6)
Ubuntu 14.04 Java API default-jdk (openjdk 7)
Ubuntu 16.04 Java API default-jdk (openjdk 8)
CentOS Basic gcc glib2-devel dbus dbus-devel autoconf openssl-devel
CentOS C++ API gcc-c++
CentOS Perl API swig perl-devel
CentOS PHP API swig php-devel
CentOS Python API swig python-devel
CentOS 6.6 Java API java-1.6.0-openjdk* or java-1.7.0-openjdk*
CentOS 7.x Java API java-1.8.0-openjdk*
* Support not yet available for PHP 7.0, see also
https://github.com/tiian/flom/issues/5
Enjoy FLoM!
Ch.F.