From d65f7b890a2554c9e3d0cafdb58ac257d4f26ab3 Mon Sep 17 00:00:00 2001 From: Prasanna Kumar Kalever Date: Wed, 25 Jan 2017 16:09:12 +0530 Subject: gluster-blockd: implement transaction framework This patch introduce the transaction locking also, start maintaining meta data journaling per block Every request is follows transaction, at the start of any transaction we take blocking lock on "/block-meta/meta.lock" file and at the end we unlock. Meanwhile while, when the transaction is in progress we do journaling, while performing series of operations, used for future purposes and roll backing. A sample journal file looks like: $ cat /mnt/block-meta/LUN1 GBID: xyz-abc SIZE : 5GiB HA: 3 ENTRYCREATE: INPROGRESS ENTRYCREATE: SUCCESS NODE1: INPROGRESS NODE2: INPROGRESS NODE3: INPROGRESS NODE2: SUCCESS NODE3: FAIL NODE1: SUCCESS NODE4: INPROGRESS NODE4: SUCCESS NODE3: CLEANUPSUCCESS Signed-off-by: Prasanna Kumar Kalever --- rpc/block.h | 1 + rpc/block.x | 1 + rpc/block_xdr.c | 3 +++ 3 files changed, 5 insertions(+) (limited to 'rpc') diff --git a/rpc/block.h b/rpc/block.h index 8cd38fb..132cf63 100644 --- a/rpc/block.h +++ b/rpc/block.h @@ -35,6 +35,7 @@ typedef struct blockCreateCli blockCreateCli; struct blockDeleteCli { char block_name[255]; + char volume[255]; char *block_hosts; }; typedef struct blockDeleteCli blockDeleteCli; diff --git a/rpc/block.x b/rpc/block.x index b90aa45..e5c1984 100644 --- a/rpc/block.x +++ b/rpc/block.x @@ -16,6 +16,7 @@ struct blockCreateCli { struct blockDeleteCli { char block_name[255]; + char volume[255]; string block_hosts<>; }; diff --git a/rpc/block_xdr.c b/rpc/block_xdr.c index c0a5666..3bc0afc 100644 --- a/rpc/block_xdr.c +++ b/rpc/block_xdr.c @@ -50,6 +50,9 @@ xdr_blockDeleteCli (XDR *xdrs, blockDeleteCli *objp) if (!xdr_vector (xdrs, (char *)objp->block_name, 255, sizeof (char), (xdrproc_t) xdr_char)) return FALSE; + if (!xdr_vector (xdrs, (char *)objp->volume, 255, + sizeof (char), (xdrproc_t) xdr_char)) + return FALSE; if (!xdr_string (xdrs, &objp->block_hosts, ~0)) return FALSE; return TRUE; -- cgit