1 /*
2 * Copyright (c) 2021 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 #include "single_ver_syncer.h"
16
17 #include "db_common.h"
18 #include "single_ver_sync_engine.h"
19
20 namespace DistributedDB {
RemoteDataChanged(const std::string & device)21 void SingleVerSyncer::RemoteDataChanged(const std::string &device)
22 {
23 LOGI("[SingleVerSyncer] device online dev %s", STR_MASK(device));
24 // while remote db is online again, need to do abilitySync
25 static_cast<SingleVerSyncEngine *>(syncEngine_)->SetIsNeedResetAbilitySync(device, true);
26 }
27
RemoteDeviceOffline(const std::string & device)28 void SingleVerSyncer::RemoteDeviceOffline(const std::string &device)
29 {
30 LOGI("[SingleVerRelationalSyncer] device offline dev %s", STR_MASK(device));
31 std::string userId = syncInterface_->GetDbProperties().GetStringProp(KvDBProperties::USER_ID, "");
32 std::string appId = syncInterface_->GetDbProperties().GetStringProp(KvDBProperties::APP_ID, "");
33 std::string storeId = syncInterface_->GetDbProperties().GetStringProp(KvDBProperties::STORE_ID, "");
34 RuntimeContext::GetInstance()->NotifyDatabaseStatusChange(userId, appId, storeId, device, false);
35 RefObject::IncObjRef(syncEngine_);
36 static_cast<SingleVerSyncEngine *>(syncEngine_)->OfflineHandleByDevice(device);
37 RefObject::DecObjRef(syncEngine_);
38 }
39
EraseDeviceWaterMark(const std::string & deviceId,bool isNeedHash)40 int SingleVerSyncer::EraseDeviceWaterMark(const std::string &deviceId, bool isNeedHash)
41 {
42 return EraseDeviceWaterMark(deviceId, isNeedHash, "");
43 }
44
EraseDeviceWaterMark(const std::string & deviceId,bool isNeedHash,const std::string & tableName)45 int SingleVerSyncer::EraseDeviceWaterMark(const std::string &deviceId, bool isNeedHash,
46 const std::string &tableName)
47 {
48 if (metadata_ == nullptr) {
49 return -E_NOT_INIT;
50 }
51 return metadata_->EraseDeviceWaterMark(deviceId, isNeedHash, tableName);
52 }
53
SetStaleDataWipePolicy(WipePolicy policy)54 int SingleVerSyncer::SetStaleDataWipePolicy(WipePolicy policy)
55 {
56 std::lock_guard<std::mutex> lock(syncerLock_);
57 if (closing_) {
58 LOGE("[Syncer] Syncer is closing, return!");
59 return -E_BUSY;
60 }
61 if (syncEngine_ == nullptr) {
62 return -E_NOT_INIT;
63 }
64 int errCode = E_OK;
65 switch (policy) {
66 case RETAIN_STALE_DATA:
67 static_cast<SingleVerSyncEngine *>(syncEngine_)->EnableClearRemoteStaleData(false);
68 break;
69 case WIPE_STALE_DATA:
70 static_cast<SingleVerSyncEngine *>(syncEngine_)->EnableClearRemoteStaleData(true);
71 break;
72 default:
73 errCode = -E_NOT_SUPPORT;
74 break;
75 }
76 return errCode;
77 }
78
CreateSyncEngine()79 ISyncEngine *SingleVerSyncer::CreateSyncEngine()
80 {
81 return new (std::nothrow) SingleVerSyncEngine();
82 }
83 }
84