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 "kv_virtual_device.h"
16
17 #include "log_print.h"
18 #include "virtual_multi_ver_sync_db_interface.h"
19
20 namespace DistributedDB {
KvVirtualDevice(const std::string & deviceId)21 KvVirtualDevice::KvVirtualDevice(const std::string &deviceId) : GenericVirtualDevice(deviceId)
22 {
23 }
24
~KvVirtualDevice()25 KvVirtualDevice::~KvVirtualDevice()
26 {
27 }
28
GetData(const Key & key,VirtualDataItem & item)29 int KvVirtualDevice::GetData(const Key &key, VirtualDataItem &item)
30 {
31 VirtualSingleVerSyncDBInterface *syncAble = static_cast<VirtualSingleVerSyncDBInterface *>(storage_);
32 return syncAble->GetSyncData(key, item);
33 }
34
GetData(const Key & key,Value & value)35 int KvVirtualDevice::GetData(const Key &key, Value &value)
36 {
37 VirtualMultiVerSyncDBInterface *syncInterface = static_cast<VirtualMultiVerSyncDBInterface *>(storage_);
38 return syncInterface->GetData(key, value);
39 }
40
PutData(const Key & key,const Value & value,const Timestamp & time,int flag)41 int KvVirtualDevice::PutData(const Key &key, const Value &value, const Timestamp &time, int flag)
42 {
43 VirtualSingleVerSyncDBInterface *syncAble = static_cast<VirtualSingleVerSyncDBInterface *>(storage_);
44 LOGI("dev %s put data time %" PRIu64, deviceId_.c_str(), time);
45 return syncAble->PutData(key, value, time, flag);
46 }
47
PutData(const Key & key,const Value & value)48 int KvVirtualDevice::PutData(const Key &key, const Value &value)
49 {
50 VirtualMultiVerSyncDBInterface *syncInterface = static_cast<VirtualMultiVerSyncDBInterface *>(storage_);
51 return syncInterface->PutData(key, value);
52 }
53
DeleteData(const Key & key)54 int KvVirtualDevice::DeleteData(const Key &key)
55 {
56 VirtualMultiVerSyncDBInterface *syncInterface = static_cast<VirtualMultiVerSyncDBInterface *>(storage_);
57 return syncInterface->DeleteData(key);
58 }
59
StartTransaction()60 int KvVirtualDevice::StartTransaction()
61 {
62 VirtualMultiVerSyncDBInterface *syncInterface = static_cast<VirtualMultiVerSyncDBInterface *>(storage_);
63 return syncInterface->StartTransaction();
64 }
65
Commit()66 int KvVirtualDevice::Commit()
67 {
68 VirtualMultiVerSyncDBInterface *syncInterface = static_cast<VirtualMultiVerSyncDBInterface *>(storage_);
69 return syncInterface->Commit();
70 }
71
SetSaveDataDelayTime(uint64_t milliDelayTime)72 void KvVirtualDevice::SetSaveDataDelayTime(uint64_t milliDelayTime)
73 {
74 VirtualSingleVerSyncDBInterface *syncInterface = static_cast<VirtualSingleVerSyncDBInterface *>(storage_);
75 syncInterface->SetSaveDataDelayTime(milliDelayTime);
76 }
77
DelayGetSyncData(uint64_t milliDelayTime)78 void KvVirtualDevice::DelayGetSyncData(uint64_t milliDelayTime)
79 {
80 VirtualSingleVerSyncDBInterface *syncInterface = static_cast<VirtualSingleVerSyncDBInterface *>(storage_);
81 syncInterface->DelayGetSyncData(milliDelayTime);
82 }
83
SetGetDataErrCode(int whichTime,int errCode,bool isGetDataControl)84 void KvVirtualDevice::SetGetDataErrCode(int whichTime, int errCode, bool isGetDataControl)
85 {
86 VirtualSingleVerSyncDBInterface *syncInterface = static_cast<VirtualSingleVerSyncDBInterface *>(storage_);
87 syncInterface->SetGetDataErrCode(whichTime, errCode, isGetDataControl);
88 }
89
ResetDataControl()90 void KvVirtualDevice::ResetDataControl()
91 {
92 VirtualSingleVerSyncDBInterface *syncInterface = static_cast<VirtualSingleVerSyncDBInterface *>(storage_);
93 syncInterface->ResetDataControl();
94 }
95
Subscribe(QuerySyncObject query,bool wait,int id)96 int KvVirtualDevice::Subscribe(QuerySyncObject query, bool wait, int id)
97 {
98 auto operation = new (std::nothrow) SyncOperation(id, {remoteDeviceId_}, SUBSCRIBE_QUERY, nullptr, wait);
99 if (operation == nullptr) {
100 return -E_OUT_OF_MEMORY;
101 }
102 operation->Initialize();
103 operation->SetOnSyncFinished([operation](int id) {
104 operation->NotifyIfNeed();
105 });
106 operation->SetQuery(query);
107 context_->AddSyncOperation(operation);
108 operation->WaitIfNeed();
109 RefObject::KillAndDecObjRef(operation);
110 return E_OK;
111 }
112
UnSubscribe(QuerySyncObject query,bool wait,int id)113 int KvVirtualDevice::UnSubscribe(QuerySyncObject query, bool wait, int id)
114 {
115 auto operation = new (std::nothrow) SyncOperation(id, {remoteDeviceId_}, UNSUBSCRIBE_QUERY, nullptr, wait);
116 if (operation == nullptr) {
117 return -E_OUT_OF_MEMORY;
118 }
119 operation->Initialize();
120 operation->SetOnSyncFinished([operation](int id) {
121 operation->NotifyIfNeed();
122 });
123 operation->SetQuery(query);
124 context_->AddSyncOperation(operation);
125 operation->WaitIfNeed();
126 RefObject::KillAndDecObjRef(operation);
127 return E_OK;
128 }
129 } // namespace DistributedDB