Skip to content

Commit

Permalink
[FABN-876] Decode metadata writes in BlockDecoder
Browse files Browse the repository at this point in the history
This patch adds decode of metadata_writes in rwset and hashed_rwset to
BlockDecoder.

FABN-876 #done

Change-Id: I4fca0b8067d58d669ac36314c37f2218cd501ef6
Signed-off-by: Taku Shimosawa <taku.shimosawa@hal.hitachi.com>
  • Loading branch information
shimos committed Aug 16, 2018
1 parent 9c686e9 commit 74d8a1d
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 1 deletion.
59 changes: 59 additions & 0 deletions fabric-client/lib/BlockDecoder.js
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,11 @@ actions {array}
key -- {string}
is_delete -- {boolean}
value -- {string}
metadata_writes -- {array}
key -- {string}
entries -- {array}
name -- {string}
value -- {byte[]}
collection_hashed_rwset -- {array}
collection_name -- {string}
hashed_rwset
Expand All @@ -204,6 +209,11 @@ actions {array}
key_hash -- {byte[]}
is_delete -- {boolean}
value_hash -- {byte[]}
metadata_writes -- {array}
key_hash -- {byte[]}
entries -- {array}
name -- {string}
value -- {byte[]}
pvt_rwset_hash -- {byte[]}
events
chaincode_id -- {string}
Expand Down Expand Up @@ -1276,6 +1286,7 @@ function decodeKVRWSet(kv_bytes) {
kv_rw_set.reads = [];
kv_rw_set.range_queries_info = [];
kv_rw_set.writes = [];
kv_rw_set.metadata_writes = [];

// build reads
const reads = kv_rw_set.reads;
Expand All @@ -1298,6 +1309,13 @@ function decodeKVRWSet(kv_bytes) {
writes.push(decodeKVWrite(proto_writes[i]));
}

// build metadata writes
const metadata_writes = kv_rw_set.metadata_writes;
const proto_metadata_writes = proto_kv_rw_set.getMetadataWrites();
for (const i in proto_metadata_writes) {
metadata_writes.push(decodeKVMetadataWrite(proto_metadata_writes[i]));
}

return kv_rw_set;
}

Expand Down Expand Up @@ -1353,6 +1371,29 @@ function decodeKVWrite(proto_kv_write) {
return kv_write;
}

function decodeKVMetadataWrite(proto_kv_metadata_write) {
const kv_metadata_write = {};

kv_metadata_write.key = proto_kv_metadata_write.getKey();

const proto_kv_metadata_entries = proto_kv_metadata_write.getEntries();
kv_metadata_write.entries = [];
for (const i in proto_kv_metadata_entries) {
kv_metadata_write.entries.push(decodeKVMetadataEntry(proto_kv_metadata_entries[i]));
}

return kv_metadata_write;
}

function decodeKVMetadataEntry(proto_kv_metadata_entry) {
const kv_metadata_entry = {};

kv_metadata_entry.name = proto_kv_metadata_entry.getName();
kv_metadata_entry.value = proto_kv_metadata_entry.getValue().toBuffer();

return kv_metadata_entry;
}

function decodeResponse(proto_response) {
if (!proto_response) return null;
const response = {};
Expand Down Expand Up @@ -1403,6 +1444,11 @@ function decodeHashedRwset(hashed_rwset_bytes) {
hashed_rwset.hashed_writes.push(decodeKVWriteHash(proto_hashed_writes[i]));
}

const proto_hashed_metadata_writes = proto_hashed_rwset.getMetadataWrites();
hashed_rwset.metadata_writes = [];
for (const i in proto_hashed_metadata_writes) {
hashed_rwset.metadata_writes.push(decodeKVMetadataWriteHash(proto_hashed_metadata_writes[i]));
}
return hashed_rwset;
}

Expand Down Expand Up @@ -1430,6 +1476,19 @@ function decodeKVWriteHash(proto_kv_write_hash) {
return kv_write_hash;
}

function decodeKVMetadataWriteHash(proto_kv_metadata_write_hash) {
const kv_metadata_write_hash = {};

kv_metadata_write_hash.key_hash = proto_kv_metadata_write_hash.getKeyHash().toBuffer();

const proto_kv_metadata_entries = proto_kv_metadata_write_hash.getEntries();
kv_metadata_write_hash.entries = [];
for (const i in proto_kv_metadata_entries) {
kv_metadata_write_hash.entries.push(decodeKVMetadataEntry(proto_kv_metadata_entries[i]));
}

return kv_metadata_write_hash;
}

const type_as_string = {
0: 'MESSAGE', // Used for messages which are signed but opaque
Expand Down
28 changes: 27 additions & 1 deletion test/unit/block.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,20 @@ test('\n\n*** BlockDecoder test for readwrite sets', (t) => {
var writes_array = [];
writes_array.push(kv_write_proto);

const kv_metadata_entry_proto = new kvrwsetProto.KVMetadataEntry();
kv_metadata_entry_proto.setName('metadata name');
kv_metadata_entry_proto.setValue(Buffer.from('METADATAVALUE'));
const kv_metadata_proto = new kvrwsetProto.KVMetadataWrite();
kv_metadata_proto.setKey('metadata key');
kv_metadata_proto.setEntries([kv_metadata_entry_proto]);
const metadata_array = [];
metadata_array.push(kv_metadata_proto);

var kvrwset_proto = new kvrwsetProto.KVRWSet();
kvrwset_proto.setReads(reads_array);
kvrwset_proto.setRangeQueriesInfo(range_query_info_array);
kvrwset_proto.setWrites(writes_array);
kvrwset_proto.setMetadataWrites(metadata_array);

var results_proto = new rwsetProto.TxReadWriteSet();
results_proto.setDataModel(rwsetProto.TxReadWriteSet.DataModel.KV);
Expand Down Expand Up @@ -83,7 +93,11 @@ test('\n\n*** BlockDecoder test for readwrite sets', (t) => {
t.equal(false,results_json.ns_rwset[0].rwset.writes[0].is_delete, ' check results_json.ns_rwset[0].rwset.writes[0].version.is_delete');
t.equal('this is the value',results_json.ns_rwset[0].rwset.writes[0].value, ' check results_json.ns_rwset[0].rwset.writes[0].value');

//now add in range query with query reads
t.equal('metadata key', results_json.ns_rwset[0].rwset.metadata_writes[0].key, ' check results_json.ns_rwset[0].rwset.metadata_writes[0].key');
t.equal('metadata name', results_json.ns_rwset[0].rwset.metadata_writes[0].entries[0].name, ' check results_json.ns_rwset[0].rwset.metadata_writes[0].entries[0].name');
t.equal('METADATAVALUE', results_json.ns_rwset[0].rwset.metadata_writes[0].entries[0].value.toString(), ' check results_json.ns_rwset[0].rwset.metadata_writes[0].entries[0].value');

//now add in range query with query reads
var rqi_version_proto = new kvrwsetProto.Version();
rqi_version_proto.setBlockNum(13);
rqi_version_proto.setTxNum(31);
Expand Down Expand Up @@ -155,8 +169,13 @@ test('\n\n*** BlockDecoder test for readwrite sets', (t) => {
hashed_kv_write.setIsDelete(true);
hashed_kv_write.setValueHash(Buffer.from('HASHEDVAL1111'));

const hashed_kv_metadata = new kvrwsetProto.KVMetadataWriteHash();
hashed_kv_metadata.setKeyHash(Buffer.from('HASHEDKEY2222'));
hashed_kv_metadata.setEntries([kv_metadata_entry_proto]);

hashed_kv_rwset.setHashedReads([hashed_kv_read]);
hashed_kv_rwset.setHashedWrites([hashed_kv_write]);
hashed_kv_rwset.setMetadataWrites([hashed_kv_metadata]);

const collection_rwset_array = [];
const collection_rwset = new rwsetProto.CollectionHashedReadWriteSet();
Expand Down Expand Up @@ -195,6 +214,13 @@ test('\n\n*** BlockDecoder test for readwrite sets', (t) => {
t.equal(true, results_json.ns_rwset[0].collection_hashed_rwset[0].hashed_rwset.hashed_writes[0].is_delete,
' check results_json.ns_rwset[0].collection_hashed_rwset[0].hashed_rwset.hashed_writes[0].is_delete');

t.equal('HASHEDKEY2222', results_json.ns_rwset[0].collection_hashed_rwset[0].hashed_rwset.metadata_writes[0].key_hash.toString(),
' check results_json.ns_rwset[0].collection_hashed_rwset[0].hashed_rwset.metadata_writes[0].key_hash');
t.equal('metadata name', results_json.ns_rwset[0].collection_hashed_rwset[0].hashed_rwset.metadata_writes[0].entries[0].name,
' check results_json.ns_rwset[0].collection_hashed_rwset[0].hashed_rwset.metadata_writes[0].entries[0].name');
t.equal('METADATAVALUE', results_json.ns_rwset[0].collection_hashed_rwset[0].hashed_rwset.metadata_writes[0].entries[0].value.toString(),
' check results_json.ns_rwset[0].collection_hashed_rwset[0].hashed_rwset.metadata_writes[0].entries[0].value');

t.end();

});
Expand Down

0 comments on commit 74d8a1d

Please sign in to comment.