forked from microsoft/service-fabric
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApplicationManager.h
140 lines (108 loc) · 6.55 KB
/
ApplicationManager.h
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
// ------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License (MIT). See License.txt in the repo root for license information.
// ------------------------------------------------------------
#pragma once
namespace Hosting2
{
class ApplicationManager :
public Common::RootedObject,
public Common::AsyncFabricComponent,
Common::TextTraceComponent<Common::TraceTaskCodes::Hosting>
{
DENY_COPY(ApplicationManager)
public:
ApplicationManager(Common::ComponentRoot const & root, __in HostingSubsystem & hosting);
virtual ~ApplicationManager();
Common::AsyncOperationSPtr BeginDownloadAndActivate(
uint64 const sequenceNumber, // type registration sequence number
ServiceModel::VersionedServiceTypeIdentifier const & versionedServiceTypeId,
ServiceModel::ServicePackageActivationContext const & activationContext,
std::wstring const & servicePackagePublicActivationId,
std::wstring const & applicationName,
Common::AsyncCallback const & callback,
Common::AsyncOperationSPtr const & parent);
Common::ErrorCode EndDownloadAndActivate(
Common::AsyncOperationSPtr const & operation);
Common::AsyncOperationSPtr BeginDownloadApplication(
ApplicationDownloadSpecification const & appDownloadSpec,
Common::AsyncCallback const & callback,
Common::AsyncOperationSPtr const & parent);
Common::ErrorCode EndDownloadApplication(
Common::AsyncOperationSPtr const & operation,
__out OperationStatusMapSPtr & appDownloadStatus);
Common::AsyncOperationSPtr BeginUpgradeApplication(
ServiceModel::ApplicationUpgradeSpecification const & appUpgradeSpec,
Common::AsyncCallback const & callback,
Common::AsyncOperationSPtr const & parent);
Common::ErrorCode EndUpgradeApplication(
Common::AsyncOperationSPtr const & operation);
Common::ErrorCode AnalyzeApplicationUpgrade(
ServiceModel::ApplicationUpgradeSpecification const & appUpgradeSpec,
__out CaseInsensitiveStringSet & affectedRuntimeIds);
void ScheduleForDeactivationIfNotUsed(ServicePackageInstanceIdentifier const & servicePackageInstanceId, bool & hasReplica);
void ScheduleForDeactivationIfNotUsed(ServiceModel::ApplicationIdentifier const & applicationId, bool & hasReplica);
Common::ErrorCode EnsureServicePackageInstanceEntry(ServicePackageInstanceIdentifier const & servicePackageInstanceId);
Common::ErrorCode EnsureApplicationEntry(ServiceModel::ApplicationIdentifier const & applicationId);
Common::ErrorCode IncrementUsageCount(ServicePackageInstanceIdentifier const & servicePackageInstanceId);
void DecrementUsageCount(ServicePackageInstanceIdentifier const & servicePackageInstanceId);
Common::ErrorCode Contains(ServiceModel::ApplicationIdentifier const & appId, bool & contains);
// Note: The continuation token is expected to be the application name
Common::ErrorCode GetApplications(__out std::vector<Application2SPtr> & applications, std::wstring const & filterApplicationName = L"", std::wstring const & continuationToken = L"");
bool IsCodePackageLockFilePresent(ServicePackageInstanceIdentifier const & servicePackageInstanceId) const;
bool ShouldReportHealth(ServicePackageInstanceIdentifier const & ServicePackageInstanceId) const;
void OnServiceTypesUnregistered(
ServicePackageInstanceIdentifier const & servicePackageInstanceId,
std::vector<ServiceTypeInstanceIdentifier> const & serviceTypeInstanceIds);
__declspec(property(get=get_EnvironmentManagerObj)) EnvironmentManagerUPtr const & EnvironmentManagerObj;
EnvironmentManagerUPtr const & get_EnvironmentManagerObj() { return this->environmentManager_; }
__declspec(property(get=get_ActivatorObj)) ActivatorUPtr const & ActivatorObj;
ActivatorUPtr const & get_ActivatorObj() { return this->activator_; }
__declspec(property(get=get_DeactivatorObj)) DeactivatorUPtr const & DeactivatorObj;
DeactivatorUPtr const & get_DeactivatorObj() { return this->deactivator_; }
protected:
Common::AsyncOperationSPtr OnBeginOpen(
Common::TimeSpan timeout,
Common::AsyncCallback const & callback,
Common::AsyncOperationSPtr const & parent);
Common::ErrorCode OnEndOpen(Common::AsyncOperationSPtr const & asyncOperation);
Common::AsyncOperationSPtr OnBeginClose(
Common::TimeSpan timeout,
Common::AsyncCallback const & callback,
Common::AsyncOperationSPtr const & parent);
Common::ErrorCode OnEndClose(Common::AsyncOperationSPtr const & asyncOperation);
void OnAbort();
private:
void DeactivateServicePackageInstance(ServicePackageInstanceIdentifier servicePackageInstanceId);
void FinishDeactivateServicePackageInstance(
Application2SPtr const & application,
ServicePackageInstanceIdentifier const & servicePackageInstanceId,
Common::AsyncOperationSPtr const & operation,
bool expectedCompletedSynhronously);
void DeactivateApplication(ServiceModel::ApplicationIdentifier applicationId);
void FinishDeactivateApplication(
Application2SPtr const & application,
Common::AsyncOperationSPtr const & operation,
bool expectedCompletedSynhronously);
Common::ErrorCode ApplicationManager::LoadServicePackageDescription(
ServiceModel::ApplicationIdentifier const & appId,
std::wstring const & servicePackageName,
ServiceModel::RolloutVersion const & packageRolloutVersion,
__out ServiceModel::ServicePackageDescription & packageDescription);
void OnRootContainerTerminated(Common::EventArgs const & eventArgs);
private:
class OpenAsyncOperation;
class CloseAsyncOperation;
class DownloadAndActivateAsyncOperation;
class UpgradeApplicationAsyncOperation;
friend class Activator;
friend class Deactivator;
private:
HostingSubsystem & hosting_;
ApplicationMapUPtr applicationMap_;
EnvironmentManagerUPtr environmentManager_;
std::unique_ptr<Common::ResourceHolder<Common::HHandler>> terminationNotificationHandler_;
ActivatorUPtr activator_;
DeactivatorUPtr deactivator_;
};
}