/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.lucene.store;


import java.io.IOException;

Base class for Locking implementation. Directory uses instances of this class to implement locking.

Lucene uses NativeFSLockFactory by default for FSDirectory-based index directories.

Special care needs to be taken if you change the locking implementation: First be certain that no writer is in fact writing to the index otherwise you can easily corrupt your index. Be sure to do the LockFactory change on all Lucene instances and clean up all leftover lock files before starting the new configuration for the first time. Different implementations can not work together!

If you suspect that some LockFactory implementation is not working properly in your environment, you can easily test it by using VerifyingLockFactory, LockVerifyServer and LockStressTest.

See Also:
/** * <p>Base class for Locking implementation. {@link Directory} uses * instances of this class to implement locking.</p> * * <p>Lucene uses {@link NativeFSLockFactory} by default for * {@link FSDirectory}-based index directories.</p> * * <p>Special care needs to be taken if you change the locking * implementation: First be certain that no writer is in fact * writing to the index otherwise you can easily corrupt * your index. Be sure to do the LockFactory change on all Lucene * instances and clean up all leftover lock files before starting * the new configuration for the first time. Different implementations * can not work together!</p> * * <p>If you suspect that some LockFactory implementation is * not working properly in your environment, you can easily * test it by using {@link VerifyingLockFactory}, {@link * LockVerifyServer} and {@link LockStressTest}.</p> * * @see LockVerifyServer * @see LockStressTest * @see VerifyingLockFactory */
public abstract class LockFactory {
Return a new obtained Lock instance identified by lockName.
Params:
  • lockName – name of the lock to be created.
Throws:
  • LockObtainFailedException – (optional specific exception) if the lock could not be obtained because it is currently held elsewhere.
  • IOException – if any i/o error occurs attempting to gain the lock
/** * Return a new obtained Lock instance identified by lockName. * @param lockName name of the lock to be created. * @throws LockObtainFailedException (optional specific exception) if the lock could * not be obtained because it is currently held elsewhere. * @throws IOException if any i/o error occurs attempting to gain the lock */
public abstract Lock obtainLock(Directory dir, String lockName) throws IOException; }