• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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