flok 0.0.95 → 0.0.96
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/kern/services/vm.rb +18 -0
- data/docs/services/vm.md +3 -1
- data/lib/flok/version.rb +1 -1
- data/spec/kern/vm_service_functional_spec.rb +52 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 723b7ee6d523973fb556dd8a17fd5f83affcdf2b
|
4
|
+
data.tar.gz: ffa8588b4d24dc0ddbb6f4175123cac51321d4bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3f80f965f0d08132aa33504a9cab237e0ddab6939051d7fb8a66ed74144c6613286d7e372adba90d8066b3e44ecd1128fbae10615edc3fcd1b7237382b399d06
|
7
|
+
data.tar.gz: c387613fb58f47c1f5addb74c37eabf58377ba50e598c75bf18260972968e0938b0656c0a2dc3fc042d6d7a2f0ba6a0644c48c5c8803e4c568a6534c9cc6cfef
|
data/app/kern/services/vm.rb
CHANGED
@@ -265,6 +265,24 @@ service :vm do
|
|
265
265
|
}
|
266
266
|
vm_reindex_page(page);
|
267
267
|
}
|
268
|
+
|
269
|
+
function vm_set_entry_with_id_key_val(page, eid, key, val) {
|
270
|
+
var _idx = page.__index[eid];
|
271
|
+
|
272
|
+
//Do we have the entry?
|
273
|
+
if (_idx > -1) {
|
274
|
+
//Great, then set the id and _sig
|
275
|
+
page.entries[_idx][key] = val;
|
276
|
+
page.entries[_idx]._sig = gen_id();
|
277
|
+
} else {
|
278
|
+
//Nope, create the entry
|
279
|
+
var entry = {_sig: gen_id(), _id: eid}
|
280
|
+
entry[key] = val;
|
281
|
+
page.entries.push(entry);
|
282
|
+
vm_reindex_page(page);
|
283
|
+
}
|
284
|
+
}
|
285
|
+
|
268
286
|
///////////////////////////////////////////////////////////////////////////
|
269
287
|
|
270
288
|
//vm_diff helpers
|
data/docs/services/vm.md
CHANGED
@@ -198,6 +198,8 @@ The pager synchronization daemon is embodied in the function called `vm_pg_sync_
|
|
198
198
|
a reference if the entry if it is found. The reference is **not** modifiable unless you call `vm_copy_page` first. Additionally, entries you
|
199
199
|
added recently will not be available by this untli they are written to disk via `vm_cache_write`
|
200
200
|
* `vm_del_entry_with_id(page, entry_id)` - Removes the entry from the page. If entry_id doesn't exist, nothing happends.
|
201
|
+
* `vm_set_entry_with_id_key_val(page, key, entry_id, value)` - Set a particular key of an entry. This will also change the entries `_sig` field to
|
202
|
+
a new random signature. If an entry with the id does not exist, it will be created.
|
201
203
|
* `vm_rehash_page(page)` - Calculates the hash for a page and modifies that page with the new `_hash` field. If the `_hash` field does not exist, it
|
202
204
|
will create it. Multiple calls are supported as it will recalculate the index as needed.
|
203
205
|
* `vm_reindex_page(page)` - Recalculates the `__index` field of the page. If `__index` does not exist, it is added.
|
@@ -226,7 +228,7 @@ The pager synchronization daemon is embodied in the function called `vm_pg_sync_
|
|
226
228
|
`__changes_id` of the page matches `changes_id`. If the page is based (implying the base page has changes and the page has changes as all base
|
227
229
|
pages have changes), then if the `changes_id` matches the **base** `__changes_id` , the `__base` is removed from the page. If `changes_id`
|
228
230
|
does not match in either of the cases, then nothing happends. This may happend if a synchronization errousouly comes in.
|
229
|
-
|
231
|
+
* **Why do we have both `vm_rebase` and `vm_mark_changes_synced`?**
|
230
232
|
* They are used under similar circumstances. You always `vm_mark_changes_synced` before calling `vm_rebase` on a page. The reasoning is that
|
231
233
|
`vm_rebase` will assume that the cached page does not contain changes if they are present in `older`. If you didn't do this, then the
|
232
234
|
cached page would be rebased and could contain changes even though it's already been rebased on an older page. E.g. `newer[changes, nobase]`
|
data/lib/flok/version.rb
CHANGED
@@ -104,6 +104,58 @@ RSpec.describe "kern:vm_service_functional" do
|
|
104
104
|
])
|
105
105
|
end
|
106
106
|
|
107
|
+
it "Can can use vm_set_entry_with_id_key_val" do
|
108
|
+
ctx = flok_new_user File.read('./spec/kern/assets/vm/controller0.rb'), File.read("./spec/kern/assets/vm/config5.rb")
|
109
|
+
dump = ctx.evald %{
|
110
|
+
dump.new_page = vm_create_page("my_id")
|
111
|
+
dump.new_page.entries.push({
|
112
|
+
_sig: "test",
|
113
|
+
_id: "test",
|
114
|
+
value: "test",
|
115
|
+
});
|
116
|
+
dump.new_page.entries.push({
|
117
|
+
_sig: "test2",
|
118
|
+
_id: "test2",
|
119
|
+
value: "test2",
|
120
|
+
});
|
121
|
+
dump.new_page.entries.push({
|
122
|
+
_sig: "test3",
|
123
|
+
_id: "test3",
|
124
|
+
value: "test3",
|
125
|
+
});
|
126
|
+
dump.new_page.entries.push({
|
127
|
+
_sig: "test4",
|
128
|
+
_id: "test4",
|
129
|
+
value: "test4",
|
130
|
+
});
|
131
|
+
|
132
|
+
vm_reindex_page(dump.new_page);
|
133
|
+
vm_rehash_page(dump.new_page);
|
134
|
+
|
135
|
+
vm_set_entry_with_id_key_val(dump.new_page, "test3", "value", "foo");
|
136
|
+
vm_set_entry_with_id_key_val(dump.new_page, "test3", "value2", "foo2");
|
137
|
+
|
138
|
+
//Also test some ids that do not currently exist
|
139
|
+
vm_set_entry_with_id_key_val(dump.new_page, "test5", "foo", "bar");
|
140
|
+
vm_set_entry_with_id_key_val(dump.new_page, "test5", "foo2", "bar2");
|
141
|
+
}
|
142
|
+
|
143
|
+
expect(dump["new_page"]["entries"][0]).to eq("_sig" => "test", "_id" => "test", "value" => "test")
|
144
|
+
expect(dump["new_page"]["entries"][1]).to eq("_sig" => "test2", "_id" => "test2", "value" => "test2")
|
145
|
+
|
146
|
+
expect(dump["new_page"]["entries"][2]["_id"]).to eq("test3")
|
147
|
+
expect(dump["new_page"]["entries"][2]["_sig"]).not_to eq(nil)
|
148
|
+
expect(dump["new_page"]["entries"][2]["value"]).to eq("foo")
|
149
|
+
expect(dump["new_page"]["entries"][2]["value2"]).to eq("foo2")
|
150
|
+
|
151
|
+
expect(dump["new_page"]["entries"][3]).to eq("_sig" => "test4", "_id" => "test4", "value" => "test4")
|
152
|
+
|
153
|
+
expect(dump["new_page"]["entries"][4]["_id"]).to eq("test5")
|
154
|
+
expect(dump["new_page"]["entries"][4]["_sig"]).not_to eq(nil)
|
155
|
+
expect(dump["new_page"]["entries"][4]["foo"]).to eq("bar")
|
156
|
+
expect(dump["new_page"]["entries"][4]["foo2"]).to eq("bar2")
|
157
|
+
end
|
158
|
+
|
107
159
|
it "Can can use vm_copy_page" do
|
108
160
|
ctx = flok_new_user File.read('./spec/kern/assets/vm/controller0.rb'), File.read("./spec/kern/assets/vm/config5.rb")
|
109
161
|
dump = ctx.evald %{
|