The last post detailed required server side processing to prepare a package for distribution to the Branch DP. Let's now take a look at what happens on the Branch DP to finally get the content copied to and ready for access by requesting clients.
The last step in server side Branch DP package processing is the creation of policy to notify the Branch DP there is work to do. This is where we start the processing for this entry. As we go through this discussion, bear in mind that the Branch DP is simply a component of the SCCM advanced client - so instructions to the Branch DP component come down to the system just like any setting would - through a policy retrieval cycle.
Before receiving policy for Branch DP processing it is assumed that the actual Branch DP functionality has been enabled (Branch DP's must be configured as site systems in order for them to be visible in the package DP list - in this post we assume the branch DP has already been enabled). It is easy to verify the Branch DP is enabled and ready to receive a package. Simply check the root\ccm\policy\machine\actualconfig WMI namespace. Look at the Instances list in the CCM_DistributionPoint namespace. If the system has been enabled as a Branch DP you will see an entry in the instance list called CCM_DistributionPoint.DummyKey=1.
For this post, we will assume that the Branch DP has been enabled previously. When the SCCM client hosting the Branch DP performs its normal polling cycle (default ever hour) it will pick up the policy change prepared by the server to notify the Branch DP that it has a package pending download. Once the policy has been downloaded to the client we will wait for the Branch DP agent policy cycle on the client to take place which will read the new policy in WMI and act to begin the download of the content from any available (meaning a DP that can be accessed and is not restricted due to protected boundaries) standard BITS enabled distribution point. This is a BITS download and will honor any BITS settings configured in the BITS section of the computer client agent. When the download begins a temp folder is created on the client to store the content (this folder is not accessible to a user of the system). If problems take place during download this folder will persist. Assuming all goes well and once download is complete a standard distribution folder will be visible on the client.
Branch DP processing is recorded in the PeerDPAgent and associated logs as follows
PeerDPAgent.logCPDPJobManager::OnPDPStatusTaskPDP Maintenance Message Body : <?xml version='1.0' ?><PDPScheduledMaintenance MessageType='PDPScheduledMaintenanceTask'> <PDPScheduledMaintenanceAction ActionType='Predefined'> <PDPScheduledMaintenanceActionID>{00000000-0000-0000-0000-000000000109} Branch DP Schedule Token</PDPScheduledMaintenanceActionID> <Description>PDP Scheduled Maintenance</Description> </PDPScheduledMaintenanceAction></PDPScheduledMaintenance >CPDPJobManager::OnMaintainContent Raising event:[SMS_CodePage(437), SMS_LocaleID(1033)]instance of PDPStartMaintenanceTaskAll{ ClientID = "GUID:EF0FBF55-0F42-4271-B742-BED81D895FA4"; DateTime = "20060725194148.144000+000"; MachineName = "STEVERACPEERDP1"; ProcessID = 2164; SiteCode = "TOP"; ThreadID = 3424;};Successfully submitted event to the Status Agent.Raising event:[SMS_CodePage(437), SMS_LocaleID(1033)]instance of PDPMaintenanceTaskList{ ClientID = "GUID:EF0FBF55-0F42-4271-B742-BED81D895FA4"; DateTime = "20060725194148.207000+000"; MachineName = "STEVERACPEERDP1"; PackageList = ""; ProcessID = 2164; SiteCode = "TOP";ThreadID = 3424;};Successfully submitted event to the Status Agent.Client is not in native mode, internet facing is not supported.CPDPJobManager::OnPolicyArrivedPDP_CreateJobDataCreated Peer DP job {12AC27D9-5D92-4677-8F15-05372686E060} for package TOP00004CPDPJob::EvaluateState Job is created and processing beginsCPDPJob::PreprocessJobDrive 'A:\' is not a fixed drive, ignoring. Enumerate drives to see what is availableDrive 'D:\' is not a fixed drive, ignoring.CPDPJob::CheckForPreStagedPkgChecking C:\SMSPKGC$\TOP00004 for prestaged TOP00004 package Check to see if package has been Package TOP00004 has not been prestaged manually copied to Branch DP. IfPackage TOP00004 in state 'Starting'. so we will use it.CPDPJob::EvaluateStateCPDPJob::StartNewJobCPDPJob::EvaluateDoNotDownloadFlagDrive 'A:\' is not a fixed drive, ignoring.CPDPJob::PrepareStagingDirTemp dowload Path: 'C:\PDPD4DF.tmp' Create our temporary download location for the packageDisconnected 0 users from directory C:\PDPD4DF.tmpTemp staging directory for package TOP00004 is C:\PDPD4DF.tmp CPDPJob::InvokeDownloadCalling DownloadContent, the type is 0Raising event:[SMS_CodePage(437), SMS_LocaleID(1033)]instance of PDPDownloadStartedEvent{ ClientID = "GUID:EF0FBF55-0F42-4271-B742-BED81D895FA4"; DateTime = "20060725194218.629000+000"; MachineName = "STEVERACPEERDP1"; PackageID = "TOP00004"; ProcessID = 2164; SiteCode = "TOP"; SourceVersion = 2; ThreadID = 1512;};Successfully submitted event to the Status Agent.Package TOP00004 in state 'Downloading'. Downloading the package - download is actuallyCPDPJob::EvaluateState handled by ContentTransferManager componentCPDPJob::ProcessProgressDownload complete for CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}, downloaded KB 67 ß---Flags the CTM ID and complete status GUID ID is the ID that will show up in ContentTransferManager logCPDPJob::DownloadCompleted and can be used to track progress with that component.Package TOP00004 in state 'DownloadComplete'. Download complete - package ready to use
ContentTransferManager.logStarting CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}. CTM Job GUID - link between current and PeerDPAgent logCCTMJob::EvaluateState(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}, State=Starting) Attempting to persist location request for PackageID='TOP00004' and PackageVersion='2'LSCreateRequestInWMIAttempting to create Location Request for PackageID='TOP00004' and Version='2' LocationServices requestSuccesfully created Location Request being createdPersisted location request In LSNapInitializeLocationFilter for request {B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}. LocationServicesIn CCCMNAPLocationHandler::IsSystemInQuarantineState. request IDSystem is not in quarantine state. Attempting to send Location Request for PackageID='TOP00004'LSCreateRequestMessageBody Client is not in native mode, internet facing is not supported.ContentLocationRequest : <ContentLocationRequest SchemaVersion="1.00"><Package ID="TOP00004" Version="2"/><AssignedSite SiteCode="TOP"/><ClientLocationInfo LocationType="SMSPackage" UseProtected="0" AllowCaching="0" BranchDPFlags="1" UseInternetDP="0"><ADSite Name="Default-First-Site-Name"/><IPAddresses><IPAddress SubnetAddress="0.0.0.0" Address="<obscured on purpose>"/><IPAddress SubnetAddress="<obscured on purpose>" Address="<obscured on purpse>"/><IPAddress SubnetAddress="0.0.0.0" Address="0.0.0.0"/><IPAddress SubnetAddress="2002:4135:4153:0000" Address="2002:4135:4153:0000:0000:0000:4135:4153"/></IPAddresses></ClientLocationInfo></ContentLocationRequest>Created and Sent Location Request '{B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}' for package TOP00004 LocationServices request ID - link between current and LocationServices logCTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF} entered phase CCM_DOWNLOADSTATUS_DOWNLOADING_DATAQueued location request '{B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}' for CTM job '{5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}'. Log entry showing link between the CTM job ID and LocationServices request ID We hand off to locationservices here.CCTMJob::EvaluateState(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}, State=RequestedLocations)Created CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF} for user S-1-5-18In CLSCallback::LocationUpdateExCTM dumping locations returned by Location Service: We have received data base from locationservicesSource: 'http://SMSServer/SMS_DP_SMSPKGC$/TOP00004/' Locality: Remote Version: 5430 Capability: <Capabilities SchemaVersion="1.0"/>Source: '\\SMSServer\SMSPKGC$\TOP00004\' Locality: Remote Version: 5430 Capability: <Capabilities SchemaVersion="1.0"/>CCTMJob::UpdateLocations({5AF7E2FA-77F4-42FD-9E9F-31C885477BBF})CTM_NotifyLocationUpdate CCTMJob::_PersistLocations CCTMJob::_DeleteLocations Persisted location 'http://SMSServer/SMS_DP_SMSPKGC$/TOP00004', Order 0, for CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}Persisted location 'file:\\SMSServer\SMSPKGC$\TOP00004', Order 1, for CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}Persisted locations for CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}:(REMOTE) http://SMSServer/SMS_DP_SMSPKGC$/TOP00004(REMOTE) file:\\SMSServer\SMSPKGC$\TOP00004 CCTMJob::_GetNextLocationIn CDataTransferService::CDataTransferServiceCTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF} (corresponding DTS job {19AAE742-DFC3-48DF-AE18-A07D5AD7EB8C}) started download from 'http://SMSServer/SMS_DP_SMSPKGC$/TOP00004'In CDataTransferService::~CDataTransferServiceCCTMJob::EvaluateState(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}, State=DownloadingData)CTM job {5AF7E2FA-77F4-42FD-9E9F-31C885477BBF} successfully completed.CCTMJob::EvaluateState(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}, State=Success)CCTMJob::EvaluateState(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}, State=Complete)CCTMJob::_Cleanup(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF})CCTMJob::_Cleanup(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}) - Cancelling LS job {B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}CCTMJob::_Cleanup(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}) - Cancelling DTS job {19AAE742-DFC3-48DF-AE18-A07D5AD7EB8C}In CDataTransferService::CDataTransferServicespDTS->CancelJob(id), HRESULT=80040215 (e:\buildall\nts\sms\framework\ccmctm\util.cpp,742)In CDataTransferService::~CDataTransferServiceCCTMJob::_Cleanup(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}) - Deleting persisted locations CCTMJob::_DeleteLocationsCCTMJob::_Cleanup(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF}) - Deleting persisted job CRemoveJobFromGlobalState::Execute CCTMJob::~CCTMJob(JobID={5AF7E2FA-77F4-42FD-9E9F-31C885477BBF})
LocationServices.logCreated filter for LS request {B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}. Locationservices gets request from ContentTransferManagerLSGetSiteCodeFromWMI LSGetSiteCodeFromWMI : Site code returned from WMI is <TOP> LSGetADSiteName Current AD site of machine is Default-First-Site-Name IPv6 entry points already initialized. DHCP entry points already initialized. Adapter {C53880AD-BE51-4DD1-9B8E-6A1DF78CD296} is DHCP enabled. Checking quarantine status.Adapter {7FD00A16-5286-4C84-BBFF-D2D7307C5EEF} is DHCP enabled. Checking quarantine status.dwRetVal, HRESULT=80070002 (e:\buildall\nts\sms\framework\ccmutillib\ccmiputil.cpp,379) Client is not in native mode, internet facing is not supported.sHost.length()!=0, HRESULT=80040215 Client is not in native mode, internet facing is not supported. LSGetSiteCodeFromWMI LSGetSiteCodeFromWMI : Site code returned from WMI is <TOP> LS Verifying message CLSReplyLocationsTask::Execute Processing Location reply message ContentLocationReply : <ContentLocationReply SchemaVersion="1.00"><Sites><Site><MPSite SiteCode="TOP" MasterSiteCode="TOP" SiteLocality="FALLBACK"/><LocationRecords><LocationRecord><SMBPath Name="\\SMSServer\SMSPKGC$\TOP00004\"/><URL Name="http://SMSServer/SMS_DP_SMSPKGC$/TOP00004/"/><ADSite Name="Default-First-Site-Name"/><IPSubnets><IPSubnet Address="172.29.8.0"/><IPSubnet Address=""/></IPSubnets><Metric Value=""/><Version>5430</Version><Capabilities SchemaVersion="1.0"/><ServerRemoteName>SMSServer</ServerRemoteName><DPType>SERVER</DPType></LocationRecord></LocationRecords></Site></Sites></ContentLocationReply> LSGetContentPoints Job requires both local and remote locationsHTTP download has been specified SMB download has been specified Request is for a PeerDP download LSGetADSiteName Current AD site of machine is Default-First-Site-Name IPv6 entry points already initialized. DHCP entry points already initialized. Adapter {C53880AD-BE51-4DD1-9B8E-6A1DF78CD296} is DHCP enabled. Checking quarantine status.Adapter {7FD00A16-5286-4C84-BBFF-D2D7307C5EEF} is DHCP enabled. Checking quarantine status. dwRetVal, HRESULT=80070002 (e:\buildall\nts\sms\framework\ccmutillib\ccmiputil.cpp,379) Invoking LSInvokeCallback with list of content locationsLSInvokeCallback In CLSCallback::CLSCallbackCalling back with the following distribution pointsDistribution Point='http://SMSServer/SMS_DP_SMSPKGC$/TOP00004/', Locality='REMOTE',DPType='SERVER', Version='5430', Capabilities='<Capabilities SchemaVersion="1.0"/>' LocationServices7/25/2006 2:42:18 PM 1192 (0x04A8)Distribution Point='\\SMSServer\SMSPKGC$\TOP00004\', Locality='REMOTE', DPType='SERVER',Version='5430', Capabilities='<Capabilities SchemaVersion="1.0"/>'In LSNapApplyLocationFilter for request {B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}.In CCCMNAPLocationHandler::FilterLocations. Filtering locations for request {B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}.In CCCMNAPLocationHandler::IsSystemInQuarantineState. Machine is not in quarantine. No need to filter. In CLSCallback::~CLSCallback Calling back with locations for location request {B246ADF4-F6E3-41A5-82F4-0F2C6387A35F} Returning locations to ContentTransferManager CCCMPkgLocation::CancelLocationRequest In LSNapDeleteLocationFilter for request {B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}In CCCMNAPLocationHandler::RemoveFilter. Attempting to cancel location filter for requestID={B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}Found matching filter for requestID={B246ADF4-F6E3-41A5-82F4-0F2C6387A35F}Reviewing WMI to see job details may also be helpful. All Branch DP jobs are stored in the root\ccm\PeerDPAgent namespace - an example is shown below.
It may also be helpful to review the actual policy pending download by the Branch DP. The screenshot below is from the policyspy tool.