You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ji...@apache.org on 2016/12/07 21:10:38 UTC
[38/76] [abbrv] hadoop git commit: YARN-5461. Initial code ported
from slider-core module. (jianhe)
YARN-5461. Initial code ported from slider-core module. (jianhe)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/d8cab88d
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/d8cab88d
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/d8cab88d
Branch: refs/heads/yarn-native-services
Commit: d8cab88d2b3829299e2da4e3a6b8c26805ffdd46
Parents: 9f5d2c4
Author: Jian He <ji...@apache.org>
Authored: Wed Aug 3 00:18:01 2016 +0800
Committer: Jian He <ji...@apache.org>
Committed: Wed Dec 7 13:00:06 2016 -0800
----------------------------------------------------------------------
.../hadoop-yarn-slider-core/pom.xml | 397 +
.../src/assembly/executable-jar.xml | 47 +
.../src/license/THIRD-PARTY.properties | 33 +
.../slider/server/avro/RoleHistoryRecord.avsc | 114 +
.../apache/hadoop/security/KerberosDiags.java | 676 +
.../src/main/java/org/apache/slider/Slider.java | 52 +
.../apache/slider/api/ClusterDescription.java | 795 +
.../slider/api/ClusterDescriptionKeys.java | 25 +
.../api/ClusterDescriptionOperations.java | 93 +
.../java/org/apache/slider/api/ClusterNode.java | 220 +
.../org/apache/slider/api/InternalKeys.java | 199 +
.../java/org/apache/slider/api/OptionKeys.java | 58 +
.../org/apache/slider/api/ResourceKeys.java | 201 +
.../java/org/apache/slider/api/RoleKeys.java | 116 +
.../apache/slider/api/SliderApplicationApi.java | 167 +
.../slider/api/SliderClusterProtocol.java | 179 +
.../java/org/apache/slider/api/StateValues.java | 53 +
.../java/org/apache/slider/api/StatusKeys.java | 117 +
.../org/apache/slider/api/proto/Messages.java | 34473 +++++++++++++++++
.../slider/api/proto/RestTypeMarshalling.java | 319 +
.../slider/api/proto/SliderClusterAPI.java | 2293 ++
.../types/ApplicationLivenessInformation.java | 53 +
.../slider/api/types/ComponentInformation.java | 107 +
.../slider/api/types/ContainerInformation.java | 58 +
.../slider/api/types/NodeEntryInformation.java | 78 +
.../slider/api/types/NodeInformation.java | 59 +
.../slider/api/types/NodeInformationList.java | 41 +
.../slider/api/types/PingInformation.java | 47 +
.../apache/slider/api/types/RoleStatistics.java | 66 +
.../api/types/SliderInstanceDescription.java | 54 +
.../slider/client/ClientRegistryBinder.java | 201 +
.../org/apache/slider/client/ClientUtils.java | 111 +
.../org/apache/slider/client/SliderClient.java | 4569 +++
.../apache/slider/client/SliderClientAPI.java | 368 +
.../slider/client/SliderYarnClientImpl.java | 410 +
.../apache/slider/client/TokensOperation.java | 109 +
.../client/ipc/SliderApplicationIpcClient.java | 245 +
.../client/ipc/SliderClusterOperations.java | 529 +
.../slider/client/rest/BaseRestClient.java | 152 +
.../slider/client/rest/RestClientFactory.java | 89 +
.../rest/SliderApplicationApiRestClient.java | 326 +
.../org/apache/slider/common/Constants.java | 35 +
.../apache/slider/common/SliderExitCodes.java | 88 +
.../org/apache/slider/common/SliderKeys.java | 278 +
.../common/SliderXMLConfKeysForTesting.java | 83 +
.../apache/slider/common/SliderXmlConfKeys.java | 206 +
.../common/params/AbstractActionArgs.java | 178 +
.../common/params/AbstractArgsDelegate.java | 26 +
.../AbstractClusterBuildingActionArgs.java | 217 +
.../common/params/ActionAMSuicideArgs.java | 44 +
.../slider/common/params/ActionBuildArgs.java | 32 +
.../slider/common/params/ActionClientArgs.java | 98 +
.../slider/common/params/ActionCreateArgs.java | 59 +
.../common/params/ActionDependencyArgs.java | 65 +
.../slider/common/params/ActionDestroyArgs.java | 37 +
.../common/params/ActionDiagnosticArgs.java | 73 +
.../slider/common/params/ActionEchoArgs.java | 33 +
.../slider/common/params/ActionExistsArgs.java | 47 +
.../slider/common/params/ActionFlexArgs.java | 54 +
.../slider/common/params/ActionFreezeArgs.java | 56 +
.../slider/common/params/ActionHelpArgs.java | 51 +
.../common/params/ActionInstallKeytabArgs.java | 57 +
.../common/params/ActionInstallPackageArgs.java | 58 +
.../slider/common/params/ActionKDiagArgs.java | 86 +
.../slider/common/params/ActionKeytabArgs.java | 81 +
.../common/params/ActionKillContainerArgs.java | 37 +
.../slider/common/params/ActionListArgs.java | 74 +
.../slider/common/params/ActionLookupArgs.java | 76 +
.../slider/common/params/ActionNodesArgs.java | 71 +
.../slider/common/params/ActionPackageArgs.java | 81 +
.../common/params/ActionRegistryArgs.java | 218 +
.../slider/common/params/ActionResolveArgs.java | 153 +
.../common/params/ActionResourceArgs.java | 68 +
.../slider/common/params/ActionStatusArgs.java | 45 +
.../slider/common/params/ActionThawArgs.java | 61 +
.../slider/common/params/ActionTokensArgs.java | 78 +
.../slider/common/params/ActionUpdateArgs.java | 32 +
.../slider/common/params/ActionUpgradeArgs.java | 73 +
.../slider/common/params/ActionVersionArgs.java | 46 +
.../slider/common/params/AddonArgsDelegate.java | 54 +
.../params/AppAndResouceOptionArgsDelegate.java | 111 +
.../org/apache/slider/common/params/ArgOps.java | 157 +
.../apache/slider/common/params/Arguments.java | 162 +
.../apache/slider/common/params/ClientArgs.java | 385 +
.../apache/slider/common/params/CommonArgs.java | 303 +
.../common/params/ComponentArgsDelegate.java | 52 +
.../common/params/DontSplitArguments.java | 34 +
.../common/params/LaunchArgsAccessor.java | 30 +
.../common/params/LaunchArgsDelegate.java | 51 +
.../common/params/PathArgumentConverter.java | 34 +
.../slider/common/params/SliderAMArgs.java | 57 +
.../common/params/SliderAMCreateAction.java | 74 +
.../slider/common/params/SliderActions.java | 113 +
.../common/params/URIArgumentConverter.java | 40 +
.../common/params/URLArgumentConverter.java | 40 +
.../slider/common/params/WaitArgsDelegate.java | 42 +
.../slider/common/params/WaitTimeAccessor.java | 24 +
.../apache/slider/common/tools/Comparators.java | 69 +
.../slider/common/tools/ConfigHelper.java | 658 +
.../slider/common/tools/CoreFileSystem.java | 915 +
.../apache/slider/common/tools/Duration.java | 109 +
.../apache/slider/common/tools/PortScanner.java | 113 +
.../slider/common/tools/SliderFileSystem.java | 42 +
.../apache/slider/common/tools/SliderUtils.java | 2548 ++
.../slider/common/tools/SliderVersionInfo.java | 108 +
.../conf/AbstractInputPropertiesValidator.java | 49 +
.../apache/slider/core/conf/AggregateConf.java | 198 +
.../org/apache/slider/core/conf/ConfTree.java | 114 +
.../slider/core/conf/ConfTreeOperations.java | 477 +
.../core/conf/InputPropertiesValidator.java | 27 +
.../apache/slider/core/conf/MapOperations.java | 344 +
.../conf/ResourcesInputPropertiesValidator.java | 41 +
.../conf/TemplateInputPropertiesValidator.java | 38 +
.../exceptions/BadClusterStateException.java | 35 +
.../BadCommandArgumentsException.java | 30 +
.../core/exceptions/BadConfigException.java | 39 +
.../slider/core/exceptions/ErrorStrings.java | 57 +
.../core/exceptions/ExceptionConverter.java | 128 +
.../core/exceptions/NoSuchNodeException.java | 32 +
.../core/exceptions/NotFoundException.java | 35 +
.../exceptions/ServiceNotReadyException.java | 43 +
.../slider/core/exceptions/SliderException.java | 67 +
.../SliderInternalStateException.java | 34 +
.../TriggerClusterTeardownException.java | 41 +
.../UnknownApplicationInstanceException.java | 51 +
.../slider/core/exceptions/UsageException.java | 34 +
.../core/exceptions/WaitTimeoutException.java | 34 +
.../slider/core/launch/AbstractLauncher.java | 528 +
.../slider/core/launch/AppMasterLauncher.java | 233 +
.../core/launch/ClasspathConstructor.java | 172 +
.../slider/core/launch/CommandLineBuilder.java | 104 +
.../slider/core/launch/ContainerLauncher.java | 72 +
.../slider/core/launch/CredentialUtils.java | 379 +
.../core/launch/JavaCommandLineBuilder.java | 182 +
.../slider/core/launch/LaunchedApplication.java | 108 +
.../slider/core/launch/RunningApplication.java | 76 +
.../launch/SerializedApplicationReport.java | 98 +
.../slider/core/main/ExitCodeProvider.java | 32 +
.../org/apache/slider/core/main/IrqHandler.java | 103 +
.../slider/core/main/LauncherExitCodes.java | 196 +
.../org/apache/slider/core/main/RunService.java | 62 +
.../core/main/ServiceLaunchException.java | 73 +
.../slider/core/main/ServiceLauncher.java | 642 +
.../slider/core/main/ServiceShutdownHook.java | 80 +
.../core/persist/AggregateConfSerDeser.java | 55 +
.../core/persist/AppDefinitionPersister.java | 260 +
.../core/persist/ApplicationReportSerDeser.java | 57 +
.../slider/core/persist/ConfPersister.java | 286 +
.../slider/core/persist/ConfTreeSerDeser.java | 54 +
.../apache/slider/core/persist/Filenames.java | 28 +
.../slider/core/persist/InstancePaths.java | 58 +
.../slider/core/persist/JsonSerDeser.java | 243 +
.../persist/LockAcquireFailedException.java | 40 +
.../slider/core/persist/LockHeldAction.java | 38 +
.../apache/slider/core/persist/PersistKeys.java | 25 +
.../core/registry/SliderRegistryUtils.java | 62 +
.../slider/core/registry/YarnAppListClient.java | 189 +
.../core/registry/docstore/ConfigFormat.java | 60 +
.../core/registry/docstore/ConfigUtils.java | 96 +
.../docstore/ConfigurationResolver.java | 24 +
.../core/registry/docstore/ExportEntry.java | 120 +
.../registry/docstore/PublishedConfigSet.java | 100 +
.../docstore/PublishedConfiguration.java | 196 +
.../PublishedConfigurationOutputter.java | 210 +
.../registry/docstore/PublishedExports.java | 140 +
.../docstore/PublishedExportsOutputter.java | 104 +
.../registry/docstore/PublishedExportsSet.java | 98 +
.../slider/core/registry/docstore/UriMap.java | 38 +
.../registry/info/CustomRegistryConstants.java | 57 +
.../core/registry/retrieve/AMWebClient.java | 158 +
.../registry/retrieve/RegistryRetriever.java | 183 +
.../core/restclient/HttpOperationResponse.java | 34 +
.../apache/slider/core/restclient/HttpVerb.java | 57 +
.../restclient/SliderURLConnectionFactory.java | 176 +
.../core/restclient/UgiJerseyBinding.java | 154 +
.../restclient/UrlConnectionOperations.java | 210 +
.../slider/core/zk/BlockingZKWatcher.java | 67 +
.../slider/core/zk/MiniZooKeeperCluster.java | 423 +
.../org/apache/slider/core/zk/ZKCallback.java | 31 +
.../apache/slider/core/zk/ZKIntegration.java | 323 +
.../apache/slider/core/zk/ZKPathBuilder.java | 82 +
.../apache/slider/core/zk/ZookeeperUtils.java | 147 +
.../providers/AbstractClientProvider.java | 248 +
.../providers/AbstractProviderService.java | 424 +
.../apache/slider/providers/MonitorDetail.java | 43 +
.../slider/providers/PlacementPolicy.java | 64 +
.../providers/PlacementPolicyOptions.java | 26 +
.../slider/providers/ProviderCompleted.java | 29 +
.../providers/ProviderCompletedCallable.java | 38 +
.../apache/slider/providers/ProviderCore.java | 43 +
.../apache/slider/providers/ProviderRole.java | 135 +
.../slider/providers/ProviderService.java | 217 +
.../apache/slider/providers/ProviderUtils.java | 530 +
.../slider/providers/SliderProviderFactory.java | 110 +
.../providers/agent/AgentClientProvider.java | 701 +
.../slider/providers/agent/AgentKeys.java | 109 +
.../providers/agent/AgentLaunchParameter.java | 130 +
.../providers/agent/AgentProviderFactory.java | 47 +
.../providers/agent/AgentProviderService.java | 3212 ++
.../slider/providers/agent/AgentRoles.java | 38 +
.../slider/providers/agent/AgentUtils.java | 134 +
.../apache/slider/providers/agent/Command.java | 59 +
.../slider/providers/agent/CommandResult.java | 40 +
.../providers/agent/ComponentCommandOrder.java | 181 +
.../providers/agent/ComponentInstanceState.java | 340 +
.../providers/agent/ComponentTagProvider.java | 127 +
.../slider/providers/agent/ContainerState.java | 41 +
.../providers/agent/HeartbeatMonitor.java | 130 +
.../apache/slider/providers/agent/State.java | 199 +
.../application/metadata/AbstractComponent.java | 80 +
.../metadata/AbstractMetainfoParser.java | 130 +
.../metadata/AbstractMetainfoSchema.java | 69 +
.../metadata/AddonPackageMetainfoParser.java | 53 +
.../agent/application/metadata/Application.java | 193 +
.../metadata/ApplicationPackage.java | 69 +
.../application/metadata/CommandOrder.java | 61 +
.../application/metadata/CommandScript.java | 72 +
.../agent/application/metadata/Component.java | 217 +
.../application/metadata/ComponentCommand.java | 85 +
.../application/metadata/ComponentExport.java | 54 +
.../metadata/ComponentsInAddonPackage.java | 26 +
.../agent/application/metadata/ConfigFile.java | 59 +
.../application/metadata/DefaultConfig.java | 39 +
.../metadata/DefaultConfigParser.java | 54 +
.../application/metadata/DockerContainer.java | 187 +
.../metadata/DockerContainerInputFile.java | 50 +
.../metadata/DockerContainerMount.java | 60 +
.../metadata/DockerContainerPort.java | 66 +
.../agent/application/metadata/Export.java | 61 +
.../agent/application/metadata/ExportGroup.java | 71 +
.../agent/application/metadata/Metainfo.java | 118 +
.../application/metadata/MetainfoParser.java | 97 +
.../agent/application/metadata/OSPackage.java | 51 +
.../agent/application/metadata/OSSpecific.java | 57 +
.../agent/application/metadata/Package.java | 60 +
.../application/metadata/PropertyInfo.java | 54 +
.../agent/application/metadata/Validate.java | 27 +
.../org/apache/slider/providers/agent/todo.md | 22 +
.../slideram/SliderAMClientProvider.java | 304 +
.../slideram/SliderAMProviderService.java | 189 +
.../appmaster/AppMasterActionOperations.java | 29 +
.../server/appmaster/PrivilegedConnectToCM.java | 48 +
.../appmaster/ProtobufClusterServices.java | 36 +
.../server/appmaster/PublishedArtifacts.java | 31 +
.../server/appmaster/RoleLaunchService.java | 257 +
.../server/appmaster/SliderAppMaster.java | 2450 ++
.../appmaster/actions/ActionFlexCluster.java | 44 +
.../server/appmaster/actions/ActionHalt.java | 53 +
.../appmaster/actions/ActionKillContainer.java | 86 +
.../actions/ActionRegisterServiceInstance.java | 59 +
.../appmaster/actions/ActionStartContainer.java | 62 +
.../appmaster/actions/ActionStopQueue.java | 56 +
.../appmaster/actions/ActionStopSlider.java | 162 +
.../actions/ActionUpgradeContainers.java | 106 +
.../server/appmaster/actions/AsyncAction.java | 138 +
.../actions/EscalateOutstandingRequests.java | 45 +
.../actions/ProviderReportedContainerLoss.java | 53 +
.../actions/ProviderStartupCompleted.java | 36 +
.../server/appmaster/actions/QueueAccess.java | 72 +
.../server/appmaster/actions/QueueExecutor.java | 90 +
.../server/appmaster/actions/QueueService.java | 202 +
.../actions/RegisterComponentInstance.java | 59 +
.../appmaster/actions/RenewingAction.java | 141 +
.../appmaster/actions/ResetFailureWindow.java | 39 +
.../actions/ReviewAndFlexApplicationSize.java | 43 +
.../actions/UnregisterComponentInstance.java | 51 +
.../server/appmaster/management/BoolMetric.java | 87 +
.../management/BoolMetricPredicate.java | 44 +
.../server/appmaster/management/LongGauge.java | 98 +
.../management/LongMetricFunction.java | 44 +
.../appmaster/management/MeterAndCounter.java | 109 +
.../management/MetricsAndMonitoring.java | 195 +
.../management/MetricsBindingService.java | 151 +
.../appmaster/management/MetricsConstants.java | 58 +
.../appmaster/management/MetricsKeys.java | 92 +
.../management/PrefixedMetricsSet.java | 53 +
.../management/RangeLimitedCounter.java | 85 +
.../appmaster/management/RecordedEvent.java | 58 +
.../server/appmaster/management/Timestamp.java | 33 +
.../management/YarnServiceHealthCheck.java | 38 +
.../server/appmaster/monkey/ChaosEntry.java | 85 +
.../server/appmaster/monkey/ChaosKillAM.java | 48 +
.../appmaster/monkey/ChaosKillContainer.java | 84 +
.../appmaster/monkey/ChaosMonkeyService.java | 138 +
.../server/appmaster/monkey/ChaosTarget.java | 24 +
.../appmaster/monkey/MonkeyPlayAction.java | 48 +
.../operations/AbstractRMOperation.java | 30 +
.../operations/AsyncRMOperationHandler.java | 110 +
.../operations/CancelSingleRequest.java | 54 +
.../operations/ContainerReleaseOperation.java | 47 +
.../operations/ContainerRequestOperation.java | 62 +
.../ProviderNotifyingOperationHandler.java | 55 +
.../operations/RMOperationHandler.java | 32 +
.../operations/RMOperationHandlerActions.java | 60 +
.../slider/server/appmaster/rpc/RpcBinder.java | 310 +
.../appmaster/rpc/SliderAMPolicyProvider.java | 41 +
.../appmaster/rpc/SliderClusterProtocolPB.java | 27 +
.../rpc/SliderClusterProtocolPBImpl.java | 318 +
.../rpc/SliderClusterProtocolProxy.java | 358 +
.../server/appmaster/rpc/SliderIPCService.java | 551 +
.../appmaster/rpc/SliderRPCSecurityInfo.java | 87 +
.../security/SecurityConfiguration.java | 162 +
.../state/AbstractClusterServices.java | 61 +
.../slider/server/appmaster/state/AppState.java | 2489 ++
.../appmaster/state/AppStateBindingInfo.java | 63 +
.../state/ContainerAllocationOutcome.java | 44 +
.../state/ContainerAllocationResults.java | 50 +
.../appmaster/state/ContainerAssignment.java | 60 +
.../appmaster/state/ContainerOutcome.java | 61 +
.../appmaster/state/ContainerPriority.java | 109 +
.../state/ContainerReleaseSelector.java | 37 +
.../MostRecentContainerReleaseSelector.java | 51 +
.../server/appmaster/state/NodeEntry.java | 325 +
.../server/appmaster/state/NodeInstance.java | 409 +
.../slider/server/appmaster/state/NodeMap.java | 174 +
.../appmaster/state/OutstandingRequest.java | 428 +
.../state/OutstandingRequestTracker.java | 482 +
.../appmaster/state/ProviderAppState.java | 307 +
.../server/appmaster/state/RoleHistory.java | 1101 +
.../appmaster/state/RoleHistoryUtils.java | 50 +
.../appmaster/state/RoleHostnamePair.java | 75 +
.../server/appmaster/state/RoleInstance.java | 323 +
.../server/appmaster/state/RoleStatus.java | 563 +
.../appmaster/state/SimpleReleaseSelector.java | 33 +
.../state/StateAccessForProviders.java | 313 +
.../server/appmaster/web/AgentService.java | 37 +
.../server/appmaster/web/HttpCacheHeaders.java | 35 +
.../appmaster/web/SliderAMController.java | 69 +
.../server/appmaster/web/SliderAMWebApp.java | 108 +
.../web/SliderDefaultWrapperServlet.java | 48 +
.../slider/server/appmaster/web/WebAppApi.java | 95 +
.../server/appmaster/web/WebAppApiImpl.java | 128 +
.../server/appmaster/web/layout/AppLayout.java | 32 +
.../web/layout/ClusterSpecificationView.java | 32 +
.../web/layout/ContainerStatsView.java | 33 +
.../appmaster/web/layout/WebUILayout.java | 43 +
.../appmaster/web/rest/AMWadlGenerator.java | 72 +
.../web/rest/AMWadlGeneratorConfig.java | 34 +
.../appmaster/web/rest/AMWebServices.java | 72 +
.../web/rest/AbstractSliderResource.java | 157 +
.../appmaster/web/rest/InsecureAmFilter.java | 105 +
.../web/rest/InsecureAmFilterInitializer.java | 102 +
.../server/appmaster/web/rest/RestPaths.java | 172 +
.../web/rest/SliderJacksonJaxbJsonProvider.java | 58 +
.../web/rest/agent/AgentCommandType.java | 23 +
.../appmaster/web/rest/agent/AgentEnv.java | 376 +
.../appmaster/web/rest/agent/AgentResource.java | 118 +
.../web/rest/agent/AgentRestOperations.java | 28 +
.../appmaster/web/rest/agent/AgentWebApp.java | 258 +
.../web/rest/agent/AgentWebServices.java | 40 +
.../appmaster/web/rest/agent/CommandReport.java | 207 +
.../web/rest/agent/ComponentStatus.java | 129 +
.../appmaster/web/rest/agent/DiskInfo.java | 128 +
.../web/rest/agent/ExecutionCommand.java | 310 +
.../appmaster/web/rest/agent/HeartBeat.java | 149 +
.../web/rest/agent/HeartBeatResponse.java | 147 +
.../appmaster/web/rest/agent/HostInfo.java | 398 +
.../appmaster/web/rest/agent/HostStatus.java | 63 +
.../appmaster/web/rest/agent/Register.java | 193 +
.../web/rest/agent/RegistrationCommand.java | 43 +
.../web/rest/agent/RegistrationResponse.java | 133 +
.../web/rest/agent/RegistrationStatus.java | 22 +
.../appmaster/web/rest/agent/StatusCommand.java | 152 +
.../ApplicationResouceContentCacheFactory.java | 63 +
.../rest/application/ApplicationResource.java | 516 +
.../application/actions/RestActionPing.java | 50 +
.../application/actions/RestActionStop.java | 67 +
.../rest/application/actions/StopResponse.java | 29 +
.../web/rest/application/package-info.java | 24 +
.../resources/AggregateModelRefresher.java | 47 +
.../application/resources/AppconfRefresher.java | 55 +
.../application/resources/CachedContent.java | 121 +
.../application/resources/ContentCache.java | 67 +
.../resources/LiveComponentsRefresher.java | 39 +
.../resources/LiveContainersRefresher.java | 52 +
.../resources/LiveNodesRefresher.java | 41 +
.../resources/LiveResourcesRefresher.java | 68 +
.../resources/LiveStatisticsRefresher.java | 39 +
.../resources/ResourceRefresher.java | 31 +
.../resources/ResourceSnapshotRefresher.java | 40 +
.../web/rest/management/ManagementResource.java | 93 +
.../management/resources/ActionsResource.java | 22 +
.../resources/AggregateConfResource.java | 90 +
.../management/resources/ComponentResource.java | 53 +
.../management/resources/ConfTreeResource.java | 69 +
.../management/resources/ResourceFactory.java | 47 +
.../web/rest/publisher/PublisherResource.java | 273 +
.../web/rest/registry/PathEntryResource.java | 45 +
.../web/rest/registry/RegistryResource.java | 151 +
.../web/view/ClusterSpecificationBlock.java | 55 +
.../appmaster/web/view/ContainerStatsBlock.java | 282 +
.../server/appmaster/web/view/IndexBlock.java | 305 +
.../server/appmaster/web/view/NavBlock.java | 62 +
.../appmaster/web/view/SliderHamletBlock.java | 56 +
.../slider/server/avro/LoadedRoleHistory.java | 92 +
.../slider/server/avro/NewerFilesFirst.java | 43 +
.../slider/server/avro/OlderFilesFirst.java | 43 +
.../slider/server/avro/RoleHistoryWriter.java | 449 +
.../slider/server/servicemonitor/HttpProbe.java | 82 +
.../server/servicemonitor/LogEntryBuilder.java | 76 +
.../server/servicemonitor/MonitorKeys.java | 279 +
.../server/servicemonitor/MonitorUtils.java | 109 +
.../slider/server/servicemonitor/PortProbe.java | 107 +
.../slider/server/servicemonitor/Probe.java | 107 +
.../servicemonitor/ProbeFailedException.java | 32 +
.../ProbeInterruptedException.java | 29 +
.../server/servicemonitor/ProbePhase.java | 56 +
.../servicemonitor/ProbeReportHandler.java | 79 +
.../server/servicemonitor/ProbeStatus.java | 173 +
.../server/servicemonitor/ProbeWorker.java | 446 +
.../server/servicemonitor/ReportingLoop.java | 265 +
.../servicemonitor/YarnApplicationProbe.java | 90 +
.../AbstractSecurityStoreGenerator.java | 98 +
.../services/security/CertificateManager.java | 495 +
.../services/security/KeystoreGenerator.java | 64 +
.../server/services/security/SecurityStore.java | 66 +
.../security/SecurityStoreGenerator.java | 40 +
.../server/services/security/SecurityUtils.java | 256 +
.../services/security/SignCertResponse.java | 67 +
.../server/services/security/SignMessage.java | 54 +
.../services/security/StoresGenerator.java | 68 +
.../services/security/TruststoreGenerator.java | 62 +
.../utility/AbstractSliderLaunchedService.java | 120 +
.../services/utility/EndOfServiceWaiter.java | 87 +
.../LaunchedWorkflowCompositeService.java | 117 +
.../services/utility/PatternValidator.java | 61 +
.../server/services/utility/WebAppService.java | 69 +
.../services/workflow/ClosingService.java | 94 +
.../services/workflow/ForkedProcessService.java | 301 +
.../services/workflow/LongLivedProcess.java | 598 +
.../LongLivedProcessLifecycleEvent.java | 41 +
.../server/services/workflow/ServiceParent.java | 44 +
.../workflow/ServiceTerminatingCallable.java | 92 +
.../workflow/ServiceTerminatingRunnable.java | 72 +
.../services/workflow/ServiceThreadFactory.java | 102 +
.../workflow/WorkflowCallbackService.java | 113 +
.../workflow/WorkflowCompositeService.java | 167 +
.../workflow/WorkflowExecutorService.java | 113 +
.../services/workflow/WorkflowRpcService.java | 76 +
.../WorkflowScheduledExecutorService.java | 38 +
.../workflow/WorkflowSequenceService.java | 306 +
.../server/services/workflow/package-info.java | 172 +
.../YarnRegistryViewForProviders.java | 270 +
.../src/main/proto/SliderClusterMessages.proto | 396 +
.../src/main/proto/SliderClusterProtocol.proto | 184 +
.../org.apache.hadoop.security.SecurityInfo | 15 +
.../org/apache/slider/log4j.properties | 52 +
.../slider/providers/agent/conf/agent.txt | 19 +
.../slider/providers/agent/conf/command.json | 168 +
.../providers/agent/conf/command_template.json | 168 +
.../apache/slider/providers/agent/role-node.xml | 65 +
.../providers/dynamic/application.properties | 25 +
.../providers/slideram/instance/appconf.json | 19 +
.../providers/slideram/instance/internal.json | 17 +
.../providers/slideram/instance/resources.json | 18 +
.../main/resources/org/apache/slider/slider.xml | 30 +
.../src/scripts/slider_keytabs.sh | 67 +
.../src/scripts/yarnservice.py | 383 +
.../hadoop-yarn-slider-core/src/site/site.xml | 26 +
.../hadoop-yarn-slider/pom.xml | 39 +
.../hadoop-yarn-applications/pom.xml | 2 +
461 files changed, 109486 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/d8cab88d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/pom.xml
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/pom.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/pom.xml
new file mode 100644
index 0000000..14130c5
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/pom.xml
@@ -0,0 +1,397 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-yarn-applications</artifactId>
+ <version>3.0.0-alpha2-SNAPSHOT</version>
+ </parent>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-yarn-slider-core</artifactId>
+ <packaging>jar</packaging>
+ <name>Apache Hadoop YARN Slider Core</name>
+
+ <build>
+ <!-- resources are filtered for dynamic updates. This gets build info in-->
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ <filtering>true</filtering>
+ </resource>
+ </resources>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <environmentVariables>
+ <JAVA_HOME>${java.home}</JAVA_HOME>
+ </environmentVariables>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.avro</groupId>
+ <artifactId>avro-maven-plugin</artifactId>
+ <version>${avro.version}</version>
+ <executions>
+ <execution>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>schema</goal>
+ </goals>
+ <configuration>
+ <sourceDirectory>${project.basedir}/src/main/avro/
+ </sourceDirectory>
+ <outputDirectory>${project.build.directory}/generated-sources/java
+ </outputDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>com.beust</groupId>
+ <artifactId>jcommander</artifactId>
+ <version>1.30</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.codehaus.jackson</groupId>
+ <artifactId>jackson-core-asl</artifactId>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.codehaus.jackson</groupId>
+ <artifactId>jackson-jaxrs</artifactId>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.codehaus.jackson</groupId>
+ <artifactId>jackson-mapper-asl</artifactId>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.codehaus.jackson</groupId>
+ <artifactId>jackson-xc</artifactId>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-hdfs</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-yarn-client</artifactId>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-yarn-server-web-proxy</artifactId>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-yarn-registry</artifactId>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.protobuf</groupId>
+ <artifactId>protobuf-java</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.avro</groupId>
+ <artifactId>avro</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-compress</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-digester</groupId>
+ <artifactId>commons-digester</artifactId>
+ <version>1.8</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-core</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-servlets</artifactId>
+ <version>3.0.1</version>
+ </dependency>
+
+ <!-- ======================================================== -->
+ <!-- service registry -->
+ <!-- ======================================================== -->
+
+ <dependency>
+ <groupId>org.apache.zookeeper</groupId>
+ <artifactId>zookeeper</artifactId>
+ </dependency>
+
+ <!-- ======================================================== -->
+ <!-- Jersey and webapp support -->
+ <!-- ======================================================== -->
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-client</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-json</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-server</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.inject</groupId>
+ <artifactId>guice</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.inject.extensions</groupId>
+ <artifactId>guice-servlet</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.sun.jersey.contribs</groupId>
+ <artifactId>jersey-guice</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-util</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-sslengine</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet.jsp</groupId>
+ <artifactId>jsp-api</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.codehaus.jettison</groupId>
+ <artifactId>jettison</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-sslengine</artifactId>
+ <version>6.1.26</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.yaml</groupId>
+ <artifactId>snakeyaml</artifactId>
+ <version>1.16</version>
+ <scope>compile</scope>
+ </dependency>
+
+ </dependencies>
+
+
+ <profiles>
+ <profile>
+ <id>compile-protobuf</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-maven-plugins</artifactId>
+ <executions>
+ <execution>
+ <id>compile-protoc</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>protoc</goal>
+ </goals>
+ <configuration>
+ <protocVersion>${protobuf.version}</protocVersion>
+ <protocCommand>protoc</protocCommand>
+ <imports>
+ <param>${basedir}/src/main/proto</param>
+ </imports>
+ <source>
+ <directory>${basedir}/src/main/proto</directory>
+ <includes>
+ <include>SliderClusterMessages.proto</include>
+ <include>SliderClusterProtocol.proto</include>
+ </includes>
+ </source>
+ <output>${basedir}/src/main/java</output>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+
+ <profile>
+ <id>rat</id>
+ <build>
+ <plugins>
+
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>check-licenses</id>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <excludes>
+ <exclude>**/*.json</exclude>
+ <exclude>src/test/python/agent.ini</exclude>
+ <exclude>src/test/python/version</exclude>
+ <exclude>**/THIRD-PARTY.properties</exclude>
+ <exclude>src/main/resources/webapps/slideram/.keep</exclude>
+ <exclude>src/main/resources/webapps/slideragent/.keep</exclude>
+ <exclude>src/main/resources/webapps/static/yarn.dt.plugins.js</exclude>
+ <!-- jQuery DataTables files (BSD license) -->
+ <exclude>src/main/resources/webapps/static/dt-1.9.4/**</exclude>
+ <!-- jQuery (MIT license) -->
+ <exclude>src/main/resources/webapps/static/jquery/jquery-1.8.2.min.js</exclude>
+ <!-- jQuery UI (MIT license) -->
+ <exclude>src/main/resources/webapps/static/jquery/jquery-ui-1.9.1.custom.min.js</exclude>
+ <exclude>src/main/resources/webapps/static/jquery/themes-1.9.1/base/jquery-ui.css</exclude>
+ <!-- jQuery jsTree (MIT license) -->
+ <exclude>src/main/resources/webapps/static/jt/jquery.jstree.js</exclude>
+ <!-- protobuf generated classes -->
+ <exclude>src/main/java/org/apache/slider/api/proto/Messages.java</exclude>
+ <exclude>src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java</exclude>
+ <exclude>src/test/app_packages/test_am_config/resources/test.template</exclude>
+ <exclude>src/test/app_packages/test_am_config/test_archive/testfile</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ </profiles>
+
+</project>
http://git-wip-us.apache.org/repos/asf/hadoop/blob/d8cab88d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/assembly/executable-jar.xml
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/assembly/executable-jar.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/assembly/executable-jar.xml
new file mode 100644
index 0000000..23383c8
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/assembly/executable-jar.xml
@@ -0,0 +1,47 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you 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.
+ -->
+
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <id>distribution</id>
+ <formats>
+ <format>zip</format>
+ </formats>
+ <includeBaseDirectory>true</includeBaseDirectory>
+ <fileSets>
+ <fileSet>
+ <directory>${project.build.directory}</directory>
+ <outputDirectory>/</outputDirectory>
+ <includes>
+ <include>*.jar</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+ <dependencySets>
+ <dependencySet>
+ <scope>runtime</scope>
+ <outputDirectory>/lib</outputDirectory>
+ <!-- dont copy JAR into /lib-->
+ <useProjectArtifact>false</useProjectArtifact>
+ <!-- <includeBaseDirectory>false</includeBaseDirectory>-->
+ <unpack>false</unpack>
+ </dependencySet>
+ </dependencySets>
+</assembly>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/hadoop/blob/d8cab88d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/license/THIRD-PARTY.properties
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/license/THIRD-PARTY.properties b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/license/THIRD-PARTY.properties
new file mode 100644
index 0000000..1abd56e
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/license/THIRD-PARTY.properties
@@ -0,0 +1,33 @@
+# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
+#-------------------------------------------------------------------------------
+# Already used licenses in project :
+# - Apache License
+# - BSD
+# - CDDL + GPLv2 with classpath exception
+# - CDDL 1.1
+# - CDDL License
+# - CDDL+GPL
+# - Common Public License Version 1.0
+# - Eclipse Public License - Version 1.0
+# - GNU Lesser General Public License (LGPL), Version 2.1
+# - GNU Lesser General Public License, Version 2.1
+# - GPL2 w/ CPE
+# - MIT License
+# - MPL 1.1
+# - New BSD License
+# - Public Domain
+# - Revised BSD
+# - The Apache Software License, Version 2.0
+# - The BSD 3-Clause License
+# - The BSD License
+# - The MIT License
+#-------------------------------------------------------------------------------
+# Please fill the missing licenses for dependencies :
+#
+#
+#Thu Oct 15 16:45:02 EDT 2015
+commons-beanutils--commons-beanutils--1.7.0=The Apache Software License, Version 2.0
+javax.servlet--servlet-api--2.5=CDDL License
+javax.servlet.jsp--jsp-api--2.1=CDDL License
+org.apache.zookeeper--zookeeper--3.4.6=The Apache Software License, Version 2.0
+org.codehaus.jettison--jettison--1.1=The Apache Software License, Version 2.0
http://git-wip-us.apache.org/repos/asf/hadoop/blob/d8cab88d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/avro/org/apache/slider/server/avro/RoleHistoryRecord.avsc
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/avro/org/apache/slider/server/avro/RoleHistoryRecord.avsc b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/avro/org/apache/slider/server/avro/RoleHistoryRecord.avsc
new file mode 100644
index 0000000..3667c01
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/avro/org/apache/slider/server/avro/RoleHistoryRecord.avsc
@@ -0,0 +1,114 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you 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.
+
+[
+
+ {
+ "type": "record",
+ "name": "NodeEntryRecord",
+ "namespace": "org.apache.slider.server.avro",
+ "fields": [
+ {
+ "name": "host",
+ "type": "string"
+ },
+ {
+ "name": "role",
+ "type": "int"
+ },
+ {
+ "name": "active",
+ "type": "boolean"
+ },
+ {
+ "name": "last_used",
+ "type": "long"
+ }
+ ]
+ },
+
+ {
+ "type": "record",
+ "name": "RoleHistoryHeader",
+ "namespace": "org.apache.slider.server.avro",
+ "fields": [
+ {
+ "name": "version",
+ "type": "int"
+ },
+ {
+ "name": "saved",
+ "type": "long"
+ },
+ {
+ "name": "savedx",
+ "type": "string"
+ },
+ {
+ "name": "savedate",
+ "type": "string",
+ "default": ""
+ },
+ {
+ "name": "roles",
+ "type": "int"
+ }
+ ]
+ },
+ {
+ "type": "record",
+ "name": "RoleHistoryMapping",
+ "namespace": "org.apache.slider.server.avro",
+ "fields": [
+ {
+ "name": "rolemap",
+ "type": {
+ "type": "map",
+ "values": "int"
+ }
+ }
+ ]
+ },
+ {
+ "type": "record",
+ "name": "RoleHistoryFooter",
+ "namespace": "org.apache.slider.server.avro",
+ "fields": [
+ {
+ "name": "count",
+ "type": "long"
+ }
+ ]
+ },
+
+ {
+ "type": "record",
+ "name": "RoleHistoryRecord",
+ "namespace": "org.apache.slider.server.avro",
+ "fields": [
+ {
+ "name": "entry",
+ "type": [
+ "org.apache.slider.server.avro.NodeEntryRecord",
+ "org.apache.slider.server.avro.RoleHistoryHeader",
+ "org.apache.slider.server.avro.RoleHistoryFooter",
+ "org.apache.slider.server.avro.RoleHistoryMapping"
+ ]
+ }
+ ]
+ }
+
+]
http://git-wip-us.apache.org/repos/asf/hadoop/blob/d8cab88d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/hadoop/security/KerberosDiags.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/hadoop/security/KerberosDiags.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/hadoop/security/KerberosDiags.java
new file mode 100644
index 0000000..8c572b3
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/hadoop/security/KerberosDiags.java
@@ -0,0 +1,676 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+package org.apache.hadoop.security;
+
+import com.google.common.annotations.VisibleForTesting;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.io.Text;
+import org.apache.hadoop.security.token.Token;
+import org.apache.hadoop.security.token.TokenIdentifier;
+import org.apache.hadoop.util.ExitUtil;
+import org.apache.hadoop.util.Shell;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.crypto.Cipher;
+import java.io.Closeable;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.lang.reflect.InvocationTargetException;
+import java.net.InetAddress;
+import java.security.NoSuchAlgorithmException;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import static org.apache.hadoop.security.UserGroupInformation.*;
+import static org.apache.hadoop.security.authentication.util.KerberosUtil.*;
+import static org.apache.hadoop.fs.CommonConfigurationKeysPublic.*;
+
+/**
+ * Kerberos diagnostics
+ * At some point this may move to hadoop core, so please keep use of slider
+ * methods and classes to ~0.
+ *
+ * This operation expands some of the diagnostic output of the security code,
+ * but not all. For completeness
+ *
+ * Set the environment variable {@code HADOOP_JAAS_DEBUG=true}
+ * Set the log level for {@code org.apache.hadoop.security=DEBUG}
+ */
+public class KerberosDiags implements Closeable {
+
+ private static final Logger LOG = LoggerFactory.getLogger(KerberosDiags.class);
+ public static final String KRB5_CCNAME = "KRB5CCNAME";
+ public static final String JAVA_SECURITY_KRB5_CONF
+ = "java.security.krb5.conf";
+ public static final String JAVA_SECURITY_KRB5_REALM
+ = "java.security.krb5.realm";
+ public static final String SUN_SECURITY_KRB5_DEBUG
+ = "sun.security.krb5.debug";
+ public static final String SUN_SECURITY_SPNEGO_DEBUG
+ = "sun.security.spnego.debug";
+ public static final String SUN_SECURITY_JAAS_FILE
+ = "java.security.auth.login.config";
+ public static final String KERBEROS_KINIT_COMMAND
+ = "hadoop.kerberos.kinit.command";
+ public static final String HADOOP_AUTHENTICATION_IS_DISABLED
+ = "Hadoop authentication is disabled";
+ public static final String UNSET = "(unset)";
+ public static final String NO_DEFAULT_REALM = "Cannot locate default realm";
+
+ private final Configuration conf;
+ private final List<String> services;
+ private final PrintWriter out;
+ private final File keytab;
+ private final String principal;
+ private final long minKeyLength;
+ private final boolean securityRequired;
+
+ public static final String CAT_JVM = "JVM";
+ public static final String CAT_JAAS = "JAAS";
+ public static final String CAT_CONFIG = "CONFIG";
+ public static final String CAT_LOGIN = "LOGIN";
+ public static final String CAT_KERBEROS = "KERBEROS";
+ public static final String CAT_SASL = "SASL";
+
+ @SuppressWarnings("IOResourceOpenedButNotSafelyClosed")
+ public KerberosDiags(Configuration conf,
+ PrintWriter out,
+ List<String> services,
+ File keytab,
+ String principal,
+ long minKeyLength,
+ boolean securityRequired) {
+ this.conf = conf;
+ this.services = services;
+ this.keytab = keytab;
+ this.principal = principal;
+ this.out = out;
+ this.minKeyLength = minKeyLength;
+ this.securityRequired = securityRequired;
+ }
+
+ @Override
+ public void close() throws IOException {
+ flush();
+ }
+
+ /**
+ * Execute diagnostics.
+ * <p>
+ * Things it would be nice if UGI made accessible
+ * <ol>
+ * <li>A way to enable JAAS debug programatically</li>
+ * <li>Access to the TGT</li>
+ * </ol>
+ * @return true if security was enabled and all probes were successful
+ * @throws KerberosDiagsFailure explicitly raised failure
+ * @throws Exception other security problems
+ */
+ @SuppressWarnings("deprecation")
+ public boolean execute() throws Exception {
+
+ title("Kerberos Diagnostics scan at %s",
+ new Date(System.currentTimeMillis()));
+
+ // check that the machine has a name
+ println("Hostname: %s",
+ InetAddress.getLocalHost().getCanonicalHostName());
+
+ // Fail fast on a JVM without JCE installed.
+ validateKeyLength();
+
+ // look at realm
+ println("JVM Kerberos Login Module = %s", getKrb5LoginModuleName());
+ printDefaultRealm();
+
+ title("System Properties");
+ for (String prop : new String[]{
+ JAVA_SECURITY_KRB5_CONF,
+ JAVA_SECURITY_KRB5_REALM,
+ SUN_SECURITY_KRB5_DEBUG,
+ SUN_SECURITY_SPNEGO_DEBUG,
+ SUN_SECURITY_JAAS_FILE
+ }) {
+ printSysprop(prop);
+ }
+
+ title("Environment Variables");
+ for (String env : new String[]{
+ "HADOOP_JAAS_DEBUG",
+ KRB5_CCNAME,
+ HADOOP_USER_NAME,
+ HADOOP_PROXY_USER,
+ HADOOP_TOKEN_FILE_LOCATION,
+ }) {
+ printEnv(env);
+ }
+
+ for (String prop : new String[]{
+ KERBEROS_KINIT_COMMAND,
+ HADOOP_SECURITY_AUTHENTICATION,
+ HADOOP_SECURITY_AUTHORIZATION,
+ "hadoop.kerberos.min.seconds.before.relogin", // not in 2.6
+ "hadoop.security.dns.interface", // not in 2.6
+ "hadoop.security.dns.nameserver", // not in 2.6
+ HADOOP_RPC_PROTECTION,
+ HADOOP_SECURITY_SASL_PROPS_RESOLVER_CLASS,
+ HADOOP_SECURITY_CRYPTO_CODEC_CLASSES_KEY_PREFIX,
+ HADOOP_SECURITY_GROUP_MAPPING,
+ "hadoop.security.impersonation.provider.class", // not in 2.6
+ "dfs.data.transfer.protection" // HDFS
+ }) {
+ printConfOpt(prop);
+ }
+
+ // check that authentication is enabled
+ if (SecurityUtil.getAuthenticationMethod(conf)
+ .equals(AuthenticationMethod.SIMPLE)) {
+ println(HADOOP_AUTHENTICATION_IS_DISABLED);
+ failif(securityRequired, CAT_CONFIG, HADOOP_AUTHENTICATION_IS_DISABLED);
+ // no security, skip rest of test
+ return false;
+ }
+
+ validateKrb5File();
+ validateSasl(HADOOP_SECURITY_SASL_PROPS_RESOLVER_CLASS);
+ validateSasl("dfs.data.transfer.saslproperties.resolver.class");
+ validateKinitExecutable();
+ validateJAAS();
+ // now the big test: login, then try again
+ boolean krb5Debug = getAndSet(SUN_SECURITY_KRB5_DEBUG);
+ boolean spnegoDebug = getAndSet(SUN_SECURITY_SPNEGO_DEBUG);
+ try {
+ title("Logging in");
+
+ if (keytab != null) {
+ dumpKeytab(keytab);
+ loginFromKeytab();
+ } else {
+ UserGroupInformation loginUser = getLoginUser();
+ dumpUGI("Log in user", loginUser);
+ validateUGI("Login user", loginUser);
+ println("Ticket based login: %b", isLoginTicketBased());
+ println("Keytab based login: %b", isLoginKeytabBased());
+ }
+
+ return true;
+ } finally {
+ // restore original system properties
+ System.setProperty(SUN_SECURITY_KRB5_DEBUG,
+ Boolean.toString(krb5Debug));
+ System.setProperty(SUN_SECURITY_SPNEGO_DEBUG,
+ Boolean.toString(spnegoDebug));
+ }
+ }
+
+ /**
+ * Fail fast on a JVM without JCE installed.
+ *
+ * This is a recurrent problem
+ * (that is: it keeps creeping back with JVM updates);
+ * a fast failure is the best tactic
+ * @throws NoSuchAlgorithmException
+ */
+
+ protected void validateKeyLength() throws NoSuchAlgorithmException {
+ int aesLen = Cipher.getMaxAllowedKeyLength("AES");
+ println("Maximum AES encryption key length %d bits", aesLen);
+ failif (aesLen < minKeyLength,
+ CAT_JVM,
+ "Java Cryptography Extensions are not installed on this JVM."
+ +" Maximum supported key length %s - minimum required %d",
+ aesLen, minKeyLength);
+ }
+
+ /**
+ * Get the default realm.
+ * <p>
+ * Not having a default realm may be harmless, so is noted at info.
+ * All other invocation failures are downgraded to warn, as
+ * follow-on actions may still work.
+ * failure to invoke the method via introspection is rejected,
+ * as it's a sign of JVM compatibility issues that may have other
+ * consequences
+ */
+ protected void printDefaultRealm() {
+ try {
+ println("Default Realm = %s",
+ getDefaultRealm());
+ } catch (ClassNotFoundException
+ | IllegalAccessException
+ | NoSuchMethodException e) {
+
+ throw new KerberosDiagsFailure(CAT_JVM, e,
+ "Failed to invoke krb5.Config.getDefaultRealm: %s", e);
+ } catch (InvocationTargetException e) {
+ Throwable cause = e.getCause() != null ? e.getCause() : e;
+ if (cause.toString().contains(NO_DEFAULT_REALM)) {
+ // exception raised if there is no default realm. This is not
+ // always a problem, so downgrade to a message.
+ println("Host has no default realm");
+ LOG.debug(cause.toString(), cause);
+ } else {
+ println("Kerberos.getDefaultRealm() failed: %s\n%s",
+ cause,
+ org.apache.hadoop.util.StringUtils.stringifyException(cause));
+ }
+ }
+ }
+
+ /**
+ * Locate the krb5.conf file and dump it.
+ * No-op on windows.
+ * @throws IOException
+ */
+ private void validateKrb5File() throws IOException {
+ if (!Shell.WINDOWS) {
+ title("Locating Kerberos configuration file");
+ String krbPath = "/etc/krb5.conf";
+ String jvmKrbPath = System.getProperty(JAVA_SECURITY_KRB5_CONF);
+ if (jvmKrbPath != null) {
+ println("Setting kerberos path from sysprop %s: %s",
+ JAVA_SECURITY_KRB5_CONF, jvmKrbPath);
+ krbPath = jvmKrbPath;
+ }
+
+ String krb5name = System.getenv(KRB5_CCNAME);
+ if (krb5name != null) {
+ println("Setting kerberos path from environment variable %s: %s",
+ KRB5_CCNAME, krb5name);
+ krbPath = krb5name;
+ if (jvmKrbPath != null) {
+ println("Warning - both %s and %s were set - %s takes priority",
+ JAVA_SECURITY_KRB5_CONF, KRB5_CCNAME, KRB5_CCNAME);
+ }
+ }
+
+ File krbFile = new File(krbPath);
+ println("Kerberos configuration file = %s", krbFile);
+ failif(!krbFile.exists(),
+ CAT_KERBEROS,
+ "Kerberos configuration file %s not found", krbFile);
+ dump(krbFile);
+ }
+ }
+
+ /**
+ * Dump a keytab: list all principals.
+ * @param keytabFile the keytab file
+ * @throws IOException IO problems
+ */
+ public void dumpKeytab(File keytabFile) throws IOException {
+ title("Examining keytab %s", keytabFile);
+ File kt = keytabFile.getCanonicalFile();
+ failif(!kt.exists(), CAT_CONFIG, "Keytab not found: %s", kt);
+ failif(!kt.isFile(), CAT_CONFIG, "Keytab is not a valid file: %s", kt);
+
+ String[] names = getPrincipalNames(keytabFile.getCanonicalPath(),
+ Pattern.compile(".*"));
+ println("keytab entry count: %d", names.length);
+ for (String name : names) {
+ println(" %s", name);
+ }
+ println("-----");
+ }
+
+ /**
+ * Log in from a keytab, dump the UGI, validate it, then try and log in again.
+ * That second-time login catches JVM/Hadoop compatibility problems.
+ * @throws IOException
+ */
+ private void loginFromKeytab() throws IOException {
+ UserGroupInformation ugi;
+ String identity;
+ if (keytab != null) {
+ File kt = keytab.getCanonicalFile();
+ println("Using keytab %s principal %s", kt, principal);
+ identity = principal;
+
+ failif(StringUtils.isEmpty(principal), CAT_KERBEROS,
+ "No principal defined");
+ ugi = loginUserFromKeytabAndReturnUGI(principal, kt.getPath());
+ dumpUGI(identity, ugi);
+ validateUGI(principal, ugi);
+
+ title("Attempting to log in from keytab again");
+ // package scoped -hence the reason why this class must be in the
+ // hadoop.security package
+ setShouldRenewImmediatelyForTests(true);
+ // attempt a new login
+ ugi.reloginFromKeytab();
+ } else {
+ println("No keytab: logging is as current user");
+ }
+ }
+
+ /**
+ * Dump a UGI.
+ * @param title title of this section
+ * @param ugi UGI to dump
+ * @throws IOException
+ */
+ private void dumpUGI(String title, UserGroupInformation ugi)
+ throws IOException {
+ title(title);
+ println("UGI instance = %s", ugi);
+ println("Has kerberos credentials: %b", ugi.hasKerberosCredentials());
+ println("Authentication method: %s", ugi.getAuthenticationMethod());
+ println("Real Authentication method: %s",
+ ugi.getRealAuthenticationMethod());
+ title("Group names");
+ for (String name : ugi.getGroupNames()) {
+ println(name);
+ }
+ title("Credentials");
+ Credentials credentials = ugi.getCredentials();
+ List<Text> secretKeys = credentials.getAllSecretKeys();
+ title("Secret keys");
+ if (!secretKeys.isEmpty()) {
+ for (Text secret: secretKeys) {
+ println("%s", secret);
+ }
+ } else {
+ println("(none)");
+ }
+
+ dumpTokens(ugi);
+ }
+
+ /**
+ * Validate the UGI: verify it is kerberized.
+ * @param messagePrefix message in exceptions
+ * @param user user to validate
+ */
+ private void validateUGI(String messagePrefix, UserGroupInformation user) {
+ failif(!user.hasKerberosCredentials(),
+ CAT_LOGIN, "%s: No kerberos credentials for %s", messagePrefix, user);
+ failif(user.getAuthenticationMethod() == null,
+ CAT_LOGIN, "%s: Null AuthenticationMethod for %s", messagePrefix, user);
+ }
+
+ /**
+ * A cursory look at the {@code kinit} executable.
+ * If it is an absolute path: it must exist with a size > 0.
+ * If it is just a command, it has to be on the path. There's no check
+ * for that -but the PATH is printed out.
+ */
+ private void validateKinitExecutable() {
+ String kinit = conf.getTrimmed(KERBEROS_KINIT_COMMAND, "");
+ if (!kinit.isEmpty()) {
+ File kinitPath = new File(kinit);
+ println("%s = %s", KERBEROS_KINIT_COMMAND, kinitPath);
+ if (kinitPath.isAbsolute()) {
+ failif(!kinitPath.exists(), CAT_KERBEROS,
+ "%s executable does not exist: %s",
+ KERBEROS_KINIT_COMMAND, kinitPath);
+ failif(!kinitPath.isFile(), CAT_KERBEROS,
+ "%s path does not refer to a file: %s",
+ KERBEROS_KINIT_COMMAND, kinitPath);
+ failif(kinitPath.length() == 0, CAT_KERBEROS,
+ "%s file is empty: %s",
+ KERBEROS_KINIT_COMMAND, kinitPath);
+ } else {
+ println("Executable %s is relative -must be on the PATH", kinit);
+ printEnv("PATH");
+ }
+ }
+ }
+
+ /**
+ * Try to load the SASL resolver.
+ * @param saslPropsResolverKey key for the SASL resolver
+ */
+ private void validateSasl(String saslPropsResolverKey) {
+ title("Resolving SASL property %s", saslPropsResolverKey);
+ String saslPropsResolver = conf.getTrimmed(saslPropsResolverKey);
+ try {
+ Class<? extends SaslPropertiesResolver> resolverClass = conf.getClass(
+ saslPropsResolverKey,
+ SaslPropertiesResolver.class, SaslPropertiesResolver.class);
+ println("Resolver is %s", resolverClass);
+ } catch (RuntimeException e) {
+ throw new KerberosDiagsFailure(CAT_SASL, e,
+ "Failed to load %s class %s",
+ saslPropsResolverKey, saslPropsResolver);
+ }
+ }
+
+ /**
+ * Validate any JAAS entry referenced in the {@link #SUN_SECURITY_JAAS_FILE}
+ * property.
+ */
+ private void validateJAAS() {
+ String jaasFilename = System.getProperty(SUN_SECURITY_JAAS_FILE);
+ if (jaasFilename != null) {
+ title("JAAS");
+ File jaasFile = new File(jaasFilename);
+ println("JAAS file is defined in %s: %s",
+ SUN_SECURITY_JAAS_FILE, jaasFile);
+ failif(!jaasFile.exists(), CAT_JAAS,
+ "JAAS file does not exist: %s", jaasFile);
+ failif(!jaasFile.isFile(), CAT_JAAS,
+ "Specified JAAS file is not a file: %s", jaasFile);
+ }
+ }
+
+ /**
+ * Dump all tokens of a user
+ * @param user user
+ */
+ public void dumpTokens(UserGroupInformation user) {
+ Collection<Token<? extends TokenIdentifier>> tokens
+ = user.getCredentials().getAllTokens();
+ title("Token Count: %d", tokens.size());
+ for (Token<? extends TokenIdentifier> token : tokens) {
+ println("Token %s", token.getKind());
+ }
+ }
+
+ /**
+ * Set the System property to true; return the old value for caching
+ * @param sysprop property
+ * @return the previous value
+ */
+ private boolean getAndSet(String sysprop) {
+ boolean old = Boolean.getBoolean(sysprop);
+ System.setProperty(sysprop, "true");
+ return old;
+ }
+
+ /**
+ * Flush all active output channels, including {@Code System.err},
+ * so as to stay in sync with any JRE log messages.
+ */
+ private void flush() {
+ if (out != null) {
+ out.flush();
+ } else {
+ System.out.flush();
+ }
+ System.err.flush();
+ }
+
+ /**
+ * Format and print a line of output.
+ * This goes to any output file, or
+ * is logged at info. The output is flushed before and after, to
+ * try and stay in sync with JRE logging.
+ * @param format format string
+ * @param args any arguments
+ */
+ @VisibleForTesting
+ public void println(String format, Object... args) {
+ println(format(format, args));
+ }
+
+ /**
+ * Print a line of output. This goes to any output file, or
+ * is logged at info. The output is flushed before and after, to
+ * try and stay in sync with JRE logging.
+ * @param msg message string
+ */
+ @VisibleForTesting
+ private void println(String msg) {
+ flush();
+ if (out != null) {
+ out.println(msg);
+ } else {
+ LOG.info(msg);
+ }
+ flush();
+ }
+
+ /**
+ * Print a title entry
+ * @param format format string
+ * @param args any arguments
+ */
+ private void title(String format, Object... args) {
+ println("");
+ println("");
+ String msg = "== " + format(format, args) + " ==";
+ println(msg);
+ println("");
+ }
+
+ /**
+ * Print a system property, or {@link #UNSET} if unset.
+ * @param property property to print
+ */
+ private void printSysprop(String property) {
+ println("%s = \"%s\"", property,
+ System.getProperty(property, UNSET));
+ }
+
+ /**
+ * Print a configuration option, or {@link #UNSET} if unset.
+ * @param option option to print
+ */
+ private void printConfOpt(String option) {
+ println("%s = \"%s\"", option, conf.get(option, UNSET));
+ }
+
+ /**
+ * Print an environment variable's name and value; printing
+ * {@link #UNSET} if it is not set
+ * @param variable environment variable
+ */
+ private void printEnv(String variable) {
+ String env = System.getenv(variable);
+ println("%s = \"%s\"", variable, env != null ? env : UNSET);
+ }
+
+ /**
+ * Dump any file to standard out; add a trailing newline
+ * @param file file to dump
+ * @throws IOException IO problems
+ */
+ public void dump(File file) throws IOException {
+ try (FileInputStream in = new FileInputStream(file)) {
+ for (String line : IOUtils.readLines(in)) {
+ println("%s", line);
+ }
+ }
+ println("");
+ }
+
+ /**
+ * Format and raise a failure
+ *
+ * @param category category for exception
+ * @param message string formatting message
+ * @param args any arguments for the formatting
+ * @throws KerberosDiagsFailure containing the formatted text
+ */
+ private void fail(String category, String message, Object... args)
+ throws KerberosDiagsFailure {
+ throw new KerberosDiagsFailure(category, message, args);
+ }
+
+ /**
+ * Conditional failure with string formatted arguments
+ * @param condition failure condition
+ * @param category category for exception
+ * @param message string formatting message
+ * @param args any arguments for the formatting
+ * @throws KerberosDiagsFailure containing the formatted text
+ * if the condition was met
+ */
+ private void failif(boolean condition,
+ String category,
+ String message,
+ Object... args)
+ throws KerberosDiagsFailure {
+ if (condition) {
+ fail(category, message, args);
+ }
+ }
+
+ /**
+ * Format a string, treating a call where there are no varags values
+ * as a string to pass through unformatted.
+ * @param message message, which is either a format string + args, or
+ * a general string
+ * @param args argument array
+ * @return a string for printing.
+ */
+ public static String format(String message, Object... args) {
+ if (args.length == 0) {
+ return message;
+ } else {
+ return String.format(message, args);
+ }
+ }
+
+ /**
+ * Diagnostics failures return the exit code 41, "unauthorized".
+ *
+ * They have a category, initially for testing: the category can be
+ * validated without having to match on the entire string.
+ */
+ public static class KerberosDiagsFailure extends ExitUtil.ExitException {
+ private final String category;
+
+ public KerberosDiagsFailure(String category, String message) {
+ super(41, category + ": " + message);
+ this.category = category;
+ }
+
+ public KerberosDiagsFailure(String category, String message, Object... args) {
+ this(category, format(message, args));
+ }
+
+ public KerberosDiagsFailure(String category, Throwable throwable,
+ String message, Object... args) {
+ this(category, message, args);
+ initCause(throwable);
+ }
+
+ public String getCategory() {
+ return category;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/d8cab88d/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/Slider.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/Slider.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/Slider.java
new file mode 100644
index 0000000..5fc8618
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-slider/hadoop-yarn-slider-core/src/main/java/org/apache/slider/Slider.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+package org.apache.slider;
+
+import org.apache.slider.client.SliderClient;
+import org.apache.slider.core.main.ServiceLauncher;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * This is just the entry point class
+ */
+public class Slider extends SliderClient {
+
+
+ public static final String SERVICE_CLASSNAME = "org.apache.slider.Slider";
+
+ /**
+ * This is the main entry point for the service launcher.
+ * @param args command line arguments.
+ */
+ public static void main(String[] args) {
+
+ //turn the args to a list
+ List<String> argsList = Arrays.asList(args);
+ //create a new list, as the ArrayList type doesn't push() on an insert
+ List<String> extendedArgs = new ArrayList<String>(argsList);
+ //insert the service name
+ extendedArgs.add(0, SERVICE_CLASSNAME);
+ //now have the service launcher do its work
+ ServiceLauncher.serviceMain(extendedArgs);
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org