Remove Lock_Is_Locked
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/38a33bad Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/38a33bad Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/38a33bad Branch: refs/heads/master Commit: 38a33badb310ba9fea5bf9a923277da4a82ec369 Parents: de14d4c Author: Nick Wellnhofer <wellnho...@aevum.de> Authored: Fri Feb 17 19:13:59 2017 +0100 Committer: Nick Wellnhofer <wellnho...@aevum.de> Committed: Mon Feb 20 16:26:22 2017 +0100 ---------------------------------------------------------------------- core/Lucy/Store/Lock.c | 31 ++++++++++++++--------------- core/Lucy/Store/Lock.cfh | 22 --------------------- go/lucy/store_test.go | 6 ------ perl/t/105-folder.t | 7 ++++--- perl/t/110-shared_lock.t | 45 ++++++++++++++++++++++--------------------- 5 files changed, 41 insertions(+), 70 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/38a33bad/core/Lucy/Store/Lock.c ---------------------------------------------------------------------- diff --git a/core/Lucy/Store/Lock.c b/core/Lucy/Store/Lock.c index d187405..0879640 100644 --- a/core/Lucy/Store/Lock.c +++ b/core/Lucy/Store/Lock.c @@ -131,6 +131,12 @@ static bool S_request(LockFileLockIVARS *ivars, String *lock_path); static bool +S_is_locked_exclusive(LockFileLockIVARS *ivars); + +static bool +S_is_locked(LockFileLockIVARS *ivars); + +static bool S_is_shared_lock_file(LockFileLockIVARS *ivars, String *entry); static bool @@ -194,7 +200,7 @@ LFLock_Request_Shared_IMP(LockFileLock *self) { // race condition. We could protect the whole process with an internal // exclusive lock. - if (LFLock_Is_Locked_Exclusive(self)) { + if (S_is_locked_exclusive(ivars)) { String *msg = Str_newf("'%o.lock' is locked", ivars->name); Err_set_error((Err*)LockErr_new(msg)); return false; @@ -232,8 +238,8 @@ LFLock_Request_Exclusive_IMP(LockFileLock *self) { // exclusive lock. if (ivars->exclusive_only - ? LFLock_Is_Locked_Exclusive(self) - : LFLock_Is_Locked(self) + ? S_is_locked_exclusive(ivars) + : S_is_locked(ivars) ) { String *msg = Str_newf("'%o.lock' is locked", ivars->name); Err_set_error((Err*)LockErr_new(msg)); @@ -352,24 +358,15 @@ LFLock_Release_IMP(LockFileLock *self) { ivars->state = LFLOCK_STATE_UNLOCKED; } -bool -LFLock_Is_Locked_Exclusive_IMP(LockFileLock *self) { - LockFileLockIVARS *const ivars = LFLock_IVARS(self); - +static bool +S_is_locked_exclusive(LockFileLockIVARS *ivars) { return Folder_Exists(ivars->folder, ivars->lock_path) && !S_maybe_delete_file(ivars, ivars->lock_path, false, true); } -bool -LFLock_Is_Locked_IMP(LockFileLock *self) { - LockFileLockIVARS *const ivars = LFLock_IVARS(self); - - // Check for exclusive lock. - if (Folder_Exists(ivars->folder, ivars->lock_path) - && !S_maybe_delete_file(ivars, ivars->lock_path, false, true) - ) { - return true; - } +static bool +S_is_locked(LockFileLockIVARS *ivars) { + if (S_is_locked_exclusive(ivars)) { return true; } // Check for shared lock. http://git-wip-us.apache.org/repos/asf/lucy/blob/38a33bad/core/Lucy/Store/Lock.cfh ---------------------------------------------------------------------- diff --git a/core/Lucy/Store/Lock.cfh b/core/Lucy/Store/Lock.cfh index fb813e1..6688e95 100644 --- a/core/Lucy/Store/Lock.cfh +++ b/core/Lucy/Store/Lock.cfh @@ -96,22 +96,6 @@ abstract class Lucy::Store::Lock inherits Clownfish::Obj { public abstract void Release(Lock *self); - /** Indicate whether the resource identified by this lock's name is - * currently locked in shared or exclusive mode. - * - * @return true if the resource is locked, false otherwise. - */ - public abstract bool - Is_Locked(Lock *self); - - /** Indicate whether the resource identified by this lock's name is - * currently locked in exclusive mode. - * - * @return true if the resource is locked, false otherwise. - */ - public abstract bool - Is_Locked_Exclusive(Lock *self); - String* Get_Name(Lock *self); @@ -147,12 +131,6 @@ class Lucy::Store::LockFileLock nickname LFLock public void Release(LockFileLock *self); - public bool - Is_Locked(LockFileLock *self); - - public bool - Is_Locked_Exclusive(LockFileLock *self); - String* Get_Lock_Path(LockFileLock *self); http://git-wip-us.apache.org/repos/asf/lucy/blob/38a33bad/go/lucy/store_test.go ---------------------------------------------------------------------- diff --git a/go/lucy/store_test.go b/go/lucy/store_test.go index 89f5057..ae70069 100644 --- a/go/lucy/store_test.go +++ b/go/lucy/store_test.go @@ -663,9 +663,6 @@ func TestLockFileLockAll(t *testing.T) { if err != nil { t.Errorf("Request: %v", err) } - if !lock.IsLocked() { - t.Errorf("Lock should be locked, but IsLocked returned false") - } if got := lock.getLockPath(); len(got) == 0 { // Lock path only valid when locked for shared locks. t.Errorf("getLockPath should work") @@ -689,9 +686,6 @@ func TestLockFileLockAll(t *testing.T) { if err != nil { t.Errorf("Request: %v", err) } - if !lock.IsLocked() { - t.Errorf("Lock should be locked, but IsLocked returned false") - } if got := lock.getLockPath(); len(got) == 0 { // Lock path only valid when locked for shared locks. t.Errorf("getLockPath should work") http://git-wip-us.apache.org/repos/asf/lucy/blob/38a33bad/perl/t/105-folder.t ---------------------------------------------------------------------- diff --git a/perl/t/105-folder.t b/perl/t/105-folder.t index 3d00195..ba1255e 100644 --- a/perl/t/105-folder.t +++ b/perl/t/105-folder.t @@ -62,16 +62,17 @@ for my $folder ( $fs_folder, $ram_folder ) { ); $lock->obtain_exclusive(); - ok( $lock->is_locked_exclusive(), "lock is locked" ); + my $lock_path = $lock->get_lock_path; + ok( $folder->exists($lock_path), "lock is locked" ); ok( !$competing_lock->obtain_exclusive(), "shouldn't get lock on existing resource" ); - ok( $lock->is_locked_exclusive(), + ok( $folder->exists($lock_path), "lock still locked after competing attempt" ); $lock->release; - ok( !$lock->is_locked_exclusive(), "release works" ); + ok( !$folder->exists($lock_path), "release works" ); $lock->obtain_exclusive(); $folder->rename( from => 'king_of_rock', to => 'king_of_lock' ); http://git-wip-us.apache.org/repos/asf/lucy/blob/38a33bad/perl/t/110-shared_lock.t ---------------------------------------------------------------------- diff --git a/perl/t/110-shared_lock.t b/perl/t/110-shared_lock.t index 77c6862..86e7d6c 100644 --- a/perl/t/110-shared_lock.t +++ b/perl/t/110-shared_lock.t @@ -20,8 +20,7 @@ use Test::More tests => 14; use Lucy::Test; my $folder = Lucy::Store::RAMFolder->new; - -my $lock = Lucy::Store::LockFileLock->new( +my @args = ( folder => $folder, name => 'ness', timeout => 0, @@ -29,32 +28,34 @@ my $lock = Lucy::Store::LockFileLock->new( exclusive_only => 0, ); -ok( !$lock->is_locked(), "not locked yet" ); +my $ex_lock = Lucy::Store::LockFileLock->new(@args); + +sub is_locked { + if ($ex_lock->request_exclusive) { + $ex_lock->release; + return 0; + } + else { + return 1; + } +} + +my $lock = Lucy::Store::LockFileLock->new(@args); + +ok( !is_locked(), "not locked yet" ); ok( $lock->obtain_shared(), "obtain" ); -ok( $lock->is_locked(), "is_locked" ); +ok( is_locked(), "is_locked" ); ok( $folder->exists('locks/ness-1.lock'), "lockfile exists" ); -my $another_lock = Lucy::Store::LockFileLock->new( - folder => $folder, - name => 'ness', - timeout => 0, - host => 'nessie', - exclusive_only => 0, -); +my $another_lock = Lucy::Store::LockFileLock->new(@args); ok( $another_lock->obtain_shared(), "got a second lock on the same resource" ); $lock->release; -ok( $lock->is_locked(), +ok( is_locked(), "first lock released but still is_locked because of other lock" ); -my $ya_lock = Lucy::Store::LockFileLock->new( - folder => $folder, - name => 'ness', - timeout => 0, - host => 'nessie', - exclusive_only => 0, -); +my $ya_lock = Lucy::Store::LockFileLock->new(@args); ok( $ya_lock->obtain_shared(), "got yet another lock" ); ok( $lock->obtain_shared(), "got first lock again" ); @@ -75,10 +76,10 @@ $another_lock->release; $ya_lock->release; ok( $lock->get_lock_path, "failed to release a lock with a different pid" ); -ok( !$lock->is_locked(), "is_locked clears stale locks" ); +ok( !is_locked(), "is_locked clears stale locks" ); ok( $lock->obtain_shared(), "got lock again" ); -ok( $lock->is_locked(), "it's locked" ); +ok( is_locked(), "it's locked" ); # Rewrite lock file to spec a different host. $content = $folder->slurp_file("locks/ness-1.lock"); @@ -89,4 +90,4 @@ $outstream->print($content); $outstream->close; $lock->release; -ok( $lock->is_locked(), "don't delete lock belonging to another host" ); +ok( is_locked(), "don't delete lock belonging to another host" );