mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
174d0b9b0a
Summary: Previously we would simply report the raw pointer address to the kernel and rely on it to return that same number to us as the file handle, and make sure that it told us to shut down the handle when it was closed. This meant that we had no real idea about which files were still open. For our future live upgrade plans we need to be able to know this so that we can transfer the appropriate information to our replacement process. To facilitate this this diff implements a FileHandleMap class that will assign file handle numbers and keep track of the instances. The number assignment strategy is the same as it used to be in the common case: we take the address of the newly created instance and use that 64-bit number as the file handle number. However, in the future when we transfer the mapping to a new process, we may experience a collision when subsequently opening a file handle. To deal with that, we have a bounded number of attempts to assign a random file handle number. We don't yet offer a means to iterate the map, but it would be trivial to expose such an accessor when we're ready to use it. Since we now keep track of these things via shared_ptr this changes the appropriate portions of the fuse interface from unique_ptr to shared_ptr. Reviewed By: simpkins Differential Revision: D3602364 fbshipit-source-id: dd996339c2838225a2caeee9da16ef99a06c1e2b
33 lines
768 B
C++
33 lines
768 B
C++
/*
|
|
* Copyright (c) 2016, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*
|
|
*/
|
|
#include "Inodes.h"
|
|
|
|
using namespace folly;
|
|
|
|
namespace facebook {
|
|
namespace eden {
|
|
namespace fusell {
|
|
|
|
FileInode::FileInode(fuse_ino_t ino) : InodeBase(ino) {}
|
|
|
|
folly::Future<std::string> FileInode::readlink() {
|
|
FUSELL_NOT_IMPL();
|
|
}
|
|
folly::Future<std::shared_ptr<FileHandle>> FileInode::open(
|
|
const struct fuse_file_info& fi) {
|
|
FUSELL_NOT_IMPL();
|
|
}
|
|
folly::Future<uint64_t> FileInode::bmap(size_t blocksize, uint64_t idx) {
|
|
FUSELL_NOT_IMPL();
|
|
}
|
|
}
|
|
}
|
|
}
|