зеркало из https://github.com/microsoft/caffe.git
Merge pull request #3088 from lukeyeager/bvlc/lmdb-nolock
Open LMDB files with MDB_NOLOCK if no write access
This commit is contained in:
Коммит
b02db7fbf9
|
@ -23,9 +23,10 @@ set(python_version "2" CACHE STRING "Specify which Python version to use")
|
|||
caffe_option(BUILD_matlab "Build Matlab wrapper" OFF IF UNIX OR APPLE)
|
||||
caffe_option(BUILD_docs "Build documentation" ON IF UNIX OR APPLE)
|
||||
caffe_option(BUILD_python_layer "Build the Caffe Python layer" ON)
|
||||
caffe_option(USE_LMDB "Build with lmdb" ON)
|
||||
caffe_option(USE_LEVELDB "Build with levelDB" ON)
|
||||
caffe_option(USE_OPENCV "Build with OpenCV support" ON)
|
||||
caffe_option(USE_LEVELDB "Build with levelDB" ON)
|
||||
caffe_option(USE_LMDB "Build with lmdb" ON)
|
||||
caffe_option(ALLOW_LMDB_NOLOCK "Allow MDB_NOLOCK when reading LMDB files (only if necessary)" OFF)
|
||||
|
||||
# ---[ Dependencies
|
||||
include(cmake/Dependencies.cmake)
|
||||
|
|
3
Makefile
3
Makefile
|
@ -313,6 +313,9 @@ ifeq ($(USE_LEVELDB), 1)
|
|||
endif
|
||||
ifeq ($(USE_LMDB), 1)
|
||||
COMMON_FLAGS += -DUSE_LMDB
|
||||
ifeq ($(ALLOW_LMDB_NOLOCK), 1)
|
||||
COMMON_FLAGS += -DALLOW_LMDB_NOLOCK
|
||||
endif
|
||||
endif
|
||||
|
||||
# CPU-only configuration
|
||||
|
|
|
@ -8,9 +8,14 @@
|
|||
# CPU_ONLY := 1
|
||||
|
||||
# uncomment to disable IO dependencies and corresponding data layers
|
||||
# USE_OPENCV := 0
|
||||
# USE_LEVELDB := 0
|
||||
# USE_LMDB := 0
|
||||
# USE_OPENCV := 0
|
||||
|
||||
# uncomment to allow MDB_NOLOCK when reading LMDB files (only if necessary)
|
||||
# You should not set this flag if you will be reading LMDBs with any
|
||||
# possibility of simultaneous read and write
|
||||
# ALLOW_LMDB_NOLOCK := 1
|
||||
|
||||
# To customize your choice of compiler, uncomment and set the following.
|
||||
# N.B. the default for Linux is g++ and the default for OSX is clang++
|
||||
|
|
|
@ -62,6 +62,9 @@ function(caffe_generate_export_configs)
|
|||
|
||||
if(USE_LMDB)
|
||||
list(APPEND Caffe_DEFINITIONS -DUSE_LMDB)
|
||||
if (ALLOW_LMDB_NOLOCK)
|
||||
list(APPEND Caffe_DEFINITIONS -DALLOW_LMDB_NOLOCK)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(USE_LEVELDB)
|
||||
|
|
|
@ -34,6 +34,9 @@ if(USE_LMDB)
|
|||
include_directories(SYSTEM ${LMDB_INCLUDE_DIR})
|
||||
list(APPEND Caffe_LINKER_LIBS ${LMDB_LIBRARIES})
|
||||
add_definitions(-DUSE_LMDB)
|
||||
if(ALLOW_LMDB_NOLOCK)
|
||||
add_definitions(-DALLOW_LMDB_NOLOCK)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# ---[ LevelDB
|
||||
|
|
|
@ -114,9 +114,10 @@ function(caffe_print_configuration_summary)
|
|||
caffe_status(" BUILD_matlab : ${BUILD_matlab}")
|
||||
caffe_status(" BUILD_docs : ${BUILD_docs}")
|
||||
caffe_status(" CPU_ONLY : ${CPU_ONLY}")
|
||||
caffe_status(" USE_LMDB : ${USE_LMDB}")
|
||||
caffe_status(" USE_LEVELDB : ${USE_LEVELDB}")
|
||||
caffe_status(" USE_OPENCV : ${USE_OPENCV}")
|
||||
caffe_status(" USE_LEVELDB : ${USE_LEVELDB}")
|
||||
caffe_status(" USE_LMDB : ${USE_LMDB}")
|
||||
caffe_status(" ALLOW_LMDB_NOLOCK : ${ALLOW_LMDB_NOLOCK}")
|
||||
caffe_status("")
|
||||
caffe_status("Dependencies:")
|
||||
caffe_status(" BLAS : " APPLE THEN "Yes (vecLib)" ELSE "Yes (${BLAS})")
|
||||
|
|
|
@ -33,5 +33,6 @@
|
|||
|
||||
/* IO libraries */
|
||||
#cmakedefine USE_OPENCV
|
||||
#cmakedefine USE_LMDB
|
||||
#cmakedefine USE_LEVELDB
|
||||
#cmakedefine USE_LMDB
|
||||
#cmakedefine ALLOW_LMDB_NOLOCK
|
||||
|
|
|
@ -19,7 +19,22 @@ void LMDB::Open(const string& source, Mode mode) {
|
|||
if (mode == READ) {
|
||||
flags = MDB_RDONLY | MDB_NOTLS;
|
||||
}
|
||||
int rc = mdb_env_open(mdb_env_, source.c_str(), flags, 0664);
|
||||
#ifndef ALLOW_LMDB_NOLOCK
|
||||
MDB_CHECK(rc);
|
||||
#else
|
||||
if (rc == EACCES) {
|
||||
LOG(WARNING) << "Permission denied. Trying with MDB_NOLOCK ...";
|
||||
// Close and re-open environment handle
|
||||
mdb_env_close(mdb_env_);
|
||||
MDB_CHECK(mdb_env_create(&mdb_env_));
|
||||
// Try again with MDB_NOLOCK
|
||||
flags |= MDB_NOLOCK;
|
||||
MDB_CHECK(mdb_env_open(mdb_env_, source.c_str(), flags, 0664));
|
||||
} else {
|
||||
MDB_CHECK(rc);
|
||||
}
|
||||
#endif
|
||||
LOG(INFO) << "Opened lmdb " << source;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче