commit | 1afa948522966b73ce9071c73e3b12669981d278 | [log] [tgz] |
---|---|---|
author | Mike Burrows <m3b@google.com> | Mon May 02 14:48:22 2016 -0700 |
committer | Mike Burrows <m3b@google.com> | Mon May 02 14:48:22 2016 -0700 |
tree | 48a860327ecb6e495201d0e998e0d7876b513061 | |
parent | 1ba141cec6d51c9933790557d7be8bed8c530965 [diff] |
syncbase: use "any" instead of []byte in Put/Get RPCs This CL and its companion use the VDL type "any" instead of []byte in the definitions of rows in the syncbase API. See v.io/v23/services/syncbase/service.vdl in the Row interface. The intent is to avoid unnecessary trips through marshalling/unmarshalling when communicating with syncbase. With this change, all data in syncbase will be VOM encoded, and on a Get() will not be fully decoded by the syncbase server before the VOM-encoded data is transmitted via RPC to the client. If the client wishes to store byte vectors, he can, but they too will be VOM encoded inside syncbase. The change also affects the scan and conflict resolution interfaces by changing the KeyValue and Value structs in v.io/v23/services/syncbase/types.vdl v.io/syncbase/types.vdl The strategy is to use vom.RawBytes at levels of the system near the RPC interfaces, and []byte in the watchable and store abstractions. The converstion between the two ios done primarily in the "row" abstraction, and the collection abstraction (for scans) v.io/v23/syncbase/model.go v.io/v23/syncbase/row.go v.io/v23/syncbase/scan_stream.go v.io/x/ref/services/syncbase/server/collection.go v.io/x/ref/services/syncbase/server/row.go Details: v.io/v23/services/syncbase/service.vdl Row.Put() and Row.Get() pass parameters of type "any" rather than type "[]byte". v.io/v23/services/syncbase/types.vdl The structs KeyValue and Value now use the type "any" to represent the VOM-encoded value. v.io/v23/syncbase/cr_test.go makeResolution() now takes a *vom.RawBytes parameter. compareResult() now encodes vom.RawBytes values to []byte values before comparing. encode() now converts to vom.RawBytes instead of []byte. v.io/v23/syncbase/model.go Get() now uses RawBytes.ToValue() instead of vom.Decode. NewValue() nbow uses RawBytesFromValue() instead of vom.Encode(). v.io/v23/syncbase/row.go Get() and Put() now use RawBytes instead of []byte interally to communicate with the layer below. v.io/v23/syncbase/scan_stream.go Value() now uses RawBytes.ToValue() instead of vmo.Decode(). v.io/v23/syncbase/syncgroup_v23_test.go This test used to have subtests called "*NonVomData", that tested putting raw bytes directly into the store. We no longer do this: raw bytes are now accommodated by VOM encoding them, so all values in the store are expected to be VOM encoded. v.io/v23/syncbase/types.vdl Struct Value's Val field is now of type "any" rather than "[]byte". -------------------- v.io/x/ref/services/syncbase/server/collection.go Scan() now decodes each value retrieved from the store into a vom.RawBytes for transmission to the client. v.io/x/ref/services/syncbase/server/row.go Get()/get() now decodes a value obtained from the store into a vom.RawBytes for transmission to the client. Put()/put() now encodes a vom.RawBytes from the client into a []byte to give to the store. v.io/x/ref/services/syncbase/server/watchlog_test.go TestWatchLogPerms() uses the row interface directly, and so now uses vom.RawBytes. v.io/x/ref/services/syncbase/testutil/util.go WatchChangeEq() now expects a vom.RawBytes in the WatchChange data structure, rather than []byte. v.io/x/ref/services/syncbase/vsync/cr_app_resolves.go processResInfos() now converts the vom.RawBytes data it finds to []byte. createValueObj() now converts the []byte it finds to a vom.RawBytes v.io/x/ref/services/syncbase/vsync/cr_app_resolves_test.go setResInfData() now gives vom.RawValue elements to addResInfo(). checkConflictRow() converts vom.RawValue elements to []byte for comparisons. addResInfo() now takes vo.RawValue instead of []byte saveValue() now saves a VOM-encoded value, rather than a byte vector. -------------------- java/io/v/v23/syncbase/RowImpl.java test/java/io/v/v23/syncbase/SyncbaseTest.java In the Java world, there is as yet no equivalent of vom.RawBytes. The types are mapped to VdlAny. Currently, I convert to and from the desired types by using VomUtil.Decode(VomUtil.encode(...)...). MultiPart: 2/3 Change-Id: Id191613f07b106b90e3db3b68b80f9be7cb2ec3a
This repository contains a reference implementation of the Vanadium APIs.
Unlike the APIs in https://github.com/vanadium/go.v23, which promises to provide backward compatibility this repository makes no such promises.