From a742df420e2a390e6fecc269526926f1398f1d85 Mon Sep 17 00:00:00 2001 From: Saurav Chhatrapati Date: Wed, 3 Apr 2019 20:39:33 +0000 Subject: [PATCH 01/15] Commented out func nodes --- kvs/src/kvs/server.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/kvs/src/kvs/server.cpp b/kvs/src/kvs/server.cpp index 4bfd2f3f..c5fac55a 100644 --- a/kvs/src/kvs/server.cpp +++ b/kvs/src/kvs/server.cpp @@ -101,10 +101,10 @@ void run(unsigned thread_id, Address public_ip, Address private_ip, map key_replication_map; // ZMQ socket for asking kops server for IP addrs of functional nodes. - zmq::socket_t func_nodes_requester(context, ZMQ_REQ); - func_nodes_requester.setsockopt(ZMQ_SNDTIMEO, 1000); // 1s - func_nodes_requester.setsockopt(ZMQ_RCVTIMEO, 1000); // 1s - func_nodes_requester.connect(get_func_nodes_req_address(management_ip)); + // zmq::socket_t func_nodes_requester(context, ZMQ_REQ); + // func_nodes_requester.setsockopt(ZMQ_SNDTIMEO, 1000); // 1s + // func_nodes_requester.setsockopt(ZMQ_RCVTIMEO, 1000); // 1s + // func_nodes_requester.connect(get_func_nodes_req_address(management_ip)); // request server addresses from the seed node zmq::socket_t addr_requester(context, ZMQ_REQ); @@ -609,10 +609,10 @@ void run(unsigned thread_id, Address public_ip, Address private_ip, // Get the most recent list of cache IPs. // (Actually gets the list of all current function executor nodes.) // (The message content doesn't matter here; it's an argless RPC call.) - kZmqUtil->send_string("", &func_nodes_requester); + // kZmqUtil->send_string("", &func_nodes_requester); // Get the response. KeySet func_nodes; - func_nodes.ParseFromString(kZmqUtil->recv_string(&func_nodes_requester)); + // func_nodes.ParseFromString(kZmqUtil->recv_string(&func_nodes_requester)); // Update extant_caches with the response. set
deleted_caches = std::move(extant_caches); From 2de1da2108a184dc91f737f2e7305f205c9aa7b4 Mon Sep 17 00:00:00 2001 From: Chenggang Wu Date: Thu, 11 Apr 2019 09:04:22 -0700 Subject: [PATCH 02/15] Separates replication vector and key storage metadata (#88) --- cli.sh | 45 ++ cli.txt | 1437 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1482 insertions(+) create mode 100755 cli.sh create mode 100644 cli.txt diff --git a/cli.sh b/cli.sh new file mode 100755 index 00000000..27070a7e --- /dev/null +++ b/cli.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +# Copyright 2018 U.C. Berkeley RISE Lab +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if [ -z "$1" ] && [ -z "$2" ]; then + echo "Usage: ./scripts/start_local.sh build start-user" + echo "" + echo "You must run this from the project root directory." + exit 1 +fi + +if [ "$1" = "y" ] || [ "$1" = "yes" ]; then + ./scripts/build.sh +fi + +cp conf/kvs-example.yml conf/kvs-config.yml + +./build/kvs/src/monitor/flmonitor & +MPID=$! +./build/kvs/src/route/flroute & +RPID=$! +export SERVER_TYPE="memory" +./build/kvs/src/kvs/flkvs & +SPID=$! + +echo $MPID > pids +echo $RPID >> pids +echo $SPID >> pids + +if [ "$2" = "y" ] || [ "$2" = "yes" ]; then + # ./build/kvs/src/cli/flkvs-cli + ./build/client/kvs/cpp/flkvs-cli conf/kvs-config.yml cli.txt +fi diff --git a/cli.txt b/cli.txt new file mode 100644 index 00000000..16345ff4 --- /dev/null +++ b/cli.txt @@ -0,0 +1,1437 @@ +PUT 00000001 test +PUT 00000002 test +PUT 00000003 test +PUT 00000004 test +PUT 00000005 test +PUT 00000006 test +PUT 00000007 test +PUT 00000008 test +PUT 00000009 test +PUT 00000010 test +PUT 00000011 test +PUT 00000012 test +PUT 00000013 test +PUT 00000014 test +PUT 00000015 test +PUT 00000016 test +PUT 00000017 test +PUT 00000018 test +PUT 00000019 test +PUT 00000020 test +PUT 00000021 test +PUT 00000022 test +PUT 00000023 test +PUT 00000024 test +PUT 00000025 test +PUT 00000026 test +PUT 00000028 test +PUT 00000029 test +PUT 00000030 test +PUT 00000031 test +PUT 00000032 test +PUT 00000033 test +PUT 00000034 test +PUT 00000035 test +PUT 00000036 test +PUT 00000037 test +PUT 00000038 test +PUT 00000039 test +PUT 00000040 test +PUT 00000041 test +PUT 00000042 test +PUT 00000043 test +PUT 00000044 test +PUT 00000045 test +PUT 00000046 test +PUT 00000048 test +PUT 00000049 test +PUT 00000050 test +PUT 00000051 test +PUT 00000052 test +PUT 00000053 test +PUT 00000054 test +PUT 00000055 test +PUT 00000056 test +PUT 00000057 test +PUT 00000058 test +PUT 00000059 test +PUT 00000060 test +PUT 00000061 test +PUT 00000062 test +PUT 00000063 test +PUT 00000064 test +PUT 00000065 test +PUT 00000066 test +PUT 00000067 test +PUT 00000068 test +PUT 00000069 test +PUT 00000070 test +PUT 00000071 test +PUT 00000073 test +PUT 00000074 test +PUT 00000075 test +PUT 00000076 test +PUT 00000077 test +PUT 00000079 test +PUT 00000080 test +PUT 00000082 test +PUT 00000083 test +PUT 00000084 test +PUT 00000085 test +PUT 00000086 test +PUT 00000088 test +PUT 00000089 test +PUT 00000090 test +PUT 00000091 test +PUT 00000092 test +PUT 00000093 test +PUT 00000094 test +PUT 00000095 test +PUT 00000096 test +PUT 00000097 test +PUT 00000098 test +PUT 00000099 test +PUT 00000100 test +PUT 00000101 test +PUT 00000102 test +PUT 00000103 test +PUT 00000104 test +PUT 00000105 test +PUT 00000106 test +PUT 00000107 test +PUT 00000108 test +PUT 00000109 test +PUT 00000110 test +PUT 00000111 test +PUT 00000116 test +PUT 00000117 test +PUT 00000118 test +PUT 00000119 test +PUT 00000120 test +PUT 00000121 test +PUT 00000122 test +PUT 00000124 test +PUT 00000125 test +PUT 00000127 test +PUT 00000132 test +PUT 00000135 test +PUT 00000136 test +PUT 00000137 test +PUT 00000138 test +PUT 00000139 test +PUT 00000140 test +PUT 00000143 test +PUT 00000144 test +PUT 00000145 test +PUT 00000146 test +PUT 00000147 test +PUT 00000148 test +PUT 00000149 test +PUT 00000152 test +PUT 00000153 test +PUT 00000155 test +PUT 00000156 test +PUT 00000158 test +PUT 00000162 test +PUT 00000163 test +PUT 00000168 test +PUT 00000170 test +PUT 00000171 test +PUT 00000172 test +PUT 00000174 test +PUT 00000175 test +PUT 00000176 test +PUT 00000178 test +PUT 00000179 test +PUT 00000180 test +PUT 00000182 test +PUT 00000184 test +PUT 00000186 test +PUT 00000187 test +PUT 00000188 test +PUT 00000189 test +PUT 00000191 test +PUT 00000192 test +PUT 00000193 test +PUT 00000195 test +PUT 00000196 test +PUT 00000197 test +PUT 00000198 test +PUT 00000200 test +PUT 00000201 test +PUT 00000205 test +PUT 00000215 test +PUT 00000217 test +PUT 00000218 test +PUT 00000220 test +PUT 00000223 test +PUT 00000227 test +PUT 00000229 test +PUT 00000231 test +PUT 00000232 test +PUT 00000233 test +PUT 00000234 test +PUT 00000239 test +PUT 00000240 test +PUT 00000241 test +PUT 00000243 test +PUT 00000245 test +PUT 00000246 test +PUT 00000247 test +PUT 00000248 test +PUT 00000249 test +PUT 00000251 test +PUT 00000259 test +PUT 00000260 test +PUT 00000262 test +PUT 00000264 test +PUT 00000265 test +PUT 00000268 test +PUT 00000270 test +PUT 00000271 test +PUT 00000273 test +PUT 00000275 test +PUT 00000278 test +PUT 00000279 test +PUT 00000280 test +PUT 00000281 test +PUT 00000282 test +PUT 00000283 test +PUT 00000285 test +PUT 00000287 test +PUT 00000288 test +PUT 00000293 test +PUT 00000296 test +PUT 00000298 test +PUT 00000300 test +PUT 00000301 test +PUT 00000302 test +PUT 00000303 test +PUT 00000304 test +PUT 00000306 test +PUT 00000307 test +PUT 00000308 test +PUT 00000309 test +PUT 00000310 test +PUT 00000311 test +PUT 00000312 test +PUT 00000313 test +PUT 00000314 test +PUT 00000315 test +PUT 00000317 test +PUT 00000321 test +PUT 00000322 test +PUT 00000323 test +PUT 00000327 test +PUT 00000329 test +PUT 00000330 test +PUT 00000331 test +PUT 00000332 test +PUT 00000336 test +PUT 00000338 test +PUT 00000341 test +PUT 00000342 test +PUT 00000343 test +PUT 00000344 test +PUT 00000349 test +PUT 00000352 test +PUT 00000357 test +PUT 00000361 test +PUT 00000362 test +PUT 00000366 test +PUT 00000372 test +PUT 00000374 test +PUT 00000376 test +PUT 00000378 test +PUT 00000380 test +PUT 00000383 test +PUT 00000386 test +PUT 00000387 test +PUT 00000389 test +PUT 00000391 test +PUT 00000393 test +PUT 00000397 test +PUT 00000398 test +PUT 00000403 test +PUT 00000407 test +PUT 00000410 test +PUT 00000422 test +PUT 00000423 test +PUT 00000431 test +PUT 00000434 test +PUT 00000435 test +PUT 00000437 test +PUT 00000438 test +PUT 00000441 test +PUT 00000442 test +PUT 00000443 test +PUT 00000445 test +PUT 00000446 test +PUT 00000447 test +PUT 00000448 test +PUT 00000450 test +PUT 00000451 test +PUT 00000452 test +PUT 00000453 test +PUT 00000454 test +PUT 00000455 test +PUT 00000457 test +PUT 00000458 test +PUT 00000459 test +PUT 00000461 test +PUT 00000463 test +PUT 00000465 test +PUT 00000469 test +PUT 00000470 test +PUT 00000471 test +PUT 00000473 test +PUT 00000474 test +PUT 00000476 test +PUT 00000478 test +PUT 00000484 test +PUT 00000486 test +PUT 00000487 test +PUT 00000489 test +PUT 00000490 test +PUT 00000491 test +PUT 00000492 test +PUT 00000494 test +PUT 00000500 test +PUT 00000501 test +PUT 00000502 test +PUT 00000503 test +PUT 00000504 test +PUT 00000508 test +PUT 00000513 test +PUT 00000515 test +PUT 00000518 test +PUT 00000521 test +PUT 00000526 test +PUT 00000530 test +PUT 00000537 test +PUT 00000542 test +PUT 00000543 test +PUT 00000544 test +PUT 00000549 test +PUT 00000550 test +PUT 00000551 test +PUT 00000552 test +PUT 00000555 test +PUT 00000557 test +PUT 00000558 test +PUT 00000560 test +PUT 00000561 test +PUT 00000562 test +PUT 00000563 test +PUT 00000567 test +PUT 00000574 test +PUT 00000578 test +PUT 00000583 test +PUT 00000584 test +PUT 00000586 test +PUT 00000587 test +PUT 00000588 test +PUT 00000589 test +PUT 00000590 test +PUT 00000591 test +PUT 00000592 test +PUT 00000596 test +PUT 00000604 test +PUT 00000606 test +PUT 00000608 test +PUT 00000611 test +PUT 00000613 test +PUT 00000614 test +PUT 00000621 test +PUT 00000622 test +PUT 00000628 test +PUT 00000629 test +PUT 00000631 test +PUT 00000634 test +PUT 00000646 test +PUT 00000648 test +PUT 00000649 test +PUT 00000651 test +PUT 00000660 test +PUT 00000661 test +PUT 00000665 test +PUT 00000668 test +PUT 00000675 test +PUT 00000676 test +PUT 00000679 test +PUT 00000683 test +PUT 00000686 test +PUT 00000687 test +PUT 00000691 test +PUT 00000694 test +PUT 00000696 test +PUT 00000699 test +PUT 00000708 test +PUT 00000710 test +PUT 00000712 test +PUT 00000713 test +PUT 00000719 test +PUT 00000720 test +PUT 00000732 test +PUT 00000733 test +PUT 00000738 test +PUT 00000743 test +PUT 00000747 test +PUT 00000752 test +PUT 00000755 test +PUT 00000759 test +PUT 00000760 test +PUT 00000765 test +PUT 00000771 test +PUT 00000772 test +PUT 00000779 test +PUT 00000782 test +PUT 00000800 test +PUT 00000824 test +PUT 00000829 test +PUT 00000831 test +PUT 00000832 test +PUT 00000839 test +PUT 00000845 test +PUT 00000846 test +PUT 00000849 test +PUT 00000853 test +PUT 00000854 test +PUT 00000856 test +PUT 00000858 test +PUT 00000871 test +PUT 00000875 test +PUT 00000878 test +PUT 00000879 test +PUT 00000882 test +PUT 00000887 test +PUT 00000888 test +PUT 00000893 test +PUT 00000900 test +PUT 00000902 test +PUT 00000904 test +PUT 00000910 test +PUT 00000913 test +PUT 00000914 test +PUT 00000926 test +PUT 00000927 test +PUT 00000935 test +PUT 00000937 test +PUT 00000944 test +PUT 00000946 test +PUT 00000959 test +PUT 00000960 test +PUT 00000965 test +PUT 00000973 test +PUT 00000974 test +PUT 00000979 test +PUT 00000980 test +PUT 00000986 test +PUT 00000988 test +PUT 00000991 test +PUT 00000992 test +PUT 00000995 test +PUT 00000996 test +PUT 00000997 test +PUT 00000998 test +PUT 00000999 test +GET 00000012 +GET 00000001 +GET 00000038 +GET 00000048 +GET 00000002 +GET 00000974 +GET 00000077 +GET 00000366 +GET 00000001 +GET 00000001 +GET 00000765 +GET 00000634 +GET 00000148 +GET 00000075 +GET 00000500 +GET 00000007 +GET 00000317 +GET 00000003 +GET 00000264 +GET 00000031 +GET 00000192 +GET 00000691 +GET 00000019 +GET 00000015 +GET 00000037 +GET 00000111 +GET 00000001 +GET 00000998 +GET 00000001 +GET 00000521 +GET 00000544 +GET 00000069 +GET 00000001 +GET 00000913 +GET 00000007 +GET 00000555 +GET 00000004 +GET 00000431 +GET 00000307 +GET 00000946 +GET 00000007 +GET 00000085 +GET 00000070 +GET 00000893 +GET 00000062 +GET 00000002 +GET 00000904 +GET 00000040 +GET 00000240 +GET 00000001 +GET 00000011 +GET 00000070 +GET 00000002 +GET 00000048 +GET 00000423 +GET 00000023 +GET 00000389 +GET 00000489 +GET 00000079 +GET 00000034 +GET 00000158 +GET 00000001 +GET 00000452 +GET 00000031 +GET 00000442 +GET 00000016 +GET 00000562 +GET 00000824 +GET 00000387 +GET 00000241 +GET 00000504 +GET 00000858 +GET 00000273 +GET 00000002 +GET 00000108 +GET 00000845 +GET 00000049 +GET 00000050 +GET 00000038 +GET 00000508 +GET 00000012 +GET 00000303 +GET 00000054 +GET 00000003 +GET 00000010 +GET 00000021 +GET 00000012 +GET 00000037 +GET 00000445 +GET 00000022 +GET 00000383 +GET 00000017 +GET 00000986 +GET 00000187 +GET 00000156 +GET 00000091 +GET 00000502 +GET 00000008 +GET 00000001 +GET 00000308 +GET 00000008 +GET 00000019 +GET 00000374 +GET 00000009 +GET 00000021 +GET 00000001 +GET 00000122 +GET 00000049 +GET 00000003 +GET 00000246 +GET 00000854 +GET 00000648 +GET 00000004 +GET 00000992 +GET 00000001 +GET 00000004 +GET 00000099 +GET 00000195 +GET 00000959 +GET 00000137 +GET 00000240 +GET 00000233 +GET 00000033 +GET 00000710 +GET 00000103 +GET 00000719 +GET 00000017 +GET 00000008 +GET 00000071 +GET 00000443 +GET 00000005 +GET 00000094 +GET 00000457 +GET 00000001 +GET 00000075 +GET 00000001 +GET 00000676 +GET 00000019 +GET 00000247 +GET 00000002 +GET 00000474 +GET 00000012 +GET 00000022 +GET 00000082 +GET 00000031 +GET 00000021 +GET 00000042 +GET 00000002 +GET 00000631 +GET 00000245 +GET 00000102 +GET 00000676 +GET 00000248 +GET 00000001 +GET 00000005 +GET 00000001 +GET 00000050 +GET 00000006 +GET 00000344 +GET 00000080 +GET 00000336 +GET 00000025 +GET 00000003 +GET 00000003 +GET 00000036 +GET 00000037 +GET 00000306 +GET 00000001 +GET 00000038 +GET 00000080 +GET 00000487 +GET 00000002 +GET 00000738 +GET 00000003 +GET 00000782 +GET 00000007 +GET 00000302 +GET 00000557 +GET 00000003 +GET 00000513 +GET 00000127 +GET 00000451 +GET 00000046 +GET 00000772 +GET 00000005 +GET 00000463 +GET 00000054 +GET 00000012 +GET 00000494 +GET 00000152 +GET 00000200 +GET 00000163 +GET 00000083 +GET 00000020 +GET 00000349 +GET 00000490 +GET 00000064 +GET 00000057 +GET 00000660 +GET 00000003 +GET 00000002 +GET 00000393 +GET 00000991 +GET 00000109 +GET 00000264 +GET 00000124 +GET 00000039 +GET 00000002 +GET 00000755 +GET 00000007 +GET 00000518 +GET 00000887 +GET 00000023 +GET 00000003 +GET 00000018 +GET 00000696 +GET 00000016 +GET 00000001 +GET 00000349 +GET 00000448 +GET 00000578 +GET 00000902 +GET 00000022 +GET 00000069 +GET 00000012 +GET 00000478 +GET 00000155 +GET 00000330 +GET 00000025 +GET 00000002 +GET 00000824 +GET 00000478 +GET 00000101 +GET 00000022 +GET 00000201 +GET 00000102 +GET 00000403 +GET 00000829 +GET 00000094 +GET 00000469 +GET 00000008 +GET 00000058 +GET 00000352 +GET 00000341 +GET 00000518 +GET 00000013 +GET 00000009 +GET 00000001 +GET 00000162 +GET 00000283 +GET 00000590 +GET 00000010 +GET 00000001 +GET 00000240 +GET 00000063 +GET 00000006 +GET 00000018 +GET 00000004 +GET 00000015 +GET 00000205 +GET 00000293 +GET 00000965 +GET 00000107 +GET 00000004 +GET 00000070 +GET 00000513 +GET 00000022 +GET 00000043 +GET 00000001 +GET 00000322 +GET 00000139 +GET 00000501 +GET 00000029 +GET 00000223 +GET 00000031 +GET 00000058 +GET 00000001 +GET 00000281 +GET 00000275 +GET 00000189 +GET 00000004 +GET 00000846 +GET 00000007 +GET 00000239 +GET 00000001 +GET 00000583 +GET 00000309 +GET 00000249 +GET 00000036 +GET 00000035 +GET 00000220 +GET 00000628 +GET 00000144 +GET 00000033 +GET 00000045 +GET 00000002 +GET 00000002 +GET 00000040 +GET 00000104 +GET 00000103 +GET 00000010 +GET 00000001 +GET 00000057 +GET 00000303 +GET 00000008 +GET 00000338 +GET 00000005 +GET 00000135 +GET 00000009 +GET 00000067 +GET 00000372 +GET 00000086 +GET 00000002 +GET 00000025 +GET 00000054 +GET 00000172 +GET 00000002 +GET 00000088 +GET 00000980 +GET 00000278 +GET 00000001 +GET 00000217 +GET 00000280 +GET 00000397 +GET 00000125 +GET 00000171 +GET 00000543 +GET 00000604 +GET 00000049 +GET 00000979 +GET 00000342 +GET 00000003 +GET 00000176 +GET 00000549 +GET 00000362 +GET 00000006 +GET 00000003 +GET 00000973 +GET 00000048 +GET 00000037 +GET 00000001 +GET 00000062 +GET 00000410 +GET 00000010 +GET 00000262 +GET 00000039 +GET 00000012 +GET 00000011 +GET 00000537 +GET 00000675 +GET 00000438 +GET 00000168 +GET 00000220 +GET 00000321 +GET 00000063 +GET 00000760 +GET 00000056 +GET 00000006 +GET 00000016 +GET 00000068 +GET 00000839 +GET 00000035 +GET 00000162 +GET 00000105 +GET 00000999 +GET 00000135 +GET 00000120 +GET 00000088 +GET 00000110 +GET 00000038 +GET 00000300 +GET 00000308 +GET 00000003 +GET 00000629 +GET 00000193 +GET 00000018 +GET 00000026 +GET 00000503 +GET 00000563 +GET 00000586 +GET 00000013 +GET 00000592 +GET 00000003 +GET 00000007 +GET 00000021 +GET 00000560 +GET 00000422 +GET 00000233 +GET 00000668 +GET 00000003 +GET 00000010 +GET 00000712 +GET 00000613 +GET 00000017 +GET 00000014 +GET 00000376 +GET 00000567 +GET 00000198 +GET 00000245 +GET 00000621 +GET 00000035 +GET 00000002 +GET 00000049 +GET 00000020 +GET 00000927 +GET 00000268 +GET 00000001 +GET 00000398 +GET 00000270 +GET 00000231 +GET 00000589 +GET 00000587 +GET 00000100 +GET 00000006 +GET 00000926 +GET 00000196 +GET 00000041 +GET 00000009 +GET 00000060 +GET 00000584 +GET 00000001 +GET 00000380 +GET 00000001 +GET 00000001 +GET 00000331 +GET 00000016 +GET 00000099 +GET 00000888 +GET 00000003 +GET 00000470 +GET 00000071 +GET 00000747 +GET 00000550 +GET 00000052 +GET 00000771 +GET 00000040 +GET 00000186 +GET 00000686 +GET 00000004 +GET 00000110 +GET 00000028 +GET 00000562 +GET 00000001 +GET 00000454 +GET 00000015 +GET 00000552 +GET 00000588 +GET 00000110 +GET 00000106 +GET 00000100 +GET 00000051 +GET 00000001 +GET 00000119 +GET 00000362 +GET 00000085 +GET 00000069 +GET 00000172 +GET 00000001 +GET 00000001 +GET 00000079 +GET 00000132 +GET 00000042 +GET 00000099 +GET 00000378 +GET 00000063 +GET 00000448 +GET 00000002 +GET 00000001 +GET 00000486 +GET 00000020 +GET 00000001 +GET 00000089 +GET 00000017 +GET 00000003 +GET 00000935 +GET 00000001 +GET 00000006 +GET 00000100 +GET 00000234 +GET 00000002 +GET 00000596 +GET 00000108 +GET 00000075 +GET 00000089 +GET 00000020 +GET 00000048 +GET 00000028 +GET 00000591 +GET 00000513 +GET 00000003 +GET 00000007 +GET 00000120 +GET 00000052 +GET 00000285 +GET 00000011 +GET 00000304 +GET 00000020 +GET 00000090 +GET 00000002 +GET 00000024 +GET 00000995 +GET 00000998 +GET 00000282 +GET 00000043 +GET 00000712 +GET 00000002 +GET 00000270 +GET 00000201 +GET 00000879 +GET 00000474 +GET 00000084 +GET 00000344 +GET 00000831 +GET 00000033 +GET 00000069 +GET 00000008 +GET 00000023 +GET 00000191 +GET 00000019 +GET 00000606 +GET 00000099 +GET 00000034 +GET 00000011 +GET 00000265 +GET 00000997 +GET 00000008 +GET 00000058 +GET 00000298 +GET 00000002 +GET 00000006 +GET 00000109 +GET 00000287 +GET 00000013 +GET 00000341 +GET 00000232 +GET 00000191 +GET 00000003 +GET 00000011 +GET 00000089 +GET 00000031 +GET 00000312 +GET 00000002 +GET 00000882 +GET 00000003 +GET 00000143 +GET 00000140 +GET 00000732 +GET 00000007 +GET 00000574 +GET 00000022 +GET 00000453 +GET 00000331 +GET 00000053 +GET 00000007 +GET 00000719 +GET 00000144 +GET 00000016 +GET 00000002 +GET 00000098 +GET 00000041 +GET 00000484 +GET 00000733 +GET 00000217 +GET 00000389 +GET 00000036 +GET 00000009 +GET 00000979 +GET 00000679 +GET 00000180 +GET 00000008 +GET 00000457 +GET 00000046 +GET 00000025 +GET 00000024 +GET 00000034 +GET 00000092 +GET 00000174 +GET 00000438 +GET 00000028 +GET 00000611 +GET 00000013 +GET 00000288 +GET 00000106 +GET 00000342 +GET 00000039 +GET 00000474 +GET 00000550 +GET 00000423 +GET 00000526 +GET 00000001 +GET 00000038 +GET 00000015 +GET 00000622 +GET 00000174 +GET 00000871 +GET 00000049 +GET 00000675 +GET 00000040 +GET 00000002 +GET 00000054 +GET 00000010 +GET 00000011 +GET 00000118 +GET 00000459 +GET 00000095 +GET 00000197 +GET 00000476 +GET 00000032 +GET 00000279 +GET 00000006 +GET 00000445 +GET 00000016 +GET 00000032 +GET 00000093 +GET 00000960 +GET 00000120 +GET 00000315 +GET 00000205 +GET 00000218 +GET 00000521 +GET 00000002 +GET 00000032 +GET 00000227 +GET 00000443 +GET 00000003 +GET 00000022 +GET 00000093 +GET 00000712 +GET 00000434 +GET 00000083 +GET 00000301 +GET 00000132 +GET 00000011 +GET 00000738 +GET 00000001 +GET 00000447 +GET 00000031 +GET 00000504 +GET 00000515 +GET 00000064 +GET 00000036 +GET 00000003 +GET 00000149 +GET 00000022 +GET 00000614 +GET 00000031 +GET 00000025 +GET 00000007 +GET 00000551 +GET 00000066 +GET 00000005 +GET 00000021 +GET 00000231 +GET 00000560 +GET 00000001 +GET 00000030 +GET 00000996 +GET 00000018 +GET 00000045 +GET 00000010 +GET 00000136 +GET 00000435 +GET 00000003 +GET 00000914 +GET 00000010 +GET 00000321 +GET 00000201 +GET 00000450 +GET 00000125 +GET 00000001 +GET 00000003 +GET 00000001 +GET 00000651 +GET 00000013 +GET 00000030 +GET 00000111 +GET 00000111 +GET 00000215 +GET 00000021 +GET 00000249 +GET 00000055 +GET 00000024 +GET 00000147 +GET 00000004 +GET 00000067 +GET 00000002 +GET 00000184 +GET 00000143 +GET 00000013 +GET 00000088 +GET 00000260 +GET 00000001 +GET 00000001 +GET 00000004 +GET 00000022 +GET 00000001 +GET 00000009 +GET 00000329 +GET 00000135 +GET 00000229 +GET 00000163 +GET 00000009 +GET 00000001 +GET 00000596 +GET 00000138 +GET 00000646 +GET 00000098 +GET 00000283 +GET 00000001 +GET 00000153 +GET 00000343 +GET 00000117 +GET 00000001 +GET 00000060 +GET 00000853 +GET 00000075 +GET 00000032 +GET 00000116 +GET 00000738 +GET 00000071 +GET 00000311 +GET 00000029 +GET 00000001 +GET 00000296 +GET 00000234 +GET 00000182 +GET 00000011 +GET 00000191 +GET 00000492 +GET 00000162 +GET 00000175 +GET 00000910 +GET 00000900 +GET 00000175 +GET 00000004 +GET 00000686 +GET 00000170 +GET 00000070 +GET 00000001 +GET 00000020 +GET 00000012 +GET 00000465 +GET 00000163 +GET 00000109 +GET 00000052 +GET 00000342 +GET 00000054 +GET 00000182 +GET 00000029 +GET 00000649 +GET 00000064 +GET 00000005 +GET 00000450 +GET 00000455 +GET 00000026 +GET 00000503 +GET 00000116 +GET 00000002 +GET 00000030 +GET 00000099 +GET 00000065 +GET 00000002 +GET 00000465 +GET 00000096 +GET 00000097 +GET 00000271 +GET 00000059 +GET 00000002 +GET 00000145 +GET 00000001 +GET 00000779 +GET 00000558 +GET 00000037 +GET 00000800 +GET 00000001 +GET 00000683 +GET 00000070 +GET 00000028 +GET 00000007 +GET 00000043 +GET 00000026 +GET 00000085 +GET 00000108 +GET 00000001 +GET 00000139 +GET 00000132 +GET 00000003 +GET 00000002 +GET 00000393 +GET 00000061 +GET 00000461 +GET 00000024 +GET 00000314 +GET 00000035 +GET 00000011 +GET 00000002 +GET 00000001 +GET 00000608 +GET 00000561 +GET 00000024 +GET 00000007 +GET 00000752 +GET 00000251 +GET 00000156 +GET 00000015 +GET 00000031 +GET 00000521 +GET 00000002 +GET 00000313 +GET 00000720 +GET 00000007 +GET 00000004 +GET 00000064 +GET 00000243 +GET 00000003 +GET 00000010 +GET 00000121 +GET 00000665 +GET 00000065 +GET 00000441 +GET 00000050 +GET 00000162 +GET 00000008 +GET 00000050 +GET 00000832 +GET 00000879 +GET 00000009 +GET 00000308 +GET 00000104 +GET 00000259 +GET 00000002 +GET 00000138 +GET 00000014 +GET 00000102 +GET 00000001 +GET 00000048 +GET 00000153 +GET 00000006 +GET 00000002 +GET 00000002 +GET 00000013 +GET 00000492 +GET 00000849 +GET 00000066 +GET 00000878 +GET 00000163 +GET 00000239 +GET 00000327 +GET 00000069 +GET 00000341 +GET 00000001 +GET 00000407 +GET 00000179 +GET 00000132 +GET 00000003 +GET 00000067 +GET 00000076 +GET 00000007 +GET 00000146 +GET 00000003 +GET 00000025 +GET 00000121 +GET 00000178 +GET 00000491 +GET 00000683 +GET 00000310 +GET 00000002 +GET 00000051 +GET 00000012 +GET 00000442 +GET 00000465 +GET 00000023 +GET 00000029 +GET 00000001 +GET 00000003 +GET 00000021 +GET 00000856 +GET 00000135 +GET 00000105 +GET 00000018 +GET 00000001 +GET 00000309 +GET 00000088 +GET 00000188 +GET 00000108 +GET 00000944 +GET 00000309 +GET 00000080 +GET 00000017 +GET 00000097 +GET 00000008 +GET 00000002 +GET 00000262 +GET 00000044 +GET 00000446 +GET 00000343 +GET 00000937 +GET 00000092 +GET 00000055 +GET 00000490 +GET 00000001 +GET 00000008 +GET 00000002 +GET 00000473 +GET 00000352 +GET 00000001 +GET 00000275 +GET 00000007 +GET 00000241 +GET 00000233 +GET 00000003 +GET 00000713 +GET 00000068 +GET 00000100 +GET 00000023 +GET 00000357 +GET 00000019 +GET 00000323 +GET 00000022 +GET 00000234 +GET 00000005 +GET 00000053 +GET 00000043 +GET 00000002 +GET 00000018 +GET 00000039 +GET 00000002 +GET 00000743 +GET 00000296 +GET 00000009 +GET 00000007 +GET 00000437 +GET 00000088 +GET 00000008 +GET 00000926 +GET 00000003 +GET 00000386 +GET 00000988 +GET 00000001 +GET 00000011 +GET 00000026 +GET 00000332 +GET 00000015 +GET 00000699 +GET 00000001 +GET 00000084 +GET 00000687 +GET 00000005 +GET 00000011 +GET 00000031 +GET 00000391 +GET 00000146 +GET 00000042 +GET 00000023 +GET 00000018 +GET 00000073 +GET 00000033 +GET 00000007 +GET 00000001 +GET 00000442 +GET 00000458 +GET 00000542 +GET 00000127 +GET 00000014 +GET 00000362 +GET 00000361 +GET 00000001 +GET 00000759 +GET 00000040 +GET 00000471 +GET 00000366 +GET 00000357 +GET 00000875 +GET 00000017 +GET 00000002 +GET 00000247 +GET 00000871 +GET 00000001 +GET 00000004 +GET 00000001 +GET 00000004 +GET 00000013 +GET 00000100 +GET 00000055 +GET 00000005 +GET 00000530 +GET 00000708 +GET 00000006 +GET 00000694 +GET 00000073 +GET 00000001 +GET 00000661 +GET 00000092 +GET 00000052 +GET 00000030 +GET 00000117 +GET 00000074 +GET 00000021 +GET 00000478 +GET 00000223 From 447a66eb953f486e7d6e2be2b696165bc0024931 Mon Sep 17 00:00:00 2001 From: Saurav Chhatrapati Date: Wed, 3 Apr 2019 08:43:34 +0000 Subject: [PATCH 03/15] Added heavy hitters sketch --- kvs/include/adaptive_heavy_hitters.hpp | 253 +++++++++++++++++++ kvs/include/heavy_hitters.hpp | 89 +++++++ kvs/include/kvs/kvs_handlers.hpp | 6 +- kvs/include/kvs_common.hpp | 1 + kvs/include/metadata.hpp | 4 +- kvs/include/monitor/monitoring_handlers.hpp | 4 +- kvs/include/monitor/monitoring_utils.hpp | 16 +- kvs/include/monitor/policies.hpp | 6 +- kvs/src/kvs/replication_response_handler.cpp | 6 +- kvs/src/kvs/server.cpp | 73 ++++-- kvs/src/kvs/user_request_handler.cpp | 5 +- kvs/src/monitor/membership_handler.cpp | 20 +- kvs/src/monitor/monitoring.cpp | 39 ++- kvs/src/monitor/movement_policy.cpp | 12 +- kvs/src/monitor/slo_policy.cpp | 34 ++- kvs/src/monitor/stats_helpers.cpp | 78 +++++- kvs/tests/kvs/test_user_request_handler.hpp | 20 +- scripts/start-kvs-local.sh | 3 +- 18 files changed, 604 insertions(+), 65 deletions(-) create mode 100644 kvs/include/adaptive_heavy_hitters.hpp create mode 100644 kvs/include/heavy_hitters.hpp diff --git a/kvs/include/adaptive_heavy_hitters.hpp b/kvs/include/adaptive_heavy_hitters.hpp new file mode 100644 index 00000000..1a96a988 --- /dev/null +++ b/kvs/include/adaptive_heavy_hitters.hpp @@ -0,0 +1,253 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "heavy_hitters.hpp" +#include +#include +#include + +#define alpha 0.2 + +typedef std::string Key; + +class AdaptiveThresholdHeavyHitters { +protected: + HeavyHittersSketch* hh_sketch; + float threshold_percent = 0.01; + float gamma = 4127; + float epsilon = 0.001; + + std::unordered_set total_set; + + std::unordered_map hot_map; + std::unordered_map cold_map; + + int hot_threshold; + int cold_threshold; + + std::chrono::system_clock::time_point last_update_time; + + void set_values() { + int B_arg = (int)(ceil(exp(1)/epsilon)); + int l_arg = (int)(ceil(log(gamma))); + int** hash_functions_arg = get_hash_functions(l_arg); + std::unordered_set reset_total_set; + std::unordered_map reset_hot_map; + std::unordered_map reset_cold_map; + + total_set = reset_total_set; + hot_map = reset_hot_map; + cold_map = reset_cold_map; + + hh_sketch = new HeavyHittersSketch(hash_functions_arg, l_arg, B_arg); + + hot_threshold = 0; + cold_threshold = INT_MIN; + + last_update_time = std::chrono::system_clock::now(); + }; + + int partition(int list[], int left, int right, int pivotIndex) { + int pivotValue = list[pivotIndex]; + + int tmp = list[pivotIndex]; + list[pivotIndex] = list[right]; + list[right] = tmp; + + int storeIndex = left; + for (int i = left; i < right - 1; i++) + { + if (list[i] < pivotValue) + { + tmp = list[storeIndex]; + list[storeIndex] = list[i]; + list[i] = list[storeIndex]; + + storeIndex++; + } + } + + tmp = list[right]; + list[right] = list[storeIndex]; + list[storeIndex] = list[right]; + return storeIndex; + }; + + int select(int list[], int left, int right, int k) { + if (left == right) + { + return list[left]; + } + + int pivotIndex = right; + + pivotIndex = partition(list, left, right, pivotIndex); + + if (k == pivotIndex) + { + return list[k]; + } + else if (k < pivotIndex) + { + return select(list, left, pivotIndex - 1, k); + } + else + { + return select(list, pivotIndex + 1, right, k); + } + }; + + void update_hot(void) { + int* vals; + std::unordered_map new_hot_map; + std::vector val_vec; + int val_size = 0; + + for(auto kv: hot_map) { + val_size = val_size + 1; + val_vec.push_back(kv.second); + } + + vals = (int*)(&val_vec[0]); + + int median = select(vals, 0, val_size - 1, 1); + + for(auto kv: hot_map) { + if(kv.second > median) { + new_hot_map[kv.first] = kv.second; + } + } + + hot_map = new_hot_map; + hot_threshold = median; + }; + + + void update_cold(void) { + int* vals; + std::unordered_map new_cold_map; + std::vector val_vec; + int val_size = 0; + + for(auto kv: cold_map) { + val_size = val_size + 1; + val_vec.push_back(kv.second); + } + + vals = &val_vec[0]; + + int median = (-1 * select(vals, 0, val_size - 1, 1)); + + for(auto kv: cold_map) { + if((-1 * kv.second) >= median) { + new_cold_map[kv.first] = kv.second; + } + } + + cold_map = new_cold_map; + cold_threshold = median; + }; + + int** get_hash_functions(int l) { + int **hash_functions; + srand(time(NULL)); + hash_functions = new int *[l]; + for(unsigned i = 0; i < l; i++) { + hash_functions[i] = new int[2]; + hash_functions[i][0] = int(float(rand())*float(large_prime)/float(RAND_MAX) + 1); + hash_functions[i][1] = int(float(rand())*float(large_prime)/float(RAND_MAX) + 1); + } + return hash_functions; + }; + +public: + AdaptiveThresholdHeavyHitters() { + set_values(); + }; + + void report_key(Key key) { + total_set.insert(key); + + int new_count = (*hh_sketch).update(key); + + if(new_count > hot_threshold) { + hot_map[key] = new_count; + } + + if((-1 * new_count) >= cold_threshold) { + cold_map[key] = new_count; + } else { + if(cold_map.find(key) != cold_map.end()) { + cold_map[key] = new_count; + } + } + + std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); + std::chrono::duration passed = now - last_update_time; + double passed_num = passed.count(); + + if(passed_num > 10) { + int total_size = total_set.size(); + int hot_size = hot_map.size(); + if (hot_size > (threshold_percent * total_size)) { + update_hot(); + } + + int cold_size = cold_map.size(); + if (cold_size > (threshold_percent * total_size)) { + update_cold(); + } + last_update_time = now; + } + }; + + int get_key_count(Key key) { + return (*hh_sketch).estimate(key); + }; + + std::unordered_map get_hot_map(void) { + return hot_map; + }; + + std::unordered_map get_cold_map(void) { + return cold_map; + }; + + int get_hot_threshold() { + return hot_threshold; + }; + + int get_cold_threshold() { + return cold_threshold; + }; + + int get_total_size() { + return total_set.size(); + }; + + void reset() { + set_values(); + }; + + // static void reset_threshold_percent(float new_threshold) { + // threshold_percent = new_threshold; + // }; + + // static void reset_error(float new_epsilon) { + // epsilon = new_epsilon; + // }; + + // static void update_gamma(int total_hits, int num_hh) { + // float avg_hit = (1.0 * total_hits) / num_hh; + // gamma = (alpha * avg_hit) + ((1 - alpha) * gamma); + // }; +}; diff --git a/kvs/include/heavy_hitters.hpp b/kvs/include/heavy_hitters.hpp new file mode 100644 index 00000000..7149baaa --- /dev/null +++ b/kvs/include/heavy_hitters.hpp @@ -0,0 +1,89 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +typedef std::string Key; + +const long large_prime = 4294967311l; + +class HeavyHittersSketch { +protected: + unsigned l, B; + + int **hash_functions; + int **sketch_array; + + unsigned long hash_key(Key key) { + unsigned long hash = 5381; + int char_int = 0; + for(unsigned i = 0; i < key.length(); i++) { + char_int = (int)(key.at(i)); + hash = ((hash << 5) + hash) + char_int; + } + + return hash; + }; + + unsigned location(int i, unsigned long hash) { + return (unsigned)(((long)hash_functions[i][0]*hash+hash_functions[i][1])%large_prime%B); + }; + + void set_values(int **hash_functions_arg, int l_arg, int B_arg) { + hash_functions = hash_functions_arg; + l = l_arg; + B = B_arg; + + sketch_array = new int *[l]; + for(unsigned i = 0; i < l; i++) { + sketch_array[i] = new int[B]; + for(unsigned j = 0; j < B; j++) { + sketch_array[i][j] = 0; + } + } + }; + +public: + HeavyHittersSketch(int **hash_functions_arg, int l_arg, int B_arg) { + set_values(hash_functions_arg, l_arg, B_arg); + }; + + int update(Key key) { + unsigned long hash = hash_key(key); + + int mincount = 0; + unsigned hashed_location = 0; + for (unsigned i = 0; i < l; i++) { + hashed_location = location(i, hash); + sketch_array[i][hashed_location] = sketch_array[i][hashed_location] + 1; + if((sketch_array[i][hashed_location] < mincount) or (i == 0)) { + mincount = sketch_array[i][hashed_location]; + } + } + + return mincount; + }; + + int estimate(Key key) { + unsigned long hash = hash_key(key); + + int mincount = 0; + unsigned hashed_location = 0; + for (unsigned i = 0; i < l; i++) { + hashed_location = location(i, hash); + if((sketch_array[i][hashed_location] < mincount) or (i == 0)) { + mincount = sketch_array[i][hashed_location]; + } + } + + return mincount; + }; + + void reset(int **hash_functions_arg, int l_arg, int B_arg) { + set_values(hash_functions_arg, l_arg, B_arg); + }; +}; \ No newline at end of file diff --git a/kvs/include/kvs/kvs_handlers.hpp b/kvs/include/kvs/kvs_handlers.hpp index c64b20c6..b1cee1c2 100644 --- a/kvs/include/kvs/kvs_handlers.hpp +++ b/kvs/include/kvs/kvs_handlers.hpp @@ -54,7 +54,8 @@ void user_request_handler( map>& key_access_tracker, map& stored_key_map, map& key_replication_map, set& local_changeset, - ServerThread& wt, SerializerMap& serializers, SocketCache& pushers); + ServerThread& wt, SerializerMap& serializers, SocketCache& pushers, + AdaptiveThresholdHeavyHitters* sketch); void gossip_handler(unsigned& seed, string& serialized, map& global_hash_rings, @@ -74,7 +75,8 @@ void replication_response_handler( map>& key_access_tracker, map& stored_key_map, map& key_replication_map, set& local_changeset, - ServerThread& wt, SerializerMap& serializers, SocketCache& pushers); + ServerThread& wt, SerializerMap& serializers, SocketCache& pushers, + AdaptiveThresholdHeavyHitters* sketch); void replication_change_handler(Address public_ip, Address private_ip, unsigned thread_id, unsigned& seed, logger log, diff --git a/kvs/include/kvs_common.hpp b/kvs/include/kvs_common.hpp index 765692ff..fb814272 100644 --- a/kvs/include/kvs_common.hpp +++ b/kvs/include/kvs_common.hpp @@ -16,6 +16,7 @@ #define KVS_INCLUDE_KVS_COMMON_HPP_ #include "kvs_types.hpp" +#include "adaptive_heavy_hitters.hpp" const unsigned kMetadataReplicationFactor = 1; const unsigned kMetadataLocalReplicationFactor = 1; diff --git a/kvs/include/metadata.hpp b/kvs/include/metadata.hpp index 16841bc3..9f7a00cb 100644 --- a/kvs/include/metadata.hpp +++ b/kvs/include/metadata.hpp @@ -97,7 +97,7 @@ inline bool is_metadata(Key key) { // NOTE: This needs to be here because it needs the definition of TierMetadata extern map kTierMetadata; -enum MetadataType { replication, server_stats, key_access, key_size }; +enum MetadataType { replication, server_stats, key_access, key_size, key_access_hot, key_access_cold }; inline Key get_metadata_key(const ServerThread& st, unsigned tier_id, unsigned thread_num, MetadataType type) { @@ -106,6 +106,8 @@ inline Key get_metadata_key(const ServerThread& st, unsigned tier_id, switch (type) { case MetadataType::server_stats: metadata_type = "stats"; break; case MetadataType::key_access: metadata_type = "access"; break; + case MetadataType::key_access_hot: metadata_type = "hot_access"; break; + case MetadataType::key_access_cold: metadata_type = "cold_access"; break; case MetadataType::key_size: metadata_type = "size"; break; default: return ""; // this should never happen; see note below about diff --git a/kvs/include/monitor/monitoring_handlers.hpp b/kvs/include/monitor/monitoring_handlers.hpp index d8f4c195..684d14f7 100644 --- a/kvs/include/monitor/monitoring_handlers.hpp +++ b/kvs/include/monitor/monitoring_handlers.hpp @@ -25,7 +25,9 @@ void membership_handler(logger log, string& serialized, StorageStats& memory_storage, StorageStats& ebs_storage, OccupancyStats& memory_occupancy, OccupancyStats& ebs_occupancy, - map>& key_access_frequency); + map>& key_access_frequency, + map>& hot_key_access_frequency, + map>& cold_key_access_frequency); void depart_done_handler(logger log, string& serialized, map& departing_node_map, diff --git a/kvs/include/monitor/monitoring_utils.hpp b/kvs/include/monitor/monitoring_utils.hpp index 12033cc1..7d846bc7 100644 --- a/kvs/include/monitor/monitoring_utils.hpp +++ b/kvs/include/monitor/monitoring_utils.hpp @@ -50,6 +50,10 @@ struct SummaryStats { void clear() { key_access_mean = 0; key_access_std = 0; + hot_key_access_mean = 0; + hot_key_access_std = 0; + cold_key_access_mean = 0; + cold_key_access_std = 0; total_memory_access = 0; total_ebs_access = 0; total_memory_consumption = 0; @@ -74,6 +78,10 @@ struct SummaryStats { SummaryStats() { clear(); } double key_access_mean; double key_access_std; + double hot_key_access_mean; + double hot_key_access_std; + double cold_key_access_mean; + double cold_key_access_std; unsigned total_memory_access; unsigned total_ebs_access; unsigned long long total_memory_consumption; @@ -101,6 +109,8 @@ void collect_internal_stats( map& local_hash_rings, SocketCache& pushers, MonitoringThread& mt, zmq::socket_t& response_puller, logger log, unsigned& rid, map>& key_access_frequency, + map>& hot_key_access_frequency, + map>& cold_key_access_frequency, map& key_size, StorageStats& memory_storage, StorageStats& ebs_storage, OccupancyStats& memory_occupancy, OccupancyStats& ebs_occupancy, AccessStats& memory_access, @@ -108,10 +118,14 @@ void collect_internal_stats( void compute_summary_stats( map>& key_access_frequency, + map>& hot_key_access_frequency, + map>& cold_key_access_frequency, StorageStats& memory_storage, StorageStats& ebs_storage, OccupancyStats& memory_occupancy, OccupancyStats& ebs_occupancy, AccessStats& memory_access, AccessStats& ebs_access, - map& key_access_summary, SummaryStats& ss, logger log, + map& key_access_summary, + map& hot_key_access_summary, + map& cold_key_access_summary, SummaryStats& ss, logger log, unsigned& server_monitoring_epoch); void collect_external_stats(map& user_latency, diff --git a/kvs/include/monitor/policies.hpp b/kvs/include/monitor/policies.hpp index 83e4fda6..6569a2bf 100644 --- a/kvs/include/monitor/policies.hpp +++ b/kvs/include/monitor/policies.hpp @@ -34,6 +34,8 @@ void movement_policy(logger log, map& global_hash_rings, Address management_ip, map& key_replication_map, map& key_access_summary, + map& hot_key_access_summary, + map& cold_key_access_summary, map& key_size, MonitoringThread& mt, SocketCache& pushers, zmq::socket_t& response_puller, vector
& routing_ips, unsigned& rid); @@ -44,7 +46,9 @@ void slo_policy(logger log, map& global_hash_rings, unsigned& memory_node_number, unsigned& adding_memory_node, bool& removing_memory_node, Address management_ip, map& key_replication_map, - map& key_access_summary, MonitoringThread& mt, + map& key_access_summary, + map& hot_key_access_summary, + map& cold_key_access_summary, MonitoringThread& mt, map& departing_node_map, SocketCache& pushers, zmq::socket_t& response_puller, vector
& routing_ips, unsigned& rid, diff --git a/kvs/src/kvs/replication_response_handler.cpp b/kvs/src/kvs/replication_response_handler.cpp index 5b592dbf..8cdf4abf 100644 --- a/kvs/src/kvs/replication_response_handler.cpp +++ b/kvs/src/kvs/replication_response_handler.cpp @@ -23,7 +23,9 @@ void replication_response_handler( map>& key_access_tracker, map& stored_key_map, map& key_replication_map, set& local_changeset, - ServerThread& wt, SerializerMap& serializers, SocketCache& pushers) { + ServerThread& wt, SerializerMap& serializers, SocketCache& pushers, + AdaptiveThresholdHeavyHitters* sketch) { + KeyResponse response; response.ParseFromString(serialized); @@ -119,6 +121,7 @@ void replication_response_handler( process_put(key, request.lattice_type_, request.payload_, serializers[request.lattice_type_], stored_key_map); key_access_tracker[key].insert(now); + sketch->report_key(key); access_count += 1; local_changeset.insert(key); @@ -168,6 +171,7 @@ void replication_response_handler( } } key_access_tracker[key].insert(now); + sketch->report_key(key); access_count += 1; string serialized_response; diff --git a/kvs/src/kvs/server.cpp b/kvs/src/kvs/server.cpp index c5fac55a..fced2fbe 100644 --- a/kvs/src/kvs/server.cpp +++ b/kvs/src/kvs/server.cpp @@ -282,6 +282,9 @@ void run(unsigned thread_id, Address public_ip, Address private_ip, unsigned long long working_time_map[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; unsigned epoch = 0; + // Initialize a Heavy Hitters Sketch + AdaptiveThresholdHeavyHitters* sketch = new AdaptiveThresholdHeavyHitters(); + // enter event loop while (true) { kZmqUtil->poll(0, &pollitems); @@ -335,7 +338,7 @@ void run(unsigned thread_id, Address public_ip, Address private_ip, global_hash_rings, local_hash_rings, pending_requests, key_access_tracker, stored_key_map, key_replication_map, local_changeset, wt, - serializers, pushers); + serializers, pushers, sketch); auto time_elapsed = std::chrono::duration_cast( std::chrono::system_clock::now() - work_start) @@ -369,7 +372,7 @@ void run(unsigned thread_id, Address public_ip, Address private_ip, seed, access_count, log, serialized, global_hash_rings, local_hash_rings, pending_requests, pending_gossip, key_access_tracker, stored_key_map, key_replication_map, - local_changeset, wt, serializers, pushers); + local_changeset, wt, serializers, pushers, sketch); auto time_elapsed = std::chrono::duration_cast( std::chrono::system_clock::now() - work_start) @@ -523,33 +526,22 @@ void run(unsigned thread_id, Address public_ip, Address private_ip, kZmqUtil->send_string(serialized, &pushers[target_address]); } - // compute key access stats + // Get map of hot keys + std::unordered_map hot_key_map = sketch->get_hot_map(); KeyAccessData access; - auto current_time = std::chrono::system_clock::now(); - - for (const auto& key_access_pair : key_access_tracker) { + for (const auto& key_access_pair : hot_key_map) { Key key = key_access_pair.first; - auto access_times = key_access_pair.second; - - // garbage collect - for (const auto& time : access_times) { - if (std::chrono::duration_cast(current_time - - time) - .count() >= kKeyMonitoringThreshold) { - access_times.erase(time); - break; - } - } + unsigned count = key_access_pair.second; // update key_access_frequency KeyAccessData_KeyCount* tp = access.add_keys(); tp->set_key(key); - tp->set_access_count(access_times.size()); + tp->set_access_count(count); } - // report key access stats + // report hot key access stats key = - get_metadata_key(wt, kSelfTierId, wt.tid(), MetadataType::key_access); + get_metadata_key(wt, kSelfTierId, wt.tid(), MetadataType::key_access_hot); string serialized_access; access.SerializeToString(&serialized_access); @@ -571,6 +563,47 @@ void run(unsigned thread_id, Address public_ip, Address private_ip, kZmqUtil->send_string(serialized, &pushers[target_address]); } + // Get map of cold keys + std::unordered_map cold_key_map = sketch->get_cold_map(); + KeyAccessData cold_access; + for (const auto& key_access_pair : cold_key_map) { + Key key = key_access_pair.first; + unsigned count = key_access_pair.second; + + // update key_access_frequency + KeyAccessData_KeyCount* tp = cold_access.add_keys(); + tp->set_key(key); + tp->set_access_count(count); + } + + // report cold key access stats + key = + get_metadata_key(wt, kSelfTierId, wt.tid(), MetadataType::key_access_cold); + string cold_serialized_access; + cold_access.SerializeToString(&cold_serialized_access); + + req.Clear(); + req.set_type(RequestType::PUT); + prepare_put_tuple(req, key, LatticeType::LWW, + serialize(ts, cold_serialized_access)); + + threads = kHashRingUtil->get_responsible_threads_metadata( + key, global_hash_rings[kMemoryTierId], + local_hash_rings[kMemoryTierId]); + + if (threads.size() != 0) { + Address target_address = + std::next(begin(threads), rand_r(&seed) % threads.size()) + ->key_request_connect_address(); + string serialized; + req.SerializeToString(&serialized); + kZmqUtil->send_string(serialized, &pushers[target_address]); + } + + // Reset sketch for next epoch + sketch->reset(); + + // report key size stats KeySizeData primary_key_size; for (const auto& key_pair : stored_key_map) { if (is_primary_replica(key_pair.first, key_replication_map, diff --git a/kvs/src/kvs/user_request_handler.cpp b/kvs/src/kvs/user_request_handler.cpp index c5ab0a69..0eb3a5b0 100644 --- a/kvs/src/kvs/user_request_handler.cpp +++ b/kvs/src/kvs/user_request_handler.cpp @@ -22,7 +22,9 @@ void user_request_handler( map>& key_access_tracker, map& stored_key_map, map& key_replication_map, set& local_changeset, - ServerThread& wt, SerializerMap& serializers, SocketCache& pushers) { + ServerThread& wt, SerializerMap& serializers, SocketCache& pushers, + AdaptiveThresholdHeavyHitters* sketch) { + KeyRequest request; request.ParseFromString(serialized); @@ -114,6 +116,7 @@ void user_request_handler( } key_access_tracker[key].insert(std::chrono::system_clock::now()); + sketch->report_key(key); access_count += 1; } } else { diff --git a/kvs/src/monitor/membership_handler.cpp b/kvs/src/monitor/membership_handler.cpp index ce1d5648..2370e199 100644 --- a/kvs/src/monitor/membership_handler.cpp +++ b/kvs/src/monitor/membership_handler.cpp @@ -21,7 +21,9 @@ void membership_handler( vector
& routing_ips, StorageStats& memory_storage, StorageStats& ebs_storage, OccupancyStats& memory_occupancy, OccupancyStats& ebs_occupancy, - map>& key_access_frequency) { + map>& key_access_frequency, + map>& hot_key_access_frequency, + map>& cold_key_access_frequency) { vector v; split(serialized, ':', v); @@ -76,7 +78,13 @@ void membership_handler( memory_occupancy.erase(new_server_private_ip); // NOTE: No const here because we are calling erase - for (auto& key_access_pair : key_access_frequency) { + for (auto& key_access_pair : hot_key_access_frequency) { + for (unsigned i = 0; i < kMemoryThreadCount; i++) { + key_access_pair.second.erase(new_server_private_ip + ":" + + std::to_string(i)); + } + } + for (auto& key_access_pair : cold_key_access_frequency) { for (unsigned i = 0; i < kMemoryThreadCount; i++) { key_access_pair.second.erase(new_server_private_ip + ":" + std::to_string(i)); @@ -87,7 +95,13 @@ void membership_handler( ebs_occupancy.erase(new_server_private_ip); // NOTE: No const here because we are calling erase - for (auto& key_access_pair : key_access_frequency) { + for (auto& key_access_pair : hot_key_access_frequency) { + for (unsigned i = 0; i < kEbsThreadCount; i++) { + key_access_pair.second.erase(new_server_private_ip + ":" + + std::to_string(i)); + } + } + for (auto& key_access_pair : cold_key_access_frequency) { for (unsigned i = 0; i < kEbsThreadCount; i++) { key_access_pair.second.erase(new_server_private_ip + ":" + std::to_string(i)); diff --git a/kvs/src/monitor/monitoring.cpp b/kvs/src/monitor/monitoring.cpp index 75b979d7..96ca906a 100644 --- a/kvs/src/monitor/monitoring.cpp +++ b/kvs/src/monitor/monitoring.cpp @@ -92,8 +92,16 @@ int main(int argc, char *argv[]) { unsigned ebs_node_number; // keep track of the keys' access by worker address map> key_access_frequency; + // keep track of the hot keys' access by worker address + map> hot_key_access_frequency; + // keep track of the cold keys' access by worker address + map> cold_key_access_frequency; // keep track of the keys' access summary map key_access_summary; + // keep track of the hot keys' access summary + map hot_key_access_summary; + // keep track of the cold keys' access summary + map cold_key_access_summary; // keep track of the size of each key-value pair map key_size; // keep track of memory tier storage consumption @@ -176,7 +184,8 @@ int main(int argc, char *argv[]) { membership_handler(log, serialized, global_hash_rings, adding_memory_node, adding_ebs_node, grace_start, routing_ips, memory_storage, ebs_storage, memory_occupancy, - ebs_occupancy, key_access_frequency); + ebs_occupancy, key_access_frequency, hot_key_access_frequency, + cold_key_access_frequency); } // handle a depart done notification @@ -207,6 +216,10 @@ int main(int argc, char *argv[]) { // clear stats key_access_frequency.clear(); key_access_summary.clear(); + hot_key_access_frequency.clear(); + hot_key_access_summary.clear(); + cold_key_access_frequency.clear(); + cold_key_access_summary.clear(); memory_storage.clear(); ebs_storage.clear(); @@ -223,20 +236,30 @@ int main(int argc, char *argv[]) { // collect internal statistics collect_internal_stats( global_hash_rings, local_hash_rings, pushers, mt, response_puller, - log, rid, key_access_frequency, key_size, memory_storage, ebs_storage, + log, rid, key_access_frequency, hot_key_access_frequency, cold_key_access_frequency, + key_size, memory_storage, ebs_storage, memory_occupancy, ebs_occupancy, memory_accesses, ebs_accesses); // compute summary statistics - compute_summary_stats(key_access_frequency, memory_storage, ebs_storage, + compute_summary_stats(key_access_frequency, hot_key_access_frequency, cold_key_access_frequency, + memory_storage, ebs_storage, memory_occupancy, ebs_occupancy, memory_accesses, - ebs_accesses, key_access_summary, ss, log, + ebs_accesses, key_access_summary, + hot_key_access_summary, cold_key_access_summary, + ss, log, server_monitoring_epoch); // collect external statistics collect_external_stats(user_latency, user_throughput, ss, log); // initialize replication factor for new keys - for (const auto &key_access_pair : key_access_summary) { + for (const auto &key_access_pair : hot_key_access_summary) { + Key key = key_access_pair.first; + if (!is_metadata(key) && metadata_map.find(key) == metadata_map.end()) { + init_replication(metadata_map, key); + } + } + for (const auto &key_access_pair : cold_key_access_summary) { Key key = key_access_pair.first; if (!is_metadata(key) && key_replication_map.find(key) == key_replication_map.end()) { @@ -253,12 +276,14 @@ int main(int argc, char *argv[]) { movement_policy(log, global_hash_rings, local_hash_rings, grace_start, ss, memory_node_number, ebs_node_number, adding_memory_node, adding_ebs_node, management_ip, key_replication_map, - key_access_summary, key_size, mt, pushers, + key_access_summary, hot_key_access_summary, cold_key_access_summary, + key_size, mt, pushers, response_puller, routing_ips, rid); slo_policy(log, global_hash_rings, local_hash_rings, grace_start, ss, memory_node_number, adding_memory_node, removing_memory_node, - management_ip, key_replication_map, key_access_summary, mt, + management_ip, key_replication_map, key_access_summary, + hot_key_access_summary, cold_key_access_summary, mt, departing_node_map, pushers, response_puller, routing_ips, rid, latency_miss_ratio_map); diff --git a/kvs/src/monitor/movement_policy.cpp b/kvs/src/monitor/movement_policy.cpp index e64fcd6f..5febc6b6 100644 --- a/kvs/src/monitor/movement_policy.cpp +++ b/kvs/src/monitor/movement_policy.cpp @@ -23,6 +23,8 @@ void movement_policy(logger log, map& global_hash_rings, Address management_ip, map& key_replication_map, map& key_access_summary, + map& hot_key_access_summary, + map& cold_key_access_summary, map& key_size, MonitoringThread& mt, SocketCache& pushers, zmq::socket_t& response_puller, vector
& routing_ips, unsigned& rid) { @@ -36,7 +38,7 @@ void movement_policy(logger log, map& global_hash_rings, ss.total_memory_consumption); bool overflow = false; - for (const auto& key_access_pair : key_access_summary) { + for (const auto& key_access_pair : hot_key_access_summary) { Key key = key_access_pair.first; unsigned access_count = key_access_pair.second; @@ -89,7 +91,7 @@ void movement_policy(logger log, map& global_hash_rings, ss.total_ebs_consumption); overflow = false; - for (const auto& key_access_pair : key_access_summary) { + for (const auto& key_access_pair : cold_key_access_summary) { Key key = key_access_pair.first; unsigned access_count = key_access_pair.second; @@ -129,14 +131,14 @@ void movement_policy(logger log, map& global_hash_rings, // reduce the replication factor of some keys that are not so hot anymore KeyReplication minimum_rep = create_new_replication_vector(1, kMinimumReplicaNumber - 1, 1, 1); - for (const auto& key_access_pair : key_access_summary) { + for (const auto& key_access_pair : cold_key_access_summary) { Key key = key_access_pair.first; unsigned access_count = key_access_pair.second; - if (!is_metadata(key) && access_count <= ss.key_access_mean && + if (!is_metadata(key) && !(key_replication_map[key] == minimum_rep)) { log->info("Key {} accessed {} times (threshold is {}).", key, - access_count, ss.key_access_mean); + access_count, ss.cold_key_access_mean + ss.cold_key_access_std); requests[key] = create_new_replication_vector(1, kMinimumReplicaNumber - 1, 1, 1); log->info("Dereplication for key {}. M: {}->{}. E: {}->{}", key, diff --git a/kvs/src/monitor/slo_policy.cpp b/kvs/src/monitor/slo_policy.cpp index 631b6b73..118a4824 100644 --- a/kvs/src/monitor/slo_policy.cpp +++ b/kvs/src/monitor/slo_policy.cpp @@ -21,7 +21,9 @@ void slo_policy(logger log, map& global_hash_rings, unsigned& memory_node_number, unsigned& adding_memory_node, bool& removing_memory_node, Address management_ip, map& key_replication_map, - map& key_access_summary, MonitoringThread& mt, + map& key_access_summary, + map& hot_key_access_summary, + map& cold_key_access_summary, MonitoringThread& mt, map& departing_node_map, SocketCache& pushers, zmq::socket_t& response_puller, vector
& routing_ips, unsigned& rid, @@ -48,15 +50,15 @@ void slo_policy(logger log, map& global_hash_rings, } else { // hot key replication // find hot keys log->info("Classifying hot keys..."); - for (const auto& key_access_pair : key_access_summary) { + for (const auto& key_access_pair : hot_key_access_summary) { Key key = key_access_pair.first; unsigned access_count = key_access_pair.second; if (!is_metadata(key) && - access_count > ss.key_access_mean + ss.key_access_std && + access_count > ss.hot_key_access_mean && latency_miss_ratio_map.find(key) != latency_miss_ratio_map.end()) { log->info("Key {} accessed {} times (threshold is {}).", key, - access_count, ss.key_access_mean + ss.key_access_std); + access_count, ss.hot_key_access_mean); unsigned target_rep_factor = key_replication_map[key].global_replication_[kMemoryTierId] * latency_miss_ratio_map[key].first; @@ -116,7 +118,29 @@ void slo_policy(logger log, map& global_hash_rings, if (time_elapsed > kGracePeriod) { // before sending remove command, first adjust relevant key's replication // factor - for (const auto& key_access_pair : key_access_summary) { + for (const auto& key_access_pair : hot_key_access_summary) { + Key key = key_access_pair.first; + + if (!is_metadata(key) && + metadata_map[key].global_replication_[kMemoryTierId] == + (global_hash_rings[kMemoryTierId].size() / kVirtualThreadNum)) { + unsigned new_mem_rep = + metadata_map[key].global_replication_[kMemoryTierId] - 1; + unsigned new_ebs_rep = + std::max(kMinimumReplicaNumber - new_mem_rep, (unsigned)0); + requests[key] = create_new_replication_vector( + new_mem_rep, new_ebs_rep, + metadata_map[key].local_replication_[kMemoryTierId], + metadata_map[key].local_replication_[kEbsTierId]); + log->info("Dereplication for key {}. M: {}->{}. E: {}->{}", key, + metadata_map[key].global_replication_[kMemoryTierId], + requests[key].global_replication_[kMemoryTierId], + metadata_map[key].global_replication_[kEbsTierId], + requests[key].global_replication_[kEbsTierId]); + } + } + + for (const auto& key_access_pair : cold_key_access_summary) { Key key = key_access_pair.first; if (!is_metadata(key) && diff --git a/kvs/src/monitor/stats_helpers.cpp b/kvs/src/monitor/stats_helpers.cpp index 8bb276ea..1d5a0bd0 100644 --- a/kvs/src/monitor/stats_helpers.cpp +++ b/kvs/src/monitor/stats_helpers.cpp @@ -20,6 +20,8 @@ void collect_internal_stats( map& local_hash_rings, SocketCache& pushers, MonitoringThread& mt, zmq::socket_t& response_puller, logger log, unsigned& rid, map>& key_access_frequency, + map>& hot_key_access_frequency, + map>& cold_key_access_frequency, map& key_size, StorageStats& memory_storage, StorageStats& ebs_storage, OccupancyStats& memory_occupancy, OccupancyStats& ebs_occupancy, AccessStats& memory_accesses, @@ -37,7 +39,13 @@ void collect_internal_stats( addr_request_map, mt.response_connect_address(), rid); - key = get_metadata_key(st, tier_id, i, MetadataType::key_access); + key = get_metadata_key(st, tier_id, i, MetadataType::key_access_hot); + prepare_metadata_get_request(key, global_hash_rings[kMemoryTierId], + local_hash_rings[kMemoryTierId], + addr_request_map, + mt.response_connect_address(), rid); + + key = get_metadata_key(st, tier_id, i, MetadataType::key_access_cold); prepare_metadata_get_request(key, global_hash_rings[kMemoryTierId], local_hash_rings[kMemoryTierId], addr_request_map, @@ -97,6 +105,26 @@ void collect_internal_stats( key_access_frequency[key][ip_pair + ":" + std::to_string(tid)] = key_count.access_count(); } + } else if (metadata_type == "hot_access") { + // deserialized the value + KeyAccessData access; + access.ParseFromString(lww_value.value()); + + for (const auto& key_count : access.keys()) { + Key key = key_count.key(); + hot_key_access_frequency[key][ip_pair + ":" + std::to_string(tid)] = + key_count.access_count(); + } + } else if (metadata_type == "cold_access") { + // deserialized the value + KeyAccessData access; + access.ParseFromString(lww_value.value()); + + for (const auto& key_count : access.keys()) { + Key key = key_count.key(); + cold_key_access_frequency[key][ip_pair + ":" + std::to_string(tid)] = + key_count.access_count(); + } } else if (metadata_type == "size") { // deserialized the size KeySizeData key_size_msg; @@ -122,17 +150,52 @@ void collect_internal_stats( void compute_summary_stats( map>& key_access_frequency, + map>& hot_key_access_frequency, + map>& cold_key_access_frequency, StorageStats& memory_storage, StorageStats& ebs_storage, OccupancyStats& memory_occupancy, OccupancyStats& ebs_occupancy, AccessStats& memory_accesses, AccessStats& ebs_accesses, - map& key_access_summary, SummaryStats& ss, logger log, + map& key_access_summary, + map& hot_key_access_summary, + map& cold_key_access_summary, SummaryStats& ss, logger log, unsigned& server_monitoring_epoch) { // compute key access summary unsigned cnt = 0; double mean = 0; double ms = 0; - for (const auto& key_access_pair : key_access_frequency) { + for (const auto& key_access_pair : hot_key_access_frequency) { + Key key = key_access_pair.first; + unsigned access_count = 0; + + for (const auto& per_machine_pair : key_access_pair.second) { + access_count += per_machine_pair.second; + } + + hot_key_access_summary[key] = access_count; + std::cout << "Hot Key: " << key << ", Count: " << access_count << std::endl; + + if (access_count > 0) { + cnt += 1; + + double delta = access_count - mean; + mean += (double)delta / cnt; + + double delta2 = access_count - mean; + ms += delta * delta2; + } + } + + ss.hot_key_access_mean = mean; + ss.hot_key_access_std = sqrt((double)ms / cnt); + + log->info("Hot Access: mean={}, std={}", ss.hot_key_access_mean, ss.hot_key_access_std); + + cnt = 0; + mean = 0; + ms = 0; + + for (const auto& key_access_pair : cold_key_access_frequency) { Key key = key_access_pair.first; unsigned access_count = 0; @@ -140,7 +203,8 @@ void compute_summary_stats( access_count += per_machine_pair.second; } - key_access_summary[key] = access_count; + cold_key_access_summary[key] = access_count; + std::cout << "Cold Key: " << key << ", Count: " << access_count << std::endl; if (access_count > 0) { cnt += 1; @@ -153,10 +217,10 @@ void compute_summary_stats( } } - ss.key_access_mean = mean; - ss.key_access_std = sqrt((double)ms / cnt); + ss.cold_key_access_mean = mean; + ss.cold_key_access_std = sqrt((double)ms / cnt); - log->info("Access: mean={}, std={}", ss.key_access_mean, ss.key_access_std); + log->info("Cold Access: mean={}, std={}", ss.cold_key_access_mean, ss.cold_key_access_std); // compute tier access summary for (const auto& accesses : memory_accesses) { diff --git a/kvs/tests/kvs/test_user_request_handler.hpp b/kvs/tests/kvs/test_user_request_handler.hpp index bfaf6014..87b65cc9 100644 --- a/kvs/tests/kvs/test_user_request_handler.hpp +++ b/kvs/tests/kvs/test_user_request_handler.hpp @@ -14,6 +14,8 @@ #include "kvs/kvs_handlers.hpp" +AdaptiveThresholdHeavyHitters* sketch = new AdaptiveThresholdHeavyHitters(); + TEST_F(ServerHandlerTest, UserGetLWWTest) { Key key = "key"; string value = "value"; @@ -30,7 +32,7 @@ TEST_F(ServerHandlerTest, UserGetLWWTest) { user_request_handler(access_count, seed, get_request, log_, global_hash_rings, local_hash_rings, pending_requests, key_access_tracker, stored_key_map, key_replication_map, local_changeset, wt, - serializers, pushers); + serializers, pushers, sketch); vector messages = get_zmq_messages(); EXPECT_EQ(messages.size(), 1); @@ -71,7 +73,7 @@ TEST_F(ServerHandlerTest, UserGetSetTest) { user_request_handler(access_count, seed, get_request, log_, global_hash_rings, local_hash_rings, pending_requests, key_access_tracker, stored_key_map, key_replication_map, local_changeset, wt, - serializers, pushers); + serializers, pushers, sketch); vector messages = get_zmq_messages(); EXPECT_EQ(messages.size(), 1); @@ -158,7 +160,7 @@ TEST_F(ServerHandlerTest, UserGetCausalTest) { user_request_handler(access_count, seed, get_request, log_, global_hash_rings, local_hash_rings, pending_requests, key_access_tracker, stored_key_map, key_replication_map, local_changeset, wt, - serializers, pushers); + serializers, pushers, sketch); vector messages = get_zmq_messages(); EXPECT_EQ(messages.size(), 1); @@ -224,7 +226,7 @@ TEST_F(ServerHandlerTest, UserPutAndGetLWWTest) { user_request_handler(access_count, seed, put_request, log_, global_hash_rings, local_hash_rings, pending_requests, key_access_tracker, stored_key_map, key_replication_map, local_changeset, wt, - serializers, pushers); + serializers, pushers, sketch); vector messages = get_zmq_messages(); EXPECT_EQ(messages.size(), 1); @@ -249,7 +251,7 @@ TEST_F(ServerHandlerTest, UserPutAndGetLWWTest) { user_request_handler(access_count, seed, get_request, log_, global_hash_rings, local_hash_rings, pending_requests, key_access_tracker, stored_key_map, key_replication_map, local_changeset, wt, - serializers, pushers); + serializers, pushers, sketch); messages = get_zmq_messages(); EXPECT_EQ(messages.size(), 2); @@ -287,7 +289,7 @@ TEST_F(ServerHandlerTest, UserPutAndGetSetTest) { user_request_handler(access_count, seed, put_request, log_, global_hash_rings, local_hash_rings, pending_requests, key_access_tracker, stored_key_map, key_replication_map, local_changeset, wt, - serializers, pushers); + serializers, pushers, sketch); vector messages = get_zmq_messages(); EXPECT_EQ(messages.size(), 1); @@ -312,7 +314,7 @@ TEST_F(ServerHandlerTest, UserPutAndGetSetTest) { user_request_handler(access_count, seed, get_request, log_, global_hash_rings, local_hash_rings, pending_requests, key_access_tracker, stored_key_map, key_replication_map, local_changeset, wt, - serializers, pushers); + serializers, pushers, sketch); messages = get_zmq_messages(); EXPECT_EQ(messages.size(), 2); @@ -416,7 +418,7 @@ TEST_F(ServerHandlerTest, UserPutAndGetCausalTest) { user_request_handler(access_count, seed, put_request, log_, global_hash_rings, local_hash_rings, pending_requests, key_access_tracker, stored_key_map, key_replication_map, local_changeset, wt, - serializers, pushers); + serializers, pushers, sketch); vector messages = get_zmq_messages(); EXPECT_EQ(messages.size(), 1); @@ -441,7 +443,7 @@ TEST_F(ServerHandlerTest, UserPutAndGetCausalTest) { user_request_handler(access_count, seed, get_request, log_, global_hash_rings, local_hash_rings, pending_requests, key_access_tracker, stored_key_map, key_replication_map, local_changeset, wt, - serializers, pushers); + serializers, pushers, sketch); messages = get_zmq_messages(); EXPECT_EQ(messages.size(), 2); diff --git a/scripts/start-kvs-local.sh b/scripts/start-kvs-local.sh index 5170d1a4..76d04727 100755 --- a/scripts/start-kvs-local.sh +++ b/scripts/start-kvs-local.sh @@ -40,5 +40,6 @@ echo $RPID >> pids echo $SPID >> pids if [ "$2" = "y" ] || [ "$2" = "yes" ]; then - ./build/kvs/src/cli/flkvs-cli + # ./build/kvs/src/cli/flkvs-cli + ./build/client/kvs/cpp/flkvs-cli conf/kvs-config.yml fi From e92b280298037e2b369d347fe41a00388481e4b3 Mon Sep 17 00:00:00 2001 From: saurav_c Date: Thu, 11 Apr 2019 15:10:56 -0700 Subject: [PATCH 04/15] Heavy Hitter formatting --- kvs/include/adaptive_heavy_hitters.hpp | 458 +++++++++---------- kvs/include/heavy_hitters.hpp | 156 +++---- kvs/include/kvs_common.hpp | 2 +- kvs/include/metadata.hpp | 9 +- kvs/include/monitor/monitoring_handlers.hpp | 20 +- kvs/include/monitor/policies.hpp | 3 +- kvs/src/kvs/replication_response_handler.cpp | 1 - kvs/src/kvs/server.cpp | 10 +- kvs/src/kvs/user_request_handler.cpp | 1 - kvs/src/monitor/monitoring.cpp | 30 +- kvs/src/monitor/slo_policy.cpp | 18 +- kvs/src/monitor/stats_helpers.cpp | 21 +- 12 files changed, 360 insertions(+), 369 deletions(-) diff --git a/kvs/include/adaptive_heavy_hitters.hpp b/kvs/include/adaptive_heavy_hitters.hpp index 1a96a988..0fcdd162 100644 --- a/kvs/include/adaptive_heavy_hitters.hpp +++ b/kvs/include/adaptive_heavy_hitters.hpp @@ -1,253 +1,231 @@ -#include -#include +#include +#include +#include +#include #include -#include -#include #include -#include -#include -#include +#include +#include +#include +#include +#include #include #include +#include #include #include "heavy_hitters.hpp" -#include -#include -#include #define alpha 0.2 typedef std::string Key; class AdaptiveThresholdHeavyHitters { -protected: - HeavyHittersSketch* hh_sketch; - float threshold_percent = 0.01; - float gamma = 4127; - float epsilon = 0.001; - - std::unordered_set total_set; - - std::unordered_map hot_map; - std::unordered_map cold_map; - - int hot_threshold; - int cold_threshold; - - std::chrono::system_clock::time_point last_update_time; - - void set_values() { - int B_arg = (int)(ceil(exp(1)/epsilon)); - int l_arg = (int)(ceil(log(gamma))); - int** hash_functions_arg = get_hash_functions(l_arg); - std::unordered_set reset_total_set; - std::unordered_map reset_hot_map; - std::unordered_map reset_cold_map; - - total_set = reset_total_set; - hot_map = reset_hot_map; - cold_map = reset_cold_map; - - hh_sketch = new HeavyHittersSketch(hash_functions_arg, l_arg, B_arg); - - hot_threshold = 0; - cold_threshold = INT_MIN; - - last_update_time = std::chrono::system_clock::now(); - }; - - int partition(int list[], int left, int right, int pivotIndex) { - int pivotValue = list[pivotIndex]; - - int tmp = list[pivotIndex]; - list[pivotIndex] = list[right]; - list[right] = tmp; - - int storeIndex = left; - for (int i = left; i < right - 1; i++) - { - if (list[i] < pivotValue) - { - tmp = list[storeIndex]; - list[storeIndex] = list[i]; - list[i] = list[storeIndex]; - - storeIndex++; - } - } - - tmp = list[right]; - list[right] = list[storeIndex]; - list[storeIndex] = list[right]; - return storeIndex; - }; - - int select(int list[], int left, int right, int k) { - if (left == right) - { - return list[left]; - } - - int pivotIndex = right; - - pivotIndex = partition(list, left, right, pivotIndex); - - if (k == pivotIndex) - { - return list[k]; - } - else if (k < pivotIndex) - { - return select(list, left, pivotIndex - 1, k); - } - else - { - return select(list, pivotIndex + 1, right, k); - } - }; - - void update_hot(void) { - int* vals; - std::unordered_map new_hot_map; - std::vector val_vec; - int val_size = 0; - - for(auto kv: hot_map) { - val_size = val_size + 1; - val_vec.push_back(kv.second); - } - - vals = (int*)(&val_vec[0]); - - int median = select(vals, 0, val_size - 1, 1); - - for(auto kv: hot_map) { - if(kv.second > median) { - new_hot_map[kv.first] = kv.second; - } - } - - hot_map = new_hot_map; - hot_threshold = median; - }; - - - void update_cold(void) { - int* vals; - std::unordered_map new_cold_map; - std::vector val_vec; - int val_size = 0; - - for(auto kv: cold_map) { - val_size = val_size + 1; - val_vec.push_back(kv.second); - } - - vals = &val_vec[0]; - - int median = (-1 * select(vals, 0, val_size - 1, 1)); - - for(auto kv: cold_map) { - if((-1 * kv.second) >= median) { - new_cold_map[kv.first] = kv.second; - } - } - - cold_map = new_cold_map; - cold_threshold = median; - }; - - int** get_hash_functions(int l) { - int **hash_functions; - srand(time(NULL)); - hash_functions = new int *[l]; - for(unsigned i = 0; i < l; i++) { - hash_functions[i] = new int[2]; - hash_functions[i][0] = int(float(rand())*float(large_prime)/float(RAND_MAX) + 1); - hash_functions[i][1] = int(float(rand())*float(large_prime)/float(RAND_MAX) + 1); - } - return hash_functions; - }; - -public: - AdaptiveThresholdHeavyHitters() { - set_values(); - }; - - void report_key(Key key) { - total_set.insert(key); - - int new_count = (*hh_sketch).update(key); - - if(new_count > hot_threshold) { - hot_map[key] = new_count; - } - - if((-1 * new_count) >= cold_threshold) { - cold_map[key] = new_count; - } else { - if(cold_map.find(key) != cold_map.end()) { - cold_map[key] = new_count; - } - } - - std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); - std::chrono::duration passed = now - last_update_time; - double passed_num = passed.count(); - - if(passed_num > 10) { - int total_size = total_set.size(); - int hot_size = hot_map.size(); - if (hot_size > (threshold_percent * total_size)) { - update_hot(); - } - - int cold_size = cold_map.size(); - if (cold_size > (threshold_percent * total_size)) { - update_cold(); - } - last_update_time = now; - } - }; - - int get_key_count(Key key) { - return (*hh_sketch).estimate(key); - }; - - std::unordered_map get_hot_map(void) { - return hot_map; - }; - - std::unordered_map get_cold_map(void) { - return cold_map; - }; - - int get_hot_threshold() { - return hot_threshold; - }; - - int get_cold_threshold() { - return cold_threshold; - }; - - int get_total_size() { - return total_set.size(); - }; - - void reset() { - set_values(); - }; - - // static void reset_threshold_percent(float new_threshold) { - // threshold_percent = new_threshold; - // }; - - // static void reset_error(float new_epsilon) { - // epsilon = new_epsilon; - // }; - - // static void update_gamma(int total_hits, int num_hh) { - // float avg_hit = (1.0 * total_hits) / num_hh; - // gamma = (alpha * avg_hit) + ((1 - alpha) * gamma); - // }; + protected: + HeavyHittersSketch* hh_sketch; + float threshold_percent = 0.01; + float gamma = 4127; + float epsilon = 0.001; + + std::unordered_set total_set; + + std::unordered_map hot_map; + std::unordered_map cold_map; + + int hot_threshold; + int cold_threshold; + + std::chrono::system_clock::time_point last_update_time; + + void set_values() { + int B_arg = (int)(ceil(exp(1) / epsilon)); + int l_arg = (int)(ceil(log(gamma))); + int** hash_functions_arg = get_hash_functions(l_arg); + std::unordered_set reset_total_set; + std::unordered_map reset_hot_map; + std::unordered_map reset_cold_map; + + total_set = reset_total_set; + hot_map = reset_hot_map; + cold_map = reset_cold_map; + + hh_sketch = new HeavyHittersSketch(hash_functions_arg, l_arg, B_arg); + + hot_threshold = 0; + cold_threshold = INT_MIN; + + last_update_time = std::chrono::system_clock::now(); + }; + + int partition(int list[], int left, int right, int pivotIndex) { + int pivotValue = list[pivotIndex]; + + int tmp = list[pivotIndex]; + list[pivotIndex] = list[right]; + list[right] = tmp; + + int storeIndex = left; + for (int i = left; i < right - 1; i++) { + if (list[i] < pivotValue) { + tmp = list[storeIndex]; + list[storeIndex] = list[i]; + list[i] = list[storeIndex]; + + storeIndex++; + } + } + + tmp = list[right]; + list[right] = list[storeIndex]; + list[storeIndex] = list[right]; + return storeIndex; + }; + + int select(int list[], int left, int right, int k) { + if (left == right) { + return list[left]; + } + + int pivotIndex = right; + + pivotIndex = partition(list, left, right, pivotIndex); + + if (k == pivotIndex) { + return list[k]; + } else if (k < pivotIndex) { + return select(list, left, pivotIndex - 1, k); + } else { + return select(list, pivotIndex + 1, right, k); + } + }; + + void update_hot(void) { + int* vals; + std::unordered_map new_hot_map; + std::vector val_vec; + int val_size = 0; + + for (auto kv : hot_map) { + val_size = val_size + 1; + val_vec.push_back(kv.second); + } + + vals = (int*)(&val_vec[0]); + + int median = select(vals, 0, val_size - 1, 1); + + for (auto kv : hot_map) { + if (kv.second > median) { + new_hot_map[kv.first] = kv.second; + } + } + + hot_map = new_hot_map; + hot_threshold = median; + }; + + void update_cold(void) { + int* vals; + std::unordered_map new_cold_map; + std::vector val_vec; + int val_size = 0; + + for (auto kv : cold_map) { + val_size = val_size + 1; + val_vec.push_back(kv.second); + } + + vals = &val_vec[0]; + + int median = (-1 * select(vals, 0, val_size - 1, 1)); + + for (auto kv : cold_map) { + if ((-1 * kv.second) >= median) { + new_cold_map[kv.first] = kv.second; + } + } + + cold_map = new_cold_map; + cold_threshold = median; + }; + + int** get_hash_functions(int l) { + int** hash_functions; + srand(time(NULL)); + hash_functions = new int*[l]; + for (unsigned i = 0; i < l; i++) { + hash_functions[i] = new int[2]; + hash_functions[i][0] = + int(float(rand()) * float(large_prime) / float(RAND_MAX) + 1); + hash_functions[i][1] = + int(float(rand()) * float(large_prime) / float(RAND_MAX) + 1); + } + return hash_functions; + }; + + public: + AdaptiveThresholdHeavyHitters() { set_values(); }; + + void report_key(Key key) { + total_set.insert(key); + + int new_count = (*hh_sketch).update(key); + + if (new_count > hot_threshold) { + hot_map[key] = new_count; + } + + if ((-1 * new_count) >= cold_threshold) { + cold_map[key] = new_count; + } else { + if (cold_map.find(key) != cold_map.end()) { + cold_map[key] = new_count; + } + } + + std::chrono::system_clock::time_point now = + std::chrono::system_clock::now(); + std::chrono::duration passed = now - last_update_time; + double passed_num = passed.count(); + + if (passed_num > 10) { + int total_size = total_set.size(); + int hot_size = hot_map.size(); + if (hot_size > (threshold_percent * total_size)) { + update_hot(); + } + + int cold_size = cold_map.size(); + if (cold_size > (threshold_percent * total_size)) { + update_cold(); + } + last_update_time = now; + } + }; + + int get_key_count(Key key) { return (*hh_sketch).estimate(key); }; + + std::unordered_map get_hot_map(void) { return hot_map; }; + + std::unordered_map get_cold_map(void) { return cold_map; }; + + int get_hot_threshold() { return hot_threshold; }; + + int get_cold_threshold() { return cold_threshold; }; + + int get_total_size() { return total_set.size(); }; + + void reset() { set_values(); }; + + // static void reset_threshold_percent(float new_threshold) { + // threshold_percent = new_threshold; + // }; + + // static void reset_error(float new_epsilon) { + // epsilon = new_epsilon; + // }; + + // static void update_gamma(int total_hits, int num_hh) { + // float avg_hit = (1.0 * total_hits) / num_hh; + // gamma = (alpha * avg_hit) + ((1 - alpha) * gamma); + // }; }; diff --git a/kvs/include/heavy_hitters.hpp b/kvs/include/heavy_hitters.hpp index 7149baaa..86335a29 100644 --- a/kvs/include/heavy_hitters.hpp +++ b/kvs/include/heavy_hitters.hpp @@ -1,8 +1,8 @@ +#include +#include #include -#include #include -#include -#include +#include #include #include #include @@ -12,78 +12,80 @@ typedef std::string Key; const long large_prime = 4294967311l; class HeavyHittersSketch { -protected: - unsigned l, B; - - int **hash_functions; - int **sketch_array; - - unsigned long hash_key(Key key) { - unsigned long hash = 5381; - int char_int = 0; - for(unsigned i = 0; i < key.length(); i++) { - char_int = (int)(key.at(i)); - hash = ((hash << 5) + hash) + char_int; - } - - return hash; - }; - - unsigned location(int i, unsigned long hash) { - return (unsigned)(((long)hash_functions[i][0]*hash+hash_functions[i][1])%large_prime%B); - }; - - void set_values(int **hash_functions_arg, int l_arg, int B_arg) { - hash_functions = hash_functions_arg; - l = l_arg; - B = B_arg; - - sketch_array = new int *[l]; - for(unsigned i = 0; i < l; i++) { - sketch_array[i] = new int[B]; - for(unsigned j = 0; j < B; j++) { - sketch_array[i][j] = 0; - } - } - }; - -public: - HeavyHittersSketch(int **hash_functions_arg, int l_arg, int B_arg) { - set_values(hash_functions_arg, l_arg, B_arg); - }; - - int update(Key key) { - unsigned long hash = hash_key(key); - - int mincount = 0; - unsigned hashed_location = 0; - for (unsigned i = 0; i < l; i++) { - hashed_location = location(i, hash); - sketch_array[i][hashed_location] = sketch_array[i][hashed_location] + 1; - if((sketch_array[i][hashed_location] < mincount) or (i == 0)) { - mincount = sketch_array[i][hashed_location]; - } - } - - return mincount; - }; - - int estimate(Key key) { - unsigned long hash = hash_key(key); - - int mincount = 0; - unsigned hashed_location = 0; - for (unsigned i = 0; i < l; i++) { - hashed_location = location(i, hash); - if((sketch_array[i][hashed_location] < mincount) or (i == 0)) { - mincount = sketch_array[i][hashed_location]; - } - } - - return mincount; - }; - - void reset(int **hash_functions_arg, int l_arg, int B_arg) { - set_values(hash_functions_arg, l_arg, B_arg); - }; + protected: + unsigned l, B; + + int **hash_functions; + int **sketch_array; + + unsigned long hash_key(Key key) { + unsigned long hash = 5381; + int char_int = 0; + for (unsigned i = 0; i < key.length(); i++) { + char_int = (int)(key.at(i)); + hash = ((hash << 5) + hash) + char_int; + } + + return hash; + }; + + unsigned location(int i, unsigned long hash) { + return ( + unsigned)(((long)hash_functions[i][0] * hash + hash_functions[i][1]) % + large_prime % B); + }; + + void set_values(int **hash_functions_arg, int l_arg, int B_arg) { + hash_functions = hash_functions_arg; + l = l_arg; + B = B_arg; + + sketch_array = new int *[l]; + for (unsigned i = 0; i < l; i++) { + sketch_array[i] = new int[B]; + for (unsigned j = 0; j < B; j++) { + sketch_array[i][j] = 0; + } + } + }; + + public: + HeavyHittersSketch(int **hash_functions_arg, int l_arg, int B_arg) { + set_values(hash_functions_arg, l_arg, B_arg); + }; + + int update(Key key) { + unsigned long hash = hash_key(key); + + int mincount = 0; + unsigned hashed_location = 0; + for (unsigned i = 0; i < l; i++) { + hashed_location = location(i, hash); + sketch_array[i][hashed_location] = sketch_array[i][hashed_location] + 1; + if ((sketch_array[i][hashed_location] < mincount) or (i == 0)) { + mincount = sketch_array[i][hashed_location]; + } + } + + return mincount; + }; + + int estimate(Key key) { + unsigned long hash = hash_key(key); + + int mincount = 0; + unsigned hashed_location = 0; + for (unsigned i = 0; i < l; i++) { + hashed_location = location(i, hash); + if ((sketch_array[i][hashed_location] < mincount) or (i == 0)) { + mincount = sketch_array[i][hashed_location]; + } + } + + return mincount; + }; + + void reset(int **hash_functions_arg, int l_arg, int B_arg) { + set_values(hash_functions_arg, l_arg, B_arg); + }; }; \ No newline at end of file diff --git a/kvs/include/kvs_common.hpp b/kvs/include/kvs_common.hpp index fb814272..4cb188bc 100644 --- a/kvs/include/kvs_common.hpp +++ b/kvs/include/kvs_common.hpp @@ -15,8 +15,8 @@ #ifndef KVS_INCLUDE_KVS_COMMON_HPP_ #define KVS_INCLUDE_KVS_COMMON_HPP_ -#include "kvs_types.hpp" #include "adaptive_heavy_hitters.hpp" +#include "kvs_types.hpp" const unsigned kMetadataReplicationFactor = 1; const unsigned kMetadataLocalReplicationFactor = 1; diff --git a/kvs/include/metadata.hpp b/kvs/include/metadata.hpp index 9f7a00cb..7681179d 100644 --- a/kvs/include/metadata.hpp +++ b/kvs/include/metadata.hpp @@ -97,7 +97,14 @@ inline bool is_metadata(Key key) { // NOTE: This needs to be here because it needs the definition of TierMetadata extern map kTierMetadata; -enum MetadataType { replication, server_stats, key_access, key_size, key_access_hot, key_access_cold }; +enum MetadataType { + replication, + server_stats, + key_access, + key_size, + key_access_hot, + key_access_cold +}; inline Key get_metadata_key(const ServerThread& st, unsigned tier_id, unsigned thread_num, MetadataType type) { diff --git a/kvs/include/monitor/monitoring_handlers.hpp b/kvs/include/monitor/monitoring_handlers.hpp index 684d14f7..dc586b1c 100644 --- a/kvs/include/monitor/monitoring_handlers.hpp +++ b/kvs/include/monitor/monitoring_handlers.hpp @@ -18,16 +18,16 @@ #include "hash_ring.hpp" #include "metadata.pb.h" -void membership_handler(logger log, string& serialized, - map& global_hash_rings, - unsigned& new_memory_count, unsigned& new_ebs_count, - TimePoint& grace_start, vector
& routing_ips, - StorageStats& memory_storage, StorageStats& ebs_storage, - OccupancyStats& memory_occupancy, - OccupancyStats& ebs_occupancy, - map>& key_access_frequency, - map>& hot_key_access_frequency, - map>& cold_key_access_frequency); +void membership_handler( + logger log, string& serialized, + map& global_hash_rings, unsigned& new_memory_count, + unsigned& new_ebs_count, TimePoint& grace_start, + vector
& routing_ips, StorageStats& memory_storage, + StorageStats& ebs_storage, OccupancyStats& memory_occupancy, + OccupancyStats& ebs_occupancy, + map>& key_access_frequency, + map>& hot_key_access_frequency, + map>& cold_key_access_frequency); void depart_done_handler(logger log, string& serialized, map& departing_node_map, diff --git a/kvs/include/monitor/policies.hpp b/kvs/include/monitor/policies.hpp index 6569a2bf..2e53f521 100644 --- a/kvs/include/monitor/policies.hpp +++ b/kvs/include/monitor/policies.hpp @@ -48,7 +48,8 @@ void slo_policy(logger log, map& global_hash_rings, map& key_replication_map, map& key_access_summary, map& hot_key_access_summary, - map& cold_key_access_summary, MonitoringThread& mt, + map& cold_key_access_summary, + MonitoringThread& mt, map& departing_node_map, SocketCache& pushers, zmq::socket_t& response_puller, vector
& routing_ips, unsigned& rid, diff --git a/kvs/src/kvs/replication_response_handler.cpp b/kvs/src/kvs/replication_response_handler.cpp index 8cdf4abf..2848e562 100644 --- a/kvs/src/kvs/replication_response_handler.cpp +++ b/kvs/src/kvs/replication_response_handler.cpp @@ -25,7 +25,6 @@ void replication_response_handler( map& key_replication_map, set& local_changeset, ServerThread& wt, SerializerMap& serializers, SocketCache& pushers, AdaptiveThresholdHeavyHitters* sketch) { - KeyResponse response; response.ParseFromString(serialized); diff --git a/kvs/src/kvs/server.cpp b/kvs/src/kvs/server.cpp index fced2fbe..4ea90dcf 100644 --- a/kvs/src/kvs/server.cpp +++ b/kvs/src/kvs/server.cpp @@ -540,8 +540,8 @@ void run(unsigned thread_id, Address public_ip, Address private_ip, } // report hot key access stats - key = - get_metadata_key(wt, kSelfTierId, wt.tid(), MetadataType::key_access_hot); + key = get_metadata_key(wt, kSelfTierId, wt.tid(), + MetadataType::key_access_hot); string serialized_access; access.SerializeToString(&serialized_access); @@ -576,9 +576,9 @@ void run(unsigned thread_id, Address public_ip, Address private_ip, tp->set_access_count(count); } - // report cold key access stats - key = - get_metadata_key(wt, kSelfTierId, wt.tid(), MetadataType::key_access_cold); + // report hot key access stats + key = get_metadata_key(wt, kSelfTierId, wt.tid(), + MetadataType::key_access_cold); string cold_serialized_access; cold_access.SerializeToString(&cold_serialized_access); diff --git a/kvs/src/kvs/user_request_handler.cpp b/kvs/src/kvs/user_request_handler.cpp index 0eb3a5b0..cf624e78 100644 --- a/kvs/src/kvs/user_request_handler.cpp +++ b/kvs/src/kvs/user_request_handler.cpp @@ -24,7 +24,6 @@ void user_request_handler( map& key_replication_map, set& local_changeset, ServerThread& wt, SerializerMap& serializers, SocketCache& pushers, AdaptiveThresholdHeavyHitters* sketch) { - KeyRequest request; request.ParseFromString(serialized); diff --git a/kvs/src/monitor/monitoring.cpp b/kvs/src/monitor/monitoring.cpp index 96ca906a..3335788e 100644 --- a/kvs/src/monitor/monitoring.cpp +++ b/kvs/src/monitor/monitoring.cpp @@ -184,8 +184,8 @@ int main(int argc, char *argv[]) { membership_handler(log, serialized, global_hash_rings, adding_memory_node, adding_ebs_node, grace_start, routing_ips, memory_storage, ebs_storage, memory_occupancy, - ebs_occupancy, key_access_frequency, hot_key_access_frequency, - cold_key_access_frequency); + ebs_occupancy, key_access_frequency, + hot_key_access_frequency, cold_key_access_frequency); } // handle a depart done notification @@ -236,18 +236,17 @@ int main(int argc, char *argv[]) { // collect internal statistics collect_internal_stats( global_hash_rings, local_hash_rings, pushers, mt, response_puller, - log, rid, key_access_frequency, hot_key_access_frequency, cold_key_access_frequency, - key_size, memory_storage, ebs_storage, + log, rid, key_access_frequency, hot_key_access_frequency, + cold_key_access_frequency, key_size, memory_storage, ebs_storage, memory_occupancy, ebs_occupancy, memory_accesses, ebs_accesses); // compute summary statistics - compute_summary_stats(key_access_frequency, hot_key_access_frequency, cold_key_access_frequency, - memory_storage, ebs_storage, - memory_occupancy, ebs_occupancy, memory_accesses, - ebs_accesses, key_access_summary, - hot_key_access_summary, cold_key_access_summary, - ss, log, - server_monitoring_epoch); + compute_summary_stats(key_access_frequency, hot_key_access_frequency, + cold_key_access_frequency, memory_storage, + ebs_storage, memory_occupancy, ebs_occupancy, + memory_accesses, ebs_accesses, key_access_summary, + hot_key_access_summary, cold_key_access_summary, ss, + log, server_monitoring_epoch); // collect external statistics collect_external_stats(user_latency, user_throughput, ss, log); @@ -255,8 +254,9 @@ int main(int argc, char *argv[]) { // initialize replication factor for new keys for (const auto &key_access_pair : hot_key_access_summary) { Key key = key_access_pair.first; - if (!is_metadata(key) && metadata_map.find(key) == metadata_map.end()) { - init_replication(metadata_map, key); + if (!is_metadata(key) && + key_replication_map.find(key) == key_replication_map.end()) { + init_replication(key_replication_map, key); } } for (const auto &key_access_pair : cold_key_access_summary) { @@ -276,8 +276,8 @@ int main(int argc, char *argv[]) { movement_policy(log, global_hash_rings, local_hash_rings, grace_start, ss, memory_node_number, ebs_node_number, adding_memory_node, adding_ebs_node, management_ip, key_replication_map, - key_access_summary, hot_key_access_summary, cold_key_access_summary, - key_size, mt, pushers, + key_access_summary, hot_key_access_summary, + cold_key_access_summary, key_size, mt, pushers, response_puller, routing_ips, rid); slo_policy(log, global_hash_rings, local_hash_rings, grace_start, ss, diff --git a/kvs/src/monitor/slo_policy.cpp b/kvs/src/monitor/slo_policy.cpp index 118a4824..4932d4d1 100644 --- a/kvs/src/monitor/slo_policy.cpp +++ b/kvs/src/monitor/slo_policy.cpp @@ -23,7 +23,8 @@ void slo_policy(logger log, map& global_hash_rings, map& key_replication_map, map& key_access_summary, map& hot_key_access_summary, - map& cold_key_access_summary, MonitoringThread& mt, + map& cold_key_access_summary, + MonitoringThread& mt, map& departing_node_map, SocketCache& pushers, zmq::socket_t& response_puller, vector
& routing_ips, unsigned& rid, @@ -54,8 +55,7 @@ void slo_policy(logger log, map& global_hash_rings, Key key = key_access_pair.first; unsigned access_count = key_access_pair.second; - if (!is_metadata(key) && - access_count > ss.hot_key_access_mean && + if (!is_metadata(key) && access_count > ss.hot_key_access_mean && latency_miss_ratio_map.find(key) != latency_miss_ratio_map.end()) { log->info("Key {} accessed {} times (threshold is {}).", key, access_count, ss.hot_key_access_mean); @@ -122,20 +122,20 @@ void slo_policy(logger log, map& global_hash_rings, Key key = key_access_pair.first; if (!is_metadata(key) && - metadata_map[key].global_replication_[kMemoryTierId] == + key_replication_map[key].global_replication_[kMemoryTierId] == (global_hash_rings[kMemoryTierId].size() / kVirtualThreadNum)) { unsigned new_mem_rep = - metadata_map[key].global_replication_[kMemoryTierId] - 1; + key_replication_map[key].global_replication_[kMemoryTierId] - 1; unsigned new_ebs_rep = std::max(kMinimumReplicaNumber - new_mem_rep, (unsigned)0); requests[key] = create_new_replication_vector( new_mem_rep, new_ebs_rep, - metadata_map[key].local_replication_[kMemoryTierId], - metadata_map[key].local_replication_[kEbsTierId]); + key_replication_map[key].local_replication_[kMemoryTierId], + key_replication_map[key].local_replication_[kEbsTierId]); log->info("Dereplication for key {}. M: {}->{}. E: {}->{}", key, - metadata_map[key].global_replication_[kMemoryTierId], + key_replication_map[key].global_replication_[kMemoryTierId], requests[key].global_replication_[kMemoryTierId], - metadata_map[key].global_replication_[kEbsTierId], + key_replication_map[key].global_replication_[kEbsTierId], requests[key].global_replication_[kEbsTierId]); } } diff --git a/kvs/src/monitor/stats_helpers.cpp b/kvs/src/monitor/stats_helpers.cpp index 1d5a0bd0..23babdbb 100644 --- a/kvs/src/monitor/stats_helpers.cpp +++ b/kvs/src/monitor/stats_helpers.cpp @@ -112,8 +112,9 @@ void collect_internal_stats( for (const auto& key_count : access.keys()) { Key key = key_count.key(); - hot_key_access_frequency[key][ip_pair + ":" + std::to_string(tid)] = - key_count.access_count(); + hot_key_access_frequency[key] + [ip_pair + ":" + std::to_string(tid)] = + key_count.access_count(); } } else if (metadata_type == "cold_access") { // deserialized the value @@ -122,8 +123,9 @@ void collect_internal_stats( for (const auto& key_count : access.keys()) { Key key = key_count.key(); - cold_key_access_frequency[key][ip_pair + ":" + std::to_string(tid)] = - key_count.access_count(); + cold_key_access_frequency[key] + [ip_pair + ":" + std::to_string(tid)] = + key_count.access_count(); } } else if (metadata_type == "size") { // deserialized the size @@ -151,7 +153,7 @@ void collect_internal_stats( void compute_summary_stats( map>& key_access_frequency, map>& hot_key_access_frequency, - map>& cold_key_access_frequency, + map>& cold_key_access_frequency, StorageStats& memory_storage, StorageStats& ebs_storage, OccupancyStats& memory_occupancy, OccupancyStats& ebs_occupancy, AccessStats& memory_accesses, AccessStats& ebs_accesses, @@ -189,7 +191,8 @@ void compute_summary_stats( ss.hot_key_access_mean = mean; ss.hot_key_access_std = sqrt((double)ms / cnt); - log->info("Hot Access: mean={}, std={}", ss.hot_key_access_mean, ss.hot_key_access_std); + log->info("Hot Access: mean={}, std={}", ss.hot_key_access_mean, + ss.hot_key_access_std); cnt = 0; mean = 0; @@ -204,7 +207,8 @@ void compute_summary_stats( } cold_key_access_summary[key] = access_count; - std::cout << "Cold Key: " << key << ", Count: " << access_count << std::endl; + std::cout << "Cold Key: " << key << ", Count: " << access_count + << std::endl; if (access_count > 0) { cnt += 1; @@ -220,7 +224,8 @@ void compute_summary_stats( ss.cold_key_access_mean = mean; ss.cold_key_access_std = sqrt((double)ms / cnt); - log->info("Cold Access: mean={}, std={}", ss.cold_key_access_mean, ss.cold_key_access_std); + log->info("Cold Access: mean={}, std={}", ss.cold_key_access_mean, + ss.cold_key_access_std); // compute tier access summary for (const auto& accesses : memory_accesses) { From e89b6528a64dcfb486954ccec666b34c35d2e883 Mon Sep 17 00:00:00 2001 From: saurav_c Date: Fri, 12 Apr 2019 16:53:53 -0700 Subject: [PATCH 05/15] Removed debugging statements --- kvs/include/adaptive_heavy_hitters.hpp | 22 ++++++++++++++-------- kvs/include/heavy_hitters.hpp | 14 ++++++++++++++ kvs/src/monitor/stats_helpers.cpp | 3 --- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/kvs/include/adaptive_heavy_hitters.hpp b/kvs/include/adaptive_heavy_hitters.hpp index 0fcdd162..089cd95f 100644 --- a/kvs/include/adaptive_heavy_hitters.hpp +++ b/kvs/include/adaptive_heavy_hitters.hpp @@ -1,18 +1,24 @@ +// Copyright 2018 U.C. Berkeley RISE Lab +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + #include #include -#include #include #include -#include -#include -#include #include -#include #include -#include -#include #include -#include #include "heavy_hitters.hpp" #define alpha 0.2 diff --git a/kvs/include/heavy_hitters.hpp b/kvs/include/heavy_hitters.hpp index 86335a29..2f71bee1 100644 --- a/kvs/include/heavy_hitters.hpp +++ b/kvs/include/heavy_hitters.hpp @@ -1,3 +1,17 @@ +// Copyright 2018 U.C. Berkeley RISE Lab +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + #include #include #include diff --git a/kvs/src/monitor/stats_helpers.cpp b/kvs/src/monitor/stats_helpers.cpp index 23babdbb..c159adf1 100644 --- a/kvs/src/monitor/stats_helpers.cpp +++ b/kvs/src/monitor/stats_helpers.cpp @@ -175,7 +175,6 @@ void compute_summary_stats( } hot_key_access_summary[key] = access_count; - std::cout << "Hot Key: " << key << ", Count: " << access_count << std::endl; if (access_count > 0) { cnt += 1; @@ -207,8 +206,6 @@ void compute_summary_stats( } cold_key_access_summary[key] = access_count; - std::cout << "Cold Key: " << key << ", Count: " << access_count - << std::endl; if (access_count > 0) { cnt += 1; From fe9cb54b1ed905c6f507a7890860ddd71a73abbb Mon Sep 17 00:00:00 2001 From: saurav_c Date: Fri, 12 Apr 2019 16:57:14 -0700 Subject: [PATCH 06/15] Formatting fix --- scripts/start-kvs-local.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/start-kvs-local.sh b/scripts/start-kvs-local.sh index 76d04727..a2b288da 100755 --- a/scripts/start-kvs-local.sh +++ b/scripts/start-kvs-local.sh @@ -40,6 +40,5 @@ echo $RPID >> pids echo $SPID >> pids if [ "$2" = "y" ] || [ "$2" = "yes" ]; then - # ./build/kvs/src/cli/flkvs-cli - ./build/client/kvs/cpp/flkvs-cli conf/kvs-config.yml + ./build/kvs/client/cpp/flkvs-cli conf/kvs-config.yml fi From e64cbcdf3c50fb7c24c108a5178d9adfd4016c73 Mon Sep 17 00:00:00 2001 From: saurav_c Date: Fri, 12 Apr 2019 17:22:13 -0700 Subject: [PATCH 07/15] Removed input files --- cli.sh | 45 -- cli.txt | 1437 ------------------------------------------------------- 2 files changed, 1482 deletions(-) delete mode 100755 cli.sh delete mode 100644 cli.txt diff --git a/cli.sh b/cli.sh deleted file mode 100755 index 27070a7e..00000000 --- a/cli.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash - -# Copyright 2018 U.C. Berkeley RISE Lab -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -if [ -z "$1" ] && [ -z "$2" ]; then - echo "Usage: ./scripts/start_local.sh build start-user" - echo "" - echo "You must run this from the project root directory." - exit 1 -fi - -if [ "$1" = "y" ] || [ "$1" = "yes" ]; then - ./scripts/build.sh -fi - -cp conf/kvs-example.yml conf/kvs-config.yml - -./build/kvs/src/monitor/flmonitor & -MPID=$! -./build/kvs/src/route/flroute & -RPID=$! -export SERVER_TYPE="memory" -./build/kvs/src/kvs/flkvs & -SPID=$! - -echo $MPID > pids -echo $RPID >> pids -echo $SPID >> pids - -if [ "$2" = "y" ] || [ "$2" = "yes" ]; then - # ./build/kvs/src/cli/flkvs-cli - ./build/client/kvs/cpp/flkvs-cli conf/kvs-config.yml cli.txt -fi diff --git a/cli.txt b/cli.txt deleted file mode 100644 index 16345ff4..00000000 --- a/cli.txt +++ /dev/null @@ -1,1437 +0,0 @@ -PUT 00000001 test -PUT 00000002 test -PUT 00000003 test -PUT 00000004 test -PUT 00000005 test -PUT 00000006 test -PUT 00000007 test -PUT 00000008 test -PUT 00000009 test -PUT 00000010 test -PUT 00000011 test -PUT 00000012 test -PUT 00000013 test -PUT 00000014 test -PUT 00000015 test -PUT 00000016 test -PUT 00000017 test -PUT 00000018 test -PUT 00000019 test -PUT 00000020 test -PUT 00000021 test -PUT 00000022 test -PUT 00000023 test -PUT 00000024 test -PUT 00000025 test -PUT 00000026 test -PUT 00000028 test -PUT 00000029 test -PUT 00000030 test -PUT 00000031 test -PUT 00000032 test -PUT 00000033 test -PUT 00000034 test -PUT 00000035 test -PUT 00000036 test -PUT 00000037 test -PUT 00000038 test -PUT 00000039 test -PUT 00000040 test -PUT 00000041 test -PUT 00000042 test -PUT 00000043 test -PUT 00000044 test -PUT 00000045 test -PUT 00000046 test -PUT 00000048 test -PUT 00000049 test -PUT 00000050 test -PUT 00000051 test -PUT 00000052 test -PUT 00000053 test -PUT 00000054 test -PUT 00000055 test -PUT 00000056 test -PUT 00000057 test -PUT 00000058 test -PUT 00000059 test -PUT 00000060 test -PUT 00000061 test -PUT 00000062 test -PUT 00000063 test -PUT 00000064 test -PUT 00000065 test -PUT 00000066 test -PUT 00000067 test -PUT 00000068 test -PUT 00000069 test -PUT 00000070 test -PUT 00000071 test -PUT 00000073 test -PUT 00000074 test -PUT 00000075 test -PUT 00000076 test -PUT 00000077 test -PUT 00000079 test -PUT 00000080 test -PUT 00000082 test -PUT 00000083 test -PUT 00000084 test -PUT 00000085 test -PUT 00000086 test -PUT 00000088 test -PUT 00000089 test -PUT 00000090 test -PUT 00000091 test -PUT 00000092 test -PUT 00000093 test -PUT 00000094 test -PUT 00000095 test -PUT 00000096 test -PUT 00000097 test -PUT 00000098 test -PUT 00000099 test -PUT 00000100 test -PUT 00000101 test -PUT 00000102 test -PUT 00000103 test -PUT 00000104 test -PUT 00000105 test -PUT 00000106 test -PUT 00000107 test -PUT 00000108 test -PUT 00000109 test -PUT 00000110 test -PUT 00000111 test -PUT 00000116 test -PUT 00000117 test -PUT 00000118 test -PUT 00000119 test -PUT 00000120 test -PUT 00000121 test -PUT 00000122 test -PUT 00000124 test -PUT 00000125 test -PUT 00000127 test -PUT 00000132 test -PUT 00000135 test -PUT 00000136 test -PUT 00000137 test -PUT 00000138 test -PUT 00000139 test -PUT 00000140 test -PUT 00000143 test -PUT 00000144 test -PUT 00000145 test -PUT 00000146 test -PUT 00000147 test -PUT 00000148 test -PUT 00000149 test -PUT 00000152 test -PUT 00000153 test -PUT 00000155 test -PUT 00000156 test -PUT 00000158 test -PUT 00000162 test -PUT 00000163 test -PUT 00000168 test -PUT 00000170 test -PUT 00000171 test -PUT 00000172 test -PUT 00000174 test -PUT 00000175 test -PUT 00000176 test -PUT 00000178 test -PUT 00000179 test -PUT 00000180 test -PUT 00000182 test -PUT 00000184 test -PUT 00000186 test -PUT 00000187 test -PUT 00000188 test -PUT 00000189 test -PUT 00000191 test -PUT 00000192 test -PUT 00000193 test -PUT 00000195 test -PUT 00000196 test -PUT 00000197 test -PUT 00000198 test -PUT 00000200 test -PUT 00000201 test -PUT 00000205 test -PUT 00000215 test -PUT 00000217 test -PUT 00000218 test -PUT 00000220 test -PUT 00000223 test -PUT 00000227 test -PUT 00000229 test -PUT 00000231 test -PUT 00000232 test -PUT 00000233 test -PUT 00000234 test -PUT 00000239 test -PUT 00000240 test -PUT 00000241 test -PUT 00000243 test -PUT 00000245 test -PUT 00000246 test -PUT 00000247 test -PUT 00000248 test -PUT 00000249 test -PUT 00000251 test -PUT 00000259 test -PUT 00000260 test -PUT 00000262 test -PUT 00000264 test -PUT 00000265 test -PUT 00000268 test -PUT 00000270 test -PUT 00000271 test -PUT 00000273 test -PUT 00000275 test -PUT 00000278 test -PUT 00000279 test -PUT 00000280 test -PUT 00000281 test -PUT 00000282 test -PUT 00000283 test -PUT 00000285 test -PUT 00000287 test -PUT 00000288 test -PUT 00000293 test -PUT 00000296 test -PUT 00000298 test -PUT 00000300 test -PUT 00000301 test -PUT 00000302 test -PUT 00000303 test -PUT 00000304 test -PUT 00000306 test -PUT 00000307 test -PUT 00000308 test -PUT 00000309 test -PUT 00000310 test -PUT 00000311 test -PUT 00000312 test -PUT 00000313 test -PUT 00000314 test -PUT 00000315 test -PUT 00000317 test -PUT 00000321 test -PUT 00000322 test -PUT 00000323 test -PUT 00000327 test -PUT 00000329 test -PUT 00000330 test -PUT 00000331 test -PUT 00000332 test -PUT 00000336 test -PUT 00000338 test -PUT 00000341 test -PUT 00000342 test -PUT 00000343 test -PUT 00000344 test -PUT 00000349 test -PUT 00000352 test -PUT 00000357 test -PUT 00000361 test -PUT 00000362 test -PUT 00000366 test -PUT 00000372 test -PUT 00000374 test -PUT 00000376 test -PUT 00000378 test -PUT 00000380 test -PUT 00000383 test -PUT 00000386 test -PUT 00000387 test -PUT 00000389 test -PUT 00000391 test -PUT 00000393 test -PUT 00000397 test -PUT 00000398 test -PUT 00000403 test -PUT 00000407 test -PUT 00000410 test -PUT 00000422 test -PUT 00000423 test -PUT 00000431 test -PUT 00000434 test -PUT 00000435 test -PUT 00000437 test -PUT 00000438 test -PUT 00000441 test -PUT 00000442 test -PUT 00000443 test -PUT 00000445 test -PUT 00000446 test -PUT 00000447 test -PUT 00000448 test -PUT 00000450 test -PUT 00000451 test -PUT 00000452 test -PUT 00000453 test -PUT 00000454 test -PUT 00000455 test -PUT 00000457 test -PUT 00000458 test -PUT 00000459 test -PUT 00000461 test -PUT 00000463 test -PUT 00000465 test -PUT 00000469 test -PUT 00000470 test -PUT 00000471 test -PUT 00000473 test -PUT 00000474 test -PUT 00000476 test -PUT 00000478 test -PUT 00000484 test -PUT 00000486 test -PUT 00000487 test -PUT 00000489 test -PUT 00000490 test -PUT 00000491 test -PUT 00000492 test -PUT 00000494 test -PUT 00000500 test -PUT 00000501 test -PUT 00000502 test -PUT 00000503 test -PUT 00000504 test -PUT 00000508 test -PUT 00000513 test -PUT 00000515 test -PUT 00000518 test -PUT 00000521 test -PUT 00000526 test -PUT 00000530 test -PUT 00000537 test -PUT 00000542 test -PUT 00000543 test -PUT 00000544 test -PUT 00000549 test -PUT 00000550 test -PUT 00000551 test -PUT 00000552 test -PUT 00000555 test -PUT 00000557 test -PUT 00000558 test -PUT 00000560 test -PUT 00000561 test -PUT 00000562 test -PUT 00000563 test -PUT 00000567 test -PUT 00000574 test -PUT 00000578 test -PUT 00000583 test -PUT 00000584 test -PUT 00000586 test -PUT 00000587 test -PUT 00000588 test -PUT 00000589 test -PUT 00000590 test -PUT 00000591 test -PUT 00000592 test -PUT 00000596 test -PUT 00000604 test -PUT 00000606 test -PUT 00000608 test -PUT 00000611 test -PUT 00000613 test -PUT 00000614 test -PUT 00000621 test -PUT 00000622 test -PUT 00000628 test -PUT 00000629 test -PUT 00000631 test -PUT 00000634 test -PUT 00000646 test -PUT 00000648 test -PUT 00000649 test -PUT 00000651 test -PUT 00000660 test -PUT 00000661 test -PUT 00000665 test -PUT 00000668 test -PUT 00000675 test -PUT 00000676 test -PUT 00000679 test -PUT 00000683 test -PUT 00000686 test -PUT 00000687 test -PUT 00000691 test -PUT 00000694 test -PUT 00000696 test -PUT 00000699 test -PUT 00000708 test -PUT 00000710 test -PUT 00000712 test -PUT 00000713 test -PUT 00000719 test -PUT 00000720 test -PUT 00000732 test -PUT 00000733 test -PUT 00000738 test -PUT 00000743 test -PUT 00000747 test -PUT 00000752 test -PUT 00000755 test -PUT 00000759 test -PUT 00000760 test -PUT 00000765 test -PUT 00000771 test -PUT 00000772 test -PUT 00000779 test -PUT 00000782 test -PUT 00000800 test -PUT 00000824 test -PUT 00000829 test -PUT 00000831 test -PUT 00000832 test -PUT 00000839 test -PUT 00000845 test -PUT 00000846 test -PUT 00000849 test -PUT 00000853 test -PUT 00000854 test -PUT 00000856 test -PUT 00000858 test -PUT 00000871 test -PUT 00000875 test -PUT 00000878 test -PUT 00000879 test -PUT 00000882 test -PUT 00000887 test -PUT 00000888 test -PUT 00000893 test -PUT 00000900 test -PUT 00000902 test -PUT 00000904 test -PUT 00000910 test -PUT 00000913 test -PUT 00000914 test -PUT 00000926 test -PUT 00000927 test -PUT 00000935 test -PUT 00000937 test -PUT 00000944 test -PUT 00000946 test -PUT 00000959 test -PUT 00000960 test -PUT 00000965 test -PUT 00000973 test -PUT 00000974 test -PUT 00000979 test -PUT 00000980 test -PUT 00000986 test -PUT 00000988 test -PUT 00000991 test -PUT 00000992 test -PUT 00000995 test -PUT 00000996 test -PUT 00000997 test -PUT 00000998 test -PUT 00000999 test -GET 00000012 -GET 00000001 -GET 00000038 -GET 00000048 -GET 00000002 -GET 00000974 -GET 00000077 -GET 00000366 -GET 00000001 -GET 00000001 -GET 00000765 -GET 00000634 -GET 00000148 -GET 00000075 -GET 00000500 -GET 00000007 -GET 00000317 -GET 00000003 -GET 00000264 -GET 00000031 -GET 00000192 -GET 00000691 -GET 00000019 -GET 00000015 -GET 00000037 -GET 00000111 -GET 00000001 -GET 00000998 -GET 00000001 -GET 00000521 -GET 00000544 -GET 00000069 -GET 00000001 -GET 00000913 -GET 00000007 -GET 00000555 -GET 00000004 -GET 00000431 -GET 00000307 -GET 00000946 -GET 00000007 -GET 00000085 -GET 00000070 -GET 00000893 -GET 00000062 -GET 00000002 -GET 00000904 -GET 00000040 -GET 00000240 -GET 00000001 -GET 00000011 -GET 00000070 -GET 00000002 -GET 00000048 -GET 00000423 -GET 00000023 -GET 00000389 -GET 00000489 -GET 00000079 -GET 00000034 -GET 00000158 -GET 00000001 -GET 00000452 -GET 00000031 -GET 00000442 -GET 00000016 -GET 00000562 -GET 00000824 -GET 00000387 -GET 00000241 -GET 00000504 -GET 00000858 -GET 00000273 -GET 00000002 -GET 00000108 -GET 00000845 -GET 00000049 -GET 00000050 -GET 00000038 -GET 00000508 -GET 00000012 -GET 00000303 -GET 00000054 -GET 00000003 -GET 00000010 -GET 00000021 -GET 00000012 -GET 00000037 -GET 00000445 -GET 00000022 -GET 00000383 -GET 00000017 -GET 00000986 -GET 00000187 -GET 00000156 -GET 00000091 -GET 00000502 -GET 00000008 -GET 00000001 -GET 00000308 -GET 00000008 -GET 00000019 -GET 00000374 -GET 00000009 -GET 00000021 -GET 00000001 -GET 00000122 -GET 00000049 -GET 00000003 -GET 00000246 -GET 00000854 -GET 00000648 -GET 00000004 -GET 00000992 -GET 00000001 -GET 00000004 -GET 00000099 -GET 00000195 -GET 00000959 -GET 00000137 -GET 00000240 -GET 00000233 -GET 00000033 -GET 00000710 -GET 00000103 -GET 00000719 -GET 00000017 -GET 00000008 -GET 00000071 -GET 00000443 -GET 00000005 -GET 00000094 -GET 00000457 -GET 00000001 -GET 00000075 -GET 00000001 -GET 00000676 -GET 00000019 -GET 00000247 -GET 00000002 -GET 00000474 -GET 00000012 -GET 00000022 -GET 00000082 -GET 00000031 -GET 00000021 -GET 00000042 -GET 00000002 -GET 00000631 -GET 00000245 -GET 00000102 -GET 00000676 -GET 00000248 -GET 00000001 -GET 00000005 -GET 00000001 -GET 00000050 -GET 00000006 -GET 00000344 -GET 00000080 -GET 00000336 -GET 00000025 -GET 00000003 -GET 00000003 -GET 00000036 -GET 00000037 -GET 00000306 -GET 00000001 -GET 00000038 -GET 00000080 -GET 00000487 -GET 00000002 -GET 00000738 -GET 00000003 -GET 00000782 -GET 00000007 -GET 00000302 -GET 00000557 -GET 00000003 -GET 00000513 -GET 00000127 -GET 00000451 -GET 00000046 -GET 00000772 -GET 00000005 -GET 00000463 -GET 00000054 -GET 00000012 -GET 00000494 -GET 00000152 -GET 00000200 -GET 00000163 -GET 00000083 -GET 00000020 -GET 00000349 -GET 00000490 -GET 00000064 -GET 00000057 -GET 00000660 -GET 00000003 -GET 00000002 -GET 00000393 -GET 00000991 -GET 00000109 -GET 00000264 -GET 00000124 -GET 00000039 -GET 00000002 -GET 00000755 -GET 00000007 -GET 00000518 -GET 00000887 -GET 00000023 -GET 00000003 -GET 00000018 -GET 00000696 -GET 00000016 -GET 00000001 -GET 00000349 -GET 00000448 -GET 00000578 -GET 00000902 -GET 00000022 -GET 00000069 -GET 00000012 -GET 00000478 -GET 00000155 -GET 00000330 -GET 00000025 -GET 00000002 -GET 00000824 -GET 00000478 -GET 00000101 -GET 00000022 -GET 00000201 -GET 00000102 -GET 00000403 -GET 00000829 -GET 00000094 -GET 00000469 -GET 00000008 -GET 00000058 -GET 00000352 -GET 00000341 -GET 00000518 -GET 00000013 -GET 00000009 -GET 00000001 -GET 00000162 -GET 00000283 -GET 00000590 -GET 00000010 -GET 00000001 -GET 00000240 -GET 00000063 -GET 00000006 -GET 00000018 -GET 00000004 -GET 00000015 -GET 00000205 -GET 00000293 -GET 00000965 -GET 00000107 -GET 00000004 -GET 00000070 -GET 00000513 -GET 00000022 -GET 00000043 -GET 00000001 -GET 00000322 -GET 00000139 -GET 00000501 -GET 00000029 -GET 00000223 -GET 00000031 -GET 00000058 -GET 00000001 -GET 00000281 -GET 00000275 -GET 00000189 -GET 00000004 -GET 00000846 -GET 00000007 -GET 00000239 -GET 00000001 -GET 00000583 -GET 00000309 -GET 00000249 -GET 00000036 -GET 00000035 -GET 00000220 -GET 00000628 -GET 00000144 -GET 00000033 -GET 00000045 -GET 00000002 -GET 00000002 -GET 00000040 -GET 00000104 -GET 00000103 -GET 00000010 -GET 00000001 -GET 00000057 -GET 00000303 -GET 00000008 -GET 00000338 -GET 00000005 -GET 00000135 -GET 00000009 -GET 00000067 -GET 00000372 -GET 00000086 -GET 00000002 -GET 00000025 -GET 00000054 -GET 00000172 -GET 00000002 -GET 00000088 -GET 00000980 -GET 00000278 -GET 00000001 -GET 00000217 -GET 00000280 -GET 00000397 -GET 00000125 -GET 00000171 -GET 00000543 -GET 00000604 -GET 00000049 -GET 00000979 -GET 00000342 -GET 00000003 -GET 00000176 -GET 00000549 -GET 00000362 -GET 00000006 -GET 00000003 -GET 00000973 -GET 00000048 -GET 00000037 -GET 00000001 -GET 00000062 -GET 00000410 -GET 00000010 -GET 00000262 -GET 00000039 -GET 00000012 -GET 00000011 -GET 00000537 -GET 00000675 -GET 00000438 -GET 00000168 -GET 00000220 -GET 00000321 -GET 00000063 -GET 00000760 -GET 00000056 -GET 00000006 -GET 00000016 -GET 00000068 -GET 00000839 -GET 00000035 -GET 00000162 -GET 00000105 -GET 00000999 -GET 00000135 -GET 00000120 -GET 00000088 -GET 00000110 -GET 00000038 -GET 00000300 -GET 00000308 -GET 00000003 -GET 00000629 -GET 00000193 -GET 00000018 -GET 00000026 -GET 00000503 -GET 00000563 -GET 00000586 -GET 00000013 -GET 00000592 -GET 00000003 -GET 00000007 -GET 00000021 -GET 00000560 -GET 00000422 -GET 00000233 -GET 00000668 -GET 00000003 -GET 00000010 -GET 00000712 -GET 00000613 -GET 00000017 -GET 00000014 -GET 00000376 -GET 00000567 -GET 00000198 -GET 00000245 -GET 00000621 -GET 00000035 -GET 00000002 -GET 00000049 -GET 00000020 -GET 00000927 -GET 00000268 -GET 00000001 -GET 00000398 -GET 00000270 -GET 00000231 -GET 00000589 -GET 00000587 -GET 00000100 -GET 00000006 -GET 00000926 -GET 00000196 -GET 00000041 -GET 00000009 -GET 00000060 -GET 00000584 -GET 00000001 -GET 00000380 -GET 00000001 -GET 00000001 -GET 00000331 -GET 00000016 -GET 00000099 -GET 00000888 -GET 00000003 -GET 00000470 -GET 00000071 -GET 00000747 -GET 00000550 -GET 00000052 -GET 00000771 -GET 00000040 -GET 00000186 -GET 00000686 -GET 00000004 -GET 00000110 -GET 00000028 -GET 00000562 -GET 00000001 -GET 00000454 -GET 00000015 -GET 00000552 -GET 00000588 -GET 00000110 -GET 00000106 -GET 00000100 -GET 00000051 -GET 00000001 -GET 00000119 -GET 00000362 -GET 00000085 -GET 00000069 -GET 00000172 -GET 00000001 -GET 00000001 -GET 00000079 -GET 00000132 -GET 00000042 -GET 00000099 -GET 00000378 -GET 00000063 -GET 00000448 -GET 00000002 -GET 00000001 -GET 00000486 -GET 00000020 -GET 00000001 -GET 00000089 -GET 00000017 -GET 00000003 -GET 00000935 -GET 00000001 -GET 00000006 -GET 00000100 -GET 00000234 -GET 00000002 -GET 00000596 -GET 00000108 -GET 00000075 -GET 00000089 -GET 00000020 -GET 00000048 -GET 00000028 -GET 00000591 -GET 00000513 -GET 00000003 -GET 00000007 -GET 00000120 -GET 00000052 -GET 00000285 -GET 00000011 -GET 00000304 -GET 00000020 -GET 00000090 -GET 00000002 -GET 00000024 -GET 00000995 -GET 00000998 -GET 00000282 -GET 00000043 -GET 00000712 -GET 00000002 -GET 00000270 -GET 00000201 -GET 00000879 -GET 00000474 -GET 00000084 -GET 00000344 -GET 00000831 -GET 00000033 -GET 00000069 -GET 00000008 -GET 00000023 -GET 00000191 -GET 00000019 -GET 00000606 -GET 00000099 -GET 00000034 -GET 00000011 -GET 00000265 -GET 00000997 -GET 00000008 -GET 00000058 -GET 00000298 -GET 00000002 -GET 00000006 -GET 00000109 -GET 00000287 -GET 00000013 -GET 00000341 -GET 00000232 -GET 00000191 -GET 00000003 -GET 00000011 -GET 00000089 -GET 00000031 -GET 00000312 -GET 00000002 -GET 00000882 -GET 00000003 -GET 00000143 -GET 00000140 -GET 00000732 -GET 00000007 -GET 00000574 -GET 00000022 -GET 00000453 -GET 00000331 -GET 00000053 -GET 00000007 -GET 00000719 -GET 00000144 -GET 00000016 -GET 00000002 -GET 00000098 -GET 00000041 -GET 00000484 -GET 00000733 -GET 00000217 -GET 00000389 -GET 00000036 -GET 00000009 -GET 00000979 -GET 00000679 -GET 00000180 -GET 00000008 -GET 00000457 -GET 00000046 -GET 00000025 -GET 00000024 -GET 00000034 -GET 00000092 -GET 00000174 -GET 00000438 -GET 00000028 -GET 00000611 -GET 00000013 -GET 00000288 -GET 00000106 -GET 00000342 -GET 00000039 -GET 00000474 -GET 00000550 -GET 00000423 -GET 00000526 -GET 00000001 -GET 00000038 -GET 00000015 -GET 00000622 -GET 00000174 -GET 00000871 -GET 00000049 -GET 00000675 -GET 00000040 -GET 00000002 -GET 00000054 -GET 00000010 -GET 00000011 -GET 00000118 -GET 00000459 -GET 00000095 -GET 00000197 -GET 00000476 -GET 00000032 -GET 00000279 -GET 00000006 -GET 00000445 -GET 00000016 -GET 00000032 -GET 00000093 -GET 00000960 -GET 00000120 -GET 00000315 -GET 00000205 -GET 00000218 -GET 00000521 -GET 00000002 -GET 00000032 -GET 00000227 -GET 00000443 -GET 00000003 -GET 00000022 -GET 00000093 -GET 00000712 -GET 00000434 -GET 00000083 -GET 00000301 -GET 00000132 -GET 00000011 -GET 00000738 -GET 00000001 -GET 00000447 -GET 00000031 -GET 00000504 -GET 00000515 -GET 00000064 -GET 00000036 -GET 00000003 -GET 00000149 -GET 00000022 -GET 00000614 -GET 00000031 -GET 00000025 -GET 00000007 -GET 00000551 -GET 00000066 -GET 00000005 -GET 00000021 -GET 00000231 -GET 00000560 -GET 00000001 -GET 00000030 -GET 00000996 -GET 00000018 -GET 00000045 -GET 00000010 -GET 00000136 -GET 00000435 -GET 00000003 -GET 00000914 -GET 00000010 -GET 00000321 -GET 00000201 -GET 00000450 -GET 00000125 -GET 00000001 -GET 00000003 -GET 00000001 -GET 00000651 -GET 00000013 -GET 00000030 -GET 00000111 -GET 00000111 -GET 00000215 -GET 00000021 -GET 00000249 -GET 00000055 -GET 00000024 -GET 00000147 -GET 00000004 -GET 00000067 -GET 00000002 -GET 00000184 -GET 00000143 -GET 00000013 -GET 00000088 -GET 00000260 -GET 00000001 -GET 00000001 -GET 00000004 -GET 00000022 -GET 00000001 -GET 00000009 -GET 00000329 -GET 00000135 -GET 00000229 -GET 00000163 -GET 00000009 -GET 00000001 -GET 00000596 -GET 00000138 -GET 00000646 -GET 00000098 -GET 00000283 -GET 00000001 -GET 00000153 -GET 00000343 -GET 00000117 -GET 00000001 -GET 00000060 -GET 00000853 -GET 00000075 -GET 00000032 -GET 00000116 -GET 00000738 -GET 00000071 -GET 00000311 -GET 00000029 -GET 00000001 -GET 00000296 -GET 00000234 -GET 00000182 -GET 00000011 -GET 00000191 -GET 00000492 -GET 00000162 -GET 00000175 -GET 00000910 -GET 00000900 -GET 00000175 -GET 00000004 -GET 00000686 -GET 00000170 -GET 00000070 -GET 00000001 -GET 00000020 -GET 00000012 -GET 00000465 -GET 00000163 -GET 00000109 -GET 00000052 -GET 00000342 -GET 00000054 -GET 00000182 -GET 00000029 -GET 00000649 -GET 00000064 -GET 00000005 -GET 00000450 -GET 00000455 -GET 00000026 -GET 00000503 -GET 00000116 -GET 00000002 -GET 00000030 -GET 00000099 -GET 00000065 -GET 00000002 -GET 00000465 -GET 00000096 -GET 00000097 -GET 00000271 -GET 00000059 -GET 00000002 -GET 00000145 -GET 00000001 -GET 00000779 -GET 00000558 -GET 00000037 -GET 00000800 -GET 00000001 -GET 00000683 -GET 00000070 -GET 00000028 -GET 00000007 -GET 00000043 -GET 00000026 -GET 00000085 -GET 00000108 -GET 00000001 -GET 00000139 -GET 00000132 -GET 00000003 -GET 00000002 -GET 00000393 -GET 00000061 -GET 00000461 -GET 00000024 -GET 00000314 -GET 00000035 -GET 00000011 -GET 00000002 -GET 00000001 -GET 00000608 -GET 00000561 -GET 00000024 -GET 00000007 -GET 00000752 -GET 00000251 -GET 00000156 -GET 00000015 -GET 00000031 -GET 00000521 -GET 00000002 -GET 00000313 -GET 00000720 -GET 00000007 -GET 00000004 -GET 00000064 -GET 00000243 -GET 00000003 -GET 00000010 -GET 00000121 -GET 00000665 -GET 00000065 -GET 00000441 -GET 00000050 -GET 00000162 -GET 00000008 -GET 00000050 -GET 00000832 -GET 00000879 -GET 00000009 -GET 00000308 -GET 00000104 -GET 00000259 -GET 00000002 -GET 00000138 -GET 00000014 -GET 00000102 -GET 00000001 -GET 00000048 -GET 00000153 -GET 00000006 -GET 00000002 -GET 00000002 -GET 00000013 -GET 00000492 -GET 00000849 -GET 00000066 -GET 00000878 -GET 00000163 -GET 00000239 -GET 00000327 -GET 00000069 -GET 00000341 -GET 00000001 -GET 00000407 -GET 00000179 -GET 00000132 -GET 00000003 -GET 00000067 -GET 00000076 -GET 00000007 -GET 00000146 -GET 00000003 -GET 00000025 -GET 00000121 -GET 00000178 -GET 00000491 -GET 00000683 -GET 00000310 -GET 00000002 -GET 00000051 -GET 00000012 -GET 00000442 -GET 00000465 -GET 00000023 -GET 00000029 -GET 00000001 -GET 00000003 -GET 00000021 -GET 00000856 -GET 00000135 -GET 00000105 -GET 00000018 -GET 00000001 -GET 00000309 -GET 00000088 -GET 00000188 -GET 00000108 -GET 00000944 -GET 00000309 -GET 00000080 -GET 00000017 -GET 00000097 -GET 00000008 -GET 00000002 -GET 00000262 -GET 00000044 -GET 00000446 -GET 00000343 -GET 00000937 -GET 00000092 -GET 00000055 -GET 00000490 -GET 00000001 -GET 00000008 -GET 00000002 -GET 00000473 -GET 00000352 -GET 00000001 -GET 00000275 -GET 00000007 -GET 00000241 -GET 00000233 -GET 00000003 -GET 00000713 -GET 00000068 -GET 00000100 -GET 00000023 -GET 00000357 -GET 00000019 -GET 00000323 -GET 00000022 -GET 00000234 -GET 00000005 -GET 00000053 -GET 00000043 -GET 00000002 -GET 00000018 -GET 00000039 -GET 00000002 -GET 00000743 -GET 00000296 -GET 00000009 -GET 00000007 -GET 00000437 -GET 00000088 -GET 00000008 -GET 00000926 -GET 00000003 -GET 00000386 -GET 00000988 -GET 00000001 -GET 00000011 -GET 00000026 -GET 00000332 -GET 00000015 -GET 00000699 -GET 00000001 -GET 00000084 -GET 00000687 -GET 00000005 -GET 00000011 -GET 00000031 -GET 00000391 -GET 00000146 -GET 00000042 -GET 00000023 -GET 00000018 -GET 00000073 -GET 00000033 -GET 00000007 -GET 00000001 -GET 00000442 -GET 00000458 -GET 00000542 -GET 00000127 -GET 00000014 -GET 00000362 -GET 00000361 -GET 00000001 -GET 00000759 -GET 00000040 -GET 00000471 -GET 00000366 -GET 00000357 -GET 00000875 -GET 00000017 -GET 00000002 -GET 00000247 -GET 00000871 -GET 00000001 -GET 00000004 -GET 00000001 -GET 00000004 -GET 00000013 -GET 00000100 -GET 00000055 -GET 00000005 -GET 00000530 -GET 00000708 -GET 00000006 -GET 00000694 -GET 00000073 -GET 00000001 -GET 00000661 -GET 00000092 -GET 00000052 -GET 00000030 -GET 00000117 -GET 00000074 -GET 00000021 -GET 00000478 -GET 00000223 From 973a01457b22030ca315716fa17fdf715811261b Mon Sep 17 00:00:00 2001 From: Chenggang Wu Date: Thu, 11 Apr 2019 09:04:22 -0700 Subject: [PATCH 08/15] Separates replication vector and key storage metadata (#88) --- cli.sh | 45 ++ cli.txt | 1437 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1482 insertions(+) create mode 100755 cli.sh create mode 100644 cli.txt diff --git a/cli.sh b/cli.sh new file mode 100755 index 00000000..27070a7e --- /dev/null +++ b/cli.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +# Copyright 2018 U.C. Berkeley RISE Lab +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if [ -z "$1" ] && [ -z "$2" ]; then + echo "Usage: ./scripts/start_local.sh build start-user" + echo "" + echo "You must run this from the project root directory." + exit 1 +fi + +if [ "$1" = "y" ] || [ "$1" = "yes" ]; then + ./scripts/build.sh +fi + +cp conf/kvs-example.yml conf/kvs-config.yml + +./build/kvs/src/monitor/flmonitor & +MPID=$! +./build/kvs/src/route/flroute & +RPID=$! +export SERVER_TYPE="memory" +./build/kvs/src/kvs/flkvs & +SPID=$! + +echo $MPID > pids +echo $RPID >> pids +echo $SPID >> pids + +if [ "$2" = "y" ] || [ "$2" = "yes" ]; then + # ./build/kvs/src/cli/flkvs-cli + ./build/client/kvs/cpp/flkvs-cli conf/kvs-config.yml cli.txt +fi diff --git a/cli.txt b/cli.txt new file mode 100644 index 00000000..16345ff4 --- /dev/null +++ b/cli.txt @@ -0,0 +1,1437 @@ +PUT 00000001 test +PUT 00000002 test +PUT 00000003 test +PUT 00000004 test +PUT 00000005 test +PUT 00000006 test +PUT 00000007 test +PUT 00000008 test +PUT 00000009 test +PUT 00000010 test +PUT 00000011 test +PUT 00000012 test +PUT 00000013 test +PUT 00000014 test +PUT 00000015 test +PUT 00000016 test +PUT 00000017 test +PUT 00000018 test +PUT 00000019 test +PUT 00000020 test +PUT 00000021 test +PUT 00000022 test +PUT 00000023 test +PUT 00000024 test +PUT 00000025 test +PUT 00000026 test +PUT 00000028 test +PUT 00000029 test +PUT 00000030 test +PUT 00000031 test +PUT 00000032 test +PUT 00000033 test +PUT 00000034 test +PUT 00000035 test +PUT 00000036 test +PUT 00000037 test +PUT 00000038 test +PUT 00000039 test +PUT 00000040 test +PUT 00000041 test +PUT 00000042 test +PUT 00000043 test +PUT 00000044 test +PUT 00000045 test +PUT 00000046 test +PUT 00000048 test +PUT 00000049 test +PUT 00000050 test +PUT 00000051 test +PUT 00000052 test +PUT 00000053 test +PUT 00000054 test +PUT 00000055 test +PUT 00000056 test +PUT 00000057 test +PUT 00000058 test +PUT 00000059 test +PUT 00000060 test +PUT 00000061 test +PUT 00000062 test +PUT 00000063 test +PUT 00000064 test +PUT 00000065 test +PUT 00000066 test +PUT 00000067 test +PUT 00000068 test +PUT 00000069 test +PUT 00000070 test +PUT 00000071 test +PUT 00000073 test +PUT 00000074 test +PUT 00000075 test +PUT 00000076 test +PUT 00000077 test +PUT 00000079 test +PUT 00000080 test +PUT 00000082 test +PUT 00000083 test +PUT 00000084 test +PUT 00000085 test +PUT 00000086 test +PUT 00000088 test +PUT 00000089 test +PUT 00000090 test +PUT 00000091 test +PUT 00000092 test +PUT 00000093 test +PUT 00000094 test +PUT 00000095 test +PUT 00000096 test +PUT 00000097 test +PUT 00000098 test +PUT 00000099 test +PUT 00000100 test +PUT 00000101 test +PUT 00000102 test +PUT 00000103 test +PUT 00000104 test +PUT 00000105 test +PUT 00000106 test +PUT 00000107 test +PUT 00000108 test +PUT 00000109 test +PUT 00000110 test +PUT 00000111 test +PUT 00000116 test +PUT 00000117 test +PUT 00000118 test +PUT 00000119 test +PUT 00000120 test +PUT 00000121 test +PUT 00000122 test +PUT 00000124 test +PUT 00000125 test +PUT 00000127 test +PUT 00000132 test +PUT 00000135 test +PUT 00000136 test +PUT 00000137 test +PUT 00000138 test +PUT 00000139 test +PUT 00000140 test +PUT 00000143 test +PUT 00000144 test +PUT 00000145 test +PUT 00000146 test +PUT 00000147 test +PUT 00000148 test +PUT 00000149 test +PUT 00000152 test +PUT 00000153 test +PUT 00000155 test +PUT 00000156 test +PUT 00000158 test +PUT 00000162 test +PUT 00000163 test +PUT 00000168 test +PUT 00000170 test +PUT 00000171 test +PUT 00000172 test +PUT 00000174 test +PUT 00000175 test +PUT 00000176 test +PUT 00000178 test +PUT 00000179 test +PUT 00000180 test +PUT 00000182 test +PUT 00000184 test +PUT 00000186 test +PUT 00000187 test +PUT 00000188 test +PUT 00000189 test +PUT 00000191 test +PUT 00000192 test +PUT 00000193 test +PUT 00000195 test +PUT 00000196 test +PUT 00000197 test +PUT 00000198 test +PUT 00000200 test +PUT 00000201 test +PUT 00000205 test +PUT 00000215 test +PUT 00000217 test +PUT 00000218 test +PUT 00000220 test +PUT 00000223 test +PUT 00000227 test +PUT 00000229 test +PUT 00000231 test +PUT 00000232 test +PUT 00000233 test +PUT 00000234 test +PUT 00000239 test +PUT 00000240 test +PUT 00000241 test +PUT 00000243 test +PUT 00000245 test +PUT 00000246 test +PUT 00000247 test +PUT 00000248 test +PUT 00000249 test +PUT 00000251 test +PUT 00000259 test +PUT 00000260 test +PUT 00000262 test +PUT 00000264 test +PUT 00000265 test +PUT 00000268 test +PUT 00000270 test +PUT 00000271 test +PUT 00000273 test +PUT 00000275 test +PUT 00000278 test +PUT 00000279 test +PUT 00000280 test +PUT 00000281 test +PUT 00000282 test +PUT 00000283 test +PUT 00000285 test +PUT 00000287 test +PUT 00000288 test +PUT 00000293 test +PUT 00000296 test +PUT 00000298 test +PUT 00000300 test +PUT 00000301 test +PUT 00000302 test +PUT 00000303 test +PUT 00000304 test +PUT 00000306 test +PUT 00000307 test +PUT 00000308 test +PUT 00000309 test +PUT 00000310 test +PUT 00000311 test +PUT 00000312 test +PUT 00000313 test +PUT 00000314 test +PUT 00000315 test +PUT 00000317 test +PUT 00000321 test +PUT 00000322 test +PUT 00000323 test +PUT 00000327 test +PUT 00000329 test +PUT 00000330 test +PUT 00000331 test +PUT 00000332 test +PUT 00000336 test +PUT 00000338 test +PUT 00000341 test +PUT 00000342 test +PUT 00000343 test +PUT 00000344 test +PUT 00000349 test +PUT 00000352 test +PUT 00000357 test +PUT 00000361 test +PUT 00000362 test +PUT 00000366 test +PUT 00000372 test +PUT 00000374 test +PUT 00000376 test +PUT 00000378 test +PUT 00000380 test +PUT 00000383 test +PUT 00000386 test +PUT 00000387 test +PUT 00000389 test +PUT 00000391 test +PUT 00000393 test +PUT 00000397 test +PUT 00000398 test +PUT 00000403 test +PUT 00000407 test +PUT 00000410 test +PUT 00000422 test +PUT 00000423 test +PUT 00000431 test +PUT 00000434 test +PUT 00000435 test +PUT 00000437 test +PUT 00000438 test +PUT 00000441 test +PUT 00000442 test +PUT 00000443 test +PUT 00000445 test +PUT 00000446 test +PUT 00000447 test +PUT 00000448 test +PUT 00000450 test +PUT 00000451 test +PUT 00000452 test +PUT 00000453 test +PUT 00000454 test +PUT 00000455 test +PUT 00000457 test +PUT 00000458 test +PUT 00000459 test +PUT 00000461 test +PUT 00000463 test +PUT 00000465 test +PUT 00000469 test +PUT 00000470 test +PUT 00000471 test +PUT 00000473 test +PUT 00000474 test +PUT 00000476 test +PUT 00000478 test +PUT 00000484 test +PUT 00000486 test +PUT 00000487 test +PUT 00000489 test +PUT 00000490 test +PUT 00000491 test +PUT 00000492 test +PUT 00000494 test +PUT 00000500 test +PUT 00000501 test +PUT 00000502 test +PUT 00000503 test +PUT 00000504 test +PUT 00000508 test +PUT 00000513 test +PUT 00000515 test +PUT 00000518 test +PUT 00000521 test +PUT 00000526 test +PUT 00000530 test +PUT 00000537 test +PUT 00000542 test +PUT 00000543 test +PUT 00000544 test +PUT 00000549 test +PUT 00000550 test +PUT 00000551 test +PUT 00000552 test +PUT 00000555 test +PUT 00000557 test +PUT 00000558 test +PUT 00000560 test +PUT 00000561 test +PUT 00000562 test +PUT 00000563 test +PUT 00000567 test +PUT 00000574 test +PUT 00000578 test +PUT 00000583 test +PUT 00000584 test +PUT 00000586 test +PUT 00000587 test +PUT 00000588 test +PUT 00000589 test +PUT 00000590 test +PUT 00000591 test +PUT 00000592 test +PUT 00000596 test +PUT 00000604 test +PUT 00000606 test +PUT 00000608 test +PUT 00000611 test +PUT 00000613 test +PUT 00000614 test +PUT 00000621 test +PUT 00000622 test +PUT 00000628 test +PUT 00000629 test +PUT 00000631 test +PUT 00000634 test +PUT 00000646 test +PUT 00000648 test +PUT 00000649 test +PUT 00000651 test +PUT 00000660 test +PUT 00000661 test +PUT 00000665 test +PUT 00000668 test +PUT 00000675 test +PUT 00000676 test +PUT 00000679 test +PUT 00000683 test +PUT 00000686 test +PUT 00000687 test +PUT 00000691 test +PUT 00000694 test +PUT 00000696 test +PUT 00000699 test +PUT 00000708 test +PUT 00000710 test +PUT 00000712 test +PUT 00000713 test +PUT 00000719 test +PUT 00000720 test +PUT 00000732 test +PUT 00000733 test +PUT 00000738 test +PUT 00000743 test +PUT 00000747 test +PUT 00000752 test +PUT 00000755 test +PUT 00000759 test +PUT 00000760 test +PUT 00000765 test +PUT 00000771 test +PUT 00000772 test +PUT 00000779 test +PUT 00000782 test +PUT 00000800 test +PUT 00000824 test +PUT 00000829 test +PUT 00000831 test +PUT 00000832 test +PUT 00000839 test +PUT 00000845 test +PUT 00000846 test +PUT 00000849 test +PUT 00000853 test +PUT 00000854 test +PUT 00000856 test +PUT 00000858 test +PUT 00000871 test +PUT 00000875 test +PUT 00000878 test +PUT 00000879 test +PUT 00000882 test +PUT 00000887 test +PUT 00000888 test +PUT 00000893 test +PUT 00000900 test +PUT 00000902 test +PUT 00000904 test +PUT 00000910 test +PUT 00000913 test +PUT 00000914 test +PUT 00000926 test +PUT 00000927 test +PUT 00000935 test +PUT 00000937 test +PUT 00000944 test +PUT 00000946 test +PUT 00000959 test +PUT 00000960 test +PUT 00000965 test +PUT 00000973 test +PUT 00000974 test +PUT 00000979 test +PUT 00000980 test +PUT 00000986 test +PUT 00000988 test +PUT 00000991 test +PUT 00000992 test +PUT 00000995 test +PUT 00000996 test +PUT 00000997 test +PUT 00000998 test +PUT 00000999 test +GET 00000012 +GET 00000001 +GET 00000038 +GET 00000048 +GET 00000002 +GET 00000974 +GET 00000077 +GET 00000366 +GET 00000001 +GET 00000001 +GET 00000765 +GET 00000634 +GET 00000148 +GET 00000075 +GET 00000500 +GET 00000007 +GET 00000317 +GET 00000003 +GET 00000264 +GET 00000031 +GET 00000192 +GET 00000691 +GET 00000019 +GET 00000015 +GET 00000037 +GET 00000111 +GET 00000001 +GET 00000998 +GET 00000001 +GET 00000521 +GET 00000544 +GET 00000069 +GET 00000001 +GET 00000913 +GET 00000007 +GET 00000555 +GET 00000004 +GET 00000431 +GET 00000307 +GET 00000946 +GET 00000007 +GET 00000085 +GET 00000070 +GET 00000893 +GET 00000062 +GET 00000002 +GET 00000904 +GET 00000040 +GET 00000240 +GET 00000001 +GET 00000011 +GET 00000070 +GET 00000002 +GET 00000048 +GET 00000423 +GET 00000023 +GET 00000389 +GET 00000489 +GET 00000079 +GET 00000034 +GET 00000158 +GET 00000001 +GET 00000452 +GET 00000031 +GET 00000442 +GET 00000016 +GET 00000562 +GET 00000824 +GET 00000387 +GET 00000241 +GET 00000504 +GET 00000858 +GET 00000273 +GET 00000002 +GET 00000108 +GET 00000845 +GET 00000049 +GET 00000050 +GET 00000038 +GET 00000508 +GET 00000012 +GET 00000303 +GET 00000054 +GET 00000003 +GET 00000010 +GET 00000021 +GET 00000012 +GET 00000037 +GET 00000445 +GET 00000022 +GET 00000383 +GET 00000017 +GET 00000986 +GET 00000187 +GET 00000156 +GET 00000091 +GET 00000502 +GET 00000008 +GET 00000001 +GET 00000308 +GET 00000008 +GET 00000019 +GET 00000374 +GET 00000009 +GET 00000021 +GET 00000001 +GET 00000122 +GET 00000049 +GET 00000003 +GET 00000246 +GET 00000854 +GET 00000648 +GET 00000004 +GET 00000992 +GET 00000001 +GET 00000004 +GET 00000099 +GET 00000195 +GET 00000959 +GET 00000137 +GET 00000240 +GET 00000233 +GET 00000033 +GET 00000710 +GET 00000103 +GET 00000719 +GET 00000017 +GET 00000008 +GET 00000071 +GET 00000443 +GET 00000005 +GET 00000094 +GET 00000457 +GET 00000001 +GET 00000075 +GET 00000001 +GET 00000676 +GET 00000019 +GET 00000247 +GET 00000002 +GET 00000474 +GET 00000012 +GET 00000022 +GET 00000082 +GET 00000031 +GET 00000021 +GET 00000042 +GET 00000002 +GET 00000631 +GET 00000245 +GET 00000102 +GET 00000676 +GET 00000248 +GET 00000001 +GET 00000005 +GET 00000001 +GET 00000050 +GET 00000006 +GET 00000344 +GET 00000080 +GET 00000336 +GET 00000025 +GET 00000003 +GET 00000003 +GET 00000036 +GET 00000037 +GET 00000306 +GET 00000001 +GET 00000038 +GET 00000080 +GET 00000487 +GET 00000002 +GET 00000738 +GET 00000003 +GET 00000782 +GET 00000007 +GET 00000302 +GET 00000557 +GET 00000003 +GET 00000513 +GET 00000127 +GET 00000451 +GET 00000046 +GET 00000772 +GET 00000005 +GET 00000463 +GET 00000054 +GET 00000012 +GET 00000494 +GET 00000152 +GET 00000200 +GET 00000163 +GET 00000083 +GET 00000020 +GET 00000349 +GET 00000490 +GET 00000064 +GET 00000057 +GET 00000660 +GET 00000003 +GET 00000002 +GET 00000393 +GET 00000991 +GET 00000109 +GET 00000264 +GET 00000124 +GET 00000039 +GET 00000002 +GET 00000755 +GET 00000007 +GET 00000518 +GET 00000887 +GET 00000023 +GET 00000003 +GET 00000018 +GET 00000696 +GET 00000016 +GET 00000001 +GET 00000349 +GET 00000448 +GET 00000578 +GET 00000902 +GET 00000022 +GET 00000069 +GET 00000012 +GET 00000478 +GET 00000155 +GET 00000330 +GET 00000025 +GET 00000002 +GET 00000824 +GET 00000478 +GET 00000101 +GET 00000022 +GET 00000201 +GET 00000102 +GET 00000403 +GET 00000829 +GET 00000094 +GET 00000469 +GET 00000008 +GET 00000058 +GET 00000352 +GET 00000341 +GET 00000518 +GET 00000013 +GET 00000009 +GET 00000001 +GET 00000162 +GET 00000283 +GET 00000590 +GET 00000010 +GET 00000001 +GET 00000240 +GET 00000063 +GET 00000006 +GET 00000018 +GET 00000004 +GET 00000015 +GET 00000205 +GET 00000293 +GET 00000965 +GET 00000107 +GET 00000004 +GET 00000070 +GET 00000513 +GET 00000022 +GET 00000043 +GET 00000001 +GET 00000322 +GET 00000139 +GET 00000501 +GET 00000029 +GET 00000223 +GET 00000031 +GET 00000058 +GET 00000001 +GET 00000281 +GET 00000275 +GET 00000189 +GET 00000004 +GET 00000846 +GET 00000007 +GET 00000239 +GET 00000001 +GET 00000583 +GET 00000309 +GET 00000249 +GET 00000036 +GET 00000035 +GET 00000220 +GET 00000628 +GET 00000144 +GET 00000033 +GET 00000045 +GET 00000002 +GET 00000002 +GET 00000040 +GET 00000104 +GET 00000103 +GET 00000010 +GET 00000001 +GET 00000057 +GET 00000303 +GET 00000008 +GET 00000338 +GET 00000005 +GET 00000135 +GET 00000009 +GET 00000067 +GET 00000372 +GET 00000086 +GET 00000002 +GET 00000025 +GET 00000054 +GET 00000172 +GET 00000002 +GET 00000088 +GET 00000980 +GET 00000278 +GET 00000001 +GET 00000217 +GET 00000280 +GET 00000397 +GET 00000125 +GET 00000171 +GET 00000543 +GET 00000604 +GET 00000049 +GET 00000979 +GET 00000342 +GET 00000003 +GET 00000176 +GET 00000549 +GET 00000362 +GET 00000006 +GET 00000003 +GET 00000973 +GET 00000048 +GET 00000037 +GET 00000001 +GET 00000062 +GET 00000410 +GET 00000010 +GET 00000262 +GET 00000039 +GET 00000012 +GET 00000011 +GET 00000537 +GET 00000675 +GET 00000438 +GET 00000168 +GET 00000220 +GET 00000321 +GET 00000063 +GET 00000760 +GET 00000056 +GET 00000006 +GET 00000016 +GET 00000068 +GET 00000839 +GET 00000035 +GET 00000162 +GET 00000105 +GET 00000999 +GET 00000135 +GET 00000120 +GET 00000088 +GET 00000110 +GET 00000038 +GET 00000300 +GET 00000308 +GET 00000003 +GET 00000629 +GET 00000193 +GET 00000018 +GET 00000026 +GET 00000503 +GET 00000563 +GET 00000586 +GET 00000013 +GET 00000592 +GET 00000003 +GET 00000007 +GET 00000021 +GET 00000560 +GET 00000422 +GET 00000233 +GET 00000668 +GET 00000003 +GET 00000010 +GET 00000712 +GET 00000613 +GET 00000017 +GET 00000014 +GET 00000376 +GET 00000567 +GET 00000198 +GET 00000245 +GET 00000621 +GET 00000035 +GET 00000002 +GET 00000049 +GET 00000020 +GET 00000927 +GET 00000268 +GET 00000001 +GET 00000398 +GET 00000270 +GET 00000231 +GET 00000589 +GET 00000587 +GET 00000100 +GET 00000006 +GET 00000926 +GET 00000196 +GET 00000041 +GET 00000009 +GET 00000060 +GET 00000584 +GET 00000001 +GET 00000380 +GET 00000001 +GET 00000001 +GET 00000331 +GET 00000016 +GET 00000099 +GET 00000888 +GET 00000003 +GET 00000470 +GET 00000071 +GET 00000747 +GET 00000550 +GET 00000052 +GET 00000771 +GET 00000040 +GET 00000186 +GET 00000686 +GET 00000004 +GET 00000110 +GET 00000028 +GET 00000562 +GET 00000001 +GET 00000454 +GET 00000015 +GET 00000552 +GET 00000588 +GET 00000110 +GET 00000106 +GET 00000100 +GET 00000051 +GET 00000001 +GET 00000119 +GET 00000362 +GET 00000085 +GET 00000069 +GET 00000172 +GET 00000001 +GET 00000001 +GET 00000079 +GET 00000132 +GET 00000042 +GET 00000099 +GET 00000378 +GET 00000063 +GET 00000448 +GET 00000002 +GET 00000001 +GET 00000486 +GET 00000020 +GET 00000001 +GET 00000089 +GET 00000017 +GET 00000003 +GET 00000935 +GET 00000001 +GET 00000006 +GET 00000100 +GET 00000234 +GET 00000002 +GET 00000596 +GET 00000108 +GET 00000075 +GET 00000089 +GET 00000020 +GET 00000048 +GET 00000028 +GET 00000591 +GET 00000513 +GET 00000003 +GET 00000007 +GET 00000120 +GET 00000052 +GET 00000285 +GET 00000011 +GET 00000304 +GET 00000020 +GET 00000090 +GET 00000002 +GET 00000024 +GET 00000995 +GET 00000998 +GET 00000282 +GET 00000043 +GET 00000712 +GET 00000002 +GET 00000270 +GET 00000201 +GET 00000879 +GET 00000474 +GET 00000084 +GET 00000344 +GET 00000831 +GET 00000033 +GET 00000069 +GET 00000008 +GET 00000023 +GET 00000191 +GET 00000019 +GET 00000606 +GET 00000099 +GET 00000034 +GET 00000011 +GET 00000265 +GET 00000997 +GET 00000008 +GET 00000058 +GET 00000298 +GET 00000002 +GET 00000006 +GET 00000109 +GET 00000287 +GET 00000013 +GET 00000341 +GET 00000232 +GET 00000191 +GET 00000003 +GET 00000011 +GET 00000089 +GET 00000031 +GET 00000312 +GET 00000002 +GET 00000882 +GET 00000003 +GET 00000143 +GET 00000140 +GET 00000732 +GET 00000007 +GET 00000574 +GET 00000022 +GET 00000453 +GET 00000331 +GET 00000053 +GET 00000007 +GET 00000719 +GET 00000144 +GET 00000016 +GET 00000002 +GET 00000098 +GET 00000041 +GET 00000484 +GET 00000733 +GET 00000217 +GET 00000389 +GET 00000036 +GET 00000009 +GET 00000979 +GET 00000679 +GET 00000180 +GET 00000008 +GET 00000457 +GET 00000046 +GET 00000025 +GET 00000024 +GET 00000034 +GET 00000092 +GET 00000174 +GET 00000438 +GET 00000028 +GET 00000611 +GET 00000013 +GET 00000288 +GET 00000106 +GET 00000342 +GET 00000039 +GET 00000474 +GET 00000550 +GET 00000423 +GET 00000526 +GET 00000001 +GET 00000038 +GET 00000015 +GET 00000622 +GET 00000174 +GET 00000871 +GET 00000049 +GET 00000675 +GET 00000040 +GET 00000002 +GET 00000054 +GET 00000010 +GET 00000011 +GET 00000118 +GET 00000459 +GET 00000095 +GET 00000197 +GET 00000476 +GET 00000032 +GET 00000279 +GET 00000006 +GET 00000445 +GET 00000016 +GET 00000032 +GET 00000093 +GET 00000960 +GET 00000120 +GET 00000315 +GET 00000205 +GET 00000218 +GET 00000521 +GET 00000002 +GET 00000032 +GET 00000227 +GET 00000443 +GET 00000003 +GET 00000022 +GET 00000093 +GET 00000712 +GET 00000434 +GET 00000083 +GET 00000301 +GET 00000132 +GET 00000011 +GET 00000738 +GET 00000001 +GET 00000447 +GET 00000031 +GET 00000504 +GET 00000515 +GET 00000064 +GET 00000036 +GET 00000003 +GET 00000149 +GET 00000022 +GET 00000614 +GET 00000031 +GET 00000025 +GET 00000007 +GET 00000551 +GET 00000066 +GET 00000005 +GET 00000021 +GET 00000231 +GET 00000560 +GET 00000001 +GET 00000030 +GET 00000996 +GET 00000018 +GET 00000045 +GET 00000010 +GET 00000136 +GET 00000435 +GET 00000003 +GET 00000914 +GET 00000010 +GET 00000321 +GET 00000201 +GET 00000450 +GET 00000125 +GET 00000001 +GET 00000003 +GET 00000001 +GET 00000651 +GET 00000013 +GET 00000030 +GET 00000111 +GET 00000111 +GET 00000215 +GET 00000021 +GET 00000249 +GET 00000055 +GET 00000024 +GET 00000147 +GET 00000004 +GET 00000067 +GET 00000002 +GET 00000184 +GET 00000143 +GET 00000013 +GET 00000088 +GET 00000260 +GET 00000001 +GET 00000001 +GET 00000004 +GET 00000022 +GET 00000001 +GET 00000009 +GET 00000329 +GET 00000135 +GET 00000229 +GET 00000163 +GET 00000009 +GET 00000001 +GET 00000596 +GET 00000138 +GET 00000646 +GET 00000098 +GET 00000283 +GET 00000001 +GET 00000153 +GET 00000343 +GET 00000117 +GET 00000001 +GET 00000060 +GET 00000853 +GET 00000075 +GET 00000032 +GET 00000116 +GET 00000738 +GET 00000071 +GET 00000311 +GET 00000029 +GET 00000001 +GET 00000296 +GET 00000234 +GET 00000182 +GET 00000011 +GET 00000191 +GET 00000492 +GET 00000162 +GET 00000175 +GET 00000910 +GET 00000900 +GET 00000175 +GET 00000004 +GET 00000686 +GET 00000170 +GET 00000070 +GET 00000001 +GET 00000020 +GET 00000012 +GET 00000465 +GET 00000163 +GET 00000109 +GET 00000052 +GET 00000342 +GET 00000054 +GET 00000182 +GET 00000029 +GET 00000649 +GET 00000064 +GET 00000005 +GET 00000450 +GET 00000455 +GET 00000026 +GET 00000503 +GET 00000116 +GET 00000002 +GET 00000030 +GET 00000099 +GET 00000065 +GET 00000002 +GET 00000465 +GET 00000096 +GET 00000097 +GET 00000271 +GET 00000059 +GET 00000002 +GET 00000145 +GET 00000001 +GET 00000779 +GET 00000558 +GET 00000037 +GET 00000800 +GET 00000001 +GET 00000683 +GET 00000070 +GET 00000028 +GET 00000007 +GET 00000043 +GET 00000026 +GET 00000085 +GET 00000108 +GET 00000001 +GET 00000139 +GET 00000132 +GET 00000003 +GET 00000002 +GET 00000393 +GET 00000061 +GET 00000461 +GET 00000024 +GET 00000314 +GET 00000035 +GET 00000011 +GET 00000002 +GET 00000001 +GET 00000608 +GET 00000561 +GET 00000024 +GET 00000007 +GET 00000752 +GET 00000251 +GET 00000156 +GET 00000015 +GET 00000031 +GET 00000521 +GET 00000002 +GET 00000313 +GET 00000720 +GET 00000007 +GET 00000004 +GET 00000064 +GET 00000243 +GET 00000003 +GET 00000010 +GET 00000121 +GET 00000665 +GET 00000065 +GET 00000441 +GET 00000050 +GET 00000162 +GET 00000008 +GET 00000050 +GET 00000832 +GET 00000879 +GET 00000009 +GET 00000308 +GET 00000104 +GET 00000259 +GET 00000002 +GET 00000138 +GET 00000014 +GET 00000102 +GET 00000001 +GET 00000048 +GET 00000153 +GET 00000006 +GET 00000002 +GET 00000002 +GET 00000013 +GET 00000492 +GET 00000849 +GET 00000066 +GET 00000878 +GET 00000163 +GET 00000239 +GET 00000327 +GET 00000069 +GET 00000341 +GET 00000001 +GET 00000407 +GET 00000179 +GET 00000132 +GET 00000003 +GET 00000067 +GET 00000076 +GET 00000007 +GET 00000146 +GET 00000003 +GET 00000025 +GET 00000121 +GET 00000178 +GET 00000491 +GET 00000683 +GET 00000310 +GET 00000002 +GET 00000051 +GET 00000012 +GET 00000442 +GET 00000465 +GET 00000023 +GET 00000029 +GET 00000001 +GET 00000003 +GET 00000021 +GET 00000856 +GET 00000135 +GET 00000105 +GET 00000018 +GET 00000001 +GET 00000309 +GET 00000088 +GET 00000188 +GET 00000108 +GET 00000944 +GET 00000309 +GET 00000080 +GET 00000017 +GET 00000097 +GET 00000008 +GET 00000002 +GET 00000262 +GET 00000044 +GET 00000446 +GET 00000343 +GET 00000937 +GET 00000092 +GET 00000055 +GET 00000490 +GET 00000001 +GET 00000008 +GET 00000002 +GET 00000473 +GET 00000352 +GET 00000001 +GET 00000275 +GET 00000007 +GET 00000241 +GET 00000233 +GET 00000003 +GET 00000713 +GET 00000068 +GET 00000100 +GET 00000023 +GET 00000357 +GET 00000019 +GET 00000323 +GET 00000022 +GET 00000234 +GET 00000005 +GET 00000053 +GET 00000043 +GET 00000002 +GET 00000018 +GET 00000039 +GET 00000002 +GET 00000743 +GET 00000296 +GET 00000009 +GET 00000007 +GET 00000437 +GET 00000088 +GET 00000008 +GET 00000926 +GET 00000003 +GET 00000386 +GET 00000988 +GET 00000001 +GET 00000011 +GET 00000026 +GET 00000332 +GET 00000015 +GET 00000699 +GET 00000001 +GET 00000084 +GET 00000687 +GET 00000005 +GET 00000011 +GET 00000031 +GET 00000391 +GET 00000146 +GET 00000042 +GET 00000023 +GET 00000018 +GET 00000073 +GET 00000033 +GET 00000007 +GET 00000001 +GET 00000442 +GET 00000458 +GET 00000542 +GET 00000127 +GET 00000014 +GET 00000362 +GET 00000361 +GET 00000001 +GET 00000759 +GET 00000040 +GET 00000471 +GET 00000366 +GET 00000357 +GET 00000875 +GET 00000017 +GET 00000002 +GET 00000247 +GET 00000871 +GET 00000001 +GET 00000004 +GET 00000001 +GET 00000004 +GET 00000013 +GET 00000100 +GET 00000055 +GET 00000005 +GET 00000530 +GET 00000708 +GET 00000006 +GET 00000694 +GET 00000073 +GET 00000001 +GET 00000661 +GET 00000092 +GET 00000052 +GET 00000030 +GET 00000117 +GET 00000074 +GET 00000021 +GET 00000478 +GET 00000223 From c793a3eccb85f6e25667c4dc5c86bfc0ef3ecdf6 Mon Sep 17 00:00:00 2001 From: Saurav Chhatrapati Date: Wed, 3 Apr 2019 08:43:34 +0000 Subject: [PATCH 09/15] Added heavy hitters sketch --- kvs/include/adaptive_heavy_hitters.hpp | 19 ++++++++++++++----- kvs/include/heavy_hitters.hpp | 6 +++--- kvs/include/kvs_common.hpp | 1 + kvs/src/kvs/replication_response_handler.cpp | 1 + kvs/src/kvs/server.cpp | 5 ++--- kvs/src/kvs/user_request_handler.cpp | 1 + kvs/src/monitor/monitoring.cpp | 18 +++++++++--------- kvs/src/monitor/movement_policy.cpp | 4 +--- kvs/src/monitor/slo_policy.cpp | 15 ++++++++------- kvs/tests/kvs/test_user_request_handler.hpp | 4 ++-- 10 files changed, 42 insertions(+), 32 deletions(-) diff --git a/kvs/include/adaptive_heavy_hitters.hpp b/kvs/include/adaptive_heavy_hitters.hpp index 089cd95f..79c581e9 100644 --- a/kvs/include/adaptive_heavy_hitters.hpp +++ b/kvs/include/adaptive_heavy_hitters.hpp @@ -1,3 +1,4 @@ +<<<<<<< HEAD // Copyright 2018 U.C. Berkeley RISE Lab // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,14 +13,22 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include -#include -#include -#include -#include +#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include "heavy_hitters.hpp" +#include +#include +#include #define alpha 0.2 diff --git a/kvs/include/heavy_hitters.hpp b/kvs/include/heavy_hitters.hpp index 2f71bee1..ed42dcef 100644 --- a/kvs/include/heavy_hitters.hpp +++ b/kvs/include/heavy_hitters.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include -#include #include -#include #include +#include +#include +#include #include #include #include diff --git a/kvs/include/kvs_common.hpp b/kvs/include/kvs_common.hpp index 4cb188bc..3196098e 100644 --- a/kvs/include/kvs_common.hpp +++ b/kvs/include/kvs_common.hpp @@ -17,6 +17,7 @@ #include "adaptive_heavy_hitters.hpp" #include "kvs_types.hpp" +#include "adaptive_heavy_hitters.hpp" const unsigned kMetadataReplicationFactor = 1; const unsigned kMetadataLocalReplicationFactor = 1; diff --git a/kvs/src/kvs/replication_response_handler.cpp b/kvs/src/kvs/replication_response_handler.cpp index 2848e562..8cdf4abf 100644 --- a/kvs/src/kvs/replication_response_handler.cpp +++ b/kvs/src/kvs/replication_response_handler.cpp @@ -25,6 +25,7 @@ void replication_response_handler( map& key_replication_map, set& local_changeset, ServerThread& wt, SerializerMap& serializers, SocketCache& pushers, AdaptiveThresholdHeavyHitters* sketch) { + KeyResponse response; response.ParseFromString(serialized); diff --git a/kvs/src/kvs/server.cpp b/kvs/src/kvs/server.cpp index 4ea90dcf..e7ce5c45 100644 --- a/kvs/src/kvs/server.cpp +++ b/kvs/src/kvs/server.cpp @@ -540,8 +540,8 @@ void run(unsigned thread_id, Address public_ip, Address private_ip, } // report hot key access stats - key = get_metadata_key(wt, kSelfTierId, wt.tid(), - MetadataType::key_access_hot); + key = + get_metadata_key(wt, kSelfTierId, wt.tid(), MetadataType::key_access_hot); string serialized_access; access.SerializeToString(&serialized_access); @@ -603,7 +603,6 @@ void run(unsigned thread_id, Address public_ip, Address private_ip, // Reset sketch for next epoch sketch->reset(); - // report key size stats KeySizeData primary_key_size; for (const auto& key_pair : stored_key_map) { if (is_primary_replica(key_pair.first, key_replication_map, diff --git a/kvs/src/kvs/user_request_handler.cpp b/kvs/src/kvs/user_request_handler.cpp index cf624e78..c6cd73fc 100644 --- a/kvs/src/kvs/user_request_handler.cpp +++ b/kvs/src/kvs/user_request_handler.cpp @@ -24,6 +24,7 @@ void user_request_handler( map& key_replication_map, set& local_changeset, ServerThread& wt, SerializerMap& serializers, SocketCache& pushers, AdaptiveThresholdHeavyHitters* sketch) { + KeyRequest request; request.ParseFromString(serialized); diff --git a/kvs/src/monitor/monitoring.cpp b/kvs/src/monitor/monitoring.cpp index 3335788e..4b5dfc14 100644 --- a/kvs/src/monitor/monitoring.cpp +++ b/kvs/src/monitor/monitoring.cpp @@ -236,18 +236,18 @@ int main(int argc, char *argv[]) { // collect internal statistics collect_internal_stats( global_hash_rings, local_hash_rings, pushers, mt, response_puller, - log, rid, key_access_frequency, hot_key_access_frequency, - cold_key_access_frequency, key_size, memory_storage, ebs_storage, + log, rid, key_access_frequency, hot_key_access_frequency, cold_key_access_frequency, + key_size, memory_storage, ebs_storage, memory_occupancy, ebs_occupancy, memory_accesses, ebs_accesses); // compute summary statistics - compute_summary_stats(key_access_frequency, hot_key_access_frequency, - cold_key_access_frequency, memory_storage, - ebs_storage, memory_occupancy, ebs_occupancy, - memory_accesses, ebs_accesses, key_access_summary, - hot_key_access_summary, cold_key_access_summary, ss, - log, server_monitoring_epoch); - + compute_summary_stats(key_access_frequency, hot_key_access_frequency, cold_key_access_frequency, + memory_storage, ebs_storage, + memory_occupancy, ebs_occupancy, memory_accesses, + ebs_accesses, key_access_summary, + hot_key_access_summary, cold_key_access_summary, + ss, log, + server_monitoring_epoch); // collect external statistics collect_external_stats(user_latency, user_throughput, ss, log); diff --git a/kvs/src/monitor/movement_policy.cpp b/kvs/src/monitor/movement_policy.cpp index 5febc6b6..74020143 100644 --- a/kvs/src/monitor/movement_policy.cpp +++ b/kvs/src/monitor/movement_policy.cpp @@ -134,9 +134,7 @@ void movement_policy(logger log, map& global_hash_rings, for (const auto& key_access_pair : cold_key_access_summary) { Key key = key_access_pair.first; unsigned access_count = key_access_pair.second; - - if (!is_metadata(key) && - !(key_replication_map[key] == minimum_rep)) { + if (!is_metadata(key) && !(key_replication_map[key] == minimum_rep)) { log->info("Key {} accessed {} times (threshold is {}).", key, access_count, ss.cold_key_access_mean + ss.cold_key_access_std); requests[key] = diff --git a/kvs/src/monitor/slo_policy.cpp b/kvs/src/monitor/slo_policy.cpp index 4932d4d1..510de5d5 100644 --- a/kvs/src/monitor/slo_policy.cpp +++ b/kvs/src/monitor/slo_policy.cpp @@ -55,7 +55,8 @@ void slo_policy(logger log, map& global_hash_rings, Key key = key_access_pair.first; unsigned access_count = key_access_pair.second; - if (!is_metadata(key) && access_count > ss.hot_key_access_mean && + if (!is_metadata(key) && + access_count > ss.hot_key_access_mean && latency_miss_ratio_map.find(key) != latency_miss_ratio_map.end()) { log->info("Key {} accessed {} times (threshold is {}).", key, access_count, ss.hot_key_access_mean); @@ -122,20 +123,20 @@ void slo_policy(logger log, map& global_hash_rings, Key key = key_access_pair.first; if (!is_metadata(key) && - key_replication_map[key].global_replication_[kMemoryTierId] == + metadata_map[key].global_replication_[kMemoryTierId] == (global_hash_rings[kMemoryTierId].size() / kVirtualThreadNum)) { unsigned new_mem_rep = - key_replication_map[key].global_replication_[kMemoryTierId] - 1; + metadata_map[key].global_replication_[kMemoryTierId] - 1; unsigned new_ebs_rep = std::max(kMinimumReplicaNumber - new_mem_rep, (unsigned)0); requests[key] = create_new_replication_vector( new_mem_rep, new_ebs_rep, - key_replication_map[key].local_replication_[kMemoryTierId], - key_replication_map[key].local_replication_[kEbsTierId]); + metadata_map[key].local_replication_[kMemoryTierId], + metadata_map[key].local_replication_[kEbsTierId]); log->info("Dereplication for key {}. M: {}->{}. E: {}->{}", key, - key_replication_map[key].global_replication_[kMemoryTierId], + metadata_map[key].global_replication_[kMemoryTierId], requests[key].global_replication_[kMemoryTierId], - key_replication_map[key].global_replication_[kEbsTierId], + metadata_map[key].global_replication_[kEbsTierId], requests[key].global_replication_[kEbsTierId]); } } diff --git a/kvs/tests/kvs/test_user_request_handler.hpp b/kvs/tests/kvs/test_user_request_handler.hpp index 87b65cc9..7959e0d9 100644 --- a/kvs/tests/kvs/test_user_request_handler.hpp +++ b/kvs/tests/kvs/test_user_request_handler.hpp @@ -352,7 +352,7 @@ TEST_F(ServerHandlerTest, UserPutAndGetOrderedSetTest) { user_request_handler(access_count, seed, put_request, log_, global_hash_rings, local_hash_rings, pending_requests, key_access_tracker, stored_key_map, key_replication_map, local_changeset, wt, - serializers, pushers); + serializers, pushers, sketch); vector messages = get_zmq_messages(); EXPECT_EQ(messages.size(), 1); @@ -377,7 +377,7 @@ TEST_F(ServerHandlerTest, UserPutAndGetOrderedSetTest) { user_request_handler(access_count, seed, get_request, log_, global_hash_rings, local_hash_rings, pending_requests, key_access_tracker, stored_key_map, key_replication_map, local_changeset, wt, - serializers, pushers); + serializers, pushers, sketch); messages = get_zmq_messages(); EXPECT_EQ(messages.size(), 2); From 864fd8c23e90d765f9b21c0e553172f92592a649 Mon Sep 17 00:00:00 2001 From: saurav_c Date: Thu, 11 Apr 2019 15:10:56 -0700 Subject: [PATCH 10/15] Heavy Hitter formatting --- kvs/include/adaptive_heavy_hitters.hpp | 19 ++++++++++--------- kvs/include/heavy_hitters.hpp | 6 +++--- kvs/include/kvs_common.hpp | 1 - kvs/src/kvs/replication_response_handler.cpp | 1 - kvs/src/kvs/server.cpp | 4 ++-- kvs/src/monitor/monitoring.cpp | 4 ++-- kvs/src/monitor/slo_policy.cpp | 15 +++++++-------- 7 files changed, 24 insertions(+), 26 deletions(-) diff --git a/kvs/include/adaptive_heavy_hitters.hpp b/kvs/include/adaptive_heavy_hitters.hpp index 79c581e9..64f315e7 100644 --- a/kvs/include/adaptive_heavy_hitters.hpp +++ b/kvs/include/adaptive_heavy_hitters.hpp @@ -1,4 +1,3 @@ -<<<<<<< HEAD // Copyright 2018 U.C. Berkeley RISE Lab // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,20 +14,22 @@ #include #include +#include +#include +#include +#include #include -#include -#include #include -#include -#include -#include +#include +#include +#include +#include +#include #include #include +#include #include #include "heavy_hitters.hpp" -#include -#include -#include #define alpha 0.2 diff --git a/kvs/include/heavy_hitters.hpp b/kvs/include/heavy_hitters.hpp index ed42dcef..2f71bee1 100644 --- a/kvs/include/heavy_hitters.hpp +++ b/kvs/include/heavy_hitters.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include +#include #include -#include #include -#include -#include +#include #include #include #include diff --git a/kvs/include/kvs_common.hpp b/kvs/include/kvs_common.hpp index 3196098e..4cb188bc 100644 --- a/kvs/include/kvs_common.hpp +++ b/kvs/include/kvs_common.hpp @@ -17,7 +17,6 @@ #include "adaptive_heavy_hitters.hpp" #include "kvs_types.hpp" -#include "adaptive_heavy_hitters.hpp" const unsigned kMetadataReplicationFactor = 1; const unsigned kMetadataLocalReplicationFactor = 1; diff --git a/kvs/src/kvs/replication_response_handler.cpp b/kvs/src/kvs/replication_response_handler.cpp index 8cdf4abf..2848e562 100644 --- a/kvs/src/kvs/replication_response_handler.cpp +++ b/kvs/src/kvs/replication_response_handler.cpp @@ -25,7 +25,6 @@ void replication_response_handler( map& key_replication_map, set& local_changeset, ServerThread& wt, SerializerMap& serializers, SocketCache& pushers, AdaptiveThresholdHeavyHitters* sketch) { - KeyResponse response; response.ParseFromString(serialized); diff --git a/kvs/src/kvs/server.cpp b/kvs/src/kvs/server.cpp index e7ce5c45..ccdb620b 100644 --- a/kvs/src/kvs/server.cpp +++ b/kvs/src/kvs/server.cpp @@ -540,8 +540,8 @@ void run(unsigned thread_id, Address public_ip, Address private_ip, } // report hot key access stats - key = - get_metadata_key(wt, kSelfTierId, wt.tid(), MetadataType::key_access_hot); + key = get_metadata_key(wt, kSelfTierId, wt.tid(), + MetadataType::key_access_hot); string serialized_access; access.SerializeToString(&serialized_access); diff --git a/kvs/src/monitor/monitoring.cpp b/kvs/src/monitor/monitoring.cpp index 4b5dfc14..439464e3 100644 --- a/kvs/src/monitor/monitoring.cpp +++ b/kvs/src/monitor/monitoring.cpp @@ -236,8 +236,8 @@ int main(int argc, char *argv[]) { // collect internal statistics collect_internal_stats( global_hash_rings, local_hash_rings, pushers, mt, response_puller, - log, rid, key_access_frequency, hot_key_access_frequency, cold_key_access_frequency, - key_size, memory_storage, ebs_storage, + log, rid, key_access_frequency, hot_key_access_frequency, + cold_key_access_frequency, key_size, memory_storage, ebs_storage, memory_occupancy, ebs_occupancy, memory_accesses, ebs_accesses); // compute summary statistics diff --git a/kvs/src/monitor/slo_policy.cpp b/kvs/src/monitor/slo_policy.cpp index 510de5d5..4932d4d1 100644 --- a/kvs/src/monitor/slo_policy.cpp +++ b/kvs/src/monitor/slo_policy.cpp @@ -55,8 +55,7 @@ void slo_policy(logger log, map& global_hash_rings, Key key = key_access_pair.first; unsigned access_count = key_access_pair.second; - if (!is_metadata(key) && - access_count > ss.hot_key_access_mean && + if (!is_metadata(key) && access_count > ss.hot_key_access_mean && latency_miss_ratio_map.find(key) != latency_miss_ratio_map.end()) { log->info("Key {} accessed {} times (threshold is {}).", key, access_count, ss.hot_key_access_mean); @@ -123,20 +122,20 @@ void slo_policy(logger log, map& global_hash_rings, Key key = key_access_pair.first; if (!is_metadata(key) && - metadata_map[key].global_replication_[kMemoryTierId] == + key_replication_map[key].global_replication_[kMemoryTierId] == (global_hash_rings[kMemoryTierId].size() / kVirtualThreadNum)) { unsigned new_mem_rep = - metadata_map[key].global_replication_[kMemoryTierId] - 1; + key_replication_map[key].global_replication_[kMemoryTierId] - 1; unsigned new_ebs_rep = std::max(kMinimumReplicaNumber - new_mem_rep, (unsigned)0); requests[key] = create_new_replication_vector( new_mem_rep, new_ebs_rep, - metadata_map[key].local_replication_[kMemoryTierId], - metadata_map[key].local_replication_[kEbsTierId]); + key_replication_map[key].local_replication_[kMemoryTierId], + key_replication_map[key].local_replication_[kEbsTierId]); log->info("Dereplication for key {}. M: {}->{}. E: {}->{}", key, - metadata_map[key].global_replication_[kMemoryTierId], + key_replication_map[key].global_replication_[kMemoryTierId], requests[key].global_replication_[kMemoryTierId], - metadata_map[key].global_replication_[kEbsTierId], + key_replication_map[key].global_replication_[kEbsTierId], requests[key].global_replication_[kEbsTierId]); } } From a1d6ed717876b5014c5576f1765e0dcac68242ef Mon Sep 17 00:00:00 2001 From: saurav_c Date: Fri, 12 Apr 2019 16:53:53 -0700 Subject: [PATCH 11/15] Removed debugging statements --- kvs/include/adaptive_heavy_hitters.hpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/kvs/include/adaptive_heavy_hitters.hpp b/kvs/include/adaptive_heavy_hitters.hpp index 64f315e7..089cd95f 100644 --- a/kvs/include/adaptive_heavy_hitters.hpp +++ b/kvs/include/adaptive_heavy_hitters.hpp @@ -12,23 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include -#include #include #include -#include #include #include -#include -#include -#include #include -#include #include -#include -#include #include -#include #include "heavy_hitters.hpp" #define alpha 0.2 From f795dc1cd73cff85adc46d8a5d88d31d40f41822 Mon Sep 17 00:00:00 2001 From: saurav_c Date: Fri, 12 Apr 2019 17:22:13 -0700 Subject: [PATCH 12/15] Removed input files --- cli.sh | 45 -- cli.txt | 1437 ------------------------------------------------------- 2 files changed, 1482 deletions(-) delete mode 100755 cli.sh delete mode 100644 cli.txt diff --git a/cli.sh b/cli.sh deleted file mode 100755 index 27070a7e..00000000 --- a/cli.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash - -# Copyright 2018 U.C. Berkeley RISE Lab -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -if [ -z "$1" ] && [ -z "$2" ]; then - echo "Usage: ./scripts/start_local.sh build start-user" - echo "" - echo "You must run this from the project root directory." - exit 1 -fi - -if [ "$1" = "y" ] || [ "$1" = "yes" ]; then - ./scripts/build.sh -fi - -cp conf/kvs-example.yml conf/kvs-config.yml - -./build/kvs/src/monitor/flmonitor & -MPID=$! -./build/kvs/src/route/flroute & -RPID=$! -export SERVER_TYPE="memory" -./build/kvs/src/kvs/flkvs & -SPID=$! - -echo $MPID > pids -echo $RPID >> pids -echo $SPID >> pids - -if [ "$2" = "y" ] || [ "$2" = "yes" ]; then - # ./build/kvs/src/cli/flkvs-cli - ./build/client/kvs/cpp/flkvs-cli conf/kvs-config.yml cli.txt -fi diff --git a/cli.txt b/cli.txt deleted file mode 100644 index 16345ff4..00000000 --- a/cli.txt +++ /dev/null @@ -1,1437 +0,0 @@ -PUT 00000001 test -PUT 00000002 test -PUT 00000003 test -PUT 00000004 test -PUT 00000005 test -PUT 00000006 test -PUT 00000007 test -PUT 00000008 test -PUT 00000009 test -PUT 00000010 test -PUT 00000011 test -PUT 00000012 test -PUT 00000013 test -PUT 00000014 test -PUT 00000015 test -PUT 00000016 test -PUT 00000017 test -PUT 00000018 test -PUT 00000019 test -PUT 00000020 test -PUT 00000021 test -PUT 00000022 test -PUT 00000023 test -PUT 00000024 test -PUT 00000025 test -PUT 00000026 test -PUT 00000028 test -PUT 00000029 test -PUT 00000030 test -PUT 00000031 test -PUT 00000032 test -PUT 00000033 test -PUT 00000034 test -PUT 00000035 test -PUT 00000036 test -PUT 00000037 test -PUT 00000038 test -PUT 00000039 test -PUT 00000040 test -PUT 00000041 test -PUT 00000042 test -PUT 00000043 test -PUT 00000044 test -PUT 00000045 test -PUT 00000046 test -PUT 00000048 test -PUT 00000049 test -PUT 00000050 test -PUT 00000051 test -PUT 00000052 test -PUT 00000053 test -PUT 00000054 test -PUT 00000055 test -PUT 00000056 test -PUT 00000057 test -PUT 00000058 test -PUT 00000059 test -PUT 00000060 test -PUT 00000061 test -PUT 00000062 test -PUT 00000063 test -PUT 00000064 test -PUT 00000065 test -PUT 00000066 test -PUT 00000067 test -PUT 00000068 test -PUT 00000069 test -PUT 00000070 test -PUT 00000071 test -PUT 00000073 test -PUT 00000074 test -PUT 00000075 test -PUT 00000076 test -PUT 00000077 test -PUT 00000079 test -PUT 00000080 test -PUT 00000082 test -PUT 00000083 test -PUT 00000084 test -PUT 00000085 test -PUT 00000086 test -PUT 00000088 test -PUT 00000089 test -PUT 00000090 test -PUT 00000091 test -PUT 00000092 test -PUT 00000093 test -PUT 00000094 test -PUT 00000095 test -PUT 00000096 test -PUT 00000097 test -PUT 00000098 test -PUT 00000099 test -PUT 00000100 test -PUT 00000101 test -PUT 00000102 test -PUT 00000103 test -PUT 00000104 test -PUT 00000105 test -PUT 00000106 test -PUT 00000107 test -PUT 00000108 test -PUT 00000109 test -PUT 00000110 test -PUT 00000111 test -PUT 00000116 test -PUT 00000117 test -PUT 00000118 test -PUT 00000119 test -PUT 00000120 test -PUT 00000121 test -PUT 00000122 test -PUT 00000124 test -PUT 00000125 test -PUT 00000127 test -PUT 00000132 test -PUT 00000135 test -PUT 00000136 test -PUT 00000137 test -PUT 00000138 test -PUT 00000139 test -PUT 00000140 test -PUT 00000143 test -PUT 00000144 test -PUT 00000145 test -PUT 00000146 test -PUT 00000147 test -PUT 00000148 test -PUT 00000149 test -PUT 00000152 test -PUT 00000153 test -PUT 00000155 test -PUT 00000156 test -PUT 00000158 test -PUT 00000162 test -PUT 00000163 test -PUT 00000168 test -PUT 00000170 test -PUT 00000171 test -PUT 00000172 test -PUT 00000174 test -PUT 00000175 test -PUT 00000176 test -PUT 00000178 test -PUT 00000179 test -PUT 00000180 test -PUT 00000182 test -PUT 00000184 test -PUT 00000186 test -PUT 00000187 test -PUT 00000188 test -PUT 00000189 test -PUT 00000191 test -PUT 00000192 test -PUT 00000193 test -PUT 00000195 test -PUT 00000196 test -PUT 00000197 test -PUT 00000198 test -PUT 00000200 test -PUT 00000201 test -PUT 00000205 test -PUT 00000215 test -PUT 00000217 test -PUT 00000218 test -PUT 00000220 test -PUT 00000223 test -PUT 00000227 test -PUT 00000229 test -PUT 00000231 test -PUT 00000232 test -PUT 00000233 test -PUT 00000234 test -PUT 00000239 test -PUT 00000240 test -PUT 00000241 test -PUT 00000243 test -PUT 00000245 test -PUT 00000246 test -PUT 00000247 test -PUT 00000248 test -PUT 00000249 test -PUT 00000251 test -PUT 00000259 test -PUT 00000260 test -PUT 00000262 test -PUT 00000264 test -PUT 00000265 test -PUT 00000268 test -PUT 00000270 test -PUT 00000271 test -PUT 00000273 test -PUT 00000275 test -PUT 00000278 test -PUT 00000279 test -PUT 00000280 test -PUT 00000281 test -PUT 00000282 test -PUT 00000283 test -PUT 00000285 test -PUT 00000287 test -PUT 00000288 test -PUT 00000293 test -PUT 00000296 test -PUT 00000298 test -PUT 00000300 test -PUT 00000301 test -PUT 00000302 test -PUT 00000303 test -PUT 00000304 test -PUT 00000306 test -PUT 00000307 test -PUT 00000308 test -PUT 00000309 test -PUT 00000310 test -PUT 00000311 test -PUT 00000312 test -PUT 00000313 test -PUT 00000314 test -PUT 00000315 test -PUT 00000317 test -PUT 00000321 test -PUT 00000322 test -PUT 00000323 test -PUT 00000327 test -PUT 00000329 test -PUT 00000330 test -PUT 00000331 test -PUT 00000332 test -PUT 00000336 test -PUT 00000338 test -PUT 00000341 test -PUT 00000342 test -PUT 00000343 test -PUT 00000344 test -PUT 00000349 test -PUT 00000352 test -PUT 00000357 test -PUT 00000361 test -PUT 00000362 test -PUT 00000366 test -PUT 00000372 test -PUT 00000374 test -PUT 00000376 test -PUT 00000378 test -PUT 00000380 test -PUT 00000383 test -PUT 00000386 test -PUT 00000387 test -PUT 00000389 test -PUT 00000391 test -PUT 00000393 test -PUT 00000397 test -PUT 00000398 test -PUT 00000403 test -PUT 00000407 test -PUT 00000410 test -PUT 00000422 test -PUT 00000423 test -PUT 00000431 test -PUT 00000434 test -PUT 00000435 test -PUT 00000437 test -PUT 00000438 test -PUT 00000441 test -PUT 00000442 test -PUT 00000443 test -PUT 00000445 test -PUT 00000446 test -PUT 00000447 test -PUT 00000448 test -PUT 00000450 test -PUT 00000451 test -PUT 00000452 test -PUT 00000453 test -PUT 00000454 test -PUT 00000455 test -PUT 00000457 test -PUT 00000458 test -PUT 00000459 test -PUT 00000461 test -PUT 00000463 test -PUT 00000465 test -PUT 00000469 test -PUT 00000470 test -PUT 00000471 test -PUT 00000473 test -PUT 00000474 test -PUT 00000476 test -PUT 00000478 test -PUT 00000484 test -PUT 00000486 test -PUT 00000487 test -PUT 00000489 test -PUT 00000490 test -PUT 00000491 test -PUT 00000492 test -PUT 00000494 test -PUT 00000500 test -PUT 00000501 test -PUT 00000502 test -PUT 00000503 test -PUT 00000504 test -PUT 00000508 test -PUT 00000513 test -PUT 00000515 test -PUT 00000518 test -PUT 00000521 test -PUT 00000526 test -PUT 00000530 test -PUT 00000537 test -PUT 00000542 test -PUT 00000543 test -PUT 00000544 test -PUT 00000549 test -PUT 00000550 test -PUT 00000551 test -PUT 00000552 test -PUT 00000555 test -PUT 00000557 test -PUT 00000558 test -PUT 00000560 test -PUT 00000561 test -PUT 00000562 test -PUT 00000563 test -PUT 00000567 test -PUT 00000574 test -PUT 00000578 test -PUT 00000583 test -PUT 00000584 test -PUT 00000586 test -PUT 00000587 test -PUT 00000588 test -PUT 00000589 test -PUT 00000590 test -PUT 00000591 test -PUT 00000592 test -PUT 00000596 test -PUT 00000604 test -PUT 00000606 test -PUT 00000608 test -PUT 00000611 test -PUT 00000613 test -PUT 00000614 test -PUT 00000621 test -PUT 00000622 test -PUT 00000628 test -PUT 00000629 test -PUT 00000631 test -PUT 00000634 test -PUT 00000646 test -PUT 00000648 test -PUT 00000649 test -PUT 00000651 test -PUT 00000660 test -PUT 00000661 test -PUT 00000665 test -PUT 00000668 test -PUT 00000675 test -PUT 00000676 test -PUT 00000679 test -PUT 00000683 test -PUT 00000686 test -PUT 00000687 test -PUT 00000691 test -PUT 00000694 test -PUT 00000696 test -PUT 00000699 test -PUT 00000708 test -PUT 00000710 test -PUT 00000712 test -PUT 00000713 test -PUT 00000719 test -PUT 00000720 test -PUT 00000732 test -PUT 00000733 test -PUT 00000738 test -PUT 00000743 test -PUT 00000747 test -PUT 00000752 test -PUT 00000755 test -PUT 00000759 test -PUT 00000760 test -PUT 00000765 test -PUT 00000771 test -PUT 00000772 test -PUT 00000779 test -PUT 00000782 test -PUT 00000800 test -PUT 00000824 test -PUT 00000829 test -PUT 00000831 test -PUT 00000832 test -PUT 00000839 test -PUT 00000845 test -PUT 00000846 test -PUT 00000849 test -PUT 00000853 test -PUT 00000854 test -PUT 00000856 test -PUT 00000858 test -PUT 00000871 test -PUT 00000875 test -PUT 00000878 test -PUT 00000879 test -PUT 00000882 test -PUT 00000887 test -PUT 00000888 test -PUT 00000893 test -PUT 00000900 test -PUT 00000902 test -PUT 00000904 test -PUT 00000910 test -PUT 00000913 test -PUT 00000914 test -PUT 00000926 test -PUT 00000927 test -PUT 00000935 test -PUT 00000937 test -PUT 00000944 test -PUT 00000946 test -PUT 00000959 test -PUT 00000960 test -PUT 00000965 test -PUT 00000973 test -PUT 00000974 test -PUT 00000979 test -PUT 00000980 test -PUT 00000986 test -PUT 00000988 test -PUT 00000991 test -PUT 00000992 test -PUT 00000995 test -PUT 00000996 test -PUT 00000997 test -PUT 00000998 test -PUT 00000999 test -GET 00000012 -GET 00000001 -GET 00000038 -GET 00000048 -GET 00000002 -GET 00000974 -GET 00000077 -GET 00000366 -GET 00000001 -GET 00000001 -GET 00000765 -GET 00000634 -GET 00000148 -GET 00000075 -GET 00000500 -GET 00000007 -GET 00000317 -GET 00000003 -GET 00000264 -GET 00000031 -GET 00000192 -GET 00000691 -GET 00000019 -GET 00000015 -GET 00000037 -GET 00000111 -GET 00000001 -GET 00000998 -GET 00000001 -GET 00000521 -GET 00000544 -GET 00000069 -GET 00000001 -GET 00000913 -GET 00000007 -GET 00000555 -GET 00000004 -GET 00000431 -GET 00000307 -GET 00000946 -GET 00000007 -GET 00000085 -GET 00000070 -GET 00000893 -GET 00000062 -GET 00000002 -GET 00000904 -GET 00000040 -GET 00000240 -GET 00000001 -GET 00000011 -GET 00000070 -GET 00000002 -GET 00000048 -GET 00000423 -GET 00000023 -GET 00000389 -GET 00000489 -GET 00000079 -GET 00000034 -GET 00000158 -GET 00000001 -GET 00000452 -GET 00000031 -GET 00000442 -GET 00000016 -GET 00000562 -GET 00000824 -GET 00000387 -GET 00000241 -GET 00000504 -GET 00000858 -GET 00000273 -GET 00000002 -GET 00000108 -GET 00000845 -GET 00000049 -GET 00000050 -GET 00000038 -GET 00000508 -GET 00000012 -GET 00000303 -GET 00000054 -GET 00000003 -GET 00000010 -GET 00000021 -GET 00000012 -GET 00000037 -GET 00000445 -GET 00000022 -GET 00000383 -GET 00000017 -GET 00000986 -GET 00000187 -GET 00000156 -GET 00000091 -GET 00000502 -GET 00000008 -GET 00000001 -GET 00000308 -GET 00000008 -GET 00000019 -GET 00000374 -GET 00000009 -GET 00000021 -GET 00000001 -GET 00000122 -GET 00000049 -GET 00000003 -GET 00000246 -GET 00000854 -GET 00000648 -GET 00000004 -GET 00000992 -GET 00000001 -GET 00000004 -GET 00000099 -GET 00000195 -GET 00000959 -GET 00000137 -GET 00000240 -GET 00000233 -GET 00000033 -GET 00000710 -GET 00000103 -GET 00000719 -GET 00000017 -GET 00000008 -GET 00000071 -GET 00000443 -GET 00000005 -GET 00000094 -GET 00000457 -GET 00000001 -GET 00000075 -GET 00000001 -GET 00000676 -GET 00000019 -GET 00000247 -GET 00000002 -GET 00000474 -GET 00000012 -GET 00000022 -GET 00000082 -GET 00000031 -GET 00000021 -GET 00000042 -GET 00000002 -GET 00000631 -GET 00000245 -GET 00000102 -GET 00000676 -GET 00000248 -GET 00000001 -GET 00000005 -GET 00000001 -GET 00000050 -GET 00000006 -GET 00000344 -GET 00000080 -GET 00000336 -GET 00000025 -GET 00000003 -GET 00000003 -GET 00000036 -GET 00000037 -GET 00000306 -GET 00000001 -GET 00000038 -GET 00000080 -GET 00000487 -GET 00000002 -GET 00000738 -GET 00000003 -GET 00000782 -GET 00000007 -GET 00000302 -GET 00000557 -GET 00000003 -GET 00000513 -GET 00000127 -GET 00000451 -GET 00000046 -GET 00000772 -GET 00000005 -GET 00000463 -GET 00000054 -GET 00000012 -GET 00000494 -GET 00000152 -GET 00000200 -GET 00000163 -GET 00000083 -GET 00000020 -GET 00000349 -GET 00000490 -GET 00000064 -GET 00000057 -GET 00000660 -GET 00000003 -GET 00000002 -GET 00000393 -GET 00000991 -GET 00000109 -GET 00000264 -GET 00000124 -GET 00000039 -GET 00000002 -GET 00000755 -GET 00000007 -GET 00000518 -GET 00000887 -GET 00000023 -GET 00000003 -GET 00000018 -GET 00000696 -GET 00000016 -GET 00000001 -GET 00000349 -GET 00000448 -GET 00000578 -GET 00000902 -GET 00000022 -GET 00000069 -GET 00000012 -GET 00000478 -GET 00000155 -GET 00000330 -GET 00000025 -GET 00000002 -GET 00000824 -GET 00000478 -GET 00000101 -GET 00000022 -GET 00000201 -GET 00000102 -GET 00000403 -GET 00000829 -GET 00000094 -GET 00000469 -GET 00000008 -GET 00000058 -GET 00000352 -GET 00000341 -GET 00000518 -GET 00000013 -GET 00000009 -GET 00000001 -GET 00000162 -GET 00000283 -GET 00000590 -GET 00000010 -GET 00000001 -GET 00000240 -GET 00000063 -GET 00000006 -GET 00000018 -GET 00000004 -GET 00000015 -GET 00000205 -GET 00000293 -GET 00000965 -GET 00000107 -GET 00000004 -GET 00000070 -GET 00000513 -GET 00000022 -GET 00000043 -GET 00000001 -GET 00000322 -GET 00000139 -GET 00000501 -GET 00000029 -GET 00000223 -GET 00000031 -GET 00000058 -GET 00000001 -GET 00000281 -GET 00000275 -GET 00000189 -GET 00000004 -GET 00000846 -GET 00000007 -GET 00000239 -GET 00000001 -GET 00000583 -GET 00000309 -GET 00000249 -GET 00000036 -GET 00000035 -GET 00000220 -GET 00000628 -GET 00000144 -GET 00000033 -GET 00000045 -GET 00000002 -GET 00000002 -GET 00000040 -GET 00000104 -GET 00000103 -GET 00000010 -GET 00000001 -GET 00000057 -GET 00000303 -GET 00000008 -GET 00000338 -GET 00000005 -GET 00000135 -GET 00000009 -GET 00000067 -GET 00000372 -GET 00000086 -GET 00000002 -GET 00000025 -GET 00000054 -GET 00000172 -GET 00000002 -GET 00000088 -GET 00000980 -GET 00000278 -GET 00000001 -GET 00000217 -GET 00000280 -GET 00000397 -GET 00000125 -GET 00000171 -GET 00000543 -GET 00000604 -GET 00000049 -GET 00000979 -GET 00000342 -GET 00000003 -GET 00000176 -GET 00000549 -GET 00000362 -GET 00000006 -GET 00000003 -GET 00000973 -GET 00000048 -GET 00000037 -GET 00000001 -GET 00000062 -GET 00000410 -GET 00000010 -GET 00000262 -GET 00000039 -GET 00000012 -GET 00000011 -GET 00000537 -GET 00000675 -GET 00000438 -GET 00000168 -GET 00000220 -GET 00000321 -GET 00000063 -GET 00000760 -GET 00000056 -GET 00000006 -GET 00000016 -GET 00000068 -GET 00000839 -GET 00000035 -GET 00000162 -GET 00000105 -GET 00000999 -GET 00000135 -GET 00000120 -GET 00000088 -GET 00000110 -GET 00000038 -GET 00000300 -GET 00000308 -GET 00000003 -GET 00000629 -GET 00000193 -GET 00000018 -GET 00000026 -GET 00000503 -GET 00000563 -GET 00000586 -GET 00000013 -GET 00000592 -GET 00000003 -GET 00000007 -GET 00000021 -GET 00000560 -GET 00000422 -GET 00000233 -GET 00000668 -GET 00000003 -GET 00000010 -GET 00000712 -GET 00000613 -GET 00000017 -GET 00000014 -GET 00000376 -GET 00000567 -GET 00000198 -GET 00000245 -GET 00000621 -GET 00000035 -GET 00000002 -GET 00000049 -GET 00000020 -GET 00000927 -GET 00000268 -GET 00000001 -GET 00000398 -GET 00000270 -GET 00000231 -GET 00000589 -GET 00000587 -GET 00000100 -GET 00000006 -GET 00000926 -GET 00000196 -GET 00000041 -GET 00000009 -GET 00000060 -GET 00000584 -GET 00000001 -GET 00000380 -GET 00000001 -GET 00000001 -GET 00000331 -GET 00000016 -GET 00000099 -GET 00000888 -GET 00000003 -GET 00000470 -GET 00000071 -GET 00000747 -GET 00000550 -GET 00000052 -GET 00000771 -GET 00000040 -GET 00000186 -GET 00000686 -GET 00000004 -GET 00000110 -GET 00000028 -GET 00000562 -GET 00000001 -GET 00000454 -GET 00000015 -GET 00000552 -GET 00000588 -GET 00000110 -GET 00000106 -GET 00000100 -GET 00000051 -GET 00000001 -GET 00000119 -GET 00000362 -GET 00000085 -GET 00000069 -GET 00000172 -GET 00000001 -GET 00000001 -GET 00000079 -GET 00000132 -GET 00000042 -GET 00000099 -GET 00000378 -GET 00000063 -GET 00000448 -GET 00000002 -GET 00000001 -GET 00000486 -GET 00000020 -GET 00000001 -GET 00000089 -GET 00000017 -GET 00000003 -GET 00000935 -GET 00000001 -GET 00000006 -GET 00000100 -GET 00000234 -GET 00000002 -GET 00000596 -GET 00000108 -GET 00000075 -GET 00000089 -GET 00000020 -GET 00000048 -GET 00000028 -GET 00000591 -GET 00000513 -GET 00000003 -GET 00000007 -GET 00000120 -GET 00000052 -GET 00000285 -GET 00000011 -GET 00000304 -GET 00000020 -GET 00000090 -GET 00000002 -GET 00000024 -GET 00000995 -GET 00000998 -GET 00000282 -GET 00000043 -GET 00000712 -GET 00000002 -GET 00000270 -GET 00000201 -GET 00000879 -GET 00000474 -GET 00000084 -GET 00000344 -GET 00000831 -GET 00000033 -GET 00000069 -GET 00000008 -GET 00000023 -GET 00000191 -GET 00000019 -GET 00000606 -GET 00000099 -GET 00000034 -GET 00000011 -GET 00000265 -GET 00000997 -GET 00000008 -GET 00000058 -GET 00000298 -GET 00000002 -GET 00000006 -GET 00000109 -GET 00000287 -GET 00000013 -GET 00000341 -GET 00000232 -GET 00000191 -GET 00000003 -GET 00000011 -GET 00000089 -GET 00000031 -GET 00000312 -GET 00000002 -GET 00000882 -GET 00000003 -GET 00000143 -GET 00000140 -GET 00000732 -GET 00000007 -GET 00000574 -GET 00000022 -GET 00000453 -GET 00000331 -GET 00000053 -GET 00000007 -GET 00000719 -GET 00000144 -GET 00000016 -GET 00000002 -GET 00000098 -GET 00000041 -GET 00000484 -GET 00000733 -GET 00000217 -GET 00000389 -GET 00000036 -GET 00000009 -GET 00000979 -GET 00000679 -GET 00000180 -GET 00000008 -GET 00000457 -GET 00000046 -GET 00000025 -GET 00000024 -GET 00000034 -GET 00000092 -GET 00000174 -GET 00000438 -GET 00000028 -GET 00000611 -GET 00000013 -GET 00000288 -GET 00000106 -GET 00000342 -GET 00000039 -GET 00000474 -GET 00000550 -GET 00000423 -GET 00000526 -GET 00000001 -GET 00000038 -GET 00000015 -GET 00000622 -GET 00000174 -GET 00000871 -GET 00000049 -GET 00000675 -GET 00000040 -GET 00000002 -GET 00000054 -GET 00000010 -GET 00000011 -GET 00000118 -GET 00000459 -GET 00000095 -GET 00000197 -GET 00000476 -GET 00000032 -GET 00000279 -GET 00000006 -GET 00000445 -GET 00000016 -GET 00000032 -GET 00000093 -GET 00000960 -GET 00000120 -GET 00000315 -GET 00000205 -GET 00000218 -GET 00000521 -GET 00000002 -GET 00000032 -GET 00000227 -GET 00000443 -GET 00000003 -GET 00000022 -GET 00000093 -GET 00000712 -GET 00000434 -GET 00000083 -GET 00000301 -GET 00000132 -GET 00000011 -GET 00000738 -GET 00000001 -GET 00000447 -GET 00000031 -GET 00000504 -GET 00000515 -GET 00000064 -GET 00000036 -GET 00000003 -GET 00000149 -GET 00000022 -GET 00000614 -GET 00000031 -GET 00000025 -GET 00000007 -GET 00000551 -GET 00000066 -GET 00000005 -GET 00000021 -GET 00000231 -GET 00000560 -GET 00000001 -GET 00000030 -GET 00000996 -GET 00000018 -GET 00000045 -GET 00000010 -GET 00000136 -GET 00000435 -GET 00000003 -GET 00000914 -GET 00000010 -GET 00000321 -GET 00000201 -GET 00000450 -GET 00000125 -GET 00000001 -GET 00000003 -GET 00000001 -GET 00000651 -GET 00000013 -GET 00000030 -GET 00000111 -GET 00000111 -GET 00000215 -GET 00000021 -GET 00000249 -GET 00000055 -GET 00000024 -GET 00000147 -GET 00000004 -GET 00000067 -GET 00000002 -GET 00000184 -GET 00000143 -GET 00000013 -GET 00000088 -GET 00000260 -GET 00000001 -GET 00000001 -GET 00000004 -GET 00000022 -GET 00000001 -GET 00000009 -GET 00000329 -GET 00000135 -GET 00000229 -GET 00000163 -GET 00000009 -GET 00000001 -GET 00000596 -GET 00000138 -GET 00000646 -GET 00000098 -GET 00000283 -GET 00000001 -GET 00000153 -GET 00000343 -GET 00000117 -GET 00000001 -GET 00000060 -GET 00000853 -GET 00000075 -GET 00000032 -GET 00000116 -GET 00000738 -GET 00000071 -GET 00000311 -GET 00000029 -GET 00000001 -GET 00000296 -GET 00000234 -GET 00000182 -GET 00000011 -GET 00000191 -GET 00000492 -GET 00000162 -GET 00000175 -GET 00000910 -GET 00000900 -GET 00000175 -GET 00000004 -GET 00000686 -GET 00000170 -GET 00000070 -GET 00000001 -GET 00000020 -GET 00000012 -GET 00000465 -GET 00000163 -GET 00000109 -GET 00000052 -GET 00000342 -GET 00000054 -GET 00000182 -GET 00000029 -GET 00000649 -GET 00000064 -GET 00000005 -GET 00000450 -GET 00000455 -GET 00000026 -GET 00000503 -GET 00000116 -GET 00000002 -GET 00000030 -GET 00000099 -GET 00000065 -GET 00000002 -GET 00000465 -GET 00000096 -GET 00000097 -GET 00000271 -GET 00000059 -GET 00000002 -GET 00000145 -GET 00000001 -GET 00000779 -GET 00000558 -GET 00000037 -GET 00000800 -GET 00000001 -GET 00000683 -GET 00000070 -GET 00000028 -GET 00000007 -GET 00000043 -GET 00000026 -GET 00000085 -GET 00000108 -GET 00000001 -GET 00000139 -GET 00000132 -GET 00000003 -GET 00000002 -GET 00000393 -GET 00000061 -GET 00000461 -GET 00000024 -GET 00000314 -GET 00000035 -GET 00000011 -GET 00000002 -GET 00000001 -GET 00000608 -GET 00000561 -GET 00000024 -GET 00000007 -GET 00000752 -GET 00000251 -GET 00000156 -GET 00000015 -GET 00000031 -GET 00000521 -GET 00000002 -GET 00000313 -GET 00000720 -GET 00000007 -GET 00000004 -GET 00000064 -GET 00000243 -GET 00000003 -GET 00000010 -GET 00000121 -GET 00000665 -GET 00000065 -GET 00000441 -GET 00000050 -GET 00000162 -GET 00000008 -GET 00000050 -GET 00000832 -GET 00000879 -GET 00000009 -GET 00000308 -GET 00000104 -GET 00000259 -GET 00000002 -GET 00000138 -GET 00000014 -GET 00000102 -GET 00000001 -GET 00000048 -GET 00000153 -GET 00000006 -GET 00000002 -GET 00000002 -GET 00000013 -GET 00000492 -GET 00000849 -GET 00000066 -GET 00000878 -GET 00000163 -GET 00000239 -GET 00000327 -GET 00000069 -GET 00000341 -GET 00000001 -GET 00000407 -GET 00000179 -GET 00000132 -GET 00000003 -GET 00000067 -GET 00000076 -GET 00000007 -GET 00000146 -GET 00000003 -GET 00000025 -GET 00000121 -GET 00000178 -GET 00000491 -GET 00000683 -GET 00000310 -GET 00000002 -GET 00000051 -GET 00000012 -GET 00000442 -GET 00000465 -GET 00000023 -GET 00000029 -GET 00000001 -GET 00000003 -GET 00000021 -GET 00000856 -GET 00000135 -GET 00000105 -GET 00000018 -GET 00000001 -GET 00000309 -GET 00000088 -GET 00000188 -GET 00000108 -GET 00000944 -GET 00000309 -GET 00000080 -GET 00000017 -GET 00000097 -GET 00000008 -GET 00000002 -GET 00000262 -GET 00000044 -GET 00000446 -GET 00000343 -GET 00000937 -GET 00000092 -GET 00000055 -GET 00000490 -GET 00000001 -GET 00000008 -GET 00000002 -GET 00000473 -GET 00000352 -GET 00000001 -GET 00000275 -GET 00000007 -GET 00000241 -GET 00000233 -GET 00000003 -GET 00000713 -GET 00000068 -GET 00000100 -GET 00000023 -GET 00000357 -GET 00000019 -GET 00000323 -GET 00000022 -GET 00000234 -GET 00000005 -GET 00000053 -GET 00000043 -GET 00000002 -GET 00000018 -GET 00000039 -GET 00000002 -GET 00000743 -GET 00000296 -GET 00000009 -GET 00000007 -GET 00000437 -GET 00000088 -GET 00000008 -GET 00000926 -GET 00000003 -GET 00000386 -GET 00000988 -GET 00000001 -GET 00000011 -GET 00000026 -GET 00000332 -GET 00000015 -GET 00000699 -GET 00000001 -GET 00000084 -GET 00000687 -GET 00000005 -GET 00000011 -GET 00000031 -GET 00000391 -GET 00000146 -GET 00000042 -GET 00000023 -GET 00000018 -GET 00000073 -GET 00000033 -GET 00000007 -GET 00000001 -GET 00000442 -GET 00000458 -GET 00000542 -GET 00000127 -GET 00000014 -GET 00000362 -GET 00000361 -GET 00000001 -GET 00000759 -GET 00000040 -GET 00000471 -GET 00000366 -GET 00000357 -GET 00000875 -GET 00000017 -GET 00000002 -GET 00000247 -GET 00000871 -GET 00000001 -GET 00000004 -GET 00000001 -GET 00000004 -GET 00000013 -GET 00000100 -GET 00000055 -GET 00000005 -GET 00000530 -GET 00000708 -GET 00000006 -GET 00000694 -GET 00000073 -GET 00000001 -GET 00000661 -GET 00000092 -GET 00000052 -GET 00000030 -GET 00000117 -GET 00000074 -GET 00000021 -GET 00000478 -GET 00000223 From 279fc429959c8609a7648c8e92ac209ddd6e6e14 Mon Sep 17 00:00:00 2001 From: saurav_c Date: Tue, 30 Apr 2019 14:54:12 -0700 Subject: [PATCH 13/15] Format check --- functions/cache/src/async_cache.cpp | 3 +-- kvs/src/kvs/user_request_handler.cpp | 1 - kvs/src/monitor/monitoring.cpp | 13 ++++++------- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/functions/cache/src/async_cache.cpp b/functions/cache/src/async_cache.cpp index b81e60f3..3678baf8 100644 --- a/functions/cache/src/async_cache.cpp +++ b/functions/cache/src/async_cache.cpp @@ -297,8 +297,7 @@ void run(KvsAsyncClientInterface* client, Address ip, unsigned thread_id) { case LatticeType::ORDERED_SET: local_ordered_set_cache.erase(key); break; - default: - break; // this can never happen + default: break; // this can never happen } key_type_map[key] = tuple.lattice_type(); diff --git a/kvs/src/kvs/user_request_handler.cpp b/kvs/src/kvs/user_request_handler.cpp index c6cd73fc..cf624e78 100644 --- a/kvs/src/kvs/user_request_handler.cpp +++ b/kvs/src/kvs/user_request_handler.cpp @@ -24,7 +24,6 @@ void user_request_handler( map& key_replication_map, set& local_changeset, ServerThread& wt, SerializerMap& serializers, SocketCache& pushers, AdaptiveThresholdHeavyHitters* sketch) { - KeyRequest request; request.ParseFromString(serialized); diff --git a/kvs/src/monitor/monitoring.cpp b/kvs/src/monitor/monitoring.cpp index 439464e3..9241b947 100644 --- a/kvs/src/monitor/monitoring.cpp +++ b/kvs/src/monitor/monitoring.cpp @@ -241,13 +241,12 @@ int main(int argc, char *argv[]) { memory_occupancy, ebs_occupancy, memory_accesses, ebs_accesses); // compute summary statistics - compute_summary_stats(key_access_frequency, hot_key_access_frequency, cold_key_access_frequency, - memory_storage, ebs_storage, - memory_occupancy, ebs_occupancy, memory_accesses, - ebs_accesses, key_access_summary, - hot_key_access_summary, cold_key_access_summary, - ss, log, - server_monitoring_epoch); + compute_summary_stats(key_access_frequency, hot_key_access_frequency, + cold_key_access_frequency, memory_storage, + ebs_storage, memory_occupancy, ebs_occupancy, + memory_accesses, ebs_accesses, key_access_summary, + hot_key_access_summary, cold_key_access_summary, ss, + log, server_monitoring_epoch); // collect external statistics collect_external_stats(user_latency, user_throughput, ss, log); From fda49347b543f1992dd69aa8edfe6907f69b9198 Mon Sep 17 00:00:00 2001 From: saurav_c Date: Tue, 30 Apr 2019 15:26:45 -0700 Subject: [PATCH 14/15] Fixed format error --- kvs/tests/kvs/test_user_request_handler.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kvs/tests/kvs/test_user_request_handler.hpp b/kvs/tests/kvs/test_user_request_handler.hpp index 7959e0d9..fa583540 100644 --- a/kvs/tests/kvs/test_user_request_handler.hpp +++ b/kvs/tests/kvs/test_user_request_handler.hpp @@ -115,7 +115,7 @@ TEST_F(ServerHandlerTest, UserGetOrderedSetTest) { user_request_handler(access_count, seed, get_request, log_, global_hash_rings, local_hash_rings, pending_requests, key_access_tracker, stored_key_map, key_replication_map, local_changeset, wt, - serializers, pushers); + serializers, pushers, sketch); vector messages = get_zmq_messages(); EXPECT_EQ(messages.size(), 1); From c679386948e4c21d8e6e8309f634b6f7da4cd78e Mon Sep 17 00:00:00 2001 From: saurav_c Date: Tue, 30 Apr 2019 20:02:14 -0700 Subject: [PATCH 15/15] Revert async_cache.cpp --- functions/cache/src/async_cache.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/functions/cache/src/async_cache.cpp b/functions/cache/src/async_cache.cpp index 3678baf8..b81e60f3 100644 --- a/functions/cache/src/async_cache.cpp +++ b/functions/cache/src/async_cache.cpp @@ -297,7 +297,8 @@ void run(KvsAsyncClientInterface* client, Address ip, unsigned thread_id) { case LatticeType::ORDERED_SET: local_ordered_set_cache.erase(key); break; - default: break; // this can never happen + default: + break; // this can never happen } key_type_map[key] = tuple.lattice_type();