You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/apis/migration-api-overview.md
+44-12Lines changed: 44 additions & 12 deletions
Original file line number
Diff line number
Diff line change
@@ -48,7 +48,7 @@ The required permissions are as follows in the Azure Storage API:
48
48
SharedAccessBlobPermissions.List)
49
49
```
50
50
51
-
**Note:** The change to enforce Read and List permissions on the SAS token is coming in a future build, and until then will be not be enforced, however it is best practice to use these values.
51
+
**Note:** The change to enforce Read and List permissions on the SAS token is coming in a future build. Until then it will not be enforced. However, it is a best practice to use these values.
52
52
53
53
All files in the container must have at least a single snapshot applied to them to ensure that no file modification can occur from the customer during import. Any file that does not have a snapshot will be skipped during import and an error thrown, although the job will attempt to continue to import. The import pipeline will use the latest snapshot of the file available at the time of import. The following is an example of code that might be used to create a snapshot on a file after it is uploaded to Azure Blob Storage:
54
54
@@ -59,7 +59,7 @@ blob.CreateSnapshot();
59
59
```
60
60
61
61
> [!NOTE]
62
-
> The change to require and use latest SnapShots on all files is coming in a future build, and until then will be ignored.
62
+
> The change to require and use the latest SnapShots on all files is coming in a future build, and until then will be ignored.
63
63
64
64
##### azureContainerManifestUri
65
65
@@ -133,8 +133,8 @@ SPMigrationJobState is an enumeration that tracks possible major states in the i
133
133
|**Member name**|**Description**|
134
134
|:-----|:-----|
135
135
|None |Migration job is currently unknown to the queue, either through completion and removal, or invalid job identifier. Value=0.|
136
-
|Queued |Migration job is currently known by the queue, and not being processed. Value=2.|
137
-
|Processing |Migration job is currently known by the queue, and is being actively processed. Value=4.|
136
+
|Queued |Migration job is currently known by the queue and not being processed. Value=2.|
137
+
|Processing |Migration job is currently known by the queue and is being actively processed. Value=4.|
138
138
139
139
## Import Package Structure
140
140
@@ -153,9 +153,9 @@ Package structure is based on a constrained version of the Content Deployment pa
153
153
154
154
### Content structure
155
155
156
-
File content that is referenced within the manifest of the package structure must be stored in either a flat or hierarchical structure within the Azure Blob Store Container defined by the CreateMigrationJob’s `azureContainerSourceUri` parameter. For example import packages generated form a legacy version export will not be hierarchical, and will instead have all files stored at the root level with a pattern like ########.dat where the # symbols are hexadecimal characters starting at 0 and no file names are repeated within a package. Alternately, a package generated from a file share can have the source folder hierarchy and file names preserved in the same hierarchy.
156
+
File content that is referenced within the manifest of the package structure must be stored in either a flat or hierarchical structure within the Azure Blob Store Container defined by the CreateMigrationJob’s `azureContainerSourceUri` parameter. For example, import packages generated form a legacy version export will not be hierarchical, and will instead have all files stored at the root level with a pattern like ########.dat where the # symbols are hexadecimal characters starting at 0 and no file names are repeated within a package. Alternately, a package generated from a file share can have the source folder hierarchy and file names preserved in the same hierarchy.
157
157
158
-
The main requirement for the structure is that the FileValue references in the **Manifest.XML** file must refer to the exact name and physical hierarchy that the content is stored in within the Azure Blob Store ___location for import. The destination file names and folder hierarchy from the import operation are not directly related to the physical naming and hierarchy, and are instead defined through the **Manifest.XML** file.
158
+
The main requirement for the structure is that the FileValue references in the **Manifest.XML** file must refer to the exact name and physical hierarchy that the content is stored in within the Azure Blob Store ___location for import. The destination file names and folder hierarchy from the import operation are not directly related to the physical naming and hierarchy and are instead defined through the **Manifest.XML** file.
159
159
160
160
### ExportSettings.XML
161
161
@@ -177,7 +177,7 @@ The **Manifest.XML** is the primary descriptor for metadata within the package,
177
177
178
178
The main requirements for **Manifest.XML** to be possible to successfully import through the pipeline is that the Web Id and Document Library ID/List ID be consistent with the target ___location. If a Web ID is used which doesn’t match the target ___location, errors will occur because the parent web for the import operation cannot be found.
179
179
180
-
Likewise an incorrect Document Library ID/List ID will prevent the importation into the target Document Library or List. IDs should never be reused within the same site collection, so same packages should not be imported to the same target site collection regardless of the destination web.
180
+
Likewise, an incorrect Document Library ID/List ID will prevent the importation into the target Document Library or List. IDs should never be reused within the same site collection, so same packages should not be imported to the same target site collection regardless of the destination web.
181
181
182
182
For individual files and folders within the document library or list, their identifiers should be consistent between import events to the same ___location. Specifically, performing an import of a package generated form a file share would initially require generating new GUIDs for each file and folder, along with matching GUIDs for the list items that represent them. Therefore, performing a second import against the same target using the same package would keep the same IDs, but performing a second import against the same target using a new package for the same content would result in ID conflicts and import errors for all items in conflict.
The **UserGroupMap.XML** file is expected to be at the root of the Azure Blob Store Container defined by the CreateMigrationJob’s `azureContainerManifestUri` parameter. This required file is validated using the constrained **DeploymentUserGroupMap.XSD**, which has no change from current published full 2013 package schema.
231
231
232
-
The **UserGroupMap.XML** file may not contain any User or Group entries, but doing so will prevent author or security information from being populated during import and warnings will be logged in this case. Login and SID values for users must be either adjusted to match the values in SharePoint Online, or if the account no longer should exist can be listed as `IsDeleted = “true”` to prevent lookup failures and additional slowdown during the import operation.
232
+
The **UserGroupMap.XML** file may not contain any User or Group entries but doing so will prevent author or security information from being populated during import and warnings will be logged in this case. Login and SID values for users must be either adjusted to match the values in SharePoint Online, or if the account no longer should exist can be listed as `IsDeleted = “true”` to prevent lookup failures and additional slowdown during the import operation.
233
233
234
234
### ViewFormsList.XML
235
235
@@ -245,11 +245,43 @@ Upon completion, these logs will be copied to the `azureContainerManifestUri` lo
245
245
246
246
Several log types can be included such as the full import log, along with warning and error files that contain only the subset of import warnings or errors respectively. Log files have unique `datetime` and `job id` stamps to allow each attempted import event to have a unique log for better debugging purposes.
247
247
248
+
## Changes for those using the "Ship Disk" option
249
+
250
+
To use the Migration API, you must have a temporary storage container in Azure. When uploading files into the temporary storage, an MD5 is required as a property on every file. However, when shipping the data on hard drives this MD5 property doesn’t get assigned automatically. As a work around, we have adapted the Migration API to allow the MD5 to be passed for every file as part of the manifest. This also applies for IV values when encrypting the data.
251
+
252
+
Since the MD5 is generated at the source instead of at the upload time in Azure, Microsoft can confirm the integrity of the file directly against the source MD5.
253
+
254
+
### What is stored in those Azure Blob Containers?
255
+
256
+
The Migration API requires the Azure Container for content passing and also for log and queue reporting. It can be split down as a summary as follows:<br>
257
+
258
+
|**Content**|**Manifest**|
259
+
|:-----|:-----|
260
+
|Files and folders|XML files|
261
+
262
+
263
+
There are two new optional parameters in manifest.xml:
264
+
265
+
- MD5Hash <br>
266
+
- InitializationVector
267
+
268
+
269
+
#### Preparing the package
270
+
The method for calling the migration job doesn’t change; only the package generation needs to be changed.
271
+
272
+
In the Manifest container one file is named Manifest.xml. There are 2 optional attributes added to the file node: *MD5Hash* and *InitializationVector*. <br>
Even if the API support 15GB files, we recommend package sizes of up to 250 MB OR 250 items (depending which one comes first). If you have one large files larger than that recommended size limit you should send it in its own package. Same goes for versions, each versions counts against the size limit and item count. Additionally all the versions of a file should be in the same package.
284
+
Even if the API support 15GB files, we recommend package sizes of up to 250 MB OR 250 items (depending which one comes first). If you have one large files larger than that recommended size limit you should send it in its own package. The same applies to versions; each version counts against the size limit and item count. Additionally all the versions of a file should be in the same package.
253
285
254
286
### File size
255
287
@@ -267,7 +299,7 @@ Import packages can have references to multiple versions of a file, major and mi
267
299
268
300
The identifiers used within the import package explicitly are used during import to identify content. This allows preservation of existing identifiers for document library contents from a source environment. However, it also imposes a complexity during import package creation or transformation that mandates that the package explicitly reference the target web and list identifiers. Content type identifiers, file/folder item GUIDs, and list item integer identifiers are all preserved during import. If incorrect identifiers are specified in the package, import will fail.
269
301
270
-
Additionally due to identifier preservation, import events can potentially be done in successive iterations using different packages, allowing items to potentially move in ___location if their identifiers have not changed.
302
+
Additionally, due to identifier preservation, import events can potentially be done in successive iterations using different packages, allowing items to potentially move in ___location if their identifiers have not changed.
271
303
272
304
<aname="OverwriteAPI"> </a>
273
305
@@ -289,11 +321,11 @@ To prevent unintended file modification of the source blobs, the import pipeline
289
321
290
322
### Security and encryption
291
323
292
-
The import pipeline is using Azure Blob Storage security model as is. This means we will not do any special treatment for those azure containers that would differentiate from any other azure containers. Additionally the import pipeline currently does not accept encryption keys for content from the customer. Any encrypted content will be treated as opaque files that SharePoint may list, but be unable to index, the same as if encrypted files were uploaded through the UI to the environment.
324
+
The import pipeline is using Azure Blob Storage security model as is. This means we will not do any special treatment for those azure containers that would differentiate from any other azure containers. Additionally, the import pipeline currently does not accept encryption keys for content from the customer. Any encrypted content will be treated as opaque files that SharePoint may list, but be unable to index, the same as if encrypted files were uploaded through the UI to the environment.
293
325
294
326
### Events and event handlers
295
327
296
-
The import pipeline allows event handlers to be referenced on list items, but doesn’t allow defining event handlers at the list level at this time. The import pipeline does not fire events as items are imported, so existing event handlers will not fire due to the import event.
328
+
The import pipeline allows event handlers to be referenced on list items but doesn’t allow defining event handlers at the list level at this time. The import pipeline does not fire events as items are imported, so existing event handlers will not fire due to the import event.
0 commit comments