| | |
| | | |
| | | cacheWriteLock.lock(); |
| | | |
| | | try { |
| | | registeredConfiguration.removeFileSystemChangeListener (this); |
| | | |
| | | // Store index/maps in case of persistent cache. Since the cache database |
| | |
| | | try { |
| | | DatabaseEntry indexData = new DatabaseEntry(); |
| | | entryCacheDataBinding.objectToEntry(entryCacheIndex, indexData); |
| | | DatabaseEntry indexKey = new DatabaseEntry(INDEXKEY.getBytes("UTF-8")); |
| | | if (OperationStatus.SUCCESS != |
| | | entryCacheDB.put(null, indexKey, indexData)) { |
| | | DatabaseEntry indexKey = |
| | | new DatabaseEntry(INDEXKEY.getBytes("UTF-8")); |
| | | if (OperationStatus.SUCCESS != entryCacheDB.put(null, indexKey, |
| | | indexData)) { |
| | | throw new Exception(); |
| | | } |
| | | } catch (Exception e) { |
| | |
| | | // That is ok, JE verification and repair on startup should take care of |
| | | // this so if there are any unrecoverable errors during next startup |
| | | // and we are unable to handle and cleanup them we will log errors then. |
| | | } |
| | | } finally { |
| | | cacheWriteLock.unlock(); |
| | | } |
| | |
| | | * {@inheritDoc} |
| | | */ |
| | | public void clear() { |
| | | |
| | | cacheWriteLock.lock(); |
| | | |
| | | try { |
| | | dnMap.clear(); |
| | | backendMap.clear(); |
| | | |
| | |
| | | entryCacheEnv.truncateDatabase(null, ENTRYCACHEDBNAME, false); |
| | | entryCacheEnv.truncateDatabase(null, INDEXCLASSDBNAME, false); |
| | | entryCacheEnv.cleanLog(); |
| | | entryCacheDB = entryCacheEnv.openDatabase(null, |
| | | ENTRYCACHEDBNAME, entryCacheDBConfig); |
| | | entryCacheDB = entryCacheEnv.openDatabase(null, ENTRYCACHEDBNAME, |
| | | entryCacheDBConfig); |
| | | entryCacheClassDB = entryCacheEnv.openDatabase(null, |
| | | INDEXCLASSDBNAME, entryCacheDBConfig); |
| | | // Instantiate the class catalog |
| | | classCatalog = new StoredClassCatalog(entryCacheClassDB); |
| | | entryCacheDataBinding = |
| | | new SerialBinding(classCatalog, FileSystemEntryCacheIndex.class); |
| | | entryCacheDataBinding = new SerialBinding(classCatalog, |
| | | FileSystemEntryCacheIndex.class); |
| | | } |
| | | } catch (Exception e) { |
| | | if (debugEnabled()) { |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | } |
| | | } finally { |
| | | cacheWriteLock.unlock(); |
| | | } |
| | |
| | | |
| | | cacheWriteLock.lock(); |
| | | |
| | | try { |
| | | Map<Long,DN> backendEntriesMap = backendMap.get(backend); |
| | | |
| | | try { |
| | |
| | | while (backendEntriesIterator.hasNext()) { |
| | | Long entryID = backendEntriesIterator.next(); |
| | | DN entryDN = backendEntriesMap.get(entryID); |
| | | entryCacheDB.delete(null, |
| | | new DatabaseEntry(entryDN.toNormalizedString().getBytes("UTF-8"))); |
| | | entryCacheDB.delete(null, new DatabaseEntry( |
| | | entryDN.toNormalizedString().getBytes("UTF-8"))); |
| | | backendEntriesIterator.remove(); |
| | | dnMap.remove(entryDN); |
| | | |
| | | // This can take a while, so we'll periodically release and re-acquire |
| | | // the lock in case anyone else is waiting on it so this doesn't become |
| | | // a stop-the-world event as far as the cache is concerned. |
| | | // This can take a while, so we'll periodically release and |
| | | // re-acquire the lock in case anyone else is waiting on it |
| | | // so this doesn't become a stop-the-world event as far as |
| | | // the cache is concerned. |
| | | entriesExamined++; |
| | | if ((entriesExamined % 1000) == 0) { |
| | | cacheWriteLock.unlock(); |
| | |
| | | if (debugEnabled()) { |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | } |
| | | } finally { |
| | | cacheWriteLock.unlock(); |
| | | } |