• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright 2015 The TensorFlow Authors. All Rights Reserved.
2 
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 
7     http://www.apache.org/licenses/LICENSE-2.0
8 
9 Unless required by applicable law or agreed to in writing, software
10 distributed under the License is distributed on an "AS IS" BASIS,
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 See the License for the specific language governing permissions and
13 limitations under the License.
14 ==============================================================================*/
15 
16 #ifndef TENSORFLOW_CORE_COMMON_RUNTIME_SESSION_FACTORY_H_
17 #define TENSORFLOW_CORE_COMMON_RUNTIME_SESSION_FACTORY_H_
18 
19 #include <string>
20 
21 #include "tensorflow/core/lib/core/errors.h"
22 #include "tensorflow/core/lib/core/status.h"
23 #include "tensorflow/core/lib/gtl/array_slice.h"
24 #include "tensorflow/core/platform/types.h"
25 
26 namespace tensorflow {
27 
28 class Session;
29 struct SessionOptions;
30 
31 class SessionFactory {
32  public:
33   // Creates a new session and stores it in *out_session, or fails with an error
34   // status if the Session could not be created. Caller takes ownership of
35   // *out_session if this returns Status::OK().
36   virtual Status NewSession(const SessionOptions& options,
37                             Session** out_session) = 0;
38 
39   virtual bool AcceptsOptions(const SessionOptions& options) = 0;
40 
41   // Abort and close all existing sessions, disconnecting their resources from
42   // future sessions.
43   //
44   // Reset() allows misbehaving or slow sessions to be aborted and closed, and
45   // causes their resources eventually to be released.  Reset() does not wait
46   // for the computations in old sessions to cease; it merely starts the
47   // process of tearing them down.  However, if a new session is started after
48   // a Reset(), the new session is isolated from changes that old sessions
49   // (started prior to the Reset()) may continue to make to resources, provided
50   // all those resources are in containers listed in "containers".
51   //
52   // Old sessions may continue to have side-effects on resources not in
53   // containers listed in "containers", and thus may affect future
54   // sessions' results in ways that are hard to predict.  Thus, if well-defined
55   // behavior is desired, is it recommended that all containers be listed in
56   // "containers".
57   //
58   // If the "containers" vector is empty, the default container is assumed.
59   // If the "containers" vector is non-empty, the default container should be
60   // listed explicitly.
61   //
62   // Sessions that support resource containers should override this function.
Reset(const SessionOptions & options,const std::vector<string> & containers)63   virtual Status Reset(const SessionOptions& options,
64                        const std::vector<string>& containers) {
65     return errors::Unimplemented("Reset()");
66   }
67 
~SessionFactory()68   virtual ~SessionFactory() {}
69   static void Register(const string& runtime_type, SessionFactory* factory);
70   static Status GetFactory(const SessionOptions& options,
71                            SessionFactory** out_factory);
72 };
73 
74 }  // namespace tensorflow
75 
76 #endif  // TENSORFLOW_CORE_COMMON_RUNTIME_SESSION_FACTORY_H_
77