Skip to content

Commit 5890ebd

Browse files
committed
add InMemoryBlobStore
1 parent afd4e41 commit 5890ebd

File tree

3 files changed

+59
-63
lines changed

3 files changed

+59
-63
lines changed

attic/InMemoryDataStore.jl

Lines changed: 0 additions & 61 deletions
This file was deleted.

src/DataBlobs/services/BlobStores.jl

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ addData!(dfg::AbstractDFG, blobstorekey::Symbol, label::Symbol, key::Symbol, blo
109109
kwargs...)
110110

111111
function addData!(dfg::AbstractDFG, blobstore::AbstractBlobStore, label::Symbol, key::Symbol,
112-
blob::Vector{UInt8}, timestamp=now(localzone()); description="", mimeType = "", id::UUID = uuid4(), hashfunction = sha256)
112+
blob::Vector{UInt8}, timestamp=now(localzone()); description="", mimeType = "application/octet-stream", id::UUID = uuid4(), hashfunction = sha256)
113113

114114

115115
entry = BlobStoreEntry(key, id, blobstore.key, bytes2hex(hashfunction(blob)),
@@ -196,9 +196,43 @@ end
196196
function deleteDataBlob!(store::FolderStore{T}, entry::BlobStoreEntry) where T
197197
blobfilename = joinpath(store.folder,"$(entry.id).dat")
198198
entryfilename = joinpath(store.folder,"$(entry.id).json")
199-
199+
200200
data = getDataBlob(store, entry)
201201
rm(blobfilename)
202202
rm(entryfilename)
203203
return data
204204
end
205+
206+
##==============================================================================
207+
## InMemoryBlobStore
208+
##==============================================================================
209+
export InMemoryBlobStore
210+
struct InMemoryBlobStore{T} <: AbstractBlobStore{T}
211+
key::Symbol
212+
blobs::Dict{UUID, T}
213+
end
214+
215+
InMemoryBlobStore{T}(storeKey::Symbol) where T = InMemoryBlobStore{Vector{UInt8}}(storeKey, Dict{UUID, T}())
216+
InMemoryBlobStore(storeKey::Symbol=:default_inmemory_store) = InMemoryBlobStore{Vector{UInt8}}(storeKey)
217+
218+
function getDataBlob(store::InMemoryBlobStore{T}, entry::BlobStoreEntry) where T
219+
return store.blobs[entry.id]
220+
end
221+
222+
function addDataBlob!(store::InMemoryBlobStore{T}, entry::BlobStoreEntry, data::T) where T
223+
if haskey(store.blobs, entry.id)
224+
error("Key '$(entry.id)' blob already exists.")
225+
end
226+
return store.blobs[entry.id] = data
227+
end
228+
229+
function updateDataBlob!(store::InMemoryBlobStore{T}, entry::BlobStoreEntry, data::T) where T
230+
if haskey(store.blobs, entry.id)
231+
@warn "Key '$(entry.id)' doesn't exist."
232+
end
233+
return store.blobs[entry.id] = data
234+
end
235+
236+
function deleteDataBlob!(store::InMemoryBlobStore{T}, entry::BlobStoreEntry) where T
237+
return pop!(store.blobs, entry.id)
238+
end

test/consol_DataEntryBlobTests.jl

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,29 @@ dfs = FolderStore("/tmp/defaultfolderstore")
9797
@test dfs.key == :default_folder_store
9898
@test dfs isa FolderStore{Vector{UInt8}}
9999

100+
##==============================================================================
101+
## InMemoryBlobStore
102+
##==============================================================================
103+
104+
# Create a data store and add it to DFG
105+
ds = InMemoryBlobStore()
106+
addBlobStore!(dfg, ds)
107+
108+
ade,adb = addData!(dfg, :default_inmemory_store, :x1, :random, dataset1)
109+
gde,gdb = getData(dfg, :x1, :random)
110+
dde,ddb = deleteData!(dfg, :x1, :random)
111+
112+
@test ade == gde == dde
113+
@test adb == gdb == ddb
114+
115+
ade2,adb2 = addData!(dfg, :x2, deepcopy(ade), dataset1)
116+
# ade3,adb3 = updateData!(dfg, :x2, deepcopy(ade), dataset1)
117+
118+
@test ade == ade2# == ade3
119+
@test adb == adb2# == adb3
120+
121+
deleteData!(dfg, :x2, :random)
122+
100123
##==============================================================================
101124
## Unimplemented store
102125
##==============================================================================

0 commit comments

Comments
 (0)