1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #ifndef CLOUD_SYNC_UTILS_H 16 #define CLOUD_SYNC_UTILS_H 17 18 #include <cstdint> 19 #include <string> 20 #include "cloud/cloud_store_types.h" 21 #include "cloud_syncer.h" 22 #include "icloud_sync_storage_interface.h" 23 24 namespace DistributedDB { 25 class CloudSyncUtils { 26 public: 27 static constexpr const int GID_INDEX = 0; 28 static constexpr const int PREFIX_INDEX = 1; 29 static constexpr const int STRATEGY_INDEX = 2; 30 static constexpr const int ASSETS_INDEX = 3; 31 static constexpr const int HASH_KEY_INDEX = 4; 32 static constexpr const int PRIMARY_KEY_INDEX = 5; 33 static constexpr const int TIMESTAMP_INDEX = 6; 34 35 static int GetCloudPkVals(const VBucket &datum, const std::vector<std::string> &pkColNames, int64_t dataKey, 36 std::vector<Type> &cloudPkVals); 37 38 static ChangeType OpTypeToChangeType(OpType strategy); 39 40 static bool IsSinglePrimaryKey(const std::vector<std::string> &pKColNames); 41 42 static void RemoveDataExceptExtendInfo(VBucket &datum, const std::vector<std::string> &pkColNames); 43 44 static AssetOpType StatusToFlag(AssetStatus status); 45 46 static void StatusToFlagForAsset(Asset &asset); 47 48 static void StatusToFlagForAssets(Assets &assets); 49 50 static void StatusToFlagForAssetsInRecord(const std::vector<Field> &fields, VBucket &record); 51 52 static bool IsChangeDataEmpty(const ChangedData &changedData); 53 54 static bool EqualInMsLevel(const Timestamp cmp, const Timestamp beCmp); 55 56 static bool NeedSaveData(const LogInfo &localLogInfo, const LogInfo &cloudLogInfo); 57 58 static int CheckParamValid(const std::vector<DeviceID> &devices, SyncMode mode); 59 60 static LogInfo GetCloudLogInfo(VBucket &datum); 61 62 static int SaveChangedDataByType(const VBucket &datum, ChangedData &changedData, const DataInfoWithLog &localInfo, 63 ChangeType type); 64 65 static int CheckCloudSyncDataValid(const CloudSyncData &uploadData, const std::string &tableName, int64_t count); 66 67 static void ClearCloudSyncData(CloudSyncData &uploadData); 68 69 static int GetWaterMarkAndUpdateTime(std::vector<VBucket>& extend, Timestamp &waterMark); 70 71 static bool CheckCloudSyncDataEmpty(const CloudSyncData &uploadData); 72 73 static void ModifyCloudDataTime(VBucket &data); 74 75 static int UpdateExtendTime(CloudSyncData &uploadData, const int64_t &count, uint64_t taskId, 76 Timestamp &waterMark); 77 78 static void UpdateLocalCache(OpType opType, const LogInfo &cloudInfo, 79 const LogInfo &localInfo, std::map<std::string, LogInfo> &localLogInfoCache); 80 81 static int SaveChangedData(ICloudSyncer::SyncParam ¶m, size_t dataIndex, const ICloudSyncer::DataInfo &dataInfo, 82 std::vector<std::pair<Key, size_t>> &deletedList); 83 84 static void ClearWithoutData(ICloudSyncer::SyncParam ¶m); 85 86 static bool IsSkipAssetsMissingRecord(const std::vector<VBucket> &extend); 87 88 static int FillAssetIdToAssets(CloudSyncBatch &data, int errorCode, const CloudWaterType &type); 89 90 static int FillAssetIdToAssetData(const Type &extend, Type &assetData); 91 92 static void FillAssetIdToAssetsData(const Assets &extend, Assets &assets); 93 94 static bool CheckIfContainsInsertAssets(const Type &assetData); 95 96 static void UpdateAssetsFlag(CloudSyncData &uploadData); 97 98 static OpType CalOpType(ICloudSyncer::SyncParam ¶m, size_t dataIndex); 99 100 static CloudSyncer::CloudTaskInfo InitCompensatedSyncTaskInfo(); 101 102 static CloudSyncer::CloudTaskInfo InitCompensatedSyncTaskInfo(const CloudSyncOption &option, 103 const SyncProcessCallback &onProcess); 104 105 static CloudSyncer::CloudTaskInfo InitCompensatedSyncTaskInfo(const CloudSyncer::CloudTaskInfo &oriTaskInfo); 106 private: 107 static void InsertOrReplaceChangedDataByType(ChangeType type, std::vector<Type> &pkVal, 108 ChangedData &changedData); 109 }; 110 } 111 #endif // CLOUD_SYNC_UTILS_H 112