Distributed disk storage database based on Raft and Redis protocol.

Overview

IceFireDB

IceFireDB

test build FOSSA Status

Distributed disk storage system based on Raft and RESP protocol.

  1. High performance
  2. Distributed consistency
  3. Reliable LSM disk storage
  4. Cold and hot mixed data storage structure
  5. Multiple groups of raft clusters, horizontal expansion and contraction of data groups(Upgrading soon)
  6. More advanced cache implementation, faster LSM persistent storage

Imagine Architecture

IceFireDB_Architecture

Command support

1. String operating

  • APPEND
  • BITCOUNT
  • BITOP
  • BITPOS
  • DECR
  • DECRBY
  • DEL
  • EXISTS
  • GET
  • GETBIT
  • SETBIT
  • GETRANGE
  • GETSET
  • INCR
  • INCRBY
  • MGET
  • MSET
  • SET
  • SETEX
  • SETEXAT
  • SETRANGE
  • EXPIRE
  • EXPIREAT
  • TTL

2. Hash operating

  • HSET
  • HGET
  • HDEL
  • HEXISTS
  • HGETALL
  • HINCRBY
  • HKEYS
  • HLEN
  • HMGET
  • HMSET
  • HSETEX
  • HSTRLEN
  • HVALS
  • HCLEAR
  • HMCLEAR
  • HEXPIRE
  • HEXPIREAT
  • HKEYEXIST
  • HTTL

3. List operating

  • RPUSH
  • LPOP
  • LINDEX
  • LPUSH
  • RPOP
  • LRANGE
  • LSET
  • LLEN
  • RPOPLPUSH
  • LCLEAR
  • LMCLEAR
  • LEXPIRE
  • LEXPIREAT
  • LKEYEXISTS
  • LTRIM
  • LTTL

4. Sorted Sets

  • ZADD
  • ZCARD
  • ZCOUNT
  • ZREM
  • ZCLEAR
  • ZRANK
  • ZRANGE
  • ZREVRANGE
  • ZSCORE
  • ZINCRBY
  • ZREVRANK
  • ZRANGEBYSCORE
  • ZREVRANGEBYSCORE
  • ZREMRANGEBYSCORE
  • ZREMRANGEBYRANK

5. Sets

  • SADD
  • SCARD
  • SDIFF
  • SDIFFSTORE
  • SINTER
  • SINTERSTORE
  • SISMEMBER
  • SMEMBERS
  • SREM
  • SUNION
  • SUNIONSTORE
  • SCLEAR
  • SMCLEAR
  • SEXPIRE
  • SEXPIREAT
  • STTL
  • SPERSIST
  • SKEYEXISTS

6. System cmd

  • INFO
  • FLUSHALL
  • HSCAN
  • SSCAN
  • ZSCAN
  • XSCAN
  • XHSCAN
  • XSSCAN
  • XZSCAN

Performance

[email protected]:~/DATA/ICODE/GoLang/IceFireDB$ redis-benchmark  -h 127.0.0.1 -p 11001 -n 10000000 -t set,get -c 512 -P 512 -q

SET: 253232.12 requests per second
GET: 2130875.50 requests per second

License

FOSSA Status

Thanks

I stood on the shoulders of giants and did only simple things. Thank you for your attention.

Disclaimers

When you use this software, you have agreed and stated that the author, maintainer and contributor of this software are not responsible for any risks, costs or problems you encounter. If you find a software defect or BUG, ​​please submit a patch to help improve it!

Issues
  • chore(deps): bump github.com/dgraph-io/badger/v3 from 3.2103.1 to 3.2103.2

    chore(deps): bump github.com/dgraph-io/badger/v3 from 3.2103.1 to 3.2103.2

    Bumps github.com/dgraph-io/badger/v3 from 3.2103.1 to 3.2103.2.

    Release notes

    Sourced from github.com/dgraph-io/badger/v3's releases.

    BadgerDB v3.2103.2

    This patch release contains:

    Fixed

    • fix(compact): close vlog after the compaction at L0 has been completed (#1752)
    • fix(builder): put the upper limit on reallocation (#1748)
    • deps: Bump github.com/google/flatbuffers to v1.12.1 (#1746)
    • fix(levels): Avoid a deadlock when acquiring read locks in levels (#1744)
    • fix(pubsub): avoid deadlock in publisher and subscriber (#1749) (#1751)

    Full Changelog: https://github.com/dgraph-io/badger/compare/v3.2103.1...v3.2103.2

    Changelog

    Sourced from github.com/dgraph-io/badger/v3's changelog.

    [3.2103.2] - 2021-10-07

    Fixed

    • fix(compact): close vlog after the compaction at L0 has completed (#1752)
    • fix(builder): put the upper limit on reallocation (#1748)
    • deps: Bump github.com/google/flatbuffers to v1.12.1 (#1746)
    • fix(levels): Avoid a deadlock when acquiring read locks in levels (#1744)
    • fix(pubsub): avoid deadlock in publisher and subscriber (#1749) (#1751)
    Commits
    • f388e91 Update changelog for v3.2103.2
    • 09a6157 fix(compact): close vlog after the compaction at L0 has completed (#1752)
    • 4298c58 fix(builder): put the upper limit on reallocation (#1748)
    • 644971a deps: Bump github.com/google/flatbuffers to v1.12.1 (#1746)
    • 0c13869 Fix(levels): Avoid a deadlock when acquiring read locks in levels (#1744)
    • e4e2ad7 fix: avoid deadlock in publisher and subscriber (#1749) (#1751)
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.

    Dependabot will merge this PR once CI passes on it, as requested by @gitsrc.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies go 
    opened by dependabot[bot] 8
  • chore(deps): bump github.com/go-redis/redis/v8 from 8.11.3 to 8.11.4

    chore(deps): bump github.com/go-redis/redis/v8 from 8.11.3 to 8.11.4

    Bumps github.com/go-redis/redis/v8 from 8.11.3 to 8.11.4.

    Release notes

    Sourced from github.com/go-redis/redis/v8's releases.

    v8.11.4

    Please refer to CHANGELOG.md for details

    Changelog

    Sourced from github.com/go-redis/redis/v8's changelog.

    8.11.4 (2021-10-04)

    Features

    • add acl auth support for sentinels (f66582f)
    • add Cmd.{String,Int,Float,Bool}Slice helpers and an example (5d3d293)
    • add SetVal method for each command (168981d)

    v8.11

    • Remove OpenTelemetry metrics.
    • Supports more redis commands and options.

    v8.10

    • Removed extra OpenTelemetry spans from go-redis core. Now go-redis instrumentation only adds a single span with a Redis command (instead of 4 spans). There are multiple reasons behind this decision:

      • Traces become smaller and less noisy.
      • It may be costly to process those 3 extra spans for each query.
      • go-redis no longer depends on OpenTelemetry.

      Eventually we hope to replace the information that we no longer collect with OpenTelemetry Metrics.

    v8.9

    • Changed PubSub.Channel to only rely on Ping result. You can now use WithChannelSize, WithChannelHealthCheckInterval, and WithChannelSendTimeout to override default settings.

    v8.8

    • To make updating easier, extra modules now have the same version as go-redis does. That means that you need to update your imports:
    github.com/go-redis/redis/extra/redisotel -> github.com/go-redis/redis/extra/redisotel/v8
    github.com/go-redis/redis/extra/rediscensus -> github.com/go-redis/redis/extra/rediscensus/v8
    

    v8.5

    • knadh contributed long-awaited ability to scan Redis Hash into a struct:
    </tr></table> 
    

    ... (truncated)

    Commits
    • fa51524 Merge pull request #1917 from go-redis/release/v8.11.4
    • 0457d0a chore: release v8.11.4 (release.sh)
    • 6dcfc56 chore: use conv commit message
    • 86258a1 chore: lazy reload when moved or ask
    • 98bb99d Fix Redis Cluster issue during roll outs of new nodes with same addr (#1914)
    • 5072031 chore: add Lua scripting example
    • 739c188 chore: tweak GH actions to run all jobs
    • cc09f96 Merge pull request #1909 from go-redis/feature/slice-helpers
    • 5d3d293 feat: add Cmd.{String,Int,Float,Bool}Slice helpers and an example
    • 329d87f Merge pull request #1906 from Stavrospanakakis/master
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.

    Dependabot will merge this PR once it's up-to-date and CI passes on it, as requested by @gitsrc.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies go 
    opened by dependabot[bot] 4
  • Documentation to start up and query cluster?

    Documentation to start up and query cluster?

    Hello,

    I was able to compile IceFireDB but have not found any documentation that shows the steps to start up a multi-node cluster and then make some queries?

    I am interested in highly distributed P2P usage and scaling limits of IceFireDB Thanks

    opened by lonnietc 3
  • Missing Copyright Notice and License to Uhaha

    Missing Copyright Notice and License to Uhaha

    Hi,

    The source code in the rafthub directory of this project is directly copied from https://github.com/tidwall/uhaha/blob/master/uhaha.go, which is 3K+ lines of original source code written and copyrighted by me.

    The original copyright notice and LICENSE were omitted.

    The Uhaha LICENSE states:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    opened by tidwall 3
  • chore(deps): bump github.com/tidwall/redcon from 1.4.1 to 1.4.2

    chore(deps): bump github.com/tidwall/redcon from 1.4.1 to 1.4.2

    Bumps github.com/tidwall/redcon from 1.4.1 to 1.4.2.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies go 
    opened by dependabot[bot] 2
  • feat(RedisCmdRewrite): Implementation of redis instruction rewrite

    feat(RedisCmdRewrite): Implementation of redis instruction rewrite

    Hello, because the raft log rollback exception occurs when raft is combined with the underlying storage, I helped you build an instruction rewrite plug-in layer, and "ArgsHandler" implements the redis instruction rewrite interface. Processing logic introduction:

    • Receive the redis command and current time of type [][]string.
    • Traverse the args, and rewrite the instructions as setex, expire, lexpire, and hexpire through the timestamp.
    opened by Jchicode 2
  • feat(hybriddb): add the cache layer

    feat(hybriddb): add the cache layer

    Hello, I helped you build a hot data caching layer, "Hybriddb" implements ledisdb storage interface.

    Introduction to processing logic:

    • When reading kv data, first check the memory cache, if it is lost, query the disk data and store it in the memory

    • When writing kv data, directly clear the memory cache and wait for the next read data cache to the memory

    opened by pretty66 2
  • feat: add tests for cmds

    feat: add tests for cmds

    Hi,

    Great works, I add tests for commands.

    Still working in progress.

    Done!

    • [x] strings commands
    • [x] hash commands
    • [x] list commands
    • [x] sorted commands
    opened by mayocream 2
  • Neat idea, but need more documentation

    Neat idea, but need more documentation

    I want to understand what is the architecture. What is the process of configuring, adding, removing nodes?

    How was raft integrated with redis, IE. where was raft end and redis begin?

    documentation 
    opened by Pyrolistical 2
  • feat(make):upgrade make command

    feat(make):upgrade make command

    In the MacOS operating system, we need to manually modify the value of GOOS to compile, which is not enough to traverse. Using uname in Unix to automatically obtain the value of GOOS, so we can directly perform the Make operation.

    Good Luck.

    opened by sun-iot 1
  • chore(deps): bump github.com/ipfs/go-ipfs from 0.12.2 to 0.13.1

    chore(deps): bump github.com/ipfs/go-ipfs from 0.12.2 to 0.13.1

    Bumps github.com/ipfs/go-ipfs from 0.12.2 to 0.13.1.

    Release notes

    Sourced from github.com/ipfs/go-ipfs's releases.

    v0.13.1

    go-ipfs v0.13.1 Release

    This release includes security fixes for various DOS vectors when importing untrusted user input with ipfs dag import and the v0/dag/import endpoint.

    View the linked security advisory for more information.

    Changelog

    • github.com/ipfs/go-ipfs:
      • chore: update car
    • github.com/ipld/go-car (v0.3.2 -> v0.4.0) & (v2.1.1 -> v2.4.0):
      • Bump version in prep for releasing go-car v0
      • Revert changes to insertionindex
      • Revert changes to index.Index while keeping most of security fixes
      • Return error when section length is invalid varint
      • Drop repeated package name from CarStats
      • Benchmark Reader.Inspect with and without hash validation
      • Use consistent CID mismatch error in Inspect and BlockReader.Next
      • Use streaming APIs to verify the hash of blocks in CAR Inspect
      • test: add fuzzing for reader#Inspect
      • feat: add block hash validation to Inspect()
      • feat: add Reader#Inspect() function to check basic validity of a CAR and return stats
      • Remove support for ForEach enumeration from car-index-sorted
      • Use a fix code as the multihash code for CarIndexSorted
      • Fix testutil assertion logic and update index generation tests
      • fix: tighter constraint of singleWidthIndex width, add index recommentation docs
      • fix: explicitly disable serialization of insertionindex
      • feat: MaxAllowed{Header,Section}Size option
      • feat: MaxAllowedSectionSize default to 32M
      • fix: use CidFromReader() which has overread and OOM protection
      • fix: staticcheck catches
      • fix: revert to internalio.NewOffsetReadSeeker in Reader#IndexReader
      • fix index comparisons
      • feat: Refactor indexes to put storage considerations on consumers
      • test: v2 add fuzzing of the index
      • fix: v2 don't divide by zero in width indexes
      • fix: v2 don't allocate indexes too big
      • test: v2 add fuzzing to Reader
      • fix: v2 don't accept overflowing offsets while reading v2 headers
      • test: v2 add fuzzing to BlockReader
      • fix: v2 don't OOM if the header size is too big
      • test: add fuzzing of NewCarReader
      • fix: do bound check while checking for CIDv0
      • fix: don't OOM if the header size is too big
      • Add API to regenerate index from CARv1 or CARv2

    ... (truncated)

    Changelog

    Sourced from github.com/ipfs/go-ipfs's changelog.

    v0.13.1 2022-07-06

    This release includes security fixes for various DOS vectors when importing untrusted user input with ipfs dag import and the v0/dag/import endpoint.

    View the linked security advisory for more information.

    Changelog

    • github.com/ipfs/go-ipfs:
      • chore: update car
    • github.com/ipld/go-car (v0.3.2 -> v0.4.0) & (v2.1.1 -> v2.4.0):
      • Bump version in prep for releasing go-car v0
      • Revert changes to insertionindex
      • Revert changes to index.Index while keeping most of security fixes
      • Return error when section length is invalid varint
      • Drop repeated package name from CarStats
      • Benchmark Reader.Inspect with and without hash validation
      • Use consistent CID mismatch error in Inspect and BlockReader.Next
      • Use streaming APIs to verify the hash of blocks in CAR Inspect
      • test: add fuzzing for reader#Inspect
      • feat: add block hash validation to Inspect()
      • feat: add Reader#Inspect() function to check basic validity of a CAR and return stats
      • Remove support for ForEach enumeration from car-index-sorted
      • Use a fix code as the multihash code for CarIndexSorted
      • Fix testutil assertion logic and update index generation tests
      • fix: tighter constraint of singleWidthIndex width, add index recommentation docs
      • fix: explicitly disable serialization of insertionindex
      • feat: MaxAllowed{Header,Section}Size option
      • feat: MaxAllowedSectionSize default to 32M
      • fix: use CidFromReader() which has overread and OOM protection
      • fix: staticcheck catches
      • fix: revert to internalio.NewOffsetReadSeeker in Reader#IndexReader
      • fix index comparisons
      • feat: Refactor indexes to put storage considerations on consumers
      • test: v2 add fuzzing of the index
      • fix: v2 don't divide by zero in width indexes
      • fix: v2 don't allocate indexes too big
      • test: v2 add fuzzing to Reader
      • fix: v2 don't accept overflowing offsets while reading v2 headers
      • test: v2 add fuzzing to BlockReader
      • fix: v2 don't OOM if the header size is too big
      • test: add fuzzing of NewCarReader
      • fix: do bound check while checking for CIDv0
      • fix: don't OOM if the header size is too big
      • Add API to regenerate index from CARv1 or CARv2
      • PrototypeChooser support (#305) (ipld/go-car#305)
      • bump to newer blockstore err not found (#301) (ipld/go-car#301)
      • Car command supports for largebytes nodes (#296) (ipld/go-car#296)
      • fix(test): rootless fixture should have no roots, not null roots

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies go 
    opened by dependabot[bot] 1
Owner
IceFireDB
Distributed disk storage database based on Raft and Redis protocol.
IceFireDB
null 1 Feb 3, 2022
A distributed MySQL binlog storage system built on Raft

What is kingbus? 中文 Kingbus is a distributed MySQL binlog store based on raft. Kingbus can act as a slave to the real master and as a master to the sl

Fei Chen 849 Jul 21, 2022
A linearizability distributed database by raft and wisckey.

AlfheimDB A linearizability distributed database by raft and wisckey, which supports redis client. Build This project build by mage, you will need ins

chunming.dong 73 Jul 18, 2022
The TinyKV course builds a key-value storage system with the Raft consensus algorithm.

The TinyKV Course The TinyKV course builds a key-value storage system with the Raft consensus algorithm. It is inspired by MIT 6.824 and TiKV Project.

jaegerwang 1 Nov 19, 2021
Golang implementation of the Raft consensus protocol

raft raft is a Go library that manages a replicated log and can be used with an FSM to manage replicated state machines. It is a library for providing

HashiCorp 6.3k Aug 2, 2022
An implementation of a distributed KV store backed by Raft tolerant of node failures and network partitions 🚣

barge A simple implementation of a consistent, distributed Key:Value store which uses the Raft Concensus Algorithm. This project launches a cluster of

Shehjad Khan 0 Nov 24, 2021
Easy to use Raft library to make your app distributed, highly available and fault-tolerant

An easy to use customizable library to make your Go application Distributed, Highly available, Fault Tolerant etc... using Hashicorp's Raft library wh

Richard Bertok 58 May 29, 2022
Fast, efficient, and scalable distributed map/reduce system, DAG execution, in memory or on disk, written in pure Go, runs standalone or distributedly.

Gleam Gleam is a high performance and efficient distributed execution system, and also simple, generic, flexible and easy to customize. Gleam is built

Chris Lu 3.1k Aug 2, 2022
Distributed-Services - Distributed Systems with Golang to consequently build a fully-fletched distributed service

Distributed-Services This project is essentially a result of my attempt to under

Hamza Yusuff 6 Jun 1, 2022
A feature complete and high performance multi-group Raft library in Go.

Dragonboat - A Multi-Group Raft library in Go / 中文版 News 2021-01-20 Dragonboat v3.3 has been released, please check CHANGELOG for all changes. 2020-03

lni 4.3k Jul 27, 2022
JuiceFS is a distributed POSIX file system built on top of Redis and S3.

JuiceFS is a high-performance POSIX file system released under GNU Affero General Public License v3.0. It is specially optimized for the cloud-native

Juicedata, Inc 5.7k Aug 4, 2022
A naive implementation of Raft consensus algorithm.

This implementation is used to learn/understand the Raft consensus algorithm. The code implements the behaviors shown in Figure 2 of the Raft paper wi

Martin 0 Dec 3, 2021
Raft: a consensus algorithm for managing a replicated log

Raft Consensus Algorithm Raft is a consensus algorithm for managing a replicated

null 0 Dec 20, 2021
This is my implementation of Raft consensus algorithm that I did for own learning.

This is my implementation of Raft consensus algorithm that I did for own learning. Please follow the link to learn more about raft consensus algorithm https://raft.github.io. And Soon, I will be developing same algorithm in Java as well

Umar Tahir 1 Jan 12, 2022
BlobStore is a highly reliable,highly available and ultra-large scale distributed storage system

BlobStore Overview Documents Build BlobStore Deploy BlobStore Manage BlobStore License Overview BlobStore is a highly reliable,highly available and ul

CubeFS 15 Jun 30, 2022
Simplified distributed locking implementation using Redis

redislock Simplified distributed locking implementation using Redis. For more information, please see examples. Examples import ( "fmt" "time"

Black Square Media 756 Aug 3, 2022
A distributed key-value storage system developed by Alibaba Group

Product Overview Tair is fast-access memory (MDB)/persistent (LDB) storage service. Using a high-performance and high-availability distributed cluster

Alibaba 1.9k Aug 3, 2022
Distributed lock manager. Warning: very hard to use it properly. Not because it's broken, but because distributed systems are hard. If in doubt, do not use this.

What Dlock is a distributed lock manager [1]. It is designed after flock utility but for multiple machines. When client disconnects, all his locks are

Sergey Shepelev 25 Dec 24, 2019