From f3e177a5fa754551b977bdceec70abc833ff8e9c Mon Sep 17 00:00:00 2001 From: Rushi Desai Date: Tue, 28 Apr 2015 23:17:06 -0700 Subject: [PATCH] An IOExecutor that executes under mapped fiber context. Summary: This should help executing sync thrift handlers on fibers. This allows the handler methods to achieve concurrency by awaiting. Test Plan: Chimera unit tests (which also accesses running FacebookBase methods in fiber context!) Reviewed By: davejwatson@fb.com Subscribers: trunkagent, hannesr, andrii, folly-diffs@, jsedgwick, haijunz, yfeldblum, alandau, chalfant FB internal diff: D2015886 Signature: t1:2015886:1430156870:a84499e0e781f5e6e77f48f1f3063f53d0968698 --- folly/Makefile.am | 1 + folly/experimental/fibers/FiberIOExecutor.h | 49 +++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 folly/experimental/fibers/FiberIOExecutor.h diff --git a/folly/Makefile.am b/folly/Makefile.am index 45296006..245f4c89 100644 --- a/folly/Makefile.am +++ b/folly/Makefile.am @@ -83,6 +83,7 @@ nobase_follyinclude_HEADERS = \ experimental/fibers/ExecutionObserver.h \ experimental/fibers/Fiber.h \ experimental/fibers/Fiber-inl.h \ + experimental/fibers/FiberIOExecutor.h \ experimental/fibers/FiberManager.h \ experimental/fibers/FiberManager-inl.h \ experimental/fibers/FiberManagerMap.h \ diff --git a/folly/experimental/fibers/FiberIOExecutor.h b/folly/experimental/fibers/FiberIOExecutor.h new file mode 100644 index 00000000..cd6e6758 --- /dev/null +++ b/folly/experimental/fibers/FiberIOExecutor.h @@ -0,0 +1,49 @@ +/* + * Copyright 2015 Facebook, Inc. + * + * Licensed 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. + */ +#pragma once + +#include +#include + +namespace folly { namespace fibers { + +/** + * @class FiberIOExecutor + * @brief An IOExecutor that executes funcs under mapped fiber context + * + * A FiberIOExecutor wraps an IOExecutor, but executes funcs on the FiberManager + * mapped to the underlying IOExector's event base. + */ +class FiberIOExecutor : public folly::wangle::IOExecutor { + public: + explicit FiberIOExecutor( + const std::shared_ptr& ioExecutor) + : ioExecutor_(ioExecutor) {} + + virtual void add(std::function f) override { + auto eventBase = ioExecutor_->getEventBase(); + getFiberManager(*eventBase).add(std::move(f)); + } + + virtual EventBase* getEventBase() override { + return ioExecutor_->getEventBase(); + } + + private: + std::shared_ptr ioExecutor_; +}; + +}} -- 2.34.1