leveldb
Public Member Functions | Private Attributes | List of all members
leveldb::anonymous_namespace{env_posix.cc}::PosixWritableFile Class Reference
Inheritance diagram for leveldb::anonymous_namespace{env_posix.cc}::PosixWritableFile:
Inheritance graph
[legend]
Collaboration diagram for leveldb::anonymous_namespace{env_posix.cc}::PosixWritableFile:
Collaboration graph
[legend]

Public Member Functions

 PosixWritableFile (const std::string &fname, FILE *f)
 
 ~PosixWritableFile ()
 
virtual Status Append (const Slice &data)
 
virtual Status Close ()
 
virtual Status Flush ()
 
Status SyncDirIfManifest ()
 
virtual Status Sync ()
 
- Public Member Functions inherited from leveldb::WritableFile
 WritableFile ()
 
virtual ~WritableFile ()
 

Private Attributes

std::string filename_
 
FILE * file_
 

Detailed Description

Definition at line 175 of file env_posix.cc.

Constructor & Destructor Documentation

§ PosixWritableFile()

leveldb::anonymous_namespace{env_posix.cc}::PosixWritableFile::PosixWritableFile ( const std::string &  fname,
FILE *  f 
)
inline

§ ~PosixWritableFile()

leveldb::anonymous_namespace{env_posix.cc}::PosixWritableFile::~PosixWritableFile ( )
inline

Definition at line 184 of file env_posix.cc.

184  {
185  if (file_ != NULL) {
186  // Ignoring any potential errors
187  fclose(file_);
188  }
189  }

Member Function Documentation

§ Append()

virtual Status leveldb::anonymous_namespace{env_posix.cc}::PosixWritableFile::Append ( const Slice data)
inlinevirtual

Implements leveldb::WritableFile.

Definition at line 191 of file env_posix.cc.

191  {
192  size_t r = fwrite_unlocked(data.data(), 1, data.size(), file_);
193  if (r != data.size()) {
194  return IOError(filename_, errno);
195  }
196  return Status::OK();
197  }
static Status OK()
Definition: status.h:32
static Status IOError(const std::string &context, int err_number)
Definition: env_posix.cc:31
Here is the call graph for this function:

§ Close()

virtual Status leveldb::anonymous_namespace{env_posix.cc}::PosixWritableFile::Close ( )
inlinevirtual

Implements leveldb::WritableFile.

Definition at line 199 of file env_posix.cc.

199  {
200  Status result;
201  if (fclose(file_) != 0) {
202  result = IOError(filename_, errno);
203  }
204  file_ = NULL;
205  return result;
206  }
static Status IOError(const std::string &context, int err_number)
Definition: env_posix.cc:31
Here is the call graph for this function:

§ Flush()

virtual Status leveldb::anonymous_namespace{env_posix.cc}::PosixWritableFile::Flush ( )
inlinevirtual

Implements leveldb::WritableFile.

Definition at line 208 of file env_posix.cc.

208  {
209  if (fflush_unlocked(file_) != 0) {
210  return IOError(filename_, errno);
211  }
212  return Status::OK();
213  }
static Status OK()
Definition: status.h:32
static Status IOError(const std::string &context, int err_number)
Definition: env_posix.cc:31
Here is the call graph for this function:

§ Sync()

virtual Status leveldb::anonymous_namespace{env_posix.cc}::PosixWritableFile::Sync ( )
inlinevirtual

Implements leveldb::WritableFile.

Definition at line 242 of file env_posix.cc.

242  {
243  // Ensure new files referred to by the manifest are in the filesystem.
244  Status s = SyncDirIfManifest();
245  if (!s.ok()) {
246  return s;
247  }
248  if (fflush_unlocked(file_) != 0 ||
249  fdatasync(fileno(file_)) != 0) {
250  s = Status::IOError(filename_, strerror(errno));
251  }
252  return s;
253  }
static Status IOError(const Slice &msg, const Slice &msg2=Slice())
Definition: status.h:47
Here is the call graph for this function:

§ SyncDirIfManifest()

Status leveldb::anonymous_namespace{env_posix.cc}::PosixWritableFile::SyncDirIfManifest ( )
inline

Definition at line 215 of file env_posix.cc.

215  {
216  const char* f = filename_.c_str();
217  const char* sep = strrchr(f, '/');
218  Slice basename;
219  std::string dir;
220  if (sep == NULL) {
221  dir = ".";
222  basename = f;
223  } else {
224  dir = std::string(f, sep - f);
225  basename = sep + 1;
226  }
227  Status s;
228  if (basename.starts_with("MANIFEST")) {
229  int fd = open(dir.c_str(), O_RDONLY);
230  if (fd < 0) {
231  s = IOError(dir, errno);
232  } else {
233  if (fsync(fd) < 0) {
234  s = IOError(dir, errno);
235  }
236  close(fd);
237  }
238  }
239  return s;
240  }
static Status IOError(const std::string &context, int err_number)
Definition: env_posix.cc:31
Here is the call graph for this function:

Member Data Documentation

§ file_

FILE* leveldb::anonymous_namespace{env_posix.cc}::PosixWritableFile::file_
private

Definition at line 178 of file env_posix.cc.

§ filename_

std::string leveldb::anonymous_namespace{env_posix.cc}::PosixWritableFile::filename_
private

Definition at line 177 of file env_posix.cc.


The documentation for this class was generated from the following file: