From 3beb0892d6ca3ae4b0bbf2476068d4397bc01f74 Mon Sep 17 00:00:00 2001 From: sageweil Date: Tue, 22 May 2007 22:43:31 +0000 Subject: [PATCH] * rollback caps goof git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@1367 29311d96-e01e-0410-9327-a35deaab8ce9 --- branches/sage/pgs/mds/Capability.h | 17 ++---- branches/sage/pgs/mds/FileLock.h | 95 ++++++++++++------------------ 2 files changed, 42 insertions(+), 70 deletions(-) diff --git a/branches/sage/pgs/mds/Capability.h b/branches/sage/pgs/mds/Capability.h index c2e43f04e7cd9..70b237ca863a4 100644 --- a/branches/sage/pgs/mds/Capability.h +++ b/branches/sage/pgs/mds/Capability.h @@ -30,8 +30,6 @@ using namespace std; #define CAP_FILE_WREXTEND 8 // client can extend file #define CAP_FILE_WRBUFFER 16 // client can safely buffer writes #define CAP_FILE_LAZYIO 32 // client can perform lazy io -#define CAP_FILE_RDREPLICA 64 // client can read object replicas (does not mix with _WRSLOPPY) -#define CAP_FILE_WRSLOPPY 128 // client can write sloppily across replicas (does not mix with _RDREPLICA) // heuristics @@ -47,8 +45,6 @@ inline string cap_string(int cap) if (cap & CAP_FILE_WRBUFFER) s += " wrbuffer"; if (cap & CAP_FILE_WRBUFFER) s += " wrextend"; if (cap & CAP_FILE_LAZYIO) s += " lazyio"; - if (cap & CAP_FILE_RDREPLICA) s += " rdreplica"; - if (cap & CAP_FILE_WRSLOPPY) s += " wrsloppy"; s += " ]"; return s; } @@ -59,7 +55,7 @@ class Capability { map cap_history; // seq -> cap long last_sent, last_recv; - + bool suppress; public: @@ -67,7 +63,9 @@ public: wanted_caps(want), last_sent(s), last_recv(s), - suppress(false) { } + suppress(false) { + //cap_history[last_sent] = 0; + } bool is_suppress() { return suppress; } @@ -114,18 +112,13 @@ public: } int needed() { return needed(wanted_caps); } - /** conflicts - * defines fundamental conflicts between issued capability bits - */ + // conflicts static int conflicts(int from) { int c = 0; if (from & CAP_FILE_WRBUFFER) c |= CAP_FILE_RDCACHE|CAP_FILE_RD; if (from & CAP_FILE_WR) c |= CAP_FILE_RDCACHE; if (from & CAP_FILE_RD) c |= CAP_FILE_WRBUFFER; if (from & CAP_FILE_RDCACHE) c |= CAP_FILE_WRBUFFER|CAP_FILE_WR; - - if (from & CAP_FILE_RDREPLICA) c |= CAP_FILE_WRSLOPPY; - if (from & CAP_FILE_WRSLOPPY) c |= CAP_FILE_RDREPLICA; return c; } int wanted_conflicts() { return conflicts(wanted()); } diff --git a/branches/sage/pgs/mds/FileLock.h b/branches/sage/pgs/mds/FileLock.h index 81aae0508da7d..8499280147e3e 100644 --- a/branches/sage/pgs/mds/FileLock.h +++ b/branches/sage/pgs/mds/FileLock.h @@ -25,58 +25,47 @@ using namespace std; #include "Capability.h" // states and such. -// C = cache reads, R = read, W = write, A = append, B = buffer writes -// L = lazyio -// R = readable replicas, S = sloppy writes - -// -----auth------------ ---replica----------- -#define LOCK_SYNC_ 1 // AR R . / C R . . . L R . R . / C R . . . L . . stat() -#define LOCK_GSYNCL -12 // A . . / C ? . . . L . . loner -> sync (*) -#define LOCK_GSYNCRM -13 // A . . / . R . . . L R . -#define LOCK_GSYNCWM -13 // A . . / . R . . . L . . - -#define LOCK_LOCK_ 2 // AR R W / C . . . . . . . . . / C . . . . . . . truncate() -#define LOCK_GLOCKR_ -3 // AR R . / C . . . . . . . . . / C . . . . . . . -#define LOCK_GLOCKL -4 // A . . / C . . . . . . . loner -> lock -#define LOCK_GLOCKM -5 // A . . / . . . . . . . . - -#define LOCK_RMIXED 6 // AR . . / . R W A . L R . . . / . R . . . L R . -#define LOCK_GRMIXEDR -7 // AR R . / . R . . . L R . . . / . R . . . L . . -#define LOCK_GRMIXEDL -8 // A . . / . . . . . L R . loner -> rmixed -#define LOCK_GRMIXEDM -17 // A . . / . R W A . L R . . . / . R . . . L . . wmixed -> rmixed - -#define LOCK_WMIXED 14 // AR . . / . R W A . L . S . . / . R . . . L . S -#define LOCK_GWMIXEDR -15 // AR R . / . R . . . L . S . . / . R . . . L . . -#define LOCK_GWMIXEDL -16 // A . . / . . . . . L . S loner -> mixed -#define LOCK_GWMIXEDM -17 // A . . / . R W A . L . S . . / . R . . . L . . rmixed -> wmixed - -#define LOCK_LONER 9 // A . . / C R W A B L R S (lock) -#define LOCK_GLONERR -10 // A . . / . R . . . L R . -#define LOCK_GLONERRM -11 // A . . / . R W A . L R . -#define LOCK_GLONERWM -18 // A . . / . R W A . L . S +// C = cache reads, R = read, W = write, A = append, B = buffer writes, L = lazyio + +// -----auth-------- ---replica------- +#define LOCK_SYNC_ 1 // AR R . / C R . . . L R . / C R . . . L stat() +#define LOCK_GSYNCL -12 // A . . / C ? . . . L loner -> sync (*) +#define LOCK_GSYNCM -13 // A . . / . R . . . L + +#define LOCK_LOCK_ 2 // AR R W / C . . . . . . . / C . . . . . truncate() +#define LOCK_GLOCKR_ -3 // AR R . / C . . . . . . . / C . . . . . +#define LOCK_GLOCKL -4 // A . . / C . . . . . loner -> lock +#define LOCK_GLOCKM -5 // A . . / . . . . . . + +#define LOCK_MIXED 6 // AR . . / . R W A . L . . / . R . . . L +#define LOCK_GMIXEDR -7 // AR R . / . R . . . L . . / . R . . . L +#define LOCK_GMIXEDL -8 // A . . / . . . . . L loner -> mixed + +#define LOCK_LONER 9 // A . . / C R W A B L (lock) +#define LOCK_GLONERR -10 // A . . / . R . . . L +#define LOCK_GLONERM -11 // A . . / . R W A . L // (*) FIXME: how to let old loner keep R, somehow, during GSYNCL +// 4 stable +// +9 transition +// 13 total + inline const char *get_filelock_state_name(int n) { switch (n) { case LOCK_SYNC: return "sync"; case LOCK_GSYNCL: return "gsyncl"; - case LOCK_GSYNCRM: return "gsyncrm"; - case LOCK_GSYNCWM: return "gsyncwm"; + case LOCK_GSYNCM: return "gsyncm"; case LOCK_LOCK: return "lock"; case LOCK_GLOCKR: return "glockr"; case LOCK_GLOCKL: return "glockl"; case LOCK_GLOCKM: return "glockm"; - case LOCK_RMIXED: return "rmixed"; - case LOCK_GRMIXEDR: return "grmixedr"; - case LOCK_GRMIXEDL: return "grmixedl"; - case LOCK_WMIXED: return "wmixed"; - case LOCK_GWMIXEDR: return "gwmixedr"; - case LOCK_GWMIXEDL: return "gwmixedl"; + case LOCK_MIXED: return "mixed"; + case LOCK_GMIXEDR: return "gmixedr"; + case LOCK_GMIXEDL: return "gmixedl"; case LOCK_LONER: return "loner"; case LOCK_GLONERR: return "glonerr"; - case LOCK_GLONERRM: return "glonerrm"; - case LOCK_GLONERWM: return "glonerwm"; + case LOCK_GLONERM: return "glonerm"; default: assert(0); } } @@ -119,25 +108,15 @@ class FileLock : public SimpleLock { case LOCK_GLONERR: case LOCK_GLONERM: return LOCK_LOCK; - case LOCK_RMIXED: - case LOCK_GRMIXEDR: - return LOCK_RMIXED; - case LOCK_WMIXED: - case LOCK_GWMIXEDR: - return LOCK_WMIXED; + case LOCK_MIXED: + case LOCK_GMIXEDR: + return LOCK_MIXED; case LOCK_SYNC: return LOCK_SYNC; - case LOCK_GRMIXEDM: - return LOCK_GRMIXEDM; - case LOCK_GWMIXEDM: - return LOCK_GWMIXEDM; - // after gather auth will bc LOCK_AC_MIXED or whatever - case LOCK_GSYNCRM: - return LOCK_RMIXED; - case LOCK_GSYNCWM: - return LOCK_WMIXED; + case LOCK_GSYNCM: + return LOCK_MIXED; case LOCK_GSYNCL: case LOCK_GMIXEDL: // ** LOCK isn't exact right state, but works. return LOCK_LOCK; @@ -162,7 +141,7 @@ class FileLock : public SimpleLock { } bool can_rdlock_soon() { if (parent->is_auth()) - return (state == LOCK_FGLOCKL); + return (state == LOCK_GLOCKL); else return false; } @@ -185,7 +164,7 @@ class FileLock : public SimpleLock { if (parent->is_auth()) switch (state) { case LOCK_SYNC: - return CAP_FILE_RDCACHE | CAP_FILE_RD | CAP_FILE_LAZYIO | CAP_FILE_RDREPLICA; + return CAP_FILE_RDCACHE | CAP_FILE_RD | CAP_FILE_LAZYIO; case LOCK_LOCK: case LOCK_GLOCKR: case LOCK_GLOCKL: @@ -202,7 +181,7 @@ class FileLock : public SimpleLock { return 0; case LOCK_LONER: // single client writer, of course. - return CAP_FILE_RDCACHE | CAP_FILE_RD | CAP_FILE_WR | CAP_FILE_WREXTEND | CAP_FILE_WRBUFFER | CAP_FILE_LAZYIO | CAP_FILE_RDREPLICA | CAP_FILE_WRSLOPPY; + return CAP_FILE_RDCACHE | CAP_FILE_RD | CAP_FILE_WR | CAP_FILE_WREXTEND | CAP_FILE_WRBUFFER | CAP_FILE_LAZYIO; case LOCK_GLONERR: return CAP_FILE_RD | CAP_FILE_LAZYIO; case LOCK_GLONERM: @@ -216,7 +195,7 @@ class FileLock : public SimpleLock { else switch (state) { case LOCK_SYNC: - return CAP_FILE_RDCACHE | CAP_FILE_RD | CAP_FILE_LAZYIO | CAP_FILE_RDREPLICA; + return CAP_FILE_RDCACHE | CAP_FILE_RD | CAP_FILE_LAZYIO; case LOCK_LOCK: case LOCK_GLOCKR: return CAP_FILE_RDCACHE; -- 2.39.5