aboutsummaryrefslogtreecommitdiffstats
path: root/yt/cpp/mapreduce/interface/init.h
blob: 302be268fc4aabe2451c5ec2f4705f890a00cef0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#pragma once

///
/// @file yt/cpp/mapreduce/interface/init.h
///
/// Initialization functions of YT Wrapper.

#include <yt/cpp/mapreduce/interface/wait_proxy.h>

#include <util/generic/fwd.h>

#include <functional>

namespace NYT {

////////////////////////////////////////////////////////////////////////////////

/// Options for @ref NYT::Initialize() and @ref NYT::JoblessInitialize() functions
struct TInitializeOptions
{
    using TSelf = TInitializeOptions;

    ///
    /// @brief Override waiting functions for YT Wrapper.
    ///
    /// This options allows to override functions used by this library to wait something.
    FLUENT_FIELD_DEFAULT(::TIntrusivePtr<IWaitProxy>, WaitProxy, nullptr);

    ///
    /// @brief Enable/disable cleanup when program execution terminates abnormally.
    ///
    /// When set to true, library will abort all active transactions and running operations when program
    /// terminates on error or signal.
    FLUENT_FIELD_DEFAULT(bool, CleanupOnTermination, false);

    ///
    /// @brief Set callback to be called before exit() in job mode.
    ///
    /// Provided function will be called just before exit() when program is started in job mode.
    /// This might be useful for shutting down libraries that are used inside operations.
    ///
    /// NOTE: Keep in mind that inside job execution environment differs from client execution environment.
    /// So JobOnExitFunction should not depend on argc/argv environment variables etc.
    FLUENT_FIELD_OPTION(std::function<void()>, JobOnExitFunction);
};

///
/// @brief Performs basic initialization (logging, termination handlers, etc).
///
/// This function never switches to job mode.
void JoblessInitialize(const TInitializeOptions& options = TInitializeOptions());

///
/// @brief Performs basic initialization and switches to a job mode if required.
///
/// This function performs basic initialization (it sets up logging reads the config, etc) and checks if binary is launched
/// on YT machine inside a job. If latter is true this function launches proper job and after job is done it calls exit().
///
/// This function must be called if application starts any operation.
/// This function must be called immediately after entering main() function before any argument parsing is done.
void Initialize(int argc, const char **argv, const TInitializeOptions &options = TInitializeOptions());

/// Similar to @ref NYT::Initialize(int, const char**, const TInitializeOptions&)
void Initialize(int argc, char **argv, const TInitializeOptions &options = TInitializeOptions());

/// Similar to @ref NYT::Initialize(int, const char**, const TInitializeOptions&)
void Initialize(const TInitializeOptions &options = TInitializeOptions());

////////////////////////////////////////////////////////////////////////////////

} // namespace NYT