diff options
author | Henning Baldersheim <balder@oath.com> | 2018-03-16 22:03:09 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@oath.com> | 2018-03-19 09:59:20 +0100 |
commit | 9335569e415a04beaab3ebcb62e02faf37be7ad3 (patch) | |
tree | 0468dce784c03994f0de8e70a5ad9be3da109dbe /storageapi | |
parent | f52a07e96ccf1baf2b4bbfa148bff540ba35357d (diff) |
Remove MultiOperation
Conflicts:
storage/src/tests/persistence/filestorage/filestormanagertest.cpp
storage/src/vespa/storage/persistence/persistencethread.cpp
Fix merge conflict.
Diffstat (limited to 'storageapi')
25 files changed, 48 insertions, 410 deletions
diff --git a/storageapi/src/tests/mbusprot/mbusprot.4.2.serialization.V_4_2_STABLE b/storageapi/src/tests/mbusprot/mbusprot.4.2.serialization.V_4_2_STABLE index 4ee14c628b4..5045a98b037 100644 --- a/storageapi/src/tests/mbusprot/mbusprot.4.2.serialization.V_4_2_STABLE +++ b/storageapi/src/tests/mbusprot/mbusprot.4.2.serialization.V_4_2_STABLE @@ -62,9 +62,5 @@ MessageType(18, Visitor Create) \00\00\00\12\00\00\00\07library\00\00\00\02id\00\00\00\0ddoc selection\00\00\00\01\00\00\00\0bcontroldest\00\00\00\08datadest\00\00\00\02\00\00\00\00\00\00\00{\00\00\00\00\00\00\01\c8\00\00\00\02@\00\00\00\00\00\00\01@\00\00\00\00\00\00\02\00\01\01\00\00\00d\00\00\00\03\00\00\00\0dinto darkness\00\00\00\09bind them\00\00\00\08one ring\00\00\00\10to rule them all\00\00\00\0bone ring to\00\00\00\0dfind them and\00\00\00\00\00\00\00\00\01\ff\ff MessageType(19, Visitor Create Reply, reply of Visitor Create) \00\00\00\13\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\01 -MessageType(70, MultiOperation) -\00\00\00F\00\00'\10\01\00\00\00\00\00\00\00\00\00\00\00\a6&\00\00$\00\00\00\ca&\00\00F\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\1edoc:test:test\00\01testdoctype1\00\00\01\00\00\00=\00\01\05\00= ;This is the contents of the test document. It ain't much. \00\00P\00\00\f1\f1\f1\f1\f1\00\00\00\00\00\00\00\00\01\ff\ff -MessageType(71, MultiOperation Reply, reply of MultiOperation) -\00\00\00GP\00\00\f1\f1\f1\f1\f1\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\01
\ No newline at end of file diff --git a/storageapi/src/tests/mbusprot/storageprotocoltest.cpp b/storageapi/src/tests/mbusprot/storageprotocoltest.cpp index a04b0d71e96..73fbb43a4e9 100644 --- a/storageapi/src/tests/mbusprot/storageprotocoltest.cpp +++ b/storageapi/src/tests/mbusprot/storageprotocoltest.cpp @@ -5,7 +5,6 @@ #include <vespa/storageapi/message/bucketsplitting.h> #include <vespa/storageapi/message/internal.h> #include <vespa/storageapi/message/removelocation.h> -#include <vespa/storageapi/message/multioperation.h> #include <vespa/storageapi/message/batch.h> #include <vespa/storageapi/mbusprot/storageprotocol.h> #include <vespa/storageapi/mbusprot/storagecommand.h> @@ -92,7 +91,6 @@ struct StorageProtocolTest : public CppUnit::TestFixture { void testSplitBucket51(); void testSplitBucketChain51(); void testJoinBuckets51(); - void testMultiOperation51(); void testBatchPutRemove51(); void testCreateVisitor51(); void testDestroyVisitor51(); @@ -135,7 +133,6 @@ struct StorageProtocolTest : public CppUnit::TestFixture { CPPUNIT_TEST(testCreateVisitor51); CPPUNIT_TEST(testDestroyVisitor51); CPPUNIT_TEST(testRemoveLocation51); - CPPUNIT_TEST(testMultiOperation51); CPPUNIT_TEST(testBatchPutRemove51); CPPUNIT_TEST(testInternalMessage); CPPUNIT_TEST(testSetBucketState51); @@ -784,30 +781,6 @@ StorageProtocolTest::testApplyBucketDiff51() } void -StorageProtocolTest::testMultiOperation51() -{ - ScopedName test("testMultiOperation51"); - - document::BucketId bucketId(20, 0xf1f1f1f1f1ull); - document::Bucket bucket(makeDocumentBucket(bucketId)); - DocumentTypeRepo::SP repo(new DocumentTypeRepo); - MultiOperationCommand::SP - cmd(new MultiOperationCommand(repo, bucket, 10000)); - cmd->getOperations().addPut(*_testDoc); - MultiOperationCommand::SP cmd2(copyCommand(cmd, _version5_1)); - CPPUNIT_ASSERT_EQUAL(bucketId, cmd2->getBucketId()); - CPPUNIT_ASSERT_EQUAL(*_testDoc, - *cmd2->getOperations().begin()->getDocument()); - - MultiOperationReply::SP reply(new MultiOperationReply(*cmd2)); - MultiOperationReply::SP reply2(copyReply(reply)); - - recordOutput(*cmd2); - recordOutput(*reply2); - recordSerialization50(); -} - -void StorageProtocolTest::testBatchPutRemove51() { ScopedName test("testBatchPutRemove51"); diff --git a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.cpp b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.cpp index dcc2239ac06..98beda4d483 100644 --- a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.cpp +++ b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.cpp @@ -4,16 +4,13 @@ #include "serializationhelper.h" #include "storagecommand.h" #include "storagereply.h" - -#include <vespa/storageapi/messageapi/storagemessage.h> -#include <vespa/storageapi/message/bucket.h> #include <vespa/storageapi/message/bucketsplitting.h> -#include <vespa/storageapi/message/persistence.h> -#include <vespa/storageapi/message/multioperation.h> -#include <vespa/storageapi/message/batch.h> +#include <vespa/storageapi/message/visitor.h> #include <vespa/storageapi/message/removelocation.h> +#include <vespa/storageapi/message/batch.h> #include <vespa/vespalib/util/exceptions.h> -#include <vespa/vespalib/util/growablebytebuffer.h> + + #include <sstream> #include <vespa/log/log.h> @@ -21,8 +18,7 @@ LOG_SETUP(".storage.api.mbusprot.serialization.base"); namespace storage::mbusprot { -ProtocolSerialization::ProtocolSerialization( - const document::DocumentTypeRepo::SP& repo) +ProtocolSerialization::ProtocolSerialization(const document::DocumentTypeRepo::SP& repo) : _repo(repo) { } @@ -118,12 +114,6 @@ ProtocolSerialization::encode(const api::StorageMessage& msg) const case api::MessageType::JOINBUCKETS_REPLY_ID: onEncode(buf, static_cast<const api::JoinBucketsReply&>(msg)); break; - case api::MessageType::MULTIOPERATION_ID: - onEncode(buf, static_cast<const api::MultiOperationCommand&>(msg)); - break; - case api::MessageType::MULTIOPERATION_REPLY_ID: - onEncode(buf, static_cast<const api::MultiOperationReply&>(msg)); - break; case api::MessageType::VISITOR_CREATE_ID: onEncode(buf, static_cast<const api::CreateVisitorCommand&>(msg)); break; @@ -209,8 +199,6 @@ ProtocolSerialization::decodeCommand(mbus::BlobRef data) const cmd = onDecodeSplitBucketCommand(buf); break; case api::MessageType::JOINBUCKETS_ID: cmd = onDecodeJoinBucketsCommand(buf); break; - case api::MessageType::MULTIOPERATION_ID: - cmd = onDecodeMultiOperationCommand(buf); break; case api::MessageType::VISITOR_CREATE_ID: cmd = onDecodeCreateVisitorCommand(buf); break; case api::MessageType::VISITOR_DESTROY_ID: @@ -228,12 +216,11 @@ ProtocolSerialization::decodeCommand(mbus::BlobRef data) const throw vespalib::IllegalArgumentException(ost.str(), VESPA_STRLOC); } } - return StorageCommand::UP(new StorageCommand(SCmd::SP(cmd.release()))); + return std::make_unique<StorageCommand>(std::move(cmd)); } StorageReply::UP -ProtocolSerialization::decodeReply(mbus::BlobRef data, - const api::StorageCommand& cmd) const +ProtocolSerialization::decodeReply(mbus::BlobRef data, const api::StorageCommand& cmd) const { LOG(spam, "Decode %d bytes of data.", data.size()); if (data.size() < sizeof(int32_t)) { @@ -276,8 +263,6 @@ ProtocolSerialization::decodeReply(mbus::BlobRef data, reply = onDecodeSplitBucketReply(cmd, buf); break; case api::MessageType::JOINBUCKETS_REPLY_ID: reply = onDecodeJoinBucketsReply(cmd, buf); break; - case api::MessageType::MULTIOPERATION_REPLY_ID: - reply = onDecodeMultiOperationReply(cmd, buf); break; case api::MessageType::VISITOR_CREATE_REPLY_ID: reply = onDecodeCreateVisitorReply(cmd, buf); break; case api::MessageType::VISITOR_DESTROY_REPLY_ID: @@ -295,7 +280,7 @@ ProtocolSerialization::decodeReply(mbus::BlobRef data, throw vespalib::IllegalArgumentException(ost.str(), VESPA_STRLOC); } } - return StorageReply::UP(new StorageReply(SRep::SP(reply.release()))); + return std::make_unique<StorageReply>(std::move(reply)); } } diff --git a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.h b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.h index d1e5783e609..532b50ac680 100644 --- a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.h +++ b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization.h @@ -17,8 +17,7 @@ namespace mbus { namespace vespalib { class GrowableByteBuffer; } -namespace storage { -namespace api { +namespace storage::api { class StorageCommand; class StorageReply; class PutCommand; @@ -49,8 +48,6 @@ class JoinBucketsCommand; class JoinBucketsReply; class SetBucketStateCommand; class SetBucketStateReply; -class MultiOperationCommand; -class MultiOperationReply; class CreateVisitorCommand; class RemoveLocationCommand; class RemoveLocationReply; @@ -60,7 +57,7 @@ class BatchDocumentUpdateCommand; class BatchDocumentUpdateReply; } -namespace mbusprot { +namespace storage::mbusprot { class SerializationHelper; class StorageCommand; @@ -123,8 +120,6 @@ protected: virtual void onEncode(GBBuf&, const api::JoinBucketsReply&) const = 0; virtual void onEncode(GBBuf&, const api::SetBucketStateCommand&) const = 0; virtual void onEncode(GBBuf&, const api::SetBucketStateReply&) const = 0; - virtual void onEncode(GBBuf&, const api::MultiOperationCommand&) const = 0; - virtual void onEncode(GBBuf&, const api::MultiOperationReply&) const = 0; virtual void onEncode(GBBuf&, const api::CreateVisitorCommand&) const = 0; virtual void onEncode(GBBuf&, const api::CreateVisitorReply&) const = 0; virtual void onEncode(GBBuf&, const api::DestroyVisitorCommand&) const = 0; @@ -166,8 +161,6 @@ protected: virtual SRep::UP onDecodeJoinBucketsReply(const SCmd&, BBuf&) const = 0; virtual SCmd::UP onDecodeSetBucketStateCommand(BBuf&) const = 0; virtual SRep::UP onDecodeSetBucketStateReply(const SCmd&, BBuf&) const = 0; - virtual SCmd::UP onDecodeMultiOperationCommand(BBuf&) const = 0; - virtual SRep::UP onDecodeMultiOperationReply(const SCmd&, BBuf&) const = 0; virtual SCmd::UP onDecodeCreateVisitorCommand(BBuf&) const = 0; virtual SRep::UP onDecodeCreateVisitorReply(const SCmd&, BBuf&) const = 0; virtual SCmd::UP onDecodeDestroyVisitorCommand(BBuf&) const = 0; @@ -186,6 +179,4 @@ protected: }; -} // mbusprot -} // storage - +} diff --git a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.cpp b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.cpp index cd8e4992ba5..0f8a7bc0206 100644 --- a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.cpp +++ b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.cpp @@ -5,27 +5,19 @@ #include "serializationhelper.h" #include "storagecommand.h" #include "storagereply.h" -#include "storageprotocol.h" -#include <vespa/messagebus/blob.h> -#include <vespa/messagebus/blobref.h> -#include <vespa/storageapi/messageapi/storagemessage.h> -#include <vespa/storageapi/message/bucket.h> #include <vespa/storageapi/message/bucketsplitting.h> -#include <vespa/storageapi/message/persistence.h> #include <vespa/storageapi/message/batch.h> -#include <vespa/storageapi/message/multioperation.h> - +#include <vespa/storageapi/message/visitor.h> #include <vespa/storageapi/message/removelocation.h> -#include <vespa/vespalib/util/growablebytebuffer.h> #include <vespa/vespalib/util/exceptions.h> + #include <vespa/log/log.h> LOG_SETUP(".storage.api.mbusprot.serialization.4_2"); using document::BucketSpace; -namespace storage { -namespace mbusprot { +namespace storage::mbusprot { ProtocolSerialization4_2::ProtocolSerialization4_2( const document::DocumentTypeRepo::SP& repo) @@ -33,33 +25,6 @@ ProtocolSerialization4_2::ProtocolSerialization4_2( { } -void ProtocolSerialization4_2::onEncode( - GBBuf& buf, const api::MultiOperationCommand& msg) const -{ - uint64_t docBlockSize = msg.getOperations().spaceNeeded(); - buf.putInt(docBlockSize); - char* pos = buf.allocate(docBlockSize); - vdslib::DocumentList copy(msg.getOperations(), pos, docBlockSize); - buf.putBoolean(msg.keepTimeStamps()); - putBucket(msg.getBucket(), buf); - onEncodeBucketInfoCommand(buf, msg); -} - -api::StorageCommand::UP -ProtocolSerialization4_2::onDecodeMultiOperationCommand(BBuf& buf) const -{ - uint32_t length = SH::getInt(buf); - std::vector<char> buffer(length); - buf.getBytes(&buffer[0], length); - bool keepTimestamps = SH::getBoolean(buf); - document::Bucket bucket = getBucket(buf); - api::MultiOperationCommand::UP msg( - new api::MultiOperationCommand(getTypeRepoSp(), - bucket, buffer, keepTimestamps)); - onDecodeBucketInfoCommand(buf, *msg); - return api::StorageCommand::UP(msg.release()); -} - void ProtocolSerialization4_2::onEncode( GBBuf& buf, const api::BatchPutRemoveCommand& msg) const @@ -512,13 +477,11 @@ api::StorageReply::UP ProtocolSerialization4_2::onDecodeSetBucketStateReply(const SCmd&, BBuf&) const { - throw vespalib::IllegalStateException("Unsupported deserialization", - VESPA_STRLOC); + throw vespalib::IllegalStateException("Unsupported deserialization", VESPA_STRLOC); } void -ProtocolSerialization4_2::onEncode( - GBBuf& buf, const api::CreateVisitorCommand& msg) const +ProtocolSerialization4_2::onEncode(GBBuf& buf, const api::CreateVisitorCommand& msg) const { putBucketSpace(msg.getBucketSpace(), buf); buf.putString(msg.getLibraryName()); @@ -706,5 +669,4 @@ ProtocolSerialization4_2::onDecodeDiffEntry( entry._hasMask = SH::getShort(buf); } -} // mbusprot -} // storage +} diff --git a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.h b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.h index 3adae600dac..56d832ad4f8 100644 --- a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.h +++ b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization4_2.h @@ -3,8 +3,7 @@ #include "protocolserialization.h" -namespace storage { -namespace mbusprot { +namespace storage::mbusprot { class ProtocolSerialization4_2 : public ProtocolSerialization { public: @@ -22,7 +21,6 @@ protected: void onEncode(GBBuf&, const api::NotifyBucketChangeCommand&) const override; void onEncode(GBBuf&, const api::NotifyBucketChangeReply&) const override; void onEncode(GBBuf&, const api::SplitBucketCommand&) const override; - void onEncode(GBBuf&, const api::MultiOperationCommand&) const override; void onEncode(GBBuf&, const api::CreateVisitorCommand&) const override; void onEncode(GBBuf&, const api::DestroyVisitorCommand&) const override; void onEncode(GBBuf&, const api::DestroyVisitorReply&) const override; @@ -55,7 +53,6 @@ protected: SCmd::UP onDecodeSplitBucketCommand(BBuf&) const override; SCmd::UP onDecodeSetBucketStateCommand(BBuf&) const override; SRep::UP onDecodeSetBucketStateReply(const SCmd&, BBuf&) const override; - SCmd::UP onDecodeMultiOperationCommand(BBuf&) const override; SCmd::UP onDecodeCreateVisitorCommand(BBuf&) const override; SCmd::UP onDecodeDestroyVisitorCommand(BBuf&) const override; SRep::UP onDecodeDestroyVisitorReply(const SCmd&, BBuf&) const override; @@ -74,6 +71,4 @@ protected: virtual void onDecodeDiffEntry(BBuf&, api::GetBucketDiffCommand::Entry&) const; }; -} // mbusprot -} // storage - +} diff --git a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization5_0.cpp b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization5_0.cpp index 355a7871cc6..6351818df6b 100644 --- a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization5_0.cpp +++ b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization5_0.cpp @@ -5,15 +5,14 @@ #include "storagecommand.h" #include "storagereply.h" #include <vespa/storageapi/message/bucketsplitting.h> -#include <vespa/storageapi/message/multioperation.h> +#include <vespa/storageapi/message/visitor.h> #include <vespa/document/bucket/fixed_bucket_spaces.h> #include <sstream> using document::BucketSpace; using document::FixedBucketSpaces; -namespace storage { -namespace mbusprot { +namespace storage::mbusprot { document::Bucket ProtocolSerialization5_0::getBucket(document::ByteBuffer& buf) const @@ -509,22 +508,6 @@ ProtocolSerialization5_0::onDecodeSplitBucketReply(const SCmd& cmd, return api::StorageReply::UP(msg.release()); } -void ProtocolSerialization5_0::onEncode( - GBBuf& buf, const api::MultiOperationReply& msg) const -{ - onEncodeBucketInfoReply(buf, msg); -} - -api::StorageReply::UP -ProtocolSerialization5_0::onDecodeMultiOperationReply(const SCmd& cmd, - BBuf& buf) const -{ - api::MultiOperationReply::UP msg(new api::MultiOperationReply( - static_cast<const api::MultiOperationCommand&>(cmd))); - onDecodeBucketInfoReply(buf, *msg); - return api::StorageReply::UP(msg.release()); -} - void ProtocolSerialization5_0::onEncode( GBBuf& buf, const api::JoinBucketsCommand& msg) const @@ -612,8 +595,7 @@ ProtocolSerialization5_0::onDecodeBucketReply( } void -ProtocolSerialization5_0::onEncode( - GBBuf& buf, const api::CreateVisitorReply& msg) const +ProtocolSerialization5_0::onEncode(GBBuf& buf, const api::CreateVisitorReply& msg) const { onEncodeReply(buf, msg); buf.putInt(msg.getVisitorStatistics().getBucketsVisited()); @@ -707,5 +689,4 @@ ProtocolSerialization5_0::onDecodeCreateVisitorCommand(BBuf& buf) const return cvc; } -} // mbusprot -} // storage +}
\ No newline at end of file diff --git a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization5_0.h b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization5_0.h index c1285939a1c..933be68158f 100644 --- a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization5_0.h +++ b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization5_0.h @@ -4,8 +4,7 @@ #include "protocolserialization4_2.h" #include <vespa/documentapi/loadtypes/loadtypeset.h> -namespace storage { -namespace mbusprot { +namespace storage::mbusprot { class ProtocolSerialization5_0 : public ProtocolSerialization4_2 { private: @@ -37,7 +36,6 @@ public: void onEncode(GBBuf&, const api::GetBucketDiffReply&) const override; void onEncode(GBBuf&, const api::ApplyBucketDiffReply&) const override; void onEncode(GBBuf&, const api::SplitBucketReply&) const override; - void onEncode(GBBuf&, const api::MultiOperationReply&) const override; void onEncode(GBBuf&, const api::JoinBucketsCommand&) const override; void onEncode(GBBuf&, const api::JoinBucketsReply&) const override; void onEncode(GBBuf&, const api::RequestBucketInfoCommand&) const override; @@ -65,7 +63,6 @@ public: SRep::UP onDecodeGetBucketDiffReply(const SCmd&, BBuf&) const override; SRep::UP onDecodeApplyBucketDiffReply(const SCmd&, BBuf&) const override; SRep::UP onDecodeSplitBucketReply(const SCmd&, BBuf&) const override; - SRep::UP onDecodeMultiOperationReply(const SCmd&, BBuf&) const override; SCmd::UP onDecodeJoinBucketsCommand(BBuf& buf) const override; SRep::UP onDecodeJoinBucketsReply(const SCmd& cmd, BBuf& buf) const override; SCmd::UP onDecodeCreateVisitorCommand(BBuf&) const override; @@ -78,5 +75,4 @@ public: void onDecodeReply(BBuf&, api::StorageReply&) const override; }; -} // mbusprot -} // storage +} diff --git a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization5_1.cpp b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization5_1.cpp index 0afdfebd5b7..07bab044dca 100644 --- a/storageapi/src/vespa/storageapi/mbusprot/protocolserialization5_1.cpp +++ b/storageapi/src/vespa/storageapi/mbusprot/protocolserialization5_1.cpp @@ -4,23 +4,12 @@ #include "serializationhelper.h" #include "storagecommand.h" #include "storagereply.h" -#include "storageprotocol.h" - -#include <vespa/messagebus/blob.h> -#include <vespa/messagebus/blobref.h> -#include <vespa/storageapi/messageapi/storagemessage.h> -#include <vespa/storageapi/message/bucket.h> #include <vespa/storageapi/message/bucketsplitting.h> -#include <vespa/storageapi/message/persistence.h> -#include <vespa/storageapi/message/multioperation.h> -#include <vespa/vespalib/util/growablebytebuffer.h> -#include <vespa/document/select/orderingspecification.h> -#include <vespa/storageapi/messageapi/returncode.h> +#include <vespa/storageapi/message/visitor.h> using document::BucketSpace; -namespace storage { -namespace mbusprot { +namespace storage::mbusprot { api::BucketInfo ProtocolSerialization5_1::getBucketInfo(document::ByteBuffer& buf) const @@ -61,8 +50,7 @@ ProtocolSerialization5_1::ProtocolSerialization5_1( { } -void ProtocolSerialization5_1::onEncode( - GBBuf& buf, const api::SetBucketStateCommand& msg) const +void ProtocolSerialization5_1::onEncode(GBBuf& buf, const api::SetBucketStateCommand& msg) const { putBucket(msg.getBucket(), buf); buf.putByte(static_cast<uint8_t>(msg.getState())); @@ -223,6 +211,4 @@ ProtocolSerialization5_1::onDecodeCreateBucketCommand(BBuf& buf) const return api::StorageCommand::UP(msg.release()); } - -} // mbusprot -} // storage +} diff --git a/storageapi/src/vespa/storageapi/mbusprot/storagecommand.cpp b/storageapi/src/vespa/storageapi/mbusprot/storagecommand.cpp index 8aa44a0d7bf..8d97efafde6 100644 --- a/storageapi/src/vespa/storageapi/mbusprot/storagecommand.cpp +++ b/storageapi/src/vespa/storageapi/mbusprot/storagecommand.cpp @@ -3,9 +3,9 @@ namespace storage::mbusprot { -StorageCommand::StorageCommand(const storage::api::StorageCommand::SP& cmd) +StorageCommand::StorageCommand(api::StorageCommand::SP cmd) : mbus::Message(), - _cmd(cmd) + _cmd(std::move(cmd)) { } } diff --git a/storageapi/src/vespa/storageapi/mbusprot/storagecommand.h b/storageapi/src/vespa/storageapi/mbusprot/storagecommand.h index 651336b39e5..88af61509d5 100644 --- a/storageapi/src/vespa/storageapi/mbusprot/storagecommand.h +++ b/storageapi/src/vespa/storageapi/mbusprot/storagecommand.h @@ -12,7 +12,7 @@ class StorageCommand : public mbus::Message, public StorageMessage { public: typedef std::unique_ptr<StorageCommand> UP; - StorageCommand(const storage::api::StorageCommand::SP&); + StorageCommand(api::StorageCommand::SP); const mbus::string & getProtocol() const override { return StorageProtocol::NAME; } uint32_t getType() const override { return _cmd->getType().getId(); } diff --git a/storageapi/src/vespa/storageapi/mbusprot/storagereply.cpp b/storageapi/src/vespa/storageapi/mbusprot/storagereply.cpp index 7a21a1bbb27..469c6a41bc7 100644 --- a/storageapi/src/vespa/storageapi/mbusprot/storagereply.cpp +++ b/storageapi/src/vespa/storageapi/mbusprot/storagereply.cpp @@ -21,18 +21,15 @@ StorageReply::StorageReply(mbus::BlobRef data, const ProtocolSerialization& seri buf.getIntNetwork(reinterpret_cast<int32_t&>(_mbusType)); } -StorageReply::StorageReply(const api::StorageReply::SP& reply) +StorageReply::StorageReply(api::StorageReply::SP reply) : _serializer(0), _sz(0), _buffer(), _mbusType(reply->getType().getId()), - _reply(reply) -{ -} + _reply(std::move(reply)) +{} -StorageReply::~StorageReply() -{ -} +StorageReply::~StorageReply() = default; void StorageReply::deserialize() const diff --git a/storageapi/src/vespa/storageapi/mbusprot/storagereply.h b/storageapi/src/vespa/storageapi/mbusprot/storagereply.h index 2fd6be2dc14..fc0425369d1 100644 --- a/storageapi/src/vespa/storageapi/mbusprot/storagereply.h +++ b/storageapi/src/vespa/storageapi/mbusprot/storagereply.h @@ -19,7 +19,7 @@ public: typedef std::unique_ptr<StorageReply> UP; StorageReply(mbus::BlobRef data, const ProtocolSerialization&); - StorageReply(const api::StorageReply::SP& reply); + StorageReply(api::StorageReply::SP reply); ~StorageReply(); const mbus::string& getProtocol() const override { return StorageProtocol::NAME; } @@ -33,7 +33,7 @@ public: api::StorageMessage::CSP getInternalMessage() const override { deserialize(); return _reply; } uint8_t priority() const override { - if (_reply.get()) { + if (_reply) { return _reply->getPriority(); } return 0; diff --git a/storageapi/src/vespa/storageapi/message/CMakeLists.txt b/storageapi/src/vespa/storageapi/message/CMakeLists.txt index 248a3d61121..dbbaad8eed1 100644 --- a/storageapi/src/vespa/storageapi/message/CMakeLists.txt +++ b/storageapi/src/vespa/storageapi/message/CMakeLists.txt @@ -8,7 +8,6 @@ vespa_add_library(storageapi_message OBJECT state.cpp searchresult.cpp bucketsplitting.cpp - multioperation.cpp documentsummary.cpp stat.cpp removelocation.cpp diff --git a/storageapi/src/vespa/storageapi/message/batch.cpp b/storageapi/src/vespa/storageapi/message/batch.cpp index f92d88e179e..de8ac849dee 100644 --- a/storageapi/src/vespa/storageapi/message/batch.cpp +++ b/storageapi/src/vespa/storageapi/message/batch.cpp @@ -3,7 +3,6 @@ #include "batch.h" #include <vespa/document/bucket/bucketidfactory.h> #include <ostream> -#include <algorithm> using namespace storage::api; using document::BucketSpace; diff --git a/storageapi/src/vespa/storageapi/message/batch.h b/storageapi/src/vespa/storageapi/message/batch.h index 372d1bdb340..8d67c7813fa 100644 --- a/storageapi/src/vespa/storageapi/message/batch.h +++ b/storageapi/src/vespa/storageapi/message/batch.h @@ -7,8 +7,7 @@ #include <vespa/storageapi/messageapi/bucketinfocommand.h> #include <vespa/storageapi/messageapi/bucketinforeply.h> -namespace storage { -namespace api { +namespace storage::api { /** * @class BatchPutRemoveCommand @@ -190,4 +189,3 @@ public: }; } -} diff --git a/storageapi/src/vespa/storageapi/message/bucketsplitting.h b/storageapi/src/vespa/storageapi/message/bucketsplitting.h index 115cd9f01bb..66ebae6497c 100644 --- a/storageapi/src/vespa/storageapi/message/bucketsplitting.h +++ b/storageapi/src/vespa/storageapi/message/bucketsplitting.h @@ -6,8 +6,7 @@ #include <vespa/storageapi/messageapi/bucketinforeply.h> #include <vespa/storageapi/messageapi/maintenancecommand.h> -namespace storage { -namespace api { +namespace storage::api { /** * @class SplitBucketCommand @@ -118,5 +117,4 @@ public: DECLARE_STORAGEREPLY(JoinBucketsReply, onJoinBucketsReply) }; -} // api -} // storage +} diff --git a/storageapi/src/vespa/storageapi/message/multioperation.cpp b/storageapi/src/vespa/storageapi/message/multioperation.cpp deleted file mode 100644 index a6494002e18..00000000000 --- a/storageapi/src/vespa/storageapi/message/multioperation.cpp +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -#include "multioperation.h" -#include <vespa/document/update/documentupdate.h> - -using document::DocumentTypeRepo; - -namespace storage::api { - -IMPLEMENT_COMMAND(MultiOperationCommand, MultiOperationReply) -IMPLEMENT_REPLY(MultiOperationReply) - -MultiOperationCommand::MultiOperationCommand(const DocumentTypeRepo::SP &repo, - const document::Bucket &bucket, - int bufferSize, - bool keepTimeStamps_) - : BucketInfoCommand(MessageType::MULTIOPERATION, bucket), - _buffer(), - _operations(repo, 0, 0), - _keepTimeStamps(keepTimeStamps_) -{ - _buffer.resize(bufferSize); - if (_buffer.size() > 0) { - _operations = vdslib::WritableDocumentList(_operations.getTypeRepo(), - &_buffer[0], _buffer.size(), false); - } -} - -MultiOperationCommand::MultiOperationCommand(const DocumentTypeRepo::SP &repo, - const document::Bucket &bucket, - const std::vector<char>& buffer, - bool keepTimeStamps_) - : BucketInfoCommand(MessageType::MULTIOPERATION, bucket), - _buffer(buffer), - _operations(repo, 0, 0), - _keepTimeStamps(keepTimeStamps_) -{ - if (_buffer.size() > 0) { - _operations = vdslib::WritableDocumentList(_operations.getTypeRepo(), - &_buffer[0], _buffer.size(), true); - } -} - -MultiOperationCommand::MultiOperationCommand(const MultiOperationCommand& o) - : BucketInfoCommand(MessageType::MULTIOPERATION, o.getBucket()), - _buffer(o._buffer), - _operations(o._operations.getTypeRepo(),0, 0), - _keepTimeStamps(o._keepTimeStamps) -{ - setTimeout(o.getTimeout()); - setSourceIndex(o.getSourceIndex()); - setPriority(o.getPriority()); - if (_buffer.size() > 0) { - _operations = vdslib::WritableDocumentList(_operations.getTypeRepo(), - &_buffer[0], _buffer.size(), true); - } -} - -MultiOperationCommand::~MultiOperationCommand() {} - -void -MultiOperationCommand::print(std::ostream& out, bool verbose, - const std::string& indent) const -{ - out << "MultiOperationCommand(" << getBucketId() - << ", size " << _operations.getBufferSize() << ", used space " - << (_operations.getBufferSize() - _operations.countFree()) - << ", doccount " << _operations.size() << ", keepTimeStamps " - << _keepTimeStamps << ")"; - if (verbose) { - out << " {"; - bool first = true; - for(vdslib::DocumentList::const_iterator it = _operations.begin(); - it != _operations.end(); ++it) - { - if (!first) { out << ","; } else { first = false; } - out << "\n" << indent << " "; - if (it->isRemoveEntry()) { - out << "Remove(" << it->getDocumentId() << ")"; - } else if (it->isUpdateEntry()) { - out << "Update(" << it->getDocumentId() << ")"; - } else { - out << "Put(" << it->getDocumentId() << ")"; - } - } - out << "\n" << indent << "} : "; - BucketInfoCommand::print(out, verbose, indent); - } -} - -MultiOperationReply::MultiOperationReply(const MultiOperationCommand& cmd) - : BucketInfoReply(cmd), - _highestModificationTimestamp(0) -{ -} - -void -MultiOperationReply::print(std::ostream& out, bool verbose, - const std::string& indent) const -{ - out << "MultiOperationReply(" << getBucketId() << ")"; - if (verbose) { - out << " : "; - BucketInfoReply::print(out, verbose, indent); - } -} - -} diff --git a/storageapi/src/vespa/storageapi/message/multioperation.h b/storageapi/src/vespa/storageapi/message/multioperation.h deleted file mode 100644 index 3d80cd042ea..00000000000 --- a/storageapi/src/vespa/storageapi/message/multioperation.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -#pragma once - -#include <vespa/document/bucket/bucketid.h> -#include <vespa/document/fieldvalue/document.h> -#include <vespa/storageapi/messageapi/bucketinfocommand.h> -#include <vespa/storageapi/messageapi/bucketinforeply.h> -#include <vespa/storageapi/defs.h> -#include <vespa/storageapi/message/visitor.h> -#include <vespa/vdslib/container/writabledocumentlist.h> - -namespace storage { -namespace api { - -/** - * @class MultiOperationCommand - * @ingroup message - * - * @brief Sends a documentlist - */ -class MultiOperationCommand : public BucketInfoCommand { -private: - std::vector<char> _buffer; // Used to hold data refered to by document list - // if message is to own its data. - vdslib::WritableDocumentList _operations; - bool _keepTimeStamps; - -public: - explicit MultiOperationCommand(const document::DocumentTypeRepo::SP &repo, - const document::Bucket &bucket, - int bufferSize, - bool keepTimeStamps = false); - explicit MultiOperationCommand(const document::DocumentTypeRepo::SP &repo, - const document::Bucket &bucket, - const std::vector<char>& buffer, - bool keepTimeStamps = false); - explicit MultiOperationCommand(const MultiOperationCommand& template_); - ~MultiOperationCommand(); - - std::vector<char>& getBuffer() { return _buffer; }; - const std::vector<char>& getBuffer() const { return _buffer; }; - - vdslib::WritableDocumentList& getOperations() - { assert(_operations.getBufferSize() > 0); return _operations; } - const vdslib::WritableDocumentList& getOperations() const - { assert(_operations.getBufferSize() > 0); return _operations; } - - void setOperations(vdslib::WritableDocumentList& operations) { - _buffer.clear(); - _operations = operations; - } - - uint32_t getMemoryFootprint() const override { - return _buffer.size() + 20; - } - - bool keepTimeStamps() const { return _keepTimeStamps; } - void keepTimeStamps(bool keepTime) { _keepTimeStamps = keepTime; } - - void print(std::ostream& out, bool verbose, const std::string& indent) const override; - - DECLARE_STORAGECOMMAND(MultiOperationCommand, onMultiOperation) -}; - -/** - * @class MultiOperationReply - * @ingroup message - * - * @brief Confirm that a given docoperations have been received. - */ -class MultiOperationReply : public BucketInfoReply { -private: - // No need to serialize this, as it's only used internally in the distributor. - uint64_t _highestModificationTimestamp; - -public: - explicit MultiOperationReply(const MultiOperationCommand&); - - void print(std::ostream& out, bool verbose, const std::string& indent) const override; - - void setHighestModificationTimestamp(uint64_t highestModificationTimestamp) { - _highestModificationTimestamp = highestModificationTimestamp; - } - uint64_t getHighestModificationTimestamp() const { return _highestModificationTimestamp; } - - DECLARE_STORAGEREPLY(MultiOperationReply, onMultiOperationReply) -}; - -} // api -} // storage - diff --git a/storageapi/src/vespa/storageapi/message/removelocation.cpp b/storageapi/src/vespa/storageapi/message/removelocation.cpp index 38b56101f04..ab44f0e6890 100644 --- a/storageapi/src/vespa/storageapi/message/removelocation.cpp +++ b/storageapi/src/vespa/storageapi/message/removelocation.cpp @@ -3,8 +3,7 @@ #include "removelocation.h" #include <ostream> -namespace storage { -namespace api { +namespace storage::api { IMPLEMENT_COMMAND(RemoveLocationCommand, RemoveLocationReply) IMPLEMENT_REPLY(RemoveLocationReply) @@ -31,5 +30,4 @@ RemoveLocationReply::RemoveLocationReply(const RemoveLocationCommand& cmd) { } -} // api -} // storage +} diff --git a/storageapi/src/vespa/storageapi/message/removelocation.h b/storageapi/src/vespa/storageapi/message/removelocation.h index 4a3dec2e0f6..55b2d1eb75e 100644 --- a/storageapi/src/vespa/storageapi/message/removelocation.h +++ b/storageapi/src/vespa/storageapi/message/removelocation.h @@ -5,8 +5,7 @@ #include <vespa/storageapi/messageapi/storagecommand.h> #include <vespa/storageapi/messageapi/bucketinforeply.h> -namespace storage { -namespace api { +namespace storage::api { class RemoveLocationCommand : public BucketInfoCommand { @@ -32,4 +31,3 @@ public: }; } -} diff --git a/storageapi/src/vespa/storageapi/message/visitor.h b/storageapi/src/vespa/storageapi/message/visitor.h index e1850686222..0e78ea93753 100644 --- a/storageapi/src/vespa/storageapi/message/visitor.h +++ b/storageapi/src/vespa/storageapi/message/visitor.h @@ -15,8 +15,7 @@ #include <vespa/storageapi/messageapi/storagereply.h> #include <vespa/document/select/orderingspecification.h> -namespace storage { -namespace api { +namespace storage::api { /** * @class CreateVisitorCommand @@ -251,6 +250,4 @@ public: DECLARE_STORAGEREPLY(VisitorInfoReply, onVisitorInfoReply) }; -} // api -} // storage - +} diff --git a/storageapi/src/vespa/storageapi/messageapi/messagehandler.h b/storageapi/src/vespa/storageapi/messageapi/messagehandler.h index de8af718bcf..e7bd2b5bf27 100644 --- a/storageapi/src/vespa/storageapi/messageapi/messagehandler.h +++ b/storageapi/src/vespa/storageapi/messageapi/messagehandler.h @@ -25,7 +25,6 @@ class PutCommand; // Add document class UpdateCommand; // Update document class RemoveCommand; // Remove document class RevertCommand; // Revert put/remove operation -class MultiOperationCommand; // Multi put/remove/update operation class BatchPutRemoveCommand; class BatchDocumentUpdateCommand; @@ -65,7 +64,6 @@ class PutReply; class UpdateReply; class RemoveReply; class RevertReply; -class MultiOperationReply; class BatchPutRemoveReply; class BatchDocumentUpdateReply; @@ -145,12 +143,6 @@ public: { return false; } virtual bool onRevertReply(const std::shared_ptr<api::RevertReply>&) { return false; } - virtual bool onMultiOperation( - const std::shared_ptr<api::MultiOperationCommand>&) - { return false; } - virtual bool onMultiOperationReply( - const std::shared_ptr<api::MultiOperationReply>&) - { return false; } virtual bool onBatchPutRemove( const std::shared_ptr<api::BatchPutRemoveCommand>&) { return false; } diff --git a/storageapi/src/vespa/storageapi/messageapi/storagemessage.cpp b/storageapi/src/vespa/storageapi/messageapi/storagemessage.cpp index d9eecf36a03..ee6b908020c 100644 --- a/storageapi/src/vespa/storageapi/messageapi/storagemessage.cpp +++ b/storageapi/src/vespa/storageapi/messageapi/storagemessage.cpp @@ -144,9 +144,6 @@ const MessageType MessageType::JOINBUCKETS("Joinbuckets", JOINBUCKETS_ID); const MessageType MessageType::JOINBUCKETS_REPLY( "Joinbuckets reply", JOINBUCKETS_REPLY_ID, &MessageType::JOINBUCKETS); -const MessageType MessageType::MULTIOPERATION("MultiOperation", MULTIOPERATION_ID); -const MessageType MessageType::MULTIOPERATION_REPLY( - "MultiOperation Reply", MULTIOPERATION_REPLY_ID, &MessageType::MULTIOPERATION); const MessageType MessageType::STATBUCKET("Statbucket", STATBUCKET_ID); const MessageType MessageType::STATBUCKET_REPLY( "Statbucket Reply", STATBUCKET_REPLY_ID, &MessageType::STATBUCKET); diff --git a/storageapi/src/vespa/storageapi/messageapi/storagemessage.h b/storageapi/src/vespa/storageapi/messageapi/storagemessage.h index 1625be88418..46f00127202 100644 --- a/storageapi/src/vespa/storageapi/messageapi/storagemessage.h +++ b/storageapi/src/vespa/storageapi/messageapi/storagemessage.h @@ -128,8 +128,8 @@ public: SPLITBUCKET_REPLY_ID = 67, JOINBUCKETS_ID = 68, JOINBUCKETS_REPLY_ID = 69, - MULTIOPERATION_ID = 70, - MULTIOPERATION_REPLY_ID = 71, + //MULTIOPERATION_ID = 70, + //MULTIOPERATION_REPLY_ID = 71, DOCUMENTSUMMARY_ID = 72, DOCUMENTSUMMARY_REPLY_ID = 73, MAPVISITOR_ID = 74, |