@Override public void serializeStateData(final OutputStream stream) throws IOException { super.serializeStateData(stream); MasterProcedureProtos.ModifyColumnFamilyStateData.Builder modifyCFMsg = MasterProcedureProtos.ModifyColumnFamilyStateData.newBuilder() .setUserInfo(MasterProcedureUtil.toProtoUserInfo(user)) .setTableName(ProtobufUtil.toProtoTableName(tableName)) .setColumnfamilySchema(ProtobufUtil.convertToColumnFamilySchema(cfDescriptor)); if (unmodifiedHTableDescriptor != null) { modifyCFMsg.setUnmodifiedTableSchema( ProtobufUtil.convertToTableSchema(unmodifiedHTableDescriptor)); } modifyCFMsg.build().writeDelimitedTo(stream); }
/* * In case of rolling-upgrade, we try to read all the formats and build * the snapshot with the latest format. */ private void convertToV2SingleManifest() throws IOException { // Try to load v1 and v2 regions List<SnapshotRegionManifest> v1Regions, v2Regions; ThreadPoolExecutor tpool = createExecutor("SnapshotManifestLoader"); try { v1Regions = SnapshotManifestV1.loadRegionManifests(conf, tpool, fs, workingDir, desc); v2Regions = SnapshotManifestV2.loadRegionManifests(conf, tpool, fs, workingDir, desc); } finally { tpool.shutdown(); } SnapshotDataManifest.Builder dataManifestBuilder = SnapshotDataManifest.newBuilder(); dataManifestBuilder.setTableSchema(ProtobufUtil.convertToTableSchema(htd)); if (v1Regions != null && v1Regions.size() > 0) { dataManifestBuilder.addAllRegionManifests(v1Regions); } if (v2Regions != null && v2Regions.size() > 0) { dataManifestBuilder.addAllRegionManifests(v2Regions); } // Write the v2 Data Manifest. // Once the data-manifest is written, the snapshot can be considered complete. // Currently snapshots are written in a "temporary" directory and later // moved to the "complated" snapshot directory. SnapshotDataManifest dataManifest = dataManifestBuilder.build(); writeDataManifest(dataManifest); this.regionManifests = dataManifest.getRegionManifestsList(); // Remove the region manifests. Everything is now in the data-manifest. // The delete operation is "relaxed", unless we get an exception we keep going. // The extra files in the snapshot directory will not give any problem, // since they have the same content as the data manifest, and even by re-reading // them we will get the same information. if (v1Regions != null && v1Regions.size() > 0) { for (SnapshotRegionManifest regionManifest : v1Regions) { SnapshotManifestV1.deleteRegionManifest(fs, workingDir, regionManifest); } } if (v2Regions != null && v2Regions.size() > 0) { for (SnapshotRegionManifest regionManifest : v2Regions) { SnapshotManifestV2.deleteRegionManifest(fs, workingDir, regionManifest); } } }