From b30a4a8aa0056162016cf3bb72b72f7842eb32da Mon Sep 17 00:00:00 2001 From: Jenkins Date: Thu, 8 Aug 2024 07:07:28 +0300 Subject: [PATCH] Regenerated by Jenkins --- CNAME | 1 + index.html | 1 + master/abort__on__ebadf_8hh_source.html | 118 + master/abort__on__expiry_8hh_source.html | 141 + master/abort__source_8hh_source.html | 289 ++ master/abortable__fifo_8hh_source.html | 298 ++ master/alien_8hh.html | 154 + master/alien_8hh_source.html | 279 ++ master/align_8hh_source.html | 142 + master/aligned__buffer_8hh_source.html | 131 + master/all_8hh_source.html | 264 + .../alloc__failure__injector_8hh_source.html | 202 + master/annotated.html | 782 +++ master/api-level_8hh_source.html | 133 + master/api_8hh_source.html | 459 ++ master/api__docs_8hh_source.html | 389 ++ master/app-template_8hh_source.html | 208 + master/arp_8hh_source.html | 398 ++ master/array__map_8hh_source.html | 139 + master/as__future_8hh_source.html | 160 + master/backtrace_8hh_source.html | 331 ++ master/bc_s.png | Bin 0 -> 676 bytes master/bdwn.png | Bin 0 -> 147 bytes master/bitops_8hh_source.html | 159 + master/bitset-iter_8hh_source.html | 276 ++ master/bool__class_8hh_source.html | 165 + master/buffer__allocator_8hh_source.html | 123 + master/cacheline_8hh_source.html | 129 + master/checked__ptr_8hh.html | 114 + master/checked__ptr_8hh_source.html | 228 + master/chunked__fifo_8hh_source.html | 701 +++ master/circular__buffer_8hh_source.html | 573 +++ ...circular__buffer__fixed__capacity_8hh.html | 104 + ...r__buffer__fixed__capacity_8hh_source.html | 452 ++ master/classes.html | 153 + master/classlinux__perf__event-members.html | 87 + master/classlinux__perf__event.html | 113 + ..._1concrete__performance__test-members.html | 96 + ...ternal_1_1concrete__performance__test.html | 234 + ...nternal_1_1concrete__performance__test.png | Bin 0 -> 1080 bytes ...ts_1_1internal_1_1perf__stats-members.html | 95 + ...erf__tests_1_1internal_1_1perf__stats.html | 133 + ...internal_1_1performance__test-members.html | 96 + ...ests_1_1internal_1_1performance__test.html | 185 + ...tests_1_1internal_1_1performance__test.png | Bin 0 -> 1082 bytes ...internal_1_1time__measurement-members.html | 86 + ...ests_1_1internal_1_1time__measurement.html | 101 + master/classsampler-members.html | 85 + master/classsampler.html | 191 + ...sseastar_1_1abort__on__expiry-members.html | 87 + master/classseastar_1_1abort__on__expiry.html | 170 + ..._1abort__requested__exception-members.html | 83 + ...eastar_1_1abort__requested__exception.html | 134 + ...seastar_1_1abort__requested__exception.png | Bin 0 -> 1999 bytes ...classseastar_1_1abort__source-members.html | 94 + master/classseastar_1_1abort__source.html | 272 ++ ...abort__source_1_1subscription-members.html | 87 + ...star_1_1abort__source_1_1subscription.html | 139 + ...astar_1_1abort__source_1_1subscription.png | Bin 0 -> 1106 bytes master/classseastar_1_1adder-members.html | 84 + master/classseastar_1_1adder.html | 100 + ...sseastar_1_1alien_1_1instance-members.html | 86 + master/classseastar_1_1alien_1_1instance.html | 113 + ...ar_1_1alien_1_1message__queue-members.html | 88 + ...assseastar_1_1alien_1_1message__queue.html | 109 + .../classseastar_1_1array__map-members.html | 86 + master/classseastar_1_1array__map.html | 101 + ...ar_1_1async__sharded__service-members.html | 88 + ...assseastar_1_1async__sharded__service.html | 120 + ...lassseastar_1_1async__sharded__service.png | Bin 0 -> 1208 bytes ...classseastar_1_1basic__rwlock-members.html | 99 + master/classseastar_1_1basic__rwlock.html | 378 ++ master/classseastar_1_1basic__rwlock.png | Bin 0 -> 1271 bytes ...ssseastar_1_1basic__semaphore-members.html | 105 + master/classseastar_1_1basic__semaphore.html | 691 +++ master/classseastar_1_1basic__semaphore.png | Bin 0 -> 961 bytes ...lassseastar_1_1basic__sstring-members.html | 168 + master/classseastar_1_1basic__sstring.html | 759 +++ ...r_1_1bitsets_1_1set__iterator-members.html | 93 + ...ssseastar_1_1bitsets_1_1set__iterator.html | 126 + ...star_1_1bitsets_1_1set__range-members.html | 87 + ...classseastar_1_1bitsets_1_1set__range.html | 108 + .../classseastar_1_1bool__class-members.html | 92 + master/classseastar_1_1bool__class.html | 136 + ..._1broken__condition__variable-members.html | 83 + ...eastar_1_1broken__condition__variable.html | 103 + ...seastar_1_1broken__condition__variable.png | Bin 0 -> 677 bytes ...r_1_1broken__named__semaphore-members.html | 84 + ...ssseastar_1_1broken__named__semaphore.html | 134 + ...assseastar_1_1broken__named__semaphore.png | Bin 0 -> 1049 bytes ...ar_1_1broken__pipe__exception-members.html | 83 + ...assseastar_1_1broken__pipe__exception.html | 98 + ...lassseastar_1_1broken__pipe__exception.png | Bin 0 -> 668 bytes ...sseastar_1_1broken__semaphore-members.html | 83 + master/classseastar_1_1broken__semaphore.html | 135 + master/classseastar_1_1broken__semaphore.png | Bin 0 -> 1053 bytes ...ssseastar_1_1cancelled__error-members.html | 83 + master/classseastar_1_1cancelled__error.html | 104 + master/classseastar_1_1cancelled__error.png | Bin 0 -> 580 bytes .../classseastar_1_1checked__ptr-members.html | 97 + master/classseastar_1_1checked__ptr.html | 348 ++ ..._1_1checked__ptr__is__null__exception.html | 92 + ...r_1_1checked__ptr__is__null__exception.png | Bin 0 -> 716 bytes ...classseastar_1_1chunked__fifo-members.html | 115 + master/classseastar_1_1chunked__fifo.html | 189 + ...ssseastar_1_1circular__buffer-members.html | 127 + master/classseastar_1_1circular__buffer.html | 247 + ...ular__buffer__fixed__capacity-members.html | 119 + ..._1_1circular__buffer__fixed__capacity.html | 221 + ...fixed__capacity_1_1cbiterator-members.html | 106 + ...buffer__fixed__capacity_1_1cbiterator.html | 159 + ...1_1concrete__execution__stage-members.html | 99 + ...seastar_1_1concrete__execution__stage.html | 260 + ...sseastar_1_1concrete__execution__stage.png | Bin 0 -> 1029 bytes ...eastar_1_1condition__variable-members.html | 102 + .../classseastar_1_1condition__variable.html | 700 +++ ...ndition__variable__timed__out-members.html | 83 + ...ar_1_1condition__variable__timed__out.html | 103 + ...tar_1_1condition__variable__timed__out.png | Bin 0 -> 696 bytes ...sseastar_1_1connected__socket-members.html | 102 + master/classseastar_1_1connected__socket.html | 411 ++ ...eastar_1_1consumption__result-members.html | 91 + .../classseastar_1_1consumption__result.html | 120 + ...ssseastar_1_1coroutine_1_1all-members.html | 84 + master/classseastar_1_1coroutine_1_1all.html | 124 + ...ar_1_1coroutine_1_1as__future-members.html | 83 + ...assseastar_1_1coroutine_1_1as__future.html | 116 + ...lassseastar_1_1coroutine_1_1as__future.png | Bin 0 -> 988 bytes ...e__without__preemption__check-members.html | 83 + ...s__future__without__preemption__check.html | 104 + ...as__future__without__preemption__check.png | Bin 0 -> 1179 bytes ...oroutine_1_1experimental_1_1generator.html | 82 + ...1generator__buffered__promise-members.html | 104 + ...ernal_1_1generator__buffered__promise.html | 165 + ...ternal_1_1generator__buffered__promise.png | Bin 0 -> 1143 bytes ...enerator__unbuffered__promise-members.html | 102 + ...nal_1_1generator__unbuffered__promise.html | 218 + ...rnal_1_1generator__unbuffered__promise.png | Bin 0 -> 1073 bytes ...eastar_1_1coroutine_1_1lambda-members.html | 84 + .../classseastar_1_1coroutine_1_1lambda.html | 150 + ..._1_1coroutine_1_1maybe__yield-members.html | 83 + ...sseastar_1_1coroutine_1_1maybe__yield.html | 109 + ...outine_1_1parallel__for__each-members.html | 89 + ...r_1_1coroutine_1_1parallel__for__each.html | 140 + ...ar_1_1coroutine_1_1parallel__for__each.png | Bin 0 -> 844 bytes .../classseastar_1_1data__sink-members.html | 95 + master/classseastar_1_1data__sink.html | 125 + ...ssseastar_1_1data__sink__impl-members.html | 92 + master/classseastar_1_1data__sink__impl.html | 126 + master/classseastar_1_1data__sink__impl.png | Bin 0 -> 1063 bytes .../classseastar_1_1data__source-members.html | 91 + master/classseastar_1_1data__source.html | 121 + ...seastar_1_1data__source__impl-members.html | 86 + .../classseastar_1_1data__source__impl.html | 111 + master/classseastar_1_1data__source__impl.png | Bin 0 -> 2155 bytes ...ssseastar_1_1deferred__action-members.html | 88 + master/classseastar_1_1deferred__action.html | 104 + ...assseastar_1_1deferred__close-members.html | 89 + master/classseastar_1_1deferred__close.html | 245 + ...lassseastar_1_1deferred__stop-members.html | 89 + master/classseastar_1_1deferred__stop.html | 245 + master/classseastar_1_1deleter-members.html | 97 + master/classseastar_1_1deleter.html | 151 + ...nable__lw__shared__from__this-members.html | 90 + ...tar_1_1enable__lw__shared__from__this.html | 123 + ...star_1_1enable__lw__shared__from__this.png | Bin 0 -> 863 bytes ...1_1enable__shared__from__this-members.html | 85 + ...seastar_1_1enable__shared__from__this.html | 108 + ...sseastar_1_1enable__shared__from__this.png | Bin 0 -> 1216 bytes .../classseastar_1_1enum__hash-members.html | 83 + master/classseastar_1_1enum__hash.html | 92 + ...ssseastar_1_1execution__stage-members.html | 97 + master/classseastar_1_1execution__stage.html | 276 ++ master/classseastar_1_1execution__stage.png | Bin 0 -> 1034 bytes ...1_1experimental_1_1fsnotifier-members.html | 94 + ...seastar_1_1experimental_1_1fsnotifier.html | 327 ++ ...mental_1_1fsnotifier_1_1watch-members.html | 88 + ..._1experimental_1_1fsnotifier_1_1watch.html | 130 + ...ar_1_1experimental_1_1process-members.html | 92 + ...assseastar_1_1experimental_1_1process.html | 201 + ...al_1_1websocket_1_1connection-members.html | 93 + ...perimental_1_1websocket_1_1connection.html | 136 + ...xperimental_1_1websocket_1_1connection.png | Bin 0 -> 854 bytes ...tal_1_1websocket_1_1exception-members.html | 84 + ...xperimental_1_1websocket_1_1exception.html | 105 + ...experimental_1_1websocket_1_1exception.png | Bin 0 -> 722 bytes ...mental_1_1websocket_1_1server-members.html | 89 + ..._1experimental_1_1websocket_1_1server.html | 118 + ...ebsocket_1_1websocket__parser-members.html | 88 + ...tal_1_1websocket_1_1websocket__parser.html | 104 + ...lassseastar_1_1expiring__fifo-members.html | 98 + master/classseastar_1_1expiring__fifo.html | 409 ++ .../classseastar_1_1fair__group-members.html | 101 + master/classseastar_1_1fair__group.html | 214 + .../classseastar_1_1fair__queue-members.html | 104 + master/classseastar_1_1fair__queue.html | 402 ++ ...seastar_1_1fair__queue__entry-members.html | 86 + .../classseastar_1_1fair__queue__entry.html | 105 + ...eastar_1_1fair__queue__ticket-members.html | 94 + .../classseastar_1_1fair__queue__ticket.html | 319 ++ master/classseastar_1_1file-members.html | 124 + master/classseastar_1_1file.html | 1290 +++++ .../classseastar_1_1file_1_1eof__error.html | 92 + master/classseastar_1_1file_1_1eof__error.png | Bin 0 -> 566 bytes .../classseastar_1_1file__desc-members.html | 137 + master/classseastar_1_1file__desc.html | 256 + .../classseastar_1_1file__handle-members.html | 88 + master/classseastar_1_1file__handle.html | 118 + ...seastar_1_1file__handle__impl-members.html | 85 + .../classseastar_1_1file__handle__impl.html | 95 + .../classseastar_1_1file__impl-members.html | 109 + master/classseastar_1_1file__impl.html | 184 + master/classseastar_1_1file__impl.png | Bin 0 -> 659 bytes ...1file__input__stream__history-members.html | 81 + ...astar_1_1file__input__stream__history.html | 85 + .../classseastar_1_1foreign__ptr-members.html | 102 + master/classseastar_1_1foreign__ptr.html | 313 ++ ...mented__memory__input__stream-members.html | 93 + ..._1_1fragmented__memory__input__stream.html | 127 + ...ented__memory__output__stream-members.html | 92 + ...1_1fragmented__memory__output__stream.html | 120 + master/classseastar_1_1future-members.html | 107 + master/classseastar_1_1future.html | 727 +++ master/classseastar_1_1future.png | Bin 0 -> 1357 bytes master/classseastar_1_1gate-members.html | 98 + master/classseastar_1_1gate.html | 345 ++ ...lassseastar_1_1gate_1_1holder-members.html | 90 + master/classseastar_1_1gate_1_1holder.html | 281 ++ ...ar_1_1gate__closed__exception-members.html | 83 + ...assseastar_1_1gate__closed__exception.html | 104 + ...lassseastar_1_1gate__closed__exception.png | Bin 0 -> 657 bytes ...ttp_1_1experimental_1_1client-members.html | 93 + ...tar_1_1http_1_1experimental_1_1client.html | 396 ++ ...1_1experimental_1_1connection-members.html | 86 + ...1_1http_1_1experimental_1_1connection.html | 228 + ..._1_1http_1_1experimental_1_1connection.png | Bin 0 -> 1446 bytes ...mental_1_1connection__factory-members.html | 84 + ..._1experimental_1_1connection__factory.html | 126 + ...tp_1_1internal_1_1client__ref-members.html | 86 + ...ar_1_1http_1_1internal_1_1client__ref.html | 98 + ...tar_1_1httpd_1_1api__docs__20-members.html | 85 + ...lassseastar_1_1httpd_1_1api__docs__20.html | 112 + ...tar_1_1httpd_1_1api__registry-members.html | 96 + ...lassseastar_1_1httpd_1_1api__registry.html | 245 + ...classseastar_1_1httpd_1_1api__registry.png | Bin 0 -> 1132 bytes ...1_1httpd_1_1api__registry__20-members.html | 97 + ...seastar_1_1httpd_1_1api__registry__20.html | 248 + ...sseastar_1_1httpd_1_1api__registry__20.png | Bin 0 -> 1149 bytes ...1httpd_1_1api__registry__base-members.html | 94 + ...astar_1_1httpd_1_1api__registry__base.html | 243 + ...eastar_1_1httpd_1_1api__registry__base.png | Bin 0 -> 1537 bytes ...tpd_1_1api__registry__builder-members.html | 90 + ...ar_1_1httpd_1_1api__registry__builder.html | 127 + ...tar_1_1httpd_1_1api__registry__builder.png | Bin 0 -> 932 bytes ...d_1_1api__registry__builder20-members.html | 93 + ..._1_1httpd_1_1api__registry__builder20.html | 211 + ...r_1_1httpd_1_1api__registry__builder20.png | Bin 0 -> 933 bytes ...1api__registry__builder__base-members.html | 87 + ...httpd_1_1api__registry__builder__base.html | 122 + ...1httpd_1_1api__registry__builder__base.png | Bin 0 -> 1215 bytes ...ttpd_1_1bad__chunk__exception-members.html | 88 + ...tar_1_1httpd_1_1bad__chunk__exception.html | 111 + ...star_1_1httpd_1_1bad__chunk__exception.png | Bin 0 -> 1454 bytes ...ttpd_1_1bad__param__exception-members.html | 88 + ...tar_1_1httpd_1_1bad__param__exception.html | 111 + ...star_1_1httpd_1_1bad__param__exception.png | Bin 0 -> 1464 bytes ...pd_1_1bad__request__exception-members.html | 87 + ...r_1_1httpd_1_1bad__request__exception.html | 117 + ...ar_1_1httpd_1_1bad__request__exception.png | Bin 0 -> 2504 bytes ...r_1_1httpd_1_1base__exception-members.html | 86 + ...ssseastar_1_1httpd_1_1base__exception.html | 121 + ...assseastar_1_1httpd_1_1base__exception.png | Bin 0 -> 3974 bytes ...eastar_1_1httpd_1_1connection-members.html | 99 + .../classseastar_1_1httpd_1_1connection.html | 143 + .../classseastar_1_1httpd_1_1connection.png | Bin 0 -> 729 bytes ..._1_1httpd_1_1content__replace-members.html | 87 + ...sseastar_1_1httpd_1_1content__replace.html | 193 + ...ssseastar_1_1httpd_1_1content__replace.png | Bin 0 -> 730 bytes ..._1httpd_1_1directory__handler-members.html | 97 + ...eastar_1_1httpd_1_1directory__handler.html | 459 ++ ...seastar_1_1httpd_1_1directory__handler.png | Bin 0 -> 1162 bytes ...tar_1_1httpd_1_1file__handler-members.html | 97 + ...lassseastar_1_1httpd_1_1file__handler.html | 466 ++ ...classseastar_1_1httpd_1_1file__handler.png | Bin 0 -> 1124 bytes ...1_1file__interaction__handler-members.html | 96 + ..._1httpd_1_1file__interaction__handler.html | 409 ++ ...1_1httpd_1_1file__interaction__handler.png | Bin 0 -> 1610 bytes ...1_1httpd_1_1file__transformer-members.html | 86 + ...seastar_1_1httpd_1_1file__transformer.html | 162 + ...sseastar_1_1httpd_1_1file__transformer.png | Bin 0 -> 738 bytes ...1_1httpd_1_1function__handler-members.html | 96 + ...seastar_1_1httpd_1_1function__handler.html | 254 + ...sseastar_1_1httpd_1_1function__handler.png | Bin 0 -> 719 bytes ...tar_1_1httpd_1_1handler__base-members.html | 88 + ...lassseastar_1_1httpd_1_1handler__base.html | 239 + ...classseastar_1_1httpd_1_1handler__base.png | Bin 0 -> 2925 bytes ...ttpd_1_1handler__registration-members.html | 84 + ...tar_1_1httpd_1_1handler__registration.html | 165 + ...star_1_1httpd_1_1http__server-members.html | 104 + ...classseastar_1_1httpd_1_1http__server.html | 195 + ...ttpd_1_1http__server__control-members.html | 91 + ...tar_1_1httpd_1_1http__server__control.html | 113 + ...httpd_1_1http__server__tester-members.html | 83 + ...star_1_1httpd_1_1http__server__tester.html | 92 + ...astar_1_1httpd_1_1http__stats-members.html | 83 + .../classseastar_1_1httpd_1_1http__stats.html | 92 + ...rnal_1_1chunked__source__impl-members.html | 87 + ..._1_1internal_1_1chunked__source__impl.html | 164 + ...d_1_1internal_1_1chunked__source__impl.png | Bin 0 -> 829 bytes ...content__length__source__impl-members.html | 87 + ...rnal_1_1content__length__source__impl.html | 190 + ...ernal_1_1content__length__source__impl.png | Bin 0 -> 977 bytes ...r_1_1httpd_1_1json__exception-members.html | 100 + ...ssseastar_1_1httpd_1_1json__exception.html | 265 + ...assseastar_1_1httpd_1_1json__exception.png | Bin 0 -> 992 bytes ...astar_1_1httpd_1_1match__rule-members.html | 88 + .../classseastar_1_1httpd_1_1match__rule.html | 319 ++ ...ssseastar_1_1httpd_1_1matcher-members.html | 84 + master/classseastar_1_1httpd_1_1matcher.html | 159 + master/classseastar_1_1httpd_1_1matcher.png | Bin 0 -> 959 bytes ..._1_1missing__param__exception-members.html | 88 + ...1_1httpd_1_1missing__param__exception.html | 111 + ..._1_1httpd_1_1missing__param__exception.png | Bin 0 -> 1500 bytes ...ttpd_1_1not__found__exception-members.html | 87 + ...tar_1_1httpd_1_1not__found__exception.html | 114 + ...star_1_1httpd_1_1not__found__exception.png | Bin 0 -> 1040 bytes ...ar_1_1httpd_1_1param__matcher-members.html | 85 + ...assseastar_1_1httpd_1_1param__matcher.html | 207 + ...lassseastar_1_1httpd_1_1param__matcher.png | Bin 0 -> 684 bytes ...eastar_1_1httpd_1_1parameters-members.html | 89 + .../classseastar_1_1httpd_1_1parameters.html | 110 + ...1httpd_1_1redirect__exception-members.html | 88 + ...astar_1_1httpd_1_1redirect__exception.html | 121 + ...eastar_1_1httpd_1_1redirect__exception.png | Bin 0 -> 1037 bytes ...assseastar_1_1httpd_1_1routes-members.html | 101 + master/classseastar_1_1httpd_1_1routes.html | 584 +++ ..._1httpd_1_1rule__registration-members.html | 84 + ...eastar_1_1httpd_1_1rule__registration.html | 158 + ...d_1_1server__error__exception-members.html | 87 + ..._1_1httpd_1_1server__error__exception.html | 110 + ...r_1_1httpd_1_1server__error__exception.png | Bin 0 -> 1064 bytes ...star_1_1httpd_1_1str__matcher-members.html | 85 + ...classseastar_1_1httpd_1_1str__matcher.html | 194 + .../classseastar_1_1httpd_1_1str__matcher.png | Bin 0 -> 657 bytes ..._1_1unexpected__status__error-members.html | 87 + ...1_1httpd_1_1unexpected__status__error.html | 114 + ..._1_1httpd_1_1unexpected__status__error.png | Bin 0 -> 1072 bytes .../classseastar_1_1httpd_1_1url-members.html | 87 + master/classseastar_1_1httpd_1_1url.html | 203 + ...g__concrete__execution__stage-members.html | 86 + ...nheriting__concrete__execution__stage.html | 248 + ...inheriting__concrete__execution__stage.png | Bin 0 -> 1189 bytes ...1inheriting__execution__stage-members.html | 83 + ...astar_1_1inheriting__execution__stage.html | 141 + ...eastar_1_1inheriting__execution__stage.png | Bin 0 -> 1192 bytes ...classseastar_1_1input__stream-members.html | 100 + master/classseastar_1_1input__stream.html | 331 ++ ...lassseastar_1_1io__completion-members.html | 89 + master/classseastar_1_1io__completion.html | 135 + master/classseastar_1_1io__completion.png | Bin 0 -> 676 bytes master/classseastar_1_1io__group-members.html | 86 + master/classseastar_1_1io__group.html | 95 + .../classseastar_1_1io__intent-members.html | 89 + master/classseastar_1_1io__intent.html | 136 + master/classseastar_1_1io__queue-members.html | 109 + master/classseastar_1_1io__queue.html | 311 ++ ...sseastar_1_1json_1_1formatter-members.html | 110 + master/classseastar_1_1json_1_1formatter.html | 1081 +++++ ..._1json_1_1json__base__element-members.html | 94 + ...eastar_1_1json_1_1json__base__element.html | 226 + ...seastar_1_1json_1_1json__base__element.png | Bin 0 -> 2339 bytes ...star_1_1json_1_1json__element-members.html | 97 + ...classseastar_1_1json_1_1json__element.html | 316 ++ .../classseastar_1_1json_1_1json__element.png | Bin 0 -> 765 bytes ...seastar_1_1json_1_1json__list-members.html | 97 + .../classseastar_1_1json_1_1json__list.html | 283 ++ master/classseastar_1_1json_1_1json__list.png | Bin 0 -> 744 bytes ...ssseastar_1_1json_1_1jsonable-members.html | 88 + master/classseastar_1_1json_1_1jsonable.html | 173 + master/classseastar_1_1json_1_1jsonable.png | Bin 0 -> 1809 bytes ...seastar_1_1kernel__completion-members.html | 87 + .../classseastar_1_1kernel__completion.html | 111 + master/classseastar_1_1kernel__completion.png | Bin 0 -> 683 bytes .../classseastar_1_1lambda__task-members.html | 94 + master/classseastar_1_1lambda__task.html | 196 + master/classseastar_1_1lambda__task.png | Bin 0 -> 639 bytes ...eastar_1_1layered__file__impl-members.html | 113 + .../classseastar_1_1layered__file__impl.html | 230 + .../classseastar_1_1layered__file__impl.png | Bin 0 -> 653 bytes .../classseastar_1_1lazy__eval-members.html | 85 + master/classseastar_1_1lazy__eval.html | 164 + ...classseastar_1_1lowres__clock-members.html | 89 + master/classseastar_1_1lowres__clock.html | 151 + ...star_1_1lowres__system__clock-members.html | 90 + ...classseastar_1_1lowres__system__clock.html | 153 + ...assseastar_1_1lw__shared__ptr-members.html | 110 + master/classseastar_1_1lw__shared__ptr.html | 172 + ..._1lw__shared__ptr_1_1disposer-members.html | 83 + ...eastar_1_1lw__shared__ptr_1_1disposer.html | 92 + ...classseastar_1_1manual__clock-members.html | 89 + master/classseastar_1_1manual__clock.html | 111 + ..._1_1measuring__output__stream-members.html | 84 + ...sseastar_1_1measuring__output__stream.html | 95 + ...y_1_1alloc__failure__injector-members.html | 88 + ...1_1memory_1_1alloc__failure__injector.html | 128 + ...ry_1_1scoped__heap__profiling-members.html | 84 + ..._1_1memory_1_1scoped__heap__profiling.html | 98 + ..._allocation__warning__disable-members.html | 88 + ...__large__allocation__warning__disable.html | 105 + ...llocation__warning__threshold-members.html | 88 + ...large__allocation__warning__threshold.html | 108 + ...astar_1_1memory_1_1statistics-members.html | 96 + .../classseastar_1_1memory_1_1statistics.html | 194 + ...star_1_1memory__input__stream-members.html | 101 + ...classseastar_1_1memory__input__stream.html | 147 + ...tar_1_1memory__output__stream-members.html | 102 + ...lassseastar_1_1memory__output__stream.html | 149 + ...tar_1_1metrics_1_1description-members.html | 84 + ...lassseastar_1_1metrics_1_1description.html | 106 + ...trics_1_1double__registration-members.html | 83 + ...ar_1_1metrics_1_1double__registration.html | 98 + ...tar_1_1metrics_1_1double__registration.png | Bin 0 -> 989 bytes ...ar_1_1metrics_1_1impl_1_1impl-members.html | 99 + ...assseastar_1_1metrics_1_1impl_1_1impl.html | 140 + ...ics_1_1impl_1_1metric__family-members.html | 103 + ..._1_1metrics_1_1impl_1_1metric__family.html | 153 + ..._1impl_1_1metric__groups__def-members.html | 89 + ...etrics_1_1impl_1_1metric__groups__def.html | 113 + ...metrics_1_1impl_1_1metric__groups__def.png | Bin 0 -> 887 bytes ...1impl_1_1metric__groups__impl-members.html | 93 + ...trics_1_1impl_1_1metric__groups__impl.html | 225 + ...etrics_1_1impl_1_1metric__groups__impl.png | Bin 0 -> 880 bytes ...metrics_1_1impl_1_1metric__id-members.html | 97 + ...star_1_1metrics_1_1impl_1_1metric__id.html | 138 + ...rics_1_1impl_1_1metric__value-members.html | 96 + ...r_1_1metrics_1_1impl_1_1metric__value.html | 166 + ...1_1impl_1_1registered__metric-members.html | 91 + ...metrics_1_1impl_1_1registered__metric.html | 116 + ...imate__exponential__histogram-members.html | 102 + ..._1approximate__exponential__histogram.html | 351 ++ ...1_1time__estimated__histogram-members.html | 100 + ...nternal_1_1time__estimated__histogram.html | 323 ++ ...internal_1_1time__estimated__histogram.png | Bin 0 -> 1427 bytes ...ssseastar_1_1metrics_1_1label-members.html | 86 + master/classseastar_1_1metrics_1_1label.html | 151 + ...1_1metrics_1_1label__instance-members.html | 88 + ...seastar_1_1metrics_1_1label__instance.html | 159 + ...metrics_1_1metric__definition-members.html | 86 + ...star_1_1metrics_1_1metric__definition.html | 102 + ...r_1_1metrics_1_1metric__group-members.html | 96 + ...ssseastar_1_1metrics_1_1metric__group.html | 209 + ...assseastar_1_1metrics_1_1metric__group.png | Bin 0 -> 728 bytes ..._1_1metric__group__definition-members.html | 87 + ...1metrics_1_1metric__group__definition.html | 105 + ..._1_1metrics_1_1metric__groups-members.html | 90 + ...sseastar_1_1metrics_1_1metric__groups.html | 213 + ...ssseastar_1_1metrics_1_1metric__groups.png | Bin 0 -> 733 bytes ...ics_1_1relabel__config__regex-members.html | 91 + ..._1_1metrics_1_1relabel__config__regex.html | 118 + ..._1_1named__semaphore__aborted-members.html | 84 + ...sseastar_1_1named__semaphore__aborted.html | 135 + ...ssseastar_1_1named__semaphore__aborted.png | Bin 0 -> 1419 bytes ...1named__semaphore__timed__out-members.html | 84 + ...astar_1_1named__semaphore__timed__out.html | 135 + ...eastar_1_1named__semaphore__timed__out.png | Bin 0 -> 1378 bytes .../classseastar_1_1net_1_1arp-members.html | 85 + master/classseastar_1_1net_1_1arp.html | 99 + ...sseastar_1_1net_1_1arp__error-members.html | 83 + master/classseastar_1_1net_1_1arp__error.html | 102 + master/classseastar_1_1net_1_1arp__error.png | Bin 0 -> 1816 bytes ...assseastar_1_1net_1_1arp__for-members.html | 95 + master/classseastar_1_1net_1_1arp__for.html | 140 + master/classseastar_1_1net_1_1arp__for.png | Bin 0 -> 701 bytes ..._1_1net_1_1arp__for__protocol-members.html | 88 + ...sseastar_1_1net_1_1arp__for__protocol.html | 118 + ...ssseastar_1_1net_1_1arp__for__protocol.png | Bin 0 -> 1044 bytes ...et_1_1arp__queue__full__error-members.html | 84 + ...tar_1_1net_1_1arp__queue__full__error.html | 93 + ...star_1_1net_1_1arp__queue__full__error.png | Bin 0 -> 1262 bytes ...1_1net_1_1arp__timeout__error-members.html | 84 + ...seastar_1_1net_1_1arp__timeout__error.html | 93 + ...sseastar_1_1net_1_1arp__timeout__error.png | Bin 0 -> 1226 bytes ...r_1_1net_1_1config__exception-members.html | 83 + ...ssseastar_1_1net_1_1config__exception.html | 98 + ...assseastar_1_1net_1_1config__exception.png | Bin 0 -> 901 bytes ...ssseastar_1_1net_1_1conntrack-members.html | 85 + master/classseastar_1_1net_1_1conntrack.html | 101 + ...1_1net_1_1conntrack_1_1handle-members.html | 88 + ...seastar_1_1net_1_1conntrack_1_1handle.html | 101 + ...assseastar_1_1net_1_1datagram-members.html | 87 + master/classseastar_1_1net_1_1datagram.html | 104 + ...r_1_1net_1_1datagram__channel-members.html | 95 + ...ssseastar_1_1net_1_1datagram__channel.html | 143 + ...star_1_1net_1_1datagram__impl-members.html | 87 + ...classseastar_1_1net_1_1datagram__impl.html | 101 + ...classseastar_1_1net_1_1device-members.html | 100 + master/classseastar_1_1net_1_1device.html | 142 + .../classseastar_1_1net_1_1dhcp-members.html | 90 + master/classseastar_1_1net_1_1dhcp.html | 222 + ...astar_1_1net_1_1dns__resolver-members.html | 96 + .../classseastar_1_1net_1_1dns__resolver.html | 338 ++ ...astar_1_1net_1_1forward__hash-members.html | 87 + .../classseastar_1_1net_1_1forward__hash.html | 104 + .../classseastar_1_1net_1_1icmp-members.html | 86 + master/classseastar_1_1net_1_1icmp.html | 105 + ...astar_1_1net_1_1inet__address-members.html | 115 + .../classseastar_1_1net_1_1inet__address.html | 198 + ...ssseastar_1_1net_1_1interface-members.html | 91 + master/classseastar_1_1net_1_1interface.html | 117 + ...eastar_1_1net_1_1ip__protocol-members.html | 85 + .../classseastar_1_1net_1_1ip__protocol.html | 106 + .../classseastar_1_1net_1_1ip__protocol.png | Bin 0 -> 1060 bytes .../classseastar_1_1net_1_1ipv4-members.html | 106 + master/classseastar_1_1net_1_1ipv4.html | 170 + ...sseastar_1_1net_1_1ipv4__icmp-members.html | 86 + master/classseastar_1_1net_1_1ipv4__icmp.html | 151 + master/classseastar_1_1net_1_1ipv4__icmp.png | Bin 0 -> 640 bytes ...assseastar_1_1net_1_1ipv4__l4-members.html | 87 + master/classseastar_1_1net_1_1ipv4__l4.html | 108 + ...ssseastar_1_1net_1_1ipv4__tcp-members.html | 87 + master/classseastar_1_1net_1_1ipv4__tcp.html | 194 + master/classseastar_1_1net_1_1ipv4__tcp.png | Bin 0 -> 628 bytes ...ssseastar_1_1net_1_1ipv4__udp-members.html | 91 + master/classseastar_1_1net_1_1ipv4__udp.html | 219 + master/classseastar_1_1net_1_1ipv4__udp.png | Bin 0 -> 634 bytes ..._1_1ipv4__udp_1_1registration-members.html | 85 + ...r_1_1net_1_1ipv4__udp_1_1registration.html | 98 + ...eastar_1_1net_1_1l3__protocol-members.html | 85 + .../classseastar_1_1net_1_1l3__protocol.html | 144 + ...classseastar_1_1net_1_1packet-members.html | 128 + master/classseastar_1_1net_1_1packet.html | 233 + ..._1net_1_1packet__data__source-members.html | 87 + ...eastar_1_1net_1_1packet__data__source.html | 137 + ...seastar_1_1net_1_1packet__data__source.png | Bin 0 -> 740 bytes ...star_1_1net_1_1packet__merger-members.html | 85 + ...classseastar_1_1net_1_1packet__merger.html | 106 + ..._1_1posix__ap__network__stack-members.html | 97 + ...r_1_1net_1_1posix__ap__network__stack.html | 370 ++ ...ar_1_1net_1_1posix__ap__network__stack.png | Bin 0 -> 1147 bytes ...six__ap__server__socket__impl-members.html | 88 + ...et_1_1posix__ap__server__socket__impl.html | 115 + ...net_1_1posix__ap__server__socket__impl.png | Bin 0 -> 778 bytes ...et_1_1posix__data__sink__impl-members.html | 95 + ...tar_1_1net_1_1posix__data__sink__impl.html | 348 ++ ...star_1_1net_1_1posix__data__sink__impl.png | Bin 0 -> 763 bytes ..._1_1posix__data__source__impl-members.html | 87 + ...r_1_1net_1_1posix__data__source__impl.html | 163 + ...ar_1_1net_1_1posix__data__source__impl.png | Bin 0 -> 1231 bytes ...1net_1_1posix__network__stack-members.html | 96 + ...astar_1_1net_1_1posix__network__stack.html | 370 ++ ...eastar_1_1net_1_1posix__network__stack.png | Bin 0 -> 1152 bytes ...useport__server__socket__impl-members.html | 86 + ...osix__reuseport__server__socket__impl.html | 107 + ...posix__reuseport__server__socket__impl.png | Bin 0 -> 912 bytes ..._1posix__server__socket__impl-members.html | 86 + ...1_1net_1_1posix__server__socket__impl.html | 107 + ..._1_1net_1_1posix__server__socket__impl.png | Bin 0 -> 761 bytes master/classseastar_1_1net_1_1qp-members.html | 96 + master/classseastar_1_1net_1_1qp.html | 132 + .../classseastar_1_1net_1_1tcp-members.html | 95 + master/classseastar_1_1net_1_1tcp.html | 141 + ...r_1_1net_1_1tcp_1_1connection-members.html | 100 + ...ssseastar_1_1net_1_1tcp_1_1connection.html | 140 + ...tar_1_1net_1_1tcp_1_1listener-members.html | 91 + ...lassseastar_1_1net_1_1tcp_1_1listener.html | 113 + .../classseastar_1_1net_1_1unknown__host.html | 88 + .../classseastar_1_1net_1_1unknown__host.png | Bin 0 -> 1163 bytes ...seastar_1_1network__interface-members.html | 96 + .../classseastar_1_1network__interface.html | 128 + ...lassseastar_1_1network__stack-members.html | 93 + master/classseastar_1_1network__stack.html | 157 + master/classseastar_1_1network__stack.png | Bin 0 -> 1153 bytes ..._sharded__instance__exception-members.html | 85 + ...r_1_1no__sharded__instance__exception.html | 105 + ...ar_1_1no__sharded__instance__exception.png | Bin 0 -> 716 bytes ...08_01noexcept_07Noexcept_08_4-members.html | 93 + ...s_8_8_8_08_01noexcept_07Noexcept_08_4.html | 132 + ...gs_8_8_8_08_01noexcept_07Noexcept_08_4.png | Bin 0 -> 1167 bytes ...eastar_1_1optimized__optional-members.html | 101 + .../classseastar_1_1optimized__optional.html | 146 + ...lassseastar_1_1output__stream-members.html | 101 + master/classseastar_1_1output__stream.html | 208 + ..._1_1peering__sharded__service-members.html | 88 + ...sseastar_1_1peering__sharded__service.html | 111 + master/classseastar_1_1pipe-members.html | 85 + master/classseastar_1_1pipe.html | 111 + .../classseastar_1_1pipe__reader-members.html | 87 + master/classseastar_1_1pipe__reader.html | 169 + .../classseastar_1_1pipe__writer-members.html | 86 + master/classseastar_1_1pipe__writer.html | 136 + .../classseastar_1_1pollable__fd-members.html | 111 + master/classseastar_1_1pollable__fd.html | 181 + ...eastar_1_1pollable__fd__state-members.html | 114 + .../classseastar_1_1pollable__fd__state.html | 245 + ...classseastar_1_1posix__thread-members.html | 87 + master/classseastar_1_1posix__thread.html | 107 + ...star_1_1posix__thread_1_1attr-members.html | 88 + ...classseastar_1_1posix__thread_1_1attr.html | 136 + ...gram__options_1_1basic__value-members.html | 97 + ...r_1_1program__options_1_1basic__value.html | 165 + ...ar_1_1program__options_1_1basic__value.png | Bin 0 -> 14495 bytes ...ram__options_1_1option__group-members.html | 98 + ..._1_1program__options_1_1option__group.html | 321 ++ ...r_1_1program__options_1_1option__group.png | Bin 0 -> 4570 bytes ...ptions_1_1options__descriptor-members.html | 99 + ...ogram__options_1_1options__descriptor.html | 266 ++ ...__options_1_1options__mutator-members.html | 99 + ...1program__options_1_1options__mutator.html | 260 + ...__options_1_1selection__value-members.html | 111 + ...1program__options_1_1selection__value.html | 365 ++ ..._1program__options_1_1selection__value.png | Bin 0 -> 1351 bytes ...ogram__options_1_1string__map-members.html | 84 + ...ar_1_1program__options_1_1string__map.html | 97 + ...tar_1_1program__options_1_1string__map.png | Bin 0 -> 862 bytes ..._1_1program__options_1_1value-members.html | 106 + ...sseastar_1_1program__options_1_1value.html | 231 + ...ssseastar_1_1program__options_1_1value.png | Bin 0 -> 1122 bytes ...lue_3_01std_1_1monostate_01_4-members.html | 102 + ...ns_1_1value_3_01std_1_1monostate_01_4.html | 202 + ...ons_1_1value_3_01std_1_1monostate_01_4.png | Bin 0 -> 1391 bytes master/classseastar_1_1promise-members.html | 94 + master/classseastar_1_1promise.html | 304 ++ master/classseastar_1_1promise.png | Bin 0 -> 892 bytes master/classseastar_1_1queue-members.html | 98 + master/classseastar_1_1queue.html | 488 ++ ...eastar_1_1ragel__parser__base-members.html | 96 + .../classseastar_1_1ragel__parser__base.html | 143 + master/classseastar_1_1reactor-members.html | 167 + master/classseastar_1_1reactor.html | 546 +++ ...assseastar_1_1reactor_1_1test-members.html | 85 + master/classseastar_1_1reactor_1_1test.html | 125 + ...sseastar_1_1readable__eventfd-members.html | 87 + master/classseastar_1_1readable__eventfd.html | 104 + ...seastar_1_1reference__wrapper-members.html | 87 + .../classseastar_1_1reference__wrapper.html | 108 + ...tar_1_1rpc_1_1canceled__error-members.html | 84 + ...lassseastar_1_1rpc_1_1canceled__error.html | 93 + ...classseastar_1_1rpc_1_1canceled__error.png | Bin 0 -> 1149 bytes ...classseastar_1_1rpc_1_1client-members.html | 158 + master/classseastar_1_1rpc_1_1client.html | 477 ++ master/classseastar_1_1rpc_1_1client.png | Bin 0 -> 2074 bytes ...rpc_1_1client__function__type-members.html | 83 + ...star_1_1rpc_1_1client__function__type.html | 93 + ...astar_1_1rpc_1_1closed__error-members.html | 84 + .../classseastar_1_1rpc_1_1closed__error.html | 93 + .../classseastar_1_1rpc_1_1closed__error.png | Bin 0 -> 1127 bytes ...sseastar_1_1rpc_1_1compressor-members.html | 87 + master/classseastar_1_1rpc_1_1compressor.html | 117 + master/classseastar_1_1rpc_1_1compressor.png | Bin 0 -> 1066 bytes ...1rpc_1_1compressor_1_1factory-members.html | 86 + ...astar_1_1rpc_1_1compressor_1_1factory.html | 109 + ...eastar_1_1rpc_1_1compressor_1_1factory.png | Bin 0 -> 1813 bytes ...sseastar_1_1rpc_1_1connection-members.html | 143 + master/classseastar_1_1rpc_1_1connection.html | 297 ++ master/classseastar_1_1rpc_1_1connection.png | Bin 0 -> 1989 bytes ...star_1_1rpc_1_1connection__id-members.html | 89 + ...classseastar_1_1rpc_1_1connection__id.html | 114 + .../classseastar_1_1rpc_1_1error-members.html | 83 + master/classseastar_1_1rpc_1_1error.html | 108 + master/classseastar_1_1rpc_1_1error.png | Bin 0 -> 4988 bytes ...classseastar_1_1rpc_1_1logger-members.html | 90 + master/classseastar_1_1rpc_1_1logger.html | 113 + ...tar_1_1rpc_1_1lz4__compressor-members.html | 88 + ...lassseastar_1_1rpc_1_1lz4__compressor.html | 207 + ...classseastar_1_1rpc_1_1lz4__compressor.png | Bin 0 -> 685 bytes ...1_1lz4__compressor_1_1factory-members.html | 86 + ..._1_1rpc_1_1lz4__compressor_1_1factory.html | 171 + ...r_1_1rpc_1_1lz4__compressor_1_1factory.png | Bin 0 -> 809 bytes ..._1lz4__fragmented__compressor-members.html | 87 + ...1_1rpc_1_1lz4__fragmented__compressor.html | 207 + ..._1_1rpc_1_1lz4__fragmented__compressor.png | Bin 0 -> 789 bytes ...mented__compressor_1_1factory-members.html | 86 + ...z4__fragmented__compressor_1_1factory.html | 171 + ...lz4__fragmented__compressor_1_1factory.png | Bin 0 -> 1014 bytes ...ti__algo__compressor__factory-members.html | 89 + ...c_1_1multi__algo__compressor__factory.html | 223 + ...pc_1_1multi__algo__compressor__factory.png | Bin 0 -> 848 bytes ...ar_1_1rpc_1_1opt__time__point-members.html | 84 + ...assseastar_1_1rpc_1_1opt__time__point.html | 105 + ...lassseastar_1_1rpc_1_1opt__time__point.png | Bin 0 -> 830 bytes master/classseastar_1_1rpc_1_1optional.html | 88 + master/classseastar_1_1rpc_1_1optional.png | Bin 0 -> 627 bytes ...assseastar_1_1rpc_1_1protocol-members.html | 95 + master/classseastar_1_1rpc_1_1protocol.html | 456 ++ master/classseastar_1_1rpc_1_1protocol.png | Bin 0 -> 875 bytes ..._1_1rpc_1_1protocol_1_1client-members.html | 162 + ...sseastar_1_1rpc_1_1protocol_1_1client.html | 429 ++ ...ssseastar_1_1rpc_1_1protocol_1_1client.png | Bin 0 -> 2070 bytes ..._1_1rpc_1_1protocol_1_1server-members.html | 98 + ...sseastar_1_1rpc_1_1protocol_1_1server.html | 230 + ...ssseastar_1_1rpc_1_1protocol_1_1server.png | Bin 0 -> 977 bytes ...star_1_1rpc_1_1protocol__base-members.html | 85 + ...classseastar_1_1rpc_1_1protocol__base.html | 144 + .../classseastar_1_1rpc_1_1protocol__base.png | Bin 0 -> 881 bytes ...1_1rpc_1_1remote__verb__error-members.html | 81 + ...seastar_1_1rpc_1_1remote__verb__error.html | 93 + ...sseastar_1_1rpc_1_1remote__verb__error.png | Bin 0 -> 1215 bytes ..._1rpc_1_1rpc__protocol__error-members.html | 84 + ...eastar_1_1rpc_1_1rpc__protocol__error.html | 93 + ...seastar_1_1rpc_1_1rpc__protocol__error.png | Bin 0 -> 1169 bytes ...classseastar_1_1rpc_1_1server-members.html | 94 + master/classseastar_1_1rpc_1_1server.html | 207 + master/classseastar_1_1rpc_1_1server.png | Bin 0 -> 975 bytes ..._1rpc_1_1server_1_1connection-members.html | 156 + ...eastar_1_1rpc_1_1server_1_1connection.html | 360 ++ ...seastar_1_1rpc_1_1server_1_1connection.png | Bin 0 -> 1956 bytes .../classseastar_1_1rpc_1_1sink-members.html | 87 + master/classseastar_1_1rpc_1_1sink.html | 111 + ...eastar_1_1rpc_1_1sink_1_1impl-members.html | 91 + .../classseastar_1_1rpc_1_1sink_1_1impl.html | 134 + .../classseastar_1_1rpc_1_1sink_1_1impl.png | Bin 0 -> 860 bytes ...sseastar_1_1rpc_1_1sink__impl-members.html | 93 + master/classseastar_1_1rpc_1_1sink__impl.html | 212 + master/classseastar_1_1rpc_1_1sink__impl.png | Bin 0 -> 854 bytes ...classseastar_1_1rpc_1_1source-members.html | 86 + master/classseastar_1_1rpc_1_1source.html | 109 + ...star_1_1rpc_1_1source_1_1impl-members.html | 88 + ...classseastar_1_1rpc_1_1source_1_1impl.html | 125 + .../classseastar_1_1rpc_1_1source_1_1impl.png | Bin 0 -> 861 bytes ...eastar_1_1rpc_1_1source__impl-members.html | 89 + .../classseastar_1_1rpc_1_1source__impl.html | 148 + .../classseastar_1_1rpc_1_1source__impl.png | Bin 0 -> 853 bytes ...star_1_1rpc_1_1stream__closed-members.html | 84 + ...classseastar_1_1rpc_1_1stream__closed.html | 93 + .../classseastar_1_1rpc_1_1stream__closed.png | Bin 0 -> 1147 bytes ...pc_1_1streaming__domain__type-members.html | 85 + ...tar_1_1rpc_1_1streaming__domain__type.html | 95 + ...star_1_1rpc_1_1timeout__error-members.html | 84 + ...classseastar_1_1rpc_1_1timeout__error.html | 93 + .../classseastar_1_1rpc_1_1timeout__error.png | Bin 0 -> 1141 bytes .../classseastar_1_1rpc_1_1tuple-members.html | 83 + master/classseastar_1_1rpc_1_1tuple.html | 105 + master/classseastar_1_1rpc_1_1tuple.png | Bin 0 -> 574 bytes ..._1_1unknown__exception__error-members.html | 84 + ...r_1_1rpc_1_1unknown__exception__error.html | 93 + ...ar_1_1rpc_1_1unknown__exception__error.png | Bin 0 -> 1266 bytes ..._1rpc_1_1unknown__verb__error-members.html | 85 + ...eastar_1_1rpc_1_1unknown__verb__error.html | 108 + ...seastar_1_1rpc_1_1unknown__verb__error.png | Bin 0 -> 1214 bytes ...seastar_1_1scattered__message-members.html | 99 + .../classseastar_1_1scattered__message.html | 142 + ...sseastar_1_1scheduling__group-members.html | 101 + master/classseastar_1_1scheduling__group.html | 261 + ...tar_1_1scheduling__group__key-members.html | 88 + ...lassseastar_1_1scheduling__group__key.html | 101 + ...pu__plugin__instance__metrics-members.html | 86 + ..._1_1percpu__plugin__instance__metrics.html | 112 + ...d_1_1percpu__plugin__instance__metrics.png | Bin 0 -> 1061 bytes ..._1_1plugin__instance__metrics-members.html | 85 + ...collectd_1_1plugin__instance__metrics.html | 108 + ...scollectd_1_1plugin__instance__metrics.png | Bin 0 -> 1057 bytes ...1_1scollectd_1_1registrations-members.html | 88 + ...seastar_1_1scollectd_1_1registrations.html | 126 + ...sseastar_1_1scollectd_1_1registrations.png | Bin 0 -> 739 bytes ...ollectd_1_1type__instance__id-members.html | 95 + ...ar_1_1scollectd_1_1type__instance__id.html | 125 + ...seastar_1_1scollectd_1_1value-members.html | 90 + .../classseastar_1_1scollectd_1_1value.html | 132 + master/classseastar_1_1scollectd_1_1value.png | Bin 0 -> 769 bytes ...lue_3_01typed_3_01T_01_4_01_4-members.html | 91 + ...td_1_1value_3_01typed_3_01T_01_4_01_4.html | 123 + ...ctd_1_1value_3_01typed_3_01T_01_4_01_4.png | Bin 0 -> 765 bytes ...r_1_1scollectd_1_1value__list-members.html | 92 + ...ssseastar_1_1scollectd_1_1value__list.html | 125 + ...assseastar_1_1scollectd_1_1value__list.png | Bin 0 -> 802 bytes ..._1_1scollectd_1_1values__impl-members.html | 96 + ...sseastar_1_1scollectd_1_1values__impl.html | 222 + ...ssseastar_1_1scollectd_1_1values__impl.png | Bin 0 -> 800 bytes ...seastar_1_1semaphore__aborted-members.html | 83 + .../classseastar_1_1semaphore__aborted.html | 139 + master/classseastar_1_1semaphore__aborted.png | Bin 0 -> 1420 bytes ...star_1_1semaphore__timed__out-members.html | 83 + ...classseastar_1_1semaphore__timed__out.html | 139 + .../classseastar_1_1semaphore__timed__out.png | Bin 0 -> 1387 bytes ...ssseastar_1_1semaphore__units-members.html | 95 + master/classseastar_1_1semaphore__units.html | 255 + ...lassseastar_1_1server__socket-members.html | 91 + master/classseastar_1_1server__socket.html | 225 + master/classseastar_1_1sharded-members.html | 108 + master/classseastar_1_1sharded.html | 920 ++++ ...seastar_1_1sharded__parameter-members.html | 84 + .../classseastar_1_1sharded__parameter.html | 145 + ...lassseastar_1_1shared__future-members.html | 99 + master/classseastar_1_1shared__future.html | 294 ++ ...classseastar_1_1shared__mutex-members.html | 95 + master/classseastar_1_1shared__mutex.html | 247 + ...assseastar_1_1shared__promise-members.html | 101 + master/classseastar_1_1shared__promise.html | 165 + .../classseastar_1_1shared__ptr-members.html | 106 + master/classseastar_1_1shared__ptr.html | 174 + ...sseastar_1_1simple__backtrace-members.html | 90 + master/classseastar_1_1simple__backtrace.html | 114 + ...simple__memory__input__stream-members.html | 91 + ...star_1_1simple__memory__input__stream.html | 118 + ...imple__memory__output__stream-members.html | 92 + ...tar_1_1simple__memory__output__stream.html | 120 + .../classseastar_1_1skip__bytes-members.html | 84 + master/classseastar_1_1skip__bytes.html | 95 + ...assseastar_1_1slab__allocator-members.html | 92 + master/classseastar_1_1slab__allocator.html | 270 ++ .../classseastar_1_1slab__class-members.html | 96 + master/classseastar_1_1slab__class.html | 131 + ...ssseastar_1_1slab__item__base-members.html | 81 + master/classseastar_1_1slab__item__base.html | 84 + ...lassseastar_1_1sleep__aborted-members.html | 83 + master/classseastar_1_1sleep__aborted.html | 135 + master/classseastar_1_1sleep__aborted.png | Bin 0 -> 1006 bytes master/classseastar_1_1smp-members.html | 101 + master/classseastar_1_1smp.html | 491 ++ master/classseastar_1_1smp.png | Bin 0 -> 695 bytes ...eastar_1_1smp__message__queue-members.html | 90 + .../classseastar_1_1smp__message__queue.html | 113 + ...eastar_1_1smp__service__group-members.html | 86 + .../classseastar_1_1smp__service__group.html | 91 + master/classseastar_1_1socket-members.html | 90 + master/classseastar_1_1socket.html | 186 + ...assseastar_1_1socket__address-members.html | 109 + master/classseastar_1_1socket__address.html | 217 + ...ssseastar_1_1sstring__builder-members.html | 84 + master/classseastar_1_1sstring__builder.html | 101 + ..._1_1sstring__builder_1_1guard-members.html | 86 + ...sseastar_1_1sstring__builder_1_1guard.html | 98 + ...assseastar_1_1stop__consuming-members.html | 86 + master/classseastar_1_1stop__consuming.html | 105 + master/classseastar_1_1stream-members.html | 94 + master/classseastar_1_1stream.html | 127 + .../classseastar_1_1subscription-members.html | 86 + master/classseastar_1_1subscription.html | 142 + master/classseastar_1_1task-members.html | 91 + master/classseastar_1_1task.html | 163 + master/classseastar_1_1task.png | Bin 0 -> 2464 bytes .../classseastar_1_1task__entry-members.html | 87 + master/classseastar_1_1task__entry.html | 101 + master/classseastar_1_1tasktrace-members.html | 94 + master/classseastar_1_1tasktrace.html | 120 + ...sseastar_1_1temporary__buffer-members.html | 109 + master/classseastar_1_1temporary__buffer.html | 749 +++ ...astar_1_1testing_1_1exchanger-members.html | 91 + .../classseastar_1_1testing_1_1exchanger.html | 128 + .../classseastar_1_1testing_1_1exchanger.png | Bin 0 -> 813 bytes ...1_1testing_1_1exchanger__base-members.html | 88 + ...seastar_1_1testing_1_1exchanger__base.html | 115 + ...sseastar_1_1testing_1_1exchanger__base.png | Bin 0 -> 1570 bytes ...o__abort__on__internal__error-members.html | 84 + ...coped__no__abort__on__internal__error.html | 84 + ...r_1_1testing_1_1seastar__test-members.html | 89 + ...ssseastar_1_1testing_1_1seastar__test.html | 111 + ...ar_1_1testing_1_1test__runner-members.html | 86 + ...assseastar_1_1testing_1_1test__runner.html | 99 + master/classseastar_1_1thread-members.html | 93 + master/classseastar_1_1thread.html | 250 + ...tar_1_1thread__cputime__clock-members.html | 87 + ...lassseastar_1_1thread__cputime__clock.html | 108 + ...sseastar_1_1timed__out__error-members.html | 83 + master/classseastar_1_1timed__out__error.html | 129 + master/classseastar_1_1timed__out__error.png | Bin 0 -> 1385 bytes master/classseastar_1_1timer-members.html | 101 + master/classseastar_1_1timer.html | 633 +++ .../classseastar_1_1timer__set-members.html | 96 + master/classseastar_1_1timer__set.html | 363 ++ ...1tls_1_1abstract__credentials-members.html | 95 + ...astar_1_1tls_1_1abstract__credentials.html | 137 + ...eastar_1_1tls_1_1abstract__credentials.png | Bin 0 -> 1594 bytes ...s_1_1certificate__credentials-members.html | 104 + ...ar_1_1tls_1_1certificate__credentials.html | 369 ++ ...tar_1_1tls_1_1certificate__credentials.png | Bin 0 -> 1158 bytes ..._1tls_1_1credentials__builder-members.html | 105 + ...eastar_1_1tls_1_1credentials__builder.html | 478 ++ ...seastar_1_1tls_1_1credentials__builder.png | Bin 0 -> 771 bytes ...sseastar_1_1tls_1_1dh__params-members.html | 91 + master/classseastar_1_1tls_1_1dh__params.html | 165 + ...1_1tls_1_1server__credentials-members.html | 113 + ...seastar_1_1tls_1_1server__credentials.html | 422 ++ ...sseastar_1_1tls_1_1server__credentials.png | Bin 0 -> 1154 bytes ...seastar_1_1tls_1_1verification__error.html | 92 + ...sseastar_1_1tls_1_1verification__error.png | Bin 0 -> 908 bytes ...sseastar_1_1tls_1_1x509__cert-members.html | 81 + master/classseastar_1_1tls_1_1x509__cert.html | 84 + master/classseastar_1_1tmp__dir-members.html | 94 + master/classseastar_1_1tmp__dir.html | 131 + master/classseastar_1_1tmp__file-members.html | 96 + master/classseastar_1_1tmp__file.html | 131 + ...eastar_1_1transform__iterator-members.html | 88 + .../classseastar_1_1transform__iterator.html | 107 + ..._1unread__overflow__exception-members.html | 83 + ...eastar_1_1unread__overflow__exception.html | 98 + ...seastar_1_1unread__overflow__exception.png | Bin 0 -> 688 bytes ...ssseastar_1_1util_1_1spinlock-members.html | 88 + master/classseastar_1_1util_1_1spinlock.html | 101 + ...seastar_1_1vector__data__sink-members.html | 94 + .../classseastar_1_1vector__data__sink.html | 189 + master/classseastar_1_1vector__data__sink.png | Bin 0 -> 671 bytes master/classseastar_1_1weak__ptr-members.html | 95 + master/classseastar_1_1weak__ptr.html | 135 + ...astar_1_1weakly__referencable-members.html | 88 + .../classseastar_1_1weakly__referencable.html | 112 + ...seastar_1_1writeable__eventfd-members.html | 87 + .../classseastar_1_1writeable__eventfd.html | 104 + ...uture_3_01T_01_4_00_01Args_8_8_8_01_4.html | 88 + ...future_3_01T_01_4_00_01Args_8_8_8_01_4.png | Bin 0 -> 1081 bytes master/client_8hh_source.html | 278 ++ master/closeable_8hh.html | 116 + master/closeable_8hh_source.html | 230 + master/closeable_test_8cc-example.html | 493 ++ master/closed.png | Bin 0 -> 132 bytes master/common_8hh_source.html | 186 + master/concepts_8hh_source.html | 113 + master/condition-variable_8hh_source.html | 387 ++ master/config_8hh_source.html | 150 + master/const_8hh_source.html | 126 + master/content__source_8hh_source.html | 327 ++ master/conversions_8hh_source.html | 138 + master/core_2byteorder_8hh_source.html | 196 + master/core_2file_8hh_source.html | 606 +++ .../core_2on__internal__error_8hh_source.html | 133 + master/coroutine_2exception_8hh_source.html | 183 + master/coroutine_8hh_source.html | 318 ++ .../critical__alloc__section_8hh_source.html | 153 + master/defer_8hh_source.html | 159 + master/deleter_8hh_source.html | 321 ++ master/deprecated.html | 98 + master/dhcp_8hh_source.html | 162 + .../dir_0112a43248d46c258c74cc5fdb32b693.html | 85 + .../dir_164ee225dfef9a7fafe751cb228c28ba.html | 85 + .../dir_272c7f7d64135493a6307240ed26c98d.html | 101 + .../dir_36d1ac35f335d2859b08ab8b966fee25.html | 103 + .../dir_398ded82155629db4a0c5348c563f5d9.html | 109 + .../dir_3e0e6f106ec3db3973138aad205077f5.html | 87 + .../dir_78874ac4b611a4298933195a38c0f70b.html | 97 + .../dir_a703f5559ec24a637bac0bcd04b5b765.html | 145 + .../dir_aa653bcfa53187f42b1e3eea894166ac.html | 87 + .../dir_b3f3d534021e1f465e5a169b2f0511ee.html | 124 + .../dir_f47292a6f7dd7d478f3d6b4dba693acc.html | 168 + .../dir_faaebf1f4e541fd72bba26c3060bcb10.html | 315 ++ .../dir_feb40e1fc3cbd17defe0210055d0e0b7.html | 95 + master/distributed_8hh_source.html | 118 + master/dns_8hh_source.html | 220 + master/do__with_8hh_source.html | 215 + master/doc.png | Bin 0 -> 746 bytes master/doxygen.css | 1841 +++++++ master/doxygen.svg | 26 + master/dpdk_8hh_source.html | 148 + master/dpdk__rte_8hh_source.html | 137 + master/dynsections.js | 121 + master/eclipse_8hh_source.html | 115 + master/entry__point_8hh_source.html | 113 + master/enum_8hh_source.html | 131 + master/estimated__histogram_8hh_source.html | 326 ++ master/ethernet_8hh_source.html | 188 + master/examples.html | 80 + master/exception__hacks_8hh_source.html | 106 + master/exceptions_8hh_source.html | 114 + master/exchanger_8hh_source.html | 170 + master/execution__stage_8hh_source.html | 445 ++ master/expiring__fifo_8hh_source.html | 285 ++ master/fair__queue_8hh_source.html | 441 ++ master/file-types_8hh_source.html | 239 + master/file__handler_8hh_source.html | 202 + master/file_demo_8cc-example.html | 333 ++ master/files.html | 334 ++ master/folderclosed.png | Bin 0 -> 616 bytes master/folderopen.png | Bin 0 -> 597 bytes master/formatter_8hh_source.html | 343 ++ master/fsnotify_8hh_source.html | 239 + master/fsqual_8hh_source.html | 110 + master/fstream_8hh.html | 196 + master/fstream_8hh_source.html | 201 + master/function__handlers_8hh_source.html | 195 + .../function__input__iterator_8hh_source.html | 153 + master/function__traits_8hh_source.html | 149 + master/functions.html | 78 + master/functions_a.html | 115 + master/functions_b.html | 90 + master/functions_c.html | 111 + master/functions_d.html | 113 + master/functions_e.html | 89 + master/functions_enum.html | 76 + master/functions_f.html | 108 + master/functions_func.html | 108 + master/functions_func_b.html | 82 + master/functions_func_c.html | 100 + master/functions_func_d.html | 102 + master/functions_func_e.html | 84 + master/functions_func_f.html | 106 + master/functions_func_g.html | 115 + master/functions_func_h.html | 89 + master/functions_func_i.html | 91 + master/functions_func_j.html | 79 + master/functions_func_k.html | 78 + master/functions_func_l.html | 92 + master/functions_func_m.html | 104 + master/functions_func_n.html | 83 + master/functions_func_o.html | 97 + master/functions_func_p.html | 95 + master/functions_func_q.html | 78 + master/functions_func_r.html | 109 + master/functions_func_s.html | 136 + master/functions_func_t.html | 104 + master/functions_func_u.html | 87 + master/functions_func_v.html | 84 + master/functions_func_w.html | 89 + master/functions_func_y.html | 77 + master/functions_func_~.html | 88 + master/functions_g.html | 118 + master/functions_h.html | 95 + master/functions_i.html | 97 + master/functions_j.html | 79 + master/functions_k.html | 79 + master/functions_l.html | 101 + master/functions_m.html | 116 + master/functions_n.html | 88 + master/functions_o.html | 102 + master/functions_p.html | 100 + master/functions_q.html | 78 + master/functions_r.html | 116 + master/functions_rela.html | 92 + master/functions_s.html | 150 + master/functions_t.html | 113 + master/functions_type.html | 82 + master/functions_u.html | 91 + master/functions_v.html | 87 + master/functions_vars.html | 277 ++ master/functions_w.html | 92 + master/functions_y.html | 77 + master/functions_~.html | 88 + master/future-util_8hh_source.html | 110 + master/future_8hh_source.html | 1812 +++++++ master/gate_8hh_source.html | 373 ++ master/generator_8hh_source.html | 599 +++ master/group__add__prometheus__routes.html | 89 + master/group__execution-stages.html | 289 ++ master/group__fiber-module.html | 546 +++ master/group__fileio-module.html | 1388 ++++++ master/group__fileio-util.html | 145 + master/group__fsnotifier.html | 106 + master/group__future-module-impl.html | 101 + master/group__future-module.html | 416 ++ master/group__future-util.html | 1438 ++++++ master/group__interprocess-module.html | 174 + master/group__io-module.html | 90 + master/group__logging.html | 159 + master/group__memory-module.html | 405 ++ master/group__metrics.html | 1065 +++++ master/group__metrics__types.html | 76 + master/group__networking-module.html | 475 ++ master/group__posix-support.html | 129 + master/group__program-options.html | 116 + master/group__rpc.html | 342 ++ master/group__smp-module.html | 141 + master/group__thread-module.html | 382 ++ master/group__timers.html | 87 + master/group__utilities.html | 365 ++ master/group__websocket.html | 406 ++ master/handlers_8hh_source.html | 152 + master/hierarchy.html | 890 ++++ master/http_2exception_8hh_source.html | 254 + master/http_2short__streams_8hh_source.html | 133 + master/httpd_8hh_source.html | 339 ++ master/idle__cpu__handler_8hh.html | 114 + master/idle__cpu__handler_8hh_source.html | 132 + master/index.html | 92 + master/indirect_8hh_source.html | 157 + master/inet__address_8hh_source.html | 230 + master/internal_2io__intent_8hh_source.html | 214 + master/io__desc_8hh_source.html | 118 + master/io__intent_8hh_source.html | 179 + master/io__priority__class_8hh_source.html | 188 + master/io__queue_8hh_source.html | 344 ++ master/io__request_8hh_source.html | 502 ++ master/io__sink_8hh_source.html | 160 + master/iostream-impl_8hh_source.html | 652 +++ master/iostream_8hh_source.html | 512 ++ master/iovec__utils_8hh_source.html | 137 + master/ip_8hh_source.html | 548 +++ master/ip__checksum_8hh_source.html | 161 + master/ipv4__address_8hh_source.html | 179 + master/ipv6__address_8hh_source.html | 174 + master/is__smart__ptr_8hh_source.html | 117 + master/jquery.js | 35 + master/json__elements_8hh_source.html | 348 ++ master/json__path_8hh_source.html | 208 + master/later_8hh_source.html | 139 + master/layered__file_8hh_source.html | 147 + master/lazy_8hh_source.html | 205 + master/linux-aio_8hh_source.html | 316 ++ master/linux__perf__event_8hh_source.html | 130 + master/log-cli_8hh_source.html | 179 + master/log-impl_8hh_source.html | 176 + master/log_8hh_source.html | 497 ++ master/loop_8hh_source.html | 713 +++ master/lowres__clock_8hh_source.html | 185 + master/lz4__compressor_8hh_source.html | 133 + ...z4__fragmented__compressor_8hh_source.html | 130 + master/magic_8hh_source.html | 163 + master/make__task_8hh_source.html | 156 + master/manual__clock_8hh_source.html | 138 + master/map__reduce_8hh_source.html | 265 + master/matcher_8hh_source.html | 158 + master/matchrules_8hh_source.html | 177 + master/maybe__yield_8hh_source.html | 133 + master/md_compatibility.html | 152 + master/md_rpc.html | 186 + master/md_rpc_compression.html | 88 + master/md_rpc_streaming.html | 133 + master/memory_8hh_source.html | 446 ++ master/memory__diagnostics_8hh_source.html | 147 + master/menu.js | 135 + master/menudata.js | 161 + master/metrics_8hh.html | 270 ++ master/metrics_8hh_source.html | 509 ++ master/metrics__api_8hh.html | 254 + master/metrics__api_8hh_source.html | 533 +++ master/metrics__registration_8hh.html | 130 + master/metrics__registration_8hh_source.html | 190 + master/metrics__types_8hh_source.html | 156 + master/mime__types_8hh_source.html | 118 + master/modules.html | 103 + master/modules_8hh_source.html | 111 + ..._algo__compressor__factory_8hh_source.html | 166 + master/namespaceimpl.html | 78 + master/namespacemembers.html | 81 + master/namespacemembers_c.html | 89 + master/namespacemembers_d.html | 85 + master/namespacemembers_e.html | 80 + master/namespacemembers_enum.html | 84 + master/namespacemembers_f.html | 88 + master/namespacemembers_func.html | 295 ++ master/namespacemembers_g.html | 86 + master/namespacemembers_i.html | 81 + master/namespacemembers_k.html | 77 + master/namespacemembers_l.html | 82 + master/namespacemembers_m.html | 113 + master/namespacemembers_n.html | 77 + master/namespacemembers_o.html | 83 + master/namespacemembers_p.html | 79 + master/namespacemembers_r.html | 87 + master/namespacemembers_s.html | 99 + master/namespacemembers_t.html | 83 + master/namespacemembers_type.html | 84 + master/namespacemembers_v.html | 78 + master/namespacemembers_vars.html | 75 + master/namespacemembers_w.html | 87 + master/namespacemembers_y.html | 77 + master/namespaces.html | 522 ++ master/namespaceseastar.html | 4250 +++++++++++++++++ master/namespaceseastar_1_1alien.html | 282 ++ master/namespaceseastar_1_1log__cli.html | 125 + master/namespaceseastar_1_1memory.html | 649 +++ master/namespaceseastar_1_1metrics.html | 448 ++ master/namespaceseastar_1_1net.html | 1130 +++++ master/namespaceseastar_1_1scollectd.html | 854 ++++ master/namespaceseastar_1_1tls.html | 880 ++++ master/namespacestd.html | 501 ++ master/native-stack_8hh_source.html | 158 + master/nav_f.png | Bin 0 -> 153 bytes master/nav_g.png | Bin 0 -> 95 bytes master/nav_h.png | Bin 0 -> 98 bytes master/net_2byteorder_8hh_source.html | 211 + master/net_8hh_source.html | 390 ++ master/noncopyable__function_8hh_source.html | 315 ++ master/open.png | Bin 0 -> 123 bytes master/optimized__optional_8hh_source.html | 187 + master/packet-data-source_8hh_source.html | 141 + master/packet-util_8hh_source.html | 240 + master/packet_8hh_source.html | 721 +++ master/pages.html | 84 + master/parallel__for__each_8hh_source.html | 248 + master/perf__tests_8hh_source.html | 484 ++ master/pipe_8hh_source.html | 277 ++ master/poll_8hh_source.html | 182 + master/pollable__fd_8hh_source.html | 332 ++ ...morphic__temporary__buffer_8hh_source.html | 127 + master/posix-stack_8hh_source.html | 343 ++ master/posix_8hh.html | 325 ++ master/posix_8hh_source.html | 601 +++ master/preempt_8hh_source.html | 185 + master/prefetch_8hh_source.html | 203 + master/print_8hh_source.html | 236 + master/print__safe_8hh_source.html | 214 + master/process_8hh_source.html | 179 + master/program-options_8hh_source.html | 535 +++ master/prometheus_8hh_source.html | 142 + master/proxy_8hh_source.html | 114 + master/queue_8hh_source.html | 385 ++ master/ragel_8hh_source.html | 246 + master/random_8hh_source.html | 114 + master/reactor_8hh_source.html | 792 +++ master/reactor__config_8hh_source.html | 192 + master/read__first__line_8hh_source.html | 96 + master/read__state_8hh_source.html | 181 + master/reference__wrapper_8hh_source.html | 139 + master/relabel__config_8hh_source.html | 173 + master/reply_8hh_source.html | 282 ++ master/report__exception_8hh_source.html | 112 + master/request_8hh_source.html | 279 ++ master/resource_8hh_source.html | 230 + master/routes_8hh_source.html | 267 ++ master/rpc_8hh_source.html | 899 ++++ master/rpc__impl_8hh_source.html | 1033 ++++ master/rpc__types_8hh_source.html | 566 +++ master/run__in__background_8hh_source.html | 114 + master/rwlock_8hh_source.html | 250 + master/sampler_8hh_source.html | 231 + master/scattered__message_8hh_source.html | 205 + master/scheduling_8hh.html | 152 + master/scheduling_8hh_source.html | 371 ++ master/scheduling__specific_8hh_source.html | 232 + master/scollectd_8hh_source.html | 876 ++++ master/scollectd__api_8hh_source.html | 123 + master/search/all_0.html | 37 + master/search/all_0.js | 5 + master/search/all_1.html | 37 + master/search/all_1.js | 84 + master/search/all_10.html | 37 + master/search/all_10.js | 70 + master/search/all_11.html | 37 + master/search/all_11.js | 18 + master/search/all_12.html | 37 + master/search/all_12.js | 99 + master/search/all_13.html | 37 + master/search/all_13.js | 212 + master/search/all_14.html | 37 + master/search/all_14.js | 94 + master/search/all_15.html | 37 + master/search/all_15.js | 39 + master/search/all_16.html | 37 + master/search/all_16.js | 36 + master/search/all_17.html | 37 + master/search/all_17.js | 49 + master/search/all_18.html | 37 + master/search/all_18.js | 4 + master/search/all_19.html | 37 + master/search/all_19.js | 5 + master/search/all_1a.html | 37 + master/search/all_1a.js | 15 + master/search/all_2.html | 37 + master/search/all_2.js | 35 + master/search/all_3.html | 37 + master/search/all_3.js | 104 + master/search/all_4.html | 37 + master/search/all_4.js | 81 + master/search/all_5.html | 37 + master/search/all_5.js | 41 + master/search/all_6.html | 37 + master/search/all_6.js | 108 + master/search/all_7.html | 37 + master/search/all_7.js | 63 + master/search/all_8.html | 37 + master/search/all_8.js | 61 + master/search/all_9.html | 37 + master/search/all_9.js | 84 + master/search/all_a.html | 37 + master/search/all_a.js | 16 + master/search/all_b.html | 37 + master/search/all_b.js | 8 + master/search/all_c.html | 37 + master/search/all_c.js | 61 + master/search/all_d.html | 37 + master/search/all_d.js | 115 + master/search/all_e.html | 37 + master/search/all_e.js | 48 + master/search/all_f.html | 37 + master/search/all_f.js | 51 + master/search/classes_0.html | 37 + master/search/classes_0.js | 39 + master/search/classes_1.html | 37 + master/search/classes_1.js | 21 + master/search/classes_10.html | 37 + master/search/classes_10.js | 17 + master/search/classes_11.html | 37 + master/search/classes_11.js | 43 + master/search/classes_12.html | 37 + master/search/classes_12.js | 113 + master/search/classes_13.html | 37 + master/search/classes_13.js | 47 + master/search/classes_14.html | 37 + master/search/classes_14.js | 18 + master/search/classes_15.html | 37 + master/search/classes_15.js | 24 + master/search/classes_16.html | 37 + master/search/classes_16.js | 22 + master/search/classes_17.html | 37 + master/search/classes_17.js | 4 + master/search/classes_18.html | 37 + master/search/classes_18.js | 4 + master/search/classes_2.html | 37 + master/search/classes_2.js | 57 + master/search/classes_3.html | 37 + master/search/classes_3.js | 41 + master/search/classes_4.html | 37 + master/search/classes_4.js | 23 + master/search/classes_5.html | 37 + master/search/classes_5.js | 64 + master/search/classes_6.html | 37 + master/search/classes_6.js | 9 + master/search/classes_7.html | 37 + master/search/classes_7.js | 45 + master/search/classes_8.html | 37 + master/search/classes_8.js | 52 + master/search/classes_9.html | 37 + master/search/classes_9.js | 15 + master/search/classes_a.html | 37 + master/search/classes_a.js | 4 + master/search/classes_b.html | 37 + master/search/classes_b.js | 33 + master/search/classes_c.html | 37 + master/search/classes_c.js | 35 + master/search/classes_d.html | 37 + master/search/classes_d.js | 28 + master/search/classes_e.html | 37 + master/search/classes_e.js | 15 + master/search/classes_f.html | 37 + master/search/classes_f.js | 43 + master/search/close.svg | 31 + master/search/enums_0.html | 37 + master/search/enums_0.js | 4 + master/search/enums_1.html | 37 + master/search/enums_1.js | 4 + master/search/enums_2.html | 37 + master/search/enums_2.js | 5 + master/search/enums_3.html | 37 + master/search/enums_3.js | 4 + master/search/enums_4.html | 37 + master/search/enums_4.js | 4 + master/search/enums_5.html | 37 + master/search/enums_5.js | 4 + master/search/enums_6.html | 37 + master/search/enums_6.js | 5 + master/search/enums_7.html | 37 + master/search/enums_7.js | 7 + master/search/enumvalues_0.html | 37 + master/search/enumvalues_0.js | 5 + master/search/enumvalues_1.html | 37 + master/search/enumvalues_1.js | 5 + master/search/enumvalues_10.html | 37 + master/search/enumvalues_10.js | 9 + master/search/enumvalues_2.html | 37 + master/search/enumvalues_2.js | 7 + master/search/enumvalues_3.html | 37 + master/search/enumvalues_3.js | 4 + master/search/enumvalues_4.html | 37 + master/search/enumvalues_4.js | 4 + master/search/enumvalues_5.html | 37 + master/search/enumvalues_5.js | 5 + master/search/enumvalues_6.html | 37 + master/search/enumvalues_6.js | 4 + master/search/enumvalues_7.html | 37 + master/search/enumvalues_7.js | 6 + master/search/enumvalues_8.html | 37 + master/search/enumvalues_8.js | 4 + master/search/enumvalues_9.html | 37 + master/search/enumvalues_9.js | 7 + master/search/enumvalues_a.html | 37 + master/search/enumvalues_a.js | 11 + master/search/enumvalues_b.html | 37 + master/search/enumvalues_b.js | 4 + master/search/enumvalues_c.html | 37 + master/search/enumvalues_c.js | 5 + master/search/enumvalues_d.html | 37 + master/search/enumvalues_d.js | 5 + master/search/enumvalues_e.html | 37 + master/search/enumvalues_e.js | 8 + master/search/enumvalues_f.html | 37 + master/search/enumvalues_f.js | 5 + master/search/files_0.html | 37 + master/search/files_0.js | 4 + master/search/files_1.html | 37 + master/search/files_1.js | 6 + master/search/files_2.html | 37 + master/search/files_2.js | 4 + master/search/files_3.html | 37 + master/search/files_3.js | 4 + master/search/files_4.html | 37 + master/search/files_4.js | 6 + master/search/files_5.html | 37 + master/search/files_5.js | 4 + master/search/files_6.html | 37 + master/search/files_6.js | 9 + master/search/files_7.html | 37 + master/search/files_7.js | 4 + master/search/functions_0.html | 37 + master/search/functions_0.js | 39 + master/search/functions_1.html | 37 + master/search/functions_1.js | 9 + master/search/functions_10.html | 37 + master/search/functions_10.js | 5 + master/search/functions_11.html | 37 + master/search/functions_11.js | 49 + master/search/functions_12.html | 37 + master/search/functions_12.js | 80 + master/search/functions_13.html | 37 + master/search/functions_13.js | 40 + master/search/functions_14.html | 37 + master/search/functions_14.js | 14 + master/search/functions_15.html | 37 + master/search/functions_15.js | 13 + master/search/functions_16.html | 37 + master/search/functions_16.js | 25 + master/search/functions_17.html | 37 + master/search/functions_17.js | 4 + master/search/functions_18.html | 37 + master/search/functions_18.js | 15 + master/search/functions_2.html | 37 + master/search/functions_2.js | 39 + master/search/functions_3.html | 37 + master/search/functions_3.js | 37 + master/search/functions_4.html | 37 + master/search/functions_4.js | 14 + master/search/functions_5.html | 37 + master/search/functions_5.js | 43 + master/search/functions_6.html | 37 + master/search/functions_6.js | 51 + master/search/functions_7.html | 37 + master/search/functions_7.js | 16 + master/search/functions_8.html | 37 + master/search/functions_8.js | 20 + master/search/functions_9.html | 37 + master/search/functions_9.js | 6 + master/search/functions_a.html | 37 + master/search/functions_a.js | 6 + master/search/functions_b.html | 37 + master/search/functions_b.js | 23 + master/search/functions_c.html | 37 + master/search/functions_c.js | 63 + master/search/functions_d.html | 37 + master/search/functions_d.js | 10 + master/search/functions_e.html | 37 + master/search/functions_e.js | 33 + master/search/functions_f.html | 37 + master/search/functions_f.js | 25 + master/search/groups_0.html | 37 + master/search/groups_0.js | 4 + master/search/groups_1.html | 37 + master/search/groups_1.js | 4 + master/search/groups_2.html | 37 + master/search/groups_2.js | 9 + master/search/groups_3.html | 37 + master/search/groups_3.js | 6 + master/search/groups_4.html | 37 + master/search/groups_4.js | 4 + master/search/groups_5.html | 37 + master/search/groups_5.js | 7 + master/search/groups_6.html | 37 + master/search/groups_6.js | 4 + master/search/groups_7.html | 37 + master/search/groups_7.js | 5 + master/search/groups_8.html | 37 + master/search/groups_8.js | 4 + master/search/groups_9.html | 37 + master/search/groups_9.js | 4 + master/search/groups_a.html | 37 + master/search/groups_a.js | 4 + master/search/groups_b.html | 37 + master/search/groups_b.js | 4 + master/search/groups_c.html | 37 + master/search/groups_c.js | 4 + master/search/mag_sel.svg | 74 + master/search/namespaces_0.html | 37 + master/search/namespaces_0.js | 4 + master/search/namespaces_1.html | 37 + master/search/namespaces_1.js | 12 + master/search/nomatches.html | 13 + master/search/pages_0.html | 37 + master/search/pages_0.js | 4 + master/search/pages_1.html | 37 + master/search/pages_1.js | 4 + master/search/pages_2.html | 37 + master/search/pages_2.js | 6 + master/search/pages_3.html | 37 + master/search/pages_3.js | 4 + master/search/related_0.html | 37 + master/search/related_0.js | 6 + master/search/related_1.html | 37 + master/search/related_1.js | 6 + master/search/related_2.html | 37 + master/search/related_2.js | 4 + master/search/related_3.html | 37 + master/search/related_3.js | 8 + master/search/related_4.html | 37 + master/search/related_4.js | 5 + master/search/related_5.html | 37 + master/search/related_5.js | 7 + master/search/search.css | 263 + master/search/search.js | 802 ++++ master/search/search_l.png | Bin 0 -> 567 bytes master/search/search_m.png | Bin 0 -> 158 bytes master/search/search_r.png | Bin 0 -> 553 bytes master/search/searchdata.js | 48 + master/search/typedefs_0.html | 37 + master/search/typedefs_0.js | 4 + master/search/typedefs_1.html | 37 + master/search/typedefs_1.js | 4 + master/search/typedefs_2.html | 37 + master/search/typedefs_2.js | 5 + master/search/typedefs_3.html | 37 + master/search/typedefs_3.js | 5 + master/search/typedefs_4.html | 37 + master/search/typedefs_4.js | 6 + master/search/typedefs_5.html | 37 + master/search/typedefs_5.js | 5 + master/search/typedefs_6.html | 37 + master/search/typedefs_6.js | 6 + master/search/typedefs_7.html | 37 + master/search/typedefs_7.js | 4 + master/search/typedefs_8.html | 37 + master/search/typedefs_8.js | 4 + master/search/typedefs_9.html | 37 + master/search/typedefs_9.js | 5 + master/search/variables_0.html | 37 + master/search/variables_0.js | 5 + master/search/variables_1.html | 37 + master/search/variables_1.js | 10 + master/search/variables_10.html | 37 + master/search/variables_10.js | 9 + master/search/variables_11.html | 37 + master/search/variables_11.js | 11 + master/search/variables_12.html | 37 + master/search/variables_12.js | 12 + master/search/variables_13.html | 37 + master/search/variables_13.js | 7 + master/search/variables_14.html | 37 + master/search/variables_14.js | 5 + master/search/variables_15.html | 37 + master/search/variables_15.js | 5 + master/search/variables_2.html | 37 + master/search/variables_2.js | 11 + master/search/variables_3.html | 37 + master/search/variables_3.js | 12 + master/search/variables_4.html | 37 + master/search/variables_4.js | 11 + master/search/variables_5.html | 37 + master/search/variables_5.js | 8 + master/search/variables_6.html | 37 + master/search/variables_6.js | 4 + master/search/variables_7.html | 37 + master/search/variables_7.js | 5 + master/search/variables_8.html | 37 + master/search/variables_8.js | 9 + master/search/variables_9.html | 37 + master/search/variables_9.js | 9 + master/search/variables_a.html | 37 + master/search/variables_a.js | 4 + master/search/variables_b.html | 37 + master/search/variables_b.js | 13 + master/search/variables_c.html | 37 + master/search/variables_c.js | 14 + master/search/variables_d.html | 37 + master/search/variables_d.js | 9 + master/search/variables_e.html | 37 + master/search/variables_e.js | 4 + master/search/variables_f.html | 37 + master/search/variables_f.js | 7 + master/seastar_8hh_source.html | 280 ++ master/seastar__test_8hh_source.html | 160 + master/semaphore_8hh_source.html | 625 +++ master/server_8hh_source.html | 390 ++ master/shard__id_8hh.html | 99 + master/shard__id_8hh_source.html | 138 + master/sharded_8hh_source.html | 882 ++++ .../sharded_parameter_demo_8cc-example.html | 162 + master/shared__future_8hh_source.html | 423 ++ master/shared__mutex_8hh_source.html | 325 ++ master/shared__ptr_8hh_source.html | 1060 ++++ ...shared__ptr__debug__helper_8hh_source.html | 161 + master/shared__ptr__incomplete_8hh.html | 93 + .../shared__ptr__incomplete_8hh_source.html | 121 + master/shared__token__bucket_8hh_source.html | 296 ++ master/simple-stream_8hh_source.html | 743 +++ master/slab_8hh_source.html | 647 +++ master/sleep_8hh.html | 132 + master/sleep_8hh_source.html | 171 + master/smp_8hh.html | 197 + master/smp_8hh_source.html | 497 ++ master/smp__options_8hh.html | 108 + master/smp__options_8hh_source.html | 162 + master/socket__defs_8hh_source.html | 282 ++ .../source__location-compat_8hh_source.html | 139 + master/spinlock_8hh_source.html | 187 + master/split/1.html | 367 ++ master/split/10.html | 189 + master/split/11.html | 304 ++ master/split/12.html | 308 ++ master/split/13.html | 485 ++ master/split/14.html | 199 + master/split/15.html | 291 ++ master/split/16.html | 186 + master/split/17.html | 187 + master/split/18.html | 431 ++ master/split/19.html | 256 + master/split/2.html | 253 + master/split/20.html | 176 + master/split/21.html | 260 + master/split/22.html | 390 ++ master/split/23.html | 224 + master/split/24.html | 273 ++ master/split/25.html | 312 ++ master/split/26.html | 348 ++ master/split/3.html | 245 + master/split/4.html | 386 ++ master/split/5.html | 472 ++ master/split/6.html | 316 ++ master/split/7.html | 372 ++ master/split/8.html | 516 ++ master/split/9.html | 183 + master/split/index.html | 318 ++ master/splitbar.png | Bin 0 -> 314 bytes master/sstring_8hh_source.html | 958 ++++ master/stack_8hh_source.html | 193 + master/stall__detector_8hh_source.html | 268 ++ master/stall__sampler_8hh_source.html | 130 + master/std-compat_8hh_source.html | 155 + master/stream_8hh_source.html | 263 + master/string__utils_8hh_source.html | 148 + ...ctfmt_1_1formatter_3_01T_01_4-members.html | 83 + master/structfmt_1_1formatter_3_01T_01_4.html | 98 + master/structfmt_1_1formatter_3_01T_01_4.png | Bin 0 -> 666 bytes ...rt__requested__exception_01_4-members.html | 83 + ...r_1_1abort__requested__exception_01_4.html | 98 + ...ar_1_1abort__requested__exception_01_4.png | Bin 0 -> 1016 bytes ...bool__class_3_01Tag_01_4_01_4-members.html | 84 + ...star_1_1bool__class_3_01Tag_01_4_01_4.html | 96 + ...httpd_1_1base__exception_01_4-members.html | 84 + ...star_1_1httpd_1_1base__exception_01_4.html | 95 + ...eref__wrapper_3_01T_01_4_01_4-members.html | 83 + ...1lazy__deref__wrapper_3_01T_01_4_01_4.html | 99 + ..._1lazy__deref__wrapper_3_01T_01_4_01_4.png | Bin 0 -> 1005 bytes ...lazy__eval_3_01Func_01_4_01_4-members.html | 83 + ...star_1_1lazy__eval_3_01Func_01_4_01_4.html | 99 + ...astar_1_1lazy__eval_3_01Func_01_4_01_4.png | Bin 0 -> 853 bytes ..._01seastar_1_1log__level_01_4-members.html | 84 + ...matter_3_01seastar_1_1log__level_01_4.html | 95 + ...__shared__ptr_3_01T_01_4_01_4-members.html | 84 + ...ar_1_1lw__shared__ptr_3_01T_01_4_01_4.html | 95 + ...zed__optional_3_01T_01_4_01_4-members.html | 83 + ..._1optimized__optional_3_01T_01_4_01_4.html | 98 + ...1_1optimized__optional_3_01T_01_4_01_4.png | Bin 0 -> 962 bytes ...c_1_1optional_3_01T_01_4_01_4-members.html | 84 + ...ar_1_1rpc_1_1optional_3_01T_01_4_01_4.html | 95 + ..._1shared__ptr_3_01T_01_4_01_4-members.html | 84 + ...eastar_1_1shared__ptr_3_01T_01_4_01_4.html | 95 + ...tar_1_1timed__out__error_01_4-members.html | 83 + ...3_01seastar_1_1timed__out__error_01_4.html | 98 + ..._3_01seastar_1_1timed__out__error_01_4.png | Bin 0 -> 823 bytes ...ls_1_1subject__alt__name_01_4-members.html | 83 + ...tar_1_1tls_1_1subject__alt__name_01_4.html | 99 + ...star_1_1tls_1_1subject__alt__name_01_4.png | Bin 0 -> 932 bytes ...alt__name_1_1value__type_01_4-members.html | 83 + ...ubject__alt__name_1_1value__type_01_4.html | 99 + ...subject__alt__name_1_1value__type_01_4.png | Bin 0 -> 1067 bytes ...subject__alt__name__type_01_4-members.html | 83 + ...1tls_1_1subject__alt__name__type_01_4.html | 99 + ..._1tls_1_1subject__alt__name__type_01_4.png | Bin 0 -> 1022 bytes ..._1internal_1_1test__registrar-members.html | 83 + ..._tests_1_1internal_1_1test__registrar.html | 92 + ...isable__sampling__temporarily-members.html | 85 + ...ler_1_1disable__sampling__temporarily.html | 96 + ...en_1_1internal_1_1qs__deleter-members.html | 85 + ...r_1_1alien_1_1internal_1_1qs__deleter.html | 102 + ...1internal_1_1return__type__of-members.html | 84 + ...alien_1_1internal_1_1return__type__of.html | 99 + ...__of_3_01Func_00_01false_01_4-members.html | 85 + ...rn__type__of_3_01Func_00_01false_01_4.html | 102 + ...1_1contents_1_1external__type-members.html | 85 + ...sstring_1_1contents_1_1external__type.html | 147 + ...1_1contents_1_1internal__type-members.html | 84 + ...sstring_1_1contents_1_1internal__type.html | 128 + ...uctseastar_1_1broken__promise-members.html | 83 + master/structseastar_1_1broken__promise.html | 95 + master/structseastar_1_1broken__promise.png | Bin 0 -> 843 bytes ...tar_1_1coroutine_1_1exception-members.html | 84 + ...ructseastar_1_1coroutine_1_1exception.html | 108 + ..._1_1internal_1_1next__awaiter-members.html | 92 + ...rimental_1_1internal_1_1next__awaiter.html | 128 + ...1_1internal_1_1yield__awaiter-members.html | 88 + ...imental_1_1internal_1_1yield__awaiter.html | 115 + ...ar_1_1coroutine_1_1switch__to-members.html | 100 + ...uctseastar_1_1coroutine_1_1switch__to.html | 233 + ...ructseastar_1_1coroutine_1_1switch__to.png | Bin 0 -> 608 bytes ...1_1without__preemption__check-members.html | 108 + ...routine_1_1without__preemption__check.html | 685 +++ ...oroutine_1_1without__preemption__check.png | Bin 0 -> 1341 bytes ...1default__null__deref__action-members.html | 83 + ...astar_1_1default__null__deref__action.html | 128 + ...__timeout__exception__factory-members.html | 83 + ...1default__timeout__exception__factory.html | 92 + ...tructseastar_1_1dummy__expiry-members.html | 83 + master/structseastar_1_1dummy__expiry.html | 92 + ...rimental_1_1spawn__parameters-members.html | 84 + ..._1_1experimental_1_1spawn__parameters.html | 135 + ...1_1websocket_1_1frame__header-members.html | 104 + ...imental_1_1websocket_1_1frame__header.html | 163 + ...eastar_1_1file__open__options-members.html | 89 + .../structseastar_1_1file__open__options.html | 125 + ...tructseastar_1_1free__deleter-members.html | 83 + master/structseastar_1_1free__deleter.html | 92 + ..._1_1function__input__iterator-members.html | 94 + ...tseastar_1_1function__input__iterator.html | 129 + ...its_3_01Ret_07Args_8_8_8_08_4-members.html | 86 + ...ion__traits_3_01Ret_07Args_8_8_8_08_4.html | 146 + ...tion__traits_3_01Ret_07Args_8_8_8_08_4.png | Bin 0 -> 1826 bytes ..._07Args_8_8_8_08_01const_01_4-members.html | 86 + ...1_1_5_08_07Args_8_8_8_08_01const_01_4.html | 114 + ..._1_1_5_08_07Args_8_8_8_08_01const_01_4.png | Bin 0 -> 1103 bytes ...7T_1_1_5_08_07Args_8_8_8_08_4-members.html | 86 + ..._01Ret_07T_1_1_5_08_07Args_8_8_8_08_4.html | 114 + ...3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_4.png | Bin 0 -> 940 bytes ...Ret_07_5_08_07Args_8_8_8_08_4-members.html | 86 + ...its_3_01Ret_07_5_08_07Args_8_8_8_08_4.html | 114 + ...aits_3_01Ret_07_5_08_07Args_8_8_8_08_4.png | Bin 0 -> 929 bytes ...r_1_1function__traits_3_01T_01_6_01_4.html | 91 + ...ar_1_1function__traits_3_01T_01_6_01_4.png | Bin 0 -> 1048 bytes ...body_3_01Func_00_01false_01_4-members.html | 85 + ...inally__body_3_01Func_00_01false_01_4.html | 102 + ..._body_3_01Func_00_01true_01_4-members.html | 85 + ...finally__body_3_01Func_00_01true_01_4.html | 102 + ...eastar_1_1future__state__base-members.html | 104 + .../structseastar_1_1future__state__base.html | 204 + master/structseastar_1_1futurize-members.html | 97 + master/structseastar_1_1futurize.html | 239 + master/structseastar_1_1futurize.png | Bin 0 -> 718 bytes ...tructseastar_1_1http_1_1reply-members.html | 103 + master/structseastar_1_1http_1_1reply.html | 535 +++ ...uctseastar_1_1http_1_1request-members.html | 120 + master/structseastar_1_1http_1_1request.html | 750 +++ ...tseastar_1_1httpd_1_1api__doc-members.html | 102 + .../structseastar_1_1httpd_1_1api__doc.html | 269 ++ master/structseastar_1_1httpd_1_1api__doc.png | Bin 0 -> 903 bytes ...seastar_1_1httpd_1_1api__docs-members.html | 103 + .../structseastar_1_1httpd_1_1api__docs.html | 272 ++ .../structseastar_1_1httpd_1_1api__docs.png | Bin 0 -> 907 bytes ...r_1_1httpd_1_1json__operation-members.html | 86 + ...ctseastar_1_1httpd_1_1json__operation.html | 177 + ...1_1httpd_1_1path__description-members.html | 98 + ...seastar_1_1httpd_1_1path__description.html | 431 ++ ...eastar_1_1indirect__equal__to-members.html | 85 + .../structseastar_1_1indirect__equal__to.html | 102 + ...ructseastar_1_1indirect__hash-members.html | 85 + master/structseastar_1_1indirect__hash.html | 102 + ...ructseastar_1_1indirect__less-members.html | 85 + master/structseastar_1_1indirect__less.html | 102 + .../structseastar_1_1ipv4__addr-members.html | 94 + master/structseastar_1_1ipv4__addr.html | 126 + .../structseastar_1_1ipv6__addr-members.html | 95 + master/structseastar_1_1ipv6__addr.html | 136 + master/structseastar_1_1is__future.html | 94 + master/structseastar_1_1is__future.png | Bin 0 -> 616 bytes master/structseastar_1_1is__smart__ptr.html | 88 + master/structseastar_1_1is__smart__ptr.png | Bin 0 -> 651 bytes ..._ptr_3_01foreign__ptr_3_01T_01_4_01_4.html | 88 + ...__ptr_3_01foreign__ptr_3_01T_01_4_01_4.png | Bin 0 -> 744 bytes ...r_3_01lw__shared__ptr_3_01T_01_4_01_4.html | 88 + ...tr_3_01lw__shared__ptr_3_01T_01_4_01_4.png | Bin 0 -> 751 bytes ...__ptr_3_01shared__ptr_3_01T_01_4_01_4.html | 88 + ...t__ptr_3_01shared__ptr_3_01T_01_4_01_4.png | Bin 0 -> 726 bytes ..._01std_1_1unique__ptr_3_01T_01_4_01_4.html | 88 + ...3_01std_1_1unique__ptr_3_01T_01_4_01_4.png | Bin 0 -> 768 bytes ...seastar_1_1json_1_1json__base-members.html | 95 + .../structseastar_1_1json_1_1json__base.html | 263 + .../structseastar_1_1json_1_1json__base.png | Bin 0 -> 1708 bytes ...1_1json_1_1json__return__type-members.html | 90 + ...seastar_1_1json_1_1json__return__type.html | 123 + ...seastar_1_1json_1_1json__void-members.html | 88 + .../structseastar_1_1json_1_1json__void.html | 166 + .../structseastar_1_1json_1_1json__void.png | Bin 0 -> 619 bytes ...astar_1_1lazy__deref__wrapper-members.html | 84 + ...structseastar_1_1lazy__deref__wrapper.html | 105 + ...uctseastar_1_1listen__options-members.html | 89 + master/structseastar_1_1listen__options.html | 114 + ...eastar_1_1log__cli_1_1options-members.html | 105 + .../structseastar_1_1log__cli_1_1options.html | 339 ++ .../structseastar_1_1log__cli_1_1options.png | Bin 0 -> 1018 bytes ...w__shared__ptr__counter__base-members.html | 83 + ...tar_1_1lw__shared__ptr__counter__base.html | 103 + ...star_1_1lw__shared__ptr__counter__base.png | Bin 0 -> 1589 bytes ..._1_1lw__shared__ptr__no__esft-members.html | 87 + ...tseastar_1_1lw__shared__ptr__no__esft.html | 115 + ...ctseastar_1_1lw__shared__ptr__no__esft.png | Bin 0 -> 805 bytes ...1_1memory_1_1allocation__site-members.html | 89 + ...seastar_1_1memory_1_1allocation__site.html | 122 + ...astar_1_1metrics_1_1histogram-members.html | 89 + ...structseastar_1_1metrics_1_1histogram.html | 183 + ..._1_1metrics_1_1impl_1_1config-members.html | 83 + ...tseastar_1_1metrics_1_1impl_1_1config.html | 107 + ...impl_1_1counter__type__traits-members.html | 85 + ...rics_1_1impl_1_1counter__type__traits.html | 102 + ...l_1_1metric__definition__impl-members.html | 97 + ...s_1_1impl_1_1metric__definition__impl.html | 138 + ...1impl_1_1metric__family__info-members.html | 87 + ...trics_1_1impl_1_1metric__family__info.html | 180 + ...l_1_1metric__family__metadata-members.html | 84 + ...s_1_1impl_1_1metric__family__metadata.html | 130 + ...trics_1_1impl_1_1metric__info-members.html | 86 + ...ar_1_1metrics_1_1impl_1_1metric__info.html | 162 + ...trics_1_1impl_1_1metric__type-members.html | 84 + ...ar_1_1metrics_1_1impl_1_1metric__type.html | 124 + ..._1real__counter__type__traits-members.html | 83 + ..._1impl_1_1real__counter__type__traits.html | 109 + ...__traits_3_01true_00_01T_01_4-members.html | 83 + ...er__type__traits_3_01true_00_01T_01_4.html | 109 + ...trics_1_1impl_1_1values__copy-members.html | 84 + ...ar_1_1metrics_1_1impl_1_1values__copy.html | 124 + ...seastar_1_1metrics_1_1options-members.html | 100 + .../structseastar_1_1metrics_1_1options.html | 230 + .../structseastar_1_1metrics_1_1options.png | Bin 0 -> 1022 bytes ...1_1metrics_1_1relabel__config-members.html | 89 + ...seastar_1_1metrics_1_1relabel__config.html | 130 + ...tructseastar_1_1mmap__deleter-members.html | 84 + master/structseastar_1_1mmap__deleter.html | 99 + ...semaphore__exception__factory-members.html | 86 + ...1named__semaphore__exception__factory.html | 105 + ...tseastar_1_1nested__exception-members.html | 89 + .../structseastar_1_1nested__exception.html | 120 + master/structseastar_1_1nested__exception.png | Bin 0 -> 607 bytes ...seastar_1_1net_1_1checksummer-members.html | 92 + .../structseastar_1_1net_1_1checksummer.html | 124 + ...astar_1_1net_1_1dpdk__options-members.html | 100 + ...structseastar_1_1net_1_1dpdk__options.html | 245 + .../structseastar_1_1net_1_1dpdk__options.png | Bin 0 -> 1034 bytes ...uctseastar_1_1net_1_1eth__hdr-members.html | 86 + master/structseastar_1_1net_1_1eth__hdr.html | 106 + ...uctseastar_1_1net_1_1ethernet-members.html | 85 + master/structseastar_1_1net_1_1ethernet.html | 102 + ...r_1_1net_1_1ethernet__address-members.html | 92 + ...ctseastar_1_1net_1_1ethernet__address.html | 125 + ...ctseastar_1_1net_1_1icmp__hdr-members.html | 88 + master/structseastar_1_1net_1_1icmp__hdr.html | 117 + ...ructseastar_1_1net_1_1ip__hdr-members.html | 100 + master/structseastar_1_1net_1_1ip__hdr.html | 155 + ..._1_1net_1_1ip__packet__filter-members.html | 84 + ...tseastar_1_1net_1_1ip__packet__filter.html | 92 + ...astar_1_1net_1_1ipv4__address-members.html | 95 + ...structseastar_1_1net_1_1ipv4__address.html | 128 + ...star_1_1net_1_1ipv4__frag__id-members.html | 87 + ...tructseastar_1_1net_1_1ipv4__frag__id.html | 114 + ...net_1_1ipv4__frag__id_1_1hash-members.html | 83 + ...star_1_1net_1_1ipv4__frag__id_1_1hash.html | 98 + ...astar_1_1net_1_1ipv4__frag__id_1_1hash.png | Bin 0 -> 1281 bytes ...eastar_1_1net_1_1ipv4__traits-members.html | 88 + .../structseastar_1_1net_1_1ipv4__traits.html | 163 + ...astar_1_1net_1_1ipv6__address-members.html | 99 + ...structseastar_1_1net_1_1ipv6__address.html | 150 + ...uctseastar_1_1net_1_1l4connid-members.html | 90 + master/structseastar_1_1net_1_1l4connid.html | 127 + ...t_1_1l4connid_1_1connid__hash-members.html | 83 + ...ar_1_1net_1_1l4connid_1_1connid__hash.html | 98 + ...tar_1_1net_1_1l4connid_1_1connid__hash.png | Bin 0 -> 1290 bytes ...net_1_1native__stack__options-members.html | 111 + ...star_1_1net_1_1native__stack__options.html | 419 ++ ...astar_1_1net_1_1native__stack__options.png | Bin 0 -> 1084 bytes ...ctseastar_1_1net_1_1qp__stats-members.html | 85 + master/structseastar_1_1net_1_1qp__stats.html | 119 + ...tar_1_1net_1_1qp__stats__good-members.html | 91 + ...ructseastar_1_1net_1_1qp__stats__good.html | 240 + ...uctseastar_1_1net_1_1tcp__hdr-members.html | 102 + master/structseastar_1_1net_1_1tcp__hdr.html | 161 + ...seastar_1_1net_1_1tcp__option-members.html | 97 + .../structseastar_1_1net_1_1tcp__option.html | 182 + ..._1_1net_1_1tcp__option_1_1eol-members.html | 85 + ...tseastar_1_1net_1_1tcp__option_1_1eol.html | 102 + ..._1_1net_1_1tcp__option_1_1mss-members.html | 87 + ...tseastar_1_1net_1_1tcp__option_1_1mss.html | 109 + ..._1_1net_1_1tcp__option_1_1nop-members.html | 85 + ...tseastar_1_1net_1_1tcp__option_1_1nop.html | 102 + ...1_1net_1_1tcp__option_1_1sack-members.html | 86 + ...seastar_1_1net_1_1tcp__option_1_1sack.html | 109 + ..._1_1tcp__option_1_1timestamps-members.html | 88 + ...r_1_1net_1_1tcp__option_1_1timestamps.html | 119 + ..._1_1tcp__option_1_1win__scale-members.html | 87 + ...r_1_1net_1_1tcp__option_1_1win__scale.html | 116 + ...1_1net_1_1udp__channel__state-members.html | 87 + ...seastar_1_1net_1_1udp__channel__state.html | 108 + ...uctseastar_1_1net_1_1udp__hdr-members.html | 87 + master/structseastar_1_1net_1_1udp__hdr.html | 109 + ...tar_1_1net_1_1virtio__options-members.html | 103 + ...ructseastar_1_1net_1_1virtio__options.html | 307 ++ ...tructseastar_1_1net_1_1virtio__options.png | Bin 0 -> 1027 bytes ...ble__fd__state_1_1speculation-members.html | 84 + ...1_1pollable__fd__state_1_1speculation.html | 99 + master/structseastar_1_1pollfn-members.html | 87 + master/structseastar_1_1pollfn.html | 110 + master/structseastar_1_1pollfn.png | Bin 0 -> 694 bytes .../structseastar_1_1prefetcher-members.html | 83 + master/structseastar_1_1prefetcher.html | 92 + ...r_3_010_00_01RW_00_01LOC_01_4-members.html | 83 + ...refetcher_3_010_00_01RW_00_01LOC_01_4.html | 92 + ...astar_1_1prometheus_1_1config-members.html | 87 + ...structseastar_1_1prometheus_1_1config.html | 191 + ...uctseastar_1_1promise__expiry-members.html | 83 + master/structseastar_1_1promise__expiry.html | 92 + ...ctseastar_1_1reactor__options-members.html | 122 + master/structseastar_1_1reactor__options.html | 621 +++ master/structseastar_1_1reactor__options.png | Bin 0 -> 1012 bytes ..._1_1resource_1_1configuration-members.html | 91 + ...tseastar_1_1resource_1_1configuration.html | 243 + ...uctseastar_1_1resource_1_1cpu-members.html | 84 + master/structseastar_1_1resource_1_1cpu.html | 124 + ...hwloc_1_1internal_1_1topology__holder.html | 82 + ...source_1_1io__queue__topology-members.html | 91 + ...ar_1_1resource_1_1io__queue__topology.html | 114 + ...seastar_1_1resource_1_1memory-members.html | 84 + .../structseastar_1_1resource_1_1memory.html | 124 + ...star_1_1resource_1_1resources-members.html | 85 + ...tructseastar_1_1resource_1_1resources.html | 141 + ...seastar_1_1rpc_1_1cancellable-members.html | 91 + .../structseastar_1_1rpc_1_1cancellable.html | 114 + ...c_1_1client_1_1reply__handler-members.html | 93 + ...ar_1_1rpc_1_1client_1_1reply__handler.html | 122 + ...eastar_1_1rpc_1_1client__info-members.html | 91 + .../structseastar_1_1rpc_1_1client__info.html | 125 + ...connection_1_1outgoing__entry-members.html | 92 + ...1rpc_1_1connection_1_1outgoing__entry.html | 130 + ..._1rpc_1_1connection_1_1outgoing__entry.png | Bin 0 -> 1136 bytes ..._1_1rpc_1_1deferred__snd__buf-members.html | 84 + ...tseastar_1_1rpc_1_1deferred__snd__buf.html | 124 + ...star_1_1rpc_1_1do__want__client__info.html | 82 + ...astar_1_1rpc_1_1do__want__time__point.html | 82 + ...ar_1_1rpc_1_1dont__want__client__info.html | 82 + ...tar_1_1rpc_1_1dont__want__time__point.html | 82 + ...astar_1_1rpc_1_1marshall__one-members.html | 83 + ...structseastar_1_1rpc_1_1marshall__one.html | 106 + ...pc_1_1marshall__one_1_1helper-members.html | 83 + ...tar_1_1rpc_1_1marshall__one_1_1helper.html | 92 + ..._01sink_3_01T_8_8_8_01_4_01_4-members.html | 83 + ...helper_3_01sink_3_01T_8_8_8_01_4_01_4.html | 92 + ...1source_3_01T_8_8_8_01_4_01_4-members.html | 83 + ...lper_3_01source_3_01T_8_8_8_01_4_01_4.html | 92 + ...apper_3_01const_01T_01_4_01_4-members.html | 83 + ...ence__wrapper_3_01const_01T_01_4_01_4.html | 92 + ...01tuple_3_01T_8_8_8_01_4_01_4-members.html | 83 + ...elper_3_01tuple_3_01T_8_8_8_01_4_01_4.html | 92 + ..._1_1rpc_1_1negotiation__frame-members.html | 84 + ...tseastar_1_1rpc_1_1negotiation__frame.html | 124 + ...tructseastar_1_1rpc_1_1no__wait__type.html | 82 + ...uctseastar_1_1rpc_1_1rcv__buf-members.html | 90 + master/structseastar_1_1rpc_1_1rcv__buf.html | 118 + ...tseastar_1_1rpc_1_1rcv__reply-members.html | 83 + .../structseastar_1_1rpc_1_1rcv__reply.html | 114 + master/structseastar_1_1rpc_1_1rcv__reply.png | Bin 0 -> 858 bytes ...1future_3_01T_8_8_8_01_4_01_4-members.html | 83 + ...zer_00_01future_3_01T_8_8_8_01_4_01_4.html | 114 + ...izer_00_01future_3_01T_8_8_8_01_4_01_4.png | Bin 0 -> 1108 bytes ...rializer_00_01future_3_4_01_4-members.html | 83 + ...y_3_01Serializer_00_01future_3_4_01_4.html | 115 + ...ly_3_01Serializer_00_01future_3_4_01_4.png | Bin 0 -> 1489 bytes ...3_01Serializer_00_01void_01_4-members.html | 83 + ...__reply_3_01Serializer_00_01void_01_4.html | 115 + ...v__reply_3_01Serializer_00_01void_01_4.png | Bin 0 -> 1492 bytes ...ar_1_1rpc_1_1rcv__reply__base-members.html | 86 + ...uctseastar_1_1rpc_1_1rcv__reply__base.html | 103 + ...ar_1_1rpc_1_1remove__optional-members.html | 83 + ...uctseastar_1_1rpc_1_1remove__optional.html | 109 + ..._3_01optional_3_01T_01_4_01_4-members.html | 83 + ...optional_3_01optional_3_01T_01_4_01_4.html | 109 + ...eastar_1_1rpc_1_1rpc__handler-members.html | 85 + .../structseastar_1_1rpc_1_1rpc__handler.html | 141 + ...ctseastar_1_1rpc_1_1serialize__helper.html | 82 + ...ialize__helper_3_01false_01_4-members.html | 83 + ...c_1_1serialize__helper_3_01false_01_4.html | 93 + ...rialize__helper_3_01true_01_4-members.html | 83 + ...pc_1_1serialize__helper_3_01true_01_4.html | 93 + master/structseastar_1_1rpc_1_1signature.html | 82 + ...ature_3_01Ret_07In_8_8_8_08_4-members.html | 87 + ..._1_1signature_3_01Ret_07In_8_8_8_08_4.html | 185 + ..._info_01_6_00_01In_8_8_8_08_4-members.html | 87 + ...7client__info_01_6_00_01In_8_8_8_08_4.html | 185 + ...ime__point_00_01In_8_8_8_08_4-members.html | 87 + ...01opt__time__point_00_01In_8_8_8_08_4.html | 185 + ..._info_01_6_00_01In_8_8_8_08_4-members.html | 87 + ...1client__info_01_6_00_01In_8_8_8_08_4.html | 185 + ...ime__point_00_01In_8_8_8_08_4-members.html | 87 + ...01opt__time__point_00_01In_8_8_8_08_4.html | 185 + ...ime__point_00_01In_8_8_8_08_4-members.html | 87 + ...07opt__time__point_00_01In_8_8_8_08_4.html | 185 + ...uctseastar_1_1rpc_1_1snd__buf-members.html | 93 + master/structseastar_1_1rpc_1_1snd__buf.html | 131 + ...structseastar_1_1rpc_1_1stats-members.html | 91 + master/structseastar_1_1rpc_1_1stats.html | 248 + ...star_1_1rpc_1_1unmarshal__one-members.html | 83 + ...tructseastar_1_1rpc_1_1unmarshal__one.html | 108 + ...c_1_1unmarshal__one_1_1helper-members.html | 83 + ...ar_1_1rpc_1_1unmarshal__one_1_1helper.html | 92 + ..._3_01optional_3_01T_01_4_01_4-members.html | 83 + ..._1helper_3_01optional_3_01T_01_4_01_4.html | 92 + ..._01sink_3_01T_8_8_8_01_4_01_4-members.html | 83 + ...helper_3_01sink_3_01T_8_8_8_01_4_01_4.html | 92 + ...1source_3_01T_8_8_8_01_4_01_4-members.html | 83 + ...lper_3_01source_3_01T_8_8_8_01_4_01_4.html | 92 + ...apper_3_01const_01T_01_4_01_4-members.html | 83 + ...ence__wrapper_3_01const_01T_01_4_01_4.html | 92 + ...01tuple_3_01T_8_8_8_01_4_01_4-members.html | 83 + ...elper_3_01tuple_3_01T_8_8_8_01_4_01_4.html | 92 + ...tar_1_1rpc_1_1wait__signature-members.html | 84 + ...ructseastar_1_1rpc_1_1wait__signature.html | 128 + ...1future_3_01T_8_8_8_01_4_01_4-members.html | 84 + ...ture_3_01future_3_01T_8_8_8_01_4_01_4.html | 128 + ..._3_01no__wait__type_01_4_01_4-members.html | 84 + ...01future_3_01no__wait__type_01_4_01_4.html | 124 + ...ature_3_01no__wait__type_01_4-members.html | 84 + ...it__signature_3_01no__wait__type_01_4.html | 124 + .../structseastar_1_1rpc_1_1wait__type.html | 82 + ...cheduling__group__key__config-members.html | 90 + ...tar_1_1scheduling__group__key__config.html | 199 + ...astar_1_1scollectd_1_1data__type__for.html | 91 + ...eastar_1_1scollectd_1_1data__type__for.png | Bin 0 -> 1044 bytes ...ble_35c0ca2f0a42f3af2902b730a47b963e6.html | 91 + ...able_35c0ca2f0a42f3af2902b730a47b963e6.png | Bin 0 -> 1441 bytes ...__floefb1fea89ef879d2424c4cbcbf5c1652.html | 88 + ...s__floefb1fea89ef879d2424c4cbcbf5c1652.png | Bin 0 -> 1535 bytes ...__int8bb9c47ea63565f41486d8397e60995d.html | 88 + ...s__int8bb9c47ea63565f41486d8397e60995d.png | Bin 0 -> 1743 bytes ...__type__for_3_01typed_3_01T_01_4_01_4.html | 91 + ...a__type__for_3_01typed_3_01T_01_4_01_4.png | Bin 0 -> 1004 bytes ...undam691d139f22c6f61584588d14c6b15105.html | 88 + ...fundam691d139f22c6f61584588d14c6b15105.png | Bin 0 -> 1151 bytes ...id__v6ef63c309456a52af7019db17223ca10.html | 88 + ...oid__v6ef63c309456a52af7019db17223ca10.png | Bin 0 -> 1345 bytes ...astar_1_1scollectd_1_1options-members.html | 102 + ...structseastar_1_1scollectd_1_1options.html | 280 ++ .../structseastar_1_1scollectd_1_1options.png | Bin 0 -> 1016 bytes ..._1_1scollectd_1_1registration-members.html | 91 + ...tseastar_1_1scollectd_1_1registration.html | 115 + ...seastar_1_1scollectd_1_1typed-members.html | 85 + .../structseastar_1_1scollectd_1_1typed.html | 102 + ..._1_1scollectd_1_1typed__value-members.html | 87 + ...tseastar_1_1scollectd_1_1typed__value.html | 158 + ...ctseastar_1_1scollectd_1_1typed__value.png | Bin 0 -> 926 bytes ...ollectd_1_1typed__value__impl-members.html | 90 + ...ar_1_1scollectd_1_1typed__value__impl.html | 124 + ...tar_1_1scollectd_1_1typed__value__impl.png | Bin 0 -> 916 bytes ...1_1scollectd_1_1value_1_1wrap-members.html | 85 + ...seastar_1_1scollectd_1_1value_1_1wrap.html | 102 + ...__default__exception__factory-members.html | 85 + ...emaphore__default__exception__factory.html | 114 + ...semaphore__default__exception__factory.png | Bin 0 -> 2464 bytes ...r_1_1shared__ptr__count__base-members.html | 84 + ...ctseastar_1_1shared__ptr__count__base.html | 106 + ...uctseastar_1_1shared__ptr__count__base.png | Bin 0 -> 3271 bytes ...ar_1_1shared__ptr__count__for-members.html | 86 + ...uctseastar_1_1shared__ptr__count__for.html | 112 + ...ructseastar_1_1shared__ptr__count__for.png | Bin 0 -> 763 bytes ..._helper_3_01T_00_01false_01_4-members.html | 83 + ...r__make__helper_3_01T_00_01false_01_4.html | 93 + ...__helper_3_01T_00_01true_01_4-members.html | 83 + ...tr__make__helper_3_01T_00_01true_01_4.html | 93 + ...ructseastar_1_1simple__pollfn-members.html | 87 + master/structseastar_1_1simple__pollfn.html | 195 + master/structseastar_1_1simple__pollfn.png | Bin 0 -> 688 bytes ...ctseastar_1_1slab__page__desc-members.html | 93 + master/structseastar_1_1slab__page__desc.html | 122 + ...sage__queue_1_1tx__side_1_1aa-members.html | 83 + ...smp__message__queue_1_1tx__side_1_1aa.html | 107 + ...structseastar_1_1smp__options-members.html | 113 + master/structseastar_1_1smp__options.html | 360 ++ master/structseastar_1_1smp__options.png | Bin 0 -> 1001 bytes ...r_1_1smp__submit__to__options-members.html | 85 + ...ctseastar_1_1smp__submit__to__options.html | 122 + .../structseastar_1_1unaligned-members.html | 87 + master/structseastar_1_1unaligned.html | 105 + ...seastar_1_1unix__domain__addr-members.html | 91 + .../structseastar_1_1unix__domain__addr.html | 126 + ...max__size_00_01NulTerminate_01_4_01_4.html | 92 + ...ze_00fbbc76df89680f75689dd49cecc4b76c.html | 83 + ...1checked__ptr_3_01T_01_4_01_4-members.html | 83 + ...astar_1_1checked__ptr_3_01T_01_4_01_4.html | 132 + ..._01seastar_1_1ipv4__addr_01_4-members.html | 83 + ..._1hash_3_01seastar_1_1ipv4__addr_01_4.html | 92 + ...__shared__ptr_3_01T_01_4_01_4-members.html | 83 + ...ar_1_1lw__shared__ptr_3_01T_01_4_01_4.html | 98 + ...tar_1_1lw__shared__ptr_3_01T_01_4_01_4.png | Bin 0 -> 735 bytes ...mory_1_1allocation__site_01_4-members.html | 83 + ...ar_1_1memory_1_1allocation__site_01_4.html | 92 + ..._1_1impl_1_1labels__type_01_4-members.html | 85 + ...1metrics_1_1impl_1_1labels__type_01_4.html | 102 + ...cs_1_1impl_1_1metric__id_01_4-members.html | 85 + ...1_1metrics_1_1impl_1_1metric__id_01_4.html | 102 + ..._1_1net_1_1inet__address_01_4-members.html | 83 + ...1seastar_1_1net_1_1inet__address_01_4.html | 92 + ..._1_1net_1_1ipv4__address_01_4-members.html | 83 + ...1seastar_1_1net_1_1ipv4__address_01_4.html | 92 + ..._1_1net_1_1ipv6__address_01_4-members.html | 83 + ...1seastar_1_1net_1_1ipv6__address_01_4.html | 92 + ...1_1rpc_1_1connection__id_01_4-members.html | 83 + ...seastar_1_1rpc_1_1connection__id_01_4.html | 92 + ...1streaming__domain__type_01_4-members.html | 83 + ..._1rpc_1_1streaming__domain__type_01_4.html | 92 + ...tar_1_1scheduling__group_01_4-members.html | 83 + ...3_01seastar_1_1scheduling__group_01_4.html | 92 + ..._1shared__ptr_3_01T_01_4_01_4-members.html | 83 + ...eastar_1_1shared__ptr_3_01T_01_4_01_4.html | 98 + ...seastar_1_1shared__ptr_3_01T_01_4_01_4.png | Bin 0 -> 707 bytes ...tar_1_1simple__backtrace_01_4-members.html | 83 + ...3_01seastar_1_1simple__backtrace_01_4.html | 92 + ...astar_1_1socket__address_01_4-members.html | 83 + ...h_3_01seastar_1_1socket__address_01_4.html | 92 + ...3_01seastar_1_1tasktrace_01_4-members.html | 83 + ...1_1hash_3_01seastar_1_1tasktrace_01_4.html | 92 + ...3_01seastar_1_1transport_01_4-members.html | 83 + ...1_1hash_3_01seastar_1_1transport_01_4.html | 92 + ...ar_1_1unix__domain__addr_01_4-members.html | 83 + ..._01seastar_1_1unix__domain__addr_01_4.html | 92 + ..._1hash_3_1_1sockaddr__in_01_4-members.html | 83 + ...uctstd_1_1hash_3_1_1sockaddr__in_01_4.html | 92 + ..._1hash_3_1_1sockaddr__un_01_4-members.html | 83 + ...uctstd_1_1hash_3_1_1sockaddr__un_01_4.html | 92 + ...1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.html | 88 + ..._1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.png | Bin 0 -> 925 bytes ...1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.html | 88 + ..._1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.png | Bin 0 -> 764 bytes master/switch__to_8hh_source.html | 151 + master/sync_off.png | Bin 0 -> 853 bytes master/sync_on.png | Bin 0 -> 845 bytes ...ystemwide__memory__barrier_8hh_source.html | 115 + master/tab_a.png | Bin 0 -> 142 bytes master/tab_b.png | Bin 0 -> 169 bytes master/tab_h.png | Bin 0 -> 177 bytes master/tab_s.png | Bin 0 -> 184 bytes master/tabs.css | 1 + master/task_8hh_source.html | 166 + master/tcp-stack_8hh_source.html | 133 + master/tcp_8hh_source.html | 2288 +++++++++ master/temporary__buffer_8hh_source.html | 253 + master/test__case_8hh_source.html | 135 + master/test__runner_8hh_source.html | 151 + ...sting_2on__internal__error_8hh_source.html | 122 + master/thread_8hh_source.html | 281 ++ master/thread__cputime__clock_8hh_source.html | 131 + master/thread__impl_8hh_source.html | 162 + master/thread__test__case_8hh_source.html | 141 + master/timed__out__error_8hh_source.html | 140 + master/timer-set_8hh_source.html | 330 ++ master/timer_8hh.html | 111 + master/timer_8hh_source.html | 228 + master/tls_8hh_source.html | 471 ++ master/tmp__file_8hh_source.html | 254 + master/toeplitz_8hh_source.html | 182 + master/transfer_8hh_source.html | 159 + master/transform__iterator_8hh_source.html | 138 + master/transformers_8hh_source.html | 131 + master/tuple__utils_8hh_source.html | 219 + master/tutorial.html | 3726 +++++++++++++++ master/udp_8hh_source.html | 151 + master/unaligned_8hh_source.html | 163 + master/uname_8hh_source.html | 143 + ...1_1future__state__base_1_1any-members.html | 98 + ...seastar_1_1future__state__base_1_1any.html | 135 + master/units_8hh_source.html | 123 + master/unix__address_8hh_source.html | 149 + master/url_8hh_source.html | 120 + master/used__size_8hh_source.html | 118 + master/util_2file_8hh_source.html | 170 + master/util_2short__streams_8hh_source.html | 123 + master/variant__utils_8hh_source.html | 164 + master/vector-data-sink_8hh_source.html | 135 + master/virtio-interface_8hh_source.html | 210 + master/virtio_8hh_source.html | 137 + master/weak__ptr_8hh_source.html | 215 + master/when__all_8hh_source.html | 587 +++ master/when__any_8hh_source.html | 218 + .../with__scheduling__group_8hh_source.html | 153 + master/with__timeout_8hh_source.html | 153 + 2160 files changed, 274355 insertions(+) create mode 100644 CNAME create mode 100644 index.html create mode 100644 master/abort__on__ebadf_8hh_source.html create mode 100644 master/abort__on__expiry_8hh_source.html create mode 100644 master/abort__source_8hh_source.html create mode 100644 master/abortable__fifo_8hh_source.html create mode 100644 master/alien_8hh.html create mode 100644 master/alien_8hh_source.html create mode 100644 master/align_8hh_source.html create mode 100644 master/aligned__buffer_8hh_source.html create mode 100644 master/all_8hh_source.html create mode 100644 master/alloc__failure__injector_8hh_source.html create mode 100644 master/annotated.html create mode 100644 master/api-level_8hh_source.html create mode 100644 master/api_8hh_source.html create mode 100644 master/api__docs_8hh_source.html create mode 100644 master/app-template_8hh_source.html create mode 100644 master/arp_8hh_source.html create mode 100644 master/array__map_8hh_source.html create mode 100644 master/as__future_8hh_source.html create mode 100644 master/backtrace_8hh_source.html create mode 100644 master/bc_s.png create mode 100644 master/bdwn.png create mode 100644 master/bitops_8hh_source.html create mode 100644 master/bitset-iter_8hh_source.html create mode 100644 master/bool__class_8hh_source.html create mode 100644 master/buffer__allocator_8hh_source.html create mode 100644 master/cacheline_8hh_source.html create mode 100644 master/checked__ptr_8hh.html create mode 100644 master/checked__ptr_8hh_source.html create mode 100644 master/chunked__fifo_8hh_source.html create mode 100644 master/circular__buffer_8hh_source.html create mode 100644 master/circular__buffer__fixed__capacity_8hh.html create mode 100644 master/circular__buffer__fixed__capacity_8hh_source.html create mode 100644 master/classes.html create mode 100644 master/classlinux__perf__event-members.html create mode 100644 master/classlinux__perf__event.html create mode 100644 master/classperf__tests_1_1internal_1_1concrete__performance__test-members.html create mode 100644 master/classperf__tests_1_1internal_1_1concrete__performance__test.html create mode 100644 master/classperf__tests_1_1internal_1_1concrete__performance__test.png create mode 100644 master/classperf__tests_1_1internal_1_1perf__stats-members.html create mode 100644 master/classperf__tests_1_1internal_1_1perf__stats.html create mode 100644 master/classperf__tests_1_1internal_1_1performance__test-members.html create mode 100644 master/classperf__tests_1_1internal_1_1performance__test.html create mode 100644 master/classperf__tests_1_1internal_1_1performance__test.png create mode 100644 master/classperf__tests_1_1internal_1_1time__measurement-members.html create mode 100644 master/classperf__tests_1_1internal_1_1time__measurement.html create mode 100644 master/classsampler-members.html create mode 100644 master/classsampler.html create mode 100644 master/classseastar_1_1abort__on__expiry-members.html create mode 100644 master/classseastar_1_1abort__on__expiry.html create mode 100644 master/classseastar_1_1abort__requested__exception-members.html create mode 100644 master/classseastar_1_1abort__requested__exception.html create mode 100644 master/classseastar_1_1abort__requested__exception.png create mode 100644 master/classseastar_1_1abort__source-members.html create mode 100644 master/classseastar_1_1abort__source.html create mode 100644 master/classseastar_1_1abort__source_1_1subscription-members.html create mode 100644 master/classseastar_1_1abort__source_1_1subscription.html create mode 100644 master/classseastar_1_1abort__source_1_1subscription.png create mode 100644 master/classseastar_1_1adder-members.html create mode 100644 master/classseastar_1_1adder.html create mode 100644 master/classseastar_1_1alien_1_1instance-members.html create mode 100644 master/classseastar_1_1alien_1_1instance.html create mode 100644 master/classseastar_1_1alien_1_1message__queue-members.html create mode 100644 master/classseastar_1_1alien_1_1message__queue.html create mode 100644 master/classseastar_1_1array__map-members.html create mode 100644 master/classseastar_1_1array__map.html create mode 100644 master/classseastar_1_1async__sharded__service-members.html create mode 100644 master/classseastar_1_1async__sharded__service.html create mode 100644 master/classseastar_1_1async__sharded__service.png create mode 100644 master/classseastar_1_1basic__rwlock-members.html create mode 100644 master/classseastar_1_1basic__rwlock.html create mode 100644 master/classseastar_1_1basic__rwlock.png create mode 100644 master/classseastar_1_1basic__semaphore-members.html create mode 100644 master/classseastar_1_1basic__semaphore.html create mode 100644 master/classseastar_1_1basic__semaphore.png create mode 100644 master/classseastar_1_1basic__sstring-members.html create mode 100644 master/classseastar_1_1basic__sstring.html create mode 100644 master/classseastar_1_1bitsets_1_1set__iterator-members.html create mode 100644 master/classseastar_1_1bitsets_1_1set__iterator.html create mode 100644 master/classseastar_1_1bitsets_1_1set__range-members.html create mode 100644 master/classseastar_1_1bitsets_1_1set__range.html create mode 100644 master/classseastar_1_1bool__class-members.html create mode 100644 master/classseastar_1_1bool__class.html create mode 100644 master/classseastar_1_1broken__condition__variable-members.html create mode 100644 master/classseastar_1_1broken__condition__variable.html create mode 100644 master/classseastar_1_1broken__condition__variable.png create mode 100644 master/classseastar_1_1broken__named__semaphore-members.html create mode 100644 master/classseastar_1_1broken__named__semaphore.html create mode 100644 master/classseastar_1_1broken__named__semaphore.png create mode 100644 master/classseastar_1_1broken__pipe__exception-members.html create mode 100644 master/classseastar_1_1broken__pipe__exception.html create mode 100644 master/classseastar_1_1broken__pipe__exception.png create mode 100644 master/classseastar_1_1broken__semaphore-members.html create mode 100644 master/classseastar_1_1broken__semaphore.html create mode 100644 master/classseastar_1_1broken__semaphore.png create mode 100644 master/classseastar_1_1cancelled__error-members.html create mode 100644 master/classseastar_1_1cancelled__error.html create mode 100644 master/classseastar_1_1cancelled__error.png create mode 100644 master/classseastar_1_1checked__ptr-members.html create mode 100644 master/classseastar_1_1checked__ptr.html create mode 100644 master/classseastar_1_1checked__ptr__is__null__exception.html create mode 100644 master/classseastar_1_1checked__ptr__is__null__exception.png create mode 100644 master/classseastar_1_1chunked__fifo-members.html create mode 100644 master/classseastar_1_1chunked__fifo.html create mode 100644 master/classseastar_1_1circular__buffer-members.html create mode 100644 master/classseastar_1_1circular__buffer.html create mode 100644 master/classseastar_1_1circular__buffer__fixed__capacity-members.html create mode 100644 master/classseastar_1_1circular__buffer__fixed__capacity.html create mode 100644 master/classseastar_1_1circular__buffer__fixed__capacity_1_1cbiterator-members.html create mode 100644 master/classseastar_1_1circular__buffer__fixed__capacity_1_1cbiterator.html create mode 100644 master/classseastar_1_1concrete__execution__stage-members.html create mode 100644 master/classseastar_1_1concrete__execution__stage.html create mode 100644 master/classseastar_1_1concrete__execution__stage.png create mode 100644 master/classseastar_1_1condition__variable-members.html create mode 100644 master/classseastar_1_1condition__variable.html create mode 100644 master/classseastar_1_1condition__variable__timed__out-members.html create mode 100644 master/classseastar_1_1condition__variable__timed__out.html create mode 100644 master/classseastar_1_1condition__variable__timed__out.png create mode 100644 master/classseastar_1_1connected__socket-members.html create mode 100644 master/classseastar_1_1connected__socket.html create mode 100644 master/classseastar_1_1consumption__result-members.html create mode 100644 master/classseastar_1_1consumption__result.html create mode 100644 master/classseastar_1_1coroutine_1_1all-members.html create mode 100644 master/classseastar_1_1coroutine_1_1all.html create mode 100644 master/classseastar_1_1coroutine_1_1as__future-members.html create mode 100644 master/classseastar_1_1coroutine_1_1as__future.html create mode 100644 master/classseastar_1_1coroutine_1_1as__future.png create mode 100644 master/classseastar_1_1coroutine_1_1as__future__without__preemption__check-members.html create mode 100644 master/classseastar_1_1coroutine_1_1as__future__without__preemption__check.html create mode 100644 master/classseastar_1_1coroutine_1_1as__future__without__preemption__check.png create mode 100644 master/classseastar_1_1coroutine_1_1experimental_1_1generator.html create mode 100644 master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__buffered__promise-members.html create mode 100644 master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__buffered__promise.html create mode 100644 master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__buffered__promise.png create mode 100644 master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__unbuffered__promise-members.html create mode 100644 master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__unbuffered__promise.html create mode 100644 master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__unbuffered__promise.png create mode 100644 master/classseastar_1_1coroutine_1_1lambda-members.html create mode 100644 master/classseastar_1_1coroutine_1_1lambda.html create mode 100644 master/classseastar_1_1coroutine_1_1maybe__yield-members.html create mode 100644 master/classseastar_1_1coroutine_1_1maybe__yield.html create mode 100644 master/classseastar_1_1coroutine_1_1parallel__for__each-members.html create mode 100644 master/classseastar_1_1coroutine_1_1parallel__for__each.html create mode 100644 master/classseastar_1_1coroutine_1_1parallel__for__each.png create mode 100644 master/classseastar_1_1data__sink-members.html create mode 100644 master/classseastar_1_1data__sink.html create mode 100644 master/classseastar_1_1data__sink__impl-members.html create mode 100644 master/classseastar_1_1data__sink__impl.html create mode 100644 master/classseastar_1_1data__sink__impl.png create mode 100644 master/classseastar_1_1data__source-members.html create mode 100644 master/classseastar_1_1data__source.html create mode 100644 master/classseastar_1_1data__source__impl-members.html create mode 100644 master/classseastar_1_1data__source__impl.html create mode 100644 master/classseastar_1_1data__source__impl.png create mode 100644 master/classseastar_1_1deferred__action-members.html create mode 100644 master/classseastar_1_1deferred__action.html create mode 100644 master/classseastar_1_1deferred__close-members.html create mode 100644 master/classseastar_1_1deferred__close.html create mode 100644 master/classseastar_1_1deferred__stop-members.html create mode 100644 master/classseastar_1_1deferred__stop.html create mode 100644 master/classseastar_1_1deleter-members.html create mode 100644 master/classseastar_1_1deleter.html create mode 100644 master/classseastar_1_1enable__lw__shared__from__this-members.html create mode 100644 master/classseastar_1_1enable__lw__shared__from__this.html create mode 100644 master/classseastar_1_1enable__lw__shared__from__this.png create mode 100644 master/classseastar_1_1enable__shared__from__this-members.html create mode 100644 master/classseastar_1_1enable__shared__from__this.html create mode 100644 master/classseastar_1_1enable__shared__from__this.png create mode 100644 master/classseastar_1_1enum__hash-members.html create mode 100644 master/classseastar_1_1enum__hash.html create mode 100644 master/classseastar_1_1execution__stage-members.html create mode 100644 master/classseastar_1_1execution__stage.html create mode 100644 master/classseastar_1_1execution__stage.png create mode 100644 master/classseastar_1_1experimental_1_1fsnotifier-members.html create mode 100644 master/classseastar_1_1experimental_1_1fsnotifier.html create mode 100644 master/classseastar_1_1experimental_1_1fsnotifier_1_1watch-members.html create mode 100644 master/classseastar_1_1experimental_1_1fsnotifier_1_1watch.html create mode 100644 master/classseastar_1_1experimental_1_1process-members.html create mode 100644 master/classseastar_1_1experimental_1_1process.html create mode 100644 master/classseastar_1_1experimental_1_1websocket_1_1connection-members.html create mode 100644 master/classseastar_1_1experimental_1_1websocket_1_1connection.html create mode 100644 master/classseastar_1_1experimental_1_1websocket_1_1connection.png create mode 100644 master/classseastar_1_1experimental_1_1websocket_1_1exception-members.html create mode 100644 master/classseastar_1_1experimental_1_1websocket_1_1exception.html create mode 100644 master/classseastar_1_1experimental_1_1websocket_1_1exception.png create mode 100644 master/classseastar_1_1experimental_1_1websocket_1_1server-members.html create mode 100644 master/classseastar_1_1experimental_1_1websocket_1_1server.html create mode 100644 master/classseastar_1_1experimental_1_1websocket_1_1websocket__parser-members.html create mode 100644 master/classseastar_1_1experimental_1_1websocket_1_1websocket__parser.html create mode 100644 master/classseastar_1_1expiring__fifo-members.html create mode 100644 master/classseastar_1_1expiring__fifo.html create mode 100644 master/classseastar_1_1fair__group-members.html create mode 100644 master/classseastar_1_1fair__group.html create mode 100644 master/classseastar_1_1fair__queue-members.html create mode 100644 master/classseastar_1_1fair__queue.html create mode 100644 master/classseastar_1_1fair__queue__entry-members.html create mode 100644 master/classseastar_1_1fair__queue__entry.html create mode 100644 master/classseastar_1_1fair__queue__ticket-members.html create mode 100644 master/classseastar_1_1fair__queue__ticket.html create mode 100644 master/classseastar_1_1file-members.html create mode 100644 master/classseastar_1_1file.html create mode 100644 master/classseastar_1_1file_1_1eof__error.html create mode 100644 master/classseastar_1_1file_1_1eof__error.png create mode 100644 master/classseastar_1_1file__desc-members.html create mode 100644 master/classseastar_1_1file__desc.html create mode 100644 master/classseastar_1_1file__handle-members.html create mode 100644 master/classseastar_1_1file__handle.html create mode 100644 master/classseastar_1_1file__handle__impl-members.html create mode 100644 master/classseastar_1_1file__handle__impl.html create mode 100644 master/classseastar_1_1file__impl-members.html create mode 100644 master/classseastar_1_1file__impl.html create mode 100644 master/classseastar_1_1file__impl.png create mode 100644 master/classseastar_1_1file__input__stream__history-members.html create mode 100644 master/classseastar_1_1file__input__stream__history.html create mode 100644 master/classseastar_1_1foreign__ptr-members.html create mode 100644 master/classseastar_1_1foreign__ptr.html create mode 100644 master/classseastar_1_1fragmented__memory__input__stream-members.html create mode 100644 master/classseastar_1_1fragmented__memory__input__stream.html create mode 100644 master/classseastar_1_1fragmented__memory__output__stream-members.html create mode 100644 master/classseastar_1_1fragmented__memory__output__stream.html create mode 100644 master/classseastar_1_1future-members.html create mode 100644 master/classseastar_1_1future.html create mode 100644 master/classseastar_1_1future.png create mode 100644 master/classseastar_1_1gate-members.html create mode 100644 master/classseastar_1_1gate.html create mode 100644 master/classseastar_1_1gate_1_1holder-members.html create mode 100644 master/classseastar_1_1gate_1_1holder.html create mode 100644 master/classseastar_1_1gate__closed__exception-members.html create mode 100644 master/classseastar_1_1gate__closed__exception.html create mode 100644 master/classseastar_1_1gate__closed__exception.png create mode 100644 master/classseastar_1_1http_1_1experimental_1_1client-members.html create mode 100644 master/classseastar_1_1http_1_1experimental_1_1client.html create mode 100644 master/classseastar_1_1http_1_1experimental_1_1connection-members.html create mode 100644 master/classseastar_1_1http_1_1experimental_1_1connection.html create mode 100644 master/classseastar_1_1http_1_1experimental_1_1connection.png create mode 100644 master/classseastar_1_1http_1_1experimental_1_1connection__factory-members.html create mode 100644 master/classseastar_1_1http_1_1experimental_1_1connection__factory.html create mode 100644 master/classseastar_1_1http_1_1internal_1_1client__ref-members.html create mode 100644 master/classseastar_1_1http_1_1internal_1_1client__ref.html create mode 100644 master/classseastar_1_1httpd_1_1api__docs__20-members.html create mode 100644 master/classseastar_1_1httpd_1_1api__docs__20.html create mode 100644 master/classseastar_1_1httpd_1_1api__registry-members.html create mode 100644 master/classseastar_1_1httpd_1_1api__registry.html create mode 100644 master/classseastar_1_1httpd_1_1api__registry.png create mode 100644 master/classseastar_1_1httpd_1_1api__registry__20-members.html create mode 100644 master/classseastar_1_1httpd_1_1api__registry__20.html create mode 100644 master/classseastar_1_1httpd_1_1api__registry__20.png create mode 100644 master/classseastar_1_1httpd_1_1api__registry__base-members.html create mode 100644 master/classseastar_1_1httpd_1_1api__registry__base.html create mode 100644 master/classseastar_1_1httpd_1_1api__registry__base.png create mode 100644 master/classseastar_1_1httpd_1_1api__registry__builder-members.html create mode 100644 master/classseastar_1_1httpd_1_1api__registry__builder.html create mode 100644 master/classseastar_1_1httpd_1_1api__registry__builder.png create mode 100644 master/classseastar_1_1httpd_1_1api__registry__builder20-members.html create mode 100644 master/classseastar_1_1httpd_1_1api__registry__builder20.html create mode 100644 master/classseastar_1_1httpd_1_1api__registry__builder20.png create mode 100644 master/classseastar_1_1httpd_1_1api__registry__builder__base-members.html create mode 100644 master/classseastar_1_1httpd_1_1api__registry__builder__base.html create mode 100644 master/classseastar_1_1httpd_1_1api__registry__builder__base.png create mode 100644 master/classseastar_1_1httpd_1_1bad__chunk__exception-members.html create mode 100644 master/classseastar_1_1httpd_1_1bad__chunk__exception.html create mode 100644 master/classseastar_1_1httpd_1_1bad__chunk__exception.png create mode 100644 master/classseastar_1_1httpd_1_1bad__param__exception-members.html create mode 100644 master/classseastar_1_1httpd_1_1bad__param__exception.html create mode 100644 master/classseastar_1_1httpd_1_1bad__param__exception.png create mode 100644 master/classseastar_1_1httpd_1_1bad__request__exception-members.html create mode 100644 master/classseastar_1_1httpd_1_1bad__request__exception.html create mode 100644 master/classseastar_1_1httpd_1_1bad__request__exception.png create mode 100644 master/classseastar_1_1httpd_1_1base__exception-members.html create mode 100644 master/classseastar_1_1httpd_1_1base__exception.html create mode 100644 master/classseastar_1_1httpd_1_1base__exception.png create mode 100644 master/classseastar_1_1httpd_1_1connection-members.html create mode 100644 master/classseastar_1_1httpd_1_1connection.html create mode 100644 master/classseastar_1_1httpd_1_1connection.png create mode 100644 master/classseastar_1_1httpd_1_1content__replace-members.html create mode 100644 master/classseastar_1_1httpd_1_1content__replace.html create mode 100644 master/classseastar_1_1httpd_1_1content__replace.png create mode 100644 master/classseastar_1_1httpd_1_1directory__handler-members.html create mode 100644 master/classseastar_1_1httpd_1_1directory__handler.html create mode 100644 master/classseastar_1_1httpd_1_1directory__handler.png create mode 100644 master/classseastar_1_1httpd_1_1file__handler-members.html create mode 100644 master/classseastar_1_1httpd_1_1file__handler.html create mode 100644 master/classseastar_1_1httpd_1_1file__handler.png create mode 100644 master/classseastar_1_1httpd_1_1file__interaction__handler-members.html create mode 100644 master/classseastar_1_1httpd_1_1file__interaction__handler.html create mode 100644 master/classseastar_1_1httpd_1_1file__interaction__handler.png create mode 100644 master/classseastar_1_1httpd_1_1file__transformer-members.html create mode 100644 master/classseastar_1_1httpd_1_1file__transformer.html create mode 100644 master/classseastar_1_1httpd_1_1file__transformer.png create mode 100644 master/classseastar_1_1httpd_1_1function__handler-members.html create mode 100644 master/classseastar_1_1httpd_1_1function__handler.html create mode 100644 master/classseastar_1_1httpd_1_1function__handler.png create mode 100644 master/classseastar_1_1httpd_1_1handler__base-members.html create mode 100644 master/classseastar_1_1httpd_1_1handler__base.html create mode 100644 master/classseastar_1_1httpd_1_1handler__base.png create mode 100644 master/classseastar_1_1httpd_1_1handler__registration-members.html create mode 100644 master/classseastar_1_1httpd_1_1handler__registration.html create mode 100644 master/classseastar_1_1httpd_1_1http__server-members.html create mode 100644 master/classseastar_1_1httpd_1_1http__server.html create mode 100644 master/classseastar_1_1httpd_1_1http__server__control-members.html create mode 100644 master/classseastar_1_1httpd_1_1http__server__control.html create mode 100644 master/classseastar_1_1httpd_1_1http__server__tester-members.html create mode 100644 master/classseastar_1_1httpd_1_1http__server__tester.html create mode 100644 master/classseastar_1_1httpd_1_1http__stats-members.html create mode 100644 master/classseastar_1_1httpd_1_1http__stats.html create mode 100644 master/classseastar_1_1httpd_1_1internal_1_1chunked__source__impl-members.html create mode 100644 master/classseastar_1_1httpd_1_1internal_1_1chunked__source__impl.html create mode 100644 master/classseastar_1_1httpd_1_1internal_1_1chunked__source__impl.png create mode 100644 master/classseastar_1_1httpd_1_1internal_1_1content__length__source__impl-members.html create mode 100644 master/classseastar_1_1httpd_1_1internal_1_1content__length__source__impl.html create mode 100644 master/classseastar_1_1httpd_1_1internal_1_1content__length__source__impl.png create mode 100644 master/classseastar_1_1httpd_1_1json__exception-members.html create mode 100644 master/classseastar_1_1httpd_1_1json__exception.html create mode 100644 master/classseastar_1_1httpd_1_1json__exception.png create mode 100644 master/classseastar_1_1httpd_1_1match__rule-members.html create mode 100644 master/classseastar_1_1httpd_1_1match__rule.html create mode 100644 master/classseastar_1_1httpd_1_1matcher-members.html create mode 100644 master/classseastar_1_1httpd_1_1matcher.html create mode 100644 master/classseastar_1_1httpd_1_1matcher.png create mode 100644 master/classseastar_1_1httpd_1_1missing__param__exception-members.html create mode 100644 master/classseastar_1_1httpd_1_1missing__param__exception.html create mode 100644 master/classseastar_1_1httpd_1_1missing__param__exception.png create mode 100644 master/classseastar_1_1httpd_1_1not__found__exception-members.html create mode 100644 master/classseastar_1_1httpd_1_1not__found__exception.html create mode 100644 master/classseastar_1_1httpd_1_1not__found__exception.png create mode 100644 master/classseastar_1_1httpd_1_1param__matcher-members.html create mode 100644 master/classseastar_1_1httpd_1_1param__matcher.html create mode 100644 master/classseastar_1_1httpd_1_1param__matcher.png create mode 100644 master/classseastar_1_1httpd_1_1parameters-members.html create mode 100644 master/classseastar_1_1httpd_1_1parameters.html create mode 100644 master/classseastar_1_1httpd_1_1redirect__exception-members.html create mode 100644 master/classseastar_1_1httpd_1_1redirect__exception.html create mode 100644 master/classseastar_1_1httpd_1_1redirect__exception.png create mode 100644 master/classseastar_1_1httpd_1_1routes-members.html create mode 100644 master/classseastar_1_1httpd_1_1routes.html create mode 100644 master/classseastar_1_1httpd_1_1rule__registration-members.html create mode 100644 master/classseastar_1_1httpd_1_1rule__registration.html create mode 100644 master/classseastar_1_1httpd_1_1server__error__exception-members.html create mode 100644 master/classseastar_1_1httpd_1_1server__error__exception.html create mode 100644 master/classseastar_1_1httpd_1_1server__error__exception.png create mode 100644 master/classseastar_1_1httpd_1_1str__matcher-members.html create mode 100644 master/classseastar_1_1httpd_1_1str__matcher.html create mode 100644 master/classseastar_1_1httpd_1_1str__matcher.png create mode 100644 master/classseastar_1_1httpd_1_1unexpected__status__error-members.html create mode 100644 master/classseastar_1_1httpd_1_1unexpected__status__error.html create mode 100644 master/classseastar_1_1httpd_1_1unexpected__status__error.png create mode 100644 master/classseastar_1_1httpd_1_1url-members.html create mode 100644 master/classseastar_1_1httpd_1_1url.html create mode 100644 master/classseastar_1_1inheriting__concrete__execution__stage-members.html create mode 100644 master/classseastar_1_1inheriting__concrete__execution__stage.html create mode 100644 master/classseastar_1_1inheriting__concrete__execution__stage.png create mode 100644 master/classseastar_1_1inheriting__execution__stage-members.html create mode 100644 master/classseastar_1_1inheriting__execution__stage.html create mode 100644 master/classseastar_1_1inheriting__execution__stage.png create mode 100644 master/classseastar_1_1input__stream-members.html create mode 100644 master/classseastar_1_1input__stream.html create mode 100644 master/classseastar_1_1io__completion-members.html create mode 100644 master/classseastar_1_1io__completion.html create mode 100644 master/classseastar_1_1io__completion.png create mode 100644 master/classseastar_1_1io__group-members.html create mode 100644 master/classseastar_1_1io__group.html create mode 100644 master/classseastar_1_1io__intent-members.html create mode 100644 master/classseastar_1_1io__intent.html create mode 100644 master/classseastar_1_1io__queue-members.html create mode 100644 master/classseastar_1_1io__queue.html create mode 100644 master/classseastar_1_1json_1_1formatter-members.html create mode 100644 master/classseastar_1_1json_1_1formatter.html create mode 100644 master/classseastar_1_1json_1_1json__base__element-members.html create mode 100644 master/classseastar_1_1json_1_1json__base__element.html create mode 100644 master/classseastar_1_1json_1_1json__base__element.png create mode 100644 master/classseastar_1_1json_1_1json__element-members.html create mode 100644 master/classseastar_1_1json_1_1json__element.html create mode 100644 master/classseastar_1_1json_1_1json__element.png create mode 100644 master/classseastar_1_1json_1_1json__list-members.html create mode 100644 master/classseastar_1_1json_1_1json__list.html create mode 100644 master/classseastar_1_1json_1_1json__list.png create mode 100644 master/classseastar_1_1json_1_1jsonable-members.html create mode 100644 master/classseastar_1_1json_1_1jsonable.html create mode 100644 master/classseastar_1_1json_1_1jsonable.png create mode 100644 master/classseastar_1_1kernel__completion-members.html create mode 100644 master/classseastar_1_1kernel__completion.html create mode 100644 master/classseastar_1_1kernel__completion.png create mode 100644 master/classseastar_1_1lambda__task-members.html create mode 100644 master/classseastar_1_1lambda__task.html create mode 100644 master/classseastar_1_1lambda__task.png create mode 100644 master/classseastar_1_1layered__file__impl-members.html create mode 100644 master/classseastar_1_1layered__file__impl.html create mode 100644 master/classseastar_1_1layered__file__impl.png create mode 100644 master/classseastar_1_1lazy__eval-members.html create mode 100644 master/classseastar_1_1lazy__eval.html create mode 100644 master/classseastar_1_1lowres__clock-members.html create mode 100644 master/classseastar_1_1lowres__clock.html create mode 100644 master/classseastar_1_1lowres__system__clock-members.html create mode 100644 master/classseastar_1_1lowres__system__clock.html create mode 100644 master/classseastar_1_1lw__shared__ptr-members.html create mode 100644 master/classseastar_1_1lw__shared__ptr.html create mode 100644 master/classseastar_1_1lw__shared__ptr_1_1disposer-members.html create mode 100644 master/classseastar_1_1lw__shared__ptr_1_1disposer.html create mode 100644 master/classseastar_1_1manual__clock-members.html create mode 100644 master/classseastar_1_1manual__clock.html create mode 100644 master/classseastar_1_1measuring__output__stream-members.html create mode 100644 master/classseastar_1_1measuring__output__stream.html create mode 100644 master/classseastar_1_1memory_1_1alloc__failure__injector-members.html create mode 100644 master/classseastar_1_1memory_1_1alloc__failure__injector.html create mode 100644 master/classseastar_1_1memory_1_1scoped__heap__profiling-members.html create mode 100644 master/classseastar_1_1memory_1_1scoped__heap__profiling.html create mode 100644 master/classseastar_1_1memory_1_1scoped__large__allocation__warning__disable-members.html create mode 100644 master/classseastar_1_1memory_1_1scoped__large__allocation__warning__disable.html create mode 100644 master/classseastar_1_1memory_1_1scoped__large__allocation__warning__threshold-members.html create mode 100644 master/classseastar_1_1memory_1_1scoped__large__allocation__warning__threshold.html create mode 100644 master/classseastar_1_1memory_1_1statistics-members.html create mode 100644 master/classseastar_1_1memory_1_1statistics.html create mode 100644 master/classseastar_1_1memory__input__stream-members.html create mode 100644 master/classseastar_1_1memory__input__stream.html create mode 100644 master/classseastar_1_1memory__output__stream-members.html create mode 100644 master/classseastar_1_1memory__output__stream.html create mode 100644 master/classseastar_1_1metrics_1_1description-members.html create mode 100644 master/classseastar_1_1metrics_1_1description.html create mode 100644 master/classseastar_1_1metrics_1_1double__registration-members.html create mode 100644 master/classseastar_1_1metrics_1_1double__registration.html create mode 100644 master/classseastar_1_1metrics_1_1double__registration.png create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1impl-members.html create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1impl.html create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1metric__family-members.html create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1metric__family.html create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1metric__groups__def-members.html create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1metric__groups__def.html create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1metric__groups__def.png create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1metric__groups__impl-members.html create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1metric__groups__impl.html create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1metric__groups__impl.png create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1metric__id-members.html create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1metric__id.html create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1metric__value-members.html create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1metric__value.html create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1registered__metric-members.html create mode 100644 master/classseastar_1_1metrics_1_1impl_1_1registered__metric.html create mode 100644 master/classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram-members.html create mode 100644 master/classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html create mode 100644 master/classseastar_1_1metrics_1_1internal_1_1time__estimated__histogram-members.html create mode 100644 master/classseastar_1_1metrics_1_1internal_1_1time__estimated__histogram.html create mode 100644 master/classseastar_1_1metrics_1_1internal_1_1time__estimated__histogram.png create mode 100644 master/classseastar_1_1metrics_1_1label-members.html create mode 100644 master/classseastar_1_1metrics_1_1label.html create mode 100644 master/classseastar_1_1metrics_1_1label__instance-members.html create mode 100644 master/classseastar_1_1metrics_1_1label__instance.html create mode 100644 master/classseastar_1_1metrics_1_1metric__definition-members.html create mode 100644 master/classseastar_1_1metrics_1_1metric__definition.html create mode 100644 master/classseastar_1_1metrics_1_1metric__group-members.html create mode 100644 master/classseastar_1_1metrics_1_1metric__group.html create mode 100644 master/classseastar_1_1metrics_1_1metric__group.png create mode 100644 master/classseastar_1_1metrics_1_1metric__group__definition-members.html create mode 100644 master/classseastar_1_1metrics_1_1metric__group__definition.html create mode 100644 master/classseastar_1_1metrics_1_1metric__groups-members.html create mode 100644 master/classseastar_1_1metrics_1_1metric__groups.html create mode 100644 master/classseastar_1_1metrics_1_1metric__groups.png create mode 100644 master/classseastar_1_1metrics_1_1relabel__config__regex-members.html create mode 100644 master/classseastar_1_1metrics_1_1relabel__config__regex.html create mode 100644 master/classseastar_1_1named__semaphore__aborted-members.html create mode 100644 master/classseastar_1_1named__semaphore__aborted.html create mode 100644 master/classseastar_1_1named__semaphore__aborted.png create mode 100644 master/classseastar_1_1named__semaphore__timed__out-members.html create mode 100644 master/classseastar_1_1named__semaphore__timed__out.html create mode 100644 master/classseastar_1_1named__semaphore__timed__out.png create mode 100644 master/classseastar_1_1net_1_1arp-members.html create mode 100644 master/classseastar_1_1net_1_1arp.html create mode 100644 master/classseastar_1_1net_1_1arp__error-members.html create mode 100644 master/classseastar_1_1net_1_1arp__error.html create mode 100644 master/classseastar_1_1net_1_1arp__error.png create mode 100644 master/classseastar_1_1net_1_1arp__for-members.html create mode 100644 master/classseastar_1_1net_1_1arp__for.html create mode 100644 master/classseastar_1_1net_1_1arp__for.png create mode 100644 master/classseastar_1_1net_1_1arp__for__protocol-members.html create mode 100644 master/classseastar_1_1net_1_1arp__for__protocol.html create mode 100644 master/classseastar_1_1net_1_1arp__for__protocol.png create mode 100644 master/classseastar_1_1net_1_1arp__queue__full__error-members.html create mode 100644 master/classseastar_1_1net_1_1arp__queue__full__error.html create mode 100644 master/classseastar_1_1net_1_1arp__queue__full__error.png create mode 100644 master/classseastar_1_1net_1_1arp__timeout__error-members.html create mode 100644 master/classseastar_1_1net_1_1arp__timeout__error.html create mode 100644 master/classseastar_1_1net_1_1arp__timeout__error.png create mode 100644 master/classseastar_1_1net_1_1config__exception-members.html create mode 100644 master/classseastar_1_1net_1_1config__exception.html create mode 100644 master/classseastar_1_1net_1_1config__exception.png create mode 100644 master/classseastar_1_1net_1_1conntrack-members.html create mode 100644 master/classseastar_1_1net_1_1conntrack.html create mode 100644 master/classseastar_1_1net_1_1conntrack_1_1handle-members.html create mode 100644 master/classseastar_1_1net_1_1conntrack_1_1handle.html create mode 100644 master/classseastar_1_1net_1_1datagram-members.html create mode 100644 master/classseastar_1_1net_1_1datagram.html create mode 100644 master/classseastar_1_1net_1_1datagram__channel-members.html create mode 100644 master/classseastar_1_1net_1_1datagram__channel.html create mode 100644 master/classseastar_1_1net_1_1datagram__impl-members.html create mode 100644 master/classseastar_1_1net_1_1datagram__impl.html create mode 100644 master/classseastar_1_1net_1_1device-members.html create mode 100644 master/classseastar_1_1net_1_1device.html create mode 100644 master/classseastar_1_1net_1_1dhcp-members.html create mode 100644 master/classseastar_1_1net_1_1dhcp.html create mode 100644 master/classseastar_1_1net_1_1dns__resolver-members.html create mode 100644 master/classseastar_1_1net_1_1dns__resolver.html create mode 100644 master/classseastar_1_1net_1_1forward__hash-members.html create mode 100644 master/classseastar_1_1net_1_1forward__hash.html create mode 100644 master/classseastar_1_1net_1_1icmp-members.html create mode 100644 master/classseastar_1_1net_1_1icmp.html create mode 100644 master/classseastar_1_1net_1_1inet__address-members.html create mode 100644 master/classseastar_1_1net_1_1inet__address.html create mode 100644 master/classseastar_1_1net_1_1interface-members.html create mode 100644 master/classseastar_1_1net_1_1interface.html create mode 100644 master/classseastar_1_1net_1_1ip__protocol-members.html create mode 100644 master/classseastar_1_1net_1_1ip__protocol.html create mode 100644 master/classseastar_1_1net_1_1ip__protocol.png create mode 100644 master/classseastar_1_1net_1_1ipv4-members.html create mode 100644 master/classseastar_1_1net_1_1ipv4.html create mode 100644 master/classseastar_1_1net_1_1ipv4__icmp-members.html create mode 100644 master/classseastar_1_1net_1_1ipv4__icmp.html create mode 100644 master/classseastar_1_1net_1_1ipv4__icmp.png create mode 100644 master/classseastar_1_1net_1_1ipv4__l4-members.html create mode 100644 master/classseastar_1_1net_1_1ipv4__l4.html create mode 100644 master/classseastar_1_1net_1_1ipv4__tcp-members.html create mode 100644 master/classseastar_1_1net_1_1ipv4__tcp.html create mode 100644 master/classseastar_1_1net_1_1ipv4__tcp.png create mode 100644 master/classseastar_1_1net_1_1ipv4__udp-members.html create mode 100644 master/classseastar_1_1net_1_1ipv4__udp.html create mode 100644 master/classseastar_1_1net_1_1ipv4__udp.png create mode 100644 master/classseastar_1_1net_1_1ipv4__udp_1_1registration-members.html create mode 100644 master/classseastar_1_1net_1_1ipv4__udp_1_1registration.html create mode 100644 master/classseastar_1_1net_1_1l3__protocol-members.html create mode 100644 master/classseastar_1_1net_1_1l3__protocol.html create mode 100644 master/classseastar_1_1net_1_1packet-members.html create mode 100644 master/classseastar_1_1net_1_1packet.html create mode 100644 master/classseastar_1_1net_1_1packet__data__source-members.html create mode 100644 master/classseastar_1_1net_1_1packet__data__source.html create mode 100644 master/classseastar_1_1net_1_1packet__data__source.png create mode 100644 master/classseastar_1_1net_1_1packet__merger-members.html create mode 100644 master/classseastar_1_1net_1_1packet__merger.html create mode 100644 master/classseastar_1_1net_1_1posix__ap__network__stack-members.html create mode 100644 master/classseastar_1_1net_1_1posix__ap__network__stack.html create mode 100644 master/classseastar_1_1net_1_1posix__ap__network__stack.png create mode 100644 master/classseastar_1_1net_1_1posix__ap__server__socket__impl-members.html create mode 100644 master/classseastar_1_1net_1_1posix__ap__server__socket__impl.html create mode 100644 master/classseastar_1_1net_1_1posix__ap__server__socket__impl.png create mode 100644 master/classseastar_1_1net_1_1posix__data__sink__impl-members.html create mode 100644 master/classseastar_1_1net_1_1posix__data__sink__impl.html create mode 100644 master/classseastar_1_1net_1_1posix__data__sink__impl.png create mode 100644 master/classseastar_1_1net_1_1posix__data__source__impl-members.html create mode 100644 master/classseastar_1_1net_1_1posix__data__source__impl.html create mode 100644 master/classseastar_1_1net_1_1posix__data__source__impl.png create mode 100644 master/classseastar_1_1net_1_1posix__network__stack-members.html create mode 100644 master/classseastar_1_1net_1_1posix__network__stack.html create mode 100644 master/classseastar_1_1net_1_1posix__network__stack.png create mode 100644 master/classseastar_1_1net_1_1posix__reuseport__server__socket__impl-members.html create mode 100644 master/classseastar_1_1net_1_1posix__reuseport__server__socket__impl.html create mode 100644 master/classseastar_1_1net_1_1posix__reuseport__server__socket__impl.png create mode 100644 master/classseastar_1_1net_1_1posix__server__socket__impl-members.html create mode 100644 master/classseastar_1_1net_1_1posix__server__socket__impl.html create mode 100644 master/classseastar_1_1net_1_1posix__server__socket__impl.png create mode 100644 master/classseastar_1_1net_1_1qp-members.html create mode 100644 master/classseastar_1_1net_1_1qp.html create mode 100644 master/classseastar_1_1net_1_1tcp-members.html create mode 100644 master/classseastar_1_1net_1_1tcp.html create mode 100644 master/classseastar_1_1net_1_1tcp_1_1connection-members.html create mode 100644 master/classseastar_1_1net_1_1tcp_1_1connection.html create mode 100644 master/classseastar_1_1net_1_1tcp_1_1listener-members.html create mode 100644 master/classseastar_1_1net_1_1tcp_1_1listener.html create mode 100644 master/classseastar_1_1net_1_1unknown__host.html create mode 100644 master/classseastar_1_1net_1_1unknown__host.png create mode 100644 master/classseastar_1_1network__interface-members.html create mode 100644 master/classseastar_1_1network__interface.html create mode 100644 master/classseastar_1_1network__stack-members.html create mode 100644 master/classseastar_1_1network__stack.html create mode 100644 master/classseastar_1_1network__stack.png create mode 100644 master/classseastar_1_1no__sharded__instance__exception-members.html create mode 100644 master/classseastar_1_1no__sharded__instance__exception.html create mode 100644 master/classseastar_1_1no__sharded__instance__exception.png create mode 100644 master/classseastar_1_1noncopyable__function_3_01Ret_07Args_8_8_8_08_01noexcept_07Noexcept_08_4-members.html create mode 100644 master/classseastar_1_1noncopyable__function_3_01Ret_07Args_8_8_8_08_01noexcept_07Noexcept_08_4.html create mode 100644 master/classseastar_1_1noncopyable__function_3_01Ret_07Args_8_8_8_08_01noexcept_07Noexcept_08_4.png create mode 100644 master/classseastar_1_1optimized__optional-members.html create mode 100644 master/classseastar_1_1optimized__optional.html create mode 100644 master/classseastar_1_1output__stream-members.html create mode 100644 master/classseastar_1_1output__stream.html create mode 100644 master/classseastar_1_1peering__sharded__service-members.html create mode 100644 master/classseastar_1_1peering__sharded__service.html create mode 100644 master/classseastar_1_1pipe-members.html create mode 100644 master/classseastar_1_1pipe.html create mode 100644 master/classseastar_1_1pipe__reader-members.html create mode 100644 master/classseastar_1_1pipe__reader.html create mode 100644 master/classseastar_1_1pipe__writer-members.html create mode 100644 master/classseastar_1_1pipe__writer.html create mode 100644 master/classseastar_1_1pollable__fd-members.html create mode 100644 master/classseastar_1_1pollable__fd.html create mode 100644 master/classseastar_1_1pollable__fd__state-members.html create mode 100644 master/classseastar_1_1pollable__fd__state.html create mode 100644 master/classseastar_1_1posix__thread-members.html create mode 100644 master/classseastar_1_1posix__thread.html create mode 100644 master/classseastar_1_1posix__thread_1_1attr-members.html create mode 100644 master/classseastar_1_1posix__thread_1_1attr.html create mode 100644 master/classseastar_1_1program__options_1_1basic__value-members.html create mode 100644 master/classseastar_1_1program__options_1_1basic__value.html create mode 100644 master/classseastar_1_1program__options_1_1basic__value.png create mode 100644 master/classseastar_1_1program__options_1_1option__group-members.html create mode 100644 master/classseastar_1_1program__options_1_1option__group.html create mode 100644 master/classseastar_1_1program__options_1_1option__group.png create mode 100644 master/classseastar_1_1program__options_1_1options__descriptor-members.html create mode 100644 master/classseastar_1_1program__options_1_1options__descriptor.html create mode 100644 master/classseastar_1_1program__options_1_1options__mutator-members.html create mode 100644 master/classseastar_1_1program__options_1_1options__mutator.html create mode 100644 master/classseastar_1_1program__options_1_1selection__value-members.html create mode 100644 master/classseastar_1_1program__options_1_1selection__value.html create mode 100644 master/classseastar_1_1program__options_1_1selection__value.png create mode 100644 master/classseastar_1_1program__options_1_1string__map-members.html create mode 100644 master/classseastar_1_1program__options_1_1string__map.html create mode 100644 master/classseastar_1_1program__options_1_1string__map.png create mode 100644 master/classseastar_1_1program__options_1_1value-members.html create mode 100644 master/classseastar_1_1program__options_1_1value.html create mode 100644 master/classseastar_1_1program__options_1_1value.png create mode 100644 master/classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4-members.html create mode 100644 master/classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4.html create mode 100644 master/classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4.png create mode 100644 master/classseastar_1_1promise-members.html create mode 100644 master/classseastar_1_1promise.html create mode 100644 master/classseastar_1_1promise.png create mode 100644 master/classseastar_1_1queue-members.html create mode 100644 master/classseastar_1_1queue.html create mode 100644 master/classseastar_1_1ragel__parser__base-members.html create mode 100644 master/classseastar_1_1ragel__parser__base.html create mode 100644 master/classseastar_1_1reactor-members.html create mode 100644 master/classseastar_1_1reactor.html create mode 100644 master/classseastar_1_1reactor_1_1test-members.html create mode 100644 master/classseastar_1_1reactor_1_1test.html create mode 100644 master/classseastar_1_1readable__eventfd-members.html create mode 100644 master/classseastar_1_1readable__eventfd.html create mode 100644 master/classseastar_1_1reference__wrapper-members.html create mode 100644 master/classseastar_1_1reference__wrapper.html create mode 100644 master/classseastar_1_1rpc_1_1canceled__error-members.html create mode 100644 master/classseastar_1_1rpc_1_1canceled__error.html create mode 100644 master/classseastar_1_1rpc_1_1canceled__error.png create mode 100644 master/classseastar_1_1rpc_1_1client-members.html create mode 100644 master/classseastar_1_1rpc_1_1client.html create mode 100644 master/classseastar_1_1rpc_1_1client.png create mode 100644 master/classseastar_1_1rpc_1_1client__function__type-members.html create mode 100644 master/classseastar_1_1rpc_1_1client__function__type.html create mode 100644 master/classseastar_1_1rpc_1_1closed__error-members.html create mode 100644 master/classseastar_1_1rpc_1_1closed__error.html create mode 100644 master/classseastar_1_1rpc_1_1closed__error.png create mode 100644 master/classseastar_1_1rpc_1_1compressor-members.html create mode 100644 master/classseastar_1_1rpc_1_1compressor.html create mode 100644 master/classseastar_1_1rpc_1_1compressor.png create mode 100644 master/classseastar_1_1rpc_1_1compressor_1_1factory-members.html create mode 100644 master/classseastar_1_1rpc_1_1compressor_1_1factory.html create mode 100644 master/classseastar_1_1rpc_1_1compressor_1_1factory.png create mode 100644 master/classseastar_1_1rpc_1_1connection-members.html create mode 100644 master/classseastar_1_1rpc_1_1connection.html create mode 100644 master/classseastar_1_1rpc_1_1connection.png create mode 100644 master/classseastar_1_1rpc_1_1connection__id-members.html create mode 100644 master/classseastar_1_1rpc_1_1connection__id.html create mode 100644 master/classseastar_1_1rpc_1_1error-members.html create mode 100644 master/classseastar_1_1rpc_1_1error.html create mode 100644 master/classseastar_1_1rpc_1_1error.png create mode 100644 master/classseastar_1_1rpc_1_1logger-members.html create mode 100644 master/classseastar_1_1rpc_1_1logger.html create mode 100644 master/classseastar_1_1rpc_1_1lz4__compressor-members.html create mode 100644 master/classseastar_1_1rpc_1_1lz4__compressor.html create mode 100644 master/classseastar_1_1rpc_1_1lz4__compressor.png create mode 100644 master/classseastar_1_1rpc_1_1lz4__compressor_1_1factory-members.html create mode 100644 master/classseastar_1_1rpc_1_1lz4__compressor_1_1factory.html create mode 100644 master/classseastar_1_1rpc_1_1lz4__compressor_1_1factory.png create mode 100644 master/classseastar_1_1rpc_1_1lz4__fragmented__compressor-members.html create mode 100644 master/classseastar_1_1rpc_1_1lz4__fragmented__compressor.html create mode 100644 master/classseastar_1_1rpc_1_1lz4__fragmented__compressor.png create mode 100644 master/classseastar_1_1rpc_1_1lz4__fragmented__compressor_1_1factory-members.html create mode 100644 master/classseastar_1_1rpc_1_1lz4__fragmented__compressor_1_1factory.html create mode 100644 master/classseastar_1_1rpc_1_1lz4__fragmented__compressor_1_1factory.png create mode 100644 master/classseastar_1_1rpc_1_1multi__algo__compressor__factory-members.html create mode 100644 master/classseastar_1_1rpc_1_1multi__algo__compressor__factory.html create mode 100644 master/classseastar_1_1rpc_1_1multi__algo__compressor__factory.png create mode 100644 master/classseastar_1_1rpc_1_1opt__time__point-members.html create mode 100644 master/classseastar_1_1rpc_1_1opt__time__point.html create mode 100644 master/classseastar_1_1rpc_1_1opt__time__point.png create mode 100644 master/classseastar_1_1rpc_1_1optional.html create mode 100644 master/classseastar_1_1rpc_1_1optional.png create mode 100644 master/classseastar_1_1rpc_1_1protocol-members.html create mode 100644 master/classseastar_1_1rpc_1_1protocol.html create mode 100644 master/classseastar_1_1rpc_1_1protocol.png create mode 100644 master/classseastar_1_1rpc_1_1protocol_1_1client-members.html create mode 100644 master/classseastar_1_1rpc_1_1protocol_1_1client.html create mode 100644 master/classseastar_1_1rpc_1_1protocol_1_1client.png create mode 100644 master/classseastar_1_1rpc_1_1protocol_1_1server-members.html create mode 100644 master/classseastar_1_1rpc_1_1protocol_1_1server.html create mode 100644 master/classseastar_1_1rpc_1_1protocol_1_1server.png create mode 100644 master/classseastar_1_1rpc_1_1protocol__base-members.html create mode 100644 master/classseastar_1_1rpc_1_1protocol__base.html create mode 100644 master/classseastar_1_1rpc_1_1protocol__base.png create mode 100644 master/classseastar_1_1rpc_1_1remote__verb__error-members.html create mode 100644 master/classseastar_1_1rpc_1_1remote__verb__error.html create mode 100644 master/classseastar_1_1rpc_1_1remote__verb__error.png create mode 100644 master/classseastar_1_1rpc_1_1rpc__protocol__error-members.html create mode 100644 master/classseastar_1_1rpc_1_1rpc__protocol__error.html create mode 100644 master/classseastar_1_1rpc_1_1rpc__protocol__error.png create mode 100644 master/classseastar_1_1rpc_1_1server-members.html create mode 100644 master/classseastar_1_1rpc_1_1server.html create mode 100644 master/classseastar_1_1rpc_1_1server.png create mode 100644 master/classseastar_1_1rpc_1_1server_1_1connection-members.html create mode 100644 master/classseastar_1_1rpc_1_1server_1_1connection.html create mode 100644 master/classseastar_1_1rpc_1_1server_1_1connection.png create mode 100644 master/classseastar_1_1rpc_1_1sink-members.html create mode 100644 master/classseastar_1_1rpc_1_1sink.html create mode 100644 master/classseastar_1_1rpc_1_1sink_1_1impl-members.html create mode 100644 master/classseastar_1_1rpc_1_1sink_1_1impl.html create mode 100644 master/classseastar_1_1rpc_1_1sink_1_1impl.png create mode 100644 master/classseastar_1_1rpc_1_1sink__impl-members.html create mode 100644 master/classseastar_1_1rpc_1_1sink__impl.html create mode 100644 master/classseastar_1_1rpc_1_1sink__impl.png create mode 100644 master/classseastar_1_1rpc_1_1source-members.html create mode 100644 master/classseastar_1_1rpc_1_1source.html create mode 100644 master/classseastar_1_1rpc_1_1source_1_1impl-members.html create mode 100644 master/classseastar_1_1rpc_1_1source_1_1impl.html create mode 100644 master/classseastar_1_1rpc_1_1source_1_1impl.png create mode 100644 master/classseastar_1_1rpc_1_1source__impl-members.html create mode 100644 master/classseastar_1_1rpc_1_1source__impl.html create mode 100644 master/classseastar_1_1rpc_1_1source__impl.png create mode 100644 master/classseastar_1_1rpc_1_1stream__closed-members.html create mode 100644 master/classseastar_1_1rpc_1_1stream__closed.html create mode 100644 master/classseastar_1_1rpc_1_1stream__closed.png create mode 100644 master/classseastar_1_1rpc_1_1streaming__domain__type-members.html create mode 100644 master/classseastar_1_1rpc_1_1streaming__domain__type.html create mode 100644 master/classseastar_1_1rpc_1_1timeout__error-members.html create mode 100644 master/classseastar_1_1rpc_1_1timeout__error.html create mode 100644 master/classseastar_1_1rpc_1_1timeout__error.png create mode 100644 master/classseastar_1_1rpc_1_1tuple-members.html create mode 100644 master/classseastar_1_1rpc_1_1tuple.html create mode 100644 master/classseastar_1_1rpc_1_1tuple.png create mode 100644 master/classseastar_1_1rpc_1_1unknown__exception__error-members.html create mode 100644 master/classseastar_1_1rpc_1_1unknown__exception__error.html create mode 100644 master/classseastar_1_1rpc_1_1unknown__exception__error.png create mode 100644 master/classseastar_1_1rpc_1_1unknown__verb__error-members.html create mode 100644 master/classseastar_1_1rpc_1_1unknown__verb__error.html create mode 100644 master/classseastar_1_1rpc_1_1unknown__verb__error.png create mode 100644 master/classseastar_1_1scattered__message-members.html create mode 100644 master/classseastar_1_1scattered__message.html create mode 100644 master/classseastar_1_1scheduling__group-members.html create mode 100644 master/classseastar_1_1scheduling__group.html create mode 100644 master/classseastar_1_1scheduling__group__key-members.html create mode 100644 master/classseastar_1_1scheduling__group__key.html create mode 100644 master/classseastar_1_1scollectd_1_1percpu__plugin__instance__metrics-members.html create mode 100644 master/classseastar_1_1scollectd_1_1percpu__plugin__instance__metrics.html create mode 100644 master/classseastar_1_1scollectd_1_1percpu__plugin__instance__metrics.png create mode 100644 master/classseastar_1_1scollectd_1_1plugin__instance__metrics-members.html create mode 100644 master/classseastar_1_1scollectd_1_1plugin__instance__metrics.html create mode 100644 master/classseastar_1_1scollectd_1_1plugin__instance__metrics.png create mode 100644 master/classseastar_1_1scollectd_1_1registrations-members.html create mode 100644 master/classseastar_1_1scollectd_1_1registrations.html create mode 100644 master/classseastar_1_1scollectd_1_1registrations.png create mode 100644 master/classseastar_1_1scollectd_1_1type__instance__id-members.html create mode 100644 master/classseastar_1_1scollectd_1_1type__instance__id.html create mode 100644 master/classseastar_1_1scollectd_1_1value-members.html create mode 100644 master/classseastar_1_1scollectd_1_1value.html create mode 100644 master/classseastar_1_1scollectd_1_1value.png create mode 100644 master/classseastar_1_1scollectd_1_1value_3_01typed_3_01T_01_4_01_4-members.html create mode 100644 master/classseastar_1_1scollectd_1_1value_3_01typed_3_01T_01_4_01_4.html create mode 100644 master/classseastar_1_1scollectd_1_1value_3_01typed_3_01T_01_4_01_4.png create mode 100644 master/classseastar_1_1scollectd_1_1value__list-members.html create mode 100644 master/classseastar_1_1scollectd_1_1value__list.html create mode 100644 master/classseastar_1_1scollectd_1_1value__list.png create mode 100644 master/classseastar_1_1scollectd_1_1values__impl-members.html create mode 100644 master/classseastar_1_1scollectd_1_1values__impl.html create mode 100644 master/classseastar_1_1scollectd_1_1values__impl.png create mode 100644 master/classseastar_1_1semaphore__aborted-members.html create mode 100644 master/classseastar_1_1semaphore__aborted.html create mode 100644 master/classseastar_1_1semaphore__aborted.png create mode 100644 master/classseastar_1_1semaphore__timed__out-members.html create mode 100644 master/classseastar_1_1semaphore__timed__out.html create mode 100644 master/classseastar_1_1semaphore__timed__out.png create mode 100644 master/classseastar_1_1semaphore__units-members.html create mode 100644 master/classseastar_1_1semaphore__units.html create mode 100644 master/classseastar_1_1server__socket-members.html create mode 100644 master/classseastar_1_1server__socket.html create mode 100644 master/classseastar_1_1sharded-members.html create mode 100644 master/classseastar_1_1sharded.html create mode 100644 master/classseastar_1_1sharded__parameter-members.html create mode 100644 master/classseastar_1_1sharded__parameter.html create mode 100644 master/classseastar_1_1shared__future-members.html create mode 100644 master/classseastar_1_1shared__future.html create mode 100644 master/classseastar_1_1shared__mutex-members.html create mode 100644 master/classseastar_1_1shared__mutex.html create mode 100644 master/classseastar_1_1shared__promise-members.html create mode 100644 master/classseastar_1_1shared__promise.html create mode 100644 master/classseastar_1_1shared__ptr-members.html create mode 100644 master/classseastar_1_1shared__ptr.html create mode 100644 master/classseastar_1_1simple__backtrace-members.html create mode 100644 master/classseastar_1_1simple__backtrace.html create mode 100644 master/classseastar_1_1simple__memory__input__stream-members.html create mode 100644 master/classseastar_1_1simple__memory__input__stream.html create mode 100644 master/classseastar_1_1simple__memory__output__stream-members.html create mode 100644 master/classseastar_1_1simple__memory__output__stream.html create mode 100644 master/classseastar_1_1skip__bytes-members.html create mode 100644 master/classseastar_1_1skip__bytes.html create mode 100644 master/classseastar_1_1slab__allocator-members.html create mode 100644 master/classseastar_1_1slab__allocator.html create mode 100644 master/classseastar_1_1slab__class-members.html create mode 100644 master/classseastar_1_1slab__class.html create mode 100644 master/classseastar_1_1slab__item__base-members.html create mode 100644 master/classseastar_1_1slab__item__base.html create mode 100644 master/classseastar_1_1sleep__aborted-members.html create mode 100644 master/classseastar_1_1sleep__aborted.html create mode 100644 master/classseastar_1_1sleep__aborted.png create mode 100644 master/classseastar_1_1smp-members.html create mode 100644 master/classseastar_1_1smp.html create mode 100644 master/classseastar_1_1smp.png create mode 100644 master/classseastar_1_1smp__message__queue-members.html create mode 100644 master/classseastar_1_1smp__message__queue.html create mode 100644 master/classseastar_1_1smp__service__group-members.html create mode 100644 master/classseastar_1_1smp__service__group.html create mode 100644 master/classseastar_1_1socket-members.html create mode 100644 master/classseastar_1_1socket.html create mode 100644 master/classseastar_1_1socket__address-members.html create mode 100644 master/classseastar_1_1socket__address.html create mode 100644 master/classseastar_1_1sstring__builder-members.html create mode 100644 master/classseastar_1_1sstring__builder.html create mode 100644 master/classseastar_1_1sstring__builder_1_1guard-members.html create mode 100644 master/classseastar_1_1sstring__builder_1_1guard.html create mode 100644 master/classseastar_1_1stop__consuming-members.html create mode 100644 master/classseastar_1_1stop__consuming.html create mode 100644 master/classseastar_1_1stream-members.html create mode 100644 master/classseastar_1_1stream.html create mode 100644 master/classseastar_1_1subscription-members.html create mode 100644 master/classseastar_1_1subscription.html create mode 100644 master/classseastar_1_1task-members.html create mode 100644 master/classseastar_1_1task.html create mode 100644 master/classseastar_1_1task.png create mode 100644 master/classseastar_1_1task__entry-members.html create mode 100644 master/classseastar_1_1task__entry.html create mode 100644 master/classseastar_1_1tasktrace-members.html create mode 100644 master/classseastar_1_1tasktrace.html create mode 100644 master/classseastar_1_1temporary__buffer-members.html create mode 100644 master/classseastar_1_1temporary__buffer.html create mode 100644 master/classseastar_1_1testing_1_1exchanger-members.html create mode 100644 master/classseastar_1_1testing_1_1exchanger.html create mode 100644 master/classseastar_1_1testing_1_1exchanger.png create mode 100644 master/classseastar_1_1testing_1_1exchanger__base-members.html create mode 100644 master/classseastar_1_1testing_1_1exchanger__base.html create mode 100644 master/classseastar_1_1testing_1_1exchanger__base.png create mode 100644 master/classseastar_1_1testing_1_1scoped__no__abort__on__internal__error-members.html create mode 100644 master/classseastar_1_1testing_1_1scoped__no__abort__on__internal__error.html create mode 100644 master/classseastar_1_1testing_1_1seastar__test-members.html create mode 100644 master/classseastar_1_1testing_1_1seastar__test.html create mode 100644 master/classseastar_1_1testing_1_1test__runner-members.html create mode 100644 master/classseastar_1_1testing_1_1test__runner.html create mode 100644 master/classseastar_1_1thread-members.html create mode 100644 master/classseastar_1_1thread.html create mode 100644 master/classseastar_1_1thread__cputime__clock-members.html create mode 100644 master/classseastar_1_1thread__cputime__clock.html create mode 100644 master/classseastar_1_1timed__out__error-members.html create mode 100644 master/classseastar_1_1timed__out__error.html create mode 100644 master/classseastar_1_1timed__out__error.png create mode 100644 master/classseastar_1_1timer-members.html create mode 100644 master/classseastar_1_1timer.html create mode 100644 master/classseastar_1_1timer__set-members.html create mode 100644 master/classseastar_1_1timer__set.html create mode 100644 master/classseastar_1_1tls_1_1abstract__credentials-members.html create mode 100644 master/classseastar_1_1tls_1_1abstract__credentials.html create mode 100644 master/classseastar_1_1tls_1_1abstract__credentials.png create mode 100644 master/classseastar_1_1tls_1_1certificate__credentials-members.html create mode 100644 master/classseastar_1_1tls_1_1certificate__credentials.html create mode 100644 master/classseastar_1_1tls_1_1certificate__credentials.png create mode 100644 master/classseastar_1_1tls_1_1credentials__builder-members.html create mode 100644 master/classseastar_1_1tls_1_1credentials__builder.html create mode 100644 master/classseastar_1_1tls_1_1credentials__builder.png create mode 100644 master/classseastar_1_1tls_1_1dh__params-members.html create mode 100644 master/classseastar_1_1tls_1_1dh__params.html create mode 100644 master/classseastar_1_1tls_1_1server__credentials-members.html create mode 100644 master/classseastar_1_1tls_1_1server__credentials.html create mode 100644 master/classseastar_1_1tls_1_1server__credentials.png create mode 100644 master/classseastar_1_1tls_1_1verification__error.html create mode 100644 master/classseastar_1_1tls_1_1verification__error.png create mode 100644 master/classseastar_1_1tls_1_1x509__cert-members.html create mode 100644 master/classseastar_1_1tls_1_1x509__cert.html create mode 100644 master/classseastar_1_1tmp__dir-members.html create mode 100644 master/classseastar_1_1tmp__dir.html create mode 100644 master/classseastar_1_1tmp__file-members.html create mode 100644 master/classseastar_1_1tmp__file.html create mode 100644 master/classseastar_1_1transform__iterator-members.html create mode 100644 master/classseastar_1_1transform__iterator.html create mode 100644 master/classseastar_1_1unread__overflow__exception-members.html create mode 100644 master/classseastar_1_1unread__overflow__exception.html create mode 100644 master/classseastar_1_1unread__overflow__exception.png create mode 100644 master/classseastar_1_1util_1_1spinlock-members.html create mode 100644 master/classseastar_1_1util_1_1spinlock.html create mode 100644 master/classseastar_1_1vector__data__sink-members.html create mode 100644 master/classseastar_1_1vector__data__sink.html create mode 100644 master/classseastar_1_1vector__data__sink.png create mode 100644 master/classseastar_1_1weak__ptr-members.html create mode 100644 master/classseastar_1_1weak__ptr.html create mode 100644 master/classseastar_1_1weakly__referencable-members.html create mode 100644 master/classseastar_1_1weakly__referencable.html create mode 100644 master/classseastar_1_1writeable__eventfd-members.html create mode 100644 master/classseastar_1_1writeable__eventfd.html create mode 100644 master/classstd_1_1coroutine__traits_3_01seastar_1_1future_3_01T_01_4_00_01Args_8_8_8_01_4.html create mode 100644 master/classstd_1_1coroutine__traits_3_01seastar_1_1future_3_01T_01_4_00_01Args_8_8_8_01_4.png create mode 100644 master/client_8hh_source.html create mode 100644 master/closeable_8hh.html create mode 100644 master/closeable_8hh_source.html create mode 100644 master/closeable_test_8cc-example.html create mode 100644 master/closed.png create mode 100644 master/common_8hh_source.html create mode 100644 master/concepts_8hh_source.html create mode 100644 master/condition-variable_8hh_source.html create mode 100644 master/config_8hh_source.html create mode 100644 master/const_8hh_source.html create mode 100644 master/content__source_8hh_source.html create mode 100644 master/conversions_8hh_source.html create mode 100644 master/core_2byteorder_8hh_source.html create mode 100644 master/core_2file_8hh_source.html create mode 100644 master/core_2on__internal__error_8hh_source.html create mode 100644 master/coroutine_2exception_8hh_source.html create mode 100644 master/coroutine_8hh_source.html create mode 100644 master/critical__alloc__section_8hh_source.html create mode 100644 master/defer_8hh_source.html create mode 100644 master/deleter_8hh_source.html create mode 100644 master/deprecated.html create mode 100644 master/dhcp_8hh_source.html create mode 100644 master/dir_0112a43248d46c258c74cc5fdb32b693.html create mode 100644 master/dir_164ee225dfef9a7fafe751cb228c28ba.html create mode 100644 master/dir_272c7f7d64135493a6307240ed26c98d.html create mode 100644 master/dir_36d1ac35f335d2859b08ab8b966fee25.html create mode 100644 master/dir_398ded82155629db4a0c5348c563f5d9.html create mode 100644 master/dir_3e0e6f106ec3db3973138aad205077f5.html create mode 100644 master/dir_78874ac4b611a4298933195a38c0f70b.html create mode 100644 master/dir_a703f5559ec24a637bac0bcd04b5b765.html create mode 100644 master/dir_aa653bcfa53187f42b1e3eea894166ac.html create mode 100644 master/dir_b3f3d534021e1f465e5a169b2f0511ee.html create mode 100644 master/dir_f47292a6f7dd7d478f3d6b4dba693acc.html create mode 100644 master/dir_faaebf1f4e541fd72bba26c3060bcb10.html create mode 100644 master/dir_feb40e1fc3cbd17defe0210055d0e0b7.html create mode 100644 master/distributed_8hh_source.html create mode 100644 master/dns_8hh_source.html create mode 100644 master/do__with_8hh_source.html create mode 100644 master/doc.png create mode 100644 master/doxygen.css create mode 100644 master/doxygen.svg create mode 100644 master/dpdk_8hh_source.html create mode 100644 master/dpdk__rte_8hh_source.html create mode 100644 master/dynsections.js create mode 100644 master/eclipse_8hh_source.html create mode 100644 master/entry__point_8hh_source.html create mode 100644 master/enum_8hh_source.html create mode 100644 master/estimated__histogram_8hh_source.html create mode 100644 master/ethernet_8hh_source.html create mode 100644 master/examples.html create mode 100644 master/exception__hacks_8hh_source.html create mode 100644 master/exceptions_8hh_source.html create mode 100644 master/exchanger_8hh_source.html create mode 100644 master/execution__stage_8hh_source.html create mode 100644 master/expiring__fifo_8hh_source.html create mode 100644 master/fair__queue_8hh_source.html create mode 100644 master/file-types_8hh_source.html create mode 100644 master/file__handler_8hh_source.html create mode 100644 master/file_demo_8cc-example.html create mode 100644 master/files.html create mode 100644 master/folderclosed.png create mode 100644 master/folderopen.png create mode 100644 master/formatter_8hh_source.html create mode 100644 master/fsnotify_8hh_source.html create mode 100644 master/fsqual_8hh_source.html create mode 100644 master/fstream_8hh.html create mode 100644 master/fstream_8hh_source.html create mode 100644 master/function__handlers_8hh_source.html create mode 100644 master/function__input__iterator_8hh_source.html create mode 100644 master/function__traits_8hh_source.html create mode 100644 master/functions.html create mode 100644 master/functions_a.html create mode 100644 master/functions_b.html create mode 100644 master/functions_c.html create mode 100644 master/functions_d.html create mode 100644 master/functions_e.html create mode 100644 master/functions_enum.html create mode 100644 master/functions_f.html create mode 100644 master/functions_func.html create mode 100644 master/functions_func_b.html create mode 100644 master/functions_func_c.html create mode 100644 master/functions_func_d.html create mode 100644 master/functions_func_e.html create mode 100644 master/functions_func_f.html create mode 100644 master/functions_func_g.html create mode 100644 master/functions_func_h.html create mode 100644 master/functions_func_i.html create mode 100644 master/functions_func_j.html create mode 100644 master/functions_func_k.html create mode 100644 master/functions_func_l.html create mode 100644 master/functions_func_m.html create mode 100644 master/functions_func_n.html create mode 100644 master/functions_func_o.html create mode 100644 master/functions_func_p.html create mode 100644 master/functions_func_q.html create mode 100644 master/functions_func_r.html create mode 100644 master/functions_func_s.html create mode 100644 master/functions_func_t.html create mode 100644 master/functions_func_u.html create mode 100644 master/functions_func_v.html create mode 100644 master/functions_func_w.html create mode 100644 master/functions_func_y.html create mode 100644 master/functions_func_~.html create mode 100644 master/functions_g.html create mode 100644 master/functions_h.html create mode 100644 master/functions_i.html create mode 100644 master/functions_j.html create mode 100644 master/functions_k.html create mode 100644 master/functions_l.html create mode 100644 master/functions_m.html create mode 100644 master/functions_n.html create mode 100644 master/functions_o.html create mode 100644 master/functions_p.html create mode 100644 master/functions_q.html create mode 100644 master/functions_r.html create mode 100644 master/functions_rela.html create mode 100644 master/functions_s.html create mode 100644 master/functions_t.html create mode 100644 master/functions_type.html create mode 100644 master/functions_u.html create mode 100644 master/functions_v.html create mode 100644 master/functions_vars.html create mode 100644 master/functions_w.html create mode 100644 master/functions_y.html create mode 100644 master/functions_~.html create mode 100644 master/future-util_8hh_source.html create mode 100644 master/future_8hh_source.html create mode 100644 master/gate_8hh_source.html create mode 100644 master/generator_8hh_source.html create mode 100644 master/group__add__prometheus__routes.html create mode 100644 master/group__execution-stages.html create mode 100644 master/group__fiber-module.html create mode 100644 master/group__fileio-module.html create mode 100644 master/group__fileio-util.html create mode 100644 master/group__fsnotifier.html create mode 100644 master/group__future-module-impl.html create mode 100644 master/group__future-module.html create mode 100644 master/group__future-util.html create mode 100644 master/group__interprocess-module.html create mode 100644 master/group__io-module.html create mode 100644 master/group__logging.html create mode 100644 master/group__memory-module.html create mode 100644 master/group__metrics.html create mode 100644 master/group__metrics__types.html create mode 100644 master/group__networking-module.html create mode 100644 master/group__posix-support.html create mode 100644 master/group__program-options.html create mode 100644 master/group__rpc.html create mode 100644 master/group__smp-module.html create mode 100644 master/group__thread-module.html create mode 100644 master/group__timers.html create mode 100644 master/group__utilities.html create mode 100644 master/group__websocket.html create mode 100644 master/handlers_8hh_source.html create mode 100644 master/hierarchy.html create mode 100644 master/http_2exception_8hh_source.html create mode 100644 master/http_2short__streams_8hh_source.html create mode 100644 master/httpd_8hh_source.html create mode 100644 master/idle__cpu__handler_8hh.html create mode 100644 master/idle__cpu__handler_8hh_source.html create mode 100644 master/index.html create mode 100644 master/indirect_8hh_source.html create mode 100644 master/inet__address_8hh_source.html create mode 100644 master/internal_2io__intent_8hh_source.html create mode 100644 master/io__desc_8hh_source.html create mode 100644 master/io__intent_8hh_source.html create mode 100644 master/io__priority__class_8hh_source.html create mode 100644 master/io__queue_8hh_source.html create mode 100644 master/io__request_8hh_source.html create mode 100644 master/io__sink_8hh_source.html create mode 100644 master/iostream-impl_8hh_source.html create mode 100644 master/iostream_8hh_source.html create mode 100644 master/iovec__utils_8hh_source.html create mode 100644 master/ip_8hh_source.html create mode 100644 master/ip__checksum_8hh_source.html create mode 100644 master/ipv4__address_8hh_source.html create mode 100644 master/ipv6__address_8hh_source.html create mode 100644 master/is__smart__ptr_8hh_source.html create mode 100644 master/jquery.js create mode 100644 master/json__elements_8hh_source.html create mode 100644 master/json__path_8hh_source.html create mode 100644 master/later_8hh_source.html create mode 100644 master/layered__file_8hh_source.html create mode 100644 master/lazy_8hh_source.html create mode 100644 master/linux-aio_8hh_source.html create mode 100644 master/linux__perf__event_8hh_source.html create mode 100644 master/log-cli_8hh_source.html create mode 100644 master/log-impl_8hh_source.html create mode 100644 master/log_8hh_source.html create mode 100644 master/loop_8hh_source.html create mode 100644 master/lowres__clock_8hh_source.html create mode 100644 master/lz4__compressor_8hh_source.html create mode 100644 master/lz4__fragmented__compressor_8hh_source.html create mode 100644 master/magic_8hh_source.html create mode 100644 master/make__task_8hh_source.html create mode 100644 master/manual__clock_8hh_source.html create mode 100644 master/map__reduce_8hh_source.html create mode 100644 master/matcher_8hh_source.html create mode 100644 master/matchrules_8hh_source.html create mode 100644 master/maybe__yield_8hh_source.html create mode 100644 master/md_compatibility.html create mode 100644 master/md_rpc.html create mode 100644 master/md_rpc_compression.html create mode 100644 master/md_rpc_streaming.html create mode 100644 master/memory_8hh_source.html create mode 100644 master/memory__diagnostics_8hh_source.html create mode 100644 master/menu.js create mode 100644 master/menudata.js create mode 100644 master/metrics_8hh.html create mode 100644 master/metrics_8hh_source.html create mode 100644 master/metrics__api_8hh.html create mode 100644 master/metrics__api_8hh_source.html create mode 100644 master/metrics__registration_8hh.html create mode 100644 master/metrics__registration_8hh_source.html create mode 100644 master/metrics__types_8hh_source.html create mode 100644 master/mime__types_8hh_source.html create mode 100644 master/modules.html create mode 100644 master/modules_8hh_source.html create mode 100644 master/multi__algo__compressor__factory_8hh_source.html create mode 100644 master/namespaceimpl.html create mode 100644 master/namespacemembers.html create mode 100644 master/namespacemembers_c.html create mode 100644 master/namespacemembers_d.html create mode 100644 master/namespacemembers_e.html create mode 100644 master/namespacemembers_enum.html create mode 100644 master/namespacemembers_f.html create mode 100644 master/namespacemembers_func.html create mode 100644 master/namespacemembers_g.html create mode 100644 master/namespacemembers_i.html create mode 100644 master/namespacemembers_k.html create mode 100644 master/namespacemembers_l.html create mode 100644 master/namespacemembers_m.html create mode 100644 master/namespacemembers_n.html create mode 100644 master/namespacemembers_o.html create mode 100644 master/namespacemembers_p.html create mode 100644 master/namespacemembers_r.html create mode 100644 master/namespacemembers_s.html create mode 100644 master/namespacemembers_t.html create mode 100644 master/namespacemembers_type.html create mode 100644 master/namespacemembers_v.html create mode 100644 master/namespacemembers_vars.html create mode 100644 master/namespacemembers_w.html create mode 100644 master/namespacemembers_y.html create mode 100644 master/namespaces.html create mode 100644 master/namespaceseastar.html create mode 100644 master/namespaceseastar_1_1alien.html create mode 100644 master/namespaceseastar_1_1log__cli.html create mode 100644 master/namespaceseastar_1_1memory.html create mode 100644 master/namespaceseastar_1_1metrics.html create mode 100644 master/namespaceseastar_1_1net.html create mode 100644 master/namespaceseastar_1_1scollectd.html create mode 100644 master/namespaceseastar_1_1tls.html create mode 100644 master/namespacestd.html create mode 100644 master/native-stack_8hh_source.html create mode 100644 master/nav_f.png create mode 100644 master/nav_g.png create mode 100644 master/nav_h.png create mode 100644 master/net_2byteorder_8hh_source.html create mode 100644 master/net_8hh_source.html create mode 100644 master/noncopyable__function_8hh_source.html create mode 100644 master/open.png create mode 100644 master/optimized__optional_8hh_source.html create mode 100644 master/packet-data-source_8hh_source.html create mode 100644 master/packet-util_8hh_source.html create mode 100644 master/packet_8hh_source.html create mode 100644 master/pages.html create mode 100644 master/parallel__for__each_8hh_source.html create mode 100644 master/perf__tests_8hh_source.html create mode 100644 master/pipe_8hh_source.html create mode 100644 master/poll_8hh_source.html create mode 100644 master/pollable__fd_8hh_source.html create mode 100644 master/polymorphic__temporary__buffer_8hh_source.html create mode 100644 master/posix-stack_8hh_source.html create mode 100644 master/posix_8hh.html create mode 100644 master/posix_8hh_source.html create mode 100644 master/preempt_8hh_source.html create mode 100644 master/prefetch_8hh_source.html create mode 100644 master/print_8hh_source.html create mode 100644 master/print__safe_8hh_source.html create mode 100644 master/process_8hh_source.html create mode 100644 master/program-options_8hh_source.html create mode 100644 master/prometheus_8hh_source.html create mode 100644 master/proxy_8hh_source.html create mode 100644 master/queue_8hh_source.html create mode 100644 master/ragel_8hh_source.html create mode 100644 master/random_8hh_source.html create mode 100644 master/reactor_8hh_source.html create mode 100644 master/reactor__config_8hh_source.html create mode 100644 master/read__first__line_8hh_source.html create mode 100644 master/read__state_8hh_source.html create mode 100644 master/reference__wrapper_8hh_source.html create mode 100644 master/relabel__config_8hh_source.html create mode 100644 master/reply_8hh_source.html create mode 100644 master/report__exception_8hh_source.html create mode 100644 master/request_8hh_source.html create mode 100644 master/resource_8hh_source.html create mode 100644 master/routes_8hh_source.html create mode 100644 master/rpc_8hh_source.html create mode 100644 master/rpc__impl_8hh_source.html create mode 100644 master/rpc__types_8hh_source.html create mode 100644 master/run__in__background_8hh_source.html create mode 100644 master/rwlock_8hh_source.html create mode 100644 master/sampler_8hh_source.html create mode 100644 master/scattered__message_8hh_source.html create mode 100644 master/scheduling_8hh.html create mode 100644 master/scheduling_8hh_source.html create mode 100644 master/scheduling__specific_8hh_source.html create mode 100644 master/scollectd_8hh_source.html create mode 100644 master/scollectd__api_8hh_source.html create mode 100644 master/search/all_0.html create mode 100644 master/search/all_0.js create mode 100644 master/search/all_1.html create mode 100644 master/search/all_1.js create mode 100644 master/search/all_10.html create mode 100644 master/search/all_10.js create mode 100644 master/search/all_11.html create mode 100644 master/search/all_11.js create mode 100644 master/search/all_12.html create mode 100644 master/search/all_12.js create mode 100644 master/search/all_13.html create mode 100644 master/search/all_13.js create mode 100644 master/search/all_14.html create mode 100644 master/search/all_14.js create mode 100644 master/search/all_15.html create mode 100644 master/search/all_15.js create mode 100644 master/search/all_16.html create mode 100644 master/search/all_16.js create mode 100644 master/search/all_17.html create mode 100644 master/search/all_17.js create mode 100644 master/search/all_18.html create mode 100644 master/search/all_18.js create mode 100644 master/search/all_19.html create mode 100644 master/search/all_19.js create mode 100644 master/search/all_1a.html create mode 100644 master/search/all_1a.js create mode 100644 master/search/all_2.html create mode 100644 master/search/all_2.js create mode 100644 master/search/all_3.html create mode 100644 master/search/all_3.js create mode 100644 master/search/all_4.html create mode 100644 master/search/all_4.js create mode 100644 master/search/all_5.html create mode 100644 master/search/all_5.js create mode 100644 master/search/all_6.html create mode 100644 master/search/all_6.js create mode 100644 master/search/all_7.html create mode 100644 master/search/all_7.js create mode 100644 master/search/all_8.html create mode 100644 master/search/all_8.js create mode 100644 master/search/all_9.html create mode 100644 master/search/all_9.js create mode 100644 master/search/all_a.html create mode 100644 master/search/all_a.js create mode 100644 master/search/all_b.html create mode 100644 master/search/all_b.js create mode 100644 master/search/all_c.html create mode 100644 master/search/all_c.js create mode 100644 master/search/all_d.html create mode 100644 master/search/all_d.js create mode 100644 master/search/all_e.html create mode 100644 master/search/all_e.js create mode 100644 master/search/all_f.html create mode 100644 master/search/all_f.js create mode 100644 master/search/classes_0.html create mode 100644 master/search/classes_0.js create mode 100644 master/search/classes_1.html create mode 100644 master/search/classes_1.js create mode 100644 master/search/classes_10.html create mode 100644 master/search/classes_10.js create mode 100644 master/search/classes_11.html create mode 100644 master/search/classes_11.js create mode 100644 master/search/classes_12.html create mode 100644 master/search/classes_12.js create mode 100644 master/search/classes_13.html create mode 100644 master/search/classes_13.js create mode 100644 master/search/classes_14.html create mode 100644 master/search/classes_14.js create mode 100644 master/search/classes_15.html create mode 100644 master/search/classes_15.js create mode 100644 master/search/classes_16.html create mode 100644 master/search/classes_16.js create mode 100644 master/search/classes_17.html create mode 100644 master/search/classes_17.js create mode 100644 master/search/classes_18.html create mode 100644 master/search/classes_18.js create mode 100644 master/search/classes_2.html create mode 100644 master/search/classes_2.js create mode 100644 master/search/classes_3.html create mode 100644 master/search/classes_3.js create mode 100644 master/search/classes_4.html create mode 100644 master/search/classes_4.js create mode 100644 master/search/classes_5.html create mode 100644 master/search/classes_5.js create mode 100644 master/search/classes_6.html create mode 100644 master/search/classes_6.js create mode 100644 master/search/classes_7.html create mode 100644 master/search/classes_7.js create mode 100644 master/search/classes_8.html create mode 100644 master/search/classes_8.js create mode 100644 master/search/classes_9.html create mode 100644 master/search/classes_9.js create mode 100644 master/search/classes_a.html create mode 100644 master/search/classes_a.js create mode 100644 master/search/classes_b.html create mode 100644 master/search/classes_b.js create mode 100644 master/search/classes_c.html create mode 100644 master/search/classes_c.js create mode 100644 master/search/classes_d.html create mode 100644 master/search/classes_d.js create mode 100644 master/search/classes_e.html create mode 100644 master/search/classes_e.js create mode 100644 master/search/classes_f.html create mode 100644 master/search/classes_f.js create mode 100644 master/search/close.svg create mode 100644 master/search/enums_0.html create mode 100644 master/search/enums_0.js create mode 100644 master/search/enums_1.html create mode 100644 master/search/enums_1.js create mode 100644 master/search/enums_2.html create mode 100644 master/search/enums_2.js create mode 100644 master/search/enums_3.html create mode 100644 master/search/enums_3.js create mode 100644 master/search/enums_4.html create mode 100644 master/search/enums_4.js create mode 100644 master/search/enums_5.html create mode 100644 master/search/enums_5.js create mode 100644 master/search/enums_6.html create mode 100644 master/search/enums_6.js create mode 100644 master/search/enums_7.html create mode 100644 master/search/enums_7.js create mode 100644 master/search/enumvalues_0.html create mode 100644 master/search/enumvalues_0.js create mode 100644 master/search/enumvalues_1.html create mode 100644 master/search/enumvalues_1.js create mode 100644 master/search/enumvalues_10.html create mode 100644 master/search/enumvalues_10.js create mode 100644 master/search/enumvalues_2.html create mode 100644 master/search/enumvalues_2.js create mode 100644 master/search/enumvalues_3.html create mode 100644 master/search/enumvalues_3.js create mode 100644 master/search/enumvalues_4.html create mode 100644 master/search/enumvalues_4.js create mode 100644 master/search/enumvalues_5.html create mode 100644 master/search/enumvalues_5.js create mode 100644 master/search/enumvalues_6.html create mode 100644 master/search/enumvalues_6.js create mode 100644 master/search/enumvalues_7.html create mode 100644 master/search/enumvalues_7.js create mode 100644 master/search/enumvalues_8.html create mode 100644 master/search/enumvalues_8.js create mode 100644 master/search/enumvalues_9.html create mode 100644 master/search/enumvalues_9.js create mode 100644 master/search/enumvalues_a.html create mode 100644 master/search/enumvalues_a.js create mode 100644 master/search/enumvalues_b.html create mode 100644 master/search/enumvalues_b.js create mode 100644 master/search/enumvalues_c.html create mode 100644 master/search/enumvalues_c.js create mode 100644 master/search/enumvalues_d.html create mode 100644 master/search/enumvalues_d.js create mode 100644 master/search/enumvalues_e.html create mode 100644 master/search/enumvalues_e.js create mode 100644 master/search/enumvalues_f.html create mode 100644 master/search/enumvalues_f.js create mode 100644 master/search/files_0.html create mode 100644 master/search/files_0.js create mode 100644 master/search/files_1.html create mode 100644 master/search/files_1.js create mode 100644 master/search/files_2.html create mode 100644 master/search/files_2.js create mode 100644 master/search/files_3.html create mode 100644 master/search/files_3.js create mode 100644 master/search/files_4.html create mode 100644 master/search/files_4.js create mode 100644 master/search/files_5.html create mode 100644 master/search/files_5.js create mode 100644 master/search/files_6.html create mode 100644 master/search/files_6.js create mode 100644 master/search/files_7.html create mode 100644 master/search/files_7.js create mode 100644 master/search/functions_0.html create mode 100644 master/search/functions_0.js create mode 100644 master/search/functions_1.html create mode 100644 master/search/functions_1.js create mode 100644 master/search/functions_10.html create mode 100644 master/search/functions_10.js create mode 100644 master/search/functions_11.html create mode 100644 master/search/functions_11.js create mode 100644 master/search/functions_12.html create mode 100644 master/search/functions_12.js create mode 100644 master/search/functions_13.html create mode 100644 master/search/functions_13.js create mode 100644 master/search/functions_14.html create mode 100644 master/search/functions_14.js create mode 100644 master/search/functions_15.html create mode 100644 master/search/functions_15.js create mode 100644 master/search/functions_16.html create mode 100644 master/search/functions_16.js create mode 100644 master/search/functions_17.html create mode 100644 master/search/functions_17.js create mode 100644 master/search/functions_18.html create mode 100644 master/search/functions_18.js create mode 100644 master/search/functions_2.html create mode 100644 master/search/functions_2.js create mode 100644 master/search/functions_3.html create mode 100644 master/search/functions_3.js create mode 100644 master/search/functions_4.html create mode 100644 master/search/functions_4.js create mode 100644 master/search/functions_5.html create mode 100644 master/search/functions_5.js create mode 100644 master/search/functions_6.html create mode 100644 master/search/functions_6.js create mode 100644 master/search/functions_7.html create mode 100644 master/search/functions_7.js create mode 100644 master/search/functions_8.html create mode 100644 master/search/functions_8.js create mode 100644 master/search/functions_9.html create mode 100644 master/search/functions_9.js create mode 100644 master/search/functions_a.html create mode 100644 master/search/functions_a.js create mode 100644 master/search/functions_b.html create mode 100644 master/search/functions_b.js create mode 100644 master/search/functions_c.html create mode 100644 master/search/functions_c.js create mode 100644 master/search/functions_d.html create mode 100644 master/search/functions_d.js create mode 100644 master/search/functions_e.html create mode 100644 master/search/functions_e.js create mode 100644 master/search/functions_f.html create mode 100644 master/search/functions_f.js create mode 100644 master/search/groups_0.html create mode 100644 master/search/groups_0.js create mode 100644 master/search/groups_1.html create mode 100644 master/search/groups_1.js create mode 100644 master/search/groups_2.html create mode 100644 master/search/groups_2.js create mode 100644 master/search/groups_3.html create mode 100644 master/search/groups_3.js create mode 100644 master/search/groups_4.html create mode 100644 master/search/groups_4.js create mode 100644 master/search/groups_5.html create mode 100644 master/search/groups_5.js create mode 100644 master/search/groups_6.html create mode 100644 master/search/groups_6.js create mode 100644 master/search/groups_7.html create mode 100644 master/search/groups_7.js create mode 100644 master/search/groups_8.html create mode 100644 master/search/groups_8.js create mode 100644 master/search/groups_9.html create mode 100644 master/search/groups_9.js create mode 100644 master/search/groups_a.html create mode 100644 master/search/groups_a.js create mode 100644 master/search/groups_b.html create mode 100644 master/search/groups_b.js create mode 100644 master/search/groups_c.html create mode 100644 master/search/groups_c.js create mode 100644 master/search/mag_sel.svg create mode 100644 master/search/namespaces_0.html create mode 100644 master/search/namespaces_0.js create mode 100644 master/search/namespaces_1.html create mode 100644 master/search/namespaces_1.js create mode 100644 master/search/nomatches.html create mode 100644 master/search/pages_0.html create mode 100644 master/search/pages_0.js create mode 100644 master/search/pages_1.html create mode 100644 master/search/pages_1.js create mode 100644 master/search/pages_2.html create mode 100644 master/search/pages_2.js create mode 100644 master/search/pages_3.html create mode 100644 master/search/pages_3.js create mode 100644 master/search/related_0.html create mode 100644 master/search/related_0.js create mode 100644 master/search/related_1.html create mode 100644 master/search/related_1.js create mode 100644 master/search/related_2.html create mode 100644 master/search/related_2.js create mode 100644 master/search/related_3.html create mode 100644 master/search/related_3.js create mode 100644 master/search/related_4.html create mode 100644 master/search/related_4.js create mode 100644 master/search/related_5.html create mode 100644 master/search/related_5.js create mode 100644 master/search/search.css create mode 100644 master/search/search.js create mode 100644 master/search/search_l.png create mode 100644 master/search/search_m.png create mode 100644 master/search/search_r.png create mode 100644 master/search/searchdata.js create mode 100644 master/search/typedefs_0.html create mode 100644 master/search/typedefs_0.js create mode 100644 master/search/typedefs_1.html create mode 100644 master/search/typedefs_1.js create mode 100644 master/search/typedefs_2.html create mode 100644 master/search/typedefs_2.js create mode 100644 master/search/typedefs_3.html create mode 100644 master/search/typedefs_3.js create mode 100644 master/search/typedefs_4.html create mode 100644 master/search/typedefs_4.js create mode 100644 master/search/typedefs_5.html create mode 100644 master/search/typedefs_5.js create mode 100644 master/search/typedefs_6.html create mode 100644 master/search/typedefs_6.js create mode 100644 master/search/typedefs_7.html create mode 100644 master/search/typedefs_7.js create mode 100644 master/search/typedefs_8.html create mode 100644 master/search/typedefs_8.js create mode 100644 master/search/typedefs_9.html create mode 100644 master/search/typedefs_9.js create mode 100644 master/search/variables_0.html create mode 100644 master/search/variables_0.js create mode 100644 master/search/variables_1.html create mode 100644 master/search/variables_1.js create mode 100644 master/search/variables_10.html create mode 100644 master/search/variables_10.js create mode 100644 master/search/variables_11.html create mode 100644 master/search/variables_11.js create mode 100644 master/search/variables_12.html create mode 100644 master/search/variables_12.js create mode 100644 master/search/variables_13.html create mode 100644 master/search/variables_13.js create mode 100644 master/search/variables_14.html create mode 100644 master/search/variables_14.js create mode 100644 master/search/variables_15.html create mode 100644 master/search/variables_15.js create mode 100644 master/search/variables_2.html create mode 100644 master/search/variables_2.js create mode 100644 master/search/variables_3.html create mode 100644 master/search/variables_3.js create mode 100644 master/search/variables_4.html create mode 100644 master/search/variables_4.js create mode 100644 master/search/variables_5.html create mode 100644 master/search/variables_5.js create mode 100644 master/search/variables_6.html create mode 100644 master/search/variables_6.js create mode 100644 master/search/variables_7.html create mode 100644 master/search/variables_7.js create mode 100644 master/search/variables_8.html create mode 100644 master/search/variables_8.js create mode 100644 master/search/variables_9.html create mode 100644 master/search/variables_9.js create mode 100644 master/search/variables_a.html create mode 100644 master/search/variables_a.js create mode 100644 master/search/variables_b.html create mode 100644 master/search/variables_b.js create mode 100644 master/search/variables_c.html create mode 100644 master/search/variables_c.js create mode 100644 master/search/variables_d.html create mode 100644 master/search/variables_d.js create mode 100644 master/search/variables_e.html create mode 100644 master/search/variables_e.js create mode 100644 master/search/variables_f.html create mode 100644 master/search/variables_f.js create mode 100644 master/seastar_8hh_source.html create mode 100644 master/seastar__test_8hh_source.html create mode 100644 master/semaphore_8hh_source.html create mode 100644 master/server_8hh_source.html create mode 100644 master/shard__id_8hh.html create mode 100644 master/shard__id_8hh_source.html create mode 100644 master/sharded_8hh_source.html create mode 100644 master/sharded_parameter_demo_8cc-example.html create mode 100644 master/shared__future_8hh_source.html create mode 100644 master/shared__mutex_8hh_source.html create mode 100644 master/shared__ptr_8hh_source.html create mode 100644 master/shared__ptr__debug__helper_8hh_source.html create mode 100644 master/shared__ptr__incomplete_8hh.html create mode 100644 master/shared__ptr__incomplete_8hh_source.html create mode 100644 master/shared__token__bucket_8hh_source.html create mode 100644 master/simple-stream_8hh_source.html create mode 100644 master/slab_8hh_source.html create mode 100644 master/sleep_8hh.html create mode 100644 master/sleep_8hh_source.html create mode 100644 master/smp_8hh.html create mode 100644 master/smp_8hh_source.html create mode 100644 master/smp__options_8hh.html create mode 100644 master/smp__options_8hh_source.html create mode 100644 master/socket__defs_8hh_source.html create mode 100644 master/source__location-compat_8hh_source.html create mode 100644 master/spinlock_8hh_source.html create mode 100644 master/split/1.html create mode 100644 master/split/10.html create mode 100644 master/split/11.html create mode 100644 master/split/12.html create mode 100644 master/split/13.html create mode 100644 master/split/14.html create mode 100644 master/split/15.html create mode 100644 master/split/16.html create mode 100644 master/split/17.html create mode 100644 master/split/18.html create mode 100644 master/split/19.html create mode 100644 master/split/2.html create mode 100644 master/split/20.html create mode 100644 master/split/21.html create mode 100644 master/split/22.html create mode 100644 master/split/23.html create mode 100644 master/split/24.html create mode 100644 master/split/25.html create mode 100644 master/split/26.html create mode 100644 master/split/3.html create mode 100644 master/split/4.html create mode 100644 master/split/5.html create mode 100644 master/split/6.html create mode 100644 master/split/7.html create mode 100644 master/split/8.html create mode 100644 master/split/9.html create mode 100644 master/split/index.html create mode 100644 master/splitbar.png create mode 100644 master/sstring_8hh_source.html create mode 100644 master/stack_8hh_source.html create mode 100644 master/stall__detector_8hh_source.html create mode 100644 master/stall__sampler_8hh_source.html create mode 100644 master/std-compat_8hh_source.html create mode 100644 master/stream_8hh_source.html create mode 100644 master/string__utils_8hh_source.html create mode 100644 master/structfmt_1_1formatter_3_01T_01_4-members.html create mode 100644 master/structfmt_1_1formatter_3_01T_01_4.html create mode 100644 master/structfmt_1_1formatter_3_01T_01_4.png create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1abort__requested__exception_01_4-members.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1abort__requested__exception_01_4.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1abort__requested__exception_01_4.png create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1bool__class_3_01Tag_01_4_01_4-members.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1bool__class_3_01Tag_01_4_01_4.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1httpd_1_1base__exception_01_4-members.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1httpd_1_1base__exception_01_4.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1lazy__deref__wrapper_3_01T_01_4_01_4-members.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1lazy__deref__wrapper_3_01T_01_4_01_4.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1lazy__deref__wrapper_3_01T_01_4_01_4.png create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1lazy__eval_3_01Func_01_4_01_4-members.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1lazy__eval_3_01Func_01_4_01_4.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1lazy__eval_3_01Func_01_4_01_4.png create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1log__level_01_4-members.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1log__level_01_4.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4-members.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1optimized__optional_3_01T_01_4_01_4-members.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1optimized__optional_3_01T_01_4_01_4.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1optimized__optional_3_01T_01_4_01_4.png create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1rpc_1_1optional_3_01T_01_4_01_4-members.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1rpc_1_1optional_3_01T_01_4_01_4.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4-members.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1timed__out__error_01_4-members.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1timed__out__error_01_4.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1timed__out__error_01_4.png create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_01_4-members.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_01_4.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_01_4.png create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_1_1value__type_01_4-members.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_1_1value__type_01_4.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_1_1value__type_01_4.png create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name__type_01_4-members.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name__type_01_4.html create mode 100644 master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name__type_01_4.png create mode 100644 master/structperf__tests_1_1internal_1_1test__registrar-members.html create mode 100644 master/structperf__tests_1_1internal_1_1test__registrar.html create mode 100644 master/structsampler_1_1disable__sampling__temporarily-members.html create mode 100644 master/structsampler_1_1disable__sampling__temporarily.html create mode 100644 master/structseastar_1_1alien_1_1internal_1_1qs__deleter-members.html create mode 100644 master/structseastar_1_1alien_1_1internal_1_1qs__deleter.html create mode 100644 master/structseastar_1_1alien_1_1internal_1_1return__type__of-members.html create mode 100644 master/structseastar_1_1alien_1_1internal_1_1return__type__of.html create mode 100644 master/structseastar_1_1alien_1_1internal_1_1return__type__of_3_01Func_00_01false_01_4-members.html create mode 100644 master/structseastar_1_1alien_1_1internal_1_1return__type__of_3_01Func_00_01false_01_4.html create mode 100644 master/structseastar_1_1basic__sstring_1_1contents_1_1external__type-members.html create mode 100644 master/structseastar_1_1basic__sstring_1_1contents_1_1external__type.html create mode 100644 master/structseastar_1_1basic__sstring_1_1contents_1_1internal__type-members.html create mode 100644 master/structseastar_1_1basic__sstring_1_1contents_1_1internal__type.html create mode 100644 master/structseastar_1_1broken__promise-members.html create mode 100644 master/structseastar_1_1broken__promise.html create mode 100644 master/structseastar_1_1broken__promise.png create mode 100644 master/structseastar_1_1coroutine_1_1exception-members.html create mode 100644 master/structseastar_1_1coroutine_1_1exception.html create mode 100644 master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1next__awaiter-members.html create mode 100644 master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1next__awaiter.html create mode 100644 master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1yield__awaiter-members.html create mode 100644 master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1yield__awaiter.html create mode 100644 master/structseastar_1_1coroutine_1_1switch__to-members.html create mode 100644 master/structseastar_1_1coroutine_1_1switch__to.html create mode 100644 master/structseastar_1_1coroutine_1_1switch__to.png create mode 100644 master/structseastar_1_1coroutine_1_1without__preemption__check-members.html create mode 100644 master/structseastar_1_1coroutine_1_1without__preemption__check.html create mode 100644 master/structseastar_1_1coroutine_1_1without__preemption__check.png create mode 100644 master/structseastar_1_1default__null__deref__action-members.html create mode 100644 master/structseastar_1_1default__null__deref__action.html create mode 100644 master/structseastar_1_1default__timeout__exception__factory-members.html create mode 100644 master/structseastar_1_1default__timeout__exception__factory.html create mode 100644 master/structseastar_1_1dummy__expiry-members.html create mode 100644 master/structseastar_1_1dummy__expiry.html create mode 100644 master/structseastar_1_1experimental_1_1spawn__parameters-members.html create mode 100644 master/structseastar_1_1experimental_1_1spawn__parameters.html create mode 100644 master/structseastar_1_1experimental_1_1websocket_1_1frame__header-members.html create mode 100644 master/structseastar_1_1experimental_1_1websocket_1_1frame__header.html create mode 100644 master/structseastar_1_1file__open__options-members.html create mode 100644 master/structseastar_1_1file__open__options.html create mode 100644 master/structseastar_1_1free__deleter-members.html create mode 100644 master/structseastar_1_1free__deleter.html create mode 100644 master/structseastar_1_1function__input__iterator-members.html create mode 100644 master/structseastar_1_1function__input__iterator.html create mode 100644 master/structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4-members.html create mode 100644 master/structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4.html create mode 100644 master/structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4.png create mode 100644 master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_01const_01_4-members.html create mode 100644 master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_01const_01_4.html create mode 100644 master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_01const_01_4.png create mode 100644 master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_4-members.html create mode 100644 master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_4.html create mode 100644 master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_4.png create mode 100644 master/structseastar_1_1function__traits_3_01Ret_07_5_08_07Args_8_8_8_08_4-members.html create mode 100644 master/structseastar_1_1function__traits_3_01Ret_07_5_08_07Args_8_8_8_08_4.html create mode 100644 master/structseastar_1_1function__traits_3_01Ret_07_5_08_07Args_8_8_8_08_4.png create mode 100644 master/structseastar_1_1function__traits_3_01T_01_6_01_4.html create mode 100644 master/structseastar_1_1function__traits_3_01T_01_6_01_4.png create mode 100644 master/structseastar_1_1future_1_1finally__body_3_01Func_00_01false_01_4-members.html create mode 100644 master/structseastar_1_1future_1_1finally__body_3_01Func_00_01false_01_4.html create mode 100644 master/structseastar_1_1future_1_1finally__body_3_01Func_00_01true_01_4-members.html create mode 100644 master/structseastar_1_1future_1_1finally__body_3_01Func_00_01true_01_4.html create mode 100644 master/structseastar_1_1future__state__base-members.html create mode 100644 master/structseastar_1_1future__state__base.html create mode 100644 master/structseastar_1_1futurize-members.html create mode 100644 master/structseastar_1_1futurize.html create mode 100644 master/structseastar_1_1futurize.png create mode 100644 master/structseastar_1_1http_1_1reply-members.html create mode 100644 master/structseastar_1_1http_1_1reply.html create mode 100644 master/structseastar_1_1http_1_1request-members.html create mode 100644 master/structseastar_1_1http_1_1request.html create mode 100644 master/structseastar_1_1httpd_1_1api__doc-members.html create mode 100644 master/structseastar_1_1httpd_1_1api__doc.html create mode 100644 master/structseastar_1_1httpd_1_1api__doc.png create mode 100644 master/structseastar_1_1httpd_1_1api__docs-members.html create mode 100644 master/structseastar_1_1httpd_1_1api__docs.html create mode 100644 master/structseastar_1_1httpd_1_1api__docs.png create mode 100644 master/structseastar_1_1httpd_1_1json__operation-members.html create mode 100644 master/structseastar_1_1httpd_1_1json__operation.html create mode 100644 master/structseastar_1_1httpd_1_1path__description-members.html create mode 100644 master/structseastar_1_1httpd_1_1path__description.html create mode 100644 master/structseastar_1_1indirect__equal__to-members.html create mode 100644 master/structseastar_1_1indirect__equal__to.html create mode 100644 master/structseastar_1_1indirect__hash-members.html create mode 100644 master/structseastar_1_1indirect__hash.html create mode 100644 master/structseastar_1_1indirect__less-members.html create mode 100644 master/structseastar_1_1indirect__less.html create mode 100644 master/structseastar_1_1ipv4__addr-members.html create mode 100644 master/structseastar_1_1ipv4__addr.html create mode 100644 master/structseastar_1_1ipv6__addr-members.html create mode 100644 master/structseastar_1_1ipv6__addr.html create mode 100644 master/structseastar_1_1is__future.html create mode 100644 master/structseastar_1_1is__future.png create mode 100644 master/structseastar_1_1is__smart__ptr.html create mode 100644 master/structseastar_1_1is__smart__ptr.png create mode 100644 master/structseastar_1_1is__smart__ptr_3_01foreign__ptr_3_01T_01_4_01_4.html create mode 100644 master/structseastar_1_1is__smart__ptr_3_01foreign__ptr_3_01T_01_4_01_4.png create mode 100644 master/structseastar_1_1is__smart__ptr_3_01lw__shared__ptr_3_01T_01_4_01_4.html create mode 100644 master/structseastar_1_1is__smart__ptr_3_01lw__shared__ptr_3_01T_01_4_01_4.png create mode 100644 master/structseastar_1_1is__smart__ptr_3_01shared__ptr_3_01T_01_4_01_4.html create mode 100644 master/structseastar_1_1is__smart__ptr_3_01shared__ptr_3_01T_01_4_01_4.png create mode 100644 master/structseastar_1_1is__smart__ptr_3_01std_1_1unique__ptr_3_01T_01_4_01_4.html create mode 100644 master/structseastar_1_1is__smart__ptr_3_01std_1_1unique__ptr_3_01T_01_4_01_4.png create mode 100644 master/structseastar_1_1json_1_1json__base-members.html create mode 100644 master/structseastar_1_1json_1_1json__base.html create mode 100644 master/structseastar_1_1json_1_1json__base.png create mode 100644 master/structseastar_1_1json_1_1json__return__type-members.html create mode 100644 master/structseastar_1_1json_1_1json__return__type.html create mode 100644 master/structseastar_1_1json_1_1json__void-members.html create mode 100644 master/structseastar_1_1json_1_1json__void.html create mode 100644 master/structseastar_1_1json_1_1json__void.png create mode 100644 master/structseastar_1_1lazy__deref__wrapper-members.html create mode 100644 master/structseastar_1_1lazy__deref__wrapper.html create mode 100644 master/structseastar_1_1listen__options-members.html create mode 100644 master/structseastar_1_1listen__options.html create mode 100644 master/structseastar_1_1log__cli_1_1options-members.html create mode 100644 master/structseastar_1_1log__cli_1_1options.html create mode 100644 master/structseastar_1_1log__cli_1_1options.png create mode 100644 master/structseastar_1_1lw__shared__ptr__counter__base-members.html create mode 100644 master/structseastar_1_1lw__shared__ptr__counter__base.html create mode 100644 master/structseastar_1_1lw__shared__ptr__counter__base.png create mode 100644 master/structseastar_1_1lw__shared__ptr__no__esft-members.html create mode 100644 master/structseastar_1_1lw__shared__ptr__no__esft.html create mode 100644 master/structseastar_1_1lw__shared__ptr__no__esft.png create mode 100644 master/structseastar_1_1memory_1_1allocation__site-members.html create mode 100644 master/structseastar_1_1memory_1_1allocation__site.html create mode 100644 master/structseastar_1_1metrics_1_1histogram-members.html create mode 100644 master/structseastar_1_1metrics_1_1histogram.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1config-members.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1config.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1counter__type__traits-members.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1counter__type__traits.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1metric__definition__impl-members.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1metric__definition__impl.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1metric__family__info-members.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1metric__family__info.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1metric__family__metadata-members.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1metric__family__metadata.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1metric__info-members.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1metric__info.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1metric__type-members.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1metric__type.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits-members.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits_3_01true_00_01T_01_4-members.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits_3_01true_00_01T_01_4.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1values__copy-members.html create mode 100644 master/structseastar_1_1metrics_1_1impl_1_1values__copy.html create mode 100644 master/structseastar_1_1metrics_1_1options-members.html create mode 100644 master/structseastar_1_1metrics_1_1options.html create mode 100644 master/structseastar_1_1metrics_1_1options.png create mode 100644 master/structseastar_1_1metrics_1_1relabel__config-members.html create mode 100644 master/structseastar_1_1metrics_1_1relabel__config.html create mode 100644 master/structseastar_1_1mmap__deleter-members.html create mode 100644 master/structseastar_1_1mmap__deleter.html create mode 100644 master/structseastar_1_1named__semaphore__exception__factory-members.html create mode 100644 master/structseastar_1_1named__semaphore__exception__factory.html create mode 100644 master/structseastar_1_1nested__exception-members.html create mode 100644 master/structseastar_1_1nested__exception.html create mode 100644 master/structseastar_1_1nested__exception.png create mode 100644 master/structseastar_1_1net_1_1checksummer-members.html create mode 100644 master/structseastar_1_1net_1_1checksummer.html create mode 100644 master/structseastar_1_1net_1_1dpdk__options-members.html create mode 100644 master/structseastar_1_1net_1_1dpdk__options.html create mode 100644 master/structseastar_1_1net_1_1dpdk__options.png create mode 100644 master/structseastar_1_1net_1_1eth__hdr-members.html create mode 100644 master/structseastar_1_1net_1_1eth__hdr.html create mode 100644 master/structseastar_1_1net_1_1ethernet-members.html create mode 100644 master/structseastar_1_1net_1_1ethernet.html create mode 100644 master/structseastar_1_1net_1_1ethernet__address-members.html create mode 100644 master/structseastar_1_1net_1_1ethernet__address.html create mode 100644 master/structseastar_1_1net_1_1icmp__hdr-members.html create mode 100644 master/structseastar_1_1net_1_1icmp__hdr.html create mode 100644 master/structseastar_1_1net_1_1ip__hdr-members.html create mode 100644 master/structseastar_1_1net_1_1ip__hdr.html create mode 100644 master/structseastar_1_1net_1_1ip__packet__filter-members.html create mode 100644 master/structseastar_1_1net_1_1ip__packet__filter.html create mode 100644 master/structseastar_1_1net_1_1ipv4__address-members.html create mode 100644 master/structseastar_1_1net_1_1ipv4__address.html create mode 100644 master/structseastar_1_1net_1_1ipv4__frag__id-members.html create mode 100644 master/structseastar_1_1net_1_1ipv4__frag__id.html create mode 100644 master/structseastar_1_1net_1_1ipv4__frag__id_1_1hash-members.html create mode 100644 master/structseastar_1_1net_1_1ipv4__frag__id_1_1hash.html create mode 100644 master/structseastar_1_1net_1_1ipv4__frag__id_1_1hash.png create mode 100644 master/structseastar_1_1net_1_1ipv4__traits-members.html create mode 100644 master/structseastar_1_1net_1_1ipv4__traits.html create mode 100644 master/structseastar_1_1net_1_1ipv6__address-members.html create mode 100644 master/structseastar_1_1net_1_1ipv6__address.html create mode 100644 master/structseastar_1_1net_1_1l4connid-members.html create mode 100644 master/structseastar_1_1net_1_1l4connid.html create mode 100644 master/structseastar_1_1net_1_1l4connid_1_1connid__hash-members.html create mode 100644 master/structseastar_1_1net_1_1l4connid_1_1connid__hash.html create mode 100644 master/structseastar_1_1net_1_1l4connid_1_1connid__hash.png create mode 100644 master/structseastar_1_1net_1_1native__stack__options-members.html create mode 100644 master/structseastar_1_1net_1_1native__stack__options.html create mode 100644 master/structseastar_1_1net_1_1native__stack__options.png create mode 100644 master/structseastar_1_1net_1_1qp__stats-members.html create mode 100644 master/structseastar_1_1net_1_1qp__stats.html create mode 100644 master/structseastar_1_1net_1_1qp__stats__good-members.html create mode 100644 master/structseastar_1_1net_1_1qp__stats__good.html create mode 100644 master/structseastar_1_1net_1_1tcp__hdr-members.html create mode 100644 master/structseastar_1_1net_1_1tcp__hdr.html create mode 100644 master/structseastar_1_1net_1_1tcp__option-members.html create mode 100644 master/structseastar_1_1net_1_1tcp__option.html create mode 100644 master/structseastar_1_1net_1_1tcp__option_1_1eol-members.html create mode 100644 master/structseastar_1_1net_1_1tcp__option_1_1eol.html create mode 100644 master/structseastar_1_1net_1_1tcp__option_1_1mss-members.html create mode 100644 master/structseastar_1_1net_1_1tcp__option_1_1mss.html create mode 100644 master/structseastar_1_1net_1_1tcp__option_1_1nop-members.html create mode 100644 master/structseastar_1_1net_1_1tcp__option_1_1nop.html create mode 100644 master/structseastar_1_1net_1_1tcp__option_1_1sack-members.html create mode 100644 master/structseastar_1_1net_1_1tcp__option_1_1sack.html create mode 100644 master/structseastar_1_1net_1_1tcp__option_1_1timestamps-members.html create mode 100644 master/structseastar_1_1net_1_1tcp__option_1_1timestamps.html create mode 100644 master/structseastar_1_1net_1_1tcp__option_1_1win__scale-members.html create mode 100644 master/structseastar_1_1net_1_1tcp__option_1_1win__scale.html create mode 100644 master/structseastar_1_1net_1_1udp__channel__state-members.html create mode 100644 master/structseastar_1_1net_1_1udp__channel__state.html create mode 100644 master/structseastar_1_1net_1_1udp__hdr-members.html create mode 100644 master/structseastar_1_1net_1_1udp__hdr.html create mode 100644 master/structseastar_1_1net_1_1virtio__options-members.html create mode 100644 master/structseastar_1_1net_1_1virtio__options.html create mode 100644 master/structseastar_1_1net_1_1virtio__options.png create mode 100644 master/structseastar_1_1pollable__fd__state_1_1speculation-members.html create mode 100644 master/structseastar_1_1pollable__fd__state_1_1speculation.html create mode 100644 master/structseastar_1_1pollfn-members.html create mode 100644 master/structseastar_1_1pollfn.html create mode 100644 master/structseastar_1_1pollfn.png create mode 100644 master/structseastar_1_1prefetcher-members.html create mode 100644 master/structseastar_1_1prefetcher.html create mode 100644 master/structseastar_1_1prefetcher_3_010_00_01RW_00_01LOC_01_4-members.html create mode 100644 master/structseastar_1_1prefetcher_3_010_00_01RW_00_01LOC_01_4.html create mode 100644 master/structseastar_1_1prometheus_1_1config-members.html create mode 100644 master/structseastar_1_1prometheus_1_1config.html create mode 100644 master/structseastar_1_1promise__expiry-members.html create mode 100644 master/structseastar_1_1promise__expiry.html create mode 100644 master/structseastar_1_1reactor__options-members.html create mode 100644 master/structseastar_1_1reactor__options.html create mode 100644 master/structseastar_1_1reactor__options.png create mode 100644 master/structseastar_1_1resource_1_1configuration-members.html create mode 100644 master/structseastar_1_1resource_1_1configuration.html create mode 100644 master/structseastar_1_1resource_1_1cpu-members.html create mode 100644 master/structseastar_1_1resource_1_1cpu.html create mode 100644 master/structseastar_1_1resource_1_1hwloc_1_1internal_1_1topology__holder.html create mode 100644 master/structseastar_1_1resource_1_1io__queue__topology-members.html create mode 100644 master/structseastar_1_1resource_1_1io__queue__topology.html create mode 100644 master/structseastar_1_1resource_1_1memory-members.html create mode 100644 master/structseastar_1_1resource_1_1memory.html create mode 100644 master/structseastar_1_1resource_1_1resources-members.html create mode 100644 master/structseastar_1_1resource_1_1resources.html create mode 100644 master/structseastar_1_1rpc_1_1cancellable-members.html create mode 100644 master/structseastar_1_1rpc_1_1cancellable.html create mode 100644 master/structseastar_1_1rpc_1_1client_1_1reply__handler-members.html create mode 100644 master/structseastar_1_1rpc_1_1client_1_1reply__handler.html create mode 100644 master/structseastar_1_1rpc_1_1client__info-members.html create mode 100644 master/structseastar_1_1rpc_1_1client__info.html create mode 100644 master/structseastar_1_1rpc_1_1connection_1_1outgoing__entry-members.html create mode 100644 master/structseastar_1_1rpc_1_1connection_1_1outgoing__entry.html create mode 100644 master/structseastar_1_1rpc_1_1connection_1_1outgoing__entry.png create mode 100644 master/structseastar_1_1rpc_1_1deferred__snd__buf-members.html create mode 100644 master/structseastar_1_1rpc_1_1deferred__snd__buf.html create mode 100644 master/structseastar_1_1rpc_1_1do__want__client__info.html create mode 100644 master/structseastar_1_1rpc_1_1do__want__time__point.html create mode 100644 master/structseastar_1_1rpc_1_1dont__want__client__info.html create mode 100644 master/structseastar_1_1rpc_1_1dont__want__time__point.html create mode 100644 master/structseastar_1_1rpc_1_1marshall__one-members.html create mode 100644 master/structseastar_1_1rpc_1_1marshall__one.html create mode 100644 master/structseastar_1_1rpc_1_1marshall__one_1_1helper-members.html create mode 100644 master/structseastar_1_1rpc_1_1marshall__one_1_1helper.html create mode 100644 master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1negotiation__frame-members.html create mode 100644 master/structseastar_1_1rpc_1_1negotiation__frame.html create mode 100644 master/structseastar_1_1rpc_1_1no__wait__type.html create mode 100644 master/structseastar_1_1rpc_1_1rcv__buf-members.html create mode 100644 master/structseastar_1_1rpc_1_1rcv__buf.html create mode 100644 master/structseastar_1_1rpc_1_1rcv__reply-members.html create mode 100644 master/structseastar_1_1rpc_1_1rcv__reply.html create mode 100644 master/structseastar_1_1rpc_1_1rcv__reply.png create mode 100644 master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_01T_8_8_8_01_4_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_01T_8_8_8_01_4_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_01T_8_8_8_01_4_01_4.png create mode 100644 master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_4_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_4_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_4_01_4.png create mode 100644 master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01void_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01void_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01void_01_4.png create mode 100644 master/structseastar_1_1rpc_1_1rcv__reply__base-members.html create mode 100644 master/structseastar_1_1rpc_1_1rcv__reply__base.html create mode 100644 master/structseastar_1_1rpc_1_1remove__optional-members.html create mode 100644 master/structseastar_1_1rpc_1_1remove__optional.html create mode 100644 master/structseastar_1_1rpc_1_1remove__optional_3_01optional_3_01T_01_4_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1remove__optional_3_01optional_3_01T_01_4_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1rpc__handler-members.html create mode 100644 master/structseastar_1_1rpc_1_1rpc__handler.html create mode 100644 master/structseastar_1_1rpc_1_1serialize__helper.html create mode 100644 master/structseastar_1_1rpc_1_1serialize__helper_3_01false_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1serialize__helper_3_01false_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1serialize__helper_3_01true_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1serialize__helper_3_01true_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1signature.html create mode 100644 master/structseastar_1_1rpc_1_1signature_3_01Ret_07In_8_8_8_08_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1signature_3_01Ret_07In_8_8_8_08_4.html create mode 100644 master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01In_8_8_8_08_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01In_8_8_8_08_4.html create mode 100644 master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4.html create mode 100644 master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01In_8_8_8_08_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01In_8_8_8_08_4.html create mode 100644 master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4.html create mode 100644 master/structseastar_1_1rpc_1_1signature_3_01Ret_07opt__time__point_00_01In_8_8_8_08_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1signature_3_01Ret_07opt__time__point_00_01In_8_8_8_08_4.html create mode 100644 master/structseastar_1_1rpc_1_1snd__buf-members.html create mode 100644 master/structseastar_1_1rpc_1_1snd__buf.html create mode 100644 master/structseastar_1_1rpc_1_1stats-members.html create mode 100644 master/structseastar_1_1rpc_1_1stats.html create mode 100644 master/structseastar_1_1rpc_1_1unmarshal__one-members.html create mode 100644 master/structseastar_1_1rpc_1_1unmarshal__one.html create mode 100644 master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper-members.html create mode 100644 master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper.html create mode 100644 master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01optional_3_01T_01_4_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01optional_3_01T_01_4_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1wait__signature-members.html create mode 100644 master/structseastar_1_1rpc_1_1wait__signature.html create mode 100644 master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01T_8_8_8_01_4_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01T_8_8_8_01_4_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01no__wait__type_01_4_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01no__wait__type_01_4_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1wait__signature_3_01no__wait__type_01_4-members.html create mode 100644 master/structseastar_1_1rpc_1_1wait__signature_3_01no__wait__type_01_4.html create mode 100644 master/structseastar_1_1rpc_1_1wait__type.html create mode 100644 master/structseastar_1_1scheduling__group__key__config-members.html create mode 100644 master/structseastar_1_1scheduling__group__key__config.html create mode 100644 master/structseastar_1_1scollectd_1_1data__type__for.html create mode 100644 master/structseastar_1_1scollectd_1_1data__type__for.png create mode 100644 master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01is__callable_35c0ca2f0a42f3af2902b730a47b963e6.html create mode 100644 master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01is__callable_35c0ca2f0a42f3af2902b730a47b963e6.png create mode 100644 master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__floefb1fea89ef879d2424c4cbcbf5c1652.html create mode 100644 master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__floefb1fea89ef879d2424c4cbcbf5c1652.png create mode 100644 master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__int8bb9c47ea63565f41486d8397e60995d.html create mode 100644 master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__int8bb9c47ea63565f41486d8397e60995d.png create mode 100644 master/structseastar_1_1scollectd_1_1data__type__for_3_01typed_3_01T_01_4_01_4.html create mode 100644 master/structseastar_1_1scollectd_1_1data__type__for_3_01typed_3_01T_01_4_01_4.png create mode 100644 master/structseastar_1_1scollectd_1_1is__callable_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__fundam691d139f22c6f61584588d14c6b15105.html create mode 100644 master/structseastar_1_1scollectd_1_1is__callable_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__fundam691d139f22c6f61584588d14c6b15105.png create mode 100644 master/structseastar_1_1scollectd_1_1is__callable_3_01T_00_01std_1_1enable__if__t_3_9std_1_1is__void__v6ef63c309456a52af7019db17223ca10.html create mode 100644 master/structseastar_1_1scollectd_1_1is__callable_3_01T_00_01std_1_1enable__if__t_3_9std_1_1is__void__v6ef63c309456a52af7019db17223ca10.png create mode 100644 master/structseastar_1_1scollectd_1_1options-members.html create mode 100644 master/structseastar_1_1scollectd_1_1options.html create mode 100644 master/structseastar_1_1scollectd_1_1options.png create mode 100644 master/structseastar_1_1scollectd_1_1registration-members.html create mode 100644 master/structseastar_1_1scollectd_1_1registration.html create mode 100644 master/structseastar_1_1scollectd_1_1typed-members.html create mode 100644 master/structseastar_1_1scollectd_1_1typed.html create mode 100644 master/structseastar_1_1scollectd_1_1typed__value-members.html create mode 100644 master/structseastar_1_1scollectd_1_1typed__value.html create mode 100644 master/structseastar_1_1scollectd_1_1typed__value.png create mode 100644 master/structseastar_1_1scollectd_1_1typed__value__impl-members.html create mode 100644 master/structseastar_1_1scollectd_1_1typed__value__impl.html create mode 100644 master/structseastar_1_1scollectd_1_1typed__value__impl.png create mode 100644 master/structseastar_1_1scollectd_1_1value_1_1wrap-members.html create mode 100644 master/structseastar_1_1scollectd_1_1value_1_1wrap.html create mode 100644 master/structseastar_1_1semaphore__default__exception__factory-members.html create mode 100644 master/structseastar_1_1semaphore__default__exception__factory.html create mode 100644 master/structseastar_1_1semaphore__default__exception__factory.png create mode 100644 master/structseastar_1_1shared__ptr__count__base-members.html create mode 100644 master/structseastar_1_1shared__ptr__count__base.html create mode 100644 master/structseastar_1_1shared__ptr__count__base.png create mode 100644 master/structseastar_1_1shared__ptr__count__for-members.html create mode 100644 master/structseastar_1_1shared__ptr__count__for.html create mode 100644 master/structseastar_1_1shared__ptr__count__for.png create mode 100644 master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01false_01_4-members.html create mode 100644 master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01false_01_4.html create mode 100644 master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01true_01_4-members.html create mode 100644 master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01true_01_4.html create mode 100644 master/structseastar_1_1simple__pollfn-members.html create mode 100644 master/structseastar_1_1simple__pollfn.html create mode 100644 master/structseastar_1_1simple__pollfn.png create mode 100644 master/structseastar_1_1slab__page__desc-members.html create mode 100644 master/structseastar_1_1slab__page__desc.html create mode 100644 master/structseastar_1_1smp__message__queue_1_1tx__side_1_1aa-members.html create mode 100644 master/structseastar_1_1smp__message__queue_1_1tx__side_1_1aa.html create mode 100644 master/structseastar_1_1smp__options-members.html create mode 100644 master/structseastar_1_1smp__options.html create mode 100644 master/structseastar_1_1smp__options.png create mode 100644 master/structseastar_1_1smp__submit__to__options-members.html create mode 100644 master/structseastar_1_1smp__submit__to__options.html create mode 100644 master/structseastar_1_1unaligned-members.html create mode 100644 master/structseastar_1_1unaligned.html create mode 100644 master/structseastar_1_1unix__domain__addr-members.html create mode 100644 master/structseastar_1_1unix__domain__addr.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1basic__sstring_3_01char__type_00_01size__type_00_01max__size_00_01NulTerminate_01_4_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1basic__sstring_3_01char__type_00_01size__type_00_01max__size_00fbbc76df89680f75689dd49cecc4b76c.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1checked__ptr_3_01T_01_4_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1checked__ptr_3_01T_01_4_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1ipv4__addr_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1ipv4__addr_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4.png create mode 100644 master/structstd_1_1hash_3_01seastar_1_1memory_1_1allocation__site_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1memory_1_1allocation__site_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1labels__type_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1labels__type_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1metric__id_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1metric__id_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1net_1_1inet__address_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1net_1_1inet__address_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv4__address_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv4__address_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv6__address_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv6__address_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1rpc_1_1connection__id_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1rpc_1_1connection__id_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1rpc_1_1streaming__domain__type_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1rpc_1_1streaming__domain__type_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1scheduling__group_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1scheduling__group_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4.png create mode 100644 master/structstd_1_1hash_3_01seastar_1_1simple__backtrace_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1simple__backtrace_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1socket__address_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1socket__address_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1tasktrace_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1tasktrace_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1transport_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1transport_01_4.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1unix__domain__addr_01_4-members.html create mode 100644 master/structstd_1_1hash_3_01seastar_1_1unix__domain__addr_01_4.html create mode 100644 master/structstd_1_1hash_3_1_1sockaddr__in_01_4-members.html create mode 100644 master/structstd_1_1hash_3_1_1sockaddr__in_01_4.html create mode 100644 master/structstd_1_1hash_3_1_1sockaddr__un_01_4-members.html create mode 100644 master/structstd_1_1hash_3_1_1sockaddr__un_01_4.html create mode 100644 master/structstd_1_1tuple__element_3_01I_00_01seastar_1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.html create mode 100644 master/structstd_1_1tuple__element_3_01I_00_01seastar_1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.png create mode 100644 master/structstd_1_1tuple__size_3_01seastar_1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.html create mode 100644 master/structstd_1_1tuple__size_3_01seastar_1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.png create mode 100644 master/switch__to_8hh_source.html create mode 100644 master/sync_off.png create mode 100644 master/sync_on.png create mode 100644 master/systemwide__memory__barrier_8hh_source.html create mode 100644 master/tab_a.png create mode 100644 master/tab_b.png create mode 100644 master/tab_h.png create mode 100644 master/tab_s.png create mode 100644 master/tabs.css create mode 100644 master/task_8hh_source.html create mode 100644 master/tcp-stack_8hh_source.html create mode 100644 master/tcp_8hh_source.html create mode 100644 master/temporary__buffer_8hh_source.html create mode 100644 master/test__case_8hh_source.html create mode 100644 master/test__runner_8hh_source.html create mode 100644 master/testing_2on__internal__error_8hh_source.html create mode 100644 master/thread_8hh_source.html create mode 100644 master/thread__cputime__clock_8hh_source.html create mode 100644 master/thread__impl_8hh_source.html create mode 100644 master/thread__test__case_8hh_source.html create mode 100644 master/timed__out__error_8hh_source.html create mode 100644 master/timer-set_8hh_source.html create mode 100644 master/timer_8hh.html create mode 100644 master/timer_8hh_source.html create mode 100644 master/tls_8hh_source.html create mode 100644 master/tmp__file_8hh_source.html create mode 100644 master/toeplitz_8hh_source.html create mode 100644 master/transfer_8hh_source.html create mode 100644 master/transform__iterator_8hh_source.html create mode 100644 master/transformers_8hh_source.html create mode 100644 master/tuple__utils_8hh_source.html create mode 100644 master/tutorial.html create mode 100644 master/udp_8hh_source.html create mode 100644 master/unaligned_8hh_source.html create mode 100644 master/uname_8hh_source.html create mode 100644 master/unionseastar_1_1future__state__base_1_1any-members.html create mode 100644 master/unionseastar_1_1future__state__base_1_1any.html create mode 100644 master/units_8hh_source.html create mode 100644 master/unix__address_8hh_source.html create mode 100644 master/url_8hh_source.html create mode 100644 master/used__size_8hh_source.html create mode 100644 master/util_2file_8hh_source.html create mode 100644 master/util_2short__streams_8hh_source.html create mode 100644 master/variant__utils_8hh_source.html create mode 100644 master/vector-data-sink_8hh_source.html create mode 100644 master/virtio-interface_8hh_source.html create mode 100644 master/virtio_8hh_source.html create mode 100644 master/weak__ptr_8hh_source.html create mode 100644 master/when__all_8hh_source.html create mode 100644 master/when__any_8hh_source.html create mode 100644 master/with__scheduling__group_8hh_source.html create mode 100644 master/with__timeout_8hh_source.html diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..4bfec4af6 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +docs.seastar.io diff --git a/index.html b/index.html new file mode 100644 index 000000000..52e4c39e3 --- /dev/null +++ b/index.html @@ -0,0 +1 @@ +Redirecting... diff --git a/master/abort__on__ebadf_8hh_source.html b/master/abort__on__ebadf_8hh_source.html new file mode 100644 index 000000000..e40f60063 --- /dev/null +++ b/master/abort__on__ebadf_8hh_source.html @@ -0,0 +1,118 @@ + + + + + + + +Seastar: seastar/core/abort_on_ebadf.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
abort_on_ebadf.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2019 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/util/modules.hh>
+
25
+
26namespace seastar {
+
27
+
28SEASTAR_MODULE_EXPORT_BEGIN
+
29
+
34void set_abort_on_ebadf(bool do_abort);
+
35
+ +
39
+
40SEASTAR_MODULE_EXPORT_END
+
41
+
42}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
void set_abort_on_ebadf(bool do_abort)
+
bool is_abort_on_ebadf_enabled()
+
+ + + + diff --git a/master/abort__on__expiry_8hh_source.html b/master/abort__on__expiry_8hh_source.html new file mode 100644 index 000000000..820747d17 --- /dev/null +++ b/master/abort__on__expiry_8hh_source.html @@ -0,0 +1,141 @@ + + + + + + + +Seastar: seastar/core/abort_on_expiry.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
abort_on_expiry.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2022 ScyllaDB.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/abort_source.hh>
+
25#include <seastar/core/timer.hh>
+
26#include <seastar/core/lowres_clock.hh>
+
27#include <seastar/util/modules.hh>
+
28
+
29namespace seastar {
+
30
+
33
+
36SEASTAR_MODULE_EXPORT
+
37template<typename Clock = lowres_clock>
+ +
39 timer<Clock> _tr;
+ +
41public:
+
42 using clock = Clock;
+
43 using time_point = typename Clock::time_point;
+
47 abort_on_expiry(time_point timeout) : _tr([this] {
+
48 _as.request_abort();
+
49 }) {
+
50 _tr.arm(timeout);
+
51 }
+ +
53
+ +
56 return _as;
+
57 }
+
58};
+
59
+
61
+
62}
+
Definition: abort_on_expiry.hh:38
+
seastar::abort_source & abort_source()
Definition: abort_on_expiry.hh:55
+
abort_on_expiry(time_point timeout)
Definition: abort_on_expiry.hh:47
+
Definition: abort_source.hh:58
+
void request_abort() noexcept
Definition: abort_source.hh:180
+ +
void arm(time_point until, std::optional< duration > period={}) noexcept
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+ +
+ + + + diff --git a/master/abort__source_8hh_source.html b/master/abort__source_8hh_source.html new file mode 100644 index 000000000..d54e4e7a0 --- /dev/null +++ b/master/abort__source_8hh_source.html @@ -0,0 +1,289 @@ + + + + + + + +Seastar: seastar/core/abort_source.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
abort_source.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2017 ScyllaDB.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/util/modules.hh>
+
25#include <seastar/util/noncopyable_function.hh>
+
26#include <seastar/util/optimized_optional.hh>
+
27#include <seastar/util/std-compat.hh>
+
28
+
29#ifndef SEASTAR_MODULE
+
30#include <boost/intrusive/list.hpp>
+
31#include <exception>
+
32#include <optional>
+
33#include <type_traits>
+
34#include <utility>
+
35#endif
+
36
+
37namespace bi = boost::intrusive;
+
38
+
39namespace seastar {
+
40
+
41SEASTAR_MODULE_EXPORT_BEGIN
+
42
+
45
+
48class abort_requested_exception : public std::exception {
+
49public:
+
50 virtual const char* what() const noexcept override {
+
51 return "abort requested";
+
52 }
+
53};
+
54
+ +
59 using subscription_callback_type = noncopyable_function<void (const std::optional<std::exception_ptr>&) noexcept>;
+ +
61
+
62public:
+
66 class subscription : public bi::list_base_hook<bi::link_mode<bi::auto_unlink>> {
+
67 friend class abort_source;
+
68
+ +
70 bool _aborted = false;
+
71
+ +
73 : _target(std::move(target)) {
+
74 if (!as.abort_requested()) {
+
75 as._subscriptions.push_back(*this);
+
76 }
+
77 }
+
78
+
79 struct naive_cb_tag {}; // to disambiguate constructors
+
80 explicit subscription(naive_cb_tag, abort_source& as, naive_subscription_callback_type naive_cb)
+
81 : _target([cb = std::move(naive_cb)] (const std::optional<std::exception_ptr>&) noexcept { cb(); }) {
+
82 if (!as.abort_requested()) {
+
83 as._subscriptions.push_back(*this);
+
84 }
+
85 }
+
86
+
87 public:
+
93 void on_abort(const std::optional<std::exception_ptr>& ex) noexcept {
+
94 unlink();
+
95 if (!std::exchange(_aborted, true)) {
+
96 _target(ex);
+
97 }
+
98 }
+
99
+
100 public:
+
101 subscription() = default;
+
102
+
103 subscription(subscription&& other) noexcept(std::is_nothrow_move_constructible_v<subscription_callback_type>)
+
104 : _target(std::move(other._target))
+
105 , _aborted(std::exchange(other._aborted, true))
+
106 {
+
107 subscription_list_type::node_algorithms::swap_nodes(other.this_ptr(), this_ptr());
+
108 }
+
109
+
110 subscription& operator=(subscription&& other) noexcept(std::is_nothrow_move_assignable_v<subscription_callback_type>) {
+
111 if (this != &other) {
+
112 _target = std::move(other._target);
+
113 _aborted = std::exchange(other._aborted, true);
+
114 unlink();
+
115 subscription_list_type::node_algorithms::swap_nodes(other.this_ptr(), this_ptr());
+
116 }
+
117 return *this;
+
118 }
+
119
+
120 explicit operator bool() const noexcept {
+
121 return is_linked();
+
122 }
+
123 };
+
124
+
125private:
+
126 using subscription_list_type = bi::list<subscription, bi::constant_time_size<false>>;
+
127 subscription_list_type _subscriptions;
+
128 std::exception_ptr _ex;
+
129
+
130 void do_request_abort(std::optional<std::exception_ptr> ex) noexcept {
+
131 if (_ex) {
+
132 return;
+
133 }
+
134 _ex = ex.value_or(get_default_exception());
+
135 assert(_ex);
+
136 auto subs = std::move(_subscriptions);
+
137 while (!subs.empty()) {
+
138 subscription& s = subs.front();
+
139 s.on_abort(ex);
+
140 }
+
141 }
+
142
+
143public:
+
144 abort_source() = default;
+
145 virtual ~abort_source() = default;
+
146
+
147 abort_source(abort_source&&) = default;
+
148 abort_source& operator=(abort_source&&) = default;
+
149
+
165 template <typename Func>
+
166 requires (std::is_nothrow_invocable_r_v<void, Func, const std::optional<std::exception_ptr>&> ||
+
167 std::is_nothrow_invocable_r_v<void, Func>)
+
168 [[nodiscard]]
+ +
170 if constexpr (std::is_invocable_v<Func, std::exception_ptr>) {
+
171 return { subscription(*this, std::forward<Func>(f)) };
+
172 } else {
+
173 return { subscription(subscription::naive_cb_tag{}, *this, std::forward<Func>(f)) };
+
174 }
+
175 }
+
176
+
180 void request_abort() noexcept {
+
181 do_request_abort(std::nullopt);
+
182 }
+
183
+
187 void request_abort_ex(std::exception_ptr ex) noexcept {
+
188 do_request_abort(std::make_optional(std::move(ex)));
+
189 }
+
190
+
194 template <typename Exception>
+
195 void request_abort_ex(Exception&& e) noexcept {
+
196 do_request_abort(std::make_optional(std::make_exception_ptr(std::forward<Exception>(e))));
+
197 }
+
198
+
200 bool abort_requested() const noexcept {
+
201 return bool(_ex);
+
202 }
+
203
+
204
+
206 void check() const {
+
207 if (abort_requested()) {
+
208 std::rethrow_exception(_ex);
+
209 }
+
210 }
+
211
+
213 const std::exception_ptr& abort_requested_exception_ptr() const noexcept {
+
214 return _ex;
+
215 }
+
216
+
219 virtual std::exception_ptr get_default_exception() const noexcept {
+
220 return make_exception_ptr(abort_requested_exception());
+
221 }
+
222};
+
223
+
225
+
226SEASTAR_MODULE_EXPORT_END
+
227
+
228}
+
229
+
230#if FMT_VERSION < 100000
+
231// fmt v10 introduced formatter for std::exception
+
232template <>
+
233struct fmt::formatter<seastar::abort_requested_exception> : fmt::formatter<string_view> {
+
234 auto format(const seastar::abort_requested_exception& e, fmt::format_context& ctx) const {
+
235 return fmt::format_to(ctx.out(), "{}", e.what());
+
236 }
+
237};
+
238#endif
+
Definition: abort_source.hh:48
+
Definition: abort_source.hh:66
+
void on_abort(const std::optional< std::exception_ptr > &ex) noexcept
Definition: abort_source.hh:93
+
Definition: abort_source.hh:58
+
virtual std::exception_ptr get_default_exception() const noexcept
Definition: abort_source.hh:219
+
const std::exception_ptr & abort_requested_exception_ptr() const noexcept
Returns an exception with which an abort was requested.
Definition: abort_source.hh:213
+
void check() const
Throws a abort_requested_exception if cancellation has been requested.
Definition: abort_source.hh:206
+
void request_abort_ex(std::exception_ptr ex) noexcept
Definition: abort_source.hh:187
+
optimized_optional< subscription > subscribe(Func &&f)
Definition: abort_source.hh:169
+
void request_abort_ex(Exception &&e) noexcept
Definition: abort_source.hh:195
+
void request_abort() noexcept
Definition: abort_source.hh:180
+
bool abort_requested() const noexcept
Returns whether an abort has been requested.
Definition: abort_source.hh:200
+
Definition: optimized_optional.hh:48
+
Definition: stream.hh:127
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: noncopyable_function.hh:37
+ +
+ + + + diff --git a/master/abortable__fifo_8hh_source.html b/master/abortable__fifo_8hh_source.html new file mode 100644 index 000000000..a386a96a9 --- /dev/null +++ b/master/abortable__fifo_8hh_source.html @@ -0,0 +1,298 @@ + + + + + + + +Seastar: seastar/core/abortable_fifo.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
abortable_fifo.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2022 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/abort_source.hh>
+
25#include <seastar/core/future.hh>
+
26#include <seastar/core/chunked_fifo.hh>
+
27#include <seastar/util/modules.hh>
+
28
+
29#ifndef SEASTAR_MODULE
+
30#include <memory>
+
31#include <optional>
+
32#include <type_traits>
+
33#endif
+
34
+
35namespace seastar {
+
36
+
37namespace internal {
+
38
+
39template <typename Aborter, typename T>
+
40concept aborter = std::is_nothrow_invocable_r_v<void, Aborter, T&>;
+
41
+
42// This class satisfies 'aborter' concept and is used by default
+
43template<typename... T>
+
44struct noop_aborter {
+
45 void operator()(T...) noexcept {};
+
46};
+
47
+
48
+
57template <typename T, typename OnAbort = noop_aborter<T>>
+
58requires aborter<OnAbort, T>
+
59class abortable_fifo {
+
60private:
+
61 struct entry {
+
62 std::optional<T> payload; // disengaged means that it's expired
+
63 optimized_optional<abort_source::subscription> sub;
+
64 entry(T&& payload_) : payload(std::move(payload_)) {}
+
65 entry(const T& payload_) : payload(payload_) {}
+
66 entry(T payload_, abortable_fifo& ef, abort_source& as)
+
67 : payload(std::move(payload_))
+
68 , sub(as.subscribe([this, &ef] () noexcept {
+
69 ef._on_abort(*payload);
+
70 payload = std::nullopt;
+
71 --ef._size;
+
72 ef.drop_expired_front();
+
73 })) {}
+
74 entry() = default;
+
75 entry(entry&& x) = delete;
+
76 entry(const entry& x) = delete;
+
77 };
+
78
+
79 // If engaged, represents the first element.
+
80 // This is to avoid large allocations done by chunked_fifo for single-element cases.
+
81 // abortable_fifo is used to implement wait lists in synchronization primitives
+
82 // and in some uses it's common to have at most one waiter.
+
83 std::unique_ptr<entry> _front;
+
84
+
85 // There is an invariant that the front element is never expired.
+
86 chunked_fifo<entry> _list;
+
87 OnAbort _on_abort;
+
88 size_t _size = 0;
+
89
+
90 // Ensures that front() is not expired by dropping expired elements from the front.
+
91 void drop_expired_front() noexcept {
+
92 while (!_list.empty() && !_list.front().payload) {
+
93 _list.pop_front();
+
94 }
+
95 if (_front && !_front->payload) {
+
96 _front.reset();
+
97 }
+
98 }
+
99public:
+
100 abortable_fifo() noexcept = default;
+
101 abortable_fifo(OnAbort on_abort) noexcept(std::is_nothrow_move_constructible_v<OnAbort>) : _on_abort(std::move(on_abort)) {}
+
102
+
103 abortable_fifo(abortable_fifo&& o) noexcept
+
104 : abortable_fifo(std::move(o._on_abort)) {
+
105 // entry objects hold a reference to this so non-empty containers cannot be moved.
+
106 assert(o._size == 0);
+
107 }
+
108
+
109 abortable_fifo& operator=(abortable_fifo&& o) noexcept {
+
110 if (this != &o) {
+
111 this->~abortable_fifo();
+
112 new (this) abortable_fifo(std::move(o));
+
113 }
+
114 return *this;
+
115 }
+
116
+
122 bool empty() const noexcept {
+
123 return _size == 0;
+
124 }
+
125
+
127 explicit operator bool() const noexcept {
+
128 return !empty();
+
129 }
+
130
+
133 T& front() noexcept {
+
134 if (_front) {
+
135 return *_front->payload;
+
136 }
+
137 return *_list.front().payload;
+
138 }
+
139
+
142 const T& front() const noexcept {
+
143 if (_front) {
+
144 return *_front->payload;
+
145 }
+
146 return *_list.front().payload;
+
147 }
+
148
+
152 size_t size() const noexcept {
+
153 return _size;
+
154 }
+
155
+
160 void reserve(size_t size) {
+
161 return _list.reserve(size);
+
162 }
+
163
+
166 void push_back(const T& payload) {
+
167 if (_size == 0) {
+
168 _front = std::make_unique<entry>(payload);
+
169 } else {
+
170 _list.emplace_back(payload);
+
171 }
+
172 ++_size;
+
173 }
+
174
+
177 void push_back(T&& payload) {
+
178 if (_size == 0) {
+
179 _front = std::make_unique<entry>(std::move(payload));
+
180 } else {
+
181 _list.emplace_back(std::move(payload));
+
182 }
+
183 ++_size;
+
184 }
+
185
+
188 void push_back(T&& payload, abort_source& as) {
+
189 if (as.abort_requested()) {
+
190 _on_abort(payload);
+
191 return;
+
192 }
+
193 if (_size == 0) {
+
194 _front = std::make_unique<entry>(std::move(payload), *this, as);
+
195 } else {
+
196 _list.emplace_back(std::move(payload), *this, as);
+
197 }
+
198 ++_size;
+
199 }
+
200
+
202 template<typename... U>
+
203 T& emplace_back(U&&... args) {
+
204 if (_size == 0) {
+
205 _front = std::make_unique<entry>();
+
206 _front->payload.emplace(std::forward<U>(args)...);
+
207 _size = 1;
+
208 return *_front->payload;
+
209 } else {
+
210 _list.emplace_back();
+
211 _list.back().payload.emplace(std::forward<U>(args)...);
+
212 ++_size;
+
213 return *_list.back().payload;
+
214 }
+
215 }
+
216
+
222 void make_back_abortable(abort_source& as) {
+
223 entry* e = _front.get();
+
224 if (!_list.empty()) {
+
225 e = &_list.back();
+
226 }
+
227 assert(!e->sub);
+
228 auto aborter = [this, e] () noexcept {
+
229 _on_abort(*e->payload);
+
230 e->payload = std::nullopt;
+
231 --_size;
+
232 drop_expired_front();
+
233 };
+
234 if (as.abort_requested()) {
+
235 aborter();
+
236 return;
+
237 }
+
238 e->sub = as.subscribe(std::move(aborter));
+
239 }
+
240
+
243 void pop_front() noexcept {
+
244 if (_front) {
+
245 _front.reset();
+
246 } else {
+
247 _list.pop_front();
+
248 }
+
249 --_size;
+
250 drop_expired_front();
+
251 }
+
252};
+
253
+
254}
+
255}
+
256
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
STL namespace.
+
+ + + + diff --git a/master/alien_8hh.html b/master/alien_8hh.html new file mode 100644 index 000000000..188a70e88 --- /dev/null +++ b/master/alien_8hh.html @@ -0,0 +1,154 @@ + + + + + + + +Seastar: seastar/core/alien.hh File Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
alien.hh File Reference
+
+
+
#include <atomic>
+#include <concepts>
+#include <future>
+#include <memory>
+#include <type_traits>
+#include <boost/lockfree/queue.hpp>
+#include <seastar/core/future.hh>
+#include <seastar/core/cacheline.hh>
+#include <seastar/core/sstring.hh>
+#include <seastar/core/metrics_registration.hh>
+#include <seastar/util/modules.hh>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + +

+Classes

class  seastar::alien::message_queue
 
struct  seastar::alien::internal::qs_deleter
 
class  seastar::alien::instance
 
struct  seastar::alien::internal::return_type_of< Func, bool >
 
struct  seastar::alien::internal::return_type_of< Func, false >
 
+ + + + + + + +

+Namespaces

namespace  seastar
 Seastar API namespace.
 
namespace  seastar::alien
 Integration with non-seastar applications.
 
+ + + + + + + +

+Typedefs

+template<typename Func >
using seastar::alien::internal::return_value_t = typename futurize< std::invoke_result_t< Func > >::value_type
 
+template<typename Func >
using seastar::alien::internal::return_type_t = typename return_type_of< Func >::type
 
+ + + + + + + + + + + + + +

+Functions

template<typename Func >
+requires std::is_nothrow_invocable_r_v<void, Func>
void seastar::alien::run_on (instance &instance, unsigned shard, Func func)
 
template<typename Func >
void seastar::alien::run_on (unsigned shard, Func func)
 
template<std::invocable Func, typename T = internal::return_type_t<Func>>
std::future< T > seastar::alien::submit_to (instance &instance, unsigned shard, Func func)
 
template<typename Func , typename T = internal::return_type_t<Func>>
std::future< T > seastar::alien::submit_to (unsigned shard, Func func)
 
+ + + +

+Variables

+instance * seastar::alien::internal::default_instance
 
+
+ + + + diff --git a/master/alien_8hh_source.html b/master/alien_8hh_source.html new file mode 100644 index 000000000..ac1a14c3e --- /dev/null +++ b/master/alien_8hh_source.html @@ -0,0 +1,279 @@ + + + + + + + +Seastar: seastar/core/alien.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
alien.hh
+
+
+Go to the documentation of this file.
1// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
+
2/*
+
3 * This file is open source software, licensed to you under the terms
+
4 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
5 * distributed with this work for additional information regarding copyright
+
6 * ownership. You may not use this file except in compliance with the License.
+
7 *
+
8 * You may obtain a copy of the License at
+
9 *
+
10 * http://www.apache.org/licenses/LICENSE-2.0
+
11 *
+
12 * Unless required by applicable law or agreed to in writing,
+
13 * software distributed under the License is distributed on an
+
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
15 * KIND, either express or implied. See the License for the
+
16 * specific language governing permissions and limitations
+
17 * under the License.
+
18 */
+
19/*
+
20 * Copyright (C) 2018 Red Hat
+
21 */
+
22
+
23#pragma once
+
24
+
25#ifndef SEASTAR_MODULE
+
26#include <atomic>
+
27#include <concepts>
+
28#include <future>
+
29#include <memory>
+
30#include <type_traits>
+
31#include <boost/lockfree/queue.hpp>
+
32#endif
+
33
+
34#include <seastar/core/future.hh>
+
35#include <seastar/core/cacheline.hh>
+
36#include <seastar/core/sstring.hh>
+ +
38#include <seastar/util/modules.hh>
+
39
+
41
+
42namespace seastar {
+
43
+
44SEASTAR_MODULE_EXPORT
+
45class reactor;
+
46
+
48namespace alien {
+
49
+ +
51 static constexpr size_t batch_size = 128;
+
52 static constexpr size_t prefetch_cnt = 2;
+
53 struct work_item;
+
54 struct lf_queue_remote {
+
55 reactor* remote;
+
56 };
+
57 using lf_queue_base = boost::lockfree::queue<work_item*>;
+
58 // use inheritence to control placement order
+
59 struct lf_queue : lf_queue_remote, lf_queue_base {
+
60 lf_queue(reactor* remote)
+
61 : lf_queue_remote{remote}, lf_queue_base{batch_size} {}
+
62 void maybe_wakeup();
+
63 } _pending;
+
64 struct alignas(seastar::cache_line_size) {
+
65 std::atomic<size_t> value{0};
+
66 } _sent;
+
67 // keep this between two structures with statistics
+
68 // this makes sure that they have at least one cache line
+
69 // between them, so hw prefetcher will not accidentally prefetch
+
70 // cache line used by another cpu.
+ +
72 struct alignas(seastar::cache_line_size) {
+
73 size_t _received = 0;
+
74 size_t _last_rcv_batch = 0;
+
75 };
+
76 struct work_item {
+
77 virtual ~work_item() = default;
+
78 virtual void process() = 0;
+
79 };
+
80 template <typename Func>
+
81 struct async_work_item : work_item {
+
82 Func _func;
+
83 async_work_item(Func&& func) : _func(std::move(func)) {}
+
84 void process() override {
+
85 _func();
+
86 }
+
87 };
+
88 template<typename Func>
+
89 size_t process_queue(lf_queue& q, Func process);
+
90 void submit_item(std::unique_ptr<work_item> wi);
+
91public:
+ +
93 void start();
+
94 void stop();
+
95 template <typename Func>
+
96 void submit(Func&& func) {
+
97 auto wi = std::make_unique<async_work_item<Func>>(std::forward<Func>(func));
+
98 submit_item(std::move(wi));
+
99 }
+
100 size_t process_incoming();
+
101 bool pure_poll_rx() const;
+
102};
+
103
+
104namespace internal {
+
105
+ +
107 unsigned count;
+
108 qs_deleter(unsigned n = 0) : count(n) {}
+
109 void operator()(message_queue* qs) const;
+
110};
+
111
+
112}
+
113
+
118SEASTAR_MODULE_EXPORT
+
119class instance {
+
120 using qs = std::unique_ptr<message_queue[], internal::qs_deleter>;
+
121public:
+
122 static qs create_qs(const std::vector<reactor*>& reactors);
+
123 qs _qs;
+
124 bool poll_queues();
+
125 bool pure_poll_queues();
+
126};
+
127
+
128namespace internal {
+
129
+
130extern instance* default_instance;
+
131
+
132}
+
133
+
146SEASTAR_MODULE_EXPORT
+
147template <typename Func>
+
148requires std::is_nothrow_invocable_r_v<void, Func>
+
149void run_on(instance& instance, unsigned shard, Func func) {
+
150 instance._qs[shard].submit(std::move(func));
+
151}
+
152
+
164template <typename Func>
+
165[[deprecated("Use run_on(instance&, unsigned shard, Func) instead")]]
+
166void run_on(unsigned shard, Func func) {
+
167 run_on(*internal::default_instance, shard, std::move(func));
+
168}
+
169
+
170namespace internal {
+
171template<typename Func>
+
172using return_value_t = typename futurize<std::invoke_result_t<Func>>::value_type;
+
173
+
174template<typename Func,
+
175 bool = std::is_empty_v<return_value_t<Func>>>
+ +
177 using type = void;
+
178 static void set(std::promise<void>& p, return_value_t<Func>&&) {
+
179 p.set_value();
+
180 }
+
181};
+
182template<typename Func>
+
183struct return_type_of<Func, false> {
+
184 using return_tuple_t = typename futurize<std::invoke_result_t<Func>>::tuple_type;
+
185 using type = std::tuple_element_t<0, return_tuple_t>;
+
186 static void set(std::promise<type>& p, return_value_t<Func>&& t) {
+
187 p.set_value(std::move(t));
+
188 }
+
189};
+
190template <typename Func> using return_type_t = typename return_type_of<Func>::type;
+
191}
+
192
+
202SEASTAR_MODULE_EXPORT
+
203template<std::invocable Func, typename T = internal::return_type_t<Func>>
+
204std::future<T> submit_to(instance& instance, unsigned shard, Func func) {
+
205 std::promise<T> pr;
+
206 auto fut = pr.get_future();
+
207 run_on(instance, shard, [pr = std::move(pr), func = std::move(func)] () mutable noexcept {
+
208 // std::future returned via std::promise above.
+
209 (void)func().then_wrapped([pr = std::move(pr)] (auto&& result) mutable {
+
210 try {
+
211 internal::return_type_of<Func>::set(pr, result.get());
+
212 } catch (...) {
+
213 pr.set_exception(std::current_exception());
+
214 }
+
215 });
+
216 });
+
217 return fut;
+
218}
+
219
+
228template<typename Func, typename T = internal::return_type_t<Func>>
+
229[[deprecated("Use submit_to(instance&, unsigned shard, Func) instead.")]]
+
230std::future<T> submit_to(unsigned shard, Func func) {
+
231 return submit_to(*internal::default_instance, shard, std::move(func));
+
232}
+
233
+
234}
+
235}
+
Definition: alien.hh:119
+
Definition: alien.hh:50
+
holds the metric definition.
Definition: metrics_registration.hh:94
+
Definition: reactor.hh:156
+
holds the metric_groups definition needed by class that reports metrics
+
void run_on(instance &instance, unsigned shard, Func func)
Definition: alien.hh:149
+
std::future< T > submit_to(instance &instance, unsigned shard, Func func)
Definition: alien.hh:204
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: alien.hh:106
+ +
Converts a type to a future type, if it isn't already.
Definition: future.hh:1853
+
+ + + + diff --git a/master/align_8hh_source.html b/master/align_8hh_source.html new file mode 100644 index 000000000..5635ebe40 --- /dev/null +++ b/master/align_8hh_source.html @@ -0,0 +1,142 @@ + + + + + + + +Seastar: seastar/core/align.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
align.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <seastar/util/modules.hh>
+
26#include <cstdint>
+
27#include <cstdlib>
+
28#endif
+
29
+
30namespace seastar {
+
31
+
32SEASTAR_MODULE_EXPORT_BEGIN
+
33
+
34template <typename T>
+
35inline constexpr
+
36T align_up(T v, T align) {
+
37 return (v + align - 1) & ~(align - 1);
+
38}
+
39
+
40template <typename T>
+
41inline constexpr
+
42T* align_up(T* v, size_t align) {
+
43 static_assert(sizeof(T) == 1, "align byte pointers only");
+
44 return reinterpret_cast<T*>(align_up(reinterpret_cast<uintptr_t>(v), align));
+
45}
+
46
+
47template <typename T>
+
48inline constexpr
+
49T align_down(T v, T align) {
+
50 return v & ~(align - 1);
+
51}
+
52
+
53template <typename T>
+
54inline constexpr
+
55T* align_down(T* v, size_t align) {
+
56 static_assert(sizeof(T) == 1, "align byte pointers only");
+
57 return reinterpret_cast<T*>(align_down(reinterpret_cast<uintptr_t>(v), align));
+
58}
+
59
+
60SEASTAR_MODULE_EXPORT_END
+
61
+
62}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/aligned__buffer_8hh_source.html b/master/aligned__buffer_8hh_source.html new file mode 100644 index 000000000..05e29f361 --- /dev/null +++ b/master/aligned__buffer_8hh_source.html @@ -0,0 +1,131 @@ + + + + + + + +Seastar: seastar/core/aligned_buffer.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
aligned_buffer.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2016 ScyllaDB.
+
20 */
+
21#pragma once
+
22#ifndef SEASTAR_MODULE
+
23#include <stdlib.h>
+
24#include <memory>
+
25#include <seastar/util/modules.hh>
+
26#endif
+
27
+
28namespace seastar {
+
29
+
30namespace internal {
+
31void* allocate_aligned_buffer_impl(size_t size, size_t align);
+
32}
+
33
+
34SEASTAR_MODULE_EXPORT_BEGIN
+
35
+ +
37 void operator()(void* p) { ::free(p); }
+
38};
+
39
+
40template <typename CharType>
+
41inline
+
42std::unique_ptr<CharType[], free_deleter> allocate_aligned_buffer(size_t size, size_t align) {
+
43 static_assert(sizeof(CharType) == 1, "must allocate byte type");
+
44 void* ret = internal::allocate_aligned_buffer_impl(size, align);
+
45 return std::unique_ptr<CharType[], free_deleter>(reinterpret_cast<CharType *>(ret));
+
46}
+
47
+
48SEASTAR_MODULE_EXPORT_END
+
49
+
50}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: aligned_buffer.hh:36
+
+ + + + diff --git a/master/all_8hh_source.html b/master/all_8hh_source.html new file mode 100644 index 000000000..8b6a1bbeb --- /dev/null +++ b/master/all_8hh_source.html @@ -0,0 +1,264 @@ + + + + + + + +Seastar: seastar/coroutine/all.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
all.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2021-present ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <cstddef>
+
25#include <concepts>
+
26#include <tuple>
+
27#include <seastar/core/coroutine.hh>
+
28
+
29namespace seastar::coroutine {
+
30
+
31template <typename Future>
+
32constexpr inline bool is_future_v = is_future<Future>::value;
+
33
+
34template <typename Future>
+
35concept future_type = is_future_v<Future>;
+
36
+
37namespace internal {
+
38
+
39// Given a bunch of futures, find the indexes of the ones that are not avoid
+
40// and store them in member type `type` as an std::integer_sequence.
+
41//
+
42// `IndexSequence` and `current` are intermediates used for recursion.
+
43template <typename IndexSequence, size_t current, typename... Futures>
+
44struct index_sequence_for_non_void_futures_helper;
+
45
+
46// Terminate recursion be returning the accumulated `IndexSequence`
+
47template <typename IndexSequence, size_t current>
+
48struct index_sequence_for_non_void_futures_helper<IndexSequence, current> {
+
49 using type = IndexSequence;
+
50};
+
51
+
52// Process a future<T> by adding it to the current IndexSequence and recursing
+
53template <size_t... Existing, size_t current, typename T, typename... Futures>
+
54struct index_sequence_for_non_void_futures_helper<std::integer_sequence<size_t, Existing...>, current, future<T>, Futures...> {
+
55 using type = typename index_sequence_for_non_void_futures_helper<std::integer_sequence<size_t, Existing..., current>, current + 1, Futures...>::type;
+
56};
+
57
+
58// Process a future<void> by ignoring it and recursing
+
59template <size_t... Existing, size_t current, typename... Futures>
+
60struct index_sequence_for_non_void_futures_helper<std::integer_sequence<size_t, Existing...>, current, future<>, Futures...> {
+
61 using type = typename index_sequence_for_non_void_futures_helper<std::integer_sequence<size_t, Existing...>, current + 1, Futures...>::type;
+
62};
+
63
+
64// Simple interface for the above.
+
65template <typename... Futures>
+
66using index_sequence_for_non_void_futures = typename index_sequence_for_non_void_futures_helper<std::integer_sequence<size_t>, 0, Futures...>::type;
+
67
+
68// Given a tuple of futures, return a tuple of the value types, excluding future<void>.
+
69template <typename IndexSequence, typename FutureTuple>
+
70struct value_tuple_for_non_void_futures_helper;
+
71
+
72template <size_t... Idx, typename FutureTuple>
+
73struct value_tuple_for_non_void_futures_helper<std::integer_sequence<size_t, Idx...>, FutureTuple> {
+
74 using type = std::tuple<typename std::tuple_element_t<Idx, FutureTuple>::value_type...>;
+
75};
+
76
+
77// Simple interface for the above
+
78template <typename... Futures>
+
79using value_tuple_for_non_void_futures = typename value_tuple_for_non_void_futures_helper<index_sequence_for_non_void_futures<Futures...>, std::tuple<Futures...>>::type;
+
80
+
81}
+
82
+
115template <typename... Futures>
+
116requires (sizeof ...(Futures) > 0)
+
117class [[nodiscard("must co_await an all() object")]] all {
+
118 using tuple = std::tuple<Futures...>;
+
119 using value_tuple = typename internal::value_tuple_for_non_void_futures<Futures...>;
+
120 struct awaiter;
+
121 template <size_t idx>
+
122 struct intermediate_task final : continuation_base_from_future_t<std::tuple_element_t<idx, tuple>> {
+
123 awaiter& container;
+
124 explicit intermediate_task(awaiter& container) : container(container) {}
+
125 virtual void run_and_dispose() noexcept {
+
126 using value_type = typename std::tuple_element_t<idx, tuple>::value_type;
+
127 if (__builtin_expect(this->_state.failed(), false)) {
+ +
129 std::get<idx>(container.state._futures) = futurator::make_exception_future(std::move(this->_state).get_exception());
+
130 } else {
+
131 if constexpr (std::same_as<std::tuple_element_t<idx, tuple>, future<>>) {
+
132 std::get<idx>(container.state._futures) = make_ready_future<>();
+
133 } else {
+
134 std::get<idx>(container.state._futures) = make_ready_future<value_type>(std::move(this->_state).get());
+
135 }
+
136 }
+
137 awaiter& c = container;
+
138 this->~intermediate_task();
+
139 c.template process<idx+1>();
+
140 }
+
141 };
+
142 template <typename IndexSequence>
+
143 struct generate_aligned_union;
+
144 template <size_t... idx>
+
145 struct generate_aligned_union<std::integer_sequence<size_t, idx...>> {
+
146 static constexpr std::size_t alignment_value = std::max({alignof(intermediate_task<idx>)...});
+
147 using type = std::byte[std::max({sizeof(intermediate_task<idx>)...})];
+
148 };
+
149 using continuation_storage = generate_aligned_union<std::make_index_sequence<std::tuple_size_v<tuple>>>;
+
150 using coroutine_handle_t = std::coroutine_handle<void>;
+
151private:
+
152 tuple _futures;
+
153private:
+
154 struct awaiter {
+
155 all& state;
+
156 alignas(continuation_storage::alignment_value) typename continuation_storage::type _continuation_storage;
+
157 coroutine_handle_t when_ready;
+
158 awaiter(all& state) : state(state) {}
+
159 bool await_ready() const {
+
160 return std::apply([] (const Futures&... futures) {
+
161 return (... && futures.available());
+
162 }, state._futures);
+
163 }
+
164 void await_suspend(coroutine_handle_t h) {
+
165 when_ready = h;
+
166 process<0>();
+
167 }
+
168 value_tuple await_resume() {
+
169 std::apply([] (Futures&... futures) {
+
170 std::exception_ptr e;
+
171 // Call get_exception for every failed future, to avoid exceptional future
+
172 // ignored warnings.
+
173 (void)(..., (futures.failed() ? (e = futures.get_exception(), 0) : 0));
+
174 if (e) {
+
175 std::rethrow_exception(std::move(e));
+
176 }
+
177 }, state._futures);
+
178 // This immediately-invoked lambda is used to materialize the indexes
+
179 // of non-void futures in the tuple.
+
180 return [&] <size_t... Idx> (std::integer_sequence<size_t, Idx...>) {
+
181 return value_tuple(std::get<Idx>(state._futures).get()...);
+
182 } (internal::index_sequence_for_non_void_futures<Futures...>());
+
183 }
+
184 template <unsigned idx>
+
185 void process() {
+
186 if constexpr (idx == sizeof...(Futures)) {
+
187 when_ready.resume();
+
188 } else {
+
189 if (!std::get<idx>(state._futures).available()) {
+
190 auto task = new (&_continuation_storage) intermediate_task<idx>(*this);
+
191 seastar::internal::set_callback(std::move(std::get<idx>(state._futures)), task);
+
192 } else {
+
193 process<idx + 1>();
+
194 }
+
195 }
+
196 }
+
197 };
+
198public:
+
199 template <typename... Func>
+
200 requires (... && std::invocable<Func>) && (... && future_type<std::invoke_result_t<Func>>)
+
201 explicit all(Func&&... funcs)
+
202 : _futures(futurize_invoke(funcs)...) {
+
203 }
+
204 awaiter operator co_await() { return awaiter{*this}; }
+
205};
+
206
+
207template <typename FirstFunc, typename... MoreFuncs>
+
208explicit all(FirstFunc&&, MoreFuncs&&...) -> all<std::invoke_result_t<FirstFunc>,
+
209 std::invoke_result_t<MoreFuncs>...>;
+
210
+
211}
+
Definition: all.hh:117
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Definition: task.hh:34
+
future< T > make_exception_future(std::exception_ptr &&value) noexcept
Creates a future in an available, failed state.
Definition: future.hh:1949
+
STL namespace.
+
Converts a type to a future type, if it isn't already.
Definition: future.hh:1853
+
+ + + + diff --git a/master/alloc__failure__injector_8hh_source.html b/master/alloc__failure__injector_8hh_source.html new file mode 100644 index 000000000..8654f6ee5 --- /dev/null +++ b/master/alloc__failure__injector_8hh_source.html @@ -0,0 +1,202 @@ + + + + + + + +Seastar: seastar/util/alloc_failure_injector.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
alloc_failure_injector.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2017 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include "modules.hh"
+
25#ifndef SEASTAR_MODULE
+
26#include <limits>
+
27#include <cstdint>
+
28#include <functional>
+
29#endif
+
30#include <seastar/util/noncopyable_function.hh>
+
31#include <seastar/util/critical_alloc_section.hh>
+
32#include <seastar/util/modules.hh>
+
33
+
34namespace seastar {
+
35namespace memory {
+
36
+
53SEASTAR_MODULE_EXPORT
+ +
55 uint64_t _alloc_count = 0;
+
56 uint64_t _fail_at = std::numeric_limits<uint64_t>::max();
+
57 noncopyable_function<void()> _on_alloc_failure = [] { throw std::bad_alloc(); };
+
58 bool _failed = false;
+
59private:
+
60 void fail();
+
61public:
+ +
64 if (is_critical_alloc_section()) {
+
65 return;
+
66 }
+
67 if (_alloc_count >= _fail_at) {
+
68 fail();
+
69 }
+
70 ++_alloc_count;
+
71 }
+
72
+
74 uint64_t alloc_count() const {
+
75 return _alloc_count;
+
76 }
+
77
+
79 void fail_after(uint64_t count) {
+
80 _fail_at = _alloc_count + count;
+
81 _failed = false;
+
82 }
+
83
+
85 void cancel() {
+
86 _fail_at = std::numeric_limits<uint64_t>::max();
+
87 }
+
88
+
90 bool failed() const {
+
91 return _failed;
+
92 }
+
93
+
95 void run_with_callback(noncopyable_function<void()> callback, noncopyable_function<void()> to_run);
+
96};
+
97
+
99extern thread_local alloc_failure_injector the_alloc_failure_injector;
+
101
+
103SEASTAR_MODULE_EXPORT
+
104inline
+ +
106 return the_alloc_failure_injector;
+
107}
+
108
+
109#ifdef SEASTAR_ENABLE_ALLOC_FAILURE_INJECTION
+
110
+
111#ifdef SEASTAR_DEFAULT_ALLOCATOR
+
112#error SEASTAR_ENABLE_ALLOC_FAILURE_INJECTION is not supported when using SEASTAR_DEFAULT_ALLOCATOR
+
113#endif
+
114
+
115#endif
+
116
+
117
+
118struct [[deprecated("Use scoped_critical_section instead")]] disable_failure_guard {
+ +
120};
+
121
+
123SEASTAR_MODULE_EXPORT
+
124inline
+ +
126#ifdef SEASTAR_ENABLE_ALLOC_FAILURE_INJECTION
+ +
128#endif
+
129}
+
130
+
136SEASTAR_MODULE_EXPORT
+ +
138
+
139}
+
140}
+
Definition: alloc_failure_injector.hh:54
+
void fail_after(uint64_t count)
Will cause count-th allocation point from now to fail, counting from 0.
Definition: alloc_failure_injector.hh:79
+
bool failed() const
Returns true iff allocation was failed since last fail_after().
Definition: alloc_failure_injector.hh:90
+
void on_alloc_point()
Marks a point in code which should be considered for failure injection.
Definition: alloc_failure_injector.hh:63
+
void cancel()
Cancels the failure scheduled by fail_after().
Definition: alloc_failure_injector.hh:85
+
uint64_t alloc_count() const
Counts encountered allocation points which didn't fail and didn't have failure suppressed.
Definition: alloc_failure_injector.hh:74
+
void run_with_callback(noncopyable_function< void()> callback, noncopyable_function< void()> to_run)
Runs given function with a custom failure action instead of the default std::bad_alloc throw.
+
void with_allocation_failures(noncopyable_function< void()> func)
+
void on_alloc_point()
Marks a point in code which should be considered for failure injection.
Definition: alloc_failure_injector.hh:125
+
alloc_failure_injector & local_failure_injector()
Return the shard-local alloc_failure_injector instance.
Definition: alloc_failure_injector.hh:105
+
Definition: alloc_failure_injector.hh:118
+
Definition: critical_alloc_section.hh:80
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: noncopyable_function.hh:37
+
+ + + + diff --git a/master/annotated.html b/master/annotated.html new file mode 100644 index 000000000..4b4c0fd65 --- /dev/null +++ b/master/annotated.html @@ -0,0 +1,782 @@ + + + + + + + +Seastar: Class List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 12345]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Nfmt
 Nperf_tests
 NseastarSeastar API namespace
 NstdSTL namespace
 Clinux_perf_event
 Csampler
+
+
+ + + + diff --git a/master/api-level_8hh_source.html b/master/api-level_8hh_source.html new file mode 100644 index 000000000..dc420b5b1 --- /dev/null +++ b/master/api-level_8hh_source.html @@ -0,0 +1,133 @@ + + + + + + + +Seastar: seastar/core/internal/api-level.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
api-level.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2019 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24// For IDEs that don't see SEASTAR_API_LEVEL, generate a nice default
+
25#ifndef SEASTAR_API_LEVEL
+
26#define SEASTAR_API_LEVEL 7
+
27#endif
+
28
+
29#if SEASTAR_API_LEVEL == 7
+
30#define SEASTAR_INCLUDE_API_V7 inline
+
31#else
+
32#define SEASTAR_INCLUDE_API_V7
+
33#endif
+
34
+
35#if SEASTAR_API_LEVEL == 6
+
36#define SEASTAR_INCLUDE_API_V6 inline
+
37#else
+
38#define SEASTAR_INCLUDE_API_V6
+
39#endif
+
40
+
41
+
42// Declare them here so we don't have to use the macros everywhere
+
43namespace seastar {
+
44 SEASTAR_INCLUDE_API_V6 namespace api_v6 {
+
45 inline namespace and_newer {
+
46 }
+
47 }
+
48 SEASTAR_INCLUDE_API_V7 namespace api_v7 {
+
49 inline namespace and_newer {
+
50 using namespace api_v6::and_newer;
+
51 }
+
52 }
+
53}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/api_8hh_source.html b/master/api_8hh_source.html new file mode 100644 index 000000000..5948d0171 --- /dev/null +++ b/master/api_8hh_source.html @@ -0,0 +1,459 @@ + + + + + + + +Seastar: seastar/net/api.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
api.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <chrono>
+
26#include <memory>
+
27#include <vector>
+
28#include <cstring>
+
29#include <sys/types.h>
+
30#endif
+
31
+
32#include <seastar/core/future.hh>
+
33#include <seastar/net/byteorder.hh>
+
34#include <seastar/net/socket_defs.hh>
+
35#include <seastar/net/packet.hh>
+
36#include <seastar/core/internal/api-level.hh>
+
37#include <seastar/core/temporary_buffer.hh>
+
38#include <seastar/core/file-types.hh>
+
39#include <seastar/core/iostream.hh>
+
40#include <seastar/util/std-compat.hh>
+
41#include <seastar/util/program-options.hh>
+
42#include <seastar/util/modules.hh>
+
43
+
44namespace seastar {
+
45
+
46inline
+
47bool is_ip_unspecified(const ipv4_addr& addr) noexcept {
+
48 return addr.is_ip_unspecified();
+
49}
+
50
+
51inline
+
52bool is_port_unspecified(const ipv4_addr& addr) noexcept {
+
53 return addr.is_port_unspecified();
+
54}
+
55
+
56inline
+
57socket_address make_ipv4_address(const ipv4_addr& addr) noexcept {
+
58 return socket_address(addr);
+
59}
+
60
+
61inline
+
62socket_address make_ipv4_address(uint32_t ip, uint16_t port) noexcept {
+
63 return make_ipv4_address(ipv4_addr(ip, port));
+
64}
+
65
+
66namespace net {
+
67
+
68// see linux tcp(7) for parameter explanation
+ +
70 std::chrono::seconds idle; // TCP_KEEPIDLE
+
71 std::chrono::seconds interval; // TCP_KEEPINTVL
+
72 unsigned count; // TCP_KEEPCNT
+
73};
+
74
+
75// see linux sctp(7) for parameter explanation
+ +
77 std::chrono::seconds interval; // spp_hbinterval
+
78 unsigned count; // spp_pathmaxrt
+
79};
+
80
+
81using keepalive_params = std::variant<tcp_keepalive_params, sctp_keepalive_params>;
+
82
+
84class connected_socket_impl;
+
85class socket_impl;
+
86
+
87class server_socket_impl;
+
88class datagram_channel_impl;
+
89class get_impl;
+
91
+ +
93public:
+
94 virtual ~datagram_impl() {};
+
95 virtual socket_address get_src() = 0;
+
96 virtual socket_address get_dst() = 0;
+
97 virtual uint16_t get_dst_port() = 0;
+
98 virtual packet& get_data() = 0;
+
99};
+
100
+ +
102
+
103class datagram final {
+
104private:
+
105 std::unique_ptr<datagram_impl> _impl;
+
106public:
+
107 datagram(std::unique_ptr<datagram_impl>&& impl) noexcept : _impl(std::move(impl)) {};
+
108 socket_address get_src() { return _impl->get_src(); }
+
109 socket_address get_dst() { return _impl->get_dst(); }
+
110 uint16_t get_dst_port() { return _impl->get_dst_port(); }
+
111 packet& get_data() { return _impl->get_data(); }
+
112};
+
113
+
114using udp_datagram = datagram;
+
115
+ +
117private:
+
118 std::unique_ptr<datagram_channel_impl> _impl;
+
119public:
+
120 datagram_channel() noexcept;
+
121 datagram_channel(std::unique_ptr<datagram_channel_impl>) noexcept;
+ +
123
+ +
125 datagram_channel& operator=(datagram_channel&&) noexcept;
+
126
+
127 socket_address local_address() const;
+
128
+
129 future<datagram> receive();
+
130 future<> send(const socket_address& dst, const char* msg);
+
131 future<> send(const socket_address& dst, packet p);
+
132 bool is_closed() const;
+ + +
142 void close();
+
143};
+
144
+ +
146
+
147class network_interface_impl;
+
148
+
149} /* namespace net */
+
150
+
153
+ +
162 unsigned buffer_size = 8192;
+
166 unsigned min_buffer_size = 512;
+
170 unsigned max_buffer_size = 128 * 1024;
+
171};
+
172
+ +
175 sstring subject;
+
176 sstring issuer;
+
177};
+
178
+ +
184 friend class net::get_impl;
+
185 std::unique_ptr<net::connected_socket_impl> _csi;
+
186public:
+ + +
190
+
192 explicit connected_socket(std::unique_ptr<net::connected_socket_impl> csi) noexcept;
+ +
197 connected_socket& operator=(connected_socket&& cs) noexcept;
+ +
208 output_stream<char> output(size_t buffer_size = 8192);
+
210 void set_nodelay(bool nodelay);
+
214 bool get_nodelay() const;
+
216 void set_keepalive(bool keepalive);
+
219 bool get_keepalive() const;
+
221 void set_keepalive_parameters(const net::keepalive_params& p);
+
223 net::keepalive_params get_keepalive_parameters() const;
+
227 void set_sockopt(int level, int optname, const void* data, size_t len);
+
231 int get_sockopt(int level, int optname, void* data, size_t len) const;
+ + +
236
+ + +
257 explicit operator bool() const noexcept {
+
258 return static_cast<bool>(_csi);
+
259 }
+ +
273};
+
275
+
278
+
283class socket {
+
284 std::unique_ptr<net::socket_impl> _si;
+
285public:
+
286 socket() noexcept = default;
+
287 ~socket();
+
288
+
290 explicit socket(std::unique_ptr<net::socket_impl> si) noexcept;
+
293 socket(socket&&) noexcept;
+
295 socket& operator=(socket&&) noexcept;
+
296
+
300 future<connected_socket> connect(socket_address sa, socket_address local = {}, transport proto = transport::TCP);
+
301
+
303 void set_reuseaddr(bool reuseaddr);
+
306 bool get_reuseaddr() const;
+
311 void shutdown();
+
312};
+
313
+
315
+
318
+ + + +
323};
+
324
+ +
327 std::unique_ptr<net::server_socket_impl> _ssi;
+
328 bool _aborted = false;
+
329public:
+
330 enum class load_balancing_algorithm {
+
331 // This algorithm tries to distribute all connections equally between all shards.
+
332 // It does this by sending new connections to a shard with smallest amount of connections.
+
333 connection_distribution,
+
334 // This algorithm distributes new connection based on peer's tcp port. Destination shard
+
335 // is calculated as a port number modulo number of shards. This allows a client to connect
+
336 // to a specific shard in a server given it knows how many shards server has by choosing
+
337 // src port number accordingly.
+
338 port,
+
339 // This algorithm distributes all new connections to listen_options::fixed_cpu shard only.
+
340 fixed,
+
341 default_ = connection_distribution
+
342 };
+
344 server_socket() noexcept;
+
346 explicit server_socket(std::unique_ptr<net::server_socket_impl> ssi) noexcept;
+ +
350 ~server_socket();
+
352 server_socket& operator=(server_socket&& cs) noexcept;
+
353
+ +
362
+ +
368
+ +
377
+
385 explicit operator bool() const noexcept {
+
386 return static_cast<bool>(_ssi);
+
387 }
+
388};
+
389
+
391
+ +
393 bool reuse_address = false;
+
394 server_socket::load_balancing_algorithm lba = server_socket::load_balancing_algorithm::default_;
+
395 transport proto = transport::TCP;
+
396 int listen_backlog = 100;
+
397 unsigned fixed_cpu = 0u;
+
398 std::optional<file_permissions> unix_domain_socket_permissions;
+
399 void set_fixed_cpu(unsigned cpu) {
+
400 lba = server_socket::load_balancing_algorithm::fixed;
+
401 fixed_cpu = cpu;
+
402 }
+
403};
+
404
+ +
406private:
+ +
408public:
+
409 network_interface() = delete;
+ + +
412
+
413 network_interface& operator=(network_interface&&) noexcept;
+
414
+
415 uint32_t index() const;
+
416 uint32_t mtu() const;
+
417
+
418 const sstring& name() const;
+
419 const sstring& display_name() const;
+
420 const std::vector<net::inet_address>& addresses() const;
+
421 const std::vector<uint8_t> hardware_address() const;
+
422
+
423 bool is_loopback() const;
+
424 bool is_virtual() const;
+
425 bool is_up() const;
+
426 bool supports_ipv6() const;
+
427};
+
428
+ +
430public:
+
431 virtual ~network_stack() {}
+
432 virtual server_socket listen(socket_address sa, listen_options opts) = 0;
+
433 // FIXME: local parameter assumes ipv4 for now, fix when adding other AF
+
434 future<connected_socket> connect(socket_address sa, socket_address = {}, transport proto = transport::TCP);
+
435 virtual ::seastar::socket socket() = 0;
+
436
+
437 [[deprecated("Use `make_[un]bound_datagram_channel` instead")]]
+
438 virtual net::udp_channel make_udp_channel(const socket_address& = {}) = 0;
+
439
+
440 virtual net::datagram_channel make_unbound_datagram_channel(sa_family_t) = 0;
+
441 virtual net::datagram_channel make_bound_datagram_channel(const socket_address& local) = 0;
+
442 virtual future<> initialize() {
+
443 return make_ready_future();
+
444 }
+
445 virtual bool has_per_core_namespace() = 0;
+
446 // NOTE: this is not a correct query approach.
+
447 // This question should be per NIC, but we have no such
+
448 // abstraction, so for now this is "stack-wide"
+
449 virtual bool supports_ipv6() const {
+
450 return false;
+
451 }
+
452
+
458 virtual std::vector<network_interface> network_interfaces();
+
459};
+
460
+ + +
463
+
464 sstring name;
+
465 std::unique_ptr<program_options::option_group> opts;
+
466 factory_func factory;
+
467 bool is_default;
+
468};
+
469
+
470}
+
Definition: api.hh:183
+
output_stream< char > output(size_t buffer_size=8192)
+
void set_keepalive(bool keepalive)
Sets SO_KEEPALIVE option (enable keepalive timer on a socket)
+
input_stream< char > input(connected_socket_input_stream_config csisc={})
+ +
void set_keepalive_parameters(const net::keepalive_params &p)
Sets TCP keepalive parameters.
+
socket_address local_address() const noexcept
Local address of the socket.
+ +
int get_sockopt(int level, int optname, void *data, size_t len) const
+
void set_sockopt(int level, int optname, const void *data, size_t len)
+ + +
void set_nodelay(bool nodelay)
Sets the TCP_NODELAY option (disabling Nagle's algorithm)
+
socket_address remote_address() const noexcept
Remote address of the socket.
+
connected_socket() noexcept
Constructs a connected_socket not corresponding to a connection.
+
net::keepalive_params get_keepalive_parameters() const
Get TCP keepalive parameters.
+ +
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Definition: iostream.hh:280
+
Definition: api.hh:116
+
void shutdown_output()
Causes a pending send() to complete (possibly with an exception)
+
void shutdown_input()
Causes a pending receive() to complete (possibly with an exception)
+ +
Definition: api.hh:92
+
Definition: api.hh:103
+
Definition: packet.hh:87
+
Definition: api.hh:405
+
Definition: api.hh:429
+
virtual std::vector< network_interface > network_interfaces()
+ +
Definition: program-options.hh:292
+
A listening socket, waiting to accept incoming network connections.
Definition: api.hh:326
+
socket_address local_address() const noexcept
+
future< accept_result > accept()
+ +
server_socket() noexcept
Constructs a server_socket without being bound to any address.
+ +
Definition: socket_defs.hh:47
+
Definition: api.hh:283
+
future< connected_socket > connect(socket_address sa, socket_address local={}, transport proto=transport::TCP)
+
socket(socket &&) noexcept
Moves a seastar::socket object.
+
void set_reuseaddr(bool reuseaddr)
Sets SO_REUSEADDR option (enable reuseaddr option on a socket)
+ +
bool get_reuseaddr() const
+
future< T > make_ready_future(A &&... value) noexcept
Creates a future in an available, value state.
Definition: future.hh:1943
+
unsigned min_buffer_size
Definition: api.hh:166
+
unsigned max_buffer_size
Definition: api.hh:170
+
socket_address remote_address
The address of the peer that connected to us.
Definition: api.hh:322
+
connected_socket connection
The newly-accepted connection.
Definition: api.hh:321
+
unsigned buffer_size
Initial buffer size to use for input buffering.
Definition: api.hh:162
+
The result of an server_socket::accept() call.
Definition: api.hh:320
+ +
Distinguished name.
Definition: api.hh:174
+
holds the implementation parts of the metrics layer, do not use directly.
+ + +
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: noncopyable_function.hh:37
+ +
Definition: api.hh:461
+
STL namespace.
+
Definition: api.hh:392
+
+ + + + diff --git a/master/api__docs_8hh_source.html b/master/api__docs_8hh_source.html new file mode 100644 index 000000000..39a85494c --- /dev/null +++ b/master/api__docs_8hh_source.html @@ -0,0 +1,389 @@ + + + + + + + +Seastar: seastar/http/api_docs.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
api_docs.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2015 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23#include <seastar/json/json_elements.hh>
+
24#include <seastar/json/formatter.hh>
+
25#include <seastar/http/routes.hh>
+
26#include <seastar/http/transformers.hh>
+
27#include <string>
+
28#include <seastar/util/noncopyable_function.hh>
+
29
+
30namespace seastar {
+
31
+
32namespace httpd {
+
33
+
34struct api_doc : public json::json_base {
+ + +
37
+
38 void register_params() {
+
39 add(&path, "path");
+
40 add(&description, "description");
+
41
+
42 }
+
43 api_doc() {
+
44 register_params();
+
45 }
+
46 api_doc(const api_doc & e)
+ +
48 {
+
49 register_params();
+
50 path = e.path;
+
51 description = e.description;
+
52 }
+
53 template<class T>
+
54 api_doc& operator=(const T& e) {
+
55 path = e.path;
+
56 description = e.description;
+
57 return *this;
+
58 }
+
59 api_doc& operator=(const api_doc& e) {
+
60 path = e.path;
+
61 description = e.description;
+
62 return *this;
+
63 }
+
64};
+
65
+
66struct api_docs : public json::json_base {
+ + + +
70
+
71 void register_params() {
+
72 add(&apiVersion, "apiVersion");
+
73 add(&swaggerVersion, "swaggerVersion");
+
74 add(&apis, "apis");
+
75
+
76 }
+
77 api_docs() {
+
78 apiVersion = "0.0.1";
+
79 swaggerVersion = "1.2";
+
80 register_params();
+
81 }
+
82 api_docs(const api_docs & e)
+
83 : apiVersion{e.apiVersion}
+
84 , swaggerVersion{e.swaggerVersion}
+
85 , apis{e.apis}
+
86 {
+
87 register_params();
+
88 }
+
89 template<class T>
+
90 api_docs& operator=(const T& e) {
+
91 apis = e.apis;
+
92 return *this;
+
93 }
+
94 api_docs& operator=(const api_docs& e) {
+
95 apis = e.apis;
+
96 return *this;
+
97 }
+
98};
+
99
+ +
101protected:
+
102 sstring _base_path;
+
103 sstring _file_directory;
+
104 routes& _routes;
+
105
+
106public:
+
107 api_registry_base(routes& routes, const sstring& file_directory,
+
108 const sstring& base_path)
+
109 : _base_path(base_path), _file_directory(file_directory), _routes(
+
110 routes) {
+
111 }
+
112
+
113 void set_route(handler_base* h) {
+
114 _routes.put(GET, _base_path, h);
+
115 }
+
116 virtual ~api_registry_base() = default;
+
117};
+
118
+ +
120 api_docs _docs;
+
121public:
+
122 api_registry(routes& routes, const sstring& file_directory,
+
123 const sstring& base_path)
+
124 : api_registry_base(routes, file_directory, base_path) {
+
125 set_route(this);
+
126 }
+
127
+ +
129 std::unique_ptr<http::request> req, std::unique_ptr<http::reply> rep) override {
+
130 rep->_content = json::formatter::to_json(_docs);
+
131 rep->done("json");
+
132 return make_ready_future<std::unique_ptr<http::reply>>(std::move(rep));
+
133 }
+
134
+
135 void reg(const sstring& api, const sstring& description,
+
136 const sstring& alternative_path = "") {
+
137 api_doc doc;
+
138 doc.description = description;
+
139 doc.path = "/" + api;
+
140 _docs.apis.push(doc);
+
141 sstring path =
+
142 (alternative_path == "") ?
+
143 _file_directory + api + ".json" : alternative_path;
+
144 file_handler* index = new file_handler(path,
+
145 new content_replace("json"));
+
146 _routes.put(GET, _base_path + "/" + api, index);
+
147 }
+
148};
+
149
+ +
151protected:
+
152 sstring _file_directory;
+
153 sstring _base_path;
+
154 static const sstring DEFAULT_DIR;
+
155 static const sstring DEFAULT_PATH;
+
156public:
+
157 api_registry_builder_base(const sstring& file_directory = DEFAULT_DIR,
+
158 const sstring& base_path = DEFAULT_PATH)
+
159 : _file_directory(file_directory), _base_path(base_path) {
+
160 }
+
161};
+
162
+ +
164public:
+
165 api_registry_builder(const sstring& file_directory = DEFAULT_DIR,
+
166 const sstring& base_path = DEFAULT_PATH)
+
167 : api_registry_builder_base(file_directory, base_path) {
+
168 }
+
169
+
170 void set_api_doc(routes& r) {
+
171 new api_registry(r, _file_directory, _base_path);
+
172 }
+
173
+
174 void register_function(routes& r, const sstring& api,
+
175 const sstring& description, const sstring& alternative_path = "") {
+
176 auto h = r.get_exact_match(GET, _base_path);
+
177 if (h) {
+
178 // if a handler is found, it was added there by the api_registry_builder
+
179 // with the set_api_doc method, so we know it's the type
+
180 static_cast<api_registry*>(h)->reg(api, description, alternative_path);
+
181 };
+
182 }
+
183};
+
184
+ +
186
+
191doc_entry get_file_reader(sstring file_name);
+
192
+ +
236 std::vector<doc_entry> _apis;
+
237 content_replace _transform;
+
238 std::vector<doc_entry> _definitions;
+
239
+
240public:
+
241 future<> write(output_stream<char>&&, std::unique_ptr<http::request> req);
+
242
+
243 void add_api(doc_entry&& f) {
+
244 _apis.emplace_back(std::move(f));
+
245 }
+
246
+
247 void add_definition(doc_entry&& f) {
+
248 _definitions.emplace_back(std::move(f));
+
249 }
+
250};
+
251
+ +
253 api_docs_20 _docs;
+
254public:
+
255 api_registry_20(routes& routes, const sstring& file_directory,
+
256 const sstring& base_path)
+
257 : api_registry_base(routes, file_directory, base_path) {
+
258 set_route(this);
+
259 }
+
260
+ +
262 std::unique_ptr<http::request> req, std::unique_ptr<http::reply> rep) override {
+
263 rep->write_body("json", [this, req = std::move(req)] (output_stream<char>&& os) mutable {
+
264 return _docs.write(std::move(os), std::move(req));
+
265 });
+
266 return make_ready_future<std::unique_ptr<http::reply>>(std::move(rep));
+
267 }
+
268
+
269 virtual void reg(doc_entry&& f) {
+
270 _docs.add_api(std::move(f));
+
271 }
+
272
+
273 virtual void add_definition(doc_entry&& f) {
+
274 _docs.add_definition(std::move(f));
+
275 }
+
276};
+
277
+ +
279 api_registry_20* get_register_base(routes& r) {
+
280 auto h = r.get_exact_match(GET, _base_path);
+
281 if (h) {
+
282 // if a handler is found, it was added there by the api_registry_builder
+
283 // with the set_api_doc method, so we know it's the type
+
284 return static_cast<api_registry_20*>(h);
+
285 }
+
286 return nullptr;
+
287 }
+
288
+
289public:
+
290 api_registry_builder20(const sstring& file_directory = DEFAULT_DIR,
+
291 const sstring& base_path = DEFAULT_PATH)
+
292 : api_registry_builder_base(file_directory, base_path) {
+
293 }
+
294
+
295 void set_api_doc(routes& r) {
+
296 new api_registry_20(r, _file_directory, _base_path);
+
297 }
+
298
+ +
305 auto h = get_register_base(r);
+
306 if (h) {
+
307 h->reg(std::move(f));
+
308 }
+
309 }
+
313 void register_api_file(routes& r, const sstring& api) {
+
314 register_function(r, get_file_reader(_file_directory + "/" + api + ".json"));
+
315 }
+
316
+
317
+ +
322 auto h = get_register_base(r);
+
323 if (h) {
+
324 h->add_definition(std::move(f));
+
325 }
+
326
+
327 }
+
328
+
332 void add_definitions_file(routes& r, const sstring& file) {
+
333 add_definition(r, get_file_reader(_file_directory + file + ".def.json" ));
+
334 }
+
335
+
336};
+
337
+
338}
+
339
+
340}
+
Definition: file.hh:193
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
An api doc that support swagger version 2.0.
Definition: api_docs.hh:235
+
Definition: api_docs.hh:252
+
future< std::unique_ptr< http::reply > > handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep) override
Definition: api_docs.hh:261
+
Definition: api_docs.hh:100
+
Definition: api_docs.hh:278
+
void add_definitions_file(routes &r, const sstring &file)
Definition: api_docs.hh:332
+
void register_api_file(routes &r, const sstring &api)
register an API
Definition: api_docs.hh:313
+
void register_function(routes &r, doc_entry &&f)
register a doc_entry This doc_entry can be used to either take the definition from a file or generate...
Definition: api_docs.hh:304
+
void add_definition(routes &r, doc_entry &&f)
Definition: api_docs.hh:321
+ +
Definition: api_docs.hh:163
+
Definition: api_docs.hh:119
+
future< std::unique_ptr< http::reply > > handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep) override
Definition: api_docs.hh:128
+
Definition: transformers.hh:44
+
Definition: file_handler.hh:150
+
Definition: handlers.hh:42
+
Definition: routes.hh:81
+
handler_base * get_exact_match(operation_type type, const sstring &url) const
Definition: routes.hh:152
+
routes & put(operation_type type, const sstring &url, handler_base *handler)
+ +
Definition: json_elements.hh:160
+ +
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: noncopyable_function.hh:37
+
Definition: api_docs.hh:34
+
Definition: api_docs.hh:66
+
Definition: json_elements.hh:228
+
virtual void add(json_base_element *element, std::string name, bool mandatory=false)
+
+ + + + diff --git a/master/app-template_8hh_source.html b/master/app-template_8hh_source.html new file mode 100644 index 000000000..2b214f3c6 --- /dev/null +++ b/master/app-template_8hh_source.html @@ -0,0 +1,208 @@ + + + + + + + +Seastar: seastar/core/app-template.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
app-template.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21#pragma once
+
22
+
23#ifndef SEASTAR_MODULE
+
24#include <boost/program_options.hpp>
+
25#include <functional>
+
26#include <chrono>
+
27#endif
+
28#include <seastar/core/future.hh>
+
29#include <seastar/core/smp.hh>
+ +
31#include <seastar/core/sstring.hh>
+
32#include <seastar/util/program-options.hh>
+ +
34#include <seastar/core/scollectd.hh>
+
35#include <seastar/util/log-cli.hh>
+
36#include <seastar/util/modules.hh>
+
37
+
38namespace seastar {
+
39
+
40namespace alien {
+
41
+
42class instance;
+
43
+
44}
+
45
+
46SEASTAR_MODULE_EXPORT
+
47class app_template {
+
48public:
+
49 struct config {
+
55 sstring name = "App";
+
60 sstring description = "";
+
61 std::chrono::duration<double> default_task_quota = std::chrono::microseconds(500);
+
72 bool auto_handle_sigint_sigterm = true;
+
75 unsigned max_networking_aio_io_control_blocks = 10000;
+
81 size_t reserve_additional_memory_per_shard = 0;
+
82 config() {}
+
83 };
+
84
+
86 struct seastar_options : public program_options::option_group {
+
92 sstring name = "App";
+
97 sstring description = "";
+
108 bool auto_handle_sigint_sigterm = true;
+
110 reactor_options reactor_opts;
+
112 metrics::options metrics_opts;
+
114 smp_options smp_opts;
+
116 scollectd::options scollectd_opts;
+
118 log_cli::options log_opts;
+
119
+
120 seastar_options();
+
121 };
+
122
+
123 using configuration_reader = std::function<void (boost::program_options::variables_map&)>;
+
124private:
+
125 // unique_ptr to avoid pulling in alien.hh.
+
126 std::unique_ptr<alien::instance> _alien;
+
127 // reactor destruction is asynchronous, so we must let the last reactor
+
128 // destroy the smp instance
+
129 std::shared_ptr<smp> _smp;
+
130 seastar_options _opts;
+
131 boost::program_options::options_description _app_opts;
+
132 boost::program_options::options_description _seastar_opts;
+
133 boost::program_options::options_description _opts_conf_file;
+
134 boost::program_options::positional_options_description _pos_opts;
+
135 std::optional<boost::program_options::variables_map> _configuration;
+
136 configuration_reader _conf_reader;
+
137
+
138 configuration_reader get_default_configuration_reader();
+
139public:
+
140 struct positional_option {
+
141 const char* name;
+
142 const boost::program_options::value_semantic* value_semantic;
+
143 const char* help;
+
144 int max_count;
+
145 };
+
146public:
+
147 explicit app_template(seastar_options opts);
+
148 explicit app_template(config cfg = config());
+
149 ~app_template();
+
150
+
151 const seastar_options& options() const;
+
152
+
153 boost::program_options::options_description& get_options_description();
+
154 boost::program_options::options_description& get_conf_file_options_description();
+
155 boost::program_options::options_description_easy_init add_options();
+
156 void add_positional_options(std::initializer_list<positional_option> options);
+
157 boost::program_options::variables_map& configuration();
+
158 int run_deprecated(int ac, char ** av, std::function<void ()>&& func) noexcept;
+
159
+
160 void set_configuration_reader(configuration_reader conf_reader);
+
161
+
164 alien::instance& alien() { return *_alien; }
+
165
+
166 // Runs given function and terminates the application when the future it
+
167 // returns resolves. The value with which the future resolves will be
+
168 // returned by this function.
+
169 int run(int ac, char ** av, std::function<future<int> ()>&& func) noexcept;
+
170
+
171 // Like run() which takes std::function<future<int>()>, but returns
+
172 // with exit code 0 when the future returned by func resolves
+
173 // successfully.
+
174 int run(int ac, char ** av, std::function<future<> ()>&& func) noexcept;
+
175};
+
176
+
177}
+
header file for metric API layer (like prometheus or collectd)
+
boost::program_options::options_description get_options_description()
Options for controlling logging at run-time.
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+ + +
+ + + + diff --git a/master/arp_8hh_source.html b/master/arp_8hh_source.html new file mode 100644 index 000000000..1297e3354 --- /dev/null +++ b/master/arp_8hh_source.html @@ -0,0 +1,398 @@ + + + + + + + +Seastar: seastar/net/arp.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
arp.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 *
+
21 */
+
22
+
23#pragma once
+
24
+
25#ifndef SEASTAR_MODULE
+
26#include <unordered_map>
+
27#endif
+
28#include <seastar/net/net.hh>
+
29#include <seastar/core/byteorder.hh>
+
30#include <seastar/net/ethernet.hh>
+
31#include <seastar/util/modules.hh>
+
32
+
33namespace seastar {
+
34
+
35namespace net {
+
36
+
37class arp;
+
38class arp_for_protocol;
+
39template <typename L3>
+
40class arp_for;
+
41
+ +
43protected:
+
44 arp& _arp;
+
45 uint16_t _proto_num;
+
46public:
+
47 arp_for_protocol(arp& a, uint16_t proto_num);
+
48 virtual ~arp_for_protocol();
+
49 virtual future<> received(packet p) = 0;
+
50 virtual bool forward(forward_hash& out_hash_data, packet& p, size_t off) {
+
51 std::ignore = out_hash_data;
+
52 std::ignore = p;
+
53 std::ignore = off;
+
54 return false;
+
55 }
+
56};
+
57
+
58class arp {
+
59 interface* _netif;
+
60 l3_protocol _proto;
+
61 std::unordered_map<uint16_t, arp_for_protocol*> _arp_for_protocol;
+ +
63private:
+
64 struct arp_hdr {
+
65 uint16_t htype;
+
66 uint16_t ptype;
+
67
+
68 static arp_hdr read(const char* p) {
+
69 arp_hdr ah;
+
70 ah.htype = consume_be<uint16_t>(p);
+
71 ah.ptype = consume_be<uint16_t>(p);
+
72 return ah;
+
73 }
+
74 static constexpr size_t size() { return 4; }
+
75 };
+
76public:
+
77 explicit arp(interface* netif);
+
78 void add(uint16_t proto_num, arp_for_protocol* afp);
+
79 void del(uint16_t proto_num);
+
80private:
+
81 ethernet_address l2self() const noexcept { return _netif->hw_address(); }
+
82 future<> process_packet(packet p, ethernet_address from);
+
83 bool forward(forward_hash& out_hash_data, packet& p, size_t off);
+
84 std::optional<l3_protocol::l3packet> get_packet();
+
85 template <class l3_proto>
+
86 friend class arp_for;
+
87};
+
88
+
89template <typename L3>
+
90class arp_for : public arp_for_protocol {
+
91public:
+ +
93 using l3addr = typename L3::address_type;
+
94private:
+
95 static constexpr auto max_waiters = 512;
+
96 enum oper {
+
97 op_request = 1,
+
98 op_reply = 2,
+
99 };
+
100 struct arp_hdr {
+
101 uint16_t htype;
+
102 uint16_t ptype;
+
103 uint8_t hlen;
+
104 uint8_t plen;
+
105 uint16_t oper;
+
106 l2addr sender_hwaddr;
+
107 l3addr sender_paddr;
+
108 l2addr target_hwaddr;
+
109 l3addr target_paddr;
+
110
+
111 static arp_hdr read(const char* p) {
+
112 arp_hdr ah;
+
113 ah.htype = consume_be<uint16_t>(p);
+
114 ah.ptype = consume_be<uint16_t>(p);
+
115 ah.hlen = consume_be<uint8_t>(p);
+
116 ah.plen = consume_be<uint8_t>(p);
+
117 ah.oper = consume_be<uint16_t>(p);
+
118 ah.sender_hwaddr = l2addr::consume(p);
+
119 ah.sender_paddr = l3addr::consume(p);
+
120 ah.target_hwaddr = l2addr::consume(p);
+
121 ah.target_paddr = l3addr::consume(p);
+
122 return ah;
+
123 }
+
124 void write(char* p) const {
+
125 produce_be<uint16_t>(p, htype);
+
126 produce_be<uint16_t>(p, ptype);
+
127 produce_be<uint8_t>(p, hlen);
+
128 produce_be<uint8_t>(p, plen);
+
129 produce_be<uint16_t>(p, oper);
+
130 sender_hwaddr.produce(p);
+
131 sender_paddr.produce(p);
+
132 target_hwaddr.produce(p);
+
133 target_paddr.produce(p);
+
134 }
+
135 static constexpr size_t size() {
+
136 return 8 + 2 * (l2addr::size() + l3addr::size());
+
137 }
+
138 };
+
139 struct resolution {
+
140 std::vector<promise<l2addr>> _waiters;
+
141 timer<> _timeout_timer;
+
142 };
+
143private:
+
144 l3addr _l3self = L3::broadcast_address();
+
145 std::unordered_map<l3addr, l2addr> _table;
+
146 std::unordered_map<l3addr, resolution> _in_progress;
+
147private:
+
148 packet make_query_packet(l3addr paddr);
+
149 virtual future<> received(packet p) override;
+
150 future<> handle_request(arp_hdr* ah);
+
151 l2addr l2self() const noexcept { return _arp.l2self(); }
+
152 void send(l2addr to, packet p);
+
153public:
+
154 future<> send_query(const l3addr& paddr);
+
155 explicit arp_for(arp& a) : arp_for_protocol(a, L3::arp_protocol_type()) {
+
156 _table[L3::broadcast_address()] = ethernet::broadcast_address();
+
157 }
+
158 future<ethernet_address> lookup(const l3addr& addr);
+
159 void learn(l2addr l2, l3addr l3);
+
160 void run();
+
161 void set_self_addr(l3addr addr) {
+
162 _table.erase(_l3self);
+
163 _table[addr] = l2self();
+
164 _l3self = addr;
+
165 }
+
166 friend class arp;
+
167};
+
168
+
169template <typename L3>
+
170packet
+
171arp_for<L3>::make_query_packet(l3addr paddr) {
+
172 arp_hdr hdr;
+
173 hdr.htype = ethernet::arp_hardware_type();
+
174 hdr.ptype = L3::arp_protocol_type();
+
175 hdr.hlen = sizeof(l2addr);
+
176 hdr.plen = sizeof(l3addr);
+
177 hdr.oper = op_request;
+
178 hdr.sender_hwaddr = l2self();
+
179 hdr.sender_paddr = _l3self;
+
180 hdr.target_hwaddr = ethernet::broadcast_address();
+
181 hdr.target_paddr = paddr;
+
182 auto p = packet();
+
183 p.prepend_uninitialized_header(hdr.size());
+
184 hdr.write(p.get_header(0, hdr.size()));
+
185 return p;
+
186}
+
187
+
188template <typename L3>
+
189void arp_for<L3>::send(l2addr to, packet p) {
+
190 _arp._packetq.push_back(l3_protocol::l3packet{eth_protocol_num::arp, to, std::move(p)});
+
191}
+
192
+
193template <typename L3>
+
194future<>
+
195arp_for<L3>::send_query(const l3addr& paddr) {
+
196 send(ethernet::broadcast_address(), make_query_packet(paddr));
+
197 return make_ready_future<>();
+
198}
+
199
+
200class arp_error : public std::runtime_error {
+
201public:
+
202 arp_error(const std::string& msg) : std::runtime_error(msg) {}
+
203};
+
204
+ +
206public:
+
207 arp_timeout_error() : arp_error("ARP timeout") {}
+
208};
+
209
+ +
211public:
+
212 arp_queue_full_error() : arp_error("ARP waiter's queue is full") {}
+
213};
+
214
+
215template <typename L3>
+ +
217arp_for<L3>::lookup(const l3addr& paddr) {
+
218 auto i = _table.find(paddr);
+
219 if (i != _table.end()) {
+
220 return make_ready_future<ethernet_address>(i->second);
+
221 }
+
222 auto j = _in_progress.find(paddr);
+
223 auto first_request = j == _in_progress.end();
+
224 auto& res = first_request ? _in_progress[paddr] : j->second;
+
225
+
226 if (first_request) {
+
227 res._timeout_timer.set_callback([paddr, this, &res] {
+
228 // FIXME: future is discarded
+
229 (void)send_query(paddr);
+
230 for (auto& w : res._waiters) {
+
231 w.set_exception(arp_timeout_error());
+
232 }
+
233 res._waiters.clear();
+
234 });
+
235 res._timeout_timer.arm_periodic(std::chrono::seconds(1));
+
236 // FIXME: future is discarded
+
237 (void)send_query(paddr);
+
238 }
+
239
+
240 if (res._waiters.size() >= max_waiters) {
+
241 return make_exception_future<ethernet_address>(arp_queue_full_error());
+
242 }
+
243
+
244 res._waiters.emplace_back();
+
245 return res._waiters.back().get_future();
+
246}
+
247
+
248template <typename L3>
+
249void
+
250arp_for<L3>::learn(l2addr hwaddr, l3addr paddr) {
+
251 _table[paddr] = hwaddr;
+
252 auto i = _in_progress.find(paddr);
+
253 if (i != _in_progress.end()) {
+
254 auto& res = i->second;
+
255 res._timeout_timer.cancel();
+
256 for (auto &&pr : res._waiters) {
+
257 pr.set_value(hwaddr);
+
258 }
+
259 _in_progress.erase(i);
+
260 }
+
261}
+
262
+
263template <typename L3>
+
264future<>
+
265arp_for<L3>::received(packet p) {
+
266 auto ah = p.get_header(0, arp_hdr::size());
+
267 if (!ah) {
+
268 return make_ready_future<>();
+
269 }
+
270 auto h = arp_hdr::read(ah);
+
271 if (h.hlen != sizeof(l2addr) || h.plen != sizeof(l3addr)) {
+
272 return make_ready_future<>();
+
273 }
+
274 switch (h.oper) {
+
275 case op_request:
+
276 return handle_request(&h);
+
277 case op_reply:
+
278 arp_learn(h.sender_hwaddr, h.sender_paddr);
+
279 return make_ready_future<>();
+
280 default:
+
281 return make_ready_future<>();
+
282 }
+
283}
+
284
+
285template <typename L3>
+
286future<>
+
287arp_for<L3>::handle_request(arp_hdr* ah) {
+
288 if (ah->target_paddr == _l3self
+
289 && _l3self != L3::broadcast_address()) {
+
290 ah->oper = op_reply;
+
291 ah->target_hwaddr = ah->sender_hwaddr;
+
292 ah->target_paddr = ah->sender_paddr;
+
293 ah->sender_hwaddr = l2self();
+
294 ah->sender_paddr = _l3self;
+
295 auto p = packet();
+
296 ah->write(p.prepend_uninitialized_header(ah->size()));
+
297 send(ah->target_hwaddr, std::move(p));
+
298 }
+
299 return make_ready_future<>();
+
300}
+
301
+
302}
+
303
+
304}
+
Definition: circular_buffer.hh:63
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Definition: arp.hh:200
+
Definition: arp.hh:42
+
Definition: arp.hh:90
+ +
Definition: arp.hh:205
+
Definition: arp.hh:58
+
Definition: net.hh:51
+
Definition: net.hh:114
+
Definition: net.hh:94
+
Definition: packet.hh:87
+
Definition: timer.hh:83
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: ethernet.hh:37
+
+ + + + diff --git a/master/array__map_8hh_source.html b/master/array__map_8hh_source.html new file mode 100644 index 000000000..d493d0176 --- /dev/null +++ b/master/array__map_8hh_source.html @@ -0,0 +1,139 @@ + + + + + + + +Seastar: seastar/core/array_map.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
array_map.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <array>
+
26#include <cstddef>
+
27#include <stdexcept>
+
28#include <string>
+
29#include <utility>
+
30#include <seastar/util/modules.hh>
+
31#endif
+
32
+
33namespace seastar {
+
34
+
35// unordered_map implemented as a simple array
+
36
+
37SEASTAR_MODULE_EXPORT
+
38template <typename Value, size_t Max>
+
39class array_map {
+
40 std::array<Value, Max> _a {};
+
41public:
+
42 array_map(std::initializer_list<std::pair<size_t, Value>> i) {
+
43 for (auto kv : i) {
+
44 _a[kv.first] = kv.second;
+
45 }
+
46 }
+
47 Value& operator[](size_t key) { return _a[key]; }
+
48 const Value& operator[](size_t key) const { return _a[key]; }
+
49
+
50 Value& at(size_t key) {
+
51 if (key >= Max) {
+
52 throw std::out_of_range(std::to_string(key) + " >= " + std::to_string(Max));
+
53 }
+
54 return _a[key];
+
55 }
+
56};
+
57
+
58}
+
Definition: array_map.hh:39
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/as__future_8hh_source.html b/master/as__future_8hh_source.html new file mode 100644 index 000000000..5b468ec32 --- /dev/null +++ b/master/as__future_8hh_source.html @@ -0,0 +1,160 @@ + + + + + + + +Seastar: seastar/coroutine/as_future.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
as_future.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2022-present ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/coroutine.hh>
+
25
+
26namespace seastar {
+
27
+
28namespace internal {
+
29
+
30template <bool CheckPreempt, typename T>
+
31class [[nodiscard]] as_future_awaiter {
+
32 seastar::future<T> _future;
+
33
+
34public:
+
35 explicit as_future_awaiter(seastar::future<T>&& f) noexcept : _future(std::move(f)) {}
+
36
+
37 as_future_awaiter(const as_future_awaiter&) = delete;
+
38 as_future_awaiter(as_future_awaiter&&) = delete;
+
39
+
40 bool await_ready() const noexcept {
+
41 return _future.available() && (!CheckPreempt || !need_preempt());
+
42 }
+
43
+
44 template<typename U>
+
45 void await_suspend(std::coroutine_handle<U> hndl) noexcept {
+
46 if (!CheckPreempt || !_future.available()) {
+
47 _future.set_coroutine(hndl.promise());
+
48 } else {
+
49 schedule(&hndl.promise());
+
50 }
+
51 }
+
52
+
53 seastar::future<T> await_resume() {
+
54 return std::move(_future);
+
55 }
+
56};
+
57
+
58} // namespace seastar::internal
+
59
+
60namespace coroutine {
+
61
+
85template<typename T = void>
+
86class [[nodiscard]] as_future : public seastar::internal::as_future_awaiter<true, T> {
+
87public:
+
88 explicit as_future(seastar::future<T>&& f) noexcept : seastar::internal::as_future_awaiter<true, T>(std::move(f)) {}
+
89};
+
90
+
98template<typename T = void>
+
99class [[nodiscard]] as_future_without_preemption_check : public seastar::internal::as_future_awaiter<false, T> {
+
100public:
+
101 explicit as_future_without_preemption_check(seastar::future<T>&& f) noexcept : seastar::internal::as_future_awaiter<false, T>(std::move(f)) {}
+
102};
+
103
+
104} // namespace seastar::coroutine
+
105
+
106} // namespace seastar
+
co_await:s a future, returning it as result, without checking if preemption is needed.
Definition: as_future.hh:99
+
co_await:s a future, returning it as result.
Definition: as_future.hh:86
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
bool available() const noexcept
Checks whether the future is available.
Definition: future.hh:1394
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/backtrace_8hh_source.html b/master/backtrace_8hh_source.html new file mode 100644 index 000000000..be03cb268 --- /dev/null +++ b/master/backtrace_8hh_source.html @@ -0,0 +1,331 @@ + + + + + + + +Seastar: seastar/util/backtrace.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
backtrace.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2016 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/sstring.hh>
+
25#include <seastar/core/print.hh>
+ +
27#include <seastar/core/shared_ptr.hh>
+
28#include <seastar/util/modules.hh>
+
29
+
30#ifndef SEASTAR_MODULE
+
31#if __has_include(<execinfo.h>)
+
32#include <execinfo.h>
+
33#define HAVE_EXECINFO
+
34#endif
+
35#include <iosfwd>
+
36#include <memory>
+
37#include <variant>
+
38#include <boost/container/static_vector.hpp>
+
39#endif
+
40
+
41namespace seastar {
+
42
+ +
44 sstring name;
+
45 uintptr_t begin;
+
46 uintptr_t end; // C++-style, last addr + 1
+
47};
+
48
+
49struct frame {
+
50 const shared_object* so;
+
51 uintptr_t addr;
+
52};
+
53
+
54bool operator==(const frame& a, const frame& b) noexcept;
+
55
+
56
+
57// If addr doesn't seem to belong to any of the provided shared objects, it
+
58// will be considered as part of the executable.
+
59frame decorate(uintptr_t addr) noexcept;
+
60
+
61// Invokes func for each frame passing it as argument.
+
62SEASTAR_MODULE_EXPORT
+
63template<typename Func>
+
64void backtrace(Func&& func) noexcept(noexcept(func(frame()))) {
+
65#ifdef HAVE_EXECINFO
+
66 constexpr size_t max_backtrace = 100;
+
67 void* buffer[max_backtrace];
+
68 int n = ::backtrace(buffer, max_backtrace);
+
69 for (int i = 0; i < n; ++i) {
+
70 auto ip = reinterpret_cast<uintptr_t>(buffer[i]);
+
71 func(decorate(ip - 1));
+
72 }
+
73#else
+
74// Not implemented yet
+
75#define SEASTAR_BACKTRACE_UNIMPLEMENTED
+
76#endif
+
77}
+
78
+
79// Represents a call stack of a single thread.
+
80SEASTAR_MODULE_EXPORT
+ +
82public:
+
83 using vector_type = boost::container::static_vector<frame, 64>;
+
84private:
+
85 vector_type _frames;
+
86 size_t _hash;
+
87 char _delimeter;
+
88private:
+
89 size_t calculate_hash() const noexcept;
+
90public:
+
91 simple_backtrace(vector_type f, char delimeter = ' ') noexcept : _frames(std::move(f)), _hash(calculate_hash()), _delimeter(delimeter) {}
+
92 simple_backtrace(char delimeter = ' ') noexcept : simple_backtrace({}, delimeter) {}
+
93
+
94 size_t hash() const noexcept { return _hash; }
+
95 char delimeter() const noexcept { return _delimeter; }
+
96
+
97 friend std::ostream& operator<<(std::ostream& out, const simple_backtrace&);
+
98
+
99 bool operator==(const simple_backtrace& o) const noexcept {
+
100 return _hash == o._hash && _frames == o._frames;
+
101 }
+
102
+
103 bool operator!=(const simple_backtrace& o) const noexcept {
+
104 return !(*this == o);
+
105 }
+
106};
+
107
+ +
109
+
110// Represents a task object inside a tasktrace.
+ +
112 const std::type_info* _task_type;
+
113public:
+
114 task_entry(const std::type_info& ti) noexcept
+
115 : _task_type(&ti)
+
116 { }
+
117
+
118 friend std::ostream& operator<<(std::ostream& out, const task_entry&);
+
119
+
120 bool operator==(const task_entry& o) const noexcept {
+
121 return *_task_type == *o._task_type;
+
122 }
+
123
+
124 bool operator!=(const task_entry& o) const noexcept {
+
125 return !(*this == o);
+
126 }
+
127
+
128 size_t hash() const noexcept { return _task_type->hash_code(); }
+
129};
+
130
+
131// Extended backtrace which consists of a backtrace of the currently running task
+
132// and information about the chain of tasks waiting for the current operation to complete.
+
133SEASTAR_MODULE_EXPORT
+ +
135public:
+
136 using entry = std::variant<shared_backtrace, task_entry>;
+
137 using vector_type = boost::container::static_vector<entry, 16>;
+
138private:
+
139 simple_backtrace _main;
+
140 vector_type _prev;
+ +
142 size_t _hash;
+
143public:
+
144 tasktrace() = default;
+
145 tasktrace(simple_backtrace main, vector_type prev, size_t prev_hash, scheduling_group sg) noexcept;
+
146 tasktrace(const tasktrace&) = default;
+
147 tasktrace& operator=(const tasktrace&) = default;
+
148 ~tasktrace();
+
149
+
150 size_t hash() const noexcept { return _hash; }
+
151 char delimeter() const noexcept { return _main.delimeter(); }
+
152
+
153 friend std::ostream& operator<<(std::ostream& out, const tasktrace&);
+
154
+
155 bool operator==(const tasktrace& o) const noexcept;
+
156
+
157 bool operator!=(const tasktrace& o) const noexcept {
+
158 return !(*this == o);
+
159 }
+
160};
+
161
+
162}
+
163
+
164namespace std {
+
165
+
166SEASTAR_MODULE_EXPORT
+
167template<>
+
168struct hash<seastar::simple_backtrace> {
+
169 size_t operator()(const seastar::simple_backtrace& b) const {
+
170 return b.hash();
+
171 }
+
172};
+
173
+
174SEASTAR_MODULE_EXPORT
+
175template<>
+
176struct hash<seastar::tasktrace> {
+
177 size_t operator()(const seastar::tasktrace& b) const {
+
178 return b.hash();
+
179 }
+
180};
+
181
+
182}
+
183
+
184#if FMT_VERSION >= 90000
+
185template <> struct fmt::formatter<seastar::tasktrace> : fmt::ostream_formatter {};
+
186template <> struct fmt::formatter<seastar::simple_backtrace> : fmt::ostream_formatter {};
+
187#endif
+
188
+
189namespace seastar {
+
190
+
191using saved_backtrace = tasktrace;
+
192
+
193saved_backtrace current_backtrace() noexcept;
+
194
+
195tasktrace current_tasktrace() noexcept;
+
196
+
197// Collects backtrace only within the currently executing task.
+
198simple_backtrace current_backtrace_tasklocal() noexcept;
+
199
+
200std::ostream& operator<<(std::ostream& out, const tasktrace& b);
+
201
+
202namespace internal {
+
203
+
204template<class Exc>
+
205class backtraced : public Exc {
+
206 std::shared_ptr<sstring> _backtrace;
+
207public:
+
208 template<typename... Args>
+
209 backtraced(Args&&... args)
+
210 : Exc(std::forward<Args>(args)...)
+
211 , _backtrace(std::make_shared<sstring>(format("{} Backtrace: {}", Exc::what(), current_backtrace()))) {}
+
212
+
218 virtual const char* what() const noexcept override {
+
219 assert(_backtrace);
+
220 return _backtrace->c_str();
+
221 }
+
222};
+
223
+
224}
+
225
+
226
+
234SEASTAR_MODULE_EXPORT
+
235template <class Exc, typename... Args>
+
236std::exception_ptr make_backtraced_exception_ptr(Args&&... args) {
+
237 using exc_type = std::decay_t<Exc>;
+
238 static_assert(std::is_base_of_v<std::exception, exc_type>,
+
239 "throw_with_backtrace only works with exception types");
+
240 return std::make_exception_ptr<internal::backtraced<exc_type>>(Exc(std::forward<Args>(args)...));
+
241}
+
242
+
252SEASTAR_MODULE_EXPORT
+
253template <class Exc, typename... Args>
+
254[[noreturn]]
+
255void
+
256throw_with_backtrace(Args&&... args) {
+
257 std::rethrow_exception(make_backtraced_exception_ptr<Exc>(std::forward<Args>(args)...));
+
258};
+
259
+
260}
+
Definition: shared_ptr.hh:268
+
Identifies function calls that are accounted as a group.
Definition: scheduling.hh:285
+
Definition: backtrace.hh:81
+
Definition: backtrace.hh:111
+
Definition: backtrace.hh:134
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
void throw_with_backtrace(Args &&... args)
Definition: backtrace.hh:256
+
sstring format(const char *fmt, A &&... a)
Definition: print.hh:143
+
std::exception_ptr make_backtraced_exception_ptr(Args &&... args)
Definition: backtrace.hh:236
+
Definition: backtrace.hh:49
+
Definition: backtrace.hh:43
+
STL namespace.
+ +
+ + + + diff --git a/master/bc_s.png b/master/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/master/bdwn.png b/master/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + + +Seastar: seastar/core/bitops.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
bitops.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/util/modules.hh>
+
25#ifndef SEASTAR_MODULE
+
26#include <concepts>
+
27#include <limits>
+
28#endif
+
29
+
30namespace seastar {
+
31
+
32SEASTAR_MODULE_EXPORT_BEGIN
+
33
+
34inline
+
35constexpr unsigned count_leading_zeros(unsigned x) {
+
36 return __builtin_clz(x);
+
37}
+
38
+
39inline
+
40constexpr unsigned count_leading_zeros(unsigned long x) {
+
41 return __builtin_clzl(x);
+
42}
+
43
+
44inline
+
45constexpr unsigned count_leading_zeros(unsigned long long x) {
+
46 return __builtin_clzll(x);
+
47}
+
48
+
49inline
+
50constexpr unsigned count_trailing_zeros(unsigned x) {
+
51 return __builtin_ctz(x);
+
52}
+
53
+
54inline
+
55constexpr unsigned count_trailing_zeros(unsigned long x) {
+
56 return __builtin_ctzl(x);
+
57}
+
58
+
59inline
+
60constexpr unsigned count_trailing_zeros(unsigned long long x) {
+
61 return __builtin_ctzll(x);
+
62}
+
63
+
64template<std::integral T>
+
65inline constexpr unsigned log2ceil(T n) {
+
66 if (n == 1) {
+
67 return 0;
+
68 }
+
69 return std::numeric_limits<T>::digits - count_leading_zeros(n - 1);
+
70}
+
71
+
72template<std::integral T>
+
73inline constexpr unsigned log2floor(T n) {
+
74 return std::numeric_limits<T>::digits - count_leading_zeros(n) - 1;
+
75}
+
76
+
77SEASTAR_MODULE_EXPORT_END
+
78
+
79}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/bitset-iter_8hh_source.html b/master/bitset-iter_8hh_source.html new file mode 100644 index 000000000..9f3dee3c2 --- /dev/null +++ b/master/bitset-iter_8hh_source.html @@ -0,0 +1,276 @@ + + + + + + + +Seastar: seastar/core/bitset-iter.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
bitset-iter.hh
+
+
+
1/*
+
2 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
3 */
+
4
+
5/*
+
6 * Imported from OSv:
+
7 *
+
8 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
9 *
+
10 * This work is open source software, licensed under the terms of the
+
11 * BSD license as described in the LICENSE file in the top-level directory.
+
12 */
+
13
+
14#pragma once
+
15
+
16#ifndef SEASTAR_MODULE
+
17#include <bitset>
+
18#include <limits>
+
19#include <seastar/util/modules.hh>
+
20#endif
+
21
+
22namespace seastar {
+
23
+
24namespace bitsets {
+
25
+
26static constexpr int ulong_bits = std::numeric_limits<unsigned long>::digits;
+
27
+
37template<typename T>
+
38size_t count_leading_zeros(T value) noexcept;
+
39
+
48template<typename T>
+
49size_t count_trailing_zeros(T value) noexcept;
+
50
+
51template<>
+
52inline size_t count_leading_zeros<unsigned long>(unsigned long value) noexcept
+
53{
+
54 return __builtin_clzl(value);
+
55}
+
56
+
57template<>
+
58inline size_t count_leading_zeros<long>(long value) noexcept
+
59{
+
60 return __builtin_clzl((unsigned long)value) - 1;
+
61}
+
62
+
63template<>
+
64inline size_t count_leading_zeros<unsigned long long>(unsigned long long value) noexcept
+
65{
+
66 return __builtin_clzll(value);
+
67}
+
68
+
69template<>
+
70inline size_t count_leading_zeros<long long>(long long value) noexcept
+
71{
+
72 return __builtin_clzll((unsigned long long)value) - 1;
+
73}
+
74
+
75template<>
+
76inline
+
77size_t count_trailing_zeros<unsigned long>(unsigned long value) noexcept
+
78{
+
79 return __builtin_ctzl(value);
+
80}
+
81
+
82template<>
+
83inline
+
84size_t count_trailing_zeros<long>(long value) noexcept
+
85{
+
86 return __builtin_ctzl((unsigned long)value);
+
87}
+
88
+
89template<>
+
90inline
+
91size_t count_trailing_zeros<unsigned long long>(unsigned long long value) noexcept
+
92{
+
93 return __builtin_ctzll(value);
+
94}
+
95
+
96template<>
+
97inline
+
98size_t count_trailing_zeros<long long>(long long value) noexcept
+
99{
+
100 return __builtin_ctzll((unsigned long long)value);
+
101}
+
102
+
107template<size_t N>
+
108inline size_t get_first_set(const std::bitset<N>& bitset) noexcept
+
109{
+
110 static_assert(N <= ulong_bits, "bitset too large");
+
111 return count_trailing_zeros(bitset.to_ulong());
+
112}
+
113
+
118template<size_t N>
+
119inline size_t get_last_set(const std::bitset<N>& bitset) noexcept
+
120{
+
121 static_assert(N <= ulong_bits, "bitset too large");
+
122 return ulong_bits - 1 - count_leading_zeros(bitset.to_ulong());
+
123}
+
124
+
125SEASTAR_MODULE_EXPORT_BEGIN
+
126
+
127template<size_t N>
+ +
129{
+
130private:
+
131 void advance() noexcept
+
132 {
+
133 if (_bitset.none()) {
+
134 _index = -1;
+
135 } else {
+
136 auto shift = get_first_set(_bitset) + 1;
+
137 _index += shift;
+
138 _bitset >>= shift;
+
139 }
+
140 }
+
141public:
+
142 using iterator_category = std::input_iterator_tag;
+
143 using value_type = int;
+
144 using difference_type = std::ptrdiff_t;
+
145 using pointer = int*;
+
146 using reference = int&;
+
147
+
148 set_iterator(std::bitset<N> bitset, int offset = 0) noexcept
+
149 : _bitset(bitset)
+
150 , _index(offset - 1)
+
151 {
+
152 static_assert(N <= ulong_bits, "This implementation is inefficient for large bitsets");
+
153 _bitset >>= offset;
+
154 advance();
+
155 }
+
156
+
157 set_iterator& operator++() noexcept
+
158 {
+
159 advance();
+
160 return *this;
+
161 }
+
162
+
163 set_iterator operator++(int) noexcept
+
164 {
+
165 auto ret = *this;
+
166 advance();
+
167 return ret;
+
168 }
+
169
+
170 int operator*() const noexcept
+
171 {
+
172 return _index;
+
173 }
+
174
+
175 bool operator==(const set_iterator& other) const noexcept
+
176 {
+
177 return _index == other._index;
+
178 }
+
179
+
180 bool operator!=(const set_iterator& other) const noexcept
+
181 {
+
182 return !(*this == other);
+
183 }
+
184private:
+
185 std::bitset<N> _bitset;
+
186 int _index;
+
187};
+
188
+
189template<size_t N>
+ +
191{
+
192public:
+ +
194 using value_type = int;
+
195
+
196 constexpr set_range(std::bitset<N> bitset, int offset = 0) noexcept
+
197 : _bitset(bitset)
+
198 , _offset(offset)
+
199 {
+
200 }
+
201
+
202 iterator begin() const noexcept { return iterator(_bitset, _offset); }
+
203 iterator end() const noexcept { return iterator(0); }
+
204private:
+
205 std::bitset<N> _bitset;
+
206 int _offset;
+
207};
+
208
+
209template<size_t N>
+
210inline set_range<N> for_each_set(std::bitset<N> bitset, int offset = 0) noexcept
+
211{
+
212 return set_range<N>(bitset, offset);
+
213}
+
214
+
215SEASTAR_MODULE_EXPORT_END
+
216
+
217}
+
218
+
219}
+
Definition: bitset-iter.hh:129
+
Definition: bitset-iter.hh:191
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/bool__class_8hh_source.html b/master/bool__class_8hh_source.html new file mode 100644 index 000000000..a72c41407 --- /dev/null +++ b/master/bool__class_8hh_source.html @@ -0,0 +1,165 @@ + + + + + + + +Seastar: seastar/util/bool_class.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
bool_class.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2016 ScyllaDB.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <ostream>
+
25#include <fmt/core.h>
+
26
+
27namespace seastar {
+
28
+
31
+
57template<typename Tag>
+ +
59 bool _value;
+
60public:
+
61 static const bool_class yes;
+
62 static const bool_class no;
+
63
+
65 constexpr bool_class() noexcept : _value(false) { }
+
66
+
68 constexpr explicit bool_class(bool v) noexcept : _value(v) { }
+
69
+
71 explicit operator bool() const noexcept { return _value; }
+
72
+ +
75 return bool_class(x._value || y._value);
+
76 }
+
77
+ +
80 return bool_class(x._value && y._value);
+
81 }
+
82
+
84 friend bool_class operator!(bool_class x) noexcept {
+
85 return bool_class(!x._value);
+
86 }
+
87
+
89 friend bool operator==(bool_class x, bool_class y) noexcept = default;
+
90
+
92 friend std::ostream& operator<<(std::ostream& os, bool_class v) {
+
93 return os << (v._value ? "true" : "false");
+
94 }
+
95};
+
96
+
97template<typename Tag>
+
98const bool_class<Tag> bool_class<Tag>::yes { true };
+
99template<typename Tag>
+
100const bool_class<Tag> bool_class<Tag>::no { false };
+
101
+
103
+
104}
+
105
+
106template<typename Tag>
+
107struct fmt::formatter<seastar::bool_class<Tag>> {
+
108 constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); }
+
109 template <typename FormatContext>
+
110 auto format(seastar::bool_class<Tag> v, FormatContext& ctx) const{
+
111 return fmt::format_to(ctx.out(), "{}", bool(v));
+
112 }
+
113};
+
Type-safe boolean.
Definition: bool_class.hh:58
+
friend bool_class operator&&(bool_class x, bool_class y) noexcept
Logical AND.
Definition: bool_class.hh:79
+
constexpr bool_class() noexcept
Constructs a bool_class object initialised to false.
Definition: bool_class.hh:65
+
friend bool operator==(bool_class x, bool_class y) noexcept=default
Equal-to and not-equal-to operators.
+
friend std::ostream & operator<<(std::ostream &os, bool_class v)
Prints bool_class value to an output stream.
Definition: bool_class.hh:92
+
friend bool_class operator!(bool_class x) noexcept
Logical NOT.
Definition: bool_class.hh:84
+
friend bool_class operator||(bool_class x, bool_class y) noexcept
Logical OR.
Definition: bool_class.hh:74
+
constexpr bool_class(bool v) noexcept
Constructs a bool_class object initialised to v.
Definition: bool_class.hh:68
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/buffer__allocator_8hh_source.html b/master/buffer__allocator_8hh_source.html new file mode 100644 index 000000000..54d22d3e6 --- /dev/null +++ b/master/buffer__allocator_8hh_source.html @@ -0,0 +1,123 @@ + + + + + + + +Seastar: seastar/core/internal/buffer_allocator.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
buffer_allocator.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2020 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24namespace seastar {
+
25
+
26template <typename CharType>
+
27class temporary_buffer;
+
28
+
29namespace internal {
+
30
+
31// Internal interface for allocating buffers for reads. Used to decouple
+
32// allocation strategies (where to allocate from, and what sizes) from the
+
33// point where allocation happens, to make it as late as possible.
+
34class buffer_allocator {
+
35public:
+
36 virtual ~buffer_allocator() = default;
+
37 virtual temporary_buffer<char> allocate_buffer() = 0;
+
38};
+
39
+
40
+
41}
+
42
+
43}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/cacheline_8hh_source.html b/master/cacheline_8hh_source.html new file mode 100644 index 000000000..caf5cb091 --- /dev/null +++ b/master/cacheline_8hh_source.html @@ -0,0 +1,129 @@ + + + + + + + +Seastar: seastar/core/cacheline.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
cacheline.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2017 IBM.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <cstddef>
+
26#include <seastar/util/modules.hh>
+
27#endif
+
28
+
29namespace seastar {
+
30
+
31SEASTAR_MODULE_EXPORT_BEGIN
+
32
+
33// Platform-dependent cache line size for alignment and padding purposes.
+
34constexpr size_t cache_line_size =
+
35#if defined(__x86_64__) || defined(__i386__)
+
36 64;
+
37#elif defined(__s390x__) || defined(__zarch__)
+
38 256;
+
39#elif defined(__PPC64__)
+
40 128;
+
41#elif defined(__aarch64__)
+
42 128; // from Linux, may vary among different microarchitetures?
+
43#else
+
44#error "cache_line_size not defined for this architecture"
+
45#endif
+
46
+
47SEASTAR_MODULE_EXPORT_END
+
48
+
49}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/checked__ptr_8hh.html b/master/checked__ptr_8hh.html new file mode 100644 index 000000000..4b4e4f0ea --- /dev/null +++ b/master/checked__ptr_8hh.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar/core/checked_ptr.hh File Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
checked_ptr.hh File Reference
+
+
+

Detailed Description

+

Contains a seastar::checked_ptr class implementation.

+
#include <exception>
+#include <memory>
+#include <seastar/util/modules.hh>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + +

+Classes

class  seastar::checked_ptr_is_null_exception
 The exception thrown by a default_null_deref_action. More...
 
struct  seastar::default_null_deref_action
 Default not engaged seastar::checked_ptr dereferencing action (functor). More...
 
class  seastar::checked_ptr< Ptr, NullDerefAction >
 seastar::checked_ptr class is a wrapper class that may be used with any pointer type (smart like std::unique_ptr or raw pointers like int*). More...
 
struct  std::hash< seastar::checked_ptr< T > >
 std::hash specialization for seastar::checked_ptr class More...
 
+ + + + + + + +

+Namespaces

namespace  seastar
 Seastar API namespace.
 
namespace  std
 STL namespace.
 
+
+ + + + diff --git a/master/checked__ptr_8hh_source.html b/master/checked__ptr_8hh_source.html new file mode 100644 index 000000000..bf550ebc3 --- /dev/null +++ b/master/checked__ptr_8hh_source.html @@ -0,0 +1,228 @@ + + + + + + + +Seastar: seastar/core/checked_ptr.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
checked_ptr.hh
+
+
+Go to the documentation of this file.
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2017 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
26#ifndef SEASTAR_MODULE
+
27#include <exception>
+
28#include <memory>
+
29#include <seastar/util/modules.hh>
+
30#endif
+
31
+
33namespace seastar {
+
34
+
35SEASTAR_MODULE_EXPORT_BEGIN
+
36
+
38class checked_ptr_is_null_exception : public std::exception {};
+
39
+ +
47 void operator()() const {
+ +
49 }
+
50};
+
51SEASTAR_MODULE_EXPORT_END
+
52
+
55namespace internal {
+
56
+
60
+
64template <typename T>
+
65requires requires (T ptr) {
+
66 ptr.get();
+
67}
+
68inline typename std::pointer_traits<std::remove_const_t<T>>::element_type* checked_ptr_do_get(T& ptr) {
+
69 return ptr.get();
+
70}
+
71
+
75template <typename T>
+
76inline T* checked_ptr_do_get(T* ptr) noexcept {
+
77 return ptr;
+
78}
+
80}
+
82
+
98SEASTAR_MODULE_EXPORT
+
99template<typename Ptr, typename NullDerefAction = default_null_deref_action>
+
100requires std::is_default_constructible_v<NullDerefAction> && requires (NullDerefAction action) {
+
101 NullDerefAction();
+
102}
+ +
104public:
+
106 using element_type = typename std::pointer_traits<Ptr>::element_type;
+
107
+ +
110
+
111private:
+
112 Ptr _ptr = nullptr;
+
113
+
114private:
+
116 void check() const {
+
117 if (!_ptr) {
+
118 NullDerefAction()();
+
119 }
+
120 }
+
121
+
122public:
+
123 checked_ptr() noexcept(noexcept(Ptr(nullptr))) = default;
+
124 checked_ptr(std::nullptr_t) noexcept(std::is_nothrow_default_constructible_v<checked_ptr<Ptr, NullDerefAction>>) : checked_ptr() {}
+
125 checked_ptr(Ptr&& ptr) noexcept(std::is_nothrow_move_constructible_v<Ptr>) : _ptr(std::move(ptr)) {}
+
126 checked_ptr(const Ptr& p) noexcept(std::is_nothrow_copy_constructible_v<Ptr>) : _ptr(p) {}
+
127
+
131
+
134 pointer get() const {
+
135 check();
+
136 return internal::checked_ptr_do_get(_ptr);
+
137 }
+
138
+
141 const Ptr& operator->() const {
+
142 check();
+
143 return _ptr;
+
144 }
+
145
+
148 Ptr& operator->() {
+
149 check();
+
150 return _ptr;
+
151 }
+
152
+
155 const element_type& operator*() const {
+
156 check();
+
157 return *_ptr;
+
158 }
+
159
+ +
163 check();
+
164 return *_ptr;
+
165 }
+
167
+
171
+
174 explicit operator bool() const { return bool(_ptr); }
+
175
+
176 bool operator==(const checked_ptr& other) const { return _ptr == other._ptr; }
+
177 bool operator!=(const checked_ptr& other) const { return _ptr != other._ptr; }
+
178
+
181 size_t hash() const {
+
182 return std::hash<Ptr>()(_ptr);
+
183 }
+
185};
+
186
+
187}
+
188
+
189namespace std {
+
191SEASTAR_MODULE_EXPORT
+
192template<typename T>
+
193struct hash<seastar::checked_ptr<T>> {
+
198 size_t operator()(const seastar::checked_ptr<T>& p) const {
+
199 return p.hash();
+
200 }
+
201};
+
202}
+
The exception thrown by a default_null_deref_action.
Definition: checked_ptr.hh:38
+
seastar::checked_ptr class is a wrapper class that may be used with any pointer type (smart like std:...
Definition: checked_ptr.hh:103
+
element_type & operator*()
Definition: checked_ptr.hh:162
+
element_type * pointer
Type of the pointer to the underlying element.
Definition: checked_ptr.hh:109
+
Ptr & operator->()
Definition: checked_ptr.hh:148
+
const element_type & operator*() const
Definition: checked_ptr.hh:155
+
size_t hash() const
Definition: checked_ptr.hh:181
+
const Ptr & operator->() const
Definition: checked_ptr.hh:141
+
typename std::pointer_traits< Ptr >::element_type element_type
Underlying element type.
Definition: checked_ptr.hh:106
+
pointer get() const
Definition: checked_ptr.hh:134
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
STL namespace.
+
Default not engaged seastar::checked_ptr dereferencing action (functor).
Definition: checked_ptr.hh:45
+
void operator()() const
Definition: checked_ptr.hh:47
+
size_t operator()(const seastar::checked_ptr< T > &p) const
Definition: checked_ptr.hh:198
+
+ + + + diff --git a/master/chunked__fifo_8hh_source.html b/master/chunked__fifo_8hh_source.html new file mode 100644 index 000000000..67a3b563f --- /dev/null +++ b/master/chunked__fifo_8hh_source.html @@ -0,0 +1,701 @@ + + + + + + + +Seastar: seastar/core/chunked_fifo.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
chunked_fifo.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2016 ScyllaDB Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <algorithm>
+
26#include <type_traits>
+
27#include <seastar/util/modules.hh>
+
28#endif
+
29
+
30namespace seastar {
+
31
+
32// An unbounded FIFO queue of objects of type T.
+
33//
+
34// It provides operations to push items in one end of the queue, and pop them
+
35// from the other end of the queue - both operations are guaranteed O(1)
+
36// (not just amortized O(1)). The size() operation is also O(1).
+
37// chunked_fifo also guarantees that the largest contiguous memory allocation
+
38// it does is O(1). The total memory used is, of course, O(N).
+
39//
+
40// How does chunked_fifo differ from std::list<>, circular_buffer<> and
+
41// std::deque()?
+
42//
+
43// std::list<> can also make all the above guarantees, but is inefficient -
+
44// both at run speed (every operation requires an allocation), and in memory
+
45// use. Much more efficient than std::list<> is our circular_buffer<>, which
+
46// allocates a contiguous array to hold the items and only reallocates it,
+
47// exponentially, when the queue grows. On one test of several different
+
48// push/pop scenarios, circular_buffer<> was between 5 and 20 times faster
+
49// than std::list, and also used considerably less memory.
+
50// The problem with circular_buffer<> is that gives up on the last guarantee
+
51// we made above: circular_buffer<> allocates all the items in one large
+
52// contiguous allocation - that might not be possible when the memory is
+
53// highly fragmented.
+
54// std::deque<> aims to solve the contiguous allocation problem by allocating
+
55// smaller chunks of the queue, and keeping a list of them in an array. This
+
56// array is necessary to allow for O(1) random access to any element, a
+
57// feature which we do not need; But this array is itself contiguous so
+
58// std::deque<> attempts larger contiguous allocations the larger the queue
+
59// gets: std::deque<>'s contiguous allocation is still O(N) and in fact
+
60// exactly 1/64 of the size of circular_buffer<>'s contiguous allocation.
+
61// So it's an improvement over circular_buffer<>, but not a full solution.
+
62//
+
63// chunked_fifo<> is such a solution: it also allocates the queue in fixed-
+
64// size chunks (just like std::deque) but holds them in a linked list, not
+
65// a contiguous array, so there are no large contiguous allocations.
+
66//
+
67// Unlike std::deque<> or circular_buffer<>, chunked_fifo only provides the
+
68// operations needed by std::queue, i.e.,: empty(), size(), front(), back(),
+
69// push_back() and pop_front(). For simplicity, we do *not* implement other
+
70// possible operations, like inserting or deleting elements from the "wrong"
+
71// side of the queue or from the middle, nor random-access to items in the
+
72// middle of the queue. However, chunked_fifo does allow iterating over all
+
73// of the queue's elements without popping them, a feature which std::queue
+
74// is missing.
+
75//
+
76// Another feature of chunked_fifo which std::deque is missing is the ability
+
77// to control the chunk size, as a template parameter. In std::deque the
+
78// chunk size is undocumented and fixed - in gcc, it is always 512 bytes.
+
79// chunked_fifo, on the other hand, makes the chunk size (in number of items
+
80// instead of bytes) a template parameter; In situations where the queue is
+
81// expected to become very long, using a larger chunk size might make sense
+
82// because it will result in fewer allocations.
+
83//
+
84// chunked_fifo uses uninitialized storage for unoccupied elements, and thus
+
85// uses move/copy constructors instead of move/copy assignments, which are
+
86// less efficient.
+
87
+
88SEASTAR_MODULE_EXPORT
+
89template <typename T, size_t items_per_chunk = 128>
+ +
91 static_assert((items_per_chunk & (items_per_chunk - 1)) == 0,
+
92 "chunked_fifo chunk size must be power of two");
+
93 union maybe_item {
+
94 maybe_item() noexcept {}
+
95 ~maybe_item() {}
+
96 T data;
+
97 };
+
98 struct chunk {
+
99 maybe_item items[items_per_chunk];
+
100 struct chunk* next;
+
101 // begin and end interpreted mod items_per_chunk
+
102 unsigned begin;
+
103 unsigned end;
+
104 };
+
105 // We pop from the chunk at _front_chunk. This chunk is then linked to
+
106 // the following chunks via the "next" link. _back_chunk points to the
+
107 // last chunk in this list, and it is where we push.
+
108 chunk* _front_chunk = nullptr; // where we pop
+
109 chunk* _back_chunk = nullptr; // where we push
+
110 // We want an O(1) size but don't want to maintain a size() counter
+
111 // because this will slow down every push and pop operation just for
+
112 // the rare size() call. Instead, we just keep a count of chunks (which
+
113 // doesn't change on every push or pop), from which we can calculate
+
114 // size() when needed, and still be O(1).
+
115 // This assumes the invariant that all middle chunks (except the front
+
116 // and back) are always full.
+
117 size_t _nchunks = 0;
+
118 // A list of freed chunks, to support reserve() and to improve
+
119 // performance of repeated push and pop, especially on an empty queue.
+
120 // It is a performance/memory tradeoff how many freed chunks to keep
+
121 // here (see save_free_chunks constant below).
+
122 chunk* _free_chunks = nullptr;
+
123 size_t _nfree_chunks = 0;
+
124public:
+
125 using value_type = T;
+
126 using size_type = size_t;
+
127 using reference = T&;
+
128 using pointer = T*;
+
129 using const_reference = const T&;
+
130 using const_pointer = const T*;
+
131
+
132private:
+
133 template <bool IsConst>
+
134 class basic_iterator {
+
135 friend class chunked_fifo;
+
136
+
137 public:
+
138 using iterator_category = std::forward_iterator_tag;
+
139 using difference_type = std::ptrdiff_t;
+
140 using value_type = std::conditional_t<IsConst, const T, T>;
+
141 using pointer = value_type*;
+
142 using reference = value_type&;
+
143
+
144 private:
+
145 using chunk_t = std::conditional_t<IsConst, const chunk, chunk>;
+
146 chunk_t* _chunk = nullptr;
+
147 size_t _item_index = 0;
+
148
+
149 protected:
+
150 inline explicit basic_iterator(chunk_t* c) noexcept;
+
151 inline basic_iterator(chunk_t* c, size_t item_index) noexcept;
+
152
+
153 public:
+
154 basic_iterator() noexcept = default;
+
155 template<bool OtherIsConst, std::enable_if_t<IsConst && !OtherIsConst, int> = 0>
+
156 inline basic_iterator(const basic_iterator<OtherIsConst>& o) noexcept
+
157 : basic_iterator{o._chunk, o._item_index} {}
+
158 inline bool operator==(const basic_iterator& o) const noexcept;
+
159 inline bool operator!=(const basic_iterator& o) const noexcept;
+
160 inline pointer operator->() const noexcept;
+
161 inline reference operator*() const noexcept;
+
162 inline basic_iterator operator++(int) noexcept;
+
163 basic_iterator& operator++() noexcept;
+
164 };
+
165
+
166public:
+
167 using iterator = basic_iterator<false>;
+
168 using const_iterator = basic_iterator<true>;
+
169
+
170public:
+
171 chunked_fifo() noexcept = default;
+
172 chunked_fifo(chunked_fifo&& x) noexcept;
+
173 chunked_fifo(const chunked_fifo& X) = delete;
+ +
175 chunked_fifo& operator=(const chunked_fifo&) = delete;
+
176 chunked_fifo& operator=(chunked_fifo&&) noexcept;
+
177 inline void push_back(const T& data);
+
178 inline void push_back(T&& data);
+
179 T& back() noexcept;
+
180 const T& back() const noexcept;
+
181 template <typename... A>
+
182 inline void emplace_back(A&&... args);
+
183 inline T& front() const noexcept;
+
184 inline void pop_front() noexcept;
+
185 inline bool empty() const noexcept;
+
186 inline size_t size() const noexcept;
+
187 void clear() noexcept;
+
188 // reserve(n) ensures that at least (n - size()) further push() calls can
+
189 // be served without needing new memory allocation.
+
190 // Calling pop()s between these push()es is also allowed and does not
+
191 // alter this guarantee.
+
192 // Note that reserve() does not reduce the amount of memory already
+
193 // reserved - use shrink_to_fit() for that.
+
194 void reserve(size_t n);
+
195 // shrink_to_fit() frees memory held, but unused, by the queue. Such
+
196 // unused memory might exist after pops, or because of reserve().
+
197 void shrink_to_fit() noexcept;
+
198 inline iterator begin() noexcept;
+
199 inline iterator end() noexcept;
+
200 inline const_iterator begin() const noexcept;
+
201 inline const_iterator end() const noexcept;
+
202 inline const_iterator cbegin() const noexcept;
+
203 inline const_iterator cend() const noexcept;
+
204private:
+
205 void back_chunk_new();
+
206 void front_chunk_delete() noexcept;
+
207 inline void ensure_room_back();
+
208 void undo_room_back() noexcept;
+
209 static inline size_t mask(size_t idx) noexcept;
+
210
+
211};
+
212
+
213template <typename T, size_t items_per_chunk>
+
214template <bool IsConst>
+
215inline
+
216chunked_fifo<T, items_per_chunk>::basic_iterator<IsConst>::basic_iterator(chunk_t* c) noexcept : _chunk(c), _item_index(_chunk ? _chunk->begin : 0) {
+
217}
+
218
+
219template <typename T, size_t items_per_chunk>
+
220template <bool IsConst>
+
221inline
+
222chunked_fifo<T, items_per_chunk>::basic_iterator<IsConst>::basic_iterator(chunk_t* c, size_t item_index) noexcept : _chunk(c), _item_index(item_index) {
+
223}
+
224
+
225template <typename T, size_t items_per_chunk>
+
226template <bool IsConst>
+
227inline bool
+
228chunked_fifo<T, items_per_chunk>::basic_iterator<IsConst>::operator==(const basic_iterator& o) const noexcept {
+
229 return _chunk == o._chunk && _item_index == o._item_index;
+
230}
+
231
+
232template <typename T, size_t items_per_chunk>
+
233template <bool IsConst>
+
234inline bool
+
235chunked_fifo<T, items_per_chunk>::basic_iterator<IsConst>::operator!=(const basic_iterator& o) const noexcept {
+
236 return !(*this == o);
+
237}
+
238
+
239template <typename T, size_t items_per_chunk>
+
240template <bool IsConst>
+
241inline typename chunked_fifo<T, items_per_chunk>::template basic_iterator<IsConst>::pointer
+
242chunked_fifo<T, items_per_chunk>::basic_iterator<IsConst>::operator->() const noexcept {
+
243 return &_chunk->items[chunked_fifo::mask(_item_index)].data;
+
244}
+
245
+
246template <typename T, size_t items_per_chunk>
+
247template <bool IsConst>
+
248inline typename chunked_fifo<T, items_per_chunk>::template basic_iterator<IsConst>::reference
+
249chunked_fifo<T, items_per_chunk>::basic_iterator<IsConst>::operator*() const noexcept {
+
250 return _chunk->items[chunked_fifo::mask(_item_index)].data;
+
251}
+
252
+
253template <typename T, size_t items_per_chunk>
+
254template <bool IsConst>
+
255inline typename chunked_fifo<T, items_per_chunk>::template basic_iterator<IsConst>
+
256chunked_fifo<T, items_per_chunk>::basic_iterator<IsConst>::operator++(int) noexcept {
+
257 auto it = *this;
+
258 ++(*this);
+
259 return it;
+
260}
+
261
+
262template <typename T, size_t items_per_chunk>
+
263template <bool IsConst>
+
264typename chunked_fifo<T, items_per_chunk>::template basic_iterator<IsConst>&
+
265chunked_fifo<T, items_per_chunk>::basic_iterator<IsConst>::operator++() noexcept {
+
266 ++_item_index;
+
267 if (_item_index == _chunk->end) {
+
268 _chunk = _chunk->next;
+
269 _item_index = _chunk ? _chunk->begin : 0;
+
270 }
+
271 return *this;
+
272}
+
273
+
274template <typename T, size_t items_per_chunk>
+
275inline
+
276chunked_fifo<T, items_per_chunk>::chunked_fifo(chunked_fifo&& x) noexcept
+
277 : _front_chunk(x._front_chunk)
+
278 , _back_chunk(x._back_chunk)
+
279 , _nchunks(x._nchunks)
+
280 , _free_chunks(x._free_chunks)
+
281 , _nfree_chunks(x._nfree_chunks) {
+
282 x._front_chunk = nullptr;
+
283 x._back_chunk = nullptr;
+
284 x._nchunks = 0;
+
285 x._free_chunks = nullptr;
+
286 x._nfree_chunks = 0;
+
287}
+
288
+
289template <typename T, size_t items_per_chunk>
+
290inline
+
291chunked_fifo<T, items_per_chunk>&
+
292chunked_fifo<T, items_per_chunk>::operator=(chunked_fifo&& x) noexcept {
+
293 if (&x != this) {
+
294 this->~chunked_fifo();
+
295 new (this) chunked_fifo(std::move(x));
+
296 }
+
297 return *this;
+
298}
+
299
+
300template <typename T, size_t items_per_chunk>
+
301inline size_t
+
302chunked_fifo<T, items_per_chunk>::mask(size_t idx) noexcept {
+
303 return idx & (items_per_chunk - 1);
+
304}
+
305
+
306template <typename T, size_t items_per_chunk>
+
307inline bool
+
308chunked_fifo<T, items_per_chunk>::empty() const noexcept {
+
309 return _front_chunk == nullptr;
+
310}
+
311
+
312template <typename T, size_t items_per_chunk>
+
313inline size_t
+
314chunked_fifo<T, items_per_chunk>::size() const noexcept{
+
315 if (_front_chunk == nullptr) {
+
316 return 0;
+
317 } else if (_back_chunk == _front_chunk) {
+
318 // Single chunk.
+
319 return _front_chunk->end - _front_chunk->begin;
+
320 } else {
+
321 return _front_chunk->end - _front_chunk->begin
+
322 +_back_chunk->end - _back_chunk->begin
+
323 + (_nchunks - 2) * items_per_chunk;
+
324 }
+
325}
+
326
+
327template <typename T, size_t items_per_chunk>
+
328void chunked_fifo<T, items_per_chunk>::clear() noexcept {
+
329#if 1
+
330 while (!empty()) {
+
331 pop_front();
+
332 }
+
333#else
+
334 // This is specialized code to free the contents of all the chunks and the
+
335 // chunks themselves. but since destroying a very full queue is not an
+
336 // important use case to optimize, the simple loop above is preferable.
+
337 if (!_front_chunk) {
+
338 // Empty, nothing to do
+
339 return;
+
340 }
+
341 // Delete front chunk (partially filled)
+
342 for (auto i = _front_chunk->begin; i != _front_chunk->end; ++i) {
+
343 _front_chunk->items[mask(i)].data.~T();
+
344 }
+
345 chunk *p = _front_chunk->next;
+
346 delete _front_chunk;
+
347 // Delete all the middle chunks (all completely filled)
+
348 if (p) {
+
349 while (p != _back_chunk) {
+
350 // These are full chunks
+
351 chunk *nextp = p->next;
+
352 for (auto i = 0; i != items_per_chunk; ++i) {
+
353 // Note we delete out of order (we don't start with p->begin).
+
354 // That should be fine..
+
355 p->items[i].data.~T();
+
356 }
+
357 delete p;
+
358 p = nextp;
+
359 }
+
360 // Finally delete back chunk (partially filled)
+
361 for (auto i = _back_chunk->begin; i != _back_chunk->end; ++i) {
+
362 _back_chunk->items[mask(i)].data.~T();
+
363 }
+
364 delete _back_chunk;
+
365 }
+
366 _front_chunk = nullptr;
+
367 _back_chunk = nullptr;
+
368 _nchunks = 0;
+
369#endif
+
370}
+
371
+
372template <typename T, size_t items_per_chunk> void
+
373chunked_fifo<T, items_per_chunk>::shrink_to_fit() noexcept {
+
374 while (_free_chunks) {
+
375 auto next = _free_chunks->next;
+
376 delete _free_chunks;
+
377 _free_chunks = next;
+
378 }
+
379 _nfree_chunks = 0;
+
380}
+
381
+
382template <typename T, size_t items_per_chunk>
+
383chunked_fifo<T, items_per_chunk>::~chunked_fifo() {
+
384 clear();
+
385 shrink_to_fit();
+
386}
+
387
+
388template <typename T, size_t items_per_chunk>
+
389void
+
390chunked_fifo<T, items_per_chunk>::back_chunk_new() {
+
391 chunk *old = _back_chunk;
+
392 if (_free_chunks) {
+
393 _back_chunk = _free_chunks;
+
394 _free_chunks = _free_chunks->next;
+
395 --_nfree_chunks;
+
396 } else {
+
397 _back_chunk = new chunk;
+
398 }
+
399 _back_chunk->next = nullptr;
+
400 _back_chunk->begin = 0;
+
401 _back_chunk->end = 0;
+
402 if (old) {
+
403 old->next = _back_chunk;
+
404 }
+
405 if (_front_chunk == nullptr) {
+
406 _front_chunk = _back_chunk;
+
407 }
+
408 _nchunks++;
+
409}
+
410
+
411
+
412template <typename T, size_t items_per_chunk>
+
413inline void
+
414chunked_fifo<T, items_per_chunk>::ensure_room_back() {
+
415 // If we don't have a back chunk or it's full, we need to create a new one
+
416 if (_back_chunk == nullptr ||
+
417 (_back_chunk->end - _back_chunk->begin) == items_per_chunk) {
+
418 back_chunk_new();
+
419 }
+
420}
+
421
+
422template <typename T, size_t items_per_chunk>
+
423void
+
424chunked_fifo<T, items_per_chunk>::undo_room_back() noexcept {
+
425 // If we failed creating a new item after ensure_room_back() created a
+
426 // new empty chunk, we must remove it, or empty() will be incorrect
+
427 // (either immediately, if the fifo was empty, or when all the items are
+
428 // popped, if it already had items).
+
429 if (_back_chunk->begin == _back_chunk->end) {
+
430 delete _back_chunk;
+
431 --_nchunks;
+
432 if (_nchunks == 0) {
+
433 _back_chunk = nullptr;
+
434 _front_chunk = nullptr;
+
435 } else {
+
436 // Because we don't usually pop from the back, we don't have a "prev"
+
437 // pointer so we need to find the previous chunk the hard and slow
+
438 // way. B
+
439 chunk *old = _back_chunk;
+
440 _back_chunk = _front_chunk;
+
441 while (_back_chunk->next != old) {
+
442 _back_chunk = _back_chunk->next;
+
443 }
+
444 _back_chunk->next = nullptr;
+
445 }
+
446 }
+
447
+
448}
+
449
+
450template <typename T, size_t items_per_chunk>
+
451template <typename... Args>
+
452inline void
+
453chunked_fifo<T, items_per_chunk>::emplace_back(Args&&... args) {
+
454 ensure_room_back();
+
455 auto p = &_back_chunk->items[mask(_back_chunk->end)].data;
+
456 try {
+
457 new(p) T(std::forward<Args>(args)...);
+
458 } catch(...) {
+
459 undo_room_back();
+
460 throw;
+
461 }
+
462 ++_back_chunk->end;
+
463}
+
464
+
465template <typename T, size_t items_per_chunk>
+
466inline void
+
467chunked_fifo<T, items_per_chunk>::push_back(const T& data) {
+
468 ensure_room_back();
+
469 auto p = &_back_chunk->items[mask(_back_chunk->end)].data;
+
470 try {
+
471 new(p) T(data);
+
472 } catch(...) {
+
473 undo_room_back();
+
474 throw;
+
475 }
+
476 ++_back_chunk->end;
+
477}
+
478
+
479template <typename T, size_t items_per_chunk>
+
480inline void
+
481chunked_fifo<T, items_per_chunk>::push_back(T&& data) {
+
482 ensure_room_back();
+
483 auto p = &_back_chunk->items[mask(_back_chunk->end)].data;
+
484 try {
+
485 new(p) T(std::move(data));
+
486 } catch(...) {
+
487 undo_room_back();
+
488 throw;
+
489 }
+
490 ++_back_chunk->end;
+
491}
+
492
+
493template <typename T, size_t items_per_chunk>
+
494inline
+
495T&
+
496chunked_fifo<T, items_per_chunk>::back() noexcept {
+
497 return _back_chunk->items[mask(_back_chunk->end - 1)].data;
+
498}
+
499
+
500template <typename T, size_t items_per_chunk>
+
501inline
+
502const T&
+
503chunked_fifo<T, items_per_chunk>::back() const noexcept {
+
504 return _back_chunk->items[mask(_back_chunk->end - 1)].data;
+
505}
+
506
+
507template <typename T, size_t items_per_chunk>
+
508inline T&
+
509chunked_fifo<T, items_per_chunk>::front() const noexcept {
+
510 return _front_chunk->items[mask(_front_chunk->begin)].data;
+
511}
+
512
+
513template <typename T, size_t items_per_chunk>
+
514inline void
+
515chunked_fifo<T, items_per_chunk>::front_chunk_delete() noexcept {
+
516 chunk *next = _front_chunk->next;
+
517 // Certain use cases may need to repeatedly allocate and free a chunk -
+
518 // an obvious example is an empty queue to which we push, and then pop,
+
519 // repeatedly. Another example is pushing and popping to a non-empty queue
+
520 // we push and pop at different chunks so we need to free and allocate a
+
521 // chunk every items_per_chunk operations.
+
522 // The solution is to keep a list of freed chunks instead of freeing them
+
523 // immediately. There is a performance/memory tradeoff of how many freed
+
524 // chunks to save: If we save them all, the queue can never shrink from
+
525 // its maximum memory use (this is how circular_buffer behaves).
+
526 // The ad-hoc choice made here is to limit the number of saved chunks to 1,
+
527 // but this could easily be made a configuration option.
+
528 static constexpr int save_free_chunks = 1;
+
529 if (_nfree_chunks < save_free_chunks) {
+
530 _front_chunk->next = _free_chunks;
+
531 _free_chunks = _front_chunk;
+
532 ++_nfree_chunks;
+
533 } else {
+
534 delete _front_chunk;
+
535 }
+
536 // If we only had one chunk, _back_chunk is gone too.
+
537 if (_back_chunk == _front_chunk) {
+
538 _back_chunk = nullptr;
+
539 }
+
540 _front_chunk = next;
+
541 --_nchunks;
+
542}
+
543
+
544template <typename T, size_t items_per_chunk>
+
545inline void
+
546chunked_fifo<T, items_per_chunk>::pop_front() noexcept {
+
547 front().~T();
+
548 // If the front chunk has become empty, we need to free remove it and use
+
549 // the next one.
+
550 if (++_front_chunk->begin == _front_chunk->end) {
+
551 front_chunk_delete();
+
552 }
+
553}
+
554
+
555template <typename T, size_t items_per_chunk>
+
556void chunked_fifo<T, items_per_chunk>::reserve(size_t n) {
+
557 // reserve() guarantees that (n - size()) additional push()es will
+
558 // succeed without reallocation:
+
559 if (n <= size()) {
+
560 return;
+
561 }
+
562 size_t need = n - size();
+
563 // If we already have a back chunk, it might have room for some pushes
+
564 // before filling up, so decrease "need":
+
565 if (_back_chunk) {
+
566 size_t back_chunk_n = items_per_chunk - (_back_chunk->end - _back_chunk->begin);
+
567 need -= std::min(back_chunk_n, need);
+
568 }
+
569 size_t needed_chunks = (need + items_per_chunk - 1) / items_per_chunk;
+
570 // If we already have some freed chunks saved, we need to allocate fewer
+
571 // additional chunks, or none at all
+
572 if (needed_chunks <= _nfree_chunks) {
+
573 return;
+
574 }
+
575 needed_chunks -= _nfree_chunks;
+
576 while (needed_chunks--) {
+
577 chunk *c = new chunk;
+
578 c->next = _free_chunks;
+
579 _free_chunks = c;
+
580 ++_nfree_chunks;
+
581 }
+
582}
+
583
+
584template <typename T, size_t items_per_chunk>
+
585inline typename chunked_fifo<T, items_per_chunk>::iterator
+
586chunked_fifo<T, items_per_chunk>::begin() noexcept {
+
587 return iterator(_front_chunk);
+
588}
+
589
+
590template <typename T, size_t items_per_chunk>
+
591inline typename chunked_fifo<T, items_per_chunk>::iterator
+
592chunked_fifo<T, items_per_chunk>::end() noexcept {
+
593 return iterator(nullptr);
+
594}
+
595
+
596template <typename T, size_t items_per_chunk>
+
597inline typename chunked_fifo<T, items_per_chunk>::const_iterator
+
598chunked_fifo<T, items_per_chunk>::begin() const noexcept {
+
599 return const_iterator(_front_chunk);
+
600}
+
601
+
602template <typename T, size_t items_per_chunk>
+
603inline typename chunked_fifo<T, items_per_chunk>::const_iterator
+
604chunked_fifo<T, items_per_chunk>::end() const noexcept {
+
605 return const_iterator(nullptr);
+
606}
+
607
+
608template <typename T, size_t items_per_chunk>
+
609inline typename chunked_fifo<T, items_per_chunk>::const_iterator
+
610chunked_fifo<T, items_per_chunk>::cbegin() const noexcept {
+
611 return const_iterator(_front_chunk);
+
612}
+
613
+
614template <typename T, size_t items_per_chunk>
+
615inline typename chunked_fifo<T, items_per_chunk>::const_iterator
+
616chunked_fifo<T, items_per_chunk>::cend() const noexcept {
+
617 return const_iterator(nullptr);
+
618}
+
619
+
620}
+
Definition: chunked_fifo.hh:90
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/circular__buffer_8hh_source.html b/master/circular__buffer_8hh_source.html new file mode 100644 index 000000000..31f2ddbdc --- /dev/null +++ b/master/circular__buffer_8hh_source.html @@ -0,0 +1,573 @@ + + + + + + + +Seastar: seastar/core/circular_buffer.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
circular_buffer.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/transfer.hh>
+
25#include <seastar/core/bitops.hh>
+
26#include <seastar/util/modules.hh>
+
27#ifndef SEASTAR_MODULE
+
28#include <concepts>
+
29#include <memory>
+
30#include <algorithm>
+
31#endif
+
32
+
33namespace seastar {
+
34
+
61SEASTAR_MODULE_EXPORT
+
62template <typename T, typename Alloc = std::allocator<T>>
+ +
64 struct impl : Alloc {
+
65 T* storage = nullptr;
+
66 // begin, end interpreted (mod capacity)
+
67 size_t begin = 0;
+
68 size_t end = 0;
+
69 size_t capacity = 0;
+
70
+
71 impl(Alloc a) noexcept : Alloc(std::move(a)) { }
+
72 void reset() {
+
73 storage = {};
+
74 begin = 0;
+
75 end = 0;
+
76 capacity = 0;
+
77 }
+
78 };
+
79 static_assert(!std::is_default_constructible_v<Alloc>
+
80 || std::is_nothrow_default_constructible_v<Alloc>);
+
81 static_assert(std::is_nothrow_move_constructible_v<Alloc>);
+
82 impl _impl;
+
83public:
+
84 using value_type = T;
+
85 using size_type = size_t;
+
86 using reference = T&;
+
87 using pointer = T*;
+
88 using const_reference = const T&;
+
89 using const_pointer = const T*;
+
90public:
+
91 circular_buffer() noexcept requires std::default_initializable<Alloc> : circular_buffer(Alloc()) {}
+
92 circular_buffer(Alloc alloc) noexcept;
+
93 circular_buffer(circular_buffer&& X) noexcept;
+
94 circular_buffer(const circular_buffer& X) = delete;
+ +
96 circular_buffer& operator=(const circular_buffer&) = delete;
+
97 circular_buffer& operator=(circular_buffer&& b) noexcept;
+
98 void push_front(const T& data);
+
99 void push_front(T&& data);
+
100 template <typename... A>
+
101 void emplace_front(A&&... args);
+
102 void push_back(const T& data);
+
103 void push_back(T&& data);
+
104 template <typename... A>
+
105 void emplace_back(A&&... args);
+
106 T& front() noexcept;
+
107 const T& front() const noexcept;
+
108 T& back() noexcept;
+
109 const T& back() const noexcept;
+
110 void pop_front() noexcept;
+
111 void pop_back() noexcept;
+
112 bool empty() const noexcept;
+
113 size_t size() const noexcept;
+
114 size_t capacity() const noexcept;
+
115 void reserve(size_t);
+
116 void clear() noexcept;
+
117 T& operator[](size_t idx) noexcept;
+
118 const T& operator[](size_t idx) const noexcept;
+
119 template <typename Func>
+
120 void for_each(Func func);
+
121 // access an element, may return wrong or destroyed element
+
122 // only useful if you do not rely on data accuracy (e.g. prefetch)
+
123 T& access_element_unsafe(size_t idx) noexcept;
+
124private:
+
125 void expand();
+
126 void expand(size_t);
+
127 void maybe_expand(size_t nr = 1);
+
128 size_t mask(size_t idx) const;
+
129
+
130 template<typename CB, typename ValueType>
+
131 struct cbiterator {
+
132 using iterator_category = std::random_access_iterator_tag;
+
133 using value_type = ValueType;
+
134 using difference_type = std::ptrdiff_t;
+
135 using pointer = ValueType*;
+
136 using reference = ValueType&;
+
137
+
138 ValueType& operator*() const noexcept { return cb->_impl.storage[cb->mask(idx)]; }
+
139 ValueType* operator->() const noexcept { return &cb->_impl.storage[cb->mask(idx)]; }
+
140 // prefix
+
141 cbiterator<CB, ValueType>& operator++() noexcept {
+
142 idx++;
+
143 return *this;
+
144 }
+
145 // postfix
+
146 cbiterator<CB, ValueType> operator++(int) noexcept {
+
147 auto v = *this;
+
148 idx++;
+
149 return v;
+
150 }
+
151 // prefix
+
152 cbiterator<CB, ValueType>& operator--() noexcept {
+
153 idx--;
+
154 return *this;
+
155 }
+
156 // postfix
+
157 cbiterator<CB, ValueType> operator--(int) noexcept {
+
158 auto v = *this;
+
159 idx--;
+
160 return v;
+
161 }
+
162 cbiterator<CB, ValueType> operator+(difference_type n) const noexcept {
+
163 return cbiterator<CB, ValueType>(cb, idx + n);
+
164 }
+
165 cbiterator<CB, ValueType> operator-(difference_type n) const noexcept {
+
166 return cbiterator<CB, ValueType>(cb, idx - n);
+
167 }
+
168 cbiterator<CB, ValueType>& operator+=(difference_type n) noexcept {
+
169 idx += n;
+
170 return *this;
+
171 }
+
172 cbiterator<CB, ValueType>& operator-=(difference_type n) noexcept {
+
173 idx -= n;
+
174 return *this;
+
175 }
+
176 bool operator==(const cbiterator<CB, ValueType>& rhs) const noexcept {
+
177 return idx == rhs.idx;
+
178 }
+
179 bool operator!=(const cbiterator<CB, ValueType>& rhs) const noexcept {
+
180 return idx != rhs.idx;
+
181 }
+
182 bool operator<(const cbiterator<CB, ValueType>& rhs) const noexcept {
+
183 return *this - rhs < 0;
+
184 }
+
185 bool operator>(const cbiterator<CB, ValueType>& rhs) const noexcept {
+
186 return *this - rhs > 0;
+
187 }
+
188 bool operator>=(const cbiterator<CB, ValueType>& rhs) const noexcept {
+
189 return *this - rhs >= 0;
+
190 }
+
191 bool operator<=(const cbiterator<CB, ValueType>& rhs) const noexcept {
+
192 return *this - rhs <= 0;
+
193 }
+
194 difference_type operator-(const cbiterator<CB, ValueType>& rhs) const noexcept {
+
195 return idx - rhs.idx;
+
196 }
+
197 cbiterator() = default;
+
198 private:
+
199 CB* cb{nullptr};
+
200 size_t idx{0};
+
201 cbiterator(CB* b, size_t i) noexcept : cb(b), idx(i) {}
+
202 friend class circular_buffer;
+
203 };
+
204 friend class iterator;
+
205
+
206public:
+
207 typedef cbiterator<circular_buffer, T> iterator;
+
208 typedef cbiterator<const circular_buffer, const T> const_iterator;
+
209
+
210 iterator begin() noexcept {
+
211 return iterator(this, _impl.begin);
+
212 }
+
213 const_iterator begin() const noexcept {
+
214 return const_iterator(this, _impl.begin);
+
215 }
+
216 iterator end() noexcept {
+
217 return iterator(this, _impl.end);
+
218 }
+
219 const_iterator end() const noexcept {
+
220 return const_iterator(this, _impl.end);
+
221 }
+
222 const_iterator cbegin() const noexcept {
+
223 return const_iterator(this, _impl.begin);
+
224 }
+
225 const_iterator cend() const noexcept {
+
226 return const_iterator(this, _impl.end);
+
227 }
+
228 iterator erase(iterator first, iterator last) noexcept;
+
229};
+
230
+
231template <typename T, typename Alloc>
+
232inline
+
233size_t
+
234circular_buffer<T, Alloc>::mask(size_t idx) const {
+
235 return idx & (_impl.capacity - 1);
+
236}
+
237
+
238template <typename T, typename Alloc>
+
239inline
+
240bool
+
241circular_buffer<T, Alloc>::empty() const noexcept {
+
242 return _impl.begin == _impl.end;
+
243}
+
244
+
245template <typename T, typename Alloc>
+
246inline
+
247size_t
+
248circular_buffer<T, Alloc>::size() const noexcept {
+
249 return _impl.end - _impl.begin;
+
250}
+
251
+
252template <typename T, typename Alloc>
+
253inline
+
254size_t
+
255circular_buffer<T, Alloc>::capacity() const noexcept {
+
256 return _impl.capacity;
+
257}
+
258
+
259template <typename T, typename Alloc>
+
260inline
+
261void
+
262circular_buffer<T, Alloc>::reserve(size_t size) {
+
263 if (capacity() < size) {
+
264 // Make sure that the new capacity is a power of two.
+
265 expand(size_t(1) << log2ceil(size));
+
266 }
+
267}
+
268
+
269template <typename T, typename Alloc>
+
270inline
+
271void
+
272circular_buffer<T, Alloc>::clear() noexcept {
+
273 erase(begin(), end());
+
274}
+
275
+
276template <typename T, typename Alloc>
+
277inline
+
278circular_buffer<T, Alloc>::circular_buffer(Alloc alloc) noexcept
+
279 : _impl(std::move(alloc)) {
+
280}
+
281
+
282template <typename T, typename Alloc>
+
283inline
+
284circular_buffer<T, Alloc>::circular_buffer(circular_buffer&& x) noexcept
+
285 : _impl(std::move(x._impl)) {
+
286 x._impl.reset();
+
287}
+
288
+
289template <typename T, typename Alloc>
+
290inline
+
291circular_buffer<T, Alloc>& circular_buffer<T, Alloc>::operator=(circular_buffer&& x) noexcept {
+
292 if (this != &x) {
+
293 this->~circular_buffer();
+
294 new (this) circular_buffer(std::move(x));
+
295 }
+
296 return *this;
+
297}
+
298
+
299template <typename T, typename Alloc>
+
300template <typename Func>
+
301inline
+
302void
+
303circular_buffer<T, Alloc>::for_each(Func func) {
+
304 auto s = _impl.storage;
+
305 auto m = _impl.capacity - 1;
+
306 for (auto i = _impl.begin; i != _impl.end; ++i) {
+
307 func(s[i & m]);
+
308 }
+
309}
+
310
+
311template <typename T, typename Alloc>
+
312inline
+
313circular_buffer<T, Alloc>::~circular_buffer() {
+
314 for_each([this] (T& obj) {
+
315 std::allocator_traits<Alloc>::destroy(_impl, &obj);
+
316 });
+
317 _impl.deallocate(_impl.storage, _impl.capacity);
+
318}
+
319
+
320template <typename T, typename Alloc>
+
321void
+
322circular_buffer<T, Alloc>::expand() {
+
323 expand(std::max<size_t>(_impl.capacity * 2, 1));
+
324}
+
325
+
326template <typename T, typename Alloc>
+
327void
+
328circular_buffer<T, Alloc>::expand(size_t new_cap) {
+
329 auto new_storage = _impl.allocate(new_cap);
+
330 auto p = new_storage;
+
331 try {
+
332 for_each([this, &p] (T& obj) {
+
333 transfer_pass1(_impl, &obj, p);
+
334 p++;
+
335 });
+
336 } catch (...) {
+
337 while (p != new_storage) {
+
338 std::allocator_traits<Alloc>::destroy(_impl, --p);
+
339 }
+
340 _impl.deallocate(new_storage, new_cap);
+
341 throw;
+
342 }
+
343 p = new_storage;
+
344 for_each([this, &p] (T& obj) {
+
345 transfer_pass2(_impl, &obj, p++);
+
346 });
+
347 std::swap(_impl.storage, new_storage);
+
348 std::swap(_impl.capacity, new_cap);
+
349 _impl.begin = 0;
+
350 _impl.end = p - _impl.storage;
+
351 _impl.deallocate(new_storage, new_cap);
+
352}
+
353
+
354template <typename T, typename Alloc>
+
355inline
+
356void
+
357circular_buffer<T, Alloc>::maybe_expand(size_t nr) {
+
358 if (_impl.end - _impl.begin + nr > _impl.capacity) {
+
359 expand();
+
360 }
+
361}
+
362
+
363template <typename T, typename Alloc>
+
364inline
+
365void
+
366circular_buffer<T, Alloc>::push_front(const T& data) {
+
367 maybe_expand();
+
368 auto p = &_impl.storage[mask(_impl.begin - 1)];
+
369 std::allocator_traits<Alloc>::construct(_impl, p, data);
+
370 --_impl.begin;
+
371}
+
372
+
373template <typename T, typename Alloc>
+
374inline
+
375void
+
376circular_buffer<T, Alloc>::push_front(T&& data) {
+
377 maybe_expand();
+
378 auto p = &_impl.storage[mask(_impl.begin - 1)];
+
379 std::allocator_traits<Alloc>::construct(_impl, p, std::move(data));
+
380 --_impl.begin;
+
381}
+
382
+
383template <typename T, typename Alloc>
+
384template <typename... Args>
+
385inline
+
386void
+
387circular_buffer<T, Alloc>::emplace_front(Args&&... args) {
+
388 maybe_expand();
+
389 auto p = &_impl.storage[mask(_impl.begin - 1)];
+
390 std::allocator_traits<Alloc>::construct(_impl, p, std::forward<Args>(args)...);
+
391 --_impl.begin;
+
392}
+
393
+
394template <typename T, typename Alloc>
+
395inline
+
396void
+
397circular_buffer<T, Alloc>::push_back(const T& data) {
+
398 maybe_expand();
+
399 auto p = &_impl.storage[mask(_impl.end)];
+
400 std::allocator_traits<Alloc>::construct(_impl, p, data);
+
401 ++_impl.end;
+
402}
+
403
+
404template <typename T, typename Alloc>
+
405inline
+
406void
+
407circular_buffer<T, Alloc>::push_back(T&& data) {
+
408 maybe_expand();
+
409 auto p = &_impl.storage[mask(_impl.end)];
+
410 std::allocator_traits<Alloc>::construct(_impl, p, std::move(data));
+
411 ++_impl.end;
+
412}
+
413
+
414template <typename T, typename Alloc>
+
415template <typename... Args>
+
416inline
+
417void
+
418circular_buffer<T, Alloc>::emplace_back(Args&&... args) {
+
419 maybe_expand();
+
420 auto p = &_impl.storage[mask(_impl.end)];
+
421 std::allocator_traits<Alloc>::construct(_impl, p, std::forward<Args>(args)...);
+
422 ++_impl.end;
+
423}
+
424
+
425template <typename T, typename Alloc>
+
426inline
+
427T&
+
428circular_buffer<T, Alloc>::front() noexcept {
+
429 return _impl.storage[mask(_impl.begin)];
+
430}
+
431
+
432template <typename T, typename Alloc>
+
433inline
+
434const T&
+
435circular_buffer<T, Alloc>::front() const noexcept {
+
436 return _impl.storage[mask(_impl.begin)];
+
437}
+
438
+
439template <typename T, typename Alloc>
+
440inline
+
441T&
+
442circular_buffer<T, Alloc>::back() noexcept {
+
443 return _impl.storage[mask(_impl.end - 1)];
+
444}
+
445
+
446template <typename T, typename Alloc>
+
447inline
+
448const T&
+
449circular_buffer<T, Alloc>::back() const noexcept {
+
450 return _impl.storage[mask(_impl.end - 1)];
+
451}
+
452
+
453template <typename T, typename Alloc>
+
454inline
+
455void
+
456circular_buffer<T, Alloc>::pop_front() noexcept {
+
457 std::allocator_traits<Alloc>::destroy(_impl, &front());
+
458 ++_impl.begin;
+
459}
+
460
+
461template <typename T, typename Alloc>
+
462inline
+
463void
+
464circular_buffer<T, Alloc>::pop_back() noexcept {
+
465 std::allocator_traits<Alloc>::destroy(_impl, &back());
+
466 --_impl.end;
+
467}
+
468
+
469template <typename T, typename Alloc>
+
470inline
+
471T&
+
472circular_buffer<T, Alloc>::operator[](size_t idx) noexcept {
+
473 return _impl.storage[mask(_impl.begin + idx)];
+
474}
+
475
+
476template <typename T, typename Alloc>
+
477inline
+
478const T&
+
479circular_buffer<T, Alloc>::operator[](size_t idx) const noexcept {
+
480 return _impl.storage[mask(_impl.begin + idx)];
+
481}
+
482
+
483template <typename T, typename Alloc>
+
484inline
+
485T&
+
486circular_buffer<T, Alloc>::access_element_unsafe(size_t idx) noexcept {
+
487 return _impl.storage[mask(_impl.begin + idx)];
+
488}
+
489
+
490template <typename T, typename Alloc>
+
491inline
+
492typename circular_buffer<T, Alloc>::iterator
+
493circular_buffer<T, Alloc>::erase(iterator first, iterator last) noexcept {
+
494 static_assert(std::is_nothrow_move_assignable_v<T>, "erase() assumes move assignment does not throw");
+
495 if (first == last) {
+
496 return last;
+
497 }
+
498 // Move to the left or right depending on which would result in least amount of moves.
+
499 // This also guarantees that iterators will be stable when removing from either front or back.
+
500 if (std::distance(begin(), first) < std::distance(last, end())) {
+
501 auto new_start = std::move_backward(begin(), first, last);
+
502 for (auto i = begin(); i < new_start; ++i) {
+
503 std::allocator_traits<Alloc>::destroy(_impl, &*i);
+
504 }
+
505 _impl.begin = new_start.idx;
+
506 return last;
+
507 } else {
+
508 auto new_end = std::move(last, end(), first);
+
509 for (auto i = new_end, e = end(); i < e; ++i) {
+
510 std::allocator_traits<Alloc>::destroy(_impl, &*i);
+
511 }
+
512 _impl.end = new_end.idx;
+
513 return first;
+
514 }
+
515}
+
516
+
517}
+
Definition: circular_buffer.hh:63
+
holds the implementation parts of the metrics layer, do not use directly.
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/circular__buffer__fixed__capacity_8hh.html b/master/circular__buffer__fixed__capacity_8hh.html new file mode 100644 index 000000000..d1b53827a --- /dev/null +++ b/master/circular__buffer__fixed__capacity_8hh.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: seastar/core/circular_buffer_fixed_capacity.hh File Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
circular_buffer_fixed_capacity.hh File Reference
+
+
+
#include <type_traits>
+#include <cstddef>
+#include <iterator>
+#include <utility>
+#include <memory>
+#include <seastar/util/modules.hh>
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  seastar::circular_buffer_fixed_capacity< T, Capacity >
 
class  seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >
 
+ + + + +

+Namespaces

namespace  seastar
 Seastar API namespace.
 
+
+ + + + diff --git a/master/circular__buffer__fixed__capacity_8hh_source.html b/master/circular__buffer__fixed__capacity_8hh_source.html new file mode 100644 index 000000000..094dbc017 --- /dev/null +++ b/master/circular__buffer__fixed__capacity_8hh_source.html @@ -0,0 +1,452 @@ + + + + + + + +Seastar: seastar/core/circular_buffer_fixed_capacity.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
circular_buffer_fixed_capacity.hh
+
+
+Go to the documentation of this file.
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2017 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24// A fixed capacity double-ended queue container that can be efficiently
+
25// extended (and shrunk) from both ends. Implementation is a single
+
26// storage vector.
+
27//
+
28// Similar to libstdc++'s std::deque, except that it uses a single level
+
29// store, and so is more efficient for simple stored items.
+
30
+
31#ifndef SEASTAR_MODULE
+
32#include <type_traits>
+
33#include <cstddef>
+
34#include <iterator>
+
35#include <utility>
+
36#include <memory>
+
37#include <seastar/util/modules.hh>
+
38#endif
+
39
+
41
+
42namespace seastar {
+
43
+
51SEASTAR_MODULE_EXPORT
+
52template <typename T, size_t Capacity>
+ +
54 size_t _begin = 0;
+
55 size_t _end = 0;
+
56 union maybe_storage {
+
57 T data;
+
58 maybe_storage() noexcept {}
+
59 ~maybe_storage() {}
+
60 };
+
61 maybe_storage _storage[Capacity];
+
62private:
+
63 static size_t mask(size_t idx) { return idx % Capacity; }
+
64 T* obj(size_t idx) { return &_storage[mask(idx)].data; }
+
65 const T* obj(size_t idx) const { return &_storage[mask(idx)].data; }
+
66public:
+
67 static_assert((Capacity & (Capacity - 1)) == 0, "capacity must be a power of two");
+
68 static_assert(std::is_nothrow_move_constructible_v<T> && std::is_nothrow_move_assignable_v<T>,
+
69 "circular_buffer_fixed_capacity only supports nothrow-move value types");
+
70 using value_type = T;
+
71 using size_type = size_t;
+
72 using reference = T&;
+
73 using pointer = T*;
+
74 using const_reference = const T&;
+
75 using const_pointer = const T*;
+
76 using difference_type = ssize_t;
+
77public:
+
78 template <typename ValueType>
+
79 class cbiterator {
+
80 using holder = std::conditional_t<std::is_const_v<ValueType>, const maybe_storage, maybe_storage>;
+
81 holder* _start;
+
82 size_t _idx;
+
83 private:
+
84 cbiterator(holder* start, size_t idx) noexcept : _start(start), _idx(idx) {}
+
85 public:
+
86 using iterator_category = std::random_access_iterator_tag;
+
87 using value_type = ValueType;
+
88 using difference_type = ssize_t;
+
89 using pointer = ValueType*;
+
90 using reference = ValueType&;
+
91 public:
+
92 cbiterator();
+
93 ValueType& operator*() const { return _start[mask(_idx)].data; }
+
94 ValueType* operator->() const { return &operator*(); }
+
95 // prefix
+
96 cbiterator& operator++() {
+
97 ++_idx;
+
98 return *this;
+
99 }
+
100 // postfix
+
101 cbiterator operator++(int) {
+
102 auto v = *this;
+
103 ++_idx;
+
104 return v;
+
105 }
+
106 // prefix
+
107 cbiterator& operator--() {
+
108 --_idx;
+
109 return *this;
+
110 }
+
111 // postfix
+
112 cbiterator operator--(int) {
+
113 auto v = *this;
+
114 --_idx;
+
115 return v;
+
116 }
+
117 cbiterator operator+(difference_type n) const {
+
118 return cbiterator{_start, _idx + n};
+
119 }
+
120 friend cbiterator operator+(difference_type n, cbiterator i) {
+
121 return i + n;
+
122 }
+
123 cbiterator operator-(difference_type n) const {
+
124 return cbiterator{_start, _idx - n};
+
125 }
+
126 cbiterator& operator+=(difference_type n) {
+
127 _idx += n;
+
128 return *this;
+
129 }
+
130 cbiterator& operator-=(difference_type n) {
+
131 _idx -= n;
+
132 return *this;
+
133 }
+
134 bool operator==(const cbiterator& rhs) const {
+
135 return _idx == rhs._idx;
+
136 }
+
137 bool operator!=(const cbiterator& rhs) const {
+
138 return _idx != rhs._idx;
+
139 }
+
140 bool operator<(const cbiterator& rhs) const {
+
141 return ssize_t(_idx - rhs._idx) < 0;
+
142 }
+
143 bool operator>(const cbiterator& rhs) const {
+
144 return ssize_t(_idx - rhs._idx) > 0;
+
145 }
+
146 bool operator<=(const cbiterator& rhs) const {
+
147 return ssize_t(_idx - rhs._idx) <= 0;
+
148 }
+
149 bool operator>=(const cbiterator& rhs) const {
+
150 return ssize_t(_idx - rhs._idx) >= 0;
+
151 }
+
152 difference_type operator-(const cbiterator& rhs) const {
+
153 return _idx - rhs._idx;
+
154 }
+ +
156 };
+
157public:
+
158 using iterator = cbiterator<T>;
+ +
160public:
+ + + + +
165 void push_front(const T& data);
+
166 void push_front(T&& data);
+
167 template <typename... A>
+
168 T& emplace_front(A&&... args);
+
169 void push_back(const T& data);
+
170 void push_back(T&& data);
+
171 template <typename... A>
+
172 T& emplace_back(A&&... args);
+
173 T& front();
+
174 T& back();
+
175 void pop_front();
+
176 void pop_back();
+
177 bool empty() const;
+
178 size_t size() const;
+
179 size_t capacity() const;
+
180 T& operator[](size_t idx);
+
181 void clear();
+
182 iterator begin() {
+
183 return iterator(_storage, _begin);
+
184 }
+
185 const_iterator begin() const {
+
186 return const_iterator(_storage, _begin);
+
187 }
+
188 iterator end() {
+
189 return iterator(_storage, _end);
+
190 }
+
191 const_iterator end() const {
+
192 return const_iterator(_storage, _end);
+
193 }
+
194 const_iterator cbegin() const {
+
195 return const_iterator(_storage, _begin);
+
196 }
+
197 const_iterator cend() const {
+
198 return const_iterator(_storage, _end);
+
199 }
+
200 iterator erase(iterator first, iterator last);
+
201};
+
202
+
203template <typename T, size_t Capacity>
+
204inline
+
205bool
+
206circular_buffer_fixed_capacity<T, Capacity>::empty() const {
+
207 return _begin == _end;
+
208}
+
209
+
210template <typename T, size_t Capacity>
+
211inline
+
212size_t
+
213circular_buffer_fixed_capacity<T, Capacity>::size() const {
+
214 return _end - _begin;
+
215}
+
216
+
217template <typename T, size_t Capacity>
+
218inline
+
219size_t
+
220circular_buffer_fixed_capacity<T, Capacity>::capacity() const {
+
221 return Capacity;
+
222}
+
223
+
224template <typename T, size_t Capacity>
+
225inline
+
226circular_buffer_fixed_capacity<T, Capacity>::circular_buffer_fixed_capacity(circular_buffer_fixed_capacity&& x) noexcept
+
227 : _begin(x._begin), _end(x._end) {
+
228 std::uninitialized_move(x.begin(), x.end(), begin());
+
229}
+
230
+
231template <typename T, size_t Capacity>
+
232inline
+
233circular_buffer_fixed_capacity<T, Capacity>&
+
234circular_buffer_fixed_capacity<T, Capacity>::operator=(circular_buffer_fixed_capacity&& x) noexcept {
+
235 if (this != &x) {
+
236 this->~circular_buffer_fixed_capacity();
+
237 new (this) circular_buffer_fixed_capacity(std::move(x));
+
238 }
+
239 return *this;
+
240}
+
241
+
242template <typename T, size_t Capacity>
+
243inline
+
244circular_buffer_fixed_capacity<T, Capacity>::~circular_buffer_fixed_capacity() {
+
245 clear();
+
246}
+
247
+
248template <typename T, size_t Capacity>
+
249inline
+
250void
+
251circular_buffer_fixed_capacity<T, Capacity>::push_front(const T& data) {
+
252 new (obj(_begin - 1)) T(data);
+
253 --_begin;
+
254}
+
255
+
256template <typename T, size_t Capacity>
+
257inline
+
258void
+
259circular_buffer_fixed_capacity<T, Capacity>::push_front(T&& data) {
+
260 new (obj(_begin - 1)) T(std::move(data));
+
261 --_begin;
+
262}
+
263
+
264template <typename T, size_t Capacity>
+
265template <typename... Args>
+
266inline
+
267T&
+
268circular_buffer_fixed_capacity<T, Capacity>::emplace_front(Args&&... args) {
+
269 auto p = new (obj(_begin - 1)) T(std::forward<Args>(args)...);
+
270 --_begin;
+
271 return *p;
+
272}
+
273
+
274template <typename T, size_t Capacity>
+
275inline
+
276void
+
277circular_buffer_fixed_capacity<T, Capacity>::push_back(const T& data) {
+
278 new (obj(_end)) T(data);
+
279 ++_end;
+
280}
+
281
+
282template <typename T, size_t Capacity>
+
283inline
+
284void
+
285circular_buffer_fixed_capacity<T, Capacity>::push_back(T&& data) {
+
286 new (obj(_end)) T(std::move(data));
+
287 ++_end;
+
288}
+
289
+
290template <typename T, size_t Capacity>
+
291template <typename... Args>
+
292inline
+
293T&
+
294circular_buffer_fixed_capacity<T, Capacity>::emplace_back(Args&&... args) {
+
295 auto p = new (obj(_end)) T(std::forward<Args>(args)...);
+
296 ++_end;
+
297 return *p;
+
298}
+
299
+
300template <typename T, size_t Capacity>
+
301inline
+
302T&
+
303circular_buffer_fixed_capacity<T, Capacity>::front() {
+
304 return *obj(_begin);
+
305}
+
306
+
307template <typename T, size_t Capacity>
+
308inline
+
309T&
+
310circular_buffer_fixed_capacity<T, Capacity>::back() {
+
311 return *obj(_end - 1);
+
312}
+
313
+
314template <typename T, size_t Capacity>
+
315inline
+
316void
+
317circular_buffer_fixed_capacity<T, Capacity>::pop_front() {
+
318 obj(_begin)->~T();
+
319 ++_begin;
+
320}
+
321
+
322template <typename T, size_t Capacity>
+
323inline
+
324void
+
325circular_buffer_fixed_capacity<T, Capacity>::pop_back() {
+
326 obj(_end - 1)->~T();
+
327 --_end;
+
328}
+
329
+
330template <typename T, size_t Capacity>
+
331inline
+
332T&
+
333circular_buffer_fixed_capacity<T, Capacity>::operator[](size_t idx) {
+
334 return *obj(_begin + idx);
+
335}
+
336
+
337template <typename T, size_t Capacity>
+
338inline
+
339typename circular_buffer_fixed_capacity<T, Capacity>::iterator
+
340circular_buffer_fixed_capacity<T, Capacity>::erase(iterator first, iterator last) {
+
341 static_assert(std::is_nothrow_move_assignable_v<T>, "erase() assumes move assignment does not throw");
+
342 if (first == last) {
+
343 return last;
+
344 }
+
345 // Move to the left or right depending on which would result in least amount of moves.
+
346 // This also guarantees that iterators will be stable when removing from either front or back.
+
347 if (std::distance(begin(), first) < std::distance(last, end())) {
+
348 auto new_start = std::move_backward(begin(), first, last);
+
349 auto i = begin();
+
350 while (i < new_start) {
+
351 i++->~T();
+
352 }
+
353 _begin = new_start.idx;
+
354 return last;
+
355 } else {
+
356 auto new_end = std::move(last, end(), first);
+
357 auto i = new_end;
+
358 auto e = end();
+
359 while (i < e) {
+
360 i++->~T();
+
361 }
+
362 _end = new_end.idx;
+
363 return first;
+
364 }
+
365}
+
366
+
367template <typename T, size_t Capacity>
+
368inline
+
369void
+
370circular_buffer_fixed_capacity<T, Capacity>::clear() {
+
371 for (auto& obj : *this) {
+
372 obj.~T();
+
373 }
+
374 _begin = _end = 0;
+
375}
+
376
+
377}
+
378
+
Definition: circular_buffer_fixed_capacity.hh:79
+
Definition: circular_buffer_fixed_capacity.hh:53
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/classes.html b/master/classes.html new file mode 100644 index 000000000..317760d78 --- /dev/null +++ b/master/classes.html @@ -0,0 +1,153 @@ + + + + + + + +Seastar: Class Index + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Class Index
+
+
+
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y
+
+
+
A
+
smp_message_queue::tx_side::aa (seastar)
abort_on_expiry (seastar)
abort_requested_exception (seastar)
abort_source (seastar)
abstract_credentials (seastar::tls)
accept_result (seastar)
adder (seastar)
all (seastar::coroutine)
alloc_failure_injector (seastar::memory)
allocation_site (seastar::memory)
future_state_base::any (seastar)
api_doc (seastar::httpd)
api_docs (seastar::httpd)
api_docs_20 (seastar::httpd)
api_registry (seastar::httpd)
api_registry_20 (seastar::httpd)
api_registry_base (seastar::httpd)
api_registry_builder (seastar::httpd)
api_registry_builder20 (seastar::httpd)
api_registry_builder_base (seastar::httpd)
approximate_exponential_histogram (seastar::metrics::internal)
function_traits< Ret(Args...)>::arg (seastar)
arp (seastar::net)
arp_error (seastar::net)
arp_for (seastar::net)
arp_for_protocol (seastar::net)
arp_queue_full_error (seastar::net)
arp_timeout_error (seastar::net)
array_map (seastar)
as_future (seastar::coroutine)
as_future_without_preemption_check (seastar::coroutine)
async_sharded_service (seastar)
posix_thread::attr (seastar)
+
+
B
+
bad_chunk_exception (seastar::httpd)
bad_param_exception (seastar::httpd)
bad_request_exception (seastar::httpd)
base_exception (seastar::httpd)
basic_rwlock (seastar)
basic_semaphore (seastar)
basic_sstring (seastar)
basic_value (seastar::program_options)
bool_class (seastar)
broken_condition_variable (seastar)
broken_named_semaphore (seastar)
broken_pipe_exception (seastar)
broken_promise (seastar)
broken_semaphore (seastar)
+
+
C
+
canceled_error (seastar::rpc)
cancellable (seastar::rpc)
cancelled_error (seastar)
selection_value::candidate (seastar::program_options)
circular_buffer_fixed_capacity::cbiterator (seastar)
certificate_credentials (seastar::tls)
checked_ptr (seastar)
checked_ptr_is_null_exception (seastar)
checksummer (seastar::net)
chunked_fifo (seastar)
chunked_source_impl (seastar::httpd::internal)
circular_buffer (seastar)
circular_buffer_fixed_capacity (seastar)
client (seastar::rpc)
protocol::client (seastar::rpc)
client (seastar::http::experimental)
client_function_type (seastar::rpc)
client_info (seastar::rpc)
client_options (seastar::rpc)
client_ref (seastar::http::internal)
closed_error (seastar::rpc)
compressor (seastar::rpc)
concrete_execution_stage (seastar)
concrete_performance_test (perf_tests::internal)
condition_variable (seastar)
condition_variable_timed_out (seastar)
fair_queue::config (seastar)
config (seastar::prometheus)
config (seastar::metrics::impl)
fair_group::config (seastar)
io_queue::config (seastar)
config_exception (seastar::net)
configuration (seastar::resource)
connected_socket (seastar)
connected_socket_input_stream_config (seastar)
connection (seastar::experimental::websocket)
connection (seastar::http::experimental)
connection (seastar::httpd)
tcp::connection (seastar::net)
connection (seastar::rpc)
server::connection (seastar::rpc)
connection_factory (seastar::http::experimental)
connection_id (seastar::rpc)
l4connid::connid_hash (seastar::net)
conntrack (seastar::net)
consumption_result (seastar)
content_length_source_impl (seastar::httpd::internal)
content_replace (seastar::httpd)
continue_consuming (seastar)
coroutine_traits< seastar::future< T >, Args... > (std)
counter_type_traits (seastar::metrics::impl)
cpu (seastar::resource)
credentials_builder (seastar::tls)
future_state_base::current_exception_future_marker (seastar)
+
+
D
+
data_sink (seastar)
data_sink_impl (seastar)
data_source (seastar)
data_source_impl (seastar)
data_type_for (seastar::scollectd)
data_type_for< T, std::enable_if_t< is_callable< T >::value, void > > (seastar::scollectd)
data_type_for< T, std::enable_if_t< std::is_floating_point_v< T >, void > > (seastar::scollectd)
data_type_for< T, std::enable_if_t< std::is_integral_v< T > &&std::is_unsigned_v< T >, void > > (seastar::scollectd)
data_type_for< typed< T > > (seastar::scollectd)
datagram (seastar::net)
datagram_channel (seastar::net)
datagram_impl (seastar::net)
default_null_deref_action (seastar)
default_timeout_exception_factory (seastar)
deferred_action (seastar)
deferred_close (seastar)
deferred_snd_buf (seastar::rpc)
deferred_stop (seastar)
deleter (seastar)
description (seastar::metrics)
device (seastar::net)
device_config (seastar::net)
dh_params (seastar::tls)
dhcp (seastar::net)
directory_entry (seastar)
directory_handler (seastar::httpd)
disable_failure_guard (seastar::memory)
sampler::disable_sampling_temporarily
lw_shared_ptr::disposer (seastar)
dns_resolver (seastar::net)
do_want_client_info (seastar::rpc)
do_want_time_point (seastar::rpc)
dont_want_client_info (seastar::rpc)
dont_want_time_point (seastar::rpc)
double_registration (seastar::metrics)
dpdk_options (seastar::net)
dummy_expiry (seastar)
+
+
E
+
enable_lw_shared_from_this (seastar)
enable_shared_from_this (seastar)
enum_hash (seastar)
file::eof_error (seastar)
tcp_option::eol (seastar::net)
error (seastar::rpc)
eth_hdr (seastar::net)
ethernet (seastar::net)
ethernet_address (seastar::net)
fsnotifier::event (seastar::experimental)
exception (seastar::coroutine)
exception (seastar::experimental::websocket)
exception_future_marker (seastar)
exchanger (seastar::testing)
exchanger_base (seastar::testing)
execution_stage (seastar)
expiring_fifo (seastar)
basic_sstring::contents::external_type (seastar)
+
+
F
+
lz4_compressor::factory (seastar::rpc)
compressor::factory (seastar::rpc)
lz4_fragmented_compressor::factory (seastar::rpc)
fair_group (seastar)
fair_queue (seastar)
fair_queue_entry (seastar)
fair_queue_ticket (seastar)
file (seastar)
file_desc (seastar)
file_handle (seastar)
file_handle_impl (seastar)
file_handler (seastar::httpd)
file_impl (seastar)
file_input_stream_history (seastar)
file_input_stream_options (seastar)
file_interaction_handler (seastar::httpd)
file_open_options (seastar)
file_output_stream_options (seastar)
file_transformer (seastar::httpd)
future::finally_body (seastar)
future::finally_body< Func, false > (seastar)
future::finally_body< Func, true > (seastar)
follow_symlink_tag (seastar)
foreign_ptr (seastar)
formatter (seastar::json)
formatter< seastar::abort_requested_exception > (fmt)
formatter< seastar::bool_class< Tag > > (fmt)
formatter< seastar::httpd::base_exception > (fmt)
formatter< seastar::lazy_deref_wrapper< T > > (fmt)
formatter< seastar::lazy_eval< Func > > (fmt)
formatter< seastar::log_level > (fmt)
formatter< seastar::lw_shared_ptr< T > > (fmt)
formatter< seastar::optimized_optional< T > > (fmt)
formatter< seastar::rpc::optional< T > > (fmt)
formatter< seastar::shared_ptr< T > > (fmt)
formatter< seastar::timed_out_error > (fmt)
formatter< seastar::tls::subject_alt_name > (fmt)
formatter< seastar::tls::subject_alt_name::value_type > (fmt)
formatter< seastar::tls::subject_alt_name_type > (fmt)
formatter< T > (fmt)
forward_hash (seastar::net)
fragment (seastar::net)
fragmented_memory_input_stream (seastar)
fragmented_memory_output_stream (seastar)
frame (seastar)
frame_header (seastar::experimental::websocket)
free_deleter (seastar)
fsnotifier (seastar::experimental)
function_handler (seastar::httpd)
function_input_iterator (seastar)
function_traits (seastar)
function_traits< Ret(*)(Args...)> (seastar)
function_traits< Ret(Args...)> (seastar)
function_traits< Ret(T::*)(Args...) const > (seastar)
function_traits< Ret(T::*)(Args...)> (seastar)
function_traits< T & > (seastar)
future (seastar)
future_for_get_promise_marker (seastar)
future_state_base (seastar)
futurize (seastar)
+
+
G
+
gate (seastar)
gate_closed_exception (seastar)
generator (seastar::coroutine::experimental)
generator_buffered_promise (seastar::coroutine::experimental::internal)
generator_unbuffered_promise (seastar::coroutine::experimental::internal)
sstring_builder::guard (seastar)
+
+
H
+
conntrack::handle (seastar::net)
handler_base (seastar::httpd)
handler_registration (seastar::httpd)
protocol_base::handler_with_holder (seastar::rpc)
ipv4_frag_id::hash (seastar::net)
hash< seastar::basic_sstring< char_type, size_type, max_size, NulTerminate > > (std)
hash< seastar::checked_ptr< T > > (std)
hash< seastar::ipv4_addr > (std)
hash< seastar::lw_shared_ptr< T > > (std)
hash< seastar::memory::allocation_site > (std)
hash< seastar::metrics::impl::labels_type > (std)
hash< seastar::metrics::impl::metric_id > (std)
hash< seastar::net::inet_address > (std)
hash< seastar::net::ipv4_address > (std)
hash< seastar::net::ipv6_address > (std)
hash< seastar::rpc::connection_id > (std)
hash< seastar::rpc::streaming_domain_type > (std)
hash< seastar::scheduling_group > (std)
hash< seastar::shared_ptr< T > > (std)
hash< seastar::simple_backtrace > (std)
hash< seastar::socket_address > (std)
hash< seastar::tasktrace > (std)
hash< seastar::transport > (std)
hash< seastar::unix_domain_addr > (std)
hash<::sockaddr_in > (std)
hash<::sockaddr_un > (std)
marshall_one::helper (seastar::rpc)
unmarshal_one::helper (seastar::rpc)
unmarshal_one::helper< optional< T > > (seastar::rpc)
marshall_one::helper< sink< T... > > (seastar::rpc)
unmarshal_one::helper< sink< T... > > (seastar::rpc)
marshall_one::helper< source< T... > > (seastar::rpc)
unmarshal_one::helper< source< T... > > (seastar::rpc)
marshall_one::helper< std::reference_wrapper< const T > > (seastar::rpc)
unmarshal_one::helper< std::reference_wrapper< const T > > (seastar::rpc)
marshall_one::helper< tuple< T... > > (seastar::rpc)
unmarshal_one::helper< tuple< T... > > (seastar::rpc)
histogram (seastar::metrics)
histogram_bucket (seastar::metrics)
gate::holder (seastar)
hostent (seastar::net)
http_server (seastar::httpd)
http_server_control (seastar::httpd)
http_server_tester (seastar::httpd)
http_stats (seastar::httpd)
hw_config (seastar::net)
hw_features (seastar::net)
+
+
I
+
icmp (seastar::net)
icmp_hdr (seastar::net)
sink::impl (seastar::rpc)
source::impl (seastar::rpc)
impl (seastar::metrics::impl)
indirect_equal_to (seastar)
indirect_hash (seastar)
indirect_less (seastar)
inet_address (seastar::net)
inheriting_concrete_execution_stage (seastar)
inheriting_execution_stage (seastar)
basic_sstring::initialized_later (seastar)
input_stream (seastar)
instance (seastar::alien)
interface (seastar::net)
basic_sstring::contents::internal_type (seastar)
io_completion (seastar)
io_group (seastar)
io_intent (seastar)
io_queue (seastar)
io_queue_topology (seastar::resource)
reactor::io_stats (seastar)
ip_hdr (seastar::net)
ip_packet_filter (seastar::net)
ip_protocol (seastar::net)
ipv4 (seastar::net)
ipv4_addr (seastar)
ipv4_address (seastar::net)
ipv4_config (seastar::net)
ipv4_frag_id (seastar::net)
ipv4_icmp (seastar::net)
ipv4_l4 (seastar::net)
ipv4_tag (seastar::net)
ipv4_tcp (seastar::net)
ipv4_traits (seastar::net)
ipv4_udp (seastar::net)
ipv6_addr (seastar)
ipv6_address (seastar::net)
is_callable (seastar::scollectd)
is_callable< T, std::enable_if_t< std::is_fundamental_v< T >, void > > (seastar::scollectd)
is_callable< T, std::enable_if_t<!std::is_void_v< std::invoke_result_t< T > >, void > > (seastar::scollectd)
is_future (seastar)
is_smart_ptr (seastar)
is_smart_ptr< foreign_ptr< T > > (seastar)
is_smart_ptr< lw_shared_ptr< T > > (seastar)
is_smart_ptr< shared_ptr< T > > (seastar)
is_smart_ptr< std::unique_ptr< T > > (seastar)
isolation_config (seastar::rpc)
+
+
J
+
json_base (seastar::json)
json_base_element (seastar::json)
json_element (seastar::json)
json_exception (seastar::httpd)
json_list (seastar::json)
json_operation (seastar::httpd)
json_return_type (seastar::json)
json_void (seastar::json)
jsonable (seastar::json)
+
+
K
+
kernel_completion (seastar)
+
+
L
+
l3_protocol (seastar::net)
l3_protocol::l3packet (seastar::net)
l4connid (seastar::net)
ipv4_traits::l4packet (seastar::net)
label (seastar::metrics)
label_instance (seastar::metrics)
lambda (seastar::coroutine)
lambda_task (seastar)
layered_file_impl (seastar)
lazy_deref_wrapper (seastar)
lazy_eval (seastar)
dhcp::lease (seastar::net)
linux_perf_event
listen_options (seastar)
tcp::listener (seastar::net)
logger (seastar::rpc)
lowres_clock (seastar)
lowres_system_clock (seastar)
lw_shared_ptr (seastar)
lw_shared_ptr_counter_base (seastar)
lw_shared_ptr_deleter (seastar)
lw_shared_ptr_no_esft (seastar)
lz4_compressor (seastar::rpc)
lz4_fragmented_compressor (seastar::rpc)
+
+
M
+
shared_ptr::make_helper (seastar)
manual_clock (seastar)
marshall_one (seastar::rpc)
match_rule (seastar::httpd)
matcher (seastar::httpd)
maybe_yield (seastar::coroutine)
measuring_output_stream (seastar)
memory (seastar::resource)
memory_input_stream (seastar)
memory_layout (seastar::memory)
memory_output_stream (seastar)
message_queue (seastar::alien)
metric_definition (seastar::metrics)
metric_definition_impl (seastar::metrics::impl)
metric_family (seastar::metrics::impl)
metric_family_config (seastar::metrics)
metric_family_info (seastar::metrics::impl)
metric_family_metadata (seastar::metrics::impl)
metric_group (seastar::metrics)
metric_group_definition (seastar::metrics)
metric_groups (seastar::metrics)
metric_groups_def (seastar::metrics::impl)
metric_groups_impl (seastar::metrics::impl)
metric_id (seastar::metrics::impl)
metric_info (seastar::metrics::impl)
metric_relabeling_result (seastar::metrics)
metric_type (seastar::metrics::impl)
metric_value (seastar::metrics::impl)
missing_param_exception (seastar::httpd)
mmap_deleter (seastar)
tcp_option::mss (seastar::net)
multi_algo_compressor_factory (seastar::rpc)
+
+
N
+
named_semaphore_aborted (seastar)
named_semaphore_exception_factory (seastar)
named_semaphore_timed_out (seastar)
native_histogram_info (seastar::metrics)
native_stack_options (seastar::net)
negotiation_frame (seastar::rpc)
nested_exception (seastar)
future_state_base::nested_exception_marker (seastar)
network_interface (seastar)
network_stack (seastar)
network_stack_entry (seastar)
next_awaiter (seastar::coroutine::experimental::internal)
no_sharded_instance_exception (seastar)
no_wait_type (seastar::rpc)
noncopyable_function (seastar)
noncopyable_function< Ret(Args...) noexcept(Noexcept)> (seastar)
tcp_option::nop (seastar::net)
not_found_exception (seastar::httpd)
+
+
O
+
offload_info (seastar::net)
opt_time_point (seastar::rpc)
optimized_optional (seastar)
option_group (seastar::program_options)
optional (seastar::rpc)
options (seastar::log_cli)
options (seastar::metrics)
dns_resolver::options (seastar::net)
options (seastar::scollectd)
options_descriptor (seastar::program_options)
options_mutator (seastar::program_options)
connection::outgoing_entry (seastar::rpc)
output_stream (seastar)
output_stream_options (seastar)
+
+
P
+
packet (seastar::net)
packet_data_source (seastar::net)
packet_merger (seastar::net)
parallel_for_each (seastar::coroutine)
param_matcher (seastar::httpd)
parameters (seastar::httpd)
path_description (seastar::httpd)
path_description::path_part (seastar::httpd)
peering_sharded_service (seastar)
inheriting_execution_stage::per_scheduling_group_stats (seastar)
percpu_plugin_instance_metrics (seastar::scollectd)
perf_stats (perf_tests::internal)
performance_test (perf_tests::internal)
pipe (seastar)
pipe_reader (seastar)
pipe_writer (seastar)
plugin_instance_metrics (seastar::scollectd)
pollable_fd (seastar)
pollable_fd_state (seastar)
pollfn (seastar)
posix_ap_network_stack (seastar::net)
posix_ap_server_socket_impl (seastar::net)
posix_data_sink_impl (seastar::net)
posix_data_source_impl (seastar::net)
posix_network_stack (seastar::net)
posix_reuseport_server_socket_impl (seastar::net)
posix_server_socket_impl (seastar::net)
posix_thread (seastar)
prefetcher (seastar)
prefetcher< 0, RW, LOC > (seastar)
process (seastar::experimental)
promise (seastar)
promise_expiry (seastar)
protocol (seastar::rpc)
protocol_base (seastar::rpc)
+
+
Q
+
qp (seastar::net)
qp_stats (seastar::net)
qp_stats.rx (seastar::net)
qp_stats.rx.bad (seastar::net)
qp_stats.tx (seastar::net)
qp_stats_good (seastar::net)
qs_deleter (seastar::alien::internal)
queue (seastar)
+
+
R
+
ragel_parser_base (seastar)
rcv_buf (seastar::rpc)
rcv_reply (seastar::rpc)
rcv_reply< Serializer, future< T... > > (seastar::rpc)
rcv_reply< Serializer, future<> > (seastar::rpc)
rcv_reply< Serializer, void > (seastar::rpc)
rcv_reply_base (seastar::rpc)
reactor (seastar)
reactor_options (seastar)
readable_eventfd (seastar)
ready_future_marker (seastar)
real_counter_type_traits (seastar::metrics::impl)
real_counter_type_traits< true, T > (seastar::metrics::impl)
redirect_exception (seastar::httpd)
reference_wrapper (seastar)
registered_metric (seastar::metrics::impl)
ipv4_udp::registration (seastar::net)
registration (seastar::scollectd)
registrations (seastar::scollectd)
relabel_config (seastar::metrics)
relabel_config_regex (seastar::metrics)
reloadable_credentials (seastar::tls)
remote_verb_error (seastar::rpc)
remove_optional (seastar::rpc)
remove_optional< optional< T > > (seastar::rpc)
reply (seastar::http)
client::reply_handler (seastar::rpc)
request (seastar::http)
io_queue::request_limits (seastar)
resource_limits (seastar::rpc)
resources (seastar::resource)
return_type_of (seastar::alien::internal)
return_type_of< Func, false > (seastar::alien::internal)
routes (seastar::httpd)
rpc_handler (seastar::rpc)
rpc_protocol_error (seastar::rpc)
rule_registration (seastar::httpd)
performance_test::run_result (perf_tests::internal)
+
+
S
+
tcp_option::sack (seastar::net)
sampler
scattered_message (seastar)
reactor::sched_stats (seastar)
scheduling_group (seastar)
scheduling_group_key (seastar)
scheduling_group_key_config (seastar)
scoped_critical_alloc_section (seastar::memory)
scoped_heap_profiling (seastar::memory)
scoped_large_allocation_warning_disable (seastar::memory)
scoped_large_allocation_warning_threshold (seastar::memory)
scoped_no_abort_on_internal_error (seastar::testing)
sctp_keepalive_params (seastar::net)
seastar_test (seastar::testing)
selection_value (seastar::program_options)
semaphore_aborted (seastar)
semaphore_default_exception_factory (seastar)
semaphore_timed_out (seastar)
semaphore_units (seastar)
serialize_helper (seastar::rpc)
serialize_helper< false > (seastar::rpc)
serialize_helper< true > (seastar::rpc)
server (seastar::experimental::websocket)
protocol::server (seastar::rpc)
server (seastar::rpc)
server_credentials (seastar::tls)
server_error_exception (seastar::httpd)
server_options (seastar::rpc)
server_socket (seastar)
session_dn (seastar)
set_iterator (seastar::bitsets)
set_range (seastar::bitsets)
sharded (seastar)
sharded_parameter (seastar)
shared_future (seastar)
shared_mutex (seastar)
shared_object (seastar)
shared_promise (seastar)
shared_ptr (seastar)
shared_ptr_count_base (seastar)
shared_ptr_count_for (seastar)
shared_ptr_make_helper (seastar)
shared_ptr_make_helper< T, false > (seastar)
shared_ptr_make_helper< T, true > (seastar)
signature (seastar::rpc)
signature< Ret(client_info &, In...)> (seastar::rpc)
signature< Ret(client_info &, opt_time_point, In...)> (seastar::rpc)
signature< Ret(const client_info &, In...)> (seastar::rpc)
signature< Ret(const client_info &, opt_time_point, In...)> (seastar::rpc)
signature< Ret(In...)> (seastar::rpc)
signature< Ret(opt_time_point, In...)> (seastar::rpc)
simple_backtrace (seastar)
simple_memory_input_stream (seastar)
simple_memory_output_stream (seastar)
simple_pollfn (seastar)
sink (seastar::rpc)
sink_impl (seastar::rpc)
skip_bytes (seastar)
slab_allocator (seastar)
slab_class (seastar)
slab_item_base (seastar)
slab_page_desc (seastar)
sleep_aborted (seastar)
smp (seastar)
smp_message_queue (seastar)
smp_options (seastar)
smp_service_group (seastar)
smp_service_group_config (seastar)
smp_submit_to_options (seastar)
snd_buf (seastar::rpc)
socket (seastar)
socket_address (seastar)
socket_address.u (seastar)
source (seastar::rpc)
source_impl (seastar::rpc)
spawn_parameters (seastar::experimental)
pollable_fd_state::speculation (seastar)
spinlock (seastar::util)
srv_record (seastar::net)
sstring_builder (seastar)
posix_thread::attr::stack_size (seastar)
stat_data (seastar)
statistics (seastar::memory)
stats (seastar::rpc)
execution_stage::stats (seastar)
stop_consuming (seastar)
stop_iteration_tag (seastar)
str_matcher (seastar::httpd)
stream (seastar)
stream_closed (seastar::rpc)
streaming_domain_type (seastar::rpc)
string_map (seastar::program_options)
subject_alt_name (seastar::tls)
abort_source::subscription (seastar)
subscription (seastar)
switch_to (seastar::coroutine)
+
+
T
+
task (seastar)
task_entry (seastar)
tasktrace (seastar)
tcp (seastar::net)
tcp_hdr (seastar::net)
tcp_keepalive_params (seastar::net)
tcp_option (seastar::net)
tcp_seq (seastar::net)
tcp_tag (seastar::net)
temporary_buffer (seastar)
reactor::test (seastar)
test_registrar (perf_tests::internal)
test_runner (seastar::testing)
thread (seastar)
thread_attributes (seastar)
thread_cputime_clock (seastar)
time_estimated_histogram (seastar::metrics::internal)
time_measurement (perf_tests::internal)
timed_out_error (seastar)
timeout_error (seastar::rpc)
timer (seastar)
timer_set (seastar)
tcp_option::timestamps (seastar::net)
tls_options (seastar::tls)
tmp_dir (seastar)
tmp_file (seastar)
topology_holder (seastar::resource::hwloc::internal)
transform_iterator (seastar)
tuple (seastar::rpc)
tuple_element< I, seastar::rpc::tuple< T... > > (std)
tuple_map_types (seastar)
tuple_map_types< MapClass, std::tuple< Elements... > > (seastar)
tuple_size< seastar::rpc::tuple< T... > > (std)
type_instance_id (seastar::scollectd)
typed (seastar::scollectd)
typed_value (seastar::scollectd)
typed_value_impl (seastar::scollectd)
+
+
U
+
udp_channel_state (seastar::net)
udp_hdr (seastar::net)
unaligned (seastar)
unexpected_status_error (seastar::httpd)
unix_domain_addr (seastar)
unknown_exception_error (seastar::rpc)
unknown_host (seastar::net)
unknown_verb_error (seastar::rpc)
unmarshal_one (seastar::rpc)
unread_overflow_exception (seastar)
unused (seastar::program_options)
url (seastar::httpd)
usecfmt_wrapper (seastar)
+
+
V
+
value (seastar::program_options)
value (seastar::scollectd)
value< std::monostate > (seastar::program_options)
value< typed< T > > (seastar::scollectd)
value_list (seastar::scollectd)
values_copy (seastar::metrics::impl)
values_impl (seastar::scollectd)
vector_data_sink (seastar)
verification_error (seastar::tls)
virtio_options (seastar::net)
+
+
W
+
process::wait_exited (seastar::experimental)
process::wait_signaled (seastar::experimental)
wait_signature (seastar::rpc)
wait_signature< future< no_wait_type > > (seastar::rpc)
wait_signature< future< T... > > (seastar::rpc)
wait_signature< no_wait_type > (seastar::rpc)
wait_type (seastar::rpc)
fsnotifier::watch (seastar::experimental)
weak_ptr (seastar)
weakly_referencable (seastar)
websocket_parser (seastar::experimental::websocket)
when_any_result (seastar)
tcp_option::win_scale (seastar::net)
with_clock (seastar)
without_preemption_check (seastar::coroutine)
value::wrap (seastar::scollectd)
writeable_eventfd (seastar)
+
+
X
+
x509_cert (seastar::tls)
+
+
Y
+
yield_awaiter (seastar::coroutine::experimental::internal)
+
+
+ + + + diff --git a/master/classlinux__perf__event-members.html b/master/classlinux__perf__event-members.html new file mode 100644 index 000000000..7f9d2ed17 --- /dev/null +++ b/master/classlinux__perf__event-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
linux_perf_event Member List
+
+
+ +

This is the complete list of members for linux_perf_event, including all inherited members.

+ + + + + + + + + + +
disable() (defined in linux_perf_event)linux_perf_event
enable() (defined in linux_perf_event)linux_perf_event
linux_perf_event(const struct ::perf_event_attr &attr, pid_t pid, int cpu, int group_fd, unsigned long flags) (defined in linux_perf_event)linux_perf_event
linux_perf_event(linux_perf_event &&x) noexcept (defined in linux_perf_event)linux_perf_eventinline
operator=(linux_perf_event &&x) noexcept (defined in linux_perf_event)linux_perf_event
read() (defined in linux_perf_event)linux_perf_event
user_cpu_cycles_retired() (defined in linux_perf_event)linux_perf_eventstatic
user_instructions_retired() (defined in linux_perf_event)linux_perf_eventstatic
~linux_perf_event() (defined in linux_perf_event)linux_perf_event
+ + + + diff --git a/master/classlinux__perf__event.html b/master/classlinux__perf__event.html new file mode 100644 index 000000000..6e530008d --- /dev/null +++ b/master/classlinux__perf__event.html @@ -0,0 +1,113 @@ + + + + + + + +Seastar: linux_perf_event Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+ +
linux_perf_event Class Reference
+
+
+ + + + + + + + + + + + + + +

+Public Member Functions

linux_perf_event (const struct ::perf_event_attr &attr, pid_t pid, int cpu, int group_fd, unsigned long flags)
 
linux_perf_event (linux_perf_event &&x) noexcept
 
+linux_perf_eventoperator= (linux_perf_event &&x) noexcept
 
+uint64_t read ()
 
+void enable ()
 
+void disable ()
 
+ + + + + +

+Static Public Member Functions

+static linux_perf_event user_instructions_retired ()
 
+static linux_perf_event user_cpu_cycles_retired ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classperf__tests_1_1internal_1_1concrete__performance__test-members.html b/master/classperf__tests_1_1internal_1_1concrete__performance__test-members.html new file mode 100644 index 000000000..33d2e17b4 --- /dev/null +++ b/master/classperf__tests_1_1internal_1_1concrete__performance__test-members.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
perf_tests::internal::concrete_performance_test< Test > Member List
+
+
+ +

This is the complete list of members for perf_tests::internal::concrete_performance_test< Test >, including all inherited members.

+ + + + + + + + + + + + + + + +
_cpu_cycles_retired_counter (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testprotected
_instructions_retired_counter (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testprotected
do_single_run() override (defined in perf_tests::internal::concrete_performance_test< Test >)perf_tests::internal::concrete_performance_test< Test >inlineprotectedvirtual
name() const (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testinline
next_iteration(size_t n) (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testinlineprotected
performance_test(const std::string &test_case, const std::string &test_group) (defined in perf_tests::internal::concrete_performance_test< Test >)perf_tests::internal::concrete_performance_test< Test >inline
register_test(std::unique_ptr< performance_test >) (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_teststatic
run(const config &) (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_test
set_up() override (defined in perf_tests::internal::concrete_performance_test< Test >)perf_tests::internal::concrete_performance_test< Test >inlineprotectedvirtual
stop_iteration() const (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testinlineprotected
tear_down() noexcept override (defined in perf_tests::internal::concrete_performance_test< Test >)perf_tests::internal::concrete_performance_test< Test >inlineprotectedvirtual
test_case() const (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testinline
test_group() const (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testinline
~performance_test()=default (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testvirtual
+ + + + diff --git a/master/classperf__tests_1_1internal_1_1concrete__performance__test.html b/master/classperf__tests_1_1internal_1_1concrete__performance__test.html new file mode 100644 index 000000000..6069e046e --- /dev/null +++ b/master/classperf__tests_1_1internal_1_1concrete__performance__test.html @@ -0,0 +1,234 @@ + + + + + + + +Seastar: perf_tests::internal::concrete_performance_test< Test > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
perf_tests::internal::concrete_performance_test< Test > Class Template Referencefinal
+
+
+
+Inheritance diagram for perf_tests::internal::concrete_performance_test< Test >:
+
+
+ + +perf_tests::internal::performance_test + +
+ + + + + + + + + + + + +

+Public Member Functions

performance_test (const std::string &test_case, const std::string &test_group)
 
+const std::string & test_case () const
 
+const std::string & test_group () const
 
+std::string name () const
 
+void run (const config &)
 
+ + + +

+Static Public Member Functions

+static void register_test (std::unique_ptr< performance_test >)
 
+ + + + + + + + + + + +

+Protected Member Functions

virtual void set_up () override
 
virtual void tear_down () noexcept override
 
virtual future< run_resultdo_single_run () override
 
+bool stop_iteration () const
 
+void next_iteration (size_t n)
 
+ + + + + +

+Protected Attributes

+linux_perf_event _instructions_retired_counter = linux_perf_event::user_instructions_retired()
 
+linux_perf_event _cpu_cycles_retired_counter = linux_perf_event::user_cpu_cycles_retired()
 
+

Member Function Documentation

+ +

◆ do_single_run()

+ +
+
+
+template<typename Test >
+ + + + + +
+ + + + + + + +
virtual future< run_result > perf_tests::internal::concrete_performance_test< Test >::do_single_run ()
+
+inlineoverrideprotectedvirtual
+
+
+ +

◆ set_up()

+ +
+
+
+template<typename Test >
+ + + + + +
+ + + + + + + +
virtual void perf_tests::internal::concrete_performance_test< Test >::set_up ()
+
+inlineoverrideprotectedvirtual
+
+
+ +

◆ tear_down()

+ +
+
+
+template<typename Test >
+ + + + + +
+ + + + + + + +
virtual void perf_tests::internal::concrete_performance_test< Test >::tear_down ()
+
+inlineoverrideprotectedvirtualnoexcept
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classperf__tests_1_1internal_1_1concrete__performance__test.png b/master/classperf__tests_1_1internal_1_1concrete__performance__test.png new file mode 100644 index 0000000000000000000000000000000000000000..3e1d2cf7ce175b11b0ca4adf51c0a6eddcb1b573 GIT binary patch literal 1080 zcmeAS@N?(olHy`uVBq!ia0y~yU~~qu12~w0&>^rQ%yglfjJIWSDwbZ03f_9HDl){=%kz?}sz_lGutLHW<+{r7uaS}5nD?s@*zU7q%Ud3~RZ4j+Xnc*;;n;MXl&umDqruhyEvWSKq$iFzJ-1 zH2d9_pV@{tEoO(^i;lOB-XwnFjpL+s8Z+9RaEupX&=hjPTOaHzxYK@fAQoc++5c;sr>EycV(uE?b`T+AGM+EeW8=Y zswN+d@6h`U3^OjnDN90(rYu=7X`#x|DLks0%ThEv4ev@^i^^VgEowd2gUw%ACot_; zlfofz>3X;mONWLeQ%i~S3;{+auQrB2RmX-IlN23%P6{Y211bqNV(HM7WI8g1hY=VX z42G)CluG|&=JD244fWET?#k%F7!!hK!Ca#~do6yOBxGFP!SCZ7bl$@GG^6ChU1QXrJUw0PIK0I&T zZD#Sho2Pzp9)2j(C$Z~ujB(DU_jIIrJ$on=^R2`njxgN@xNAhXDSl literal 0 HcmV?d00001 diff --git a/master/classperf__tests_1_1internal_1_1perf__stats-members.html b/master/classperf__tests_1_1internal_1_1perf__stats-members.html new file mode 100644 index 000000000..bc93bc09a --- /dev/null +++ b/master/classperf__tests_1_1internal_1_1perf__stats-members.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
perf_tests::internal::perf_stats Member List
+
+
+ +

This is the complete list of members for perf_tests::internal::perf_stats, including all inherited members.

+ + + + + + + + + + + + + + +
allocations (defined in perf_tests::internal::perf_stats)perf_tests::internal::perf_stats
cpu_cycles_retired (defined in perf_tests::internal::perf_stats)perf_tests::internal::perf_stats
instructions_retired (defined in perf_tests::internal::perf_stats)perf_tests::internal::perf_stats
operator+=(perf_stats b) (defined in perf_tests::internal::perf_stats)perf_tests::internal::perf_statsinline
operator-=(perf_stats b) (defined in perf_tests::internal::perf_stats)perf_tests::internal::perf_statsinline
operator=(perf_stats &&o)=default (defined in perf_tests::internal::perf_stats)perf_tests::internal::perf_stats
operator=(const perf_stats &o)=default (defined in perf_tests::internal::perf_stats)perf_tests::internal::perf_stats
perf_stats()=default (defined in perf_tests::internal::perf_stats)perf_tests::internal::perf_stats
perf_stats(uint64_t allocations_, uint64_t tasks_executed_, uint64_t instructions_retired_=0, uint64_t cpu_cycles_retired_=0) (defined in perf_tests::internal::perf_stats)perf_tests::internal::perf_statsinline
perf_stats(perf_stats &&o) noexcept (defined in perf_tests::internal::perf_stats)perf_tests::internal::perf_statsinline
perf_stats(const perf_stats &o)=default (defined in perf_tests::internal::perf_stats)perf_tests::internal::perf_stats
snapshot(linux_perf_event *instructions_retired_counter=nullptr, linux_perf_event *cpu_cycles_retired_counter=nullptr) (defined in perf_tests::internal::perf_stats)perf_tests::internal::perf_statsstatic
tasks_executed (defined in perf_tests::internal::perf_stats)perf_tests::internal::perf_stats
+ + + + diff --git a/master/classperf__tests_1_1internal_1_1perf__stats.html b/master/classperf__tests_1_1internal_1_1perf__stats.html new file mode 100644 index 000000000..9ba2ffc3f --- /dev/null +++ b/master/classperf__tests_1_1internal_1_1perf__stats.html @@ -0,0 +1,133 @@ + + + + + + + +Seastar: perf_tests::internal::perf_stats Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
perf_tests::internal::perf_stats Class Reference
+
+
+ + + + + + + + + + + + + + + + +

+Public Member Functions

perf_stats (uint64_t allocations_, uint64_t tasks_executed_, uint64_t instructions_retired_=0, uint64_t cpu_cycles_retired_=0)
 
perf_stats (perf_stats &&o) noexcept
 
perf_stats (const perf_stats &o)=default
 
+perf_statsoperator= (perf_stats &&o)=default
 
+perf_statsoperator= (const perf_stats &o)=default
 
+perf_statsoperator+= (perf_stats b)
 
+perf_statsoperator-= (perf_stats b)
 
+ + + +

+Static Public Member Functions

+static perf_stats snapshot (linux_perf_event *instructions_retired_counter=nullptr, linux_perf_event *cpu_cycles_retired_counter=nullptr)
 
+ + + + + + + + + +

+Public Attributes

+uint64_t allocations = 0
 
+uint64_t tasks_executed = 0
 
+uint64_t instructions_retired = 0
 
+uint64_t cpu_cycles_retired = 0
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classperf__tests_1_1internal_1_1performance__test-members.html b/master/classperf__tests_1_1internal_1_1performance__test-members.html new file mode 100644 index 000000000..0d1f1b7aa --- /dev/null +++ b/master/classperf__tests_1_1internal_1_1performance__test-members.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
perf_tests::internal::performance_test Member List
+
+
+ +

This is the complete list of members for perf_tests::internal::performance_test, including all inherited members.

+ + + + + + + + + + + + + + + +
_cpu_cycles_retired_counter (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testprotected
_instructions_retired_counter (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testprotected
do_single_run()=0 (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testprotectedpure virtual
name() const (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testinline
next_iteration(size_t n) (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testinlineprotected
performance_test(const std::string &test_case, const std::string &test_group) (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testinline
register_test(std::unique_ptr< performance_test >) (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_teststatic
run(const config &) (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_test
set_up()=0 (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testprotectedpure virtual
stop_iteration() const (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testinlineprotected
tear_down() noexcept=0 (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testprotectedpure virtual
test_case() const (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testinline
test_group() const (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testinline
~performance_test()=default (defined in perf_tests::internal::performance_test)perf_tests::internal::performance_testvirtual
+ + + + diff --git a/master/classperf__tests_1_1internal_1_1performance__test.html b/master/classperf__tests_1_1internal_1_1performance__test.html new file mode 100644 index 000000000..751c470ac --- /dev/null +++ b/master/classperf__tests_1_1internal_1_1performance__test.html @@ -0,0 +1,185 @@ + + + + + + + +Seastar: perf_tests::internal::performance_test Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
perf_tests::internal::performance_test Class Referenceabstract
+
+
+
+Inheritance diagram for perf_tests::internal::performance_test:
+
+
+ + +perf_tests::internal::concrete_performance_test< Test > + +
+ + + + +

+Classes

struct  run_result
 
+ + + + + + + + + + + +

+Public Member Functions

performance_test (const std::string &test_case, const std::string &test_group)
 
+const std::string & test_case () const
 
+const std::string & test_group () const
 
+std::string name () const
 
+void run (const config &)
 
+ + + +

+Static Public Member Functions

+static void register_test (std::unique_ptr< performance_test >)
 
+ + + + + + + + + + + +

+Protected Member Functions

+bool stop_iteration () const
 
+void next_iteration (size_t n)
 
+virtual void set_up ()=0
 
+virtual void tear_down () noexcept=0
 
+virtual future< run_resultdo_single_run ()=0
 
+ + + + + +

+Protected Attributes

+linux_perf_event _instructions_retired_counter = linux_perf_event::user_instructions_retired()
 
+linux_perf_event _cpu_cycles_retired_counter = linux_perf_event::user_cpu_cycles_retired()
 
+

Class Documentation

+ +

◆ perf_tests::internal::performance_test::run_result

+ +
+
+ + + + +
struct perf_tests::internal::performance_test::run_result
+
+ + + + + + + + +
Class Members
+duration +duration +
+perf_stats +stats +
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classperf__tests_1_1internal_1_1performance__test.png b/master/classperf__tests_1_1internal_1_1performance__test.png new file mode 100644 index 0000000000000000000000000000000000000000..e86fd6690c87663597a5a1a26f1bf55542efac24 GIT binary patch literal 1082 zcmeAS@N?(olHy`uVBq!ia0y~yU~~qu12~w0Y?E9?6!`j}w<^BH? z@tb)WnHT2XdG~f|OyQLY4Y_R6|0V@_Eu0dxOGn6oXTD~VDWQPJx{r9btHI<>r)! zS6X6U*jP18|9b6nLE!1fJ3p_O#@_Zk^gqjCeLMc$t1lUCF~46JKVijNi(hLyiylss zezfC=d-}Hc?8^A4>eB7y?{%yixQnhE9hm>Ze=eiVT7H8+wyR`sa~WKm%~Pka>x47I z{1_faCt$d(goc}@1k;a_LZpgCya4>CuDhf?WZ@&;!tpRd2>f6lUg>xoGsla_RIwM}{wY%oP-e$zsg zpCUY}Czq=pp3RS@dw)59T)i zb-$E()(h7pMK1m*dU(tG=X`aq%`$h`PSbz7@#ey{*XuOYtX7|8`Msm8K){a=yC=@0LA>Xg2h@(7CBvMtzmM)=uF;n;`(1FX;Kq5& z!$C62hZpC#rB6#tPg=kAx`dqYn~ilsPv<0--ZFS|w)FHXudP$|$5y%*PHTT$cN3UG zQcfH;oF8}ou;JZsO>3h$QSxVcI}OerzWKwD|9R_=7dAEPrls>NUv1;L;_~N!AgR)0 zA3i@%EPou?_KnH<9k=S$vN;c~x$HDQ?Rfv*;%!Q=_k4Q#aBogq|JIsvt6ecVK))W| zYs2?4D{|7l=y=Je%x(LRzhv2~@^`71On%psy{EfufWgn#28xd9qM#T^(C`GN0nbmG o5?+)1&D$)W%bc=&zWNvYj + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
perf_tests::internal::time_measurement Member List
+
+
+ +

This is the complete list of members for perf_tests::internal::time_measurement, including all inherited members.

+ + + + + +
start_iteration() (defined in perf_tests::internal::time_measurement)perf_tests::internal::time_measurementinline
start_run(linux_perf_event *instructions_retired_counter=nullptr, linux_perf_event *cpu_cycles_retired_counter=nullptr) (defined in perf_tests::internal::time_measurement)perf_tests::internal::time_measurementinline
stop_iteration() (defined in perf_tests::internal::time_measurement)perf_tests::internal::time_measurementinline
stop_run() (defined in perf_tests::internal::time_measurement)perf_tests::internal::time_measurementinline
+ + + + diff --git a/master/classperf__tests_1_1internal_1_1time__measurement.html b/master/classperf__tests_1_1internal_1_1time__measurement.html new file mode 100644 index 000000000..ce23641c9 --- /dev/null +++ b/master/classperf__tests_1_1internal_1_1time__measurement.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: perf_tests::internal::time_measurement Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
perf_tests::internal::time_measurement Class Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

+void start_run (linux_perf_event *instructions_retired_counter=nullptr, linux_perf_event *cpu_cycles_retired_counter=nullptr)
 
+performance_test::run_result stop_run ()
 
+void start_iteration ()
 
+void stop_iteration ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classsampler-members.html b/master/classsampler-members.html new file mode 100644 index 000000000..0804efb32 --- /dev/null +++ b/master/classsampler-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
sampler Member List
+
+
+ +

This is the complete list of members for sampler, including all inherited members.

+ + + + + + + + +
definitely_sample(size_t alloc_size)samplerinline
maybe_sample(size_t alloc_size)samplerinline
pause_sampling()samplerinline
sample_size(size_t allocation_size) constsamplerinline
sampler() (defined in sampler)samplerinline
sampling_interval() const (defined in sampler)samplerinline
set_sampling_interval(uint64_t sampling_interval)samplerinline
+ + + + diff --git a/master/classsampler.html b/master/classsampler.html new file mode 100644 index 000000000..5acda21b5 --- /dev/null +++ b/master/classsampler.html @@ -0,0 +1,191 @@ + + + + + + + +Seastar: sampler Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+ +
sampler Class Reference
+
+
+ + + + + +

+Classes

struct  disable_sampling_temporarily
 RAII class to temporarily pause sampling. More...
 
+ + + + + + + + + + + + + + + +

+Public Member Functions

+void set_sampling_interval (uint64_t sampling_interval)
 Sets the sampling interval in bytes. Setting it to 0 means to never sample.
 
bool maybe_sample (size_t alloc_size)
 
bool definitely_sample (size_t alloc_size)
 
+uint64_t sampling_interval () const
 
+size_t sample_size (size_t allocation_size) const
 How much should an allocation of size allocation_size count for.
 
disable_sampling_temporarily pause_sampling ()
 
+

Member Function Documentation

+ +

◆ definitely_sample()

+ +
+
+ + + + + +
+ + + + + + + + +
bool sampler::definitely_sample (size_t alloc_size)
+
+inline
+
+

This method should be called if maybe_sample returned true for particular allocation. It returns true if a sample should be taken and handles resetting the sample interval countdown.
+

+ +
+
+ +

◆ maybe_sample()

+ +
+
+ + + + + +
+ + + + + + + + +
bool sampler::maybe_sample (size_t alloc_size)
+
+inline
+
+

Updates the sampling state (byte remaining until next sample) and returns true if this allocation of size alloc_size may be sampled. Specifically, if it returns false, this allocation is definitely not samples. However if it returns true, it is not yet determiined whether a sample should be taken. Instead, definitely_sample should be called and if it returns true, a sample is called for.

+ +
+
+ +

◆ pause_sampling()

+ +
+
+ + + + + +
+ + + + + + + +
disable_sampling_temporarily sampler::pause_sampling ()
+
+inline
+
+

Pauses sampling temporarily until the returned object is destroyed. This is more efficient and statisically more correct than doing a back and fourth of set_sampling_interval(0) and set_sampling_interval(RATE). The reason is that that would reset the interval to the next sample and force a reevaluation of the exponential distribution. This method avoids that.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1abort__on__expiry-members.html b/master/classseastar_1_1abort__on__expiry-members.html new file mode 100644 index 000000000..102247e4e --- /dev/null +++ b/master/classseastar_1_1abort__on__expiry-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::abort_on_expiry< Clock > Member List
+
+
+ +

This is the complete list of members for seastar::abort_on_expiry< Clock >, including all inherited members.

+ + + + + + +
abort_on_expiry(time_point timeout)seastar::abort_on_expiry< Clock >inline
abort_on_expiry(abort_on_expiry &&)=delete (defined in seastar::abort_on_expiry< Clock >)seastar::abort_on_expiry< Clock >
abort_source()seastar::abort_on_expiry< Clock >inline
clock typedef (defined in seastar::abort_on_expiry< Clock >)seastar::abort_on_expiry< Clock >
time_point typedef (defined in seastar::abort_on_expiry< Clock >)seastar::abort_on_expiry< Clock >
+ + + + diff --git a/master/classseastar_1_1abort__on__expiry.html b/master/classseastar_1_1abort__on__expiry.html new file mode 100644 index 000000000..a8210f0f6 --- /dev/null +++ b/master/classseastar_1_1abort__on__expiry.html @@ -0,0 +1,170 @@ + + + + + + + +Seastar: seastar::abort_on_expiry< Clock > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::abort_on_expiry< Clock > Class Template Reference
+
+
+

Detailed Description

+
template<typename Clock = lowres_clock>
+class seastar::abort_on_expiry< Clock >

Facility to tie a timeout with an abort source Can be used to make abortanle fibers also support timeouts

+
+

#include <seastar/core/abort_on_expiry.hh>

+ + + + + + +

+Public Types

+using clock = Clock
 
+using time_point = typename Clock::time_point
 
+ + + + + + + +

+Public Member Functions

 abort_on_expiry (time_point timeout)
 
abort_on_expiry (abort_on_expiry &&)=delete
 
seastar::abort_sourceabort_source ()
 
+

Constructor & Destructor Documentation

+ +

◆ abort_on_expiry()

+ +
+
+
+template<typename Clock = lowres_clock>
+ + + + + +
+ + + + + + + + +
seastar::abort_on_expiry< Clock >::abort_on_expiry (time_point timeout)
+
+inline
+
+

Creates a timer and an abort source associated with it When the timer reaches timeout point it triggers an abort autimatically

+ +
+
+

Member Function Documentation

+ +

◆ abort_source()

+ +
+
+
+template<typename Clock = lowres_clock>
+ + + + + +
+ + + + + + + +
seastar::abort_source & seastar::abort_on_expiry< Clock >::abort_source ()
+
+inline
+
+
Returns
abort source associated with the timeout
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1abort__requested__exception-members.html b/master/classseastar_1_1abort__requested__exception-members.html new file mode 100644 index 000000000..901471d1e --- /dev/null +++ b/master/classseastar_1_1abort__requested__exception-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::abort_requested_exception Member List
+
+
+ +

This is the complete list of members for seastar::abort_requested_exception, including all inherited members.

+ + +
what() const noexcept override (defined in seastar::abort_requested_exception)seastar::abort_requested_exceptioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1abort__requested__exception.html b/master/classseastar_1_1abort__requested__exception.html new file mode 100644 index 000000000..4f146b92f --- /dev/null +++ b/master/classseastar_1_1abort__requested__exception.html @@ -0,0 +1,134 @@ + + + + + + + +Seastar: seastar::abort_requested_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::abort_requested_exception Class Reference
+
+
+

Detailed Description

+

Exception thrown when an abort_source object has been notified by the abort_source::request_abort() method.

+
+

#include <seastar/core/abort_source.hh>

+
+Inheritance diagram for seastar::abort_requested_exception:
+
+
+ + +seastar::semaphore_aborted +seastar::sleep_aborted +seastar::named_semaphore_aborted + +
+ + + + +

+Public Member Functions

virtual const char * what () const noexcept override
 
+

Member Function Documentation

+ +

◆ what()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const char * seastar::abort_requested_exception::what () const
+
+inlineoverridevirtualnoexcept
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1abort__requested__exception.png b/master/classseastar_1_1abort__requested__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..58fb50336900bafdc3bbc5b1db7f6299cd51bdb0 GIT binary patch literal 1999 zcmb_d3s6&M7QSq>R9l|%P#z)_8l{AnHX9wr(EB&7(1y*S<7+1=Tho!z}N|GDR$bMBn~ z|Gsa|U-&69#9+78ZU6ub5GUag0H7xTec{^>&>lCX-T+^FKm7z1ytTCjx=){LzbgK* z1oYl4p-{N9aKaA!e47%1j0C`&@&o|=7zF${DqT;*((tR?jd#%JZ5B4C(#wnx zfVp}55m{QTLE-g$cJHF)bp40n5*y<@yaW!nF{IOJCu!nfxT8qn;9we0GBMfJB%sj- z-^B-d%=)doN4y3mFU&iEiTilaV9&cI)@*Sbe`&cI@+@K>ojg1=EG^>GXf4~n8GL9W zIUQA1sB)&iU-e)+oc1QXa_1An>Ji;BX~s&2Goctr-37EcwwmI6TP3)xp8O^8hF5&-3ZP-aK1hy}fz3Xq#h4 zk>2&Aq1zIo<3p*YE;H!ogb`z$hhDwXh^!p%oq zGI?8IC|!La@W}Si{nnq}+?VkhKWV+VOZYY%^47)#N$qcVP?;4y@; zXs)T;n{;kkOBwD$d(7>4hx7^qp$_9;DmX3DQ}qS0tg|phj)m6e8dcq9 zPgq+YM9FiNBgg?35r>YQmA%#1Uwbd?1m5EXz9szQb{U&9x4~6kv`w_y@K-o;&sS1A zyUkitZK^Uk$k`#X)$@u-Cm~dx!YP1YY=jbKv2f1l+xT%@OD5LF{mfC24!?O**gq0A zYbo*qHEskz8X-^sQt}QR(%Yl@oD8Tyd1N!&L2jK!-ue%?m0gyoDE{7n{_G-D z_+KfYgzMUvGX85AbBv$TDO$3Wg+87+C`LS6xFwQ1Pr3w=xyYsVcw$HQR!l5va0?% zF|Zqbu@h{;=}}bQsJU`lD}T>*6uW{oGk>*-Ev)<@^szIMmX-9dc>hbyc3F7sa%y!? zYWe@fEYp)Sv;FkMPDTcu1y*|Yl$#6S;^!~J}HOh`yyj>omNT{jK6h|5LZ<4i7@h7M3@N<#ybc=gST~Tl6F_d7Ybab=j#8=TfQENlVAt zw*57sh_Nd*H^UfDX1+lkLJ*g)+|`9B+8(Wt*Mb-$Yjz?{8wk?e9w;J<+yL5GB@tw$ zpy^*&;R*ODw@6{TW~@Y^L#2Hy;QLtTQv6nn-TwR z0A>BcPg!?Dri}Ar|1d3UW>9?psvl!eB>B-yM<TQdYHwqwc@d@W4fcmM7~x&B!iC%27#Q1`_-< z+`D~Yihcdb*i*4IYftIQkHy;HI%bX)q;JT}zKadA3?q1Gj0!7R`6}kXueCqpK7bN5 zjRQt<7(VTf=)5o08=sL5sVHb%h)N&5`-vbHv3)ITn42wMB#1V zfbg<_B5sMGhSTOc5VA|a-?4K%WDn+ct?eX%823P?hc+OSemk7WQf4N2`vQnyB%Biz H_w`=@Km?~% literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1abort__source-members.html b/master/classseastar_1_1abort__source-members.html new file mode 100644 index 000000000..496ea49b6 --- /dev/null +++ b/master/classseastar_1_1abort__source-members.html @@ -0,0 +1,94 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::abort_source Member List
+
+
+ +

This is the complete list of members for seastar::abort_source, including all inherited members.

+ + + + + + + + + + + + + +
abort_requested() const noexceptseastar::abort_sourceinline
abort_requested_exception_ptr() const noexceptseastar::abort_sourceinline
abort_source()=default (defined in seastar::abort_source)seastar::abort_source
abort_source(abort_source &&)=default (defined in seastar::abort_source)seastar::abort_source
check() constseastar::abort_sourceinline
get_default_exception() const noexceptseastar::abort_sourceinlinevirtual
operator=(abort_source &&)=default (defined in seastar::abort_source)seastar::abort_source
request_abort() noexceptseastar::abort_sourceinline
request_abort_ex(std::exception_ptr ex) noexceptseastar::abort_sourceinline
request_abort_ex(Exception &&e) noexceptseastar::abort_sourceinline
subscribe(Func &&f)seastar::abort_sourceinline
~abort_source()=default (defined in seastar::abort_source)seastar::abort_sourcevirtual
+ + + + diff --git a/master/classseastar_1_1abort__source.html b/master/classseastar_1_1abort__source.html new file mode 100644 index 000000000..13982e02f --- /dev/null +++ b/master/classseastar_1_1abort__source.html @@ -0,0 +1,272 @@ + + + + + + + +Seastar: seastar::abort_source Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::abort_source Class Reference
+
+
+

Detailed Description

+

Facility to communicate a cancellation request to a fiber. Callbacks can be registered with the abort_source, which are called atomically with a call to request_abort().

+
+

#include <seastar/core/abort_source.hh>

+ + + + +

+Classes

class  subscription
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

abort_source (abort_source &&)=default
 
+abort_sourceoperator= (abort_source &&)=default
 
template<typename Func >
+requires (std::is_nothrow_invocable_r_v<void, Func, const std::optional<std::exception_ptr>&> || std::is_nothrow_invocable_r_v<void, Func>)
optimized_optional< subscriptionsubscribe (Func &&f)
 
void request_abort () noexcept
 
void request_abort_ex (std::exception_ptr ex) noexcept
 
template<typename Exception >
void request_abort_ex (Exception &&e) noexcept
 
+bool abort_requested () const noexcept
 Returns whether an abort has been requested.
 
+void check () const
 Throws a abort_requested_exception if cancellation has been requested.
 
+const std::exception_ptr & abort_requested_exception_ptr () const noexcept
 Returns an exception with which an abort was requested.
 
virtual std::exception_ptr get_default_exception () const noexcept
 
+

Member Function Documentation

+ +

◆ get_default_exception()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::exception_ptr seastar::abort_source::get_default_exception () const
+
+inlinevirtualnoexcept
+
+

Returns the default exception type (abort_requested_exception) for this abort source. Overridable by derived classes.

+ +
+
+ +

◆ request_abort()

+ +
+
+ + + + + +
+ + + + + + + +
void seastar::abort_source::request_abort ()
+
+inlinenoexcept
+
+

Requests that the target operation be aborted. Current subscriptions are invoked inline with this call with a disengaged optional<std::exception_ptr>, and no new ones can be registered.

+ +
+
+ +

◆ request_abort_ex() [1/2]

+ +
+
+
+template<typename Exception >
+ + + + + +
+ + + + + + + + +
void seastar::abort_source::request_abort_ex (Exception && e)
+
+inlinenoexcept
+
+

Requests that the target operation be aborted with a given Exception object. Current subscriptions are invoked inline with this exception, converted to std::exception_ptr, and no new ones can be registered.

+ +
+
+ +

◆ request_abort_ex() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::abort_source::request_abort_ex (std::exception_ptr ex)
+
+inlinenoexcept
+
+

Requests that the target operation be aborted with a given exception_ptr. Current subscriptions are invoked inline with this exception, and no new ones can be registered.

+ +
+
+ +

◆ subscribe()

+ +
+
+
+template<typename Func >
+requires (std::is_nothrow_invocable_r_v<void, Func, const std::optional<std::exception_ptr>&> || std::is_nothrow_invocable_r_v<void, Func>)
+ + + + + +
+ + + + + + + + +
optimized_optional< subscription > seastar::abort_source::subscribe (Func && f)
+
+inline
+
+

Delays the invocation of the callback f until request_abort() is called.

Returns
optimized_optional containing a subscription that can be used to control the lifetime of the callback f.
+

Note: the returned optimized_optional evaluates to true if and only if abort_requested() is false at the time subscribe is called, and therefore the subscription is linked to the abort_source subscriptions list.

+

Once request_abort() is called or the subscription's on_abort() method are called, the callback f is called (exactly once), and the subscription is unlinked from the about_source, causing the optimized_optional to evaluate to false.

+

The returned optimized_optional would initially evaluate to false if request_abort() was already called. In this case, an unlinked subscription is returned as optimized_optional. That subscription still allows the user to call on_abort() to invoke the callback f.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1abort__source_1_1subscription-members.html b/master/classseastar_1_1abort__source_1_1subscription-members.html new file mode 100644 index 000000000..56184da69 --- /dev/null +++ b/master/classseastar_1_1abort__source_1_1subscription-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::abort_source::subscription Member List
+
+
+ +

This is the complete list of members for seastar::abort_source::subscription, including all inherited members.

+ + + + + + +
on_abort(const std::optional< std::exception_ptr > &ex) noexceptseastar::abort_source::subscriptioninline
operator bool() const noexcept (defined in seastar::abort_source::subscription)seastar::abort_source::subscriptioninlineexplicit
operator=(subscription &&other) noexcept(std::is_nothrow_move_assignable_v< subscription_callback_type >) (defined in seastar::abort_source::subscription)seastar::abort_source::subscriptioninline
subscription()=default (defined in seastar::abort_source::subscription)seastar::abort_source::subscription
subscription(subscription &&other) noexcept(std::is_nothrow_move_constructible_v< subscription_callback_type >) (defined in seastar::abort_source::subscription)seastar::abort_source::subscriptioninline
+ + + + diff --git a/master/classseastar_1_1abort__source_1_1subscription.html b/master/classseastar_1_1abort__source_1_1subscription.html new file mode 100644 index 000000000..72f0dc7d8 --- /dev/null +++ b/master/classseastar_1_1abort__source_1_1subscription.html @@ -0,0 +1,139 @@ + + + + + + + +Seastar: seastar::abort_source::subscription Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::abort_source::subscription Class Reference
+
+
+

Detailed Description

+

Represents a handle to the callback registered by a given fiber. Ending the lifetime of the subscription will unregister the callback, if it hasn't been invoked yet.

+
+

#include <seastar/core/abort_source.hh>

+
+Inheritance diagram for seastar::abort_source::subscription:
+
+
+ +
+ + + + + + + + + + +

+Public Member Functions

void on_abort (const std::optional< std::exception_ptr > &ex) noexcept
 
subscription (subscription &&other) noexcept(std::is_nothrow_move_constructible_v< subscription_callback_type >)
 
+subscriptionoperator= (subscription &&other) noexcept(std::is_nothrow_move_assignable_v< subscription_callback_type >)
 
operator bool () const noexcept
 
+

Member Function Documentation

+ +

◆ on_abort()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::abort_source::subscription::on_abort (const std::optional< std::exception_ptr > & ex)
+
+inlinenoexcept
+
+

Call the subscribed callback (at most once). This method is called by the abort_source on all listed subscription objects when request_abort() is called. It may be called indepdently by the user at any time, causing the subscription to be unlinked from the abort_source subscriptions list.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1abort__source_1_1subscription.png b/master/classseastar_1_1abort__source_1_1subscription.png new file mode 100644 index 0000000000000000000000000000000000000000..01f51cf5c80a8c1dfdb7387f2c117826970e694f GIT binary patch literal 1106 zcmeAS@N?(olHy`uVBq!ia0y~yU~B}k12~w09gze&7G- zD|?$`!rLeL!gsg*I(5ZNW730$ilb-Nq@+z#@tNc`Y04rc1<#pUOp~Upgfr$I;OwYf zakJ$byI$Vi{;COAZZ#Vo`%}B)wZ_JSKWD{Q)ao@p=dhX6vgF#Hx34*l+>cjQ@N8Vi zX|p+?uR%B8%;wwm-goy(t7DmTqT+9rZ@)IX^Yy$(JNqa1?BacPw$1oLRjtzPbZ#p( z>EAgAr!TBi`@LrOj6kMICMyMR)LGd0yqaa){q|h_yJsR%^CH&>XD@D^>ACjp>j%$v zt?`oI(p~ke*sILq{M}nEoF!-O^w)}ZC9$erd;j%dp2Rz|r!lQjFU+jYude6GHeF(% z7r1?QzxbB9k8eCT+1>5aFVrD1N0@`Z!ePP9x6f}~pM7BJ`taN<|KGG6*s(5NWrK_D z*PUrULzxttxtT6LQDR!R*IdIR4B)K_W<+(Nv3syTFPk(Uh`Tlv03wh?vZM^JM z=d@sT-MjmHRLRSJz;(D+|w^t_-xeEUt(tcz4X!L)SbR{IvM9O&#w)i2;0RW3kYCH+AmlKq zi@{-$ogEjW!#ofxj{(S<1!S$u`pak(%ECZX{Pi>EjG0r$CEzpXa{WoNxH<5<|t*IKKyVtG|cdm8ia zuIH)wof`ULvr$fe?b&J5e{Y}t;ZpJM*LB-|cgAdMEef1-IPL14zH{F)CQIs3=E#G KelF{r5}E+_UhaVa literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1adder-members.html b/master/classseastar_1_1adder-members.html new file mode 100644 index 000000000..781eca6b4 --- /dev/null +++ b/master/classseastar_1_1adder-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::adder< Result, Addend > Member List
+
+
+ +

This is the complete list of members for seastar::adder< Result, Addend >, including all inherited members.

+ + + +
get() && (defined in seastar::adder< Result, Addend >)seastar::adder< Result, Addend >inline
operator()(const Addend &value) (defined in seastar::adder< Result, Addend >)seastar::adder< Result, Addend >inline
+ + + + diff --git a/master/classseastar_1_1adder.html b/master/classseastar_1_1adder.html new file mode 100644 index 000000000..602c6c1e4 --- /dev/null +++ b/master/classseastar_1_1adder.html @@ -0,0 +1,100 @@ + + + + + + + +Seastar: seastar::adder< Result, Addend > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::adder< Result, Addend > Class Template Reference
+
+
+

Detailed Description

+
template<typename Result, typename Addend = Result>
+class seastar::adder< Result, Addend >

Implements @Reducer concept. Calculates the result by adding elements to the accumulator.

+
+

#include <seastar/core/map_reduce.hh>

+ + + + + + +

+Public Member Functions

+future operator() (const Addend &value)
 
+Result get () &&
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1alien_1_1instance-members.html b/master/classseastar_1_1alien_1_1instance-members.html new file mode 100644 index 000000000..7055f6bd3 --- /dev/null +++ b/master/classseastar_1_1alien_1_1instance-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::alien::instance Member List
+
+
+ +

This is the complete list of members for seastar::alien::instance, including all inherited members.

+ + + + + +
_qs (defined in seastar::alien::instance)seastar::alien::instance
create_qs(const std::vector< reactor * > &reactors) (defined in seastar::alien::instance)seastar::alien::instancestatic
poll_queues() (defined in seastar::alien::instance)seastar::alien::instance
pure_poll_queues() (defined in seastar::alien::instance)seastar::alien::instance
+ + + + diff --git a/master/classseastar_1_1alien_1_1instance.html b/master/classseastar_1_1alien_1_1instance.html new file mode 100644 index 000000000..94ddf7f0c --- /dev/null +++ b/master/classseastar_1_1alien_1_1instance.html @@ -0,0 +1,113 @@ + + + + + + + +Seastar: seastar::alien::instance Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::alien::instance Class Reference
+
+
+

Detailed Description

+

Represents the Seastar system from alien's point of view. In a normal system, there is just one instance, but for in-process clustering testing there may be more than one. Function such as run_on() direct messages to and (instance, shard) tuple.

+
+

#include <seastar/core/alien.hh>

+ + + + + + +

+Public Member Functions

+bool poll_queues ()
 
+bool pure_poll_queues ()
 
+ + + +

+Static Public Member Functions

+static qs create_qs (const std::vector< reactor * > &reactors)
 
+ + + +

+Public Attributes

+qs _qs
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1alien_1_1message__queue-members.html b/master/classseastar_1_1alien_1_1message__queue-members.html new file mode 100644 index 000000000..69126fd88 --- /dev/null +++ b/master/classseastar_1_1alien_1_1message__queue-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::alien::message_queue Member List
+
+
+ +

This is the complete list of members for seastar::alien::message_queue, including all inherited members.

+ + + + + + + +
message_queue(reactor *to) (defined in seastar::alien::message_queue)seastar::alien::message_queue
process_incoming() (defined in seastar::alien::message_queue)seastar::alien::message_queue
pure_poll_rx() const (defined in seastar::alien::message_queue)seastar::alien::message_queue
start() (defined in seastar::alien::message_queue)seastar::alien::message_queue
stop() (defined in seastar::alien::message_queue)seastar::alien::message_queue
submit(Func &&func) (defined in seastar::alien::message_queue)seastar::alien::message_queueinline
+ + + + diff --git a/master/classseastar_1_1alien_1_1message__queue.html b/master/classseastar_1_1alien_1_1message__queue.html new file mode 100644 index 000000000..b606d28b6 --- /dev/null +++ b/master/classseastar_1_1alien_1_1message__queue.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: seastar::alien::message_queue Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::alien::message_queue Class Reference
+
+
+ + + + + + + + + + + + + + + +

+Public Member Functions

message_queue (reactor *to)
 
+void start ()
 
+void stop ()
 
+template<typename Func >
void submit (Func &&func)
 
+size_t process_incoming ()
 
+bool pure_poll_rx () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1array__map-members.html b/master/classseastar_1_1array__map-members.html new file mode 100644 index 000000000..8d6b31646 --- /dev/null +++ b/master/classseastar_1_1array__map-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::array_map< Value, Max > Member List
+
+
+ +

This is the complete list of members for seastar::array_map< Value, Max >, including all inherited members.

+ + + + + +
array_map(std::initializer_list< std::pair< size_t, Value > > i) (defined in seastar::array_map< Value, Max >)seastar::array_map< Value, Max >inline
at(size_t key) (defined in seastar::array_map< Value, Max >)seastar::array_map< Value, Max >inline
operator[](size_t key) (defined in seastar::array_map< Value, Max >)seastar::array_map< Value, Max >inline
operator[](size_t key) const (defined in seastar::array_map< Value, Max >)seastar::array_map< Value, Max >inline
+ + + + diff --git a/master/classseastar_1_1array__map.html b/master/classseastar_1_1array__map.html new file mode 100644 index 000000000..425cce3ad --- /dev/null +++ b/master/classseastar_1_1array__map.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: seastar::array_map< Value, Max > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::array_map< Value, Max > Class Template Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

array_map (std::initializer_list< std::pair< size_t, Value > > i)
 
+Value & operator[] (size_t key)
 
+const Value & operator[] (size_t key) const
 
+Value & at (size_t key)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1async__sharded__service-members.html b/master/classseastar_1_1async__sharded__service-members.html new file mode 100644 index 000000000..2dc6a9852 --- /dev/null +++ b/master/classseastar_1_1async__sharded__service-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::async_sharded_service< T > Member List
+
+
+ +

This is the complete list of members for seastar::async_sharded_service< T >, including all inherited members.

+ + + + + + + +
async_sharded_service() noexcept=default (defined in seastar::async_sharded_service< T >)seastar::async_sharded_service< T >protected
freed() noexcept (defined in seastar::async_sharded_service< T >)seastar::async_sharded_service< T >inlineprotected
shared_from_this() noexcept (defined in seastar::enable_shared_from_this< T >)seastar::enable_shared_from_this< T >inline
shared_from_this() const noexcept (defined in seastar::enable_shared_from_this< T >)seastar::enable_shared_from_this< T >inline
use_count() const noexcept (defined in seastar::enable_shared_from_this< T >)seastar::enable_shared_from_this< T >inline
~async_sharded_service() (defined in seastar::async_sharded_service< T >)seastar::async_sharded_service< T >inlineprotectedvirtual
+ + + + diff --git a/master/classseastar_1_1async__sharded__service.html b/master/classseastar_1_1async__sharded__service.html new file mode 100644 index 000000000..254c58c19 --- /dev/null +++ b/master/classseastar_1_1async__sharded__service.html @@ -0,0 +1,120 @@ + + + + + + + +Seastar: seastar::async_sharded_service< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::async_sharded_service< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename T>
+class seastar::async_sharded_service< T >

If a sharded service inherits from this class, sharded::stop() will wait until all references to this service on each shard are released before returning. It is still service's own responsibility to track its references in asynchronous code by calling shared_from_this() and keeping returned smart pointer as long as object is in use.

+
+

#include <seastar/core/sharded.hh>

+
+Inheritance diagram for seastar::async_sharded_service< T >:
+
+
+ + +seastar::enable_shared_from_this< T > +seastar::shared_ptr_count_base + +
+ + + + + + + + +

+Public Member Functions

+shared_ptr< T > shared_from_this () noexcept
 
+shared_ptr< const T > shared_from_this () const noexcept
 
+long use_count () const noexcept
 
+ + + +

+Protected Member Functions

+future freed () noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1async__sharded__service.png b/master/classseastar_1_1async__sharded__service.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b6532664b7ef5c07e7ad98928e83039a304b45 GIT binary patch literal 1208 zcma)6X)xOf6pteqW!Nq2=!UY%wy9!DS_WyUBT`2-Y-3gEGDT{Ise}q4%O1=~D`~7V zWCo>3y2kM*sU~(N?TV5hsD{*PhmeYOTZE0y_RD_SH}iYPy!Sr5-@NxqBEnIo#F z5XclA9DvbUr543TdRqOa2y3o2))Apmfk#J2$GHz%q=&zkX}ymS3Wea38GCJLM8t$g zg0w})G9iv~1A+8W=m5W{`#LMEm3!~cnSg8FMJbNxtL=g^P;TuYG#h(U-0WlRAPYWQ zQ1uwkE2@OTpMM_3aD@B8;EXtZX9i+&P?oYi6N{m=E?Ip6YiZnLPAB5yRFbquqW!i*);16bzl?;eN`CstHf$(BTp=t_Z#KbZ^x7Brj7e`?q+jil3PJ!ERo zL;X0Fuds2V zp3VX9GDywlQ}gp?e%y3nn~mg_DGV&;z82@{24IpbPBYvZKy;=JxVZ7vSzqX#ARR}z zyRkXC>IOAfT>9UVBUr;YA}rhd5mbaNyoQ0oTA+brV5uXzqASMkyys40(op2kBbs>q z3_85PLD{J}*8(*~)N} z=Vgei$*xZA3D)&&>|bajvtjiqYpPf;=4uI9EOXa#4L> zLE@}TX7aeV{8V;f^0W{vgHm^pOK%kJ-H`T8nLLPPkdd8-)gEZ|VClcyV2(*b`ZnXM z38$&?Q)h$_qLox4sVP%{HwSXe#^ltbDR6Ox+|u;ih~t%2^G3JcNFLEB`*> z{9TJ4XFI04uH2P~6Nq+rEy3h-XV;s&ef#9vlU ke%e*mVo4|F8r(x#fKbK$u`H)~Xx|J79T* + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::basic_rwlock< Clock > Member List
+
+
+ +

This is the complete list of members for seastar::basic_rwlock< Clock >, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
basic_rwlock() (defined in seastar::basic_rwlock< Clock >)seastar::basic_rwlock< Clock >inline
for_read()seastar::basic_rwlock< Clock >inline
for_write()seastar::basic_rwlock< Clock >inline
hold_read_lock(typename semaphore_type::time_point timeout=semaphore_type::time_point::max())seastar::basic_rwlock< Clock >inline
hold_read_lock(abort_source &as) (defined in seastar::basic_rwlock< Clock >)seastar::basic_rwlock< Clock >inline
hold_write_lock(typename semaphore_type::time_point timeout=semaphore_type::time_point::max())seastar::basic_rwlock< Clock >inline
hold_write_lock(abort_source &as) (defined in seastar::basic_rwlock< Clock >)seastar::basic_rwlock< Clock >inline
holder typedef (defined in seastar::basic_rwlock< Clock >)seastar::basic_rwlock< Clock >
locked() constseastar::basic_rwlock< Clock >inline
read_lock(typename semaphore_type::time_point timeout=semaphore_type::time_point::max())seastar::basic_rwlock< Clock >inline
read_lock(abort_source &as) (defined in seastar::basic_rwlock< Clock >)seastar::basic_rwlock< Clock >inline
read_unlock()seastar::basic_rwlock< Clock >inline
try_read_lock()seastar::basic_rwlock< Clock >inline
try_write_lock()seastar::basic_rwlock< Clock >inline
write_lock(typename semaphore_type::time_point timeout=semaphore_type::time_point::max())seastar::basic_rwlock< Clock >inline
write_lock(abort_source &as) (defined in seastar::basic_rwlock< Clock >)seastar::basic_rwlock< Clock >inline
write_unlock()seastar::basic_rwlock< Clock >inline
+ + + + diff --git a/master/classseastar_1_1basic__rwlock.html b/master/classseastar_1_1basic__rwlock.html new file mode 100644 index 000000000..cd4e34ac0 --- /dev/null +++ b/master/classseastar_1_1basic__rwlock.html @@ -0,0 +1,378 @@ + + + + + + + +Seastar: seastar::basic_rwlock< Clock > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::basic_rwlock< Clock > Class Template Reference
+
+
+

Detailed Description

+
template<typename Clock = typename timer<>::clock>
+class seastar::basic_rwlock< Clock >

Implements a read-write lock mechanism. Beware: this is not a cross-CPU lock, due to seastar's sharded architecture. Instead, it can be used to achieve rwlock semantics between two (or more) fibers running in the same CPU that may use the same resource. Acquiring the write lock will effectively cause all readers not to be executed until the write part is done.

+
+

#include <seastar/core/rwlock.hh>

+
+Inheritance diagram for seastar::basic_rwlock< Clock >:
+
+
+ +
+ + + + +

+Public Types

+using holder = semaphore_units< semaphore_default_exception_factory, Clock >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

rwlock_for_read< Clock > & for_read ()
 
rwlock_for_write< Clock > & for_write ()
 
future read_lock (typename semaphore_type::time_point timeout=semaphore_type::time_point::max())
 
+future read_lock (abort_source &as)
 
void read_unlock ()
 
future write_lock (typename semaphore_type::time_point timeout=semaphore_type::time_point::max())
 
+future write_lock (abort_source &as)
 
void write_unlock ()
 
+bool try_read_lock ()
 Tries to acquire the lock in read mode iff this can be done without waiting.
 
+bool try_write_lock ()
 Tries to acquire the lock in write mode iff this can be done without waiting.
 
future< holderhold_read_lock (typename semaphore_type::time_point timeout=semaphore_type::time_point::max())
 
+future< holderhold_read_lock (abort_source &as)
 
future< holderhold_write_lock (typename semaphore_type::time_point timeout=semaphore_type::time_point::max())
 
+future< holderhold_write_lock (abort_source &as)
 
+bool locked () const
 Checks if any read or write locks are currently held.
 
+

Member Function Documentation

+ +

◆ for_read()

+ +
+
+
+template<typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + +
rwlock_for_read< Clock > & seastar::basic_rwlock< Clock >::for_read ()
+
+inline
+
+

Cast this rwlock into read lock object with lock semantics appropriate to be used by "with_lock". The resulting object will have lock / unlock calls that, when called, will acquire / release the lock in read mode.

+ +
+
+ +

◆ for_write()

+ +
+
+
+template<typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + +
rwlock_for_write< Clock > & seastar::basic_rwlock< Clock >::for_write ()
+
+inline
+
+

Cast this rwlock into write lock object with lock semantics appropriate to be used by "with_lock". The resulting object will have lock / unlock calls that, when called, will acquire / release the lock in write mode.

+ +
+
+ +

◆ hold_read_lock()

+ +
+
+
+template<typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + +
future< holder > seastar::basic_rwlock< Clock >::hold_read_lock (typename semaphore_type::time_point timeout = semaphore_type::time_point::max())
+
+inline
+
+

hold_read_lock() waits for a read lock and returns an object which, when destroyed, releases the lock. This makes it easy to ensure that the lock is eventually undone, at any circumstance (even including exceptions). The release() method can be used on the returned object to release its ownership of the lock and avoid the automatic unlock. Note that both hold_read_lock() and hold_write_lock() return an object of the same type, rwlock::holder.

+

hold_read_lock() may throw an exception (or, in other implementations, return an exceptional future) when it failed to obtain the lock - e.g., on allocation failure.

+ +
+
+ +

◆ hold_write_lock()

+ +
+
+
+template<typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + +
future< holder > seastar::basic_rwlock< Clock >::hold_write_lock (typename semaphore_type::time_point timeout = semaphore_type::time_point::max())
+
+inline
+
+

hold_write_lock() waits for a write lock and returns an object which, when destroyed, releases the lock. This makes it easy to ensure that the lock is eventually undone, at any circumstance (even including exceptions). The release() method can be used on the returned object to release its ownership of the lock and avoid the automatic unlock. Note that both hold_read_lock() and hold_write_lock() return an object of the same type, rwlock::holder.

+

hold_read_lock() may throw an exception (or, in other implementations, return an exceptional future) when it failed to obtain the lock - e.g., on allocation failure.

+ +
+
+ +

◆ read_lock()

+ +
+
+
+template<typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + +
future seastar::basic_rwlock< Clock >::read_lock (typename semaphore_type::time_point timeout = semaphore_type::time_point::max())
+
+inline
+
+

Acquires this lock in read mode. Many readers are allowed, but when this future returns, and until read_unlock is called, all fibers waiting on write_lock are guaranteed not to execute.

+ +
+
+ +

◆ read_unlock()

+ +
+
+
+template<typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + +
void seastar::basic_rwlock< Clock >::read_unlock ()
+
+inline
+
+

Releases the lock, which must have been taken in read mode. After this is called, one of the fibers waiting on write_lock will be allowed to proceed.

+ +
+
+ +

◆ write_lock()

+ +
+
+
+template<typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + +
future seastar::basic_rwlock< Clock >::write_lock (typename semaphore_type::time_point timeout = semaphore_type::time_point::max())
+
+inline
+
+

Acquires this lock in write mode. Only one writer is allowed. When this future returns, and until write_unlock is called, all other fibers waiting on either read_lock or write_lock are guaranteed not to execute.

+ +
+
+ +

◆ write_unlock()

+ +
+
+
+template<typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + +
void seastar::basic_rwlock< Clock >::write_unlock ()
+
+inline
+
+

Releases the lock, which must have been taken in write mode. After this is called, one of the other fibers waiting on write_lock or the fibers waiting on read_lock will be allowed to proceed.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1basic__rwlock.png b/master/classseastar_1_1basic__rwlock.png new file mode 100644 index 0000000000000000000000000000000000000000..92529420ccc46fbd408d822fcb8486a32cca0eee GIT binary patch literal 1271 zcmeAS@N?(olHy`uVBq!ia0y~yV3Gr}12~w0Wa5P$UmztB;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z|!XF;uuoF_;&8=yw3^(F8o1DEB~AS zd-S{Mrr7eILg7-=gO7hJl5TsdzjR8{vhKfHOGS*cgH%p>T$G!XqUNj9`c~01Hi!SV z^CTf;QmA@P+%^4EqJL-Ii1+xv;+M-?`DaEs{o)yu{2r`ZWRu#TeYkR^t;$QK_ZyGD zxbd$Y#GL*%Q0%|{ng7%OZn(3^{kr+<=NCTw*}cka>&?7PTfgo-zPJ5Z=G(&D7b~iM zT`3Fvy7ipK?9<=B{n)DJ{`Tk7EB6#H$_uF8NS1$iF?>(!sl-d6esh=K3%SkI_ftmx zdc%{<+20M{?LGJ__(kIHn|+G2y-k1h+19Q0+;ZG*O0w5>an&^bl~+_FR(+~gb^WyO z)$UgtlNY9)a_w3gy6Eqgr7JJrsgj-dtZ2oh({e#8PrLg1DgTXLwCA4O<*oO=*Is8a zZ8~}(pzyYs;zTdiX=_&(^GSy*W&AL!KJ)mW@S-i>BK}!zz3g&p;tHX~n*+Bs?|J!f z&YxM#8$En2(`r%|hZO&`tp4LRd2iWdTPx?ii#4{|-eR10Zq>uXs_&+5t_@fHmA)Y4 zmC+RU)ydm7fB#*)(k$Y>oc^UH#XJ5m1{PKOWM*;NoweFy?Ji?~m^KwD7R&q<6=T z^NV}#lHAq~OaYvjB!Bgkpsvc8gL1%hqvgwBcT~KAu`kJ2ht;9U^ybtbo5UPK*K{sr z@YtZ{$eGP}1S-R5z`&+({5Q*jW3w0}7?>wKoXZrD?90H@zc8QVCy)#DuSbdWp$Dw zgV36;R-jY0#F!Kgf&^Q{S6<3p_We`)Kfn3Ab8XgLjA&5I;cu8$ew+D$wA-|ry01Ud zs~P^puUl#K{#NGqu(13|8*Le)=2^tZ&8*pPp6+&E&i6rSwMqNM3AXE`j(lUt*tyCpqGyKR zqlcFwe*`}`DR(+P{p57{^sali;aubV+lzs=Kjv_H8u$5XQNHM>8?T>j zuw^)BQ@F#Y{b-{_w6@5$0qk=)=)odW{f*d4kB%bW}J`^s>9;Y1Xc$Y1g4RhdJWYd_)FUi{IjIL-C_U&Pgg&e IbxsLQ0Mji^YXATM literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1basic__semaphore-members.html b/master/classseastar_1_1basic__semaphore-members.html new file mode 100644 index 000000000..96f44ae1c --- /dev/null +++ b/master/classseastar_1_1basic__semaphore-members.html @@ -0,0 +1,105 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::basic_semaphore< ExceptionFactory, Clock > Member List
+
+
+ +

This is the complete list of members for seastar::basic_semaphore< ExceptionFactory, Clock >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + +
available_units() const noexceptseastar::basic_semaphore< ExceptionFactory, Clock >inline
basic_semaphore(size_t count) noexcept(std::is_nothrow_default_constructible_v< exception_factory >)seastar::basic_semaphore< ExceptionFactory, Clock >inline
basic_semaphore(size_t count, exception_factory &&factory) noexcept(std::is_nothrow_move_constructible_v< exception_factory >) (defined in seastar::basic_semaphore< ExceptionFactory, Clock >)seastar::basic_semaphore< ExceptionFactory, Clock >inline
basic_semaphore(basic_semaphore &&other) noexcept(std::is_nothrow_move_constructible_v< exception_factory >)seastar::basic_semaphore< ExceptionFactory, Clock >inline
broken() noexceptseastar::basic_semaphore< ExceptionFactory, Clock >inline
broken(const Exception &ex) noexceptseastar::basic_semaphore< ExceptionFactory, Clock >inline
broken(std::exception_ptr ex) noexceptseastar::basic_semaphore< ExceptionFactory, Clock >inline
clock typedef (defined in seastar::basic_semaphore< ExceptionFactory, Clock >)seastar::basic_semaphore< ExceptionFactory, Clock >
consume(size_t nr=1) noexceptseastar::basic_semaphore< ExceptionFactory, Clock >inline
current() const noexceptseastar::basic_semaphore< ExceptionFactory, Clock >inline
duration typedef (defined in seastar::basic_semaphore< ExceptionFactory, Clock >)seastar::basic_semaphore< ExceptionFactory, Clock >
ensure_space_for_waiters(size_t n)seastar::basic_semaphore< ExceptionFactory, Clock >inline
exception_factory typedef (defined in seastar::basic_semaphore< ExceptionFactory, Clock >)seastar::basic_semaphore< ExceptionFactory, Clock >
max_counter() noexceptseastar::basic_semaphore< ExceptionFactory, Clock >inlinestatic
operator=(basic_semaphore &&other) noexcept(std::is_nothrow_move_assignable_v< exception_factory >)seastar::basic_semaphore< ExceptionFactory, Clock >inline
signal(size_t nr=1) noexceptseastar::basic_semaphore< ExceptionFactory, Clock >inline
time_point typedef (defined in seastar::basic_semaphore< ExceptionFactory, Clock >)seastar::basic_semaphore< ExceptionFactory, Clock >
try_wait(size_t nr=1) noexceptseastar::basic_semaphore< ExceptionFactory, Clock >inline
wait(size_t nr=1) noexceptseastar::basic_semaphore< ExceptionFactory, Clock >inline
wait(time_point timeout, size_t nr=1) noexceptseastar::basic_semaphore< ExceptionFactory, Clock >inline
wait(abort_source &as, size_t nr=1) noexceptseastar::basic_semaphore< ExceptionFactory, Clock >inline
wait(duration timeout, size_t nr=1) noexceptseastar::basic_semaphore< ExceptionFactory, Clock >inline
waiters() const noexceptseastar::basic_semaphore< ExceptionFactory, Clock >inline
+ + + + diff --git a/master/classseastar_1_1basic__semaphore.html b/master/classseastar_1_1basic__semaphore.html new file mode 100644 index 000000000..7cb6c5b3c --- /dev/null +++ b/master/classseastar_1_1basic__semaphore.html @@ -0,0 +1,691 @@ + + + + + + + +Seastar: seastar::basic_semaphore< ExceptionFactory, Clock > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::basic_semaphore< ExceptionFactory, Clock > Class Template Reference
+
+
+

Detailed Description

+
template<typename ExceptionFactory, typename Clock = typename timer<>::clock>
+class seastar::basic_semaphore< ExceptionFactory, Clock >

Counted resource guard.

+

This is a standard computer science semaphore, adapted for futures. You can deposit units into a counter, or take them away. Taking units from the counter may wait if not enough units are available.

+

To support exceptional conditions, a broken() method is provided, which causes all current waiters to stop waiting, with an exceptional future returned. This allows causing all fibers that are blocked on a semaphore to continue. This is similar to POSIX's pthread_cancel(), with wait() acting as a cancellation point.

+
Template Parameters
+ + +
ExceptionFactorytemplate parameter allows modifying a semaphore to throw customized exceptions on timeout/broken/aborted. It has to provide three functions: ExceptionFactory::timeout() - that returns a semaphore_timed_out exception by default, ExceptionFactory::broken() - that returns a broken_semaphore exception by default, and ExceptionFactory::aborted() - that returns a semaphore_aborted exception by default.
+
+
+
+

#include <seastar/core/semaphore.hh>

+
+Inheritance diagram for seastar::basic_semaphore< ExceptionFactory, Clock >:
+
+
+ +
+ + + + + + + + + + +

+Public Types

+using duration = typename timer< Clock >::duration
 
+using clock = typename timer< Clock >::clock
 
+using time_point = typename timer< Clock >::time_point
 
+using exception_factory = ExceptionFactory
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 basic_semaphore (size_t count) noexcept(std::is_nothrow_default_constructible_v< exception_factory >)
 
basic_semaphore (size_t count, exception_factory &&factory) noexcept(std::is_nothrow_move_constructible_v< exception_factory >)
 
 basic_semaphore (basic_semaphore &&other) noexcept(std::is_nothrow_move_constructible_v< exception_factory >)
 
basic_semaphoreoperator= (basic_semaphore &&other) noexcept(std::is_nothrow_move_assignable_v< exception_factory >)
 
future wait (size_t nr=1) noexcept
 
future wait (time_point timeout, size_t nr=1) noexcept
 
future wait (abort_source &as, size_t nr=1) noexcept
 
future wait (duration timeout, size_t nr=1) noexcept
 
void signal (size_t nr=1) noexcept
 
void consume (size_t nr=1) noexcept
 Consume the specific number of units without blocking. More...
 
bool try_wait (size_t nr=1) noexcept
 
size_t current () const noexcept
 
ssize_t available_units () const noexcept
 
+size_t waiters () const noexcept
 Returns the current number of waiters.
 
void broken () noexcept
 
template<typename Exception >
void broken (const Exception &ex) noexcept
 
void broken (std::exception_ptr ex) noexcept
 
+void ensure_space_for_waiters (size_t n)
 Reserve memory for waiters so that wait() will not throw.
 
+ + + + +

+Static Public Member Functions

+static constexpr size_t max_counter () noexcept
 Returns the maximum number of units the semaphore counter can hold.
 
+

Constructor & Destructor Documentation

+ +

◆ basic_semaphore() [1/2]

+ +
+
+
+template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + +
seastar::basic_semaphore< ExceptionFactory, Clock >::basic_semaphore (size_t count)
+
+inlinenoexcept
+
+

Constructs a semaphore object with a specific number of units in its internal counter. E.g., starting it at 1 is suitable for use as an unlocked mutex.

+
Parameters
+ + +
countnumber of initial units present in the counter.
+
+
+ +
+
+ +

◆ basic_semaphore() [2/2]

+ +
+
+
+template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + +
seastar::basic_semaphore< ExceptionFactory, Clock >::basic_semaphore (basic_semaphore< ExceptionFactory, Clock > && other)
+
+inlinenoexcept
+
+

Move-constructs a semaphore object from a moved-from semaphore object, inheriting the number of units from the moved-from semaphore. The moved-from semaphore must be unused.

+
Parameters
+ + +
otherthe moved-from semaphore object.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ available_units()

+ +
+
+
+template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + +
ssize_t seastar::basic_semaphore< ExceptionFactory, Clock >::available_units () const
+
+inlinenoexcept
+
+

Returns the number of available units.

+

Takes into account units consumed using consume() and therefore may return a negative value.

+ +
+
+ +

◆ broken() [1/2]

+ +
+
+
+template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + +
void seastar::basic_semaphore< ExceptionFactory, Clock >::broken ()
+
+inlinenoexcept
+
+

Signal to waiters that an error occurred. wait() will see an exceptional future<> containing a broken_semaphore exception. The future is made available immediately.

+ +
+
+ +

◆ broken() [2/2]

+ +
+
+
+template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
+
+template<typename Exception >
+ + + + + +
+ + + + + + + + +
void seastar::basic_semaphore< ExceptionFactory, Clock >::broken (const Exception & ex)
+
+inlinenoexcept
+
+

Signal to waiters that an error occurred. wait() will see an exceptional future<> containing the provided exception parameter. The future is made available immediately.

+ +
+
+ +

◆ consume()

+ +
+
+
+template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + +
void seastar::basic_semaphore< ExceptionFactory, Clock >::consume (size_t nr = 1)
+
+inlinenoexcept
+
+ +

Consume the specific number of units without blocking.

+

Consume the specific number of units now, regardless of how many units are available in the counter, and reduces the counter by that amount of units. This operation may cause the counter to go negative.

+
Parameters
+ + +
nrAmount of units to consume (default 1).
+
+
+ +
+
+ +

◆ current()

+ +
+
+
+template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + +
size_t seastar::basic_semaphore< ExceptionFactory, Clock >::current () const
+
+inlinenoexcept
+
+

Returns the number of units available in the counter.

+

Does not take into account any waiters.

+ +
+
+ +

◆ operator=()

+ +
+
+
+template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + +
basic_semaphore & seastar::basic_semaphore< ExceptionFactory, Clock >::operator= (basic_semaphore< ExceptionFactory, Clock > && other)
+
+inlinenoexcept
+
+

Move-assigns a semaphore object from a moved-from semaphore object, inheriting the number of units from the moved-from semaphore. The number of units of the assigned semaphore is overwritten by the the moved-from number of units. Both the moved-to and moved-from semaphores must be unused.

+
Parameters
+ + +
otherthe moved-from semaphore object.
+
+
+ +
+
+ +

◆ signal()

+ +
+
+
+template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + +
void seastar::basic_semaphore< ExceptionFactory, Clock >::signal (size_t nr = 1)
+
+inlinenoexcept
+
+

Deposits a specified number of units into the counter.

+

The counter is incremented by the specified number of units. If the new counter value is sufficient to satisfy the request of one or more waiters, their futures (in FIFO order) become ready, and the value of the counter is reduced according to the amount requested.

+
Parameters
+ + +
nrNumber of units to deposit (default 1).
+
+
+ +
+
+ +

◆ try_wait()

+ +
+
+
+template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + +
bool seastar::basic_semaphore< ExceptionFactory, Clock >::try_wait (size_t nr = 1)
+
+inlinenoexcept
+
+

Attempts to reduce the counter value by a specified number of units.

+

If sufficient units are available in the counter, and if no other fiber is waiting, then the counter is reduced. Otherwise, nothing happens. This is useful for "opportunistic" waits where useful work can happen if the counter happens to be ready, but when it is not worthwhile to wait.

+
Parameters
+ + +
nrnumber of units to reduce the counter by (default 1).
+
+
+
Returns
true if the counter had sufficient units, and was decremented.
+ +
+
+ +

◆ wait() [1/4]

+ +
+
+
+template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::basic_semaphore< ExceptionFactory, Clock >::wait (abort_sourceas,
size_t nr = 1 
)
+
+inlinenoexcept
+
+

Waits until at least a specific number of units are available in the counter, and reduces the counter by that amount of units. The request can be aborted using an abort_source.

+
Note
Waits are serviced in FIFO order, though if several are awakened at once, they may be reordered by the scheduler.
+
Parameters
+ + + +
asabort source.
nrAmount of units to wait for (default 1).
+
+
+
Returns
a future that becomes ready when sufficient units are available to satisfy the request. On abort, the future contains a semaphore_aborted exception. If the semaphore was broken(), may contain a broken_semaphore exception.
+ +
+
+ +

◆ wait() [2/4]

+ +
+
+
+template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::basic_semaphore< ExceptionFactory, Clock >::wait (duration timeout,
size_t nr = 1 
)
+
+inlinenoexcept
+
+

Waits until at least a specific number of units are available in the counter, and reduces the counter by that amount of units. If the request cannot be satisfied in time, the request is aborted.

+
Note
Waits are serviced in FIFO order, though if several are awakened at once, they may be reordered by the scheduler.
+
Parameters
+ + + +
timeouthow long to wait.
nrAmount of units to wait for (default 1).
+
+
+
Returns
a future that becomes ready when sufficient units are available to satisfy the request. On timeout, the future contains a semaphore_timed_out exception. If the semaphore was broken(), may contain a broken_semaphore exception.
+ +
+
+ +

◆ wait() [3/4]

+ +
+
+
+template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + +
future seastar::basic_semaphore< ExceptionFactory, Clock >::wait (size_t nr = 1)
+
+inlinenoexcept
+
+

Waits until at least a specific number of units are available in the counter, and reduces the counter by that amount of units.

+
Note
Waits are serviced in FIFO order, though if several are awakened at once, they may be reordered by the scheduler.
+
Parameters
+ + +
nrAmount of units to wait for (default 1).
+
+
+
Returns
a future that becomes ready when sufficient units are available to satisfy the request. If the semaphore was broken(), may contain an exception.
+ +
+
+ +

◆ wait() [4/4]

+ +
+
+
+template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::basic_semaphore< ExceptionFactory, Clock >::wait (time_point timeout,
size_t nr = 1 
)
+
+inlinenoexcept
+
+

Waits until at least a specific number of units are available in the counter, and reduces the counter by that amount of units. If the request cannot be satisfied in time, the request is aborted.

+
Note
Waits are serviced in FIFO order, though if several are awakened at once, they may be reordered by the scheduler.
+
Parameters
+ + + +
timeoutexpiration time.
nrAmount of units to wait for (default 1).
+
+
+
Returns
a future that becomes ready when sufficient units are available to satisfy the request. On timeout, the future contains a semaphore_timed_out exception. If the semaphore was broken(), may contain a broken_semaphore exception.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1basic__semaphore.png b/master/classseastar_1_1basic__semaphore.png new file mode 100644 index 0000000000000000000000000000000000000000..3f09dee461350c4acb827a4bec5d4acf917049f9 GIT binary patch literal 961 zcmeAS@N?(olHy`uVBq!ia0y~yU~~eq12~w0WVBRI7m$(&@CkAK|NlRb`Qpvj(*8pe zfGjXRaNq!I=N)+cetf^oY4=U_H~$%0CzbfD_S$`Oeb|qhn)cfwQI`+Poqzd#^OJj`k^3Bf zR$ZGN<#}mtPxqmhTh4XI$*KMHui0+K|5hxwcyIi|f}K}t3br1(Qg%8tqNl2r&vRFA zV|ikL1*cWei|r2_9{%0_SY75xn87=(o}*q5Yh=AH)%N(QtG_!G+j=$jN4JPy`!@yU z`ud+edn`{ZjXiPV;j9Tus&~XMRC#;RetL+8r)^Kfng2@*PDI&xFI4$kyu``#l@hX_ zjyf-#8JUz;CfIQP8MgxC4lga17Y|=+%QBTr;9{(*knm||xbE4?zcOGp)f^+ zNrmC@2@MtxhGP>0IVLdlC@&UJV3croQ*>Z5=<9K6U`ddX1Zl7^;=-=s@#n=CAVJJF zfgwg&l&NGQ7b7r$8Df_>HR$t9mGHT?|MTB*9B5lqaBFSl~@z(l(sCc zjE%Ya@y{xsgtvQ+T>Z5|JcKofG)q3@%?&bSwPkt7>Pk&+=KK0 + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::basic_sstring< char_type, Size, max_size, NulTerminate > Member List
+
+
+ +

This is the complete list of members for seastar::basic_sstring< char_type, Size, max_size, NulTerminate >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
allocator_type typedef (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >
append(const char_type *s, size_t n)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
at(size_t pos) const (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
at(size_t pos) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
back() noexceptseastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
back() const noexceptseastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
basic_sstring() noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
basic_sstring(const basic_sstring &x) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
basic_sstring(basic_sstring &&x) noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
basic_sstring(initialized_later, size_t size) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
basic_sstring(const char_type *x, size_t size) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
basic_sstring(size_t size, char_type x) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
basic_sstring(const char *x) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
basic_sstring(std::basic_string< char_type > &x) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
basic_sstring(std::initializer_list< char_type > x) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
basic_sstring(const char_type *b, const char_type *e) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
basic_sstring(const std::basic_string< char_type > &s) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
basic_sstring(InputIterator first, InputIterator last) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
basic_sstring(std::basic_string_view< char_type, traits_type > v) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inlineexplicit
begin() const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
begin() noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
c_str() const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
cbegin() const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
cend() const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
compare(std::basic_string_view< char_type, traits_type > x) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
compare(size_t pos, size_t sz, std::basic_string_view< char_type, traits_type > x) const (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
const_iterator typedef (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >
const_pointer typedef (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >
const_reference typedef (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >
contains(std::basic_string_view< char_type, traits_type > sv) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
contains(char_type c) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
contains(const char_type *s) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
data() noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
data() const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
difference_type typedef (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >
empty() const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
end() const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
end() noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
ends_with(std::basic_string_view< char_type, traits_type > sv) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
ends_with(char_type c) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
ends_with(const char_type *s) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
erase(iterator first, iterator last) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
find(char_type t, size_t pos=0) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
find(const char_type *c_str, size_t pos, size_t len2) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
find(const char_type *s, size_t pos=0) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
find(const basic_sstring &s, size_t pos=0) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
find(const StringViewLike &sv_like, size_type pos=0) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
find_last_of(char_type c, size_t pos=npos) const noexceptseastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
front() noexceptseastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
front() const noexceptseastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
insert(const_iterator p, InputIterator beg, InputIterator end)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
iterator typedef (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >
length() const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
npos (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >static
operator std::basic_string< char_type >() const (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
operator std::basic_string_view< char_type >() const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
operator!=(const basic_sstring &x) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
operator+(const basic_sstring &x) const (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
operator+=(const basic_sstring &x) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
operator<(const basic_sstring &x) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
operator=(const basic_sstring &x) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
operator=(basic_sstring &&x) noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
operator==(const basic_sstring &x) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
operator==(const std::basic_string< char_type > x) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
operator==(const char_type *x) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
operator[](size_type pos) noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
operator[](size_type pos) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
padding() (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inlinestatic
pointer typedef (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >
reference typedef (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >
release() && (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
replace(size_type pos, size_type n1, const char_type *s, size_type n2)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
replace(const_iterator i1, const_iterator i2, InputIterator first, InputIterator last) (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
reset() noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
resize(size_t n, const char_type c='\0')seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
resize_and_overwrite(size_t n, Operation op)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
size() const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
size_type typedef (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >
starts_with(std::basic_string_view< char_type, traits_type > sv) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
starts_with(char_type c) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
starts_with(const char_type *s) const noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
substr(size_t from, size_t len=npos) const (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
swap(basic_sstring &x) noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
traits_type typedef (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >
value_type typedef (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >
~basic_sstring() noexcept (defined in seastar::basic_sstring< char_type, Size, max_size, NulTerminate >)seastar::basic_sstring< char_type, Size, max_size, NulTerminate >inline
+ + + + diff --git a/master/classseastar_1_1basic__sstring.html b/master/classseastar_1_1basic__sstring.html new file mode 100644 index 000000000..30a96a075 --- /dev/null +++ b/master/classseastar_1_1basic__sstring.html @@ -0,0 +1,759 @@ + + + + + + + +Seastar: seastar::basic_sstring< char_type, Size, max_size, NulTerminate > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::basic_sstring< char_type, Size, max_size, NulTerminate > Class Template Reference
+
+
+ + + + +

+Classes

struct  initialized_later
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Types

+using value_type = char_type
 
+using traits_type = std::char_traits< char_type >
 
+using allocator_type = std::allocator< char_type >
 
+using reference = char_type &
 
+using const_reference = const char_type &
 
+using pointer = char_type *
 
+using const_pointer = const char_type *
 
+using iterator = char_type *
 
+using const_iterator = const char_type *
 
+using difference_type = ssize_t
 
+using size_type = Size
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

basic_sstring (const basic_sstring &x)
 
basic_sstring (basic_sstring &&x) noexcept
 
basic_sstring (initialized_later, size_t size)
 
basic_sstring (const char_type *x, size_t size)
 
basic_sstring (size_t size, char_type x)
 
basic_sstring (const char *x)
 
basic_sstring (std::basic_string< char_type > &x)
 
basic_sstring (std::initializer_list< char_type > x)
 
basic_sstring (const char_type *b, const char_type *e)
 
basic_sstring (const std::basic_string< char_type > &s)
 
+template<typename InputIterator >
 basic_sstring (InputIterator first, InputIterator last)
 
basic_sstring (std::basic_string_view< char_type, traits_type > v)
 
+basic_sstringoperator= (const basic_sstring &x)
 
+basic_sstringoperator= (basic_sstring &&x) noexcept
 
operator std::basic_string< char_type > () const
 
+size_t size () const noexcept
 
+size_t length () const noexcept
 
+size_t find (char_type t, size_t pos=0) const noexcept
 
+size_t find (const char_type *c_str, size_t pos, size_t len2) const noexcept
 
+constexpr size_t find (const char_type *s, size_t pos=0) const noexcept
 
+size_t find (const basic_sstring &s, size_t pos=0) const noexcept
 
+template<class StringViewLike , std::enable_if_t< std::is_convertible_v< StringViewLike, std::basic_string_view< char_type, traits_type > >, int > = 0>
size_t find (const StringViewLike &sv_like, size_type pos=0) const noexcept
 
size_t find_last_of (char_type c, size_t pos=npos) const noexcept
 
basic_sstringappend (const char_type *s, size_t n)
 
template<class Operation >
+requires std::is_invocable_r_v<size_t, Operation, char_type*, size_t>
void resize_and_overwrite (size_t n, Operation op)
 
void resize (size_t n, const char_type c='\0')
 
basic_sstringreplace (size_type pos, size_type n1, const char_type *s, size_type n2)
 
+template<class InputIterator >
basic_sstringreplace (const_iterator i1, const_iterator i2, InputIterator first, InputIterator last)
 
+iterator erase (iterator first, iterator last)
 
template<class InputIterator >
void insert (const_iterator p, InputIterator beg, InputIterator end)
 
reference front () noexcept
 
const_reference front () const noexcept
 
reference back () noexcept
 
const_reference back () const noexcept
 
+basic_sstring substr (size_t from, size_t len=npos) const
 
+const char_type & at (size_t pos) const
 
+char_type & at (size_t pos)
 
+bool empty () const noexcept
 
+void reset () noexcept
 
+temporary_buffer< char_type > release () &&
 
+int compare (std::basic_string_view< char_type, traits_type > x) const noexcept
 
+int compare (size_t pos, size_t sz, std::basic_string_view< char_type, traits_type > x) const
 
+constexpr bool starts_with (std::basic_string_view< char_type, traits_type > sv) const noexcept
 
+constexpr bool starts_with (char_type c) const noexcept
 
+constexpr bool starts_with (const char_type *s) const noexcept
 
+constexpr bool ends_with (std::basic_string_view< char_type, traits_type > sv) const noexcept
 
+constexpr bool ends_with (char_type c) const noexcept
 
+constexpr bool ends_with (const char_type *s) const noexcept
 
+constexpr bool contains (std::basic_string_view< char_type, traits_type > sv) const noexcept
 
+constexpr bool contains (char_type c) const noexcept
 
+constexpr bool contains (const char_type *s) const noexcept
 
+void swap (basic_sstring &x) noexcept
 
+char_type * data () noexcept
 
+const char_type * data () const noexcept
 
+const char_type * c_str () const noexcept
 
+const char_type * begin () const noexcept
 
+const char_type * end () const noexcept
 
+const char_type * cbegin () const noexcept
 
+const char_type * cend () const noexcept
 
+char_type * begin () noexcept
 
+char_type * end () noexcept
 
+bool operator== (const basic_sstring &x) const noexcept
 
+bool operator!= (const basic_sstring &x) const noexcept
 
+constexpr bool operator== (const std::basic_string< char_type > x) const noexcept
 
+constexpr bool operator== (const char_type *x) const noexcept
 
+bool operator< (const basic_sstring &x) const noexcept
 
+basic_sstring operator+ (const basic_sstring &x) const
 
+basic_sstringoperator+= (const basic_sstring &x)
 
+char_type & operator[] (size_type pos) noexcept
 
+const char_type & operator[] (size_type pos) const noexcept
 
operator std::basic_string_view< char_type > () const noexcept
 
+ + + +

+Static Public Member Functions

+static constexpr unsigned padding ()
 
+ + + +

+Static Public Attributes

+static constexpr size_type npos = static_cast<size_type>(-1)
 
+

Class Documentation

+ +

◆ seastar::basic_sstring::initialized_later

+ +
+
+ + + + +
struct seastar::basic_sstring::initialized_later
+
+ +
+
+

Member Function Documentation

+ +

◆ append()

+ +
+
+
+template<typename char_type , typename Size , Size max_size, bool NulTerminate>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
basic_sstring & seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::append (const char_type * s,
size_t n 
)
+
+inline
+
+

Append a C substring.

Parameters
+ + + +
sThe C string to append.
nThe number of characters to append.
+
+
+
Returns
Reference to this string.
+ +
+
+ +

◆ back() [1/2]

+ +
+
+
+template<typename char_type , typename Size , Size max_size, bool NulTerminate>
+ + + + + +
+ + + + + + + +
const_reference seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::back () const
+
+inlinenoexcept
+
+

Returns a read-only (constant) reference to the data at the last element of the string. This function shall not be called on empty strings.

+ +
+
+ +

◆ back() [2/2]

+ +
+
+
+template<typename char_type , typename Size , Size max_size, bool NulTerminate>
+ + + + + +
+ + + + + + + +
reference seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::back ()
+
+inlinenoexcept
+
+

Returns a read/write reference to the data at the last element of the string. This function shall not be called on empty strings.

+ +
+
+ +

◆ find_last_of()

+ +
+
+
+template<typename char_type , typename Size , Size max_size, bool NulTerminate>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
size_t seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::find_last_of (char_type c,
size_t pos = npos 
) const
+
+inlinenoexcept
+
+

find_last_of find the last occurrence of c in the string. When pos is specified, the search only includes characters at or before position pos.

+ +
+
+ +

◆ front() [1/2]

+ +
+
+
+template<typename char_type , typename Size , Size max_size, bool NulTerminate>
+ + + + + +
+ + + + + + + +
const_reference seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::front () const
+
+inlinenoexcept
+
+

Returns a read-only (constant) reference to the data at the first element of the string. This function shall not be called on empty strings.

+ +
+
+ +

◆ front() [2/2]

+ +
+
+
+template<typename char_type , typename Size , Size max_size, bool NulTerminate>
+ + + + + +
+ + + + + + + +
reference seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::front ()
+
+inlinenoexcept
+
+

Returns a read/write reference to the data at the first element of the string. This function shall not be called on empty strings.

+ +
+
+ +

◆ insert()

+ +
+
+
+template<typename char_type , typename Size , Size max_size, bool NulTerminate>
+
+template<class InputIterator >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::insert (const_iterator p,
InputIterator beg,
InputIterator end 
)
+
+inline
+
+

Inserts additional characters into the string right before the character indicated by p.

+ +
+
+ +

◆ replace()

+ +
+
+
+template<typename char_type , typename Size , Size max_size, bool NulTerminate>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
basic_sstring & seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::replace (size_type pos,
size_type n1,
const char_type * s,
size_type n2 
)
+
+inline
+
+

Replace characters with a value of a C style substring.

+ +
+
+ +

◆ resize()

+ +
+
+
+template<typename char_type , typename Size , Size max_size, bool NulTerminate>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::resize (size_t n,
const char_type c = '\0' 
)
+
+inline
+
+

Resize string.

Parameters
+ + + +
nnew size.
cif n greater than current size character to fill newly allocated space with.
+
+
+ +
+
+ +

◆ resize_and_overwrite()

+ +
+
+
+template<typename char_type , typename Size , Size max_size, bool NulTerminate>
+
+template<class Operation >
+requires std::is_invocable_r_v<size_t, Operation, char_type*, size_t>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::resize_and_overwrite (size_t n,
Operation op 
)
+
+inline
+
+

Resize string and use the specified op to modify the content and the length

Parameters
+ + + +
nnew size
opthe function object used for setting the new content of the string
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1bitsets_1_1set__iterator-members.html b/master/classseastar_1_1bitsets_1_1set__iterator-members.html new file mode 100644 index 000000000..2c38a8f90 --- /dev/null +++ b/master/classseastar_1_1bitsets_1_1set__iterator-members.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::bitsets::set_iterator< N > Member List
+
+
+ +

This is the complete list of members for seastar::bitsets::set_iterator< N >, including all inherited members.

+ + + + + + + + + + + + +
difference_type typedef (defined in seastar::bitsets::set_iterator< N >)seastar::bitsets::set_iterator< N >
iterator_category typedef (defined in seastar::bitsets::set_iterator< N >)seastar::bitsets::set_iterator< N >
operator!=(const set_iterator &other) const noexcept (defined in seastar::bitsets::set_iterator< N >)seastar::bitsets::set_iterator< N >inline
operator*() const noexcept (defined in seastar::bitsets::set_iterator< N >)seastar::bitsets::set_iterator< N >inline
operator++() noexcept (defined in seastar::bitsets::set_iterator< N >)seastar::bitsets::set_iterator< N >inline
operator++(int) noexcept (defined in seastar::bitsets::set_iterator< N >)seastar::bitsets::set_iterator< N >inline
operator==(const set_iterator &other) const noexcept (defined in seastar::bitsets::set_iterator< N >)seastar::bitsets::set_iterator< N >inline
pointer typedef (defined in seastar::bitsets::set_iterator< N >)seastar::bitsets::set_iterator< N >
reference typedef (defined in seastar::bitsets::set_iterator< N >)seastar::bitsets::set_iterator< N >
set_iterator(std::bitset< N > bitset, int offset=0) noexcept (defined in seastar::bitsets::set_iterator< N >)seastar::bitsets::set_iterator< N >inline
value_type typedef (defined in seastar::bitsets::set_iterator< N >)seastar::bitsets::set_iterator< N >
+ + + + diff --git a/master/classseastar_1_1bitsets_1_1set__iterator.html b/master/classseastar_1_1bitsets_1_1set__iterator.html new file mode 100644 index 000000000..513f7a9ad --- /dev/null +++ b/master/classseastar_1_1bitsets_1_1set__iterator.html @@ -0,0 +1,126 @@ + + + + + + + +Seastar: seastar::bitsets::set_iterator< N > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::bitsets::set_iterator< N > Class Template Reference
+
+
+ + + + + + + + + + + + +

+Public Types

+using iterator_category = std::input_iterator_tag
 
+using value_type = int
 
+using difference_type = std::ptrdiff_t
 
+using pointer = int *
 
+using reference = int &
 
+ + + + + + + + + + + + + +

+Public Member Functions

set_iterator (std::bitset< N > bitset, int offset=0) noexcept
 
+set_iteratoroperator++ () noexcept
 
+set_iterator operator++ (int) noexcept
 
+int operator* () const noexcept
 
+bool operator== (const set_iterator &other) const noexcept
 
+bool operator!= (const set_iterator &other) const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1bitsets_1_1set__range-members.html b/master/classseastar_1_1bitsets_1_1set__range-members.html new file mode 100644 index 000000000..1ac3de09d --- /dev/null +++ b/master/classseastar_1_1bitsets_1_1set__range-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::bitsets::set_range< N > Member List
+
+
+ +

This is the complete list of members for seastar::bitsets::set_range< N >, including all inherited members.

+ + + + + + +
begin() const noexcept (defined in seastar::bitsets::set_range< N >)seastar::bitsets::set_range< N >inline
end() const noexcept (defined in seastar::bitsets::set_range< N >)seastar::bitsets::set_range< N >inline
iterator typedef (defined in seastar::bitsets::set_range< N >)seastar::bitsets::set_range< N >
set_range(std::bitset< N > bitset, int offset=0) noexcept (defined in seastar::bitsets::set_range< N >)seastar::bitsets::set_range< N >inline
value_type typedef (defined in seastar::bitsets::set_range< N >)seastar::bitsets::set_range< N >
+ + + + diff --git a/master/classseastar_1_1bitsets_1_1set__range.html b/master/classseastar_1_1bitsets_1_1set__range.html new file mode 100644 index 000000000..ad9d8d755 --- /dev/null +++ b/master/classseastar_1_1bitsets_1_1set__range.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: seastar::bitsets::set_range< N > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::bitsets::set_range< N > Class Template Reference
+
+
+ + + + + + +

+Public Types

+using iterator = set_iterator< N >
 
+using value_type = int
 
+ + + + + + + +

+Public Member Functions

+constexpr set_range (std::bitset< N > bitset, int offset=0) noexcept
 
+iterator begin () const noexcept
 
+iterator end () const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1bool__class-members.html b/master/classseastar_1_1bool__class-members.html new file mode 100644 index 000000000..fa97305a3 --- /dev/null +++ b/master/classseastar_1_1bool__class-members.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::bool_class< Tag > Member List
+
+ + + + + diff --git a/master/classseastar_1_1bool__class.html b/master/classseastar_1_1bool__class.html new file mode 100644 index 000000000..28a330bb0 --- /dev/null +++ b/master/classseastar_1_1bool__class.html @@ -0,0 +1,136 @@ + + + + + + + +Seastar: seastar::bool_class< Tag > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::bool_class< Tag > Class Template Reference
+
+
+

Detailed Description

+
template<typename Tag>
+class seastar::bool_class< Tag >

Type-safe boolean.

+

bool_class objects are type-safe boolean values that cannot be implicitly casted to untyped bools, integers or different bool_class types while still provides all relevant logical and comparison operators.

+

bool_class template parameter is a tag type that is going to be used to distinguish booleans of different types.

+

Usage examples:

struct foo_tag { };
+
using foo = bool_class<foo_tag>;
+
+
struct bar_tag { };
+
using bar = bool_class<bar_tag>;
+
+
foo v1 = foo::yes; // OK
+
bar v2 = foo::yes; // ERROR, no implicit cast
+
foo v4 = v1 || foo::no; // OK
+
bar v5 = bar::yes && bar(true); // OK
+
bool v6 = v5; // ERROR, no implicit cast
+
Type-safe boolean.
Definition: bool_class.hh:58
+
Template Parameters
+ + +
Tagtype used as a tag
+
+
+
+

#include <seastar/util/bool_class.hh>

+ + + + + + + + + + + +

+Public Member Functions

+constexpr bool_class () noexcept
 Constructs a bool_class object initialised to false.
 
+constexpr bool_class (bool v) noexcept
 Constructs a bool_class object initialised to v.
 
operator bool () const noexcept
 Casts a bool_class object to an untyped bool.
 
+ + + + + +

+Static Public Attributes

+static const bool_class yes { true }
 
+static const bool_class no { false }
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1broken__condition__variable-members.html b/master/classseastar_1_1broken__condition__variable-members.html new file mode 100644 index 000000000..52e49dc4f --- /dev/null +++ b/master/classseastar_1_1broken__condition__variable-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::broken_condition_variable Member List
+
+
+ +

This is the complete list of members for seastar::broken_condition_variable, including all inherited members.

+ + +
what() const noexceptseastar::broken_condition_variablevirtual
+ + + + diff --git a/master/classseastar_1_1broken__condition__variable.html b/master/classseastar_1_1broken__condition__variable.html new file mode 100644 index 000000000..2df28dfd9 --- /dev/null +++ b/master/classseastar_1_1broken__condition__variable.html @@ -0,0 +1,103 @@ + + + + + + + +Seastar: seastar::broken_condition_variable Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::broken_condition_variable Class Reference
+
+
+

Detailed Description

+

Exception thrown when a condition variable is broken by condition_variable::broken().

+
+

#include <seastar/core/condition-variable.hh>

+
+Inheritance diagram for seastar::broken_condition_variable:
+
+
+ +
+ + + + + +

+Public Member Functions

+virtual const char * what () const noexcept
 Reports the exception reason.
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1broken__condition__variable.png b/master/classseastar_1_1broken__condition__variable.png new file mode 100644 index 0000000000000000000000000000000000000000..a748e5a165039c032eec11f9b79534ef5ed973f7 GIT binary patch literal 677 zcmeAS@N?(olHy`uVBq!ia0vp^7lAl{gBeI};7C{iq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0Ogvp2Ln;{G&W+ymSb>K%+TQZ_{f`!G zXHHLk?Kx+smY1fVfm4Dh|4(t_%}ZN6FFA23d45`}FiGY9u8A7{U-&=guKT|JdA_jc zrM*&twkYMZzX^+ZT36M)WowJPQi603uRJ~T;UU|iidTIx z;g5bRUY~jss8yQD?GW>VtZ&(}#M=d9T? z4TkWL*w4ZC-@bR=lc{XX@P6|0^_9?{8@H@3|9D@#qW+wAtklZ=bzibddwiSAU*C6o z)_I#j?fSC)y&LoD!b_jI%s3@j|G0KXXtj9w{pKw1rQ|d%bJkKOd9WhO=6$ zE%qhNdh~VE-2LelcTe&N2i`mIT>pCe+RS(buXW{uQyFG6WZ9hM*;#*rr*!x0HHTML zdzNflU@qvp-sE;=yIRo!4Dqb}Gd&ararwUVJ%qLvS4la(J z{$p3`>*BkGXZbgnHO>{_Wqk7NbqxE4mVMq^;%~e=%u?Vg-_v8uQ~(dM=kBM@ + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::broken_named_semaphore Member List
+
+
+ +

This is the complete list of members for seastar::broken_named_semaphore, including all inherited members.

+ + + +
broken_named_semaphore(std::string_view msg) noexcept (defined in seastar::broken_named_semaphore)seastar::broken_named_semaphore
what() const noexceptseastar::broken_named_semaphorevirtual
+ + + + diff --git a/master/classseastar_1_1broken__named__semaphore.html b/master/classseastar_1_1broken__named__semaphore.html new file mode 100644 index 000000000..0d0b3be05 --- /dev/null +++ b/master/classseastar_1_1broken__named__semaphore.html @@ -0,0 +1,134 @@ + + + + + + + +Seastar: seastar::broken_named_semaphore Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::broken_named_semaphore Class Reference
+
+
+
+Inheritance diagram for seastar::broken_named_semaphore:
+
+
+ + +seastar::broken_semaphore + +
+ + + + + + + +

+Public Member Functions

broken_named_semaphore (std::string_view msg) noexcept
 
virtual const char * what () const noexcept
 Reports the exception reason. More...
 
+

Member Function Documentation

+ +

◆ what()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const char * seastar::broken_named_semaphore::what () const
+
+virtualnoexcept
+
+ +

Reports the exception reason.

+ +

Reimplemented from seastar::broken_semaphore.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1broken__named__semaphore.png b/master/classseastar_1_1broken__named__semaphore.png new file mode 100644 index 0000000000000000000000000000000000000000..227ff45cc2ab060a517302197e25b6b23a8b9b8f GIT binary patch literal 1049 zcmeAS@N?(olHy`uVBq!ia0vp^mw~v0gBeJAP0+g!q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0S9rQOhEy=VoqKWGW-T5!^TM^y{@(u) zAn4dWD!%oIAEJnQ|#XY2_-ur3pcyU)O^P?U~yq))_o_^Q%?$?{lA3 ztHfU`Eh~xt_;o&K$<`;lJIz1ke!J!4efma7sQndFAJ45Z+ZKABPR;kc8h32js$Vnp zl2rl;^cu3syux|;9y(`lM3r>#D@cdgqT3xB=h z{PoqAhr~skT)$^}cJ)1p4zY6u9ShDJuDeL4_tLnkTSs%@%Ces+|+|3&f znkZa;YbJN4!N>SgL4dN6>s{s_++1o5|B1&9+f98ho6MNu;?fpm(An`L97J5d?c?dP zB=q==ufl?s%gcBDm!EmbC?hNHc5>c(je%qU-B{OK2HGv*%j ze)EaU+v+nMpu_#Rlk3$D1Gv+{Sf4n{l;tcy`C;lmb#?~304LlR8e{q4jfXFU!(_MQ+a<$s{BF@xccHu3mgn3pE6n$Up&Sd>^D zyi)o?!ai!w{L;F2wq}=Ou3cXrT6$Zqcy~qm|J|vz)%7=aKl|QWUbnq9blJvp{xRDd zUwzCG2%VB0FDj+#EIi;T*yZVO~u z85XxWYnStVmT#|q%Y|QcDS4AodS-7WGc1H(Gr#|%r(b@2JJ*p7(bwfJizNjsuM*XK zeYK?S%$1zu7k5v;#D3pw0(<+S?f&oQF8|hY#mE2i%a0q*pS%3A=C8%~oV%xkpYFPT zCZx}QWp$|Fo9Fl9PI>j#M15cL`ct;hI?hK=zH=Vv_GA4WyX@(MTl}I2nCE^fJ-|}1 s(k+FlVr2r;hxH)*+g)erl(tLt`Ryy7uZtDk2h7I|p00i_>zopr04>D + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::broken_pipe_exception Member List
+
+
+ +

This is the complete list of members for seastar::broken_pipe_exception, including all inherited members.

+ + +
what() const noexcept (defined in seastar::broken_pipe_exception)seastar::broken_pipe_exceptioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1broken__pipe__exception.html b/master/classseastar_1_1broken__pipe__exception.html new file mode 100644 index 000000000..2d2a0f9b1 --- /dev/null +++ b/master/classseastar_1_1broken__pipe__exception.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: seastar::broken_pipe_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::broken_pipe_exception Class Reference
+
+
+
+Inheritance diagram for seastar::broken_pipe_exception:
+
+
+ +
+ + + + +

+Public Member Functions

+virtual const char * what () const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1broken__pipe__exception.png b/master/classseastar_1_1broken__pipe__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..f776925ade83b6543bdd3503d5cc884b840879ca GIT binary patch literal 668 zcmeAS@N?(olHy`uVBq!ia0vp^`+zurgBeIpcw!$5q$C1-LR|m<{|{uoc=NTi|Ih@G z90(scaDcV*jy#abQ4-`A%m7pb0#{Fk7%?y~X?wajhEy=VoqKWGY6TwG^0;Sz{>#Tl zyE0{cy;f$lW@@C2u3?L<;gRq&XO4-gc`nxasH*AJsqY!MtAGER|NRD&UoS5bYti?d ze?hmV`bptFi)A;1F8!G?<@S@UGv*nmPhL`9!hU~=)gPB-R)5Z_*w68ubnk-ipSE>T z&!23Y`t_Int=|9weFgwIO+~)Mfy#c>39^G6v zkE!@lrPq9|Z3iArT=M$YpD>^!uA5lwQ>g{90=;THyDqilr&^UruQ>MYhiO1?-nqoh$^LiV?>k=pqoUUJwuO85?ng82k9@v+T>CTkkIk`+N4_8o6ryho=9w-g>`!=TZB0ecD^!&pPb+R$i>% z{@YTyI~Tt%*m@=VdFHKv!{zHg+vx54{6>ubK=~ClsRyh4{_OAmZ&UC6tgPTvaszYg pBmQ}{4ePa_fmBr^cIJ%RRr{* + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::broken_semaphore Member List
+
+
+ +

This is the complete list of members for seastar::broken_semaphore, including all inherited members.

+ + +
what() const noexceptseastar::broken_semaphorevirtual
+ + + + diff --git a/master/classseastar_1_1broken__semaphore.html b/master/classseastar_1_1broken__semaphore.html new file mode 100644 index 000000000..9e6d06eac --- /dev/null +++ b/master/classseastar_1_1broken__semaphore.html @@ -0,0 +1,135 @@ + + + + + + + +Seastar: seastar::broken_semaphore Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::broken_semaphore Class Reference
+
+
+

Detailed Description

+

Exception thrown when a semaphore is broken by semaphore::broken().

+
+

#include <seastar/core/semaphore.hh>

+
+Inheritance diagram for seastar::broken_semaphore:
+
+
+ + +seastar::broken_named_semaphore + +
+ + + + + +

+Public Member Functions

virtual const char * what () const noexcept
 Reports the exception reason. More...
 
+

Member Function Documentation

+ +

◆ what()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const char * seastar::broken_semaphore::what () const
+
+virtualnoexcept
+
+ +

Reports the exception reason.

+ +

Reimplemented in seastar::broken_named_semaphore.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1broken__semaphore.png b/master/classseastar_1_1broken__semaphore.png new file mode 100644 index 0000000000000000000000000000000000000000..8ec91ce3c5aa7d60dd4a54bdeb97dc3dae04ffe3 GIT binary patch literal 1053 zcmeAS@N?(olHy`uVBq!ia0vp^mw~v0gBeJAP0+g!q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0*Lb=(hEy=VoqKWGW-T5!^TM^y{@(u) zAn4dWD!%oIAEJnQ|#XY2_-ur3pcyU)O^P?U~yq))_o_^Q%?$?{lA3 ztHfU`Eh~xt_;o&K$<`;lJIz1ke!J!4efma7sQndFAJ45Z+ZKABPR;kc8h32js$Vnp zl2rl;^cu3syux|;9y(`lM3r>#D@cdgqT3xB=h z{PoqAhr~skT)$^}cJ)1p4zY6u9ShDJuDeL4_tLnkTSs%@%Ces+|+|3&f znkZa;YbJN4!N>SgL4dN6>s{s_++1o5|B1&9+ouM3HFvTYOljggupfl)rM)V9Eny$C zseIRe`I*m>_SYR=b^F_l+rK3~2X9=H|DM14`k#HqKW;6}x-D0>>aFC0)#5&{ZOqI( zp51zMSJ%4nAbV7`4ff7_HGDKCcoi=_`FNKJTICe5Ga zuuL-3Vuj$$Mei8@u(Ap_)Dw>n+@7^8^Oxw|Wtp?;Tz!<3oHb{-xct!u5wBT-g#W7Dky6mC0m?-@4(-Ew|#!ITz>WIfc5^9Q9Nf=Z!cFrUummodiioqmCc*YpG$1w?a$dp zfBzJ+^PQ>j)W^ZE;zC(|@7z9pQ;_ofYqqa<{h8I0-DL5zR!H#UqTu-(-y7+&U$0x? z;v)BA%6eus!HM3cN|QTIc(YFK=l~{WAaT~`vWai + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::cancelled_error Member List
+
+
+ +

This is the complete list of members for seastar::cancelled_error, including all inherited members.

+ + +
what() const noexcept (defined in seastar::cancelled_error)seastar::cancelled_errorinlinevirtual
+ + + + diff --git a/master/classseastar_1_1cancelled__error.html b/master/classseastar_1_1cancelled__error.html new file mode 100644 index 000000000..781023b27 --- /dev/null +++ b/master/classseastar_1_1cancelled__error.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: seastar::cancelled_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::cancelled_error Class Reference
+
+
+

Detailed Description

+

An exception Cancelled IOs resolve their future into (see io_intent)

+
Examples
file_demo.cc.
+
+
+

#include <seastar/core/file.hh>

+
+Inheritance diagram for seastar::cancelled_error:
+
+
+ +
+ + + + +

+Public Member Functions

+virtual const char * what () const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1cancelled__error.png b/master/classseastar_1_1cancelled__error.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3158ba8d809dadec0f45c784efd8c4c000870c GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^(||aDgBeJk$*ZXZQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;j+aiu3L$QVRSefw-#NXf z?p3SPDwA0_^cC_p($PfGchVhy~b^nipd9nFPl^>_q_3!-1xcZMl!rOz7`s!t3 z-B@0q``dR`*sui2cE<<;65i|oC(2HAEV-eq^Ovi76OJ8|(7 z_VU}W&Yj6nKGh%S%p*)4S{oS_MQu29X4z%&J9{G+ooAa@28?nBPgg&ebxsLQ09oD( AuK)l5 literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1checked__ptr-members.html b/master/classseastar_1_1checked__ptr-members.html new file mode 100644 index 000000000..c3bbc8f9a --- /dev/null +++ b/master/classseastar_1_1checked__ptr-members.html @@ -0,0 +1,97 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::checked_ptr< Ptr, NullDerefAction > Member List
+
+
+ +

This is the complete list of members for seastar::checked_ptr< Ptr, NullDerefAction >, including all inherited members.

+ + + + + + + + + + + + + + + + +
checked_ptr() noexcept(noexcept(Ptr(nullptr)))=default (defined in seastar::checked_ptr< Ptr, NullDerefAction >)seastar::checked_ptr< Ptr, NullDerefAction >
checked_ptr(std::nullptr_t) noexcept(std::is_nothrow_default_constructible_v< checked_ptr< Ptr, NullDerefAction > >) (defined in seastar::checked_ptr< Ptr, NullDerefAction >)seastar::checked_ptr< Ptr, NullDerefAction >inline
checked_ptr(Ptr &&ptr) noexcept(std::is_nothrow_move_constructible_v< Ptr >) (defined in seastar::checked_ptr< Ptr, NullDerefAction >)seastar::checked_ptr< Ptr, NullDerefAction >inline
checked_ptr(const Ptr &p) noexcept(std::is_nothrow_copy_constructible_v< Ptr >) (defined in seastar::checked_ptr< Ptr, NullDerefAction >)seastar::checked_ptr< Ptr, NullDerefAction >inline
element_type typedefseastar::checked_ptr< Ptr, NullDerefAction >
get() constseastar::checked_ptr< Ptr, NullDerefAction >inline
hash() constseastar::checked_ptr< Ptr, NullDerefAction >inline
operator bool() constseastar::checked_ptr< Ptr, NullDerefAction >inlineexplicit
operator!=(const checked_ptr &other) const (defined in seastar::checked_ptr< Ptr, NullDerefAction >)seastar::checked_ptr< Ptr, NullDerefAction >inline
operator*() constseastar::checked_ptr< Ptr, NullDerefAction >inline
operator*()seastar::checked_ptr< Ptr, NullDerefAction >inline
operator->() constseastar::checked_ptr< Ptr, NullDerefAction >inline
operator->()seastar::checked_ptr< Ptr, NullDerefAction >inline
operator==(const checked_ptr &other) const (defined in seastar::checked_ptr< Ptr, NullDerefAction >)seastar::checked_ptr< Ptr, NullDerefAction >inline
pointer typedefseastar::checked_ptr< Ptr, NullDerefAction >
+ + + + diff --git a/master/classseastar_1_1checked__ptr.html b/master/classseastar_1_1checked__ptr.html new file mode 100644 index 000000000..255412a90 --- /dev/null +++ b/master/classseastar_1_1checked__ptr.html @@ -0,0 +1,348 @@ + + + + + + + +Seastar: seastar::checked_ptr< Ptr, NullDerefAction > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::checked_ptr< Ptr, NullDerefAction > Class Template Reference
+
+
+

Detailed Description

+
template<typename Ptr, typename NullDerefAction = default_null_deref_action>
+requires std::is_default_constructible_v<NullDerefAction> && requires (NullDerefAction action) { NullDerefAction(); }
+class seastar::checked_ptr< Ptr, NullDerefAction >

seastar::checked_ptr class is a wrapper class that may be used with any pointer type (smart like std::unique_ptr or raw pointers like int*).

+

The seastar::checked_ptr object will invoke the NullDerefAction functor if it is dereferenced when the underlying pointer is not engaged.

+

It may still be assigned, compared to other seastar::checked_ptr objects or moved without limitations.

+

The default NullDerefAction will throw a seastar::default_null_deref_action exception.

+
Template Parameters
+ + +
NullDerefActiona functor that is invoked when a user tries to dereference a not engaged pointer.
+
+
+
+

#include <seastar/core/checked_ptr.hh>

+ + + + + + + + +

+Public Types

+using element_type = typename std::pointer_traits< Ptr >::element_type
 Underlying element type.
 
+using pointer = element_type *
 Type of the pointer to the underlying element.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

checked_ptr (std::nullptr_t) noexcept(std::is_nothrow_default_constructible_v< checked_ptr< Ptr, NullDerefAction > >)
 
checked_ptr (Ptr &&ptr) noexcept(std::is_nothrow_move_constructible_v< Ptr >)
 
checked_ptr (const Ptr &p) noexcept(std::is_nothrow_copy_constructible_v< Ptr >)
 
Checked Methods

These methods start with invoking a NullDerefAction functor if the underlying pointer is not engaged.

+
pointer get () const
 
const Ptr & operator-> () const
 
Ptr & operator-> ()
 
const element_typeoperator* () const
 
element_typeoperator* ()
 
Unchecked methods

These methods may be invoked when the underlying pointer is not engaged.

+
 operator bool () const
 
+bool operator== (const checked_ptr &other) const
 
+bool operator!= (const checked_ptr &other) const
 
size_t hash () const
 
+

Member Function Documentation

+ +

◆ get()

+ +
+
+
+template<typename Ptr , typename NullDerefAction = default_null_deref_action>
+ + + + + +
+ + + + + + + +
pointer seastar::checked_ptr< Ptr, NullDerefAction >::get () const
+
+inline
+
+

Invokes the get() method of the underlying smart pointer or returns the pointer itself for a raw pointer (const variant).

Returns
The pointer to the underlying object
+ +
+
+ +

◆ hash()

+ +
+
+
+template<typename Ptr , typename NullDerefAction = default_null_deref_action>
+ + + + + +
+ + + + + + + +
size_t seastar::checked_ptr< Ptr, NullDerefAction >::hash () const
+
+inline
+
+

Gets the hash value for the underlying pointer object.

Returns
The hash value for the underlying pointer object
+ +
+
+ +

◆ operator bool()

+ +
+
+
+template<typename Ptr , typename NullDerefAction = default_null_deref_action>
+ + + + + +
+ + + + + + + +
seastar::checked_ptr< Ptr, NullDerefAction >::operator bool () const
+
+inlineexplicit
+
+

Checks if the underlying pointer is engaged.

Returns
TRUE if the underlying pointer is engaged
+ +
+
+ +

◆ operator*() [1/2]

+ +
+
+
+template<typename Ptr , typename NullDerefAction = default_null_deref_action>
+ + + + + +
+ + + + + + + +
element_type & seastar::checked_ptr< Ptr, NullDerefAction >::operator* ()
+
+inline
+
+

Gets the reference to the underlying object.

Returns
The reference to the underlying object
+ +
+
+ +

◆ operator*() [2/2]

+ +
+
+
+template<typename Ptr , typename NullDerefAction = default_null_deref_action>
+ + + + + +
+ + + + + + + +
const element_type & seastar::checked_ptr< Ptr, NullDerefAction >::operator* () const
+
+inline
+
+

Gets the reference to the underlying object (const variant).

Returns
The reference to the underlying object
+ +
+
+ +

◆ operator->() [1/2]

+ +
+
+
+template<typename Ptr , typename NullDerefAction = default_null_deref_action>
+ + + + + +
+ + + + + + + +
Ptr & seastar::checked_ptr< Ptr, NullDerefAction >::operator-> ()
+
+inline
+
+

Gets a reference to the underlying pointer object (const variant).

Returns
The underlying pointer object
+ +
+
+ +

◆ operator->() [2/2]

+ +
+
+
+template<typename Ptr , typename NullDerefAction = default_null_deref_action>
+ + + + + +
+ + + + + + + +
const Ptr & seastar::checked_ptr< Ptr, NullDerefAction >::operator-> () const
+
+inline
+
+

Gets a reference to the underlying pointer object.

Returns
The underlying pointer object
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1checked__ptr__is__null__exception.html b/master/classseastar_1_1checked__ptr__is__null__exception.html new file mode 100644 index 000000000..491c3f849 --- /dev/null +++ b/master/classseastar_1_1checked__ptr__is__null__exception.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::checked_ptr_is_null_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::checked_ptr_is_null_exception Class Reference
+
+
+

Detailed Description

+

The exception thrown by a default_null_deref_action.

+
+

#include <seastar/core/checked_ptr.hh>

+
+Inheritance diagram for seastar::checked_ptr_is_null_exception:
+
+
+ +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1checked__ptr__is__null__exception.png b/master/classseastar_1_1checked__ptr__is__null__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..2357350129f8260dbe6d716887b3b7ba74641dde GIT binary patch literal 716 zcmeAS@N?(olHy`uVBq!ia0vp^FM&9KgBeJk)>)JTq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0qCH(4Ln;{G&b_#4wE~Z8c-*f4|NGb5 zdT}aTJ9p)tSkbXs9m6&q;m6u(X~7(mmvD+KnPf7pDP+>IORh_zFNi1Uue)ydIbUh& zlGk7Af_8_e|9yTbUUy~1cULRjxY;lBpXN;ZVz+nhl_fPlT77oUc?chel_wv{l>Whs@rG-EHrVoeXmV?h&`dX_4%N_abR8BA*uNzh@{JP^SZ)UZ)x z2}3fPf`Ykc&MXsPGiZdVvvRC@vY~pdp`EeJ@(nSyOQmeTuUBAw@wzmq!EI*A&j)Mb zuRq%I*XOlN`c|E`Z`*XY$|&dW`?X#%cFpl`_p(i|FS)(<_R^x;BG&Kcefqrf`Glh@ z4c0H@>i>Itm5uDm&)@&3`U!6>IC|oEo?h=-wX=;~%L@6P_8mQ@w=m@YBgMBrzyB(J zUpakx(M9WbZ{0$_>zUTisok^X-Nbd*y)WfhJ4Th}&);%x&CQpVnSrA5DfjoXo32eR zi%y)s<^9zwTg=RN%1oYD?f?6v%oqRXwrh8ne^0%$|H-k(lfQ4dy|-@GQklCh*=nm_ zzf1Zi*1U1%-nsyplJ{k=vp1W+4S!btuA1wEUhK}BlW)i?{gsw-E#13yyIle6iZ8ND qK3@@eV6P1e+TYKwoylSP%dExMJ4+^NuPrd?F?hQAxvX + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::chunked_fifo< T, items_per_chunk > Member List
+
+
+ +

This is the complete list of members for seastar::chunked_fifo< T, items_per_chunk >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
back() noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
back() const noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
begin() noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
begin() const noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
cbegin() const noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
cend() const noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
chunked_fifo() noexcept=default (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >
chunked_fifo(chunked_fifo &&x) noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
chunked_fifo(const chunked_fifo &X)=delete (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >
clear() noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >
const_iterator typedef (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >
const_pointer typedef (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >
const_reference typedef (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >
emplace_back(A &&... args) (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
emplace_back(Args &&... args) (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
empty() const noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
end() noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
end() const noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
front() const noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
iterator typedef (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >
operator=(const chunked_fifo &)=delete (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >
operator=(chunked_fifo &&) noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
pointer typedef (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >
pop_front() noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
push_back(const T &data) (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
push_back(T &&data) (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
reference typedef (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >
reserve(size_t n) (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >
shrink_to_fit() noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >
size() const noexcept (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >inline
size_type typedef (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >
value_type typedef (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >
~chunked_fifo() (defined in seastar::chunked_fifo< T, items_per_chunk >)seastar::chunked_fifo< T, items_per_chunk >
+ + + + diff --git a/master/classseastar_1_1chunked__fifo.html b/master/classseastar_1_1chunked__fifo.html new file mode 100644 index 000000000..f7126f20e --- /dev/null +++ b/master/classseastar_1_1chunked__fifo.html @@ -0,0 +1,189 @@ + + + + + + + +Seastar: seastar::chunked_fifo< T, items_per_chunk > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::chunked_fifo< T, items_per_chunk > Class Template Reference
+
+
+ + + + + + + + + + + + + + + + + + +

+Public Types

+using value_type = T
 
+using size_type = size_t
 
+using reference = T &
 
+using pointer = T *
 
+using const_reference = const T &
 
+using const_pointer = const T *
 
+using iterator = basic_iterator< false >
 
+using const_iterator = basic_iterator< true >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

chunked_fifo (chunked_fifo &&x) noexcept
 
chunked_fifo (const chunked_fifo &X)=delete
 
+chunked_fifooperator= (const chunked_fifo &)=delete
 
+chunked_fifooperator= (chunked_fifo &&) noexcept
 
+void push_back (const T &data)
 
+void push_back (T &&data)
 
+T & back () noexcept
 
+const T & back () const noexcept
 
+template<typename... A>
void emplace_back (A &&... args)
 
+T & front () const noexcept
 
+void pop_front () noexcept
 
+bool empty () const noexcept
 
+size_t size () const noexcept
 
+void clear () noexcept
 
+void reserve (size_t n)
 
+void shrink_to_fit () noexcept
 
+iterator begin () noexcept
 
+iterator end () noexcept
 
+const_iterator begin () const noexcept
 
+const_iterator end () const noexcept
 
+const_iterator cbegin () const noexcept
 
+const_iterator cend () const noexcept
 
+template<typename... Args>
void emplace_back (Args &&... args)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1circular__buffer-members.html b/master/classseastar_1_1circular__buffer-members.html new file mode 100644 index 000000000..c573ad591 --- /dev/null +++ b/master/classseastar_1_1circular__buffer-members.html @@ -0,0 +1,127 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::circular_buffer< T, Alloc > Member List
+
+
+ +

This is the complete list of members for seastar::circular_buffer< T, Alloc >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
access_element_unsafe(size_t idx) noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
back() noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
back() const noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
begin() noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
begin() const noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
capacity() const noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
cbegin() const noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
cend() const noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
circular_buffer() noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
circular_buffer(Alloc alloc) noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
circular_buffer(circular_buffer &&X) noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
circular_buffer(const circular_buffer &X)=delete (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >
clear() noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
const_iterator typedef (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >
const_pointer typedef (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >
const_reference typedef (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >
emplace_back(A &&... args) (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >
emplace_back(Args &&... args) (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
emplace_front(A &&... args) (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >
emplace_front(Args &&... args) (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
empty() const noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
end() noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
end() const noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
erase(iterator first, iterator last) noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
for_each(Func func) (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
front() noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
front() const noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
iterator typedef (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >
operator=(const circular_buffer &)=delete (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >
operator=(circular_buffer &&b) noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
operator[](size_t idx) noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
operator[](size_t idx) const noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
pointer typedef (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >
pop_back() noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
pop_front() noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
push_back(const T &data) (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
push_back(T &&data) (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
push_front(const T &data) (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
push_front(T &&data) (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
reference typedef (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >
reserve(size_t) (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
size() const noexcept (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
size_type typedef (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >
value_type typedef (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >
~circular_buffer() (defined in seastar::circular_buffer< T, Alloc >)seastar::circular_buffer< T, Alloc >inline
+ + + + diff --git a/master/classseastar_1_1circular__buffer.html b/master/classseastar_1_1circular__buffer.html new file mode 100644 index 000000000..5f8bdf5f6 --- /dev/null +++ b/master/classseastar_1_1circular__buffer.html @@ -0,0 +1,247 @@ + + + + + + + +Seastar: seastar::circular_buffer< T, Alloc > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::circular_buffer< T, Alloc > Class Template Reference
+
+
+

Detailed Description

+
template<typename T, typename Alloc = std::allocator<T>>
+class seastar::circular_buffer< T, Alloc >

A growable double-ended queue container that can be efficiently extended (and shrunk) from both ends. Implementation is a single storage vector.

+

Similar to libstdc++'s std::deque, except that it uses a single level store, and so is more efficient for simple stored items. Similar to boost::circular_buffer_space_optimized, except it uses uninitialized storage for unoccupied elements (and thus move/copy constructors instead of move/copy assignments, which are less efficient).

+

The storage of the circular_buffer is expanded automatically in exponential increments. When adding new elements:

    +
  • if size + 1 > capacity: all iterators and references are invalidated,
  • +
  • otherwise only the begin() or end() iterator is invalidated:
      +
    • push_front() and emplace_front() will invalidate begin() and
    • +
    • push_back() and emplace_back() will invalidate end().
    • +
    +
  • +
+

Removing elements never invalidates any references and only invalidates begin() or end() iterators:

    +
  • pop_front() will invalidate begin() and
  • +
  • pop_back() will invalidate end().
  • +
+

reserve() may also invalidate all iterators and references.

+
+

#include <seastar/core/circular_buffer.hh>

+ + + + + + + + + + + + + + + + + + +

+Public Types

+using value_type = T
 
+using size_type = size_t
 
+using reference = T &
 
+using pointer = T *
 
+using const_reference = const T &
 
+using const_pointer = const T *
 
+typedef cbiterator< circular_buffer, T > iterator
 
+typedef cbiterator< const circular_buffer, const T > const_iterator
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

circular_buffer (Alloc alloc) noexcept
 
circular_buffer (circular_buffer &&X) noexcept
 
circular_buffer (const circular_buffer &X)=delete
 
+circular_bufferoperator= (const circular_buffer &)=delete
 
+circular_bufferoperator= (circular_buffer &&b) noexcept
 
+void push_front (const T &data)
 
+void push_front (T &&data)
 
+template<typename... A>
void emplace_front (A &&... args)
 
+void push_back (const T &data)
 
+void push_back (T &&data)
 
+template<typename... A>
void emplace_back (A &&... args)
 
+T & front () noexcept
 
+const T & front () const noexcept
 
+T & back () noexcept
 
+const T & back () const noexcept
 
+void pop_front () noexcept
 
+void pop_back () noexcept
 
+bool empty () const noexcept
 
+size_t size () const noexcept
 
+size_t capacity () const noexcept
 
+void reserve (size_t)
 
+void clear () noexcept
 
+T & operator[] (size_t idx) noexcept
 
+const T & operator[] (size_t idx) const noexcept
 
+template<typename Func >
void for_each (Func func)
 
+T & access_element_unsafe (size_t idx) noexcept
 
+iterator begin () noexcept
 
+const_iterator begin () const noexcept
 
+iterator end () noexcept
 
+const_iterator end () const noexcept
 
+const_iterator cbegin () const noexcept
 
+const_iterator cend () const noexcept
 
+iterator erase (iterator first, iterator last) noexcept
 
+template<typename... Args>
void emplace_front (Args &&... args)
 
+template<typename... Args>
void emplace_back (Args &&... args)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1circular__buffer__fixed__capacity-members.html b/master/classseastar_1_1circular__buffer__fixed__capacity-members.html new file mode 100644 index 000000000..aae8ee58c --- /dev/null +++ b/master/classseastar_1_1circular__buffer__fixed__capacity-members.html @@ -0,0 +1,119 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::circular_buffer_fixed_capacity< T, Capacity > Member List
+
+
+ +

This is the complete list of members for seastar::circular_buffer_fixed_capacity< T, Capacity >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
back() (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
begin() (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
begin() const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
capacity() const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
cbegin() const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
cend() const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
circular_buffer_fixed_capacity()=default (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >
circular_buffer_fixed_capacity(circular_buffer_fixed_capacity &&x) noexcept (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
clear() (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
const_iterator typedef (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >
const_pointer typedef (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >
const_reference typedef (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >
difference_type typedef (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >
emplace_back(A &&... args) (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >
emplace_back(Args &&... args) (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
emplace_front(A &&... args) (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >
emplace_front(Args &&... args) (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
empty() const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
end() (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
end() const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
erase(iterator first, iterator last) (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
front() (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
iterator typedef (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >
operator=(circular_buffer_fixed_capacity &&x) noexcept (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
operator[](size_t idx) (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
pointer typedef (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >
pop_back() (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
pop_front() (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
push_back(const T &data) (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
push_back(T &&data) (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
push_front(const T &data) (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
push_front(T &&data) (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
reference typedef (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >
size() const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
size_type typedef (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >
value_type typedef (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >
~circular_buffer_fixed_capacity() (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >)seastar::circular_buffer_fixed_capacity< T, Capacity >inline
+ + + + diff --git a/master/classseastar_1_1circular__buffer__fixed__capacity.html b/master/classseastar_1_1circular__buffer__fixed__capacity.html new file mode 100644 index 000000000..f49c49bdc --- /dev/null +++ b/master/classseastar_1_1circular__buffer__fixed__capacity.html @@ -0,0 +1,221 @@ + + + + + + + +Seastar: seastar::circular_buffer_fixed_capacity< T, Capacity > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::circular_buffer_fixed_capacity< T, Capacity > Class Template Reference
+
+
+

Detailed Description

+
template<typename T, size_t Capacity>
+class seastar::circular_buffer_fixed_capacity< T, Capacity >

A fixed-capacity container (like boost::static_vector) that can insert and remove at both ends (like std::deque). Does not allocate.

+

Does not perform overflow checking when size exceeds capacity.

+
Template Parameters
+ + + +
Ttype of objects stored in the container; must be noexcept move enabled
Capacitymaximum number of objects that can be stored in the container; must be a power of 2
+
+
+
+

#include <seastar/core/circular_buffer_fixed_capacity.hh>

+ + + + +

+Classes

class  cbiterator
 
+ + + + + + + + + + + + + + + + + + + +

+Public Types

+using value_type = T
 
+using size_type = size_t
 
+using reference = T &
 
+using pointer = T *
 
+using const_reference = const T &
 
+using const_pointer = const T *
 
+using difference_type = ssize_t
 
+using iterator = cbiterator< T >
 
+using const_iterator = cbiterator< const T >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

circular_buffer_fixed_capacity (circular_buffer_fixed_capacity &&x) noexcept
 
+circular_buffer_fixed_capacityoperator= (circular_buffer_fixed_capacity &&x) noexcept
 
+void push_front (const T &data)
 
+void push_front (T &&data)
 
+template<typename... A>
T & emplace_front (A &&... args)
 
+void push_back (const T &data)
 
+void push_back (T &&data)
 
+template<typename... A>
T & emplace_back (A &&... args)
 
+T & front ()
 
+T & back ()
 
+void pop_front ()
 
+void pop_back ()
 
+bool empty () const
 
+size_t size () const
 
+size_t capacity () const
 
+T & operator[] (size_t idx)
 
+void clear ()
 
+iterator begin ()
 
+const_iterator begin () const
 
+iterator end ()
 
+const_iterator end () const
 
+const_iterator cbegin () const
 
+const_iterator cend () const
 
+iterator erase (iterator first, iterator last)
 
+template<typename... Args>
T & emplace_front (Args &&... args)
 
+template<typename... Args>
T & emplace_back (Args &&... args)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1circular__buffer__fixed__capacity_1_1cbiterator-members.html b/master/classseastar_1_1circular__buffer__fixed__capacity_1_1cbiterator-members.html new file mode 100644 index 000000000..9a526e25a --- /dev/null +++ b/master/classseastar_1_1circular__buffer__fixed__capacity_1_1cbiterator-members.html @@ -0,0 +1,106 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType > Member List
+
+
+ +

This is the complete list of members for seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
cbiterator() (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >
difference_type typedef (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >
iterator_category typedef (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >
operator!=(const cbiterator &rhs) const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator*() const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator+(difference_type n) const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator+ (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >friend
operator++() (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator++(int) (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator+=(difference_type n) (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator-(difference_type n) const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator-(const cbiterator &rhs) const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator--() (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator--(int) (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator-=(difference_type n) (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator->() const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator<(const cbiterator &rhs) const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator<=(const cbiterator &rhs) const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator==(const cbiterator &rhs) const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator>(const cbiterator &rhs) const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
operator>=(const cbiterator &rhs) const (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >inline
pointer typedef (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >
reference typedef (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >
value_type typedef (defined in seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >)seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >
+ + + + diff --git a/master/classseastar_1_1circular__buffer__fixed__capacity_1_1cbiterator.html b/master/classseastar_1_1circular__buffer__fixed__capacity_1_1cbiterator.html new file mode 100644 index 000000000..9b1321d6e --- /dev/null +++ b/master/classseastar_1_1circular__buffer__fixed__capacity_1_1cbiterator.html @@ -0,0 +1,159 @@ + + + + + + + +Seastar: seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType > Class Template Reference
+
+
+ + + + + + + + + + + + +

+Public Types

+using iterator_category = std::random_access_iterator_tag
 
+using value_type = ValueType
 
+using difference_type = ssize_t
 
+using pointer = ValueType *
 
+using reference = ValueType &
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+ValueType & operator* () const
 
+ValueType * operator-> () const
 
+cbiteratoroperator++ ()
 
+cbiterator operator++ (int)
 
+cbiteratoroperator-- ()
 
+cbiterator operator-- (int)
 
+cbiterator operator+ (difference_type n) const
 
+cbiterator operator- (difference_type n) const
 
+cbiteratoroperator+= (difference_type n)
 
+cbiteratoroperator-= (difference_type n)
 
+bool operator== (const cbiterator &rhs) const
 
+bool operator!= (const cbiterator &rhs) const
 
+bool operator< (const cbiterator &rhs) const
 
+bool operator> (const cbiterator &rhs) const
 
+bool operator<= (const cbiterator &rhs) const
 
+bool operator>= (const cbiterator &rhs) const
 
+difference_type operator- (const cbiterator &rhs) const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1concrete__execution__stage-members.html b/master/classseastar_1_1concrete__execution__stage-members.html new file mode 100644 index 000000000..d4afc206a --- /dev/null +++ b/master/classseastar_1_1concrete__execution__stage-members.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::concrete_execution_stage< ReturnType, Args > Member List
+
+
+ +

This is the complete list of members for seastar::concrete_execution_stage< ReturnType, Args >, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
_empty (defined in seastar::execution_stage)seastar::execution_stageprotected
_flush_scheduled (defined in seastar::execution_stage)seastar::execution_stageprotected
_metric_group (defined in seastar::execution_stage)seastar::execution_stageprotected
_name (defined in seastar::execution_stage)seastar::execution_stageprotected
_sg (defined in seastar::execution_stage)seastar::execution_stageprotected
_stats (defined in seastar::execution_stage)seastar::execution_stageprotected
concrete_execution_stage(const sstring &name, scheduling_group sg, noncopyable_function< ReturnType(Args...)> f) (defined in seastar::concrete_execution_stage< ReturnType, Args >)seastar::concrete_execution_stage< ReturnType, Args >inlineexplicit
concrete_execution_stage(const sstring &name, noncopyable_function< ReturnType(Args...)> f) (defined in seastar::concrete_execution_stage< ReturnType, Args >)seastar::concrete_execution_stage< ReturnType, Args >inlineexplicit
execution_stage(const sstring &name, scheduling_group sg={}) (defined in seastar::execution_stage)seastar::execution_stageexplicit
execution_stage(const execution_stage &)=delete (defined in seastar::execution_stage)seastar::execution_stage
execution_stage(execution_stage &&)seastar::execution_stage
flush() noexceptseastar::execution_stage
get_stats() const noexceptseastar::execution_stageinline
name() const noexceptseastar::execution_stageinline
operator()(typename internal::wrap_for_es< Args >::type... args)seastar::concrete_execution_stage< ReturnType, Args >inline
poll() const noexceptseastar::execution_stageinline
~execution_stage() (defined in seastar::execution_stage)seastar::execution_stagevirtual
+ + + + diff --git a/master/classseastar_1_1concrete__execution__stage.html b/master/classseastar_1_1concrete__execution__stage.html new file mode 100644 index 000000000..360acf437 --- /dev/null +++ b/master/classseastar_1_1concrete__execution__stage.html @@ -0,0 +1,260 @@ + + + + + + + +Seastar: seastar::concrete_execution_stage< ReturnType, Args > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::concrete_execution_stage< ReturnType, Args > Class Template Referencefinal
+
+
+

Detailed Description

+
template<typename ReturnType, typename... Args>
+requires std::is_nothrow_move_constructible_v<std::tuple<Args...>>
+class seastar::concrete_execution_stage< ReturnType, Args >

Concrete execution stage class.

+
Note
The recommended way of creating execution stages is to use make_execution_stage().
+
Template Parameters
+ + + +
ReturnTypereturn type of the function object
Argsargument pack containing arguments to the function object, needs to have move constructor that doesn't throw
+
+
+
+

#include <seastar/core/execution_stage.hh>

+
+Inheritance diagram for seastar::concrete_execution_stage< ReturnType, Args >:
+
+
+ + +seastar::execution_stage + +
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

concrete_execution_stage (const sstring &name, scheduling_group sg, noncopyable_function< ReturnType(Args...)> f)
 
concrete_execution_stage (const sstring &name, noncopyable_function< ReturnType(Args...)> f)
 
return_type operator() (typename internal::wrap_for_es< Args >::type... args)
 
+const sstring & name () const noexcept
 Returns execution stage name.
 
+const statsget_stats () const noexcept
 Returns execution stage usage statistics.
 
bool flush () noexcept
 
bool poll () const noexcept
 
+ + + + + + + + + + + + + +

+Protected Attributes

+bool _empty = true
 
+bool _flush_scheduled = false
 
+scheduling_group _sg
 
+stats _stats
 
+sstring _name
 
+metrics::metric_group _metric_group
 
+

Member Function Documentation

+ +

◆ flush()

+ +
+
+ + + + + +
+ + + + + + + +
bool seastar::execution_stage::flush ()
+
+noexceptinherited
+
+

Flushes execution stage

+

Ensures that a task which would execute all queued operations is scheduled. Does not schedule a new task if there is one already pending or the queue is empty.

+
Returns
true if a new task has been scheduled
+ +
+
+ +

◆ operator()()

+ +
+
+
+template<typename ReturnType , typename... Args>
+ + + + + +
+ + + + + + + + +
return_type seastar::concrete_execution_stage< ReturnType, Args >::operator() (typename internal::wrap_for_es< Args >::type... args)
+
+inline
+
+

Enqueues a call to the stage's function

+

Adds a function call to the queue. Objects passed by value are moved, rvalue references are decayed and the objects are moved, lvalue references need to be explicitly wrapped using seastar::ref().

+

Usage example:

void do_something(int&, int, std::vector<int>&&);
+
thread_local auto stage = seastar::make_execution_stage("execution-stage", do_something);
+
+
int global_value;
+
+
future<> func(std::vector<int> vec) {
+
//return stage(global_value, 42, std::move(vec)); // fail: use seastar::ref to pass references
+
return stage(seastar::ref(global_value), 42, std::move(vec)); // ok
+
}
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
auto make_execution_stage(const sstring &name, scheduling_group sg, Function &&fn)
Definition: execution_stage.hh:453
+
reference_wrapper< T > ref(T &object) noexcept
Wraps reference in a reference_wrapper.
Definition: reference_wrapper.hh:62
+
Parameters
+ + +
argsarguments passed to the stage's function
+
+
+
Returns
future containing the result of the call to the stage's function
+ +
+
+ +

◆ poll()

+ +
+
+ + + + + +
+ + + + + + + +
bool seastar::execution_stage::poll () const
+
+inlinenoexceptinherited
+
+

Checks whether there are pending operations.

+
Returns
true if there is at least one queued operation
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1concrete__execution__stage.png b/master/classseastar_1_1concrete__execution__stage.png new file mode 100644 index 0000000000000000000000000000000000000000..629087ae6930949ca4b1d73f9fbae5eb2fdd3938 GIT binary patch literal 1029 zcmeAS@N?(olHy`uVBq!ia0y~yVDtg912~w0r0eB9mOx4(z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op@{_9_V zO;J)(jo=iKsb(wFb~#Uq+NU$^%k(+Ld`0Je+N5}Lsl3!t44yQHW9FnME+?j_s5>oF zvHZB%XtIj!dEFfQPu-urE=k6PE>p??zP;}L zse)&t?(TUT;rYvL-Gs<1I!4#rzZXwT=)1wGx9#@qjI)>4D0$vL?rQXU?W^p2zxI9) z{JKqScmCuDnYyoaJuaCS#m>4fwARi#G@I?ZPQKd|{r1$p&(~g8yUvTh(x4`v{LO#* z>Yv|BTEC~{U1#_F6<6nfR_4;4mtJA4cRW9TUpKSZJiad?`u&2m&9n9QR=#-VHp~3; zzDV=wOXfeBB~!0F^E+SioqgG#ey_iC#{1K6{-rxrVx3@K6*N*k**QVe)9+5ovpK~R ziq9=)tYEZbU~2f>;=>?sXLm@gfm>1dK>O^|8#o_0o?t0Z4q>toG-3n>7=s^BiMo?o zgD_A*=LF6NE)rh85_j0_ z&RLxaO4C~X#n^oI8?!5Yrm5F1p5=PI=Jke`0-F~|heC3ZSp7~ng-AQ}Tm~D`}&okpw+O~^) zcPB=EyKww%#k;V#<`xxFS<4hRe@>Q9a(=euvE%az&r13GkI&LMe@aJD_4u0LZ_Rxt zWz0j~U$O1qU1gBZ?7{q)b>8;d-!|#px^z?Q`pbxC(Y24#qSjWf(z=%N`}>hK{K3b1 z*}V>UMDv{WHeZ^Pp7uFSZuLyJmzyuWy=;xaX4lS%&(5~>m40@=ese + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::condition_variable Member List
+
+
+ +

This is the complete list of members for seastar::condition_variable, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
broadcast() noexceptseastar::condition_variable
broken() noexceptseastar::condition_variable
broken(std::exception_ptr) noexcept (defined in seastar::condition_variable)seastar::condition_variable
condition_variable() noexcept=defaultseastar::condition_variable
condition_variable(condition_variable &&rhs) noexcept=default (defined in seastar::condition_variable)seastar::condition_variable
has_waiters() const noexceptseastar::condition_variableinline
signal() noexceptseastar::condition_variable
wait() noexceptseastar::condition_variableinline
wait(std::chrono::time_point< Clock, Duration > timeout) noexceptseastar::condition_variableinline
wait(std::chrono::duration< Rep, Period > timeout) noexceptseastar::condition_variableinline
wait(Pred &&pred) noexceptseastar::condition_variableinline
wait(std::chrono::time_point< Clock, Duration > timeout, Pred &&pred) noexceptseastar::condition_variableinline
wait(std::chrono::duration< Rep, Period > timeout, Pred &&pred) noexceptseastar::condition_variableinline
when() noexceptseastar::condition_variableinline
when(std::chrono::time_point< Clock, Duration > timeout) noexceptseastar::condition_variableinline
when(std::chrono::duration< Rep, Period > timeout) noexceptseastar::condition_variableinline
when(Pred &&pred) noexceptseastar::condition_variableinline
when(std::chrono::time_point< Clock, Duration > timeout, Pred &&pred) noexceptseastar::condition_variableinline
when(std::chrono::duration< Rep, Period > timeout, Pred &&pred) noexceptseastar::condition_variableinline
~condition_variable() (defined in seastar::condition_variable)seastar::condition_variable
+ + + + diff --git a/master/classseastar_1_1condition__variable.html b/master/classseastar_1_1condition__variable.html new file mode 100644 index 000000000..673419fe1 --- /dev/null +++ b/master/classseastar_1_1condition__variable.html @@ -0,0 +1,700 @@ + + + + + + + +Seastar: seastar::condition_variable Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::condition_variable Class Reference
+
+
+

Detailed Description

+

Conditional variable.

+

This is a standard computer science condition variable sans locking, since in seastar access to variables is atomic anyway, adapted for futures. You can wait for variable to be notified.

+

To support exceptional conditions, a broken() method is provided, which causes all current waiters to stop waiting, with an exceptional future returned. This allows causing all fibers that are blocked on a condition variable to continue. This issimilar to POSIX's pthread_cancel(), with wait() acting as a cancellation point.

+
+

#include <seastar/core/condition-variable.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 condition_variable () noexcept=default
 
condition_variable (condition_variable &&rhs) noexcept=default
 
future wait () noexcept
 
template<typename Clock = typename timer<>::clock, typename Duration = typename Clock::duration>
future wait (std::chrono::time_point< Clock, Duration > timeout) noexcept
 
template<typename Rep , typename Period >
future wait (std::chrono::duration< Rep, Period > timeout) noexcept
 
template<typename Pred >
+requires std::is_invocable_r_v<bool, Pred>
future wait (Pred &&pred) noexcept
 
template<typename Clock = typename timer<>::clock, typename Duration = typename Clock::duration, typename Pred >
+requires std::is_invocable_r_v<bool, Pred>
future wait (std::chrono::time_point< Clock, Duration > timeout, Pred &&pred) noexcept
 
template<typename Rep , typename Period , typename Pred >
+requires std::is_invocable_r_v<bool, Pred>
future wait (std::chrono::duration< Rep, Period > timeout, Pred &&pred) noexcept
 
awaiter when () noexcept
 
template<typename Clock = typename timer<>::clock, typename Duration = typename Clock::duration>
timeout_awaiter< Clock, Duration > when (std::chrono::time_point< Clock, Duration > timeout) noexcept
 
template<typename Rep , typename Period >
auto when (std::chrono::duration< Rep, Period > timeout) noexcept
 
template<typename Pred >
+requires std::is_invocable_r_v<bool, Pred>
auto when (Pred &&pred) noexcept
 
template<typename Clock = typename timer<>::clock, typename Duration = typename Clock::duration, typename Pred >
+requires std::is_invocable_r_v<bool, Pred>
auto when (std::chrono::time_point< Clock, Duration > timeout, Pred &&pred) noexcept
 
template<typename Rep , typename Period , typename Pred >
+requires std::is_invocable_r_v<bool, Pred>
auto when (std::chrono::duration< Rep, Period > timeout, Pred &&pred) noexcept
 
bool has_waiters () const noexcept
 
+void signal () noexcept
 Notify variable and wake up a waiter if there is one.
 
+void broadcast () noexcept
 Notify variable and wake up all waiter.
 
void broken () noexcept
 
+void broken (std::exception_ptr) noexcept
 
+

Constructor & Destructor Documentation

+ +

◆ condition_variable()

+ +
+
+ + + + + +
+ + + + + + + +
seastar::condition_variable::condition_variable ()
+
+defaultnoexcept
+
+

Constructs a condition_variable object. Initialzie the semaphore with a default value of 0 to enusre the first call to wait() before signal() won't be waken up immediately.

+ +
+
+

Member Function Documentation

+ +

◆ broken()

+ +
+
+ + + + + +
+ + + + + + + +
void seastar::condition_variable::broken ()
+
+noexcept
+
+

Signal to waiters that an error occurred. wait() will see an exceptional future<> containing the provided exception parameter. The future is made available immediately.

+ +
+
+ +

◆ has_waiters()

+ +
+
+ + + + + +
+ + + + + + + +
bool seastar::condition_variable::has_waiters () const
+
+inlinenoexcept
+
+

Whether or not the condition variable currently has pending waiter(s) The returned answer is valid until next continuation/fiber switch.

+ +
+
+ +

◆ wait() [1/6]

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::condition_variable::wait ()
+
+inlinenoexcept
+
+

Waits until condition variable is signaled, may wake up without condition been met

+
Returns
a future that becomes ready when signal() is called If the condition variable was broken() will return broken_condition_variable exception.
+ +
+
+ +

◆ wait() [2/6]

+ +
+
+
+template<typename Pred >
+requires std::is_invocable_r_v<bool, Pred>
+ + + + + +
+ + + + + + + + +
future seastar::condition_variable::wait (Pred && pred)
+
+inlinenoexcept
+
+

Waits until condition variable is notified and pred() == true, otherwise wait again.

+
Parameters
+ + +
predpredicate that checks that awaited condition is true
+
+
+
Returns
a future that becomes ready when signal() is called If the condition variable was broken(), may contain an exception.
+ +
+
+ +

◆ wait() [3/6]

+ +
+
+
+template<typename Rep , typename Period >
+ + + + + +
+ + + + + + + + +
future seastar::condition_variable::wait (std::chrono::duration< Rep, Period > timeout)
+
+inlinenoexcept
+
+

Waits until condition variable is signaled or timeout is reached

+
Parameters
+ + +
timeoutduration after which wait will exit with a timeout
+
+
+
Returns
a future that becomes ready when signal() is called If the condition variable was broken() will return broken_condition_variable exception. If timepoint is passed will return condition_variable_timed_out exception.
+ +
+
+ +

◆ wait() [4/6]

+ +
+
+
+template<typename Rep , typename Period , typename Pred >
+requires std::is_invocable_r_v<bool, Pred>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::condition_variable::wait (std::chrono::duration< Rep, Period > timeout,
Pred && pred 
)
+
+inlinenoexcept
+
+

Waits until condition variable is notified and pred() == true or timeout is reached, otherwise wait again.

+
Parameters
+ + + +
timeoutduration after which wait will exit with a timeout
predpredicate that checks that awaited condition is true
+
+
+
Returns
a future that becomes ready when signal() is called If the condition variable was broken() will return broken_condition_variable exception. If timepoint is passed will return condition_variable_timed_out exception.
+ +
+
+ +

◆ wait() [5/6]

+ +
+
+
+template<typename Clock = typename timer<>::clock, typename Duration = typename Clock::duration>
+ + + + + +
+ + + + + + + + +
future seastar::condition_variable::wait (std::chrono::time_point< Clock, Duration > timeout)
+
+inlinenoexcept
+
+

Waits until condition variable is signaled or timeout is reached

+
Parameters
+ + +
timeouttime point at which wait will exit with a timeout
+
+
+
Returns
a future that becomes ready when signal() is called If the condition variable was broken() will return broken_condition_variable exception. If timepoint is reached will return condition_variable_timed_out exception.
+ +
+
+ +

◆ wait() [6/6]

+ +
+
+
+template<typename Clock = typename timer<>::clock, typename Duration = typename Clock::duration, typename Pred >
+requires std::is_invocable_r_v<bool, Pred>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::condition_variable::wait (std::chrono::time_point< Clock, Duration > timeout,
Pred && pred 
)
+
+inlinenoexcept
+
+

Waits until condition variable is notified and pred() == true or timeout is reached, otherwise wait again.

+
Parameters
+ + + +
timeouttime point at which wait will exit with a timeout
predpredicate that checks that awaited condition is true
+
+
+
Returns
a future that becomes ready when signal() is called If the condition variable was broken() will return broken_condition_variable exception. If timepoint is reached will return condition_variable_timed_out exception.
+ +
+
+ +

◆ when() [1/6]

+ +
+
+ + + + + +
+ + + + + + + +
awaiter seastar::condition_variable::when ()
+
+inlinenoexcept
+
+

Coroutine/co_await only waiter. Waits until condition variable is signaled, may wake up without condition been met

+
Returns
a future that becomes ready when signal() is called If the condition variable was broken() will return broken_condition_variable exception.
+ +
+
+ +

◆ when() [2/6]

+ +
+
+
+template<typename Pred >
+requires std::is_invocable_r_v<bool, Pred>
+ + + + + +
+ + + + + + + + +
auto seastar::condition_variable::when (Pred && pred)
+
+inlinenoexcept
+
+

Coroutine/co_await only waiter. Waits until condition variable is notified and pred() == true, otherwise wait again.

+
Parameters
+ + +
predpredicate that checks that awaited condition is true
+
+
+
Returns
a future that becomes ready when signal() is called If the condition variable was broken(), may contain an exception.
+ +
+
+ +

◆ when() [3/6]

+ +
+
+
+template<typename Rep , typename Period >
+ + + + + +
+ + + + + + + + +
auto seastar::condition_variable::when (std::chrono::duration< Rep, Period > timeout)
+
+inlinenoexcept
+
+

Coroutine/co_await only waiter. Waits until condition variable is signaled or timeout is reached

+
Parameters
+ + +
timeoutduration after which wait will exit with a timeout
+
+
+
Returns
a future that becomes ready when signal() is called If the condition variable was broken() will return broken_condition_variable exception. If timepoint is passed will return condition_variable_timed_out exception.
+ +
+
+ +

◆ when() [4/6]

+ +
+
+
+template<typename Rep , typename Period , typename Pred >
+requires std::is_invocable_r_v<bool, Pred>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
auto seastar::condition_variable::when (std::chrono::duration< Rep, Period > timeout,
Pred && pred 
)
+
+inlinenoexcept
+
+

Coroutine/co_await only waiter. Waits until condition variable is notified and pred() == true or timeout is reached, otherwise wait again.

+
Parameters
+ + + +
timeoutduration after which wait will exit with a timeout
predpredicate that checks that awaited condition is true
+
+
+
Returns
a future that becomes ready when signal() is called If the condition variable was broken() will return broken_condition_variable exception. If timepoint is passed will return condition_variable_timed_out exception.
+ +
+
+ +

◆ when() [5/6]

+ +
+
+
+template<typename Clock = typename timer<>::clock, typename Duration = typename Clock::duration>
+ + + + + +
+ + + + + + + + +
timeout_awaiter< Clock, Duration > seastar::condition_variable::when (std::chrono::time_point< Clock, Duration > timeout)
+
+inlinenoexcept
+
+

Coroutine/co_await only waiter. Waits until condition variable is signaled or timeout is reached

+
Parameters
+ + +
timeouttime point at which wait will exit with a timeout
+
+
+
Returns
a future that becomes ready when signal() is called If the condition variable was broken() will return broken_condition_variable exception. If timepoint is reached will return condition_variable_timed_out exception.
+ +
+
+ +

◆ when() [6/6]

+ +
+
+
+template<typename Clock = typename timer<>::clock, typename Duration = typename Clock::duration, typename Pred >
+requires std::is_invocable_r_v<bool, Pred>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
auto seastar::condition_variable::when (std::chrono::time_point< Clock, Duration > timeout,
Pred && pred 
)
+
+inlinenoexcept
+
+

Coroutine/co_await only waiter. Waits until condition variable is notified and pred() == true or timeout is reached, otherwise wait again.

+
Parameters
+ + + +
timeouttime point at which wait will exit with a timeout
predpredicate that checks that awaited condition is true
+
+
+
Returns
a future that becomes ready when signal() is called If the condition variable was broken() will return broken_condition_variable exception. If timepoint is reached will return condition_variable_timed_out exception.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1condition__variable__timed__out-members.html b/master/classseastar_1_1condition__variable__timed__out-members.html new file mode 100644 index 000000000..a520db9a5 --- /dev/null +++ b/master/classseastar_1_1condition__variable__timed__out-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::condition_variable_timed_out Member List
+
+
+ +

This is the complete list of members for seastar::condition_variable_timed_out, including all inherited members.

+ + +
what() const noexceptseastar::condition_variable_timed_outvirtual
+ + + + diff --git a/master/classseastar_1_1condition__variable__timed__out.html b/master/classseastar_1_1condition__variable__timed__out.html new file mode 100644 index 000000000..6a9411872 --- /dev/null +++ b/master/classseastar_1_1condition__variable__timed__out.html @@ -0,0 +1,103 @@ + + + + + + + +Seastar: seastar::condition_variable_timed_out Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::condition_variable_timed_out Class Reference
+
+
+

Detailed Description

+

Exception thrown when wait() operation times out condition_variable::wait(time_point timeout).

+
+

#include <seastar/core/condition-variable.hh>

+
+Inheritance diagram for seastar::condition_variable_timed_out:
+
+
+ +
+ + + + + +

+Public Member Functions

+virtual const char * what () const noexcept
 Reports the exception reason.
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1condition__variable__timed__out.png b/master/classseastar_1_1condition__variable__timed__out.png new file mode 100644 index 0000000000000000000000000000000000000000..a84d2df25394667f9b8f16dc2961270b8b6903b9 GIT binary patch literal 696 zcmeAS@N?(olHy`uVBq!ia0vp^_klQogBeJ!I~X7gq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0+&x_!Ln;{G&b{4tSb@i-Ki=y9|KqdG z6l01swJ)x6i!+@4Na8T(u{}v?W*ZGWXN4V9_pB4Gne-(5@y~4)|2cN=sC%RQpJTpC zt&8)|H#>!2?@zk8S~d5|=E-v1*VC%La?MuZz35>#xk%gE=xLapk5+Wz>?F60iaNQU^Xhf)XMH|)U1#fBbIZ?sw_h}!Uvg*GpF6L-kN^Dr^Us~v z=}~WI|C+ffchldZIuX347g zXPaLC+9}>0!^xLFTYCxD&QkqX>4H0E{*ADooF8n@sCMQ1k2uqXcZ3_tUrCm{7XFPC iis!knp2>;&%lO~BJ#~tzO&BnlF?hQAxvX + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::connected_socket Member List
+
+
+ +

This is the complete list of members for seastar::connected_socket, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
connected_socket() noexceptseastar::connected_socket
connected_socket(connected_socket &&cs) noexceptseastar::connected_socket
get_keepalive() constseastar::connected_socket
get_keepalive_parameters() constseastar::connected_socket
get_nodelay() constseastar::connected_socket
get_sockopt(int level, int optname, void *data, size_t len) constseastar::connected_socket
input(connected_socket_input_stream_config csisc={})seastar::connected_socket
local_address() const noexceptseastar::connected_socket
operator bool() const noexceptseastar::connected_socketinlineexplicit
operator=(connected_socket &&cs) noexceptseastar::connected_socket
output(size_t buffer_size=8192)seastar::connected_socket
remote_address() const noexceptseastar::connected_socket
set_keepalive(bool keepalive)seastar::connected_socket
set_keepalive_parameters(const net::keepalive_params &p)seastar::connected_socket
set_nodelay(bool nodelay)seastar::connected_socket
set_sockopt(int level, int optname, const void *data, size_t len)seastar::connected_socket
shutdown_input()seastar::connected_socket
shutdown_output()seastar::connected_socket
wait_input_shutdown()seastar::connected_socket
~connected_socket() (defined in seastar::connected_socket)seastar::connected_socket
+ + + + diff --git a/master/classseastar_1_1connected__socket.html b/master/classseastar_1_1connected__socket.html new file mode 100644 index 000000000..3980127e5 --- /dev/null +++ b/master/classseastar_1_1connected__socket.html @@ -0,0 +1,411 @@ + + + + + + + +Seastar: seastar::connected_socket Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::connected_socket Class Reference
+
+
+

Detailed Description

+

A TCP (or other stream-based protocol) connection.

+

A connected_socket represents a full-duplex stream between two endpoints, a local endpoint and a remote endpoint.

+
+

#include <seastar/net/api.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

connected_socket () noexcept
 Constructs a connected_socket not corresponding to a connection.
 
connected_socket (connected_socket &&cs) noexcept
 Moves a connected_socket object.
 
+connected_socketoperator= (connected_socket &&cs) noexcept
 Move-assigns a connected_socket object.
 
input_stream< char > input (connected_socket_input_stream_config csisc={})
 
output_stream< char > output (size_t buffer_size=8192)
 
+void set_nodelay (bool nodelay)
 Sets the TCP_NODELAY option (disabling Nagle's algorithm)
 
bool get_nodelay () const
 
+void set_keepalive (bool keepalive)
 Sets SO_KEEPALIVE option (enable keepalive timer on a socket)
 
bool get_keepalive () const
 
+void set_keepalive_parameters (const net::keepalive_params &p)
 Sets TCP keepalive parameters.
 
+net::keepalive_params get_keepalive_parameters () const
 Get TCP keepalive parameters.
 
void set_sockopt (int level, int optname, const void *data, size_t len)
 
int get_sockopt (int level, int optname, void *data, size_t len) const
 
+socket_address local_address () const noexcept
 Local address of the socket.
 
+socket_address remote_address () const noexcept
 Remote address of the socket.
 
void shutdown_output ()
 
void shutdown_input ()
 
 operator bool () const noexcept
 
future wait_input_shutdown ()
 
+

Member Function Documentation

+ +

◆ get_keepalive()

+ +
+
+ + + + + + + +
bool seastar::connected_socket::get_keepalive () const
+
+

Gets O_KEEPALIVE option

Returns
whether the keepalive option is enabled or not
+ +
+
+ +

◆ get_nodelay()

+ +
+
+ + + + + + + +
bool seastar::connected_socket::get_nodelay () const
+
+

Gets the TCP_NODELAY option (Nagle's algorithm)

+
Returns
whether the nodelay option is enabled or not
+ +
+
+ +

◆ get_sockopt()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int seastar::connected_socket::get_sockopt (int level,
int optname,
void * data,
size_t len 
) const
+
+

Gets custom socket options. Based on getsockopt function. Linux users should refer to protocol-specific manuals to see available options, e.g. tcp(7), ip(7), etc.

+ +
+
+ +

◆ input()

+ +
+
+ + + + + + + + +
input_stream< char > seastar::connected_socket::input (connected_socket_input_stream_config csisc = {})
+
+

Gets the input stream.

+
Parameters
+ + +
csiscConfiguration for the input_stream returned
+
+
+

Gets an object returning data sent from the remote endpoint.

+ +
+
+ +

◆ operator bool()

+ +
+
+ + + + + +
+ + + + + + + +
seastar::connected_socket::operator bool () const
+
+inlineexplicitnoexcept
+
+

Check whether the connected_socket is initialized.

+
Returns
true if this connected_socket socket_address is bound initialized false otherwise.
+
See also
connect(socket_address sa)
+
+connect(socket_address sa, socket_address local, transport proto)
+ +
+
+ +

◆ output()

+ +
+
+ + + + + + + + +
output_stream< char > seastar::connected_socket::output (size_t buffer_size = 8192)
+
+

Gets the output stream.

+

Gets an object that sends data to the remote endpoint.

Parameters
+ + +
buffer_sizehow much data to buffer
+
+
+ +
+
+ +

◆ set_sockopt()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void seastar::connected_socket::set_sockopt (int level,
int optname,
const void * data,
size_t len 
)
+
+

Sets custom socket options. Based on setsockopt function. Linux users should refer to protocol-specific manuals to see available options, e.g. tcp(7), ip(7), etc.

+ +
+
+ +

◆ shutdown_input()

+ +
+
+ + + + + + + +
void seastar::connected_socket::shutdown_input ()
+
+

Disables input from the socket.

+

Current or future reads will immediately fail with an error. This is useful to abort operations on a socket that is not making progress due to a peer failure.

+ +
+
+ +

◆ shutdown_output()

+ +
+
+ + + + + + + +
void seastar::connected_socket::shutdown_output ()
+
+

Disables output to the socket.

+

Current or future writes that have not been successfully flushed will immediately fail with an error. This is useful to abort operations on a socket that is not making progress due to a peer failure.

+ +
+
+ +

◆ wait_input_shutdown()

+ +
+
+ + + + + + + +
future seastar::connected_socket::wait_input_shutdown ()
+
+

Waits for the peer of this socket to disconnect

+
Returns
future that resolves when the peer closes connection or shuts it down for writing or when local socket is called shutdown_input().
+

Note, that when the returned future is resolved for whatever reason socket may still be readable from, so the caller may want to wait for both events – this one and EOF from read.

+

Calling it several times per socket is not allowed (undefined behavior)

+
See also
poll(2) about POLLRDHUP for more details
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1consumption__result-members.html b/master/classseastar_1_1consumption__result-members.html new file mode 100644 index 000000000..0a872f79d --- /dev/null +++ b/master/classseastar_1_1consumption__result-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::consumption_result< CharType > Member List
+
+
+ +

This is the complete list of members for seastar::consumption_result< CharType >, including all inherited members.

+ + + + + + + + + + +
consumption_result(std::optional< tmp_buf > opt_buf) (defined in seastar::consumption_result< CharType >)seastar::consumption_result< CharType >inline
consumption_result(const continue_consuming &) (defined in seastar::consumption_result< CharType >)seastar::consumption_result< CharType >inline
consumption_result(stop_consuming_type &&stop) (defined in seastar::consumption_result< CharType >)seastar::consumption_result< CharType >inline
consumption_result(skip_bytes &&skip) (defined in seastar::consumption_result< CharType >)seastar::consumption_result< CharType >inline
consumption_variant typedef (defined in seastar::consumption_result< CharType >)seastar::consumption_result< CharType >
get() (defined in seastar::consumption_result< CharType >)seastar::consumption_result< CharType >inline
get() const (defined in seastar::consumption_result< CharType >)seastar::consumption_result< CharType >inline
stop_consuming_type typedef (defined in seastar::consumption_result< CharType >)seastar::consumption_result< CharType >
tmp_buf typedef (defined in seastar::consumption_result< CharType >)seastar::consumption_result< CharType >
+ + + + diff --git a/master/classseastar_1_1consumption__result.html b/master/classseastar_1_1consumption__result.html new file mode 100644 index 000000000..a75e0c73b --- /dev/null +++ b/master/classseastar_1_1consumption__result.html @@ -0,0 +1,120 @@ + + + + + + + +Seastar: seastar::consumption_result< CharType > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::consumption_result< CharType > Class Template Reference
+
+
+ + + + + + + + +

+Public Types

+using stop_consuming_type = stop_consuming< CharType >
 
+using consumption_variant = std::variant< continue_consuming, stop_consuming_type, skip_bytes >
 
+using tmp_buf = typename stop_consuming_type::tmp_buf
 
+ + + + + + + + + + + + + +

+Public Member Functions

consumption_result (std::optional< tmp_buf > opt_buf)
 
consumption_result (const continue_consuming &)
 
consumption_result (stop_consuming_type &&stop)
 
consumption_result (skip_bytes &&skip)
 
+consumption_variant & get ()
 
+const consumption_variant & get () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1all-members.html b/master/classseastar_1_1coroutine_1_1all-members.html new file mode 100644 index 000000000..78fa13405 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1all-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::coroutine::all< Futures > Member List
+
+
+ +

This is the complete list of members for seastar::coroutine::all< Futures >, including all inherited members.

+ + + +
all(Func &&... funcs) (defined in seastar::coroutine::all< Futures >)seastar::coroutine::all< Futures >inlineexplicit
operator co_await() (defined in seastar::coroutine::all< Futures >)seastar::coroutine::all< Futures >inline
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1all.html b/master/classseastar_1_1coroutine_1_1all.html new file mode 100644 index 000000000..a600caee6 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1all.html @@ -0,0 +1,124 @@ + + + + + + + +Seastar: seastar::coroutine::all< Futures > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::coroutine::all< Futures > Class Template Reference
+
+
+

Detailed Description

+
template<typename... Futures>
+requires (sizeof ...(Futures) > 0)
+class seastar::coroutine::all< Futures >

Wait for serveral futures to complete in a coroutine.

+

all can be used to launch several computations concurrently and wait for all of them to complete. Computations are provided as callable objects (typically lambda coroutines) that are invoked by all. Waiting is performend by co_await and returns a tuple of values, one for each non-void future.

+

If one or more of the function objects throws an exception, or if one or more of the futures resolves to an exception, then the exception is thrown. All of the futures are waited for, even in the case of exceptions. If more than one exception is present, an arbitrary one is thrown.

+

Example

+
future<int> add() {
+
auto [a, b] = co_await all(
+
[] () -> future<int> {
+
co_await sleep(1ms);
+
co_return 2;
+
},
+
[] () -> future<int> {
+
co_await sleep(1ms);
+
co_return 3;
+
}
+
);
+
co_return a + b;
+
};
+
Definition: all.hh:117
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
future sleep(std::chrono::duration< Rep, Period > dur)
Definition: sleep.hh:48
+

Safe for use with lambda coroutines.

+
+

#include <seastar/coroutine/all.hh>

+ + + + + + + +

+Public Member Functions

+template<typename... Func>
+requires (... && std::invocable<Func>) && (... && future_type<std::invoke_result_t<Func>>)
 all (Func &&... funcs)
 
+awaiter operator co_await ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1as__future-members.html b/master/classseastar_1_1coroutine_1_1as__future-members.html new file mode 100644 index 000000000..464fd4130 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1as__future-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::coroutine::as_future< T > Member List
+
+
+ +

This is the complete list of members for seastar::coroutine::as_future< T >, including all inherited members.

+ + +
as_future(seastar::future< T > &&f) noexcept (defined in seastar::coroutine::as_future< T >)seastar::coroutine::as_future< T >inlineexplicit
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1as__future.html b/master/classseastar_1_1coroutine_1_1as__future.html new file mode 100644 index 000000000..f877176f5 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1as__future.html @@ -0,0 +1,116 @@ + + + + + + + +Seastar: seastar::coroutine::as_future< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::coroutine::as_future< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename T = void>
+class seastar::coroutine::as_future< T >

co_await:s a future, returning it as result.

+

Similar to seastar::future::then_wrapped, coroutine::as_future waits for the future to resolve either to a ready future or to an exceptional one. It then returns it as the co_await result.

+

For example:

static future<bool> did_future_fail(future<> fut) {
+
auto f = co_await coroutine::as_future(std::move(fut));
+
if (f.failed()) {
+
mylog.warn("Future failed: {}", f.get_exception());
+
co_return true;
+
} else {
+
co_return false;
+
}
+
}
+
co_await:s a future, returning it as result.
Definition: as_future.hh:86
+ +

Note that by default, as_future checks for if the task quota is depleted, which means that it will yield if the future is ready and seastar::need_preempt() returns true. Use coroutine::as_future_without_preemption_check to disable preemption checking.

+
+

#include <seastar/coroutine/as_future.hh>

+
+Inheritance diagram for seastar::coroutine::as_future< T >:
+
+
+ +
+ + + + +

+Public Member Functions

as_future (seastar::future< T > &&f) noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1as__future.png b/master/classseastar_1_1coroutine_1_1as__future.png new file mode 100644 index 0000000000000000000000000000000000000000..c3cd2accc4ae9a3f1cfe7b24a34e0c1177e55bb0 GIT binary patch literal 988 zcmeAS@N?(olHy`uVBq!ia0y~yV3Y^412~w0r1*!%A|NFZ;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O0Ct93?@1!3;n}AaM0mh!Fz=bGE08V@L(#+qrl9Otd*%#mzV0|KGcR z)-Tqnv$D>s+*NnJWW82wfu3N#p|SSNnY^u@L7tP?wCpBLS^dK!Xx$@a&z)WUDo?8p zq-PZH-urc*ef#InXB2hq%=7eJ@AR_UZLX24tNT@G)LGx{|E~DsO}^sFkB9Hyv-y?Y z@%4k-{OuQ$Pb|GDda*yp?f%)rHMwuE?R{$YS+07I$@@o#+B(jDxVG!*=CuzZ8stA@ z8^8S3Yrnmb?QdD{VoR&t2mF`4F5gx8&v%7{;mr)6seS#?oA%#3r?94S!&ViiAOj)0 zyD<-c+Nj@hO57=79)bcGaR`sv;c>L$3xy&b3mzpW|&71GN_AK9jZo~JV$}fN2{rvLt z^T@xIHT#9^7XNx&oOt4d3a?2_)EfK5CdRMgul)bl&E>u)-+A$*>}L6Vj~WTS`K#~W zUH|vy4ej09DsO*3{a$gjulP8-j?abJvS0r^{H^L)@38*eH`$tNQIe~ds+3k`seAH& zE!wbun*F3NU7$e52=%BRGiFXbbHa;G)a1$^KYnISN}8DnTL6>9iXRM5fUelt#qY2V=!Vzf zKhLyA?TIUlnKxzmWm$iL1550h`42c-zE~XpP$?K`_#Jq275kANyy1p-M_Z$?GE1KAJwuB7Z>O=&dUNu z`*MAS@clOh67~v-6}sk@di|)V{C#1bf=TWEzEkD@=B~D$9bDt&`1N4@v&~WF0<-S9 z7@b*iw{(Tx%H6EzpZOnubntJH+528j-2^|OCHmZ^4ozt;Zm@6vTe z^)9pCn!OLNm~M7GAXECf@{ao-OyAtw;9t3);a|@`^O|d~tjpaQ(n5bSPgso_03a?b cmVU8IO<3wZx4G5@m=zg3UHx3vIVCg!0CHyEO#lD@ literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1coroutine_1_1as__future__without__preemption__check-members.html b/master/classseastar_1_1coroutine_1_1as__future__without__preemption__check-members.html new file mode 100644 index 000000000..eb911b3a2 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1as__future__without__preemption__check-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::coroutine::as_future_without_preemption_check< T > Member List
+
+
+ +

This is the complete list of members for seastar::coroutine::as_future_without_preemption_check< T >, including all inherited members.

+ + +
as_future_without_preemption_check(seastar::future< T > &&f) noexcept (defined in seastar::coroutine::as_future_without_preemption_check< T >)seastar::coroutine::as_future_without_preemption_check< T >inlineexplicit
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1as__future__without__preemption__check.html b/master/classseastar_1_1coroutine_1_1as__future__without__preemption__check.html new file mode 100644 index 000000000..70da99ce5 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1as__future__without__preemption__check.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: seastar::coroutine::as_future_without_preemption_check< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::coroutine::as_future_without_preemption_check< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename T = void>
+class seastar::coroutine::as_future_without_preemption_check< T >

co_await:s a future, returning it as result, without checking if preemption is needed.

+

Like coroutine::as_future, co_await-ing as_future_without_preemption_check returns the input future as the co_await result. However, it bypasses checking if the task quota is depleted, which means that a ready future will be handled immediately.

+
+

#include <seastar/coroutine/as_future.hh>

+
+Inheritance diagram for seastar::coroutine::as_future_without_preemption_check< T >:
+
+
+ +
+ + + + +

+Public Member Functions

as_future_without_preemption_check (seastar::future< T > &&f) noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1as__future__without__preemption__check.png b/master/classseastar_1_1coroutine_1_1as__future__without__preemption__check.png new file mode 100644 index 0000000000000000000000000000000000000000..a669b573e76972c454069bee68fbbb7ab374a3bf GIT binary patch literal 1179 zcmeAS@N?(olHy`uVBq!ia0y~yU`zwD12~w0r0g1f1t296;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z@p{p;uuoF_;&8aSxYo{TL0hqQu*Kf z-mD-K#w}OgemQq$+3s`86F8ozw?v;g z`uR(i=bLYT`*~6;KKWeR-LieNY@@uyo^{V(Usto^)a1nex$4PrW%qX-|8?uuZKZoF zO@8nBvQ2OLm)-97H%t7j%6;~J`_-x~F==tN=chkgc3WKV&?gu6%`s=Z6?FOTKXf+9 z{D0Q|d!O1{yHhu1nqzOU&HOh1@s9k*4{8dk1>Qb;!1g|R#@$CXFN;mJTkI4|9z0wy zLoPw?8CRr0P5I$Nk&>65OFb)KP<`3;POSI($D8w_=V!|&l+AzK5ug-vsrJyGsP>KL z&TRj_GkGB=b8^YKjD2mp7v#q_Du#b!c@dm8@2v9n340GdUYavc!&Z*-t_U!ubX?{TYTr(AX#?ttNA4DzT{Khm)P%WNlp5)|H5|TpSp(o z^A~Zae_AzH+il7*MHA;HhA53Y@We}t&al!CmMcvSI%Bt@b{Hju=&GFKl8Ts&kKF? z=8lh$)Pn15dG@Uj1$RwX_2s$UUYL`A*PN}6JAC0Slh0?d3FEadCU81-}zU!a;u|N9)cUiM6xE{JY;( literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1coroutine_1_1experimental_1_1generator.html b/master/classseastar_1_1coroutine_1_1experimental_1_1generator.html new file mode 100644 index 000000000..c4cb5383f --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1experimental_1_1generator.html @@ -0,0 +1,82 @@ + + + + + + + +Seastar: seastar::coroutine::experimental::generator< T, Container > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::coroutine::experimental::generator< T, Container > Class Template Reference
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__buffered__promise-members.html b/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__buffered__promise-members.html new file mode 100644 index 000000000..d9c4bd622 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__buffered__promise-members.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container > Member List
+
+
+ +

This is the complete list of members for seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
_sg (defined in seastar::task)seastar::taskprotected
coroutine() const noexcept (defined in seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >)seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >inline
final_suspend() const noexcept (defined in seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >)seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >inline
generator_buffered_promise(buffer_size_t buffer_capacity, Args &&... args) (defined in seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >)seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >inline
generator_buffered_promise(generator_buffered_promise &&)=delete (defined in seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >)seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >
generator_buffered_promise(const generator_buffered_promise &)=delete (defined in seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >)seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >
get_backtrace() const (defined in seastar::task)seastar::taskinline
get_return_object() noexcept -> generator_type (defined in seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >)seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >
group() const (defined in seastar::task)seastar::taskinline
initial_suspend() const noexcept (defined in seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >)seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >inline
is_awaiting() const noexcept (defined in seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >)seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >inline
make_backtrace() noexcept (defined in seastar::task)seastar::taskinline
on_reclaim_free_space() noexcept (defined in seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >)seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >inline
return_void() noexcept (defined in seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >)seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >inline
set_generator(generator_type *g) noexcept (defined in seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >)seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >inline
set_scheduling_group(scheduling_group new_sg) noexcept (defined in seastar::task)seastar::taskinlineprotected
task(scheduling_group sg=current_scheduling_group()) noexcept (defined in seastar::task)seastar::taskinlineexplicit
unhandled_exception() noexcept (defined in seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >)seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >
wait_for_next_value() noexcept (defined in seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >)seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >inline
yield_value(U &&value) noexcept (defined in seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >)seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >inline
~generator_buffered_promise()=default (defined in seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >)seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >
~task()=default (defined in seastar::task)seastar::taskprotected
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__buffered__promise.html b/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__buffered__promise.html new file mode 100644 index 000000000..7333c3312 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__buffered__promise.html @@ -0,0 +1,165 @@ + + + + + + + +Seastar: seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container > Class Template Reference
+
+
+
+Inheritance diagram for seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container >:
+
+
+ + +seastar::task + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+template<typename... Args>
 generator_buffered_promise (buffer_size_t buffer_capacity, Args &&... args)
 
generator_buffered_promise (generator_buffered_promise &&)=delete
 
generator_buffered_promise (const generator_buffered_promise &)=delete
 
+void return_void () noexcept
 
+void unhandled_exception () noexcept
 
+template<std::convertible_to< T > U>
yield_awaiter< T, Container > yield_value (U &&value) noexcept
 
+auto get_return_object () noexcept -> generator_type
 
+void set_generator (generator_type *g) noexcept
 
+suspend_always initial_suspend () const noexcept
 
+suspend_never final_suspend () const noexcept
 
+bool is_awaiting () const noexcept
 
+coroutine_handle coroutine () const noexcept
 
+seastar::future wait_for_next_value () noexcept
 
+void on_reclaim_free_space () noexcept
 
+scheduling_group group () const
 
+shared_backtrace get_backtrace () const
 
+void make_backtrace () noexcept
 
+ + + +

+Protected Member Functions

+scheduling_group set_scheduling_group (scheduling_group new_sg) noexcept
 
+ + + +

+Protected Attributes

+scheduling_group _sg
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__buffered__promise.png b/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__buffered__promise.png new file mode 100644 index 0000000000000000000000000000000000000000..98df811f025bdde60587e2a2b3ea515981a8b625 GIT binary patch literal 1143 zcmeAS@N?(olHy`uVBq!ia0y~yVEhbZ2XHV0Nh`gaULYkA;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z{2L~;uuoF_;&8gpu+|{Y}ez{D*n4K z%hWsR?$M~}tfJ;E9d37h+J7V8%Ts(Vo3u81P7?Cuak{wI^`Bj5T?|+Gts`>M?%UIC>VL1D zGv8PyyrcZ_R?c1dMfX*F!dwI#*zjrOm9bd*w`X_sQZq1LiMb)y|O-9?jFYSMH ztM*>uyC#*Fd3S8LpZ{6)dxmLVW_7i_$?QXA?jDzNca-K$U*a-J2B|NL;dX(6F-$vT{%XvE)t#TRA8IStge(9CUy*O)-u%e_kaHR)<^OH|4Q@7?RUeit>)-UXWVuFef(ExwK@A4cDwUm zKmR`T=Wpee*cmH#g=gQ2T$L-BJ^QN18_WEi1jHCRbYjtoynw>gs1Z=lgTlbISDZzUX$^NMcX+mx6bfuhuEf zZb&m=T_N!!mo2B?XL;{Ixf12qB_53K()aVP^KHz1yT*()>()`LnG55q%5Uv2xEDF? z;FLLa^KZ*bCjKvpnkDjc*5|GNrcGaU%r|nclK0NsUppkDp6{FLShGCVdhg%qug~Rf zU-vNk+}lgxKmTs}Ty-VSYieoz+b!u;CV#J=uUwubeIa_{t{;EqgfD(|r2O{VE7dRO zZ1?=c`n*oyzUA}7tX8(qufO|z@XhO+F(=-ho|(07{`#Wd)6cbAf9SA3`}X-cU#6x* z6Asqeop}pXmU~gp>ig<@JI`M~WXf)T`OLhMzVhilIeS*`4*U9Y{iwo1=YT3`Y zZKBAA{=XZ~zBQ|pou0pa=Fwf^zAyJhm34hRGTU{ZPu? zvFZW4vJ8gz&-AP6tLNLl{V<(f=4|EEHH>-&^6T#zvREXp{&v{&-#4jN>*x0a*gq)$ zE9+#Gsedb@z*r&wQbs`x8S_71I%U$7ATJR+Ms}{O@JH-kQ-GxegQu&X%Q~loCIFWs BHbVda literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__unbuffered__promise-members.html b/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__unbuffered__promise-members.html new file mode 100644 index 000000000..84aa4b700 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__unbuffered__promise-members.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::coroutine::experimental::internal::generator_unbuffered_promise< T > Member List
+
+
+ +

This is the complete list of members for seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
_sg (defined in seastar::task)seastar::taskprotected
final_suspend() const noexcept (defined in seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >)seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >inline
generator_unbuffered_promise()=default (defined in seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >)seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >
generator_unbuffered_promise(generator_unbuffered_promise &&)=delete (defined in seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >)seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >
generator_unbuffered_promise(const generator_unbuffered_promise &)=delete (defined in seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >)seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >
get_backtrace() const (defined in seastar::task)seastar::taskinline
get_return_object() noexcept (defined in seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >)seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >
group() const (defined in seastar::task)seastar::taskinline
initial_suspend() const noexcept (defined in seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >)seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >inline
make_backtrace() noexcept (defined in seastar::task)seastar::taskinline
return_void() noexcept (defined in seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >)seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >
run_and_dispose() noexcept final (defined in seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >)seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >inlinevirtual
set_generator(generator_type *g) noexcept (defined in seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >)seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >inline
set_scheduling_group(scheduling_group new_sg) noexcept (defined in seastar::task)seastar::taskinlineprotected
task(scheduling_group sg=current_scheduling_group()) noexcept (defined in seastar::task)seastar::taskinlineexplicit
unhandled_exception() noexcept (defined in seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >)seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >
wait_for_next_value() noexcept (defined in seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >)seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >inline
waiting_task() noexcept finalseastar::coroutine::experimental::internal::generator_unbuffered_promise< T >inlinevirtual
yield_value(U &&value) noexcept (defined in seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >)seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >inline
~task()=default (defined in seastar::task)seastar::taskprotected
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__unbuffered__promise.html b/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__unbuffered__promise.html new file mode 100644 index 000000000..db4eb33c4 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__unbuffered__promise.html @@ -0,0 +1,218 @@ + + + + + + + +Seastar: seastar::coroutine::experimental::internal::generator_unbuffered_promise< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::coroutine::experimental::internal::generator_unbuffered_promise< T > Class Template Referencefinal
+
+
+
+Inheritance diagram for seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >:
+
+
+ + +seastar::task + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

generator_unbuffered_promise (generator_unbuffered_promise &&)=delete
 
generator_unbuffered_promise (const generator_unbuffered_promise &)=delete
 
+void return_void () noexcept
 
+void unhandled_exception () noexcept
 
+template<std::convertible_to< T > U>
suspend_always yield_value (U &&value) noexcept
 
+generator_type get_return_object () noexcept
 
+void set_generator (generator_type *g) noexcept
 
+suspend_always initial_suspend () const noexcept
 
+suspend_never final_suspend () const noexcept
 
+seastar::future wait_for_next_value () noexcept
 
void run_and_dispose () noexcept final
 
seastar::taskwaiting_task () noexcept final
 Returns the next task which is waiting for this task to complete execution, or nullptr. More...
 
+scheduling_group group () const
 
+shared_backtrace get_backtrace () const
 
+void make_backtrace () noexcept
 
+ + + +

+Protected Member Functions

+scheduling_group set_scheduling_group (scheduling_group new_sg) noexcept
 
+ + + +

+Protected Attributes

+scheduling_group _sg
 
+

Member Function Documentation

+ +

◆ run_and_dispose()

+ +
+
+
+template<NothrowMoveConstructible T>
+ + + + + +
+ + + + + + + +
void seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >::run_and_dispose ()
+
+inlinefinalvirtualnoexcept
+
+ +

Implements seastar::task.

+ +
+
+ +

◆ waiting_task()

+ +
+
+
+template<NothrowMoveConstructible T>
+ + + + + +
+ + + + + + + +
seastar::task * seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >::waiting_task ()
+
+inlinefinalvirtualnoexcept
+
+ +

Returns the next task which is waiting for this task to complete execution, or nullptr.

+ +

Implements seastar::task.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__unbuffered__promise.png b/master/classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__unbuffered__promise.png new file mode 100644 index 0000000000000000000000000000000000000000..f3a2237236aadeb7271588d51c7b114f6e3de7de GIT binary patch literal 1073 zcmeAS@N?(olHy`uVBq!ia0y~yU_1z92XHV0$uJGO4j?5F;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z?&gvX@6xhg0B*VD0%NJmdMk+2h}uqye>_*Jh$m^*mT$55yB#oA(Qr< z*jikWw1IPy%JMrvwZ_RiZI(`9i9FSA^10xPw&%Sa&SF!S?4NF+;W>{J=!Tit8I=-e zET1bppHs_JkX^^X#IU@@k>U8CKP^rS`#~%lmNqAb?LgN37JG*CK$@ob&iw>0O;*jN zPegVA;CL_-8FRDU5B{^_>$6)C;nw%A>^`a7FfYFRsaLC>nr-`@HRWsB)dMqs zGiUtJ=Vkg6=vP{M`@!ZCHHHVy%W`Gd%=hkoT6Htu`=-u6vkzOJ$96c(%)}OjnIt~-xqh~tb#Huq?WL&n0>d5Cwrxz~ z^?y*-F_@wVQxKZ}(N*sDn!e!tt$csnM# zYSMv!Z%!L_-}^+fNuCVmo|FPusB8LCw z_ka8w)>3!PC{xWt~$(698eF|1tmo literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1coroutine_1_1lambda-members.html b/master/classseastar_1_1coroutine_1_1lambda-members.html new file mode 100644 index 000000000..d773bb7e3 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1lambda-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::coroutine::lambda< Func > Member List
+
+
+ +

This is the complete list of members for seastar::coroutine::lambda< Func >, including all inherited members.

+ + + +
lambda(Func &&func)seastar::coroutine::lambda< Func >inlineexplicit
operator()(Args &&... args) constseastar::coroutine::lambda< Func >inline
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1lambda.html b/master/classseastar_1_1coroutine_1_1lambda.html new file mode 100644 index 000000000..eb863c004 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1lambda.html @@ -0,0 +1,150 @@ + + + + + + + +Seastar: seastar::coroutine::lambda< Func > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::coroutine::lambda< Func > Class Template Reference
+
+
+

Detailed Description

+
template<typename Func>
+class seastar::coroutine::lambda< Func >

Make a lambda coroutine safe for use in an outer coroutine with functions that accept continuations.

+

A lambda coroutine is not a safe parameter to a function that expects a regular Seastar continuation.

+

To use, wrap the lambda coroutine in seastar::coroutine::lambda(). The lambda coroutine must complete (co_await) in the same statement.

+

Example::

// `future::then()` expects a continuation, so not safe for lambda
+
// coroutines without seastar::coroutine::lambda.
+ + +
// use of `captures` here can break without seastar::coroutine::lambda.
+
}));
+
Definition: coroutine.hh:223
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Result then(Func &&func) noexcept
Schedule a block of code to run when the future is ready.
Definition: future.hh:1425
+
future maybe_yield() noexcept
Definition: later.hh:57
+
future yield() noexcept
Returns a future which is not ready but is scheduled to resolve soon.
+
Template Parameters
+ + +
Functype of function object (typically inferred)
+
+
+
+

#include <seastar/core/coroutine.hh>

+ + + + + + + + +

+Public Member Functions

 lambda (Func &&func)
 
+template<typename... Args>
decltype(auto) operator() (Args &&... args) const
 Calls the lambda coroutine object. Normally invoked by Seastar.
 
+

Constructor & Destructor Documentation

+ +

◆ lambda()

+ +
+
+
+template<typename Func >
+ + + + + +
+ + + + + + + + +
seastar::coroutine::lambda< Func >::lambda (Func && func)
+
+inlineexplicit
+
+

Create a lambda coroutine wrapper from a function object, to be passed to a Seastar function that accepts a continuation.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1maybe__yield-members.html b/master/classseastar_1_1coroutine_1_1maybe__yield-members.html new file mode 100644 index 000000000..9ac624c17 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1maybe__yield-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::coroutine::maybe_yield Member List
+
+
+ +

This is the complete list of members for seastar::coroutine::maybe_yield, including all inherited members.

+ + +
operator co_await() (defined in seastar::coroutine::maybe_yield)seastar::coroutine::maybe_yieldinline
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1maybe__yield.html b/master/classseastar_1_1coroutine_1_1maybe__yield.html new file mode 100644 index 000000000..41bb07d18 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1maybe__yield.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: seastar::coroutine::maybe_yield Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::coroutine::maybe_yield Class Reference
+
+
+

Detailed Description

+

Preempt if the current task quota expired.

+

maybe_yield() can be used to break a long computation in a coroutine and allow the reactor to preempt its execution. This allows other tasks to gain access to the CPU. If the task quota did not expire, the coroutine continues execution.

+

It should be used in long loops that do not contain other co_await calls.

+

Example

+
seastar::future<int> long_loop(int n) {
+
float acc = 0;
+
for (int i = 0; i < n; ++i) {
+
acc += std::sin(float(i));
+ +
}
+
co_return acc;
+
}
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
future maybe_yield() noexcept
Definition: later.hh:57
+
+

#include <seastar/coroutine/maybe_yield.hh>

+ + + + +

+Public Member Functions

+auto operator co_await ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1parallel__for__each-members.html b/master/classseastar_1_1coroutine_1_1parallel__for__each-members.html new file mode 100644 index 000000000..3a3608217 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1parallel__for__each-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::coroutine::parallel_for_each< Func > Member List
+
+
+ +

This is the complete list of members for seastar::coroutine::parallel_for_each< Func >, including all inherited members.

+ + + + + + + + +
await_ready() const noexcept (defined in seastar::coroutine::parallel_for_each< Func >)seastar::coroutine::parallel_for_each< Func >inline
await_resume() const (defined in seastar::coroutine::parallel_for_each< Func >)seastar::coroutine::parallel_for_each< Func >inline
await_suspend(std::coroutine_handle< T > h) (defined in seastar::coroutine::parallel_for_each< Func >)seastar::coroutine::parallel_for_each< Func >inline
parallel_for_each(Iterator begin, Sentinel end, Func1 &&func) noexcept (defined in seastar::coroutine::parallel_for_each< Func >)seastar::coroutine::parallel_for_each< Func >inlineexplicit
parallel_for_each(Range &&range, Func1 &&func) noexcept (defined in seastar::coroutine::parallel_for_each< Func >)seastar::coroutine::parallel_for_each< Func >inlineexplicit
run_and_dispose() noexcept override (defined in seastar::coroutine::parallel_for_each< Func >)seastar::coroutine::parallel_for_each< Func >inlinevirtual
waiting_task() noexcept override (defined in seastar::coroutine::parallel_for_each< Func >)seastar::coroutine::parallel_for_each< Func >inlinevirtual
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1parallel__for__each.html b/master/classseastar_1_1coroutine_1_1parallel__for__each.html new file mode 100644 index 000000000..a680b6967 --- /dev/null +++ b/master/classseastar_1_1coroutine_1_1parallel__for__each.html @@ -0,0 +1,140 @@ + + + + + + + +Seastar: seastar::coroutine::parallel_for_each< Func > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::coroutine::parallel_for_each< Func > Class Template Referencefinal
+
+
+

Detailed Description

+
template<typename Func>
+class seastar::coroutine::parallel_for_each< Func >

Invoke a function on all elements in a range in parallel and wait for all futures to complete in a coroutine.

+

parallel_for_each can be used to launch a function concurrently on all elements in a given range and wait for all of them to complete. Waiting is performend by co_await and returns a future.

+

If one or more of the function invocations resolve to an exception then the one of the exceptions is re-thrown. All of the futures are waited for, even in the case of exceptions.

+

Example

+
future<int> sum_of_squares(std::vector<int> v) {
+
int sum = 0;
+
return co_await parallel_for_each(v, [&sum] (int& x) {
+
sum += x * x;
+
});
+
co_return sum;
+
};
+
Definition: parallel_for_each.hh:63
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+

Safe for use with lambda coroutines.

+
Note
parallel_for_each() schedules all invocations of func on the current shard. If you want to run a function on all shards in parallel, have a look at smp::invoke_on_all() instead.
+
+

#include <seastar/coroutine/parallel_for_each.hh>

+
+Inheritance diagram for seastar::coroutine::parallel_for_each< Func >:
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+template<typename Iterator , typename Sentinel , typename Func1 >
+requires (std::same_as<Sentinel, Iterator> || std::sentinel_for<Sentinel, Iterator>) && std::same_as<future<>, futurize_t<std::invoke_result_t<Func, typename std::iterator_traits<Iterator>::reference>>>
 parallel_for_each (Iterator begin, Sentinel end, Func1 &&func) noexcept
 
+template<std::ranges::range Range, typename Func1 >
+requires std::invocable<Func, std::ranges::range_reference_t<Range>>
 parallel_for_each (Range &&range, Func1 &&func) noexcept
 
+bool await_ready () const noexcept
 
+template<typename T >
void await_suspend (std::coroutine_handle< T > h)
 
+void await_resume () const
 
+virtual void run_and_dispose () noexcept override
 
+virtual taskwaiting_task () noexcept override
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1coroutine_1_1parallel__for__each.png b/master/classseastar_1_1coroutine_1_1parallel__for__each.png new file mode 100644 index 0000000000000000000000000000000000000000..626811aea72f8bdebb8e10b0349257af493eef0d GIT binary patch literal 844 zcmeAS@N?(olHy`uVBq!ia0y~yVB`m~12~w0q(L0REFdKj;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z;xTw#WAFU@$KB(eM_taSPozE`1!wn zkIaE(IpW-VFW3An3VE%dZh8SP61o+)Y`iLTIb zp40p3yZ@vwaeKSlRZ@R#2QsB>=N>O=k#~(e^|tQo!GC$-Kdyw@R~%XQi`}!TbKcqH z_*~tt5|`btyH{2zS4VBEtF@aQ{$a*O6@|Vh6YIF#x+0$$TtDbDY2LE=k2hNUm+N2q zXy46i?Rnw0mH+IIK0ag>EdMw1%j!RcJ73IF*Q@v=|LJ(ezAInLrI*TTuKxP?=cV6| zU#!yow|%buq%X6-Hria9^D{}>BS`DFa}dYp2_lDVR9X%AJr&PDxJeHKfxg?zVCNXm zFs+i|%&%WY0-qT?wmvWbQX3fbQp*`47-qiVXW&+t{FgC-F=dlIgHD6bH}(eB2`B#n zRT$lrXApBx`^|iS=|oCBR>ks<`-8kT-g0H!u*&)jv&A8s27zacEe8AwM|kD_v*l!d zEjYZ+H)C%~ZG*K}*1P9y2e!tYWPYGH_d~^!)jjM7Vr6a2TC7ioz1jZt=Zl&ZJJzM{ zy}xDtlmB;HvPw^UUY33F7pL-B;~CGQ+}V=0uwD~+f?_43bW z72Upk{EYs|fWvi}x!D(Yy|?|N(LdwjCcEvwU(NqjaB%VLZ1aVA+CINkeZN&t&a+qh zpZnpP`Jci^pBHA@w|m!rxjXm$YHhjA_V1qd&+h*9yKd(18io2fg>&6beL6npncwH* zHT&MYy{%~c#Z*S$X=-!DfKd%9k OK7*&LpUXO@geCxeo0)L{ literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1data__sink-members.html b/master/classseastar_1_1data__sink-members.html new file mode 100644 index 000000000..66451ffda --- /dev/null +++ b/master/classseastar_1_1data__sink-members.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::data_sink Member List
+
+
+ +

This is the complete list of members for seastar::data_sink, including all inherited members.

+ + + + + + + + + + + + + + +
allocate_buffer(size_t size) (defined in seastar::data_sink)seastar::data_sinkinline
buffer_size() const noexcept (defined in seastar::data_sink)seastar::data_sinkinline
can_batch_flushes() const noexcept (defined in seastar::data_sink)seastar::data_sinkinline
close() noexcept (defined in seastar::data_sink)seastar::data_sinkinline
data_sink() noexcept=default (defined in seastar::data_sink)seastar::data_sink
data_sink(std::unique_ptr< data_sink_impl > dsi) noexcept (defined in seastar::data_sink)seastar::data_sinkinlineexplicit
data_sink(data_sink &&x) noexcept=default (defined in seastar::data_sink)seastar::data_sink
flush() noexcept (defined in seastar::data_sink)seastar::data_sinkinline
on_batch_flush_error() noexcept (defined in seastar::data_sink)seastar::data_sinkinline
operator=(data_sink &&x) noexcept=default (defined in seastar::data_sink)seastar::data_sink
put(std::vector< temporary_buffer< char > > data) noexcept (defined in seastar::data_sink)seastar::data_sinkinline
put(temporary_buffer< char > data) noexcept (defined in seastar::data_sink)seastar::data_sinkinline
put(net::packet p) noexcept (defined in seastar::data_sink)seastar::data_sinkinline
+ + + + diff --git a/master/classseastar_1_1data__sink.html b/master/classseastar_1_1data__sink.html new file mode 100644 index 000000000..2a5c5d667 --- /dev/null +++ b/master/classseastar_1_1data__sink.html @@ -0,0 +1,125 @@ + + + + + + + +Seastar: seastar::data_sink Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::data_sink Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

data_sink (std::unique_ptr< data_sink_impl > dsi) noexcept
 
data_sink (data_sink &&x) noexcept=default
 
+data_sinkoperator= (data_sink &&x) noexcept=default
 
+temporary_buffer< char > allocate_buffer (size_t size)
 
+future put (std::vector< temporary_buffer< char > > data) noexcept
 
+future put (temporary_buffer< char > data) noexcept
 
+future put (net::packet p) noexcept
 
+future flush () noexcept
 
+future close () noexcept
 
+size_t buffer_size () const noexcept
 
+bool can_batch_flushes () const noexcept
 
+void on_batch_flush_error () noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1data__sink__impl-members.html b/master/classseastar_1_1data__sink__impl-members.html new file mode 100644 index 000000000..0df5c491f --- /dev/null +++ b/master/classseastar_1_1data__sink__impl-members.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::data_sink_impl Member List
+
+
+ +

This is the complete list of members for seastar::data_sink_impl, including all inherited members.

+ + + + + + + + + + + +
allocate_buffer(size_t size) (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
buffer_size() const noexcept (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
can_batch_flushes() const noexcept (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
close()=0 (defined in seastar::data_sink_impl)seastar::data_sink_implpure virtual
flush() (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
on_batch_flush_error() noexcept (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
put(net::packet data)=0 (defined in seastar::data_sink_impl)seastar::data_sink_implpure virtual
put(std::vector< temporary_buffer< char > > data) (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
put(temporary_buffer< char > buf) (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
~data_sink_impl() (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
+ + + + diff --git a/master/classseastar_1_1data__sink__impl.html b/master/classseastar_1_1data__sink__impl.html new file mode 100644 index 000000000..a7433a3e6 --- /dev/null +++ b/master/classseastar_1_1data__sink__impl.html @@ -0,0 +1,126 @@ + + + + + + + +Seastar: seastar::data_sink_impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::data_sink_impl Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::data_sink_impl:
+
+
+ + +seastar::net::posix_data_sink_impl +seastar::vector_data_sink + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual temporary_buffer< char > allocate_buffer (size_t size)
 
+virtual future put (net::packet data)=0
 
+virtual future put (std::vector< temporary_buffer< char > > data)
 
+virtual future put (temporary_buffer< char > buf)
 
+virtual future flush ()
 
+virtual future close ()=0
 
+virtual size_t buffer_size () const noexcept
 
+virtual bool can_batch_flushes () const noexcept
 
+virtual void on_batch_flush_error () noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1data__sink__impl.png b/master/classseastar_1_1data__sink__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..36ccf96eb15ab4194c1e2da43ac6b07da0d120b7 GIT binary patch literal 1063 zcmeAS@N?(olHy`uVBq!ia0y~yV4MYH2XHV0N%1?*=0Hj!z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-opB*|`(^4!C`B z_Mef}aP;GzS;yxqTxIy8@qNXkf45#%*!q{|?wEUiukMj^W!a|b&kEl)xA$$7Pnf@d zRa!;pGgGk*?!t-EwF~NhtDUfroz1@ea}UGsKZ&M~e{at(FMR7YgFhzJ;&I-_MGIyq zUuAe>C^GH#`oFU`nZ&NY!XvAe5_%zs*P)-iII8a7x5M*YDopn_ZCf{C-GZgF%HNyj z?XO5!AIXxl;^bbog!v1fZCO?FTl)2dzi+o@C+9_QIJa}Y6fyZN!g}VRma0R$ear<0 zyR#GBy-gX;7sXm_mp?FT?YR(Ufk`3EAHJgcyJ5ndAYaX;a~K*}9temxuqa5aWK&R@ z?!AkV!($a=$BC;xyBIs%S21#Ubun^y0%-!+;?UEgopX2^j0^VlTV7>oQ6U3AQI@?`Ai9x=N+p0=G#v?DIY>Z+IV6{Ge>}tfGG1ckAc&UBBFNeY53;ufLv|rAw#G ztIC+!e(v$v1%>N=&pi3uZpYc%zxY>L&PqSLe0NukroQJVpR6_y<7FP-GRo&h)%>a3 zT))@u*#5sqW7L`#R#vb-i(|hcbM`WOp36Q(pyCMAXUZGHo@Z~5o8EsXw@fnUUUDes z8I^8*f30T~erHctMwz}p={?D2-GbQZ55DAIdr-2s>dC^zi;wliFE`-N-Mn7xU;YZq z8R@@wOs{;mx>5~j>8 zdsI#q7p(ueaY61o)7-;0QIo|PrL*b^*MAhbmx+7CN{3LbOa%H{2=f4pe-{q?c= zInBB$mp05v`}OXPv!CmtquXy`3UW7D^Sd6!phI(*DS|Km@f#$@hUDtk}( ze+`~=@93vEcCJ|}wT$v1#rM5_&%U4cJuF?sbo~=mPun6;?A%-9Ht8S#O1DW)ld@Da pRp5-}A;H;e)eo!yMyv1#euFO|XEeOboPoKT!PC{xWt~$(69C3L@P7aR literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1data__source-members.html b/master/classseastar_1_1data__source-members.html new file mode 100644 index 000000000..f702b8850 --- /dev/null +++ b/master/classseastar_1_1data__source-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::data_source Member List
+
+
+ +

This is the complete list of members for seastar::data_source, including all inherited members.

+ + + + + + + + + + +
close() noexcept (defined in seastar::data_source)seastar::data_sourceinline
data_source() noexcept=default (defined in seastar::data_source)seastar::data_source
data_source(std::unique_ptr< data_source_impl > dsi) noexcept (defined in seastar::data_source)seastar::data_sourceinlineexplicit
data_source(data_source &&x) noexcept=default (defined in seastar::data_source)seastar::data_source
get() noexcept (defined in seastar::data_source)seastar::data_sourceinline
impl() const (defined in seastar::data_source)seastar::data_sourceinlineprotected
operator=(data_source &&x) noexcept=default (defined in seastar::data_source)seastar::data_source
skip(uint64_t n) noexcept (defined in seastar::data_source)seastar::data_sourceinline
tmp_buf typedef (defined in seastar::data_source)seastar::data_source
+ + + + diff --git a/master/classseastar_1_1data__source.html b/master/classseastar_1_1data__source.html new file mode 100644 index 000000000..afaa57fe0 --- /dev/null +++ b/master/classseastar_1_1data__source.html @@ -0,0 +1,121 @@ + + + + + + + +Seastar: seastar::data_source Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::data_source Class Reference
+
+
+ + + + +

+Public Types

+using tmp_buf = temporary_buffer< char >
 
+ + + + + + + + + + + + + +

+Public Member Functions

data_source (std::unique_ptr< data_source_impl > dsi) noexcept
 
data_source (data_source &&x) noexcept=default
 
+data_sourceoperator= (data_source &&x) noexcept=default
 
+future< tmp_bufget () noexcept
 
+future< tmp_bufskip (uint64_t n) noexcept
 
+future close () noexcept
 
+ + + +

+Protected Member Functions

+data_source_implimpl () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1data__source__impl-members.html b/master/classseastar_1_1data__source__impl-members.html new file mode 100644 index 000000000..48deb6311 --- /dev/null +++ b/master/classseastar_1_1data__source__impl-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::data_source_impl Member List
+
+
+ +

This is the complete list of members for seastar::data_source_impl, including all inherited members.

+ + + + + +
close() (defined in seastar::data_source_impl)seastar::data_source_implinlinevirtual
get()=0 (defined in seastar::data_source_impl)seastar::data_source_implpure virtual
skip(uint64_t n) (defined in seastar::data_source_impl)seastar::data_source_implinlinevirtual
~data_source_impl() (defined in seastar::data_source_impl)seastar::data_source_implinlinevirtual
+ + + + diff --git a/master/classseastar_1_1data__source__impl.html b/master/classseastar_1_1data__source__impl.html new file mode 100644 index 000000000..1795c76e8 --- /dev/null +++ b/master/classseastar_1_1data__source__impl.html @@ -0,0 +1,111 @@ + + + + + + + +Seastar: seastar::data_source_impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::data_source_impl Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::data_source_impl:
+
+
+ + +seastar::httpd::internal::chunked_source_impl +seastar::httpd::internal::content_length_source_impl +seastar::net::packet_data_source +seastar::net::posix_data_source_impl + +
+ + + + + + + + +

+Public Member Functions

+virtual future< temporary_buffer< char > > get ()=0
 
+virtual future< temporary_buffer< char > > skip (uint64_t n)
 
+virtual future close ()
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/master/classseastar_1_1data__source__impl.png b/master/classseastar_1_1data__source__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..16bf42bf1a9adc00a6a9243a063d0036188be5ec GIT binary patch literal 2155 zcmd5;`9GW48pl+drqoUOv}%bDiB@gtsEMkrEowq7EvD31QruG7sV%i6GRlZf>!y8O z(Z)`%D77@Un?`VBj6nsBT51Vn2^E8;NyK{JFn_?k_ow@QKJPi-=Y7t3&U2n~zTeOL z$ivM^8L9!5lao`%eCu#sPVN93#2%2Z!1mp@XS%>n-Q%j4S*2p0sRI5PVwi1yyL zwl>8_<2s-TiM{UTDF+UcJs-Ng%;e+_ZD1TOdBw{wPfSFYHfuOclghd!#IB@M#Dh;% zdvtjtqxrWK5ot(@sL{Q+4HZN!dv%p-PLNkK@R)*yg|mkTRn-hu&(@nyM|?UARf|`@ zNnQO$bU+bmtz_c5PECBMpa@T=oWi@>TuM<;X(xJ8Z``)ztH*OW04@UF(HV%ssEN!ir$a;FPON%yhrV(e~l-+shJt|y7|F#=)++Q}lBH*`YMtlS z3s$qJjk}iw)LMmj?Dffmir{G;mmSc>6k3V=o~gHQo-Tp?Z|2l)26r*mkj7o~a-(ry z<$(=CPO+t^EGWY;RkuPZz1-}dKT#jq6dGQ-*8vf_th#aXNaddegs$keSg`pVBAnF-H}QlM7>?HwkB$sO*y;sZpkKY)odwM8g| zF$Sb5Fbju&%?3hx+@Tjt*=0G!Wxb2bGn=ALJkgeg-en0B*WPaj+n|1;OSTw79+%xa zCUO#XLRK6f1PuOO)s)IorW3N}N^CDwop>4&C5Wu!>_POsK-M46^N=T}HM^6q3`&a&Vdfqw7<#)1lBA83dY|V0 z9-s7>OgUqz6Np9?@;LP^ldU&9KGJu@lCB#;`DQxhCBs}0q)O`emI0cSJ~fi>?D!c7_1Ff!%8qM9&y;! zTPFxZ5;seX8M{eOaQ<55yaciVyW~l?KAKrO?Cnn6o#g1;eY})(BzA2p@waCXE4w#p z&C>7*C_Y#EBP7YoJ_41i)4W{8f>?D=!(cetthV=wgDBiULrdkbc2*V=fwv!hR>C0@ zj$ugYhjC`5Iu`Jl|!T!+A?2drU+Egw0 zF|5Qnz$A8fs>5_celN?vYn$F-2JdnwvXD*pZP;SxyH=wg6#NNquNP^Gp|RWVI2TO+ zI@;PGtgA)b-}DA=SWfQJw35HyKtpCj^5Tp(9EN@15>UAj``pE~&}(7u_+(Z6G#Afc zeWZ~NQvu;xg5s&Jqr(V6Rb!cOG1wBN6HtSqY|*4E`4XC0XdM3am#TJP_)wqC@Jh>z zmAIk~;~NwLx-mY>s8wD^^;8!nzgMK5J_PRDRO2`k=l<#P`{JYIjM`0PYb$?rXkMCK zBpKkGGmR{~&2Vx9o~$Z|k{&1O#AsqkP%6-|7A{-A(7^{7@3LrVM@lX5Zx+D&x2B}c zd@2g-1j(6{KvkC3WN&+3leq3g=n35Gceh;t&5@<;2!x=5y6iqVaJ0~f-4eg~wIwE6 zg{%ceep{-L6+#MB#bQ3&B;N&zZA;3TJ?G>DY{kGWK^8eByac(;`*mh87_e59>A`=> zcL$J&_liL=N#E0hZcso#nvP$#xUsJX4l;ou>O~gt8SjMFM9!_4UZHgks6&0P_SC2X e^dw~L$}`BDU+DDc7vP_P9LCYjq55*r!+!(UY7(vh literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1deferred__action-members.html b/master/classseastar_1_1deferred__action-members.html new file mode 100644 index 000000000..e52256a25 --- /dev/null +++ b/master/classseastar_1_1deferred__action-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::deferred_action< Func > Member List
+
+
+ +

This is the complete list of members for seastar::deferred_action< Func >, including all inherited members.

+ + + + + + + +
cancel() (defined in seastar::deferred_action< Func >)seastar::deferred_action< Func >inline
deferred_action(Func &&func) noexcept (defined in seastar::deferred_action< Func >)seastar::deferred_action< Func >inline
deferred_action(deferred_action &&o) noexcept (defined in seastar::deferred_action< Func >)seastar::deferred_action< Func >inline
deferred_action(const deferred_action &)=delete (defined in seastar::deferred_action< Func >)seastar::deferred_action< Func >
operator=(deferred_action &&o) noexcept (defined in seastar::deferred_action< Func >)seastar::deferred_action< Func >inline
~deferred_action() (defined in seastar::deferred_action< Func >)seastar::deferred_action< Func >inline
+ + + + diff --git a/master/classseastar_1_1deferred__action.html b/master/classseastar_1_1deferred__action.html new file mode 100644 index 000000000..8bc121b07 --- /dev/null +++ b/master/classseastar_1_1deferred__action.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: seastar::deferred_action< Func > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::deferred_action< Func > Class Template Reference
+
+
+ + + + + + + + + + + + +

+Public Member Functions

deferred_action (Func &&func) noexcept
 
deferred_action (deferred_action &&o) noexcept
 
+deferred_actionoperator= (deferred_action &&o) noexcept
 
deferred_action (const deferred_action &)=delete
 
+void cancel ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1deferred__close-members.html b/master/classseastar_1_1deferred__close-members.html new file mode 100644 index 000000000..8666078d4 --- /dev/null +++ b/master/classseastar_1_1deferred__close-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::deferred_close< Object > Member List
+
+
+ +

This is the complete list of members for seastar::deferred_close< Object >, including all inherited members.

+ + + + + + + + +
cancel() noexceptseastar::deferred_close< Object >inline
close_now() noexceptseastar::deferred_close< Object >inline
deferred_close(Object &obj) noexceptseastar::deferred_close< Object >inline
deferred_close(deferred_close &&x) noexceptseastar::deferred_close< Object >inline
deferred_close(const deferred_close &)=delete (defined in seastar::deferred_close< Object >)seastar::deferred_close< Object >
operator=(deferred_close &&x) noexceptseastar::deferred_close< Object >inline
~deferred_close()seastar::deferred_close< Object >inline
+ + + + diff --git a/master/classseastar_1_1deferred__close.html b/master/classseastar_1_1deferred__close.html new file mode 100644 index 000000000..c21d73263 --- /dev/null +++ b/master/classseastar_1_1deferred__close.html @@ -0,0 +1,245 @@ + + + + + + + +Seastar: seastar::deferred_close< Object > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::deferred_close< Object > Class Template Reference
+
+
+

Detailed Description

+
template<typename Object>
+requires closeable<Object>
+class seastar::deferred_close< Object >

Template helper to auto-close obj when destroyed.

+
Template Parameters
+ + +
Objecta class exposing a close() method that returns a future<> that is called when the controller is destroyed.
+
+
+

Must be used in a seastar thread as the destructor needs to wait on the obj close() future.

+
Examples
closeable_test.cc.
+
+
+

#include <seastar/util/closeable.hh>

+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

 deferred_close (Object &obj) noexcept
 
 deferred_close (deferred_close &&x) noexcept
 
deferred_close (const deferred_close &)=delete
 
deferred_closeoperator= (deferred_close &&x) noexcept
 
~deferred_close ()
 Destruct the deferred_close object and auto-close obj.
 
+void close_now () noexcept
 Close obj once now.
 
void cancel () noexcept
 
+

Constructor & Destructor Documentation

+ +

◆ deferred_close() [1/2]

+ +
+
+
+template<typename Object >
+ + + + + +
+ + + + + + + + +
seastar::deferred_close< Object >::deferred_close (Object & obj)
+
+inlinenoexcept
+
+

Construct an object that will auto-close obj when destroyed.

Template Parameters
+ + +
objthe object to auto-close.
+
+
+ +
+
+ +

◆ deferred_close() [2/2]

+ +
+
+
+template<typename Object >
+ + + + + +
+ + + + + + + + +
seastar::deferred_close< Object >::deferred_close (deferred_close< Object > && x)
+
+inlinenoexcept
+
+

Moves the deferred_close into a new one, and the old one is canceled.

+ +
+
+

Member Function Documentation

+ +

◆ cancel()

+ +
+
+
+template<typename Object >
+ + + + + +
+ + + + + + + +
void seastar::deferred_close< Object >::cancel ()
+
+inlinenoexcept
+
+

Prevents close() from being called when this object is destroyed. Cannot call close_now() any more after this.

+ +
+
+ +

◆ operator=()

+ +
+
+
+template<typename Object >
+ + + + + +
+ + + + + + + + +
deferred_close & seastar::deferred_close< Object >::operator= (deferred_close< Object > && x)
+
+inlinenoexcept
+
+

Move-assign another deferred_close. The current deferred_close is closed before being assigned. And the other one's state is transferred to the current one.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1deferred__stop-members.html b/master/classseastar_1_1deferred__stop-members.html new file mode 100644 index 000000000..85cfff94a --- /dev/null +++ b/master/classseastar_1_1deferred__stop-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::deferred_stop< Object > Member List
+
+
+ +

This is the complete list of members for seastar::deferred_stop< Object >, including all inherited members.

+ + + + + + + + +
cancel() noexceptseastar::deferred_stop< Object >inline
deferred_stop(Object &obj) noexceptseastar::deferred_stop< Object >inline
deferred_stop(deferred_stop &&x) noexceptseastar::deferred_stop< Object >inline
deferred_stop(const deferred_stop &)=delete (defined in seastar::deferred_stop< Object >)seastar::deferred_stop< Object >
operator=(deferred_stop &&x) noexceptseastar::deferred_stop< Object >inline
stop_now() noexceptseastar::deferred_stop< Object >inline
~deferred_stop()seastar::deferred_stop< Object >inline
+ + + + diff --git a/master/classseastar_1_1deferred__stop.html b/master/classseastar_1_1deferred__stop.html new file mode 100644 index 000000000..cfaf163da --- /dev/null +++ b/master/classseastar_1_1deferred__stop.html @@ -0,0 +1,245 @@ + + + + + + + +Seastar: seastar::deferred_stop< Object > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::deferred_stop< Object > Class Template Reference
+
+
+

Detailed Description

+
template<typename Object>
+requires stoppable<Object>
+class seastar::deferred_stop< Object >

Template helper to auto-stop obj when destroyed.

+
Template Parameters
+ + +
Objecta class exposing a stop() method that returns a future<> that is called when the controller is destroyed.
+
+
+

Must be used in a seastar thread as the destructor needs to wait on the obj stop() future.

+
Examples
closeable_test.cc, and sharded_parameter_demo.cc.
+
+
+

#include <seastar/util/closeable.hh>

+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

 deferred_stop (Object &obj) noexcept
 
 deferred_stop (deferred_stop &&x) noexcept
 
deferred_stop (const deferred_stop &)=delete
 
deferred_stopoperator= (deferred_stop &&x) noexcept
 
~deferred_stop ()
 Destruct the deferred_stop object and auto-stop obj.
 
+void stop_now () noexcept
 Stop obj once now.
 
void cancel () noexcept
 
+

Constructor & Destructor Documentation

+ +

◆ deferred_stop() [1/2]

+ +
+
+
+template<typename Object >
+ + + + + +
+ + + + + + + + +
seastar::deferred_stop< Object >::deferred_stop (Object & obj)
+
+inlinenoexcept
+
+

Construct an object that will auto-stop obj when destroyed.

Template Parameters
+ + +
objthe object to auto-stop.
+
+
+ +
+
+ +

◆ deferred_stop() [2/2]

+ +
+
+
+template<typename Object >
+ + + + + +
+ + + + + + + + +
seastar::deferred_stop< Object >::deferred_stop (deferred_stop< Object > && x)
+
+inlinenoexcept
+
+

Moves the deferred_stop into a new one, and the old one is canceled.

+ +
+
+

Member Function Documentation

+ +

◆ cancel()

+ +
+
+
+template<typename Object >
+ + + + + +
+ + + + + + + +
void seastar::deferred_stop< Object >::cancel ()
+
+inlinenoexcept
+
+

Prevents stop() from being called when this object is destroyed. Cannot call stop_now() any more after this.

+ +
+
+ +

◆ operator=()

+ +
+
+
+template<typename Object >
+ + + + + +
+ + + + + + + + +
deferred_stop & seastar::deferred_stop< Object >::operator= (deferred_stop< Object > && x)
+
+inlinenoexcept
+
+

Move-assign another deferred_stop. The current deferred_stop is stopped before being assigned. And the other one's state is transferred to the current one.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1deleter-members.html b/master/classseastar_1_1deleter-members.html new file mode 100644 index 000000000..fbaa8c015 --- /dev/null +++ b/master/classseastar_1_1deleter-members.html @@ -0,0 +1,97 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::deleter Member List
+
+
+ +

This is the complete list of members for seastar::deleter, including all inherited members.

+ + + + + + + + + + + + + + + + +
append(deleter d)seastar::deleterinline
deleter() noexcept=defaultseastar::deleter
deleter(const deleter &)=delete (defined in seastar::deleter)seastar::deleter
deleter(deleter &&x) noexceptseastar::deleterinline
make_deleter(deleter next, Object o)seastar::deleterrelated
make_deleter(Object o)seastar::deleterrelated
make_free_deleter(void *obj)seastar::deleterrelated
make_free_deleter(deleter next, void *obj)seastar::deleterrelated
make_object_deleter(T &&obj)seastar::deleterrelated
make_object_deleter(deleter d, T &&obj)seastar::deleterrelated
operator bool() const noexceptseastar::deleterinlineexplicit
operator=(deleter &&x) noexcept (defined in seastar::deleter)seastar::deleterinline
operator=(deleter &)=delete (defined in seastar::deleter)seastar::deleter
share()seastar::deleterinline
~deleter()seastar::deleterinline
+ + + + diff --git a/master/classseastar_1_1deleter.html b/master/classseastar_1_1deleter.html new file mode 100644 index 000000000..5595c3b05 --- /dev/null +++ b/master/classseastar_1_1deleter.html @@ -0,0 +1,151 @@ + + + + + + + +Seastar: seastar::deleter Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::deleter Class Referencefinal
+
+
+

Detailed Description

+

Provides a mechanism for managing the lifetime of a buffer.

+

A deleter is an object that is used to inform the consumer of some buffer (not referenced by the deleter itself) how to delete the buffer. This can be by calling an arbitrary function or destroying an object carried by the deleter. Examples of a deleter's encapsulated actions are:

+
    +
  • calling std::free(p) on some captured pointer, p
  • +
  • calling delete p on some captured pointer, p
  • +
  • decrementing a reference count somewhere
  • +
+

A deleter performs its action from its destructor.

+
+

#include <seastar/core/deleter.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

deleter () noexcept=default
 Constructs an empty deleter that does nothing in its destructor.
 
deleter (const deleter &)=delete
 
deleter (deleter &&x) noexcept
 Moves a deleter.
 
~deleter ()
 Destroys the deleter and carries out the encapsulated action.
 
+deleteroperator= (deleter &&x) noexcept
 
+deleteroperator= (deleter &)=delete
 
deleter share ()
 
operator bool () const noexcept
 Checks whether the deleter has an associated action.
 
void append (deleter d)
 
+ + + + + + + + + + + + + + + + + + +

+Related Functions

(Note that these are not member functions.)

+
template<typename Object >
deleter make_deleter (deleter next, Object o)
 
template<typename Object >
deleter make_deleter (Object o)
 
deleter make_free_deleter (void *obj)
 
deleter make_free_deleter (deleter next, void *obj)
 
template<typename T >
deleter make_object_deleter (T &&obj)
 
template<typename T >
deleter make_object_deleter (deleter d, T &&obj)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1enable__lw__shared__from__this-members.html b/master/classseastar_1_1enable__lw__shared__from__this-members.html new file mode 100644 index 000000000..61f7ab593 --- /dev/null +++ b/master/classseastar_1_1enable__lw__shared__from__this-members.html @@ -0,0 +1,90 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::enable_lw_shared_from_this< T > Member List
+
+
+ +

This is the complete list of members for seastar::enable_lw_shared_from_this< T >, including all inherited members.

+ + + + + + + + + +
enable_lw_shared_from_this() noexcept (defined in seastar::enable_lw_shared_from_this< T >)seastar::enable_lw_shared_from_this< T >inlineprotected
enable_lw_shared_from_this(enable_lw_shared_from_this &&) noexcept (defined in seastar::enable_lw_shared_from_this< T >)seastar::enable_lw_shared_from_this< T >inlineprotected
enable_lw_shared_from_this(const enable_lw_shared_from_this &) noexcept (defined in seastar::enable_lw_shared_from_this< T >)seastar::enable_lw_shared_from_this< T >inlineprotected
operator=(const enable_lw_shared_from_this &) noexcept (defined in seastar::enable_lw_shared_from_this< T >)seastar::enable_lw_shared_from_this< T >inlineprotected
operator=(enable_lw_shared_from_this &&) noexcept (defined in seastar::enable_lw_shared_from_this< T >)seastar::enable_lw_shared_from_this< T >inlineprotected
shared_from_this() noexcept (defined in seastar::enable_lw_shared_from_this< T >)seastar::enable_lw_shared_from_this< T >inline
shared_from_this() const noexcept (defined in seastar::enable_lw_shared_from_this< T >)seastar::enable_lw_shared_from_this< T >inline
use_count() const noexcept (defined in seastar::enable_lw_shared_from_this< T >)seastar::enable_lw_shared_from_this< T >inline
+ + + + diff --git a/master/classseastar_1_1enable__lw__shared__from__this.html b/master/classseastar_1_1enable__lw__shared__from__this.html new file mode 100644 index 000000000..44d744fb9 --- /dev/null +++ b/master/classseastar_1_1enable__lw__shared__from__this.html @@ -0,0 +1,123 @@ + + + + + + + +Seastar: seastar::enable_lw_shared_from_this< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::enable_lw_shared_from_this< T > Class Template Reference
+
+
+
+Inheritance diagram for seastar::enable_lw_shared_from_this< T >:
+
+
+ + +seastar::lw_shared_ptr_counter_base + +
+ + + + + + + + +

+Public Member Functions

+lw_shared_ptr< T > shared_from_this () noexcept
 
+lw_shared_ptr< const T > shared_from_this () const noexcept
 
+long use_count () const noexcept
 
+ + + + + + + + + +

+Protected Member Functions

enable_lw_shared_from_this (enable_lw_shared_from_this &&) noexcept
 
enable_lw_shared_from_this (const enable_lw_shared_from_this &) noexcept
 
+enable_lw_shared_from_thisoperator= (const enable_lw_shared_from_this &) noexcept
 
+enable_lw_shared_from_thisoperator= (enable_lw_shared_from_this &&) noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1enable__lw__shared__from__this.png b/master/classseastar_1_1enable__lw__shared__from__this.png new file mode 100644 index 0000000000000000000000000000000000000000..b8eac9b10a23abcd947588c7c4b9e0ad5cb5fab1 GIT binary patch literal 863 zcmeAS@N?(olHy`uVBq!ia0vp^zkxV_gBeJ^DF3_@NJ#|vgt-3y{~sjs=4)yHp$R}1 z7#}!rfVK0EJdn##666=m08|75S5Ji)F)%Q_^K@|xsbG9N_hHdv1)diB^`HNpugUA_ zRXNak`%Y<|%WGL_7HwUjQ}NeIV<$I-P6|rOn!coF#w}G%`Mm6S70pG~m6-jj}RytRJ+ z@sE3Djo(k2A{4w^<>}!odY(TwWX4}FJ+wbm?f;#BuNGKU*1)&x+NxUn8AW!_SJ%ir_S$qlM>wrk(l+sY<^8e)J3in3 zUV63k_38RsN2=~K@Lj)EzG>6meRsapiRB$l5GmPq>+~kQy@t0gto^$3%FVg&?+S6= z@(f?0w$Ce2yuxU`pJw{AUHbtG)d|Lwe57x-7dseL;)x_<8W z@9%yucou)}yT#>F@vF7_pXJ~CzU{pHyM8-)Zf%jb^KLlK&);HhTHki(<>%1qQfaB$ zHI)bK^y?lo6g^y@RsT(Qe(O1r0}SiK?k6+fF$M*3u(gAo&szpiv`kAq*=he$!ua!} Ts)zr8xq-pc)z4*}Q$iB}vk|N+ literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1enable__shared__from__this-members.html b/master/classseastar_1_1enable__shared__from__this-members.html new file mode 100644 index 000000000..d028ea85f --- /dev/null +++ b/master/classseastar_1_1enable__shared__from__this-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::enable_shared_from_this< T > Member List
+
+
+ +

This is the complete list of members for seastar::enable_shared_from_this< T >, including all inherited members.

+ + + + +
shared_from_this() noexcept (defined in seastar::enable_shared_from_this< T >)seastar::enable_shared_from_this< T >inline
shared_from_this() const noexcept (defined in seastar::enable_shared_from_this< T >)seastar::enable_shared_from_this< T >inline
use_count() const noexcept (defined in seastar::enable_shared_from_this< T >)seastar::enable_shared_from_this< T >inline
+ + + + diff --git a/master/classseastar_1_1enable__shared__from__this.html b/master/classseastar_1_1enable__shared__from__this.html new file mode 100644 index 000000000..f08c3d5ac --- /dev/null +++ b/master/classseastar_1_1enable__shared__from__this.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: seastar::enable_shared_from_this< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::enable_shared_from_this< T > Class Template Reference
+
+
+
+Inheritance diagram for seastar::enable_shared_from_this< T >:
+
+
+ + +seastar::shared_ptr_count_base +seastar::async_sharded_service< T > + +
+ + + + + + + + +

+Public Member Functions

+shared_ptr< T > shared_from_this () noexcept
 
+shared_ptr< const T > shared_from_this () const noexcept
 
+long use_count () const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1enable__shared__from__this.png b/master/classseastar_1_1enable__shared__from__this.png new file mode 100644 index 0000000000000000000000000000000000000000..3179cb491fa7a91586952ab714ab4363bdb05bef GIT binary patch literal 1216 zcma)+{ZrBh9LK+Alrvk)%)%|*5bLNeeCWZ4&?G=HQAAJ^(e5zQ?Z_;N!h9(6AvGV+ zY?H|QCc1n;=j{STDypfM#+4?L80OT3N#dnqDgwjp57<6;ug~*upZmOT5yOJE+B(?+ z0I(Gwj3HT~#zLWuwZ$uQqrb6)-NaBb)@(Mf&pzpyWzWkk**{37Qpm0ME|$_JofH-c zSeDjJ-beNXfQ{jJOd$D+)hthYabdq5_U6SHgW&@s3)tfs-on0PjZPQQ7^6>RuVrrXD8f?@L|#Y}qXrcwqi3pCnIkJN1aq&R z=4;7aBQr0vguh3ZH1f2-* z#xB~FF~X~TL^j`DHVSmU7i3A=dir;u6{C=$;YA@`cf8|8>L7#6`r6akUEt*eS%!kS zT(f}akb6%lAs zpm;-_bJu~FZHg9_00$99@%T2^ZqR#l9HD$W$+3v2PH+FdyE`7 zA3eESF@B8Q(QPC;fhGqh@W@f7hhi>LCi5&?Du0}C zN;H?n5uI0cd`j{9%bh9GN&+sk49%UZJr73MwPIc^YHM}Z09(Xu6!qBfHggvl>K6B%5CofoQ literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1enum__hash-members.html b/master/classseastar_1_1enum__hash-members.html new file mode 100644 index 000000000..6dc86497c --- /dev/null +++ b/master/classseastar_1_1enum__hash-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::enum_hash< T > Member List
+
+
+ +

This is the complete list of members for seastar::enum_hash< T >, including all inherited members.

+ + +
operator()(const T &e) const (defined in seastar::enum_hash< T >)seastar::enum_hash< T >inline
+ + + + diff --git a/master/classseastar_1_1enum__hash.html b/master/classseastar_1_1enum__hash.html new file mode 100644 index 000000000..9a200befe --- /dev/null +++ b/master/classseastar_1_1enum__hash.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::enum_hash< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::enum_hash< T > Class Template Reference
+
+
+ + + + +

+Public Member Functions

+std::size_t operator() (const T &e) const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1execution__stage-members.html b/master/classseastar_1_1execution__stage-members.html new file mode 100644 index 000000000..c2dbdd497 --- /dev/null +++ b/master/classseastar_1_1execution__stage-members.html @@ -0,0 +1,97 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::execution_stage Member List
+
+
+ +

This is the complete list of members for seastar::execution_stage, including all inherited members.

+ + + + + + + + + + + + + + + + +
_empty (defined in seastar::execution_stage)seastar::execution_stageprotected
_flush_scheduled (defined in seastar::execution_stage)seastar::execution_stageprotected
_metric_group (defined in seastar::execution_stage)seastar::execution_stageprotected
_name (defined in seastar::execution_stage)seastar::execution_stageprotected
_sg (defined in seastar::execution_stage)seastar::execution_stageprotected
_stats (defined in seastar::execution_stage)seastar::execution_stageprotected
do_flush() noexcept=0 (defined in seastar::execution_stage)seastar::execution_stageprotectedpure virtual
execution_stage(const sstring &name, scheduling_group sg={}) (defined in seastar::execution_stage)seastar::execution_stageexplicit
execution_stage(const execution_stage &)=delete (defined in seastar::execution_stage)seastar::execution_stage
execution_stage(execution_stage &&)seastar::execution_stage
flush() noexceptseastar::execution_stage
get_stats() const noexceptseastar::execution_stageinline
name() const noexceptseastar::execution_stageinline
poll() const noexceptseastar::execution_stageinline
~execution_stage() (defined in seastar::execution_stage)seastar::execution_stagevirtual
+ + + + diff --git a/master/classseastar_1_1execution__stage.html b/master/classseastar_1_1execution__stage.html new file mode 100644 index 000000000..4829c2230 --- /dev/null +++ b/master/classseastar_1_1execution__stage.html @@ -0,0 +1,276 @@ + + + + + + + +Seastar: seastar::execution_stage Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+

Detailed Description

+

Base execution stage class.

+
+

#include <seastar/core/execution_stage.hh>

+
+Inheritance diagram for seastar::execution_stage:
+
+
+ + +seastar::concrete_execution_stage< ReturnType, Args > + +
+ + + + +

+Classes

struct  stats
 
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

execution_stage (const sstring &name, scheduling_group sg={})
 
execution_stage (const execution_stage &)=delete
 
 execution_stage (execution_stage &&)
 
+const sstring & name () const noexcept
 Returns execution stage name.
 
+const statsget_stats () const noexcept
 Returns execution stage usage statistics.
 
bool flush () noexcept
 
bool poll () const noexcept
 
+ + + +

+Protected Member Functions

+virtual void do_flush () noexcept=0
 
+ + + + + + + + + + + + + +

+Protected Attributes

+bool _empty = true
 
+bool _flush_scheduled = false
 
+scheduling_group _sg
 
+stats _stats
 
+sstring _name
 
+metrics::metric_group _metric_group
 
+

Class Documentation

+ +

◆ seastar::execution_stage::stats

+ +
+
+ + + + +
struct seastar::execution_stage::stats
+
+ + + + + + + + + + + + + + +
Class Members
+uint64_t +function_calls_enqueued +
+uint64_t +function_calls_executed +
+uint64_t +tasks_preempted +
+uint64_t +tasks_scheduled +
+ +
+
+

Constructor & Destructor Documentation

+ +

◆ execution_stage()

+ +
+
+ + + + + + + + +
seastar::execution_stage::execution_stage (execution_stage && )
+
+

Move constructor

+
Warning
It is illegal to move execution_stage after any operation has been pushed to it. The only reason why the move constructor is not deleted is the fact that C++14 does not guarantee return value optimisation which is required by make_execution_stage().
+ +
+
+

Member Function Documentation

+ +

◆ flush()

+ +
+
+ + + + + +
+ + + + + + + +
bool seastar::execution_stage::flush ()
+
+noexcept
+
+

Flushes execution stage

+

Ensures that a task which would execute all queued operations is scheduled. Does not schedule a new task if there is one already pending or the queue is empty.

+
Returns
true if a new task has been scheduled
+ +
+
+ +

◆ poll()

+ +
+
+ + + + + +
+ + + + + + + +
bool seastar::execution_stage::poll () const
+
+inlinenoexcept
+
+

Checks whether there are pending operations.

+
Returns
true if there is at least one queued operation
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1execution__stage.png b/master/classseastar_1_1execution__stage.png new file mode 100644 index 0000000000000000000000000000000000000000..283d47f31d8c7fc2ce30ccf2f1dfb60263adf168 GIT binary patch literal 1034 zcmeAS@N?(olHy`uVBq!ia0y~yVDtg912~w0r0eB9mOx4(z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op@Uh&^u zPxau${uTx$)>VGxMF~G|L|lsx^3wFsT>4y*k%i&BkP+h?j+qR8Ej|qDPHGLp_1d2g zZaklOdt&{TW&Tq+H=Hv+?K9mlsCZ`n`tzq%uGDlB^F(WmGo5S@r8o^t^0&*Y#T?Y)hMVZ*+@i ze9$U0{n>LD?dx7wCmmEh?c4n_ar>EV_czt{pZMI&74UrV*?)P(Gw1Kt-J@Fkw}zoY z_kD4iS!Ujt?=xK}7KAKAvmQI<+_JG*}6cWNl zj5QW>52-b9D+(WI-+X!l=L1KedgTy^dgMR?D(FNrj(q8liblofe*U$5I_L9k=V?nE zCe2e#@tP#87(59WF_WISoS34bUUtG~(iaVWmif-x7JvIPv+jRhOU$hsVUtXf-YeY; zUZ%2kvv=Cv0^OABUoPDX)iGM`Z&JUq2oz=B+d~h3{;l<9)9zad(iO4Umrq~0Y~poy z^UM@e#oJ{Xo41%L>+ID#yUX>9(eu=^cfEp~Ct9xE@I`y+ul*&4ITktBSoBxNyiWZR zJoQVngYmT3I8qb_MUm>V%v|G~LYPN}f@s7A@DLccTi5NY-kukM&ajns9&Z)MgCm+AE zd9hqk({zjUj`{1>riOm;Sgz}EcT-#Z*S@)yT4%3TUp{R&^YwG*$%WT~p0A#0Dc`l& z_xjSD)U?v{ch<)2?)NqB<}KT)nZ8)KK>6%^OXJ)}{3(6s&-gv-Gv2)ZS?ZUiGPgv( zmEH*X{B*kYs-H2Mv$O0xij5c6Ui}kQ8kRCGKiW4GSNVgnXU9=dOcM1?7vpF8$ro{-AB+SwZ`nbh|&5$4mn! + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::experimental::fsnotifier Member List
+
+ + + + + diff --git a/master/classseastar_1_1experimental_1_1fsnotifier.html b/master/classseastar_1_1experimental_1_1fsnotifier.html new file mode 100644 index 000000000..3c1916dd3 --- /dev/null +++ b/master/classseastar_1_1experimental_1_1fsnotifier.html @@ -0,0 +1,327 @@ + + + + + + + +Seastar: seastar::experimental::fsnotifier Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::experimental::fsnotifier Class Reference
+
+
+

Detailed Description

+

Filesystem modification notifier.

+

This is a thin wrapper around inotify(see http://man7.org/linux/man-pages/man7/inotify.7.html), which is the de-facto light-weight filesystem modification watch interface in Linux and can be used to log filesystem activities, reload configurations, etc.

+

The wrapper provides a buffered read of events, and RAII handling of watches themselves.

+
Note
Note that this is an experimental feature, and thus any tweaks that are backward incompatible can be made before finally freezing it. Besides, the impl currently does not (yet) handle re-writing watches.
+
+

#include <seastar/core/fsnotify.hh>

+ + + + + + + + +

+Classes

struct  event
 A wrapper around inotify_event. More...
 
class  watch
 Simple RAII wrapper around a fsnotifier::watch_token. More...
 
+ + + + + + + + + + +

+Public Types

enum class  flags : uint32_t {
+  access = IN_ACCESS +, attrib = IN_ATTRIB +, close_write = IN_CLOSE_WRITE +, close_nowrite = IN_CLOSE_NOWRITE +,
+  create_child = IN_CREATE +, delete_child = IN_DELETE +, delete_self = IN_DELETE_SELF +, modify = IN_MODIFY +,
+  move_self = IN_MOVE_SELF +, move_from = IN_MOVED_FROM +, move_to = IN_MOVED_TO +, open = IN_OPEN +,
+  close = IN_CLOSE +, move = IN_MOVE +, oneshot = IN_ONESHOT +, ignored = IN_IGNORED +,
+  onlydir = IN_ONLYDIR +
+ }
 Flags of events supported by FileSystem Notifier. More...
 
+using watch_token = int32_t
 Token of a watch point.
 
using sequence_no = uint32_t
 Unique sequence number of associating related events. More...
 
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

fsnotifier (fsnotifier &&)
 
+fsnotifieroperator= (fsnotifier &&)
 
future< watchcreate_watch (const sstring &path, flags mask)
 Monitor events specified in mask for the give path. More...
 
future< std::vector< event > > wait () const
 
void shutdown ()
 
+bool active () const
 Check if the notifier is activated.
 
operator bool () const
 Equivalent to active().
 
+

Class Documentation

+ +

◆ seastar::experimental::fsnotifier::event

+ +
+
+ + + + +
struct seastar::experimental::fsnotifier::event
+
+ + + + + + + + + + + + + + +
Class Members
+watch_token +id +
+flags +mask +
+sstring +name +
+sequence_no +seq +
+ +
+
+

Member Typedef Documentation

+ +

◆ sequence_no

+ +
+
+ +

Unique sequence number of associating related events.

+
Note
The sequence number is used to connect related events. Currently, it is used only for the rename events(i.e., move_from and move_to), and is 0 for other types.
+ +
+
+

Member Enumeration Documentation

+ +

◆ flags

+ +
+
+ + + + + +
+ + + + +
enum class seastar::experimental::fsnotifier::flags : uint32_t
+
+strong
+
+ +

Flags of events supported by FileSystem Notifier.

+
Note
Note that the flags are bit-matched with inotify and they can be calculated using the bitwise AND and bitwise OR operators (including the assignment form) directly to take intersection or union.
+ +
+
+

Member Function Documentation

+ +

◆ create_watch()

+ +
+
+ + + + + + + + + + + + + + + + + + +
future< watch > seastar::experimental::fsnotifier::create_watch (const sstring & path,
flags mask 
)
+
+ +

Monitor events specified in mask for the give path.

+
Parameters
+ + + +
pathpath of the file or directory to monitor for.
maskevents of interest.
+
+
+
Returns
a future that becomes ready when the underlying inotify_add_watch(2) call completes.
+ +
+
+ +

◆ shutdown()

+ +
+
+ + + + + + + +
void seastar::experimental::fsnotifier::shutdown ()
+
+

Shutdown the notifier and abort any waiting events.

+
Note
After shutdown, all watches are invalidated, and no new ones can be created.
+ +
+
+ +

◆ wait()

+ +
+
+ + + + + + + +
future< std::vector< event > > seastar::experimental::fsnotifier::wait () const
+
+

Wait for events.

+
Returns
a future that becomes ready when registered events occur.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1experimental_1_1fsnotifier_1_1watch-members.html b/master/classseastar_1_1experimental_1_1fsnotifier_1_1watch-members.html new file mode 100644 index 000000000..4f4452053 --- /dev/null +++ b/master/classseastar_1_1experimental_1_1fsnotifier_1_1watch-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::experimental::fsnotifier::watch Member List
+
+ + + + + diff --git a/master/classseastar_1_1experimental_1_1fsnotifier_1_1watch.html b/master/classseastar_1_1experimental_1_1fsnotifier_1_1watch.html new file mode 100644 index 000000000..45d6ed639 --- /dev/null +++ b/master/classseastar_1_1experimental_1_1fsnotifier_1_1watch.html @@ -0,0 +1,130 @@ + + + + + + + +Seastar: seastar::experimental::fsnotifier::watch Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::experimental::fsnotifier::watch Class Reference
+
+
+

Detailed Description

+

Simple RAII wrapper around a fsnotifier::watch_token.

+

The events of the path will be unregistered automatically on destruction of the watch.

+
+

#include <seastar/core/fsnotify.hh>

+ + + + + + + + + + + + + + +

+Public Member Functions

watch (watch &&) noexcept
 
+watchoperator= (watch &&) noexcept
 
watch_token release ()
 
operator watch_token () const
 Cast this watch point to a watch token.
 
+watch_token token () const
 Get the token of this watch point.
 
+

Member Function Documentation

+ +

◆ release()

+ +
+
+ + + + + + + +
watch_token seastar::experimental::fsnotifier::watch::release ()
+
+

Reset the watch point.

+
Note
Note that this operation won't unregister the event for the path, but simply releases resources used internally.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1experimental_1_1process-members.html b/master/classseastar_1_1experimental_1_1process-members.html new file mode 100644 index 000000000..77410e329 --- /dev/null +++ b/master/classseastar_1_1experimental_1_1process-members.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::experimental::process Member List
+
+ + + + + diff --git a/master/classseastar_1_1experimental_1_1process.html b/master/classseastar_1_1experimental_1_1process.html new file mode 100644 index 000000000..f2c94e4d2 --- /dev/null +++ b/master/classseastar_1_1experimental_1_1process.html @@ -0,0 +1,201 @@ + + + + + + + +Seastar: seastar::experimental::process Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::experimental::process Class Reference
+
+
+

Detailed Description

+

Interact with a spawned subprocess

+
Note
the spawned subprocess should always be wait()'ed. Otherwise, the Seastar application spawning the subprocess will leave us with one ore more zombie subprocesses after it exists.
+
+

#include <seastar/util/process.hh>

+ + + + + + +

+Classes

struct  wait_exited
 
struct  wait_signaled
 
+ + + +

+Public Types

+using wait_status = std::variant< wait_exited, wait_signaled >
 
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

process (create_tag, pid_t pid, file_desc &&cin, file_desc &&cout, file_desc &&cerr)
 
+output_stream< char > cin ()
 Return an writable stream which provides input from the child process.
 
+input_stream< char > cout ()
 Return an writable stream which provides stdout output from the child process.
 
+input_stream< char > cerr ()
 Return an writable stream which provides stderr output from the child process.
 
future< wait_status > wait ()
 
+void terminate ()
 Stop the process using SIGTERM.
 
+void kill ()
 Force the process to exit using SIGKILL.
 
+

Class Documentation

+ +

◆ seastar::experimental::process::wait_exited

+ +
+
+ + + + +
struct seastar::experimental::process::wait_exited
+
+ + + + + +
Class Members
+int +exit_code +
+ +
+
+ +

◆ seastar::experimental::process::wait_signaled

+ +
+
+ + + + +
struct seastar::experimental::process::wait_signaled
+
+ + + + + +
Class Members
+int +terminating_signal +
+ +
+
+

Member Function Documentation

+ +

◆ wait()

+ +
+
+ + + + + + + +
future< wait_status > seastar::experimental::process::wait ()
+
+

Wait until the child process exits or terminates

+
Returns
the exit status
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1experimental_1_1websocket_1_1connection-members.html b/master/classseastar_1_1experimental_1_1websocket_1_1connection-members.html new file mode 100644 index 000000000..6193d4317 --- /dev/null +++ b/master/classseastar_1_1experimental_1_1websocket_1_1connection-members.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::experimental::websocket::connection Member List
+
+ + + + + diff --git a/master/classseastar_1_1experimental_1_1websocket_1_1connection.html b/master/classseastar_1_1experimental_1_1websocket_1_1connection.html new file mode 100644 index 000000000..cc8825365 --- /dev/null +++ b/master/classseastar_1_1experimental_1_1websocket_1_1connection.html @@ -0,0 +1,136 @@ + + + + + + + +Seastar: seastar::experimental::websocket::connection Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::experimental::websocket::connection Class Reference
+
+
+

Detailed Description

+

a WebSocket connection

+
+

#include <seastar/websocket/server.hh>

+
+Inheritance diagram for seastar::experimental::websocket::connection:
+
+
+ +
+ + + + + + + + + + + + +

+Public Member Functions

 connection (server &server, connected_socket &&fd)
 
+future process ()
 serve WebSocket protocol on a connection
 
+void shutdown_input ()
 close the socket
 
+future close (bool send_close=true)
 
+ + + + + + + + + + + + + + +

+Protected Member Functions

+future read_loop ()
 
+future read_one ()
 
+future read_http_upgrade_request ()
 
+future response_loop ()
 
+void on_new_connection ()
 
+future send_data (opcodes opcode, temporary_buffer< char > &&buff)
 Packs buff in websocket frame and sends it to the client.
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1experimental_1_1websocket_1_1connection.png b/master/classseastar_1_1experimental_1_1websocket_1_1connection.png new file mode 100644 index 0000000000000000000000000000000000000000..219fb2184e6bad2385e75d5ce8d31649a78671c7 GIT binary patch literal 854 zcmeAS@N?(olHy`uVBq!ia0y~yU}Oif12~w0q;jW29*~j<@CkAK|NlRb`Qpvj(*8pe zfGjXRaNq!I=N)+m&CC~b*7OAj){C>18e8x;qHszD{`h^1Qg$gG%3M(cYZe1H@dj5j#%Ovf% zw~Z;g7Av&fVG>Cp_u%=#1eZGQ%B)%J_6 z^j`5+=4IfVJ~q#LSHD|asn~yb;ZLtscj}t=NEB$CEAswn@=#z?dT#CgCl}s+6XsiI zpjR%SzxbouO#9A&?Q{32%IOLJX>!i4IJ1GfK>6?1efB;^TT_o!e`~*4S-87YIx+U! zOb$86J9nJpc+Pk4T2d0%vUz#g&nt}^&orw1PyTDc_dBja^1^pnm7fbl_#Y|osYt5w zfvK&92F8;a9$fy##Na8z)u!Jlz~1kuaK!Pq3Ij`Lvqc9pgA2*jUk<*sv`GgU9-Q}< zIpQe8px`Al&C-T7>)wj1KDOe@ZL8GNwwX$9s}g5tka+!AhG9YQ;|;P4f7{xfdi`_% z*J6?RtsAdC)ZQLdwWOl&onEugwJP$?d&X0;d^)ahfh(P#O3F+E(d&1yQ%(asj;cH;Pui8 zUF+L@h2MQn>Yo0KXLZlSH@%80gr|Kzd_^TI(e|0Z9NColT05I9+aK&buNaseuUz}m zrl`F}f`6w)?YUh`dD{6y4O6Z^dYE*mc~8U*`JlKtx0Bu*9f*%z{*mFdF7JoyCi{bb zZ$0i6_v7qVpB3*u#b%s8&wb#|)4ulNiPh!I$F!ffT8H0S;x=#E<#l@V#1HRbXjuNG zNsr;dWFhv#3QKl|A5Vb{0d|HCq4rY;&-naeZ|s}xf8vOp4lolic)I$ztaD0e0sz + + + + + + +Seastar: Member List + + + + + + + + + + +
+
seastar::experimental::websocket::exception Member List
+
+
+ +

This is the complete list of members for seastar::experimental::websocket::exception, including all inherited members.

+ + + +
exception(std::string_view msg) (defined in seastar::experimental::websocket::exception)seastar::experimental::websocket::exceptioninline
what() const noexcept (defined in seastar::experimental::websocket::exception)seastar::experimental::websocket::exceptioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1experimental_1_1websocket_1_1exception.html b/master/classseastar_1_1experimental_1_1websocket_1_1exception.html new file mode 100644 index 000000000..8867408ae --- /dev/null +++ b/master/classseastar_1_1experimental_1_1websocket_1_1exception.html @@ -0,0 +1,105 @@ + + + + + + + +Seastar: seastar::experimental::websocket::exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::experimental::websocket::exception Class Reference
+
+
+

Detailed Description

+

an error in handling a WebSocket connection

+
+

#include <seastar/websocket/server.hh>

+
+Inheritance diagram for seastar::experimental::websocket::exception:
+
+
+ +
+ + + + + + +

+Public Member Functions

exception (std::string_view msg)
 
+virtual const char * what () const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1experimental_1_1websocket_1_1exception.png b/master/classseastar_1_1experimental_1_1websocket_1_1exception.png new file mode 100644 index 0000000000000000000000000000000000000000..52de9bf2b9b097a1e7b142fef54b9b29a2ec8fe0 GIT binary patch literal 722 zcmeAS@N?(olHy`uVBq!ia0vp^|A9DwgBeIZoD+N)NJ#|vgt-3y4-$Xz=4)yHp$R}1 z7#}!rfVK0EJdn##666=m08|75S5Ji)F)%PCdb&7OvRF9t z-RH9Z^D^eXpUzO6JG;(gPxbt$yVDD|sZW;uf5xcoN%`v|4=+gmcy>%_zcp8V@|=S+ zcK4dD`JrG{&il8uCPQ-BR_8vxV;OvoXaD$rsz2GkSN_GZp091rpW5DLbZ%Il?tkC% ze?sMrn0i$=cEed0pQ-*Uu&Dih_$1%gClAW*{QPId*Z%mn_py?n4?`^;Rhn!zsW|ih z)?fag_fOruc*UvwB Su>qI>89ZJ6T-G@yGywn+;C);G literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1experimental_1_1websocket_1_1server-members.html b/master/classseastar_1_1experimental_1_1websocket_1_1server-members.html new file mode 100644 index 000000000..cdf1c7ca7 --- /dev/null +++ b/master/classseastar_1_1experimental_1_1websocket_1_1server-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::experimental::websocket::server Member List
+
+
+ +

This is the complete list of members for seastar::experimental::websocket::server, including all inherited members.

+ + + + + + + + +
accept(server_socket &listener) (defined in seastar::experimental::websocket::server)seastar::experimental::websocket::serverprotected
accept_one(server_socket &listener) (defined in seastar::experimental::websocket::server)seastar::experimental::websocket::serverprotected
is_handler_registered(std::string const &name) (defined in seastar::experimental::websocket::server)seastar::experimental::websocket::server
listen(socket_address addr)seastar::experimental::websocket::server
listen(socket_address addr, listen_options lo)seastar::experimental::websocket::server
register_handler(std::string &&name, handler_t handler) (defined in seastar::experimental::websocket::server)seastar::experimental::websocket::server
stop()seastar::experimental::websocket::server
+ + + + diff --git a/master/classseastar_1_1experimental_1_1websocket_1_1server.html b/master/classseastar_1_1experimental_1_1websocket_1_1server.html new file mode 100644 index 000000000..db76b661e --- /dev/null +++ b/master/classseastar_1_1experimental_1_1websocket_1_1server.html @@ -0,0 +1,118 @@ + + + + + + + +Seastar: seastar::experimental::websocket::server Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::experimental::websocket::server Class Reference
+
+
+

Detailed Description

+

a WebSocket server

+

A server capable of establishing and serving connections over WebSocket protocol.

+
+

#include <seastar/websocket/server.hh>

+ + + + + + + + + + + + + + +

+Public Member Functions

void listen (socket_address addr)
 listen for a WebSocket connection on given address More...
 
void listen (socket_address addr, listen_options lo)
 listen for a WebSocket connection on given address with custom options More...
 
future stop ()
 
+bool is_handler_registered (std::string const &name)
 
+void register_handler (std::string &&name, handler_t handler)
 
+ + + + + +

+Protected Member Functions

+void accept (server_socket &listener)
 
+future< stop_iterationaccept_one (server_socket &listener)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1experimental_1_1websocket_1_1websocket__parser-members.html b/master/classseastar_1_1experimental_1_1websocket_1_1websocket__parser-members.html new file mode 100644 index 000000000..4214b7c83 --- /dev/null +++ b/master/classseastar_1_1experimental_1_1websocket_1_1websocket__parser-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::experimental::websocket::websocket_parser Member List
+
+ + + + + diff --git a/master/classseastar_1_1experimental_1_1websocket_1_1websocket__parser.html b/master/classseastar_1_1experimental_1_1websocket_1_1websocket__parser.html new file mode 100644 index 000000000..54982af43 --- /dev/null +++ b/master/classseastar_1_1experimental_1_1websocket_1_1websocket__parser.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: seastar::experimental::websocket::websocket_parser Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::experimental::websocket::websocket_parser Class Reference
+
+
+ + + + + + + + + + + + +

+Public Member Functions

+future< consumption_result_toperator() (temporary_buffer< char > data)
 
+bool is_valid ()
 
+bool eof ()
 
+opcodes opcode () const
 
+buff_t result ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1expiring__fifo-members.html b/master/classseastar_1_1expiring__fifo-members.html new file mode 100644 index 000000000..d63669d15 --- /dev/null +++ b/master/classseastar_1_1expiring__fifo-members.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::expiring_fifo< T, OnExpiry, Clock > Member List
+
+
+ +

This is the complete list of members for seastar::expiring_fifo< T, OnExpiry, Clock >, including all inherited members.

+ + + + + + + + + + + + + + + + + +
clock typedef (defined in seastar::expiring_fifo< T, OnExpiry, Clock >)seastar::expiring_fifo< T, OnExpiry, Clock >
empty() const noexceptseastar::expiring_fifo< T, OnExpiry, Clock >inline
expiring_fifo() noexcept=default (defined in seastar::expiring_fifo< T, OnExpiry, Clock >)seastar::expiring_fifo< T, OnExpiry, Clock >
expiring_fifo(OnExpiry on_expiry) noexcept(std::is_nothrow_move_constructible_v< OnExpiry >) (defined in seastar::expiring_fifo< T, OnExpiry, Clock >)seastar::expiring_fifo< T, OnExpiry, Clock >inline
expiring_fifo(expiring_fifo &&o) noexcept (defined in seastar::expiring_fifo< T, OnExpiry, Clock >)seastar::expiring_fifo< T, OnExpiry, Clock >inline
front() noexceptseastar::expiring_fifo< T, OnExpiry, Clock >inline
front() const noexceptseastar::expiring_fifo< T, OnExpiry, Clock >inline
operator bool() const noexceptseastar::expiring_fifo< T, OnExpiry, Clock >inlineexplicit
operator=(expiring_fifo &&o) noexcept (defined in seastar::expiring_fifo< T, OnExpiry, Clock >)seastar::expiring_fifo< T, OnExpiry, Clock >inline
pop_front() noexceptseastar::expiring_fifo< T, OnExpiry, Clock >inline
push_back(const T &payload)seastar::expiring_fifo< T, OnExpiry, Clock >inline
push_back(T &&payload)seastar::expiring_fifo< T, OnExpiry, Clock >inline
push_back(T &&payload, time_point timeout)seastar::expiring_fifo< T, OnExpiry, Clock >inline
reserve(size_t size)seastar::expiring_fifo< T, OnExpiry, Clock >inline
size() const noexceptseastar::expiring_fifo< T, OnExpiry, Clock >inline
time_point typedef (defined in seastar::expiring_fifo< T, OnExpiry, Clock >)seastar::expiring_fifo< T, OnExpiry, Clock >
+ + + + diff --git a/master/classseastar_1_1expiring__fifo.html b/master/classseastar_1_1expiring__fifo.html new file mode 100644 index 000000000..503e7d616 --- /dev/null +++ b/master/classseastar_1_1expiring__fifo.html @@ -0,0 +1,409 @@ + + + + + + + +Seastar: seastar::expiring_fifo< T, OnExpiry, Clock > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::expiring_fifo< T, OnExpiry, Clock > Class Template Reference
+
+
+

Detailed Description

+
template<typename T, typename OnExpiry = dummy_expiry<T>, typename Clock = lowres_clock>
+class seastar::expiring_fifo< T, OnExpiry, Clock >

Container for elements with support for expiration of entries.

+

OnExpiry is a functor which will be called with a reference to T right before it expires. T is removed and destroyed from the container immediately after OnExpiry returns. OnExpiry callback must not modify the container, it can only modify its argument.

+

The container can only be moved before any elements are pushed.

+
+

#include <seastar/core/expiring_fifo.hh>

+ + + + + + +

+Public Types

+using clock = Clock
 
+using time_point = typename Clock::time_point
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

expiring_fifo (OnExpiry on_expiry) noexcept(std::is_nothrow_move_constructible_v< OnExpiry >)
 
expiring_fifo (expiring_fifo &&o) noexcept
 
+expiring_fifooperator= (expiring_fifo &&o) noexcept
 
bool empty () const noexcept
 
operator bool () const noexcept
 Equivalent to !empty()
 
T & front () noexcept
 
const T & front () const noexcept
 
size_t size () const noexcept
 
void reserve (size_t size)
 
void push_back (const T &payload)
 
void push_back (T &&payload)
 
void push_back (T &&payload, time_point timeout)
 
void pop_front () noexcept
 
+

Member Function Documentation

+ +

◆ empty()

+ +
+
+
+template<typename T , typename OnExpiry = dummy_expiry<T>, typename Clock = lowres_clock>
+ + + + + +
+ + + + + + + +
bool seastar::expiring_fifo< T, OnExpiry, Clock >::empty () const
+
+inlinenoexcept
+
+

Checks if container contains any elements

+
Note
Inside OnExpiry callback, the expired element is still contained.
+
Returns
true if and only if there are any elements contained.
+ +
+
+ +

◆ front() [1/2]

+ +
+
+
+template<typename T , typename OnExpiry = dummy_expiry<T>, typename Clock = lowres_clock>
+ + + + + +
+ + + + + + + +
const T & seastar::expiring_fifo< T, OnExpiry, Clock >::front () const
+
+inlinenoexcept
+
+

Returns a reference to the element in the front. Valid only when !empty().

+ +
+
+ +

◆ front() [2/2]

+ +
+
+
+template<typename T , typename OnExpiry = dummy_expiry<T>, typename Clock = lowres_clock>
+ + + + + +
+ + + + + + + +
T & seastar::expiring_fifo< T, OnExpiry, Clock >::front ()
+
+inlinenoexcept
+
+

Returns a reference to the element in the front. Valid only when !empty().

+ +
+
+ +

◆ pop_front()

+ +
+
+
+template<typename T , typename OnExpiry = dummy_expiry<T>, typename Clock = lowres_clock>
+ + + + + +
+ + + + + + + +
void seastar::expiring_fifo< T, OnExpiry, Clock >::pop_front ()
+
+inlinenoexcept
+
+

Removes the element at the front. Can be called only if !empty().

+ +
+
+ +

◆ push_back() [1/3]

+ +
+
+
+template<typename T , typename OnExpiry = dummy_expiry<T>, typename Clock = lowres_clock>
+ + + + + +
+ + + + + + + + +
void seastar::expiring_fifo< T, OnExpiry, Clock >::push_back (const T & payload)
+
+inline
+
+

Adds element to the back of the queue. The element will never expire.

+ +
+
+ +

◆ push_back() [2/3]

+ +
+
+
+template<typename T , typename OnExpiry = dummy_expiry<T>, typename Clock = lowres_clock>
+ + + + + +
+ + + + + + + + +
void seastar::expiring_fifo< T, OnExpiry, Clock >::push_back (T && payload)
+
+inline
+
+

Adds element to the back of the queue. The element will never expire.

+ +
+
+ +

◆ push_back() [3/3]

+ +
+
+
+template<typename T , typename OnExpiry = dummy_expiry<T>, typename Clock = lowres_clock>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::expiring_fifo< T, OnExpiry, Clock >::push_back (T && payload,
time_point timeout 
)
+
+inline
+
+

Adds element to the back of the queue. The element will expire when timeout is reached, unless it is time_point::max(), in which case it never expires.

+ +
+
+ +

◆ reserve()

+ +
+
+
+template<typename T , typename OnExpiry = dummy_expiry<T>, typename Clock = lowres_clock>
+ + + + + +
+ + + + + + + + +
void seastar::expiring_fifo< T, OnExpiry, Clock >::reserve (size_t size)
+
+inline
+
+

Reserves storage in the container for at least 'size' elements. Note that expired elements may also take space when they are not in the front of the queue.

+

Doesn't give any guarantees about exception safety of subsequent push_back().

+ +
+
+ +

◆ size()

+ +
+
+
+template<typename T , typename OnExpiry = dummy_expiry<T>, typename Clock = lowres_clock>
+ + + + + +
+ + + + + + + +
size_t seastar::expiring_fifo< T, OnExpiry, Clock >::size () const
+
+inlinenoexcept
+
+

Returns the number of elements contained.

+
Note
Expired elements are not contained. Expiring element is still contained when OnExpiry is called.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1fair__group-members.html b/master/classseastar_1_1fair__group-members.html new file mode 100644 index 000000000..86cadd176 --- /dev/null +++ b/master/classseastar_1_1fair__group-members.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::fair_group Member List
+
+
+ +

This is the complete list of members for seastar::fair_group, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
capacity_deficiency(capacity_t from) const noexcept (defined in seastar::fair_group)seastar::fair_group
capacity_duration(capacity_t cap) const noexcept (defined in seastar::fair_group)seastar::fair_groupinline
capacity_t typedef (defined in seastar::fair_group)seastar::fair_group
capacity_tokens(capacity_t cap) noexcept (defined in seastar::fair_group)seastar::fair_groupinlinestatic
clock_type typedef (defined in seastar::fair_group)seastar::fair_group
fair_group(config cfg, unsigned nr_queues) (defined in seastar::fair_group)seastar::fair_groupexplicit
fair_group(fair_group &&)=delete (defined in seastar::fair_group)seastar::fair_group
fixed_point_factor (defined in seastar::fair_group)seastar::fair_groupstatic
grab_capacity(capacity_t cap) noexcept (defined in seastar::fair_group)seastar::fair_group
maximum_capacity() const noexcept (defined in seastar::fair_group)seastar::fair_groupinline
maybe_replenish_capacity(clock_type::time_point &local_ts) noexcept (defined in seastar::fair_group)seastar::fair_group
per_tick_grab_threshold() const noexcept (defined in seastar::fair_group)seastar::fair_groupinline
rate_limit_duration() const noexcept (defined in seastar::fair_group)seastar::fair_groupinline
rate_resolution typedef (defined in seastar::fair_group)seastar::fair_group
replenish_capacity(clock_type::time_point now) noexcept (defined in seastar::fair_group)seastar::fair_group
replenished_ts() const noexcept (defined in seastar::fair_group)seastar::fair_groupinline
token_bucket() const noexcept (defined in seastar::fair_group)seastar::fair_groupinline
token_bucket_t typedef (defined in seastar::fair_group)seastar::fair_group
tokens_capacity(double tokens) noexcept (defined in seastar::fair_group)seastar::fair_groupinlinestatic
+ + + + diff --git a/master/classseastar_1_1fair__group.html b/master/classseastar_1_1fair__group.html new file mode 100644 index 000000000..098201e63 --- /dev/null +++ b/master/classseastar_1_1fair__group.html @@ -0,0 +1,214 @@ + + + + + + + +Seastar: seastar::fair_group Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+

Detailed Description

+

Group of queues class.

+

This is a fair group. It's attached by one or mode fair queues. On machines having the big* amount of shards, queues use the group to borrow/lend the needed capacity for requests dispatching.

+
    +
  • Big means that when all shards sumbit requests alltogether the disk is unable to dispatch them efficiently. The inability can be of two kinds – either disk cannot cope with the number of arriving requests, or the total size of the data withing the given time frame exceeds the disk throughput.
  • +
+
+

#include <seastar/core/fair_queue.hh>

+ + + + +

+Classes

struct  config
 
+ + + + + + + + + +

+Public Types

+using capacity_t = fair_queue_entry::capacity_t
 
+using clock_type = std::chrono::steady_clock
 
+using rate_resolution = std::milli
 
+using token_bucket_t = internal::shared_token_bucket< capacity_t, rate_resolution, internal::capped_release::no >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+auto capacity_duration (capacity_t cap) const noexcept
 
fair_group (config cfg, unsigned nr_queues)
 
fair_group (fair_group &&)=delete
 
+capacity_t maximum_capacity () const noexcept
 
+capacity_t per_tick_grab_threshold () const noexcept
 
+capacity_t grab_capacity (capacity_t cap) noexcept
 
+clock_type::time_point replenished_ts () const noexcept
 
+void replenish_capacity (clock_type::time_point now) noexcept
 
+void maybe_replenish_capacity (clock_type::time_point &local_ts) noexcept
 
+capacity_t capacity_deficiency (capacity_t from) const noexcept
 
+std::chrono::duration< double > rate_limit_duration () const noexcept
 
+const token_bucket_t & token_bucket () const noexcept
 
+ + + + + +

+Static Public Member Functions

+static double capacity_tokens (capacity_t cap) noexcept
 
+static capacity_t tokens_capacity (double tokens) noexcept
 
+ + + +

+Static Public Attributes

+static constexpr float fixed_point_factor = float(1 << 24)
 
+

Class Documentation

+ +

◆ seastar::fair_group::config

+ +
+
+ + + + +
struct seastar::fair_group::config
+
+ + + + + + + + + + + + + + +
Class Members
+sstring +label +
+double +limit_min_tokens +
+double +min_tokens +
+duration< double > +rate_limit_duration +
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1fair__queue-members.html b/master/classseastar_1_1fair__queue-members.html new file mode 100644 index 000000000..d92d44234 --- /dev/null +++ b/master/classseastar_1_1fair__queue-members.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::fair_queue Member List
+
+
+ +

This is the complete list of members for seastar::fair_queue, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
capacity_t typedef (defined in seastar::fair_queue)seastar::fair_queue
class_id typedef (defined in seastar::fair_queue)seastar::fair_queue
dispatch_requests(std::function< void(fair_queue_entry &)> cb)seastar::fair_queue
fair_queue(fair_group &shared, config cfg)seastar::fair_queueexplicit
fair_queue(fair_queue &&)=delete (defined in seastar::fair_queue)seastar::fair_queue
label() const noexcept (defined in seastar::fair_queue)seastar::fair_queueinline
maximum_capacity() const noexcept (defined in seastar::fair_queue)seastar::fair_queueinline
metrics(class_id c) (defined in seastar::fair_queue)seastar::fair_queue
next_pending_aio() const noexcept (defined in seastar::fair_queue)seastar::fair_queue
notify_request_cancelled(fair_queue_entry &ent) noexcept (defined in seastar::fair_queue)seastar::fair_queue
notify_request_finished(fair_queue_entry::capacity_t cap) noexceptseastar::fair_queue
plug_class(class_id c) noexcept (defined in seastar::fair_queue)seastar::fair_queue
queue(class_id c, fair_queue_entry &ent) noexceptseastar::fair_queue
register_priority_class(class_id c, uint32_t shares)seastar::fair_queue
resources_currently_executing() constseastar::fair_queue
resources_currently_waiting() constseastar::fair_queue
signed_capacity_t typedef (defined in seastar::fair_queue)seastar::fair_queue
tokens_capacity(double tokens) const noexcept (defined in seastar::fair_queue)seastar::fair_queueinline
unplug_class(class_id c) noexcept (defined in seastar::fair_queue)seastar::fair_queue
unregister_priority_class(class_id c)seastar::fair_queue
update_shares_for_class(class_id c, uint32_t new_shares) (defined in seastar::fair_queue)seastar::fair_queue
~fair_queue() (defined in seastar::fair_queue)seastar::fair_queue
+ + + + diff --git a/master/classseastar_1_1fair__queue.html b/master/classseastar_1_1fair__queue.html new file mode 100644 index 000000000..9b93dde3e --- /dev/null +++ b/master/classseastar_1_1fair__queue.html @@ -0,0 +1,402 @@ + + + + + + + +Seastar: seastar::fair_queue Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::fair_queue Class Reference
+
+
+

Detailed Description

+

Fair queuing class.

+

This is a fair queue, allowing multiple request producers to queue requests that will then be served proportionally to their classes' shares.

+

To each request, a weight can also be associated. A request of weight 1 will consume 1 share. Higher weights for a request will consume a proportionally higher amount of shares.

+

The user of this interface is expected to register multiple priority_class_data objects, which will each have a shares attribute.

+

Internally, each priority class may keep a separate queue of requests. Requests pertaining to a class can go through even if they are over its share limit, provided that the other classes have empty queues.

+

When the classes that lag behind start seeing requests, the fair queue will serve them first, until balance is restored. This balancing is expected to happen within a certain time window that obeys an exponential decay.

+
+

#include <seastar/core/fair_queue.hh>

+ + + + + +

+Classes

struct  config
 Fair Queue configuration structure. More...
 
+ + + + + + + +

+Public Types

+using class_id = unsigned int
 
+using capacity_t = fair_group::capacity_t
 
+using signed_capacity_t = std::make_signed_t< capacity_t >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 fair_queue (fair_group &shared, config cfg)
 
fair_queue (fair_queue &&)=delete
 
+sstring label () const noexcept
 
void register_priority_class (class_id c, uint32_t shares)
 
void unregister_priority_class (class_id c)
 
+void update_shares_for_class (class_id c, uint32_t new_shares)
 
fair_queue_ticket resources_currently_waiting () const
 
fair_queue_ticket resources_currently_executing () const
 
+capacity_t tokens_capacity (double tokens) const noexcept
 
+capacity_t maximum_capacity () const noexcept
 
void queue (class_id c, fair_queue_entry &ent) noexcept
 
+void plug_class (class_id c) noexcept
 
+void unplug_class (class_id c) noexcept
 
void notify_request_finished (fair_queue_entry::capacity_t cap) noexcept
 
+void notify_request_cancelled (fair_queue_entry &ent) noexcept
 
+void dispatch_requests (std::function< void(fair_queue_entry &)> cb)
 Try to execute new requests if there is capacity left in the queue.
 
+clock_type::time_point next_pending_aio () const noexcept
 
+std::vector< seastar::metrics::impl::metric_definition_implmetrics (class_id c)
 
+

Class Documentation

+ +

◆ seastar::fair_queue::config

+ +
+
+ + + + +
struct seastar::fair_queue::config
+
+ + + + + + + + +
Class Members
+sstring +label +
+microseconds +tau +
+ +
+
+

Constructor & Destructor Documentation

+ +

◆ fair_queue()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
seastar::fair_queue::fair_queue (fair_groupshared,
config cfg 
)
+
+explicit
+
+

Constructs a fair queue with configuration parameters cfg.

+
Parameters
+ + +
cfgan instance of the class config
+
+
+ +
+
+

Member Function Documentation

+ +

◆ notify_request_finished()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::fair_queue::notify_request_finished (fair_queue_entry::capacity_t cap)
+
+noexcept
+
+

Notifies that ont request finished

Parameters
+ + +
descan instance of fair_queue_ticket structure describing the request that just finished.
+
+
+ +
+
+ +

◆ queue()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::fair_queue::queue (class_id c,
fair_queue_entryent 
)
+
+noexcept
+
+

Queue the entry ent through this class' fair_queue

+

The user of this interface is supposed to call notify_requests_finished when the request finishes executing - regardless of success or failure.

+ +
+
+ +

◆ register_priority_class()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void seastar::fair_queue::register_priority_class (class_id c,
uint32_t shares 
)
+
+

Registers a priority class against this fair queue.

+
Parameters
+ + +
shareshow many shares to create this class with
+
+
+ +
+
+ +

◆ resources_currently_executing()

+ +
+
+ + + + + + + +
fair_queue_ticket seastar::fair_queue::resources_currently_executing () const
+
+
Returns
the amount of resources (weight, size) currently executing
+ +
+
+ +

◆ resources_currently_waiting()

+ +
+
+ + + + + + + +
fair_queue_ticket seastar::fair_queue::resources_currently_waiting () const
+
+
Returns
how much resources (weight, size) are currently queued for all classes.
+ +
+
+ +

◆ unregister_priority_class()

+ +
+
+ + + + + + + + +
void seastar::fair_queue::unregister_priority_class (class_id c)
+
+

Unregister a priority class.

+

It is illegal to unregister a priority class that still have pending requests.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1fair__queue__entry-members.html b/master/classseastar_1_1fair__queue__entry-members.html new file mode 100644 index 000000000..9b25e9757 --- /dev/null +++ b/master/classseastar_1_1fair__queue__entry-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::fair_queue_entry Member List
+
+
+ +

This is the complete list of members for seastar::fair_queue_entry, including all inherited members.

+ + + + + +
capacity() const noexcept (defined in seastar::fair_queue_entry)seastar::fair_queue_entryinline
capacity_t typedef (defined in seastar::fair_queue_entry)seastar::fair_queue_entry
container_list_t typedef (defined in seastar::fair_queue_entry)seastar::fair_queue_entry
fair_queue_entry(capacity_t c) noexcept (defined in seastar::fair_queue_entry)seastar::fair_queue_entryinline
+ + + + diff --git a/master/classseastar_1_1fair__queue__entry.html b/master/classseastar_1_1fair__queue__entry.html new file mode 100644 index 000000000..1d9309d33 --- /dev/null +++ b/master/classseastar_1_1fair__queue__entry.html @@ -0,0 +1,105 @@ + + + + + + + +Seastar: seastar::fair_queue_entry Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::fair_queue_entry Class Reference
+
+
+ + + + + + +

+Public Types

+using capacity_t = uint64_t
 
+using container_list_t = bi::slist< fair_queue_entry, bi::constant_time_size< false >, bi::cache_last< true >, bi::member_hook< fair_queue_entry, bi::slist_member_hook<>, &fair_queue_entry::_hook > >
 
+ + + + + +

+Public Member Functions

fair_queue_entry (capacity_t c) noexcept
 
+capacity_t capacity () const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1fair__queue__ticket-members.html b/master/classseastar_1_1fair__queue__ticket-members.html new file mode 100644 index 000000000..ff4c8ee75 --- /dev/null +++ b/master/classseastar_1_1fair__queue__ticket-members.html @@ -0,0 +1,94 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::fair_queue_ticket Member List
+
+
+ +

This is the complete list of members for seastar::fair_queue_ticket, including all inherited members.

+ + + + + + + + + + + + + +
fair_queue_ticket(uint32_t weight, uint32_t size) noexceptseastar::fair_queue_ticket
fair_queue_ticket() noexcept (defined in seastar::fair_queue_ticket)seastar::fair_queue_ticketinline
is_non_zero() const noexcept (defined in seastar::fair_queue_ticket)seastar::fair_queue_ticket
normalize(fair_queue_ticket axis) const noexceptseastar::fair_queue_ticket
operator bool() const noexceptseastar::fair_queue_ticketexplicit
operator+(fair_queue_ticket desc) const noexcept (defined in seastar::fair_queue_ticket)seastar::fair_queue_ticket
operator+=(fair_queue_ticket desc) noexceptseastar::fair_queue_ticket
operator-(fair_queue_ticket desc) const noexcept (defined in seastar::fair_queue_ticket)seastar::fair_queue_ticket
operator-=(fair_queue_ticket desc) noexceptseastar::fair_queue_ticket
operator<< (defined in seastar::fair_queue_ticket)seastar::fair_queue_ticketfriend
operator==(const fair_queue_ticket &desc) const noexceptseastar::fair_queue_ticket
wrapping_difference (defined in seastar::fair_queue_ticket)seastar::fair_queue_ticketfriend
+ + + + diff --git a/master/classseastar_1_1fair__queue__ticket.html b/master/classseastar_1_1fair__queue__ticket.html new file mode 100644 index 000000000..1f4ad9aaa --- /dev/null +++ b/master/classseastar_1_1fair__queue__ticket.html @@ -0,0 +1,319 @@ + + + + + + + +Seastar: seastar::fair_queue_ticket Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::fair_queue_ticket Class Reference
+
+
+

Detailed Description

+

describes a request that passes through the fair_queue.

+

A ticket is specified by a weight and a size. For example, one can specify a request of weight 1 and size 16kB. If the fair_queue accepts one such request per second, it will sustain 1 IOPS at 16kB/s bandwidth.

+
+

#include <seastar/core/fair_queue.hh>

+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 fair_queue_ticket (uint32_t weight, uint32_t size) noexcept
 
+fair_queue_ticket operator+ (fair_queue_ticket desc) const noexcept
 
+fair_queue_ticket operator- (fair_queue_ticket desc) const noexcept
 
fair_queue_ticketoperator+= (fair_queue_ticket desc) noexcept
 
fair_queue_ticketoperator-= (fair_queue_ticket desc) noexcept
 
bool operator== (const fair_queue_ticket &desc) const noexcept
 
 operator bool () const noexcept
 
+bool is_non_zero () const noexcept
 
float normalize (fair_queue_ticket axis) const noexcept
 
+

Constructor & Destructor Documentation

+ +

◆ fair_queue_ticket()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
seastar::fair_queue_ticket::fair_queue_ticket (uint32_t weight,
uint32_t size 
)
+
+noexcept
+
+

Constructs a fair_queue_ticket with a given weight and a given size

+
Parameters
+ + + +
weightthe weight of the request
sizethe size of the request
+
+
+ +
+
+

Member Function Documentation

+ +

◆ normalize()

+ +
+
+ + + + + +
+ + + + + + + + +
float seastar::fair_queue_ticket::normalize (fair_queue_ticket axis) const
+
+noexcept
+
+
Returns
the normalized value of this fair_queue_ticket along a base axis
+

The normalization function itself is an implementation detail, but one can expect either weight or size to have more or less relative importance depending on which of the dimensions in the denominator is relatively higher. For example, given this request a, and two other requests b and c, such that that c has the same weight but a higher size than b, one can expect the size component of this request to play a larger role.

+

It is legal for the numerator to have one of the quantities set to zero, in which case only the other quantity is taken into consideration.

+

It is however not legal for the axis to have any quantity set to zero.

Parameters
+ + +
axisanother fair_queue_ticket to be used as a a base vector against which to normalize this fair_queue_ticket.
+
+
+ +
+
+ +

◆ operator bool()

+ +
+
+ + + + + +
+ + + + + + + +
seastar::fair_queue_ticket::operator bool () const
+
+explicitnoexcept
+
+
Returns
true if the fair_queue_ticket represents a non-zero quantity.
+

For a fair_queue ticket to be non-zero, at least one of its represented quantities need to be non-zero

+ +
+
+ +

◆ operator+=()

+ +
+
+ + + + + +
+ + + + + + + + +
fair_queue_ticket & seastar::fair_queue_ticket::operator+= (fair_queue_ticket desc)
+
+noexcept
+
+

Increase the quantity represented in this ticket by the amount represented by desc

Parameters
+ + +
descanother fair_queue_ticket whose weight and size will be added to this one
+
+
+ +
+
+ +

◆ operator-=()

+ +
+
+ + + + + +
+ + + + + + + + +
fair_queue_ticket & seastar::fair_queue_ticket::operator-= (fair_queue_ticket desc)
+
+noexcept
+
+

Decreases the quantity represented in this ticket by the amount represented by desc

Parameters
+ + +
descanother fair_queue_ticket whose weight and size will be decremented from this one
+
+
+ +
+
+ +

◆ operator==()

+ +
+
+ + + + + +
+ + + + + + + + +
bool seastar::fair_queue_ticket::operator== (const fair_queue_ticketdesc) const
+
+noexcept
+
+

Checks if the tickets fully equals to another one

Parameters
+ + +
descanother fair_queue_ticket to compare with
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1file-members.html b/master/classseastar_1_1file-members.html new file mode 100644 index 000000000..a0857b44d --- /dev/null +++ b/master/classseastar_1_1file-members.html @@ -0,0 +1,124 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::file Member List
+
+
+ +

This is the complete list of members for seastar::file, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
allocate(uint64_t position, uint64_t length) noexceptseastar::file
close() noexceptseastar::file
discard(uint64_t offset, uint64_t length) noexceptseastar::file
disk_overwrite_dma_alignment() const noexceptseastar::fileinline
disk_read_dma_alignment() const noexceptseastar::fileinline
disk_read_max_length() const noexceptseastar::fileinline
disk_write_dma_alignment() const noexceptseastar::fileinline
disk_write_max_length() const noexceptseastar::fileinline
dma_read(uint64_t aligned_pos, CharType *aligned_buffer, size_t aligned_len, io_intent *intent=nullptr) noexceptseastar::fileinline
dma_read(uint64_t pos, size_t len, io_intent *intent=nullptr) noexceptseastar::fileinline
dma_read(uint64_t pos, std::vector< iovec > iov, io_intent *intent=nullptr) noexceptseastar::fileinline
dma_read_bulk(uint64_t offset, size_t range_size, io_intent *intent=nullptr) noexceptseastar::fileinline
dma_read_exactly(uint64_t pos, size_t len, io_intent *intent=nullptr) noexceptseastar::fileinline
dma_write(uint64_t pos, const CharType *buffer, size_t len, io_intent *intent=nullptr) noexceptseastar::fileinline
dma_write(uint64_t pos, std::vector< iovec > iov, io_intent *intent=nullptr) noexceptseastar::fileinline
dup()seastar::file
experimental_list_directory()seastar::file
fcntl(int op, uintptr_t arg=0UL) noexceptseastar::file
fcntl_short(int op, uintptr_t arg=0UL) noexceptseastar::file
file() noexceptseastar::fileinline
file(shared_ptr< file_impl > impl) noexcept (defined in seastar::file)seastar::fileinline
file(file_handle &&handle) noexceptseastar::fileexplicit
file(const file &x)=defaultseastar::file
file(file &&x) noexceptseastar::fileinline
flush() noexceptseastar::file
get_file_lifetime_hint() noexceptseastar::file
get_inode_lifetime_hint() noexceptseastar::file
ioctl(uint64_t cmd, void *argp) noexceptseastar::file
ioctl_short(uint64_t cmd, void *argp) noexceptseastar::file
list_directory(std::function< future<>(directory_entry de)> next)seastar::file
memory_dma_alignment() const noexceptseastar::fileinline
open_directory(std::string_view name) noexceptseastar::filerelated
open_file_dma(std::string_view name, open_flags flags) noexceptseastar::filerelated
open_file_dma(std::string_view name, open_flags flags, file_open_options options) noexceptseastar::filerelated
operator bool() const noexceptseastar::fileinlineexplicit
operator=(const file &x) noexcept=defaultseastar::file
operator=(file &&x) noexcept=defaultseastar::file
set_file_lifetime_hint(uint64_t hint) noexceptseastar::file
set_inode_lifetime_hint(uint64_t hint) noexceptseastar::file
size() const noexceptseastar::file
stat() noexceptseastar::file
truncate(uint64_t length) noexceptseastar::file
+ + + + diff --git a/master/classseastar_1_1file.html b/master/classseastar_1_1file.html new file mode 100644 index 000000000..8920cda1b --- /dev/null +++ b/master/classseastar_1_1file.html @@ -0,0 +1,1290 @@ + + + + + + + +Seastar: seastar::file Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+

Detailed Description

+

A data file on persistent storage.

+

File objects represent uncached, unbuffered files. As such great care must be taken to cache data at the application layer; neither seastar nor the OS will cache these file.

+

Data is transferred using direct memory access (DMA). This imposes restrictions on file offsets and data pointers. The former must be aligned on a 4096 byte boundary, while a 512 byte boundary suffices for the latter.

+
Examples
file_demo.cc.
+
+
+

#include <seastar/core/file.hh>

+ + + + +

+Classes

class  eof_error
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 file () noexcept
 
file (shared_ptr< file_impl > impl) noexcept
 
file (file_handle &&handle) noexcept
 Constructs a file object from a file_handle obtained from another shard.
 
 operator bool () const noexcept
 
 file (const file &x)=default
 
file (file &&x) noexcept
 Moves a file object.
 
fileoperator= (const file &x) noexcept=default
 
+fileoperator= (file &&x) noexcept=default
 Moves assigns a file object.
 
+uint64_t disk_read_dma_alignment () const noexcept
 Alignment requirement for file offsets (for reads)
 
+uint64_t disk_write_dma_alignment () const noexcept
 Alignment requirement for file offsets (for writes)
 
uint64_t disk_overwrite_dma_alignment () const noexcept
 
+uint64_t memory_dma_alignment () const noexcept
 Alignment requirement for data buffers.
 
size_t disk_read_max_length () const noexcept
 
size_t disk_write_max_length () const noexcept
 
template<typename CharType >
future< size_t > dma_read (uint64_t aligned_pos, CharType *aligned_buffer, size_t aligned_len, io_intent *intent=nullptr) noexcept
 
template<typename CharType >
future< temporary_buffer< CharType > > dma_read (uint64_t pos, size_t len, io_intent *intent=nullptr) noexcept
 
template<typename CharType >
future< temporary_buffer< CharType > > dma_read_exactly (uint64_t pos, size_t len, io_intent *intent=nullptr) noexcept
 
future< size_t > dma_read (uint64_t pos, std::vector< iovec > iov, io_intent *intent=nullptr) noexcept
 
template<typename CharType >
future< size_t > dma_write (uint64_t pos, const CharType *buffer, size_t len, io_intent *intent=nullptr) noexcept
 
future< size_t > dma_write (uint64_t pos, std::vector< iovec > iov, io_intent *intent=nullptr) noexcept
 
future flush () noexcept
 
+future< struct stat > stat () noexcept
 Returns stat information about the file.
 
+future truncate (uint64_t length) noexcept
 Truncates the file to a specified length.
 
future allocate (uint64_t position, uint64_t length) noexcept
 
future discard (uint64_t offset, uint64_t length) noexcept
 
future< int > ioctl (uint64_t cmd, void *argp) noexcept
 
future< int > ioctl_short (uint64_t cmd, void *argp) noexcept
 
future< int > fcntl (int op, uintptr_t arg=0UL) noexcept
 
future< int > fcntl_short (int op, uintptr_t arg=0UL) noexcept
 
future set_file_lifetime_hint (uint64_t hint) noexcept
 
future set_inode_lifetime_hint (uint64_t hint) noexcept
 
future< uint64_t > get_file_lifetime_hint () noexcept
 
future< uint64_t > get_inode_lifetime_hint () noexcept
 
+future< uint64_t > size () const noexcept
 Gets the file size.
 
future close () noexcept
 
+subscription< directory_entrylist_directory (std::function< future<>(directory_entry de)> next)
 Returns a directory listing, given that this file object is a directory.
 
+coroutine::experimental::generator< directory_entryexperimental_list_directory ()
 Returns a directory listing, given that this file object is a directory.
 
template<typename CharType >
future< temporary_buffer< CharType > > dma_read_bulk (uint64_t offset, size_t range_size, io_intent *intent=nullptr) noexcept
 
file_handle dup ()
 Creates a handle that can be transported across shards. More...
 
+ + + + + + + + +

+Related Functions

(Note that these are not member functions.)

+
future< fileopen_file_dma (std::string_view name, open_flags flags) noexcept
 
future< fileopen_file_dma (std::string_view name, open_flags flags, file_open_options options) noexcept
 
future< fileopen_directory (std::string_view name) noexcept
 
+

Constructor & Destructor Documentation

+ +

◆ file() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
seastar::file::file ()
+
+inlinenoexcept
+
+

Default constructor constructs an uninitialized file object.

+

A default constructor is useful for the common practice of declaring a variable, and only assigning to it later. The uninitialized file must not be used, or undefined behavior will result (currently, a null pointer dereference).

+

One can check whether a file object is in uninitialized state with operator bool(); One can reset a file back to uninitialized state by assigning file() to it.

+ +
+
+ +

◆ file() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
seastar::file::file (const filex)
+
+default
+
+

Copies a file object. The new and old objects refer to the same underlying file.

+
Parameters
+ + +
xfile object to be copied
+
+
+ +
+
+

Member Function Documentation

+ +

◆ allocate()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::file::allocate (uint64_t position,
uint64_t length 
)
+
+noexcept
+
+

Preallocate disk blocks for a specified byte range.

+

Requests the file system to allocate disk blocks to back the specified range (length bytes starting at position). The range may be outside the current file size; the blocks can then be used when appending to the file.

+
Parameters
+ + + +
positionbeginning of the range at which to allocate blocks.
lengthlength of range to allocate.
+
+
+
Returns
future that becomes ready when the operation completes.
+ +
+
+ +

◆ close()

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::file::close ()
+
+noexcept
+
+

Closes the file.

+

Flushes any pending operations and release any resources associated with the file (except for stable storage). Resets the file object back to uninitialized state as if by assigning file() to it.

+
Note
close() never fails. It just reports errors and swallows them. To ensure file data reaches stable storage, you must call flush() before calling close().
+ +
+
+ +

◆ discard()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::file::discard (uint64_t offset,
uint64_t length 
)
+
+noexcept
+
+

Discard unneeded data from the file.

+

The discard operation tells the file system that a range of offsets (which be aligned) is no longer needed and can be reused.

+ +
+
+ +

◆ disk_overwrite_dma_alignment()

+ +
+
+ + + + + +
+ + + + + + + +
uint64_t seastar::file::disk_overwrite_dma_alignment () const
+
+inlinenoexcept
+
+

Alignment requirement for file offsets (for overwrites).

+

Specifies the minimum alignment for disk offsets for overwrites (writes to a location that was previously written). This can be smaller than disk_write_dma_alignment(), allowing a reduction in disk bandwidth used.

+ +
+
+ +

◆ disk_read_max_length()

+ +
+
+ + + + + +
+ + + + + + + +
size_t seastar::file::disk_read_max_length () const
+
+inlinenoexcept
+
+

Recommended limit for read request size. Submitting a larger request will not cause any error, but may result in poor latencies for this and any other concurrent requests

+ +
+
+ +

◆ disk_write_max_length()

+ +
+
+ + + + + +
+ + + + + + + +
size_t seastar::file::disk_write_max_length () const
+
+inlinenoexcept
+
+

Recommended limit for write request size. Submitting a larger request will not cause any error, but may result in poor latencies for this and any other concurrent requests

+ +
+
+ +

◆ dma_read() [1/3]

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
future< size_t > seastar::file::dma_read (uint64_t aligned_pos,
CharType * aligned_buffer,
size_t aligned_len,
io_intentintent = nullptr 
)
+
+inlinenoexcept
+
+

Perform a single DMA read operation.

+
Parameters
+ + + + + +
aligned_posoffset to begin reading at (should be aligned)
aligned_bufferoutput buffer (should be aligned)
aligned_lennumber of bytes to read (should be aligned)
intentthe IO intention confirmation (seastar::io_intent)
+
+
+

Alignment is HW dependent but use 4KB alignment to be on the safe side as explained above.

+
Returns
number of bytes actually read or exceptional future in case of I/O error
+
Examples
file_demo.cc.
+
+ +
+
+ +

◆ dma_read() [2/3]

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< temporary_buffer< CharType > > seastar::file::dma_read (uint64_t pos,
size_t len,
io_intentintent = nullptr 
)
+
+inlinenoexcept
+
+

Read the requested amount of bytes starting from the given offset.

+
Parameters
+ + + + +
posoffset to begin reading from
lennumber of bytes to read
intentthe IO intention confirmation (seastar::io_intent)
+
+
+
Returns
temporary buffer containing the requested data. or exceptional future in case of I/O error
+

This function doesn't require any alignment for both "pos" and "len"

+
Note
size of the returned buffer may be smaller than "len" if EOF is reached or in case of I/O error.
+ +
+
+ +

◆ dma_read() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< size_t > seastar::file::dma_read (uint64_t pos,
std::vector< iovec > iov,
io_intentintent = nullptr 
)
+
+inlinenoexcept
+
+

Performs a DMA read into the specified iovec.

+
Parameters
+ + + + +
posoffset to read from. Must be aligned to disk_read_dma_alignment.
iovvector of address/size pairs to read into. Addresses must be aligned.
intentthe IO intention confirmation (seastar::io_intent)
+
+
+
Returns
a future representing the number of bytes actually read. A short read may happen due to end-of-file or an I/O error.
+ +
+
+ +

◆ dma_read_bulk()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< temporary_buffer< CharType > > seastar::file::dma_read_bulk (uint64_t offset,
size_t range_size,
io_intentintent = nullptr 
)
+
+inlinenoexcept
+
+

Read a data bulk containing the provided addresses range that starts at the given offset and ends at either the address aligned to dma_alignment (4KB) or at the file end.

+
Parameters
+ + + + +
offsetstarting address of the range the read bulk should contain
range_sizesize of the addresses range
intentthe IO intention confirmation (seastar::io_intent)
+
+
+
Returns
temporary buffer containing the read data bulk. or exceptional future holding: system_error exception in case of I/O error or eof_error when "offset" is beyond EOF.
+ +
+
+ +

◆ dma_read_exactly()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< temporary_buffer< CharType > > seastar::file::dma_read_exactly (uint64_t pos,
size_t len,
io_intentintent = nullptr 
)
+
+inlinenoexcept
+
+

Read the exact amount of bytes.

+
Parameters
+ + + + +
posoffset in a file to begin reading from
lennumber of bytes to read
intentthe IO intention confirmation (seastar::io_intent)
+
+
+
Returns
temporary buffer containing the read data or exceptional future in case an error, holding: end_of_file_error if EOF is reached, file_io_error or std::system_error in case of I/O error.
+ +
+
+ +

◆ dma_write() [1/2]

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
future< size_t > seastar::file::dma_write (uint64_t pos,
const CharType * buffer,
size_t len,
io_intentintent = nullptr 
)
+
+inlinenoexcept
+
+

Performs a DMA write from the specified buffer.

+
Parameters
+ + + + + +
posoffset to write into. Must be aligned to disk_write_dma_alignment.
bufferaligned address of buffer to read from. Buffer must exists until the future is made ready.
lennumber of bytes to write. Must be aligned.
intentthe IO intention confirmation (seastar::io_intent)
+
+
+
Returns
a future representing the number of bytes actually written. A short write may happen due to an I/O error.
+
Examples
file_demo.cc.
+
+ +
+
+ +

◆ dma_write() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< size_t > seastar::file::dma_write (uint64_t pos,
std::vector< iovec > iov,
io_intentintent = nullptr 
)
+
+inlinenoexcept
+
+

Performs a DMA write to the specified iovec.

+
Parameters
+ + + + +
posoffset to write into. Must be aligned to disk_write_dma_alignment.
iovvector of address/size pairs to write from. Addresses must be aligned.
intentthe IO intention confirmation (seastar::io_intent)
+
+
+
Returns
a future representing the number of bytes actually written. A short write may happen due to an I/O error.
+ +
+
+ +

◆ dup()

+ +
+
+ + + + + + + +
file_handle seastar::file::dup ()
+
+ +

Creates a handle that can be transported across shards.

+

Creates a handle that can be transported across shards, and then used to create a new shard-local file object that refers to the same on-disk file.

+
Note
Use on read-only files.
+ +
+
+ +

◆ fcntl()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future< int > seastar::file::fcntl (int op,
uintptr_t arg = 0UL 
)
+
+noexcept
+
+

Generic fcntl syscall support for special file handling.

+

fcntl performs the operation specified by 'op' field on the file. Some of the use cases can be - setting file status flags, advisory record locking, managing signals, managing file leases or write hints etc. Refer fcntl(2) man page for more details.

+
Parameters
+ + + +
opthe operation to be executed
argthe optional argument
+
+
+
Returns
a future containing the return value if any, or an exceptional future if the operation has failed
+ +
+
+ +

◆ fcntl_short()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future< int > seastar::file::fcntl_short (int op,
uintptr_t arg = 0UL 
)
+
+noexcept
+
+

Performs a 'short' fcntl syscall on seastar::file

+

This is similar to generic fcntl; the difference is, here user indicates that this operation is a short one, and does not involve any i/o or locking. The file module will process this differently from normal fcntl(). Use this only if the user is sure that the operation does not involve any blocking operation. If unsure, use the default fcntl() method. Refer fcntl(2) man page for more details on fcntl operation.

+
Parameters
+ + + +
opthe operation to be executed
argthe optional argument
+
+
+
Returns
a future containing the return value if any, or an exceptional future if the operation has failed
+ +
+
+ +

◆ flush()

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::file::flush ()
+
+noexcept
+
+

Causes any previously written data to be made stable on persistent storage.

+

Prior to a flush, written data may or may not survive a power failure. After a flush, data is guaranteed to be on disk.

+ +
+
+ +

◆ get_file_lifetime_hint()

+ +
+
+ + + + + +
+ + + + + + + +
future< uint64_t > seastar::file::get_file_lifetime_hint ()
+
+noexcept
+
+

Get the lifetime hint of the open file descriptor of seastar::file which was set by set_file_lifetime_hint()

+

Write lifetime hints can be used to inform the kernel about the relative expected lifetime of writes on a given inode or via open file descriptor. An application may use the different hint values to separate writes into different write classes, so that multiple users or applications running on a single storage back-end can aggregate their I/O patterns in a consistent manner. Refer fcntl(2) man page for more details on write lifetime hints.

+
Returns
the hint value of the open file descriptor
+ +
+
+ +

◆ get_inode_lifetime_hint()

+ +
+
+ + + + + +
+ + + + + + + +
future< uint64_t > seastar::file::get_inode_lifetime_hint ()
+
+noexcept
+
+

Get the lifetime hint of the inode of seastar::file which was set by set_inode_lifetime_hint()

+

Write lifetime hints can be used to inform the kernel about the relative expected lifetime of writes on a given inode or via open file descriptor. An application may use the different hint values to separate writes into different write classes, so that multiple users or applications running on a single storage back-end can aggregate their I/O patterns in a consistent manner. Refer fcntl(2) man page for more details on write lifetime hints.

+
Returns
the hint value of the inode
+ +
+
+ +

◆ ioctl()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future< int > seastar::file::ioctl (uint64_t cmd,
void * argp 
)
+
+noexcept
+
+

Generic ioctl syscall support for special file handling.

+

This interface is useful for many non-standard operations on seastar::file. The examples can be - querying device or file system capabilities, configuring special performance or access modes on devices etc. Refer ioctl(2) man page for more details.

+
Parameters
+ + + +
cmdioctl command to be executed
argppointer to the buffer which holds the argument
+
+
+
Returns
a future containing the return value if any, or an exceptional future if the operation has failed.
+ +
+
+ +

◆ ioctl_short()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future< int > seastar::file::ioctl_short (uint64_t cmd,
void * argp 
)
+
+noexcept
+
+

Performs a short ioctl syscall on seastar::file

+

This is similar to generic ioctl; the difference is, here user indicates that this operation is a short one, and does not involve any i/o or locking. The file module will process this differently from the normal ioctl(). Use this method only if the user is sure that the operation does not involve any blocking operation. If unsure, use the default ioctl() method. Refer ioctl(2) man page for more details on ioctl operation.

+
Parameters
+ + + +
cmdioctl command to be executed
argppointer to the buffer which holds the argument
+
+
+
Returns
a future containing the return value if any, or an exceptional future if the operation has failed.
+ +
+
+ +

◆ operator bool()

+ +
+
+ + + + + +
+ + + + + + + +
seastar::file::operator bool () const
+
+inlineexplicitnoexcept
+
+

Checks whether the file object was initialized.

+
Returns
false if the file object is uninitialized (default constructed), true if the file object refers to an actual file.
+ +
+
+ +

◆ operator=()

+ +
+
+ + + + + +
+ + + + + + + + +
file & seastar::file::operator= (const filex)
+
+defaultnoexcept
+
+

Assigns a file object. After assignent, the destination and source refer to the same underlying file.

+
Parameters
+ + +
xfile object to assign to this.
+
+
+ +
+
+ +

◆ set_file_lifetime_hint()

+ +
+
+ + + + + +
+ + + + + + + + +
future seastar::file::set_file_lifetime_hint (uint64_t hint)
+
+noexcept
+
+

Set a lifetime hint for the open file descriptor corresponding to seastar::file

+

Write lifetime hints can be used to inform the kernel about the relative expected lifetime of writes on a given inode or via open file descriptor. An application may use the different hint values to separate writes into different write classes, so that multiple users or applications running on a single storage back-end can aggregate their I/O patterns in a consistent manner. Refer fcntl(2) man page for more details on write lifetime hints.

+
Parameters
+ + +
hintthe hint value of the stream
+
+
+
Returns
future indicating success or failure
+ +
+
+ +

◆ set_inode_lifetime_hint()

+ +
+
+ + + + + +
+ + + + + + + + +
future seastar::file::set_inode_lifetime_hint (uint64_t hint)
+
+noexcept
+
+

Set a lifetime hint for the inode corresponding to seastar::file

+

Write lifetime hints can be used to inform the kernel about the relative expected lifetime of writes on a given inode or via open file descriptor. An application may use the different hint values to separate writes into different write classes, so that multiple users or applications running on a single storage back-end can aggregate their I/O patterns in a consistent manner. Refer fcntl(2) man page for more details on write lifetime hints.

+
Parameters
+ + +
hintthe hint value of the stream
+
+
+
Returns
future indicating success or failure
+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/master/classseastar_1_1file_1_1eof__error.html b/master/classseastar_1_1file_1_1eof__error.html new file mode 100644 index 000000000..6092f9a9e --- /dev/null +++ b/master/classseastar_1_1file_1_1eof__error.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::file::eof_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::file::eof_error Class Reference
+
+
+

Detailed Description

+

Error thrown when attempting to read past end-of-file with dma_read_exactly().

+
+

#include <seastar/core/file.hh>

+
+Inheritance diagram for seastar::file::eof_error:
+
+
+ +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1file_1_1eof__error.png b/master/classseastar_1_1file_1_1eof__error.png new file mode 100644 index 0000000000000000000000000000000000000000..03f447ef14ad4e1c083c5ca61a0010c2f823a01b GIT binary patch literal 566 zcmeAS@N?(olHy`uVBq!ia0vp^9Y7qw!3-q7a-LNJQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;t5sUgSBZ_}_xLgQl`g-` z>u+-cC#_qv-o$;v&-JXD`}!MAEN?$sJG<`2jPFe|Lat6p%e~eoR~euAEqL?Ny_Tl8 zC2!Z{Yxb&qy{-RQwPVSGKfk=VyaYTQl^bWwF}arbm4LpRJdEtc%}vS9Wf + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::file_desc Member List
+
+
+ +

This is the complete list of members for seastar::file_desc, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
accept(socket_address &sa, int flags=0) (defined in seastar::file_desc)seastar::file_descinline
bind(sockaddr &sa, socklen_t sl) (defined in seastar::file_desc)seastar::file_descinline
close() (defined in seastar::file_desc)seastar::file_descinline
connect(sockaddr &sa, socklen_t sl) (defined in seastar::file_desc)seastar::file_descinline
dup() const (defined in seastar::file_desc)seastar::file_descinline
epoll_create(int flags=0) (defined in seastar::file_desc)seastar::file_descinlinestatic
eventfd(unsigned initval, int flags) (defined in seastar::file_desc)seastar::file_descinlinestatic
fdinfo() const noexcept (defined in seastar::file_desc)seastar::file_desc
file_desc()=delete (defined in seastar::file_desc)seastar::file_desc
file_desc(const file_desc &)=delete (defined in seastar::file_desc)seastar::file_desc
file_desc(file_desc &&x) noexcept (defined in seastar::file_desc)seastar::file_descinline
from_fd(int fd) (defined in seastar::file_desc)seastar::file_descinlinestatic
get() const (defined in seastar::file_desc)seastar::file_descinline
get_address() (defined in seastar::file_desc)seastar::file_descinline
get_remote_address() (defined in seastar::file_desc)seastar::file_descinline
getsockopt(int level, int optname) (defined in seastar::file_desc)seastar::file_descinline
getsockopt(int level, int optname, char *data, socklen_t len) (defined in seastar::file_desc)seastar::file_descinline
inotify_init(int flags) (defined in seastar::file_desc)seastar::file_descstatic
ioctl(int request) (defined in seastar::file_desc)seastar::file_descinline
ioctl(int request, int value) (defined in seastar::file_desc)seastar::file_descinline
ioctl(int request, unsigned int value) (defined in seastar::file_desc)seastar::file_descinline
ioctl(int request, X &data) (defined in seastar::file_desc)seastar::file_descinline
ioctl(int request, X &&data) (defined in seastar::file_desc)seastar::file_descinline
listen(int backlog) (defined in seastar::file_desc)seastar::file_descinline
map(size_t size, unsigned prot, unsigned flags, size_t offset, void *addr=nullptr) (defined in seastar::file_desc)seastar::file_descinline
map_private_ro(size_t size, size_t offset) (defined in seastar::file_desc)seastar::file_descinline
map_private_rw(size_t size, size_t offset) (defined in seastar::file_desc)seastar::file_descinline
map_shared_ro(size_t size, size_t offset) (defined in seastar::file_desc)seastar::file_descinline
map_shared_rw(size_t size, size_t offset) (defined in seastar::file_desc)seastar::file_descinline
open(sstring name, int flags, mode_t mode=0) (defined in seastar::file_desc)seastar::file_descinlinestatic
operator=(const file_desc &)=delete (defined in seastar::file_desc)seastar::file_desc
operator=(file_desc &&x) (defined in seastar::file_desc)seastar::file_descinline
pread(void *buf, size_t len, off_t off) (defined in seastar::file_desc)seastar::file_descinline
read(void *buffer, size_t len) (defined in seastar::file_desc)seastar::file_descinline
recv(void *buffer, size_t len, int flags) (defined in seastar::file_desc)seastar::file_descinline
recvmsg(msghdr *mh, int flags) (defined in seastar::file_desc)seastar::file_descinline
send(const void *buffer, size_t len, int flags) (defined in seastar::file_desc)seastar::file_descinline
sendmsg(const msghdr *msg, int flags) (defined in seastar::file_desc)seastar::file_descinline
sendto(socket_address &addr, const void *buf, size_t len, int flags) (defined in seastar::file_desc)seastar::file_descinline
setsockopt(int level, int optname, X &&data) (defined in seastar::file_desc)seastar::file_descinline
setsockopt(int level, int optname, const char *data) (defined in seastar::file_desc)seastar::file_descinline
setsockopt(int level, int optname, const void *data, socklen_t len) (defined in seastar::file_desc)seastar::file_descinline
shutdown(int how) (defined in seastar::file_desc)seastar::file_descinline
size() (defined in seastar::file_desc)seastar::file_descinline
socket(int family, int type, int protocol=0) (defined in seastar::file_desc)seastar::file_descinlinestatic
spawn_actions_add_close(posix_spawn_file_actions_t *actions) (defined in seastar::file_desc)seastar::file_descinline
spawn_actions_add_dup2(posix_spawn_file_actions_t *actions, int newfd) (defined in seastar::file_desc)seastar::file_descinline
temporary(sstring directory) (defined in seastar::file_desc)seastar::file_descstatic
timerfd_create(int clockid, int flags) (defined in seastar::file_desc)seastar::file_descinlinestatic
timerfd_settime(int flags, const itimerspec &its) (defined in seastar::file_desc)seastar::file_descinline
truncate(size_t size) (defined in seastar::file_desc)seastar::file_descinline
try_accept(socket_address &sa, int flags=0) (defined in seastar::file_desc)seastar::file_descinline
write(const void *buf, size_t len) (defined in seastar::file_desc)seastar::file_descinline
writev(const iovec *iov, int iovcnt) (defined in seastar::file_desc)seastar::file_descinline
~file_desc() (defined in seastar::file_desc)seastar::file_descinline
+ + + + diff --git a/master/classseastar_1_1file__desc.html b/master/classseastar_1_1file__desc.html new file mode 100644 index 000000000..d344a2ac9 --- /dev/null +++ b/master/classseastar_1_1file__desc.html @@ -0,0 +1,256 @@ + + + + + + + +Seastar: seastar::file_desc Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

file_desc (const file_desc &)=delete
 
file_desc (file_desc &&x) noexcept
 
+void operator= (const file_desc &)=delete
 
+file_descoperator= (file_desc &&x)
 
+void close ()
 
+int get () const
 
+sstring fdinfo () const noexcept
 
+file_desc dup () const
 
+file_desc accept (socket_address &sa, int flags=0)
 
+std::optional< file_desctry_accept (socket_address &sa, int flags=0)
 
+void shutdown (int how)
 
+void truncate (size_t size)
 
+int ioctl (int request)
 
+int ioctl (int request, int value)
 
+int ioctl (int request, unsigned int value)
 
+template<class X >
int ioctl (int request, X &data)
 
+template<class X >
int ioctl (int request, X &&data)
 
+template<class X >
int setsockopt (int level, int optname, X &&data)
 
+int setsockopt (int level, int optname, const char *data)
 
+int setsockopt (int level, int optname, const void *data, socklen_t len)
 
+template<typename Data >
Data getsockopt (int level, int optname)
 
+int getsockopt (int level, int optname, char *data, socklen_t len)
 
+size_t size ()
 
+std::optional< size_t > read (void *buffer, size_t len)
 
+std::optional< ssize_t > recv (void *buffer, size_t len, int flags)
 
+std::optional< size_t > recvmsg (msghdr *mh, int flags)
 
+std::optional< size_t > send (const void *buffer, size_t len, int flags)
 
+std::optional< size_t > sendto (socket_address &addr, const void *buf, size_t len, int flags)
 
+std::optional< size_t > sendmsg (const msghdr *msg, int flags)
 
+void bind (sockaddr &sa, socklen_t sl)
 
+void connect (sockaddr &sa, socklen_t sl)
 
+socket_address get_address ()
 
+socket_address get_remote_address ()
 
+void listen (int backlog)
 
+std::optional< size_t > write (const void *buf, size_t len)
 
+std::optional< size_t > writev (const iovec *iov, int iovcnt)
 
+size_t pread (void *buf, size_t len, off_t off)
 
+void timerfd_settime (int flags, const itimerspec &its)
 
+mmap_area map (size_t size, unsigned prot, unsigned flags, size_t offset, void *addr=nullptr)
 
+mmap_area map_shared_rw (size_t size, size_t offset)
 
+mmap_area map_shared_ro (size_t size, size_t offset)
 
+mmap_area map_private_rw (size_t size, size_t offset)
 
+mmap_area map_private_ro (size_t size, size_t offset)
 
+void spawn_actions_add_close (posix_spawn_file_actions_t *actions)
 
+void spawn_actions_add_dup2 (posix_spawn_file_actions_t *actions, int newfd)
 
+ + + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static file_desc from_fd (int fd)
 
+static file_desc open (sstring name, int flags, mode_t mode=0)
 
+static file_desc socket (int family, int type, int protocol=0)
 
+static file_desc eventfd (unsigned initval, int flags)
 
+static file_desc epoll_create (int flags=0)
 
+static file_desc timerfd_create (int clockid, int flags)
 
+static file_desc temporary (sstring directory)
 
+static file_desc inotify_init (int flags)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1file__handle-members.html b/master/classseastar_1_1file__handle-members.html new file mode 100644 index 000000000..eb4e1fd3e --- /dev/null +++ b/master/classseastar_1_1file__handle-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::file_handle Member List
+
+
+ +

This is the complete list of members for seastar::file_handle, including all inherited members.

+ + + + + + + +
file_handle(const file_handle &)seastar::file_handle
file_handle(file_handle &&) noexceptseastar::file_handle
operator=(const file_handle &)seastar::file_handle
operator=(file_handle &&) noexceptseastar::file_handle
to_file() const &seastar::file_handle
to_file() &&seastar::file_handle
+ + + + diff --git a/master/classseastar_1_1file__handle.html b/master/classseastar_1_1file__handle.html new file mode 100644 index 000000000..489553f2d --- /dev/null +++ b/master/classseastar_1_1file__handle.html @@ -0,0 +1,118 @@ + + + + + + + +Seastar: seastar::file_handle Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::file_handle Class Reference
+
+
+

Detailed Description

+

A shard-transportable handle to a file.

+

If you need to access a file (for reads only) across multiple shards, you can use the file::dup() method to create a file_handle, transport this file handle to another shard, and use the handle to create file object on that shard. This is more efficient than calling open_file_dma() again.

+
+

#include <seastar/core/file.hh>

+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

file_handle (const file_handle &)
 Copies a file handle object.
 
file_handle (file_handle &&) noexcept
 Moves a file handle object.
 
+file_handleoperator= (const file_handle &)
 Assigns a file handle object.
 
+file_handleoperator= (file_handle &&) noexcept
 Move-assigns a file handle object.
 
+file to_file () const &
 Converts the file handle object to a file.
 
+file to_file () &&
 Converts the file handle object to a file.
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1file__handle__impl-members.html b/master/classseastar_1_1file__handle__impl-members.html new file mode 100644 index 000000000..4e96a0d33 --- /dev/null +++ b/master/classseastar_1_1file__handle__impl-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::file_handle_impl Member List
+
+
+ +

This is the complete list of members for seastar::file_handle_impl, including all inherited members.

+ + + + +
clone() const =0 (defined in seastar::file_handle_impl)seastar::file_handle_implpure virtual
to_file() &&=0 (defined in seastar::file_handle_impl)seastar::file_handle_implpure virtual
~file_handle_impl()=default (defined in seastar::file_handle_impl)seastar::file_handle_implvirtual
+ + + + diff --git a/master/classseastar_1_1file__handle__impl.html b/master/classseastar_1_1file__handle__impl.html new file mode 100644 index 000000000..80f9c7517 --- /dev/null +++ b/master/classseastar_1_1file__handle__impl.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: seastar::file_handle_impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::file_handle_impl Class Referenceabstract
+
+
+ + + + + + +

+Public Member Functions

+virtual std::unique_ptr< file_handle_implclone () const =0
 
+virtual shared_ptr< file_implto_file () &&=0
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1file__impl-members.html b/master/classseastar_1_1file__impl-members.html new file mode 100644 index 000000000..09d0058cd --- /dev/null +++ b/master/classseastar_1_1file__impl-members.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::file_impl Member List
+
+
+ +

This is the complete list of members for seastar::file_impl, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_disk_overwrite_dma_alignment (defined in seastar::file_impl)seastar::file_implprotected
_disk_read_dma_alignment (defined in seastar::file_impl)seastar::file_implprotected
_disk_write_dma_alignment (defined in seastar::file_impl)seastar::file_implprotected
_memory_dma_alignment (defined in seastar::file_impl)seastar::file_implprotected
_read_max_length (defined in seastar::file_impl)seastar::file_implprotected
_write_max_length (defined in seastar::file_impl)seastar::file_implprotected
allocate(uint64_t position, uint64_t length)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
close()=0 (defined in seastar::file_impl)seastar::file_implpure virtual
discard(uint64_t offset, uint64_t length)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
dma_read_bulk(uint64_t offset, size_t range_size, io_intent *)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
dup() (defined in seastar::file_impl)seastar::file_implvirtual
experimental_list_directory() (defined in seastar::file_impl)seastar::file_implvirtual
fcntl(int op, uintptr_t arg) noexcept (defined in seastar::file_impl)seastar::file_implvirtual
fcntl_short(int op, uintptr_t arg) noexcept (defined in seastar::file_impl)seastar::file_implvirtual
flush()=0 (defined in seastar::file_impl)seastar::file_implpure virtual
get_file_impl(file &f) (defined in seastar::file_impl)seastar::file_implprotectedstatic
ioctl(uint64_t cmd, void *argp) noexcept (defined in seastar::file_impl)seastar::file_implvirtual
ioctl_short(uint64_t cmd, void *argp) noexcept (defined in seastar::file_impl)seastar::file_implvirtual
list_directory(std::function< future<>(directory_entry de)> next)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
read_dma(uint64_t pos, void *buffer, size_t len, io_intent *)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
read_dma(uint64_t pos, std::vector< iovec > iov, io_intent *)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
size()=0 (defined in seastar::file_impl)seastar::file_implpure virtual
stat()=0 (defined in seastar::file_impl)seastar::file_implpure virtual
truncate(uint64_t length)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
write_dma(uint64_t pos, const void *buffer, size_t len, io_intent *)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
write_dma(uint64_t pos, std::vector< iovec > iov, io_intent *)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
~file_impl() (defined in seastar::file_impl)seastar::file_implinlinevirtual
+ + + + diff --git a/master/classseastar_1_1file__impl.html b/master/classseastar_1_1file__impl.html new file mode 100644 index 000000000..e213139e8 --- /dev/null +++ b/master/classseastar_1_1file__impl.html @@ -0,0 +1,184 @@ + + + + + + + +Seastar: seastar::file_impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+
+Inheritance diagram for seastar::file_impl:
+
+
+ + +seastar::layered_file_impl + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual future< size_t > write_dma (uint64_t pos, const void *buffer, size_t len, io_intent *)=0
 
+virtual future< size_t > write_dma (uint64_t pos, std::vector< iovec > iov, io_intent *)=0
 
+virtual future< size_t > read_dma (uint64_t pos, void *buffer, size_t len, io_intent *)=0
 
+virtual future< size_t > read_dma (uint64_t pos, std::vector< iovec > iov, io_intent *)=0
 
+virtual future< temporary_buffer< uint8_t > > dma_read_bulk (uint64_t offset, size_t range_size, io_intent *)=0
 
+virtual future flush ()=0
 
+virtual future< struct stat > stat ()=0
 
+virtual future truncate (uint64_t length)=0
 
+virtual future discard (uint64_t offset, uint64_t length)=0
 
+virtual future< int > ioctl (uint64_t cmd, void *argp) noexcept
 
+virtual future< int > ioctl_short (uint64_t cmd, void *argp) noexcept
 
+virtual future< int > fcntl (int op, uintptr_t arg) noexcept
 
+virtual future< int > fcntl_short (int op, uintptr_t arg) noexcept
 
+virtual future allocate (uint64_t position, uint64_t length)=0
 
+virtual future< uint64_t > size ()=0
 
+virtual future close ()=0
 
+virtual std::unique_ptr< file_handle_impldup ()
 
+virtual subscription< directory_entrylist_directory (std::function< future<>(directory_entry de)> next)=0
 
+virtual coroutine::experimental::generator< directory_entryexperimental_list_directory ()
 
+ + + +

+Static Protected Member Functions

+static file_implget_file_impl (file &f)
 
+ + + + + + + + + + + + + +

+Protected Attributes

+unsigned _memory_dma_alignment = 4096
 
+unsigned _disk_read_dma_alignment = 4096
 
+unsigned _disk_write_dma_alignment = 4096
 
+unsigned _disk_overwrite_dma_alignment = 4096
 
+unsigned _read_max_length = 1u << 30
 
+unsigned _write_max_length = 1u << 30
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1file__impl.png b/master/classseastar_1_1file__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..fc71feec50e22d7aaf73875683921c36f058db06 GIT binary patch literal 659 zcmeAS@N?(olHy`uVBq!ia0vp^vw=8(gBeI#PWXNjNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~DS5g$hEy=Vomz}-i z+M1E8Ze4C@IqC1Rpd;ZE-o`s|BnApHOq;Tq@y62}hO)oB(e=+S#!XL`eeSRBpYDBZ z;tJs#+g#q<|2kn=W$cWy$Ax)SVGdqS+fN!Y+<9$0+sd1N>d%C|RVyC+u71)qpO2wj zD(N(X)Hc2NqXnn0RR%U#_g?$*gWvL4Qt)fJ=&EntX0p$pWMoxM-hS@tjFV<%_j63= zmfl}iJ8RMOw6~=W`~6R+2hC^lx%Ob9efn){C-nkFvxYG3&5S%JZZf(9uj67TkFHri;rPsRV8%rM0`<1Sh(k(r@|xYSTtx&6)pXqi6Nz?AegJ zerx@8=ULB6IseM>Cr>Q0+%7&v+2?7L($to`$ufSMSI(_kafbc%+Vy28?Mm;x%6NXz zI=IOG^}3rOLgzlOO8TO8WmBlc**@!S=U&HU?@Ha>b9C9Yub#ehwce|5dt!BN+1m6g z%a*Op-=*>@aPH6BdrZH-otgV)pY7(@Y^#d{v)4PTHk?nJJ$P2RPg1hJVx*S>8 ft9wl1`W1N-FNIv;Hl`226vW`^>gTe~DWM4fp%ph4 literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1file__input__stream__history-members.html b/master/classseastar_1_1file__input__stream__history-members.html new file mode 100644 index 000000000..3491356d9 --- /dev/null +++ b/master/classseastar_1_1file__input__stream__history-members.html @@ -0,0 +1,81 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::file_input_stream_history Member List
+
+
+ +

This is the complete list of members for seastar::file_input_stream_history, including all inherited members.

+
+ + + + diff --git a/master/classseastar_1_1file__input__stream__history.html b/master/classseastar_1_1file__input__stream__history.html new file mode 100644 index 000000000..bc86a66ba --- /dev/null +++ b/master/classseastar_1_1file__input__stream__history.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: seastar::file_input_stream_history Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::file_input_stream_history Class Reference
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1foreign__ptr-members.html b/master/classseastar_1_1foreign__ptr-members.html new file mode 100644 index 000000000..c6d9317b5 --- /dev/null +++ b/master/classseastar_1_1foreign__ptr-members.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::foreign_ptr< PtrType > Member List
+
+
+ +

This is the complete list of members for seastar::foreign_ptr< PtrType >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
copy() const noexceptseastar::foreign_ptr< PtrType >inline
destroy() noexceptseastar::foreign_ptr< PtrType >inline
element_type typedef (defined in seastar::foreign_ptr< PtrType >)seastar::foreign_ptr< PtrType >
foreign_ptr() noexcept(std::is_nothrow_default_constructible_v< PtrType >)seastar::foreign_ptr< PtrType >inline
foreign_ptr(std::nullptr_t) noexcept(std::is_nothrow_default_constructible_v< foreign_ptr >)seastar::foreign_ptr< PtrType >inline
foreign_ptr(PtrType value) noexcept(std::is_nothrow_move_constructible_v< PtrType >)seastar::foreign_ptr< PtrType >inline
foreign_ptr(const foreign_ptr &)=delete (defined in seastar::foreign_ptr< PtrType >)seastar::foreign_ptr< PtrType >
foreign_ptr(foreign_ptr &&other) noexcept(std::is_nothrow_move_constructible_v< PtrType >)=defaultseastar::foreign_ptr< PtrType >
get() const noexcept(noexcept(&*_value))seastar::foreign_ptr< PtrType >inline
get_owner_shard() const noexceptseastar::foreign_ptr< PtrType >inline
make_foreign(T ptr)seastar::foreign_ptr< PtrType >related
operator bool() const noexcept(noexcept(static_cast< bool >(_value)))seastar::foreign_ptr< PtrType >inline
operator*() const noexcept(noexcept(*_value))seastar::foreign_ptr< PtrType >inline
operator->() const noexcept(noexcept(&*_value))seastar::foreign_ptr< PtrType >inline
operator=(foreign_ptr &&other) noexcept(std::is_nothrow_move_constructible_v< PtrType >)seastar::foreign_ptr< PtrType >inline
pointer typedef (defined in seastar::foreign_ptr< PtrType >)seastar::foreign_ptr< PtrType >
release() noexcept(std::is_nothrow_default_constructible_v< PtrType >)seastar::foreign_ptr< PtrType >inline
reset(PtrType new_ptr) noexcept(std::is_nothrow_move_constructible_v< PtrType >)seastar::foreign_ptr< PtrType >inline
reset(std::nullptr_t=nullptr) noexcept(std::is_nothrow_default_constructible_v< PtrType >)seastar::foreign_ptr< PtrType >inline
~foreign_ptr()seastar::foreign_ptr< PtrType >inline
+ + + + diff --git a/master/classseastar_1_1foreign__ptr.html b/master/classseastar_1_1foreign__ptr.html new file mode 100644 index 000000000..8d6c8a36a --- /dev/null +++ b/master/classseastar_1_1foreign__ptr.html @@ -0,0 +1,313 @@ + + + + + + + +Seastar: seastar::foreign_ptr< PtrType > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::foreign_ptr< PtrType > Class Template Reference
+
+
+ + + + + + +

+Public Types

+using element_type = typename std::pointer_traits< PtrType >::element_type
 
+using pointer = element_type *
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

foreign_ptr () noexcept(std::is_nothrow_default_constructible_v< PtrType >)
 Constructs a null foreign_ptr<>.
 
foreign_ptr (std::nullptr_t) noexcept(std::is_nothrow_default_constructible_v< foreign_ptr >)
 Constructs a null foreign_ptr<>.
 
foreign_ptr (PtrType value) noexcept(std::is_nothrow_move_constructible_v< PtrType >)
 Wraps a pointer object and remembers the current core.
 
foreign_ptr (const foreign_ptr &)=delete
 
foreign_ptr (foreign_ptr &&other) noexcept(std::is_nothrow_move_constructible_v< PtrType >)=default
 Moves a foreign_ptr<> to another object.
 
~foreign_ptr ()
 Destroys the wrapped object on its original cpu.
 
+future< foreign_ptrcopy () const noexcept
 Creates a copy of this foreign ptr. Only works if the stored ptr is copyable.
 
+element_type & operator* () const noexcept(noexcept(*_value))
 Accesses the wrapped object.
 
+element_type * operator-> () const noexcept(noexcept(&*_value))
 Accesses the wrapped object.
 
+pointer get () const noexcept(noexcept(&*_value))
 Access the raw pointer to the wrapped object.
 
unsigned get_owner_shard () const noexcept
 
operator bool () const noexcept(noexcept(static_cast< bool >(_value)))
 Checks whether the wrapped pointer is non-null.
 
+foreign_ptroperator= (foreign_ptr &&other) noexcept(std::is_nothrow_move_constructible_v< PtrType >)
 Move-assigns a foreign_ptr<>.
 
PtrType release () noexcept(std::is_nothrow_default_constructible_v< PtrType >)
 
void reset (PtrType new_ptr) noexcept(std::is_nothrow_move_constructible_v< PtrType >)
 
void reset (std::nullptr_t=nullptr) noexcept(std::is_nothrow_default_constructible_v< PtrType >)
 
future destroy () noexcept
 
+ + + + + +

+Related Functions

(Note that these are not member functions.)

+
template<typename T >
foreign_ptr< T > make_foreign (T ptr)
 
+

Member Function Documentation

+ +

◆ destroy()

+ +
+
+
+template<typename PtrType >
+ + + + + +
+ + + + + + + +
future seastar::foreign_ptr< PtrType >::destroy ()
+
+inlinenoexcept
+
+

Destroy the managed pointer.

+
Returns
a future that is resolved when managed pointer is destroyed on its owner shard.
+ +
+
+ +

◆ get_owner_shard()

+ +
+
+
+template<typename PtrType >
+ + + + + +
+ + + + + + + +
unsigned seastar::foreign_ptr< PtrType >::get_owner_shard () const
+
+inlinenoexcept
+
+

Return the owner-shard of this pointer.

+

The owner shard of the pointer can change as a result of move-assigment or a call to reset().

+ +
+
+ +

◆ release()

+ +
+
+
+template<typename PtrType >
+ + + + + +
+ + + + + + + +
PtrType seastar::foreign_ptr< PtrType >::release ()
+
+inlinenoexcept
+
+

Releases the owned pointer

+

Warning: the caller is now responsible for destroying the pointer on its owner shard. This method is best called on the owner shard to avoid accidents.

+ +
+
+ +

◆ reset() [1/2]

+ +
+
+
+template<typename PtrType >
+ + + + + +
+ + + + + + + + +
void seastar::foreign_ptr< PtrType >::reset (PtrType new_ptr)
+
+inlinenoexcept
+
+

Replace the managed pointer with new_ptr.

+

The previous managed pointer is destroyed on its owner shard.

+ +
+
+ +

◆ reset() [2/2]

+ +
+
+
+template<typename PtrType >
+ + + + + +
+ + + + + + + + +
void seastar::foreign_ptr< PtrType >::reset (std::nullptr_t  = nullptr)
+
+inlinenoexcept
+
+

Replace the managed pointer with a null value.

+

The previous managed pointer is destroyed on its owner shard.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1fragmented__memory__input__stream-members.html b/master/classseastar_1_1fragmented__memory__input__stream-members.html new file mode 100644 index 000000000..e590816b3 --- /dev/null +++ b/master/classseastar_1_1fragmented__memory__input__stream-members.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::fragmented_memory_input_stream< Iterator > Member List
+
+
+ +

This is the complete list of members for seastar::fragmented_memory_input_stream< Iterator >, including all inherited members.

+ + + + + + + + + + + + +
copy_to(Output &out) (defined in seastar::fragmented_memory_input_stream< Iterator >)seastar::fragmented_memory_input_stream< Iterator >inline
first_fragment_data() const (defined in seastar::fragmented_memory_input_stream< Iterator >)seastar::fragmented_memory_input_stream< Iterator >inline
first_fragment_size() const (defined in seastar::fragmented_memory_input_stream< Iterator >)seastar::fragmented_memory_input_stream< Iterator >inline
fragment_iterator() const (defined in seastar::fragmented_memory_input_stream< Iterator >)seastar::fragmented_memory_input_stream< Iterator >inline
fragmented_memory_input_stream(Iterator it, size_t size) (defined in seastar::fragmented_memory_input_stream< Iterator >)seastar::fragmented_memory_input_stream< Iterator >inline
has_with_stream typedef (defined in seastar::fragmented_memory_input_stream< Iterator >)seastar::fragmented_memory_input_stream< Iterator >
iterator_type typedef (defined in seastar::fragmented_memory_input_stream< Iterator >)seastar::fragmented_memory_input_stream< Iterator >
read(char *p, size_t size) (defined in seastar::fragmented_memory_input_stream< Iterator >)seastar::fragmented_memory_input_stream< Iterator >inline
read_substream(size_t size) (defined in seastar::fragmented_memory_input_stream< Iterator >)seastar::fragmented_memory_input_stream< Iterator >inline
size() const (defined in seastar::fragmented_memory_input_stream< Iterator >)seastar::fragmented_memory_input_stream< Iterator >inline
skip(size_t size) (defined in seastar::fragmented_memory_input_stream< Iterator >)seastar::fragmented_memory_input_stream< Iterator >inline
+ + + + diff --git a/master/classseastar_1_1fragmented__memory__input__stream.html b/master/classseastar_1_1fragmented__memory__input__stream.html new file mode 100644 index 000000000..e1d896302 --- /dev/null +++ b/master/classseastar_1_1fragmented__memory__input__stream.html @@ -0,0 +1,127 @@ + + + + + + + +Seastar: seastar::fragmented_memory_input_stream< Iterator > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::fragmented_memory_input_stream< Iterator > Class Template Reference
+
+
+ + + + + + +

+Public Types

+using has_with_stream = std::false_type
 
+using iterator_type = Iterator
 
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

fragmented_memory_input_stream (Iterator it, size_t size)
 
+void skip (size_t size)
 
+fragmented read_substream (size_t size)
 
+void read (char *p, size_t size)
 
+template<typename Output >
void copy_to (Output &out)
 
+size_t size () const
 
+const char * first_fragment_data () const
 
+size_t first_fragment_size () const
 
+Iterator fragment_iterator () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1fragmented__memory__output__stream-members.html b/master/classseastar_1_1fragmented__memory__output__stream-members.html new file mode 100644 index 000000000..9f27b97f4 --- /dev/null +++ b/master/classseastar_1_1fragmented__memory__output__stream-members.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::fragmented_memory_output_stream< Iterator > Member List
+
+
+ +

This is the complete list of members for seastar::fragmented_memory_output_stream< Iterator >, including all inherited members.

+ + + + + + + + + + + +
fill(char c, size_t size) (defined in seastar::fragmented_memory_output_stream< Iterator >)seastar::fragmented_memory_output_stream< Iterator >inline
fragmented_memory_output_stream()=default (defined in seastar::fragmented_memory_output_stream< Iterator >)seastar::fragmented_memory_output_stream< Iterator >
fragmented_memory_output_stream(Iterator it, size_t size) (defined in seastar::fragmented_memory_output_stream< Iterator >)seastar::fragmented_memory_output_stream< Iterator >inline
has_with_stream typedef (defined in seastar::fragmented_memory_output_stream< Iterator >)seastar::fragmented_memory_output_stream< Iterator >
iterator_type typedef (defined in seastar::fragmented_memory_output_stream< Iterator >)seastar::fragmented_memory_output_stream< Iterator >
size() const (defined in seastar::fragmented_memory_output_stream< Iterator >)seastar::fragmented_memory_output_stream< Iterator >inline
skip(size_t size) (defined in seastar::fragmented_memory_output_stream< Iterator >)seastar::fragmented_memory_output_stream< Iterator >inline
to_input_stream() const (defined in seastar::fragmented_memory_output_stream< Iterator >)seastar::fragmented_memory_output_stream< Iterator >inline
write(const char *p, size_t size) (defined in seastar::fragmented_memory_output_stream< Iterator >)seastar::fragmented_memory_output_stream< Iterator >inline
write_substream(size_t size) (defined in seastar::fragmented_memory_output_stream< Iterator >)seastar::fragmented_memory_output_stream< Iterator >inline
+ + + + diff --git a/master/classseastar_1_1fragmented__memory__output__stream.html b/master/classseastar_1_1fragmented__memory__output__stream.html new file mode 100644 index 000000000..82328fb19 --- /dev/null +++ b/master/classseastar_1_1fragmented__memory__output__stream.html @@ -0,0 +1,120 @@ + + + + + + + +Seastar: seastar::fragmented_memory_output_stream< Iterator > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::fragmented_memory_output_stream< Iterator > Class Template Reference
+
+
+ + + + + + +

+Public Types

+using has_with_stream = std::false_type
 
+using iterator_type = Iterator
 
+ + + + + + + + + + + + + + + +

+Public Member Functions

fragmented_memory_output_stream (Iterator it, size_t size)
 
+void skip (size_t size)
 
+memory_output_stream< Iterator > write_substream (size_t size)
 
+void write (const char *p, size_t size)
 
+void fill (char c, size_t size)
 
+size_t size () const
 
+fragmented_memory_input_stream< Iterator > to_input_stream () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1future-members.html b/master/classseastar_1_1future-members.html new file mode 100644 index 000000000..35d087106 --- /dev/null +++ b/master/classseastar_1_1future-members.html @@ -0,0 +1,107 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::future< T > Member List
+
+
+ +

This is the complete list of members for seastar::future< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
available() const noexceptseastar::future< T >inline
discard_result() noexceptseastar::future< T >inline
failed() const noexceptseastar::future< T >inline
finally(Func &&func) noexceptseastar::future< T >inline
forward_to(promise< T > &&pr) noexceptseastar::future< T >inline
future(future &&x) noexceptseastar::future< T >inline
future(const future &)=delete (defined in seastar::future< T >)seastar::future< T >
get()seastar::future< T >inline
get0() (defined in seastar::future< T >)seastar::future< T >inline
get0_return_type typedefseastar::future< T >
get_exception() noexcept (defined in seastar::future< T >)seastar::future< T >inline
handle_exception(Func &&func) noexceptseastar::future< T >inline
handle_exception_type(Func &&func) noexceptseastar::future< T >inline
ignore_ready_future() noexceptseastar::future< T >inline
operator=(future &&x) noexcept (defined in seastar::future< T >)seastar::future< T >inline
operator=(const future &)=delete (defined in seastar::future< T >)seastar::future< T >
or_terminate() noexceptseastar::future< T >inline
promise_type typedefseastar::future< T >
then(Func &&func) noexceptseastar::future< T >inline
then_unpack(Func &&func) noexceptseastar::future< T >inline
then_wrapped(Func &&func) &noexceptseastar::future< T >inline
then_wrapped(Func &&func) &&noexcept (defined in seastar::future< T >)seastar::future< T >inline
tuple_type typedef (defined in seastar::future< T >)seastar::future< T >
value_type typedefseastar::future< T >
wait() noexceptseastar::future< T >inline
+ + + + diff --git a/master/classseastar_1_1future.html b/master/classseastar_1_1future.html new file mode 100644 index 000000000..b904cbfd0 --- /dev/null +++ b/master/classseastar_1_1future.html @@ -0,0 +1,727 @@ + + + + + + + +Seastar: seastar::future< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::future< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename T>
+class seastar::future< T >

A representation of a possibly not-yet-computed value.

+

A future represents a value that has not yet been computed (an asynchronous computation). It can be in one of several states:

    +
  • unavailable: the computation has not been completed yet
  • +
  • value: the computation has been completed successfully and a value is available.
  • +
  • failed: the computation completed with an exception.
  • +
+

methods in future allow querying the state and, most importantly, scheduling a continuation to be executed when the future becomes available. Only one such continuation may be scheduled.

+

A future should not be discarded before it is waited upon and its result is extracted. Discarding a future means that the computed value becomes inaccessible, but more importantly, any exceptions raised from the computation will disappear unchecked as well. Another very important consequence is potentially unbounded resource consumption due to the launcher of the deserted continuation not being able track the amount of in-progress continuations, nor their individual resource consumption. To prevent accidental discarding of futures, future is declared [[nodiscard]] if the compiler supports it. Also, when a discarded future resolves with an error a warning is logged (at runtime). That said there can be legitimate cases where a future is discarded. The most prominent example is launching a new fiber, or in other words, moving a continuation chain to the background (off the current fiber). Even if a future is discarded purposefully, it is still strongly advisable to wait on it indirectly (via a gate or semaphore), control their concurrency, their resource consumption and handle any errors raised from them.

+
Template Parameters
+ + +
TA list of types to be carried as the result of the future, similar to std::tuple<T...>. An empty list (future<>) means that there is no result, and an available future only contains a success/failure indication (and in the case of a failure, an exception). A list with two or more types is deprecated; use future<std::tuple<T...>> instead.
+
+
+
Examples
closeable_test.cc, and file_demo.cc.
+
+
+

#include <seastar/core/future.hh>

+
+Inheritance diagram for seastar::future< T >:
+
+
+ + +seastar::coroutine::without_preemption_check< T > + +
+ + + + + + + + +

+Classes

struct  finally_body
 
struct  finally_body< Func, false >
 
struct  finally_body< Func, true >
 
+ + + + + + + + + + + +

+Public Types

+using value_type = internal::future_stored_type_t< T >
 The data type carried by the future.
 
+using tuple_type = internal::future_tuple_type_t< value_type >
 
+using promise_type = promise< T >
 The data type carried by the future.
 
using get0_return_type = typename future_state::get0_return_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

future (future &&x) noexcept
 Moves the future into a new object.
 
future (const future &)=delete
 
+futureoperator= (future &&x) noexcept
 
+void operator= (const future &)=delete
 
value_type && get ()
 gets the value returned by the computation More...
 
+std::exception_ptr get_exception () noexcept
 
+get0_return_type get0 ()
 
void wait () noexcept
 
bool available () const noexcept
 Checks whether the future is available. More...
 
bool failed () const noexcept
 Checks whether the future has failed. More...
 
template<typename Func , typename Result = typename internal::future_result<Func, T>::future_type>
+requires std::invocable<Func, T> || (std::same_as<void, T> && std::invocable<Func>)
Result then (Func &&func) noexcept
 Schedule a block of code to run when the future is ready. More...
 
template<typename Func , typename Result = futurize_t<internal::result_of_apply_t<Func, T>>>
requires ::seastar::CanApplyTuple< Func, T > Result then_unpack (Func &&func) noexcept
 Schedule a block of code to run when the future is ready, unpacking tuples. More...
 
template<std::invocable< future > Func, typename FuncResult = std::invoke_result_t<Func, future>>
futurize_t< FuncResult > then_wrapped (Func &&func) &noexcept
 Schedule a block of code to run when the future is ready, allowing for exception handling. More...
 
+template<std::invocable< future && > Func, typename FuncResult = std::invoke_result_t<Func, future&&>>
futurize_t< FuncResult > then_wrapped (Func &&func) &&noexcept
 
void forward_to (promise< T > &&pr) noexcept
 Satisfy some promise object with this future as a result. More...
 
template<std::invocable Func>
future< T > finally (Func &&func) noexcept
 
future or_terminate () noexcept
 Terminate the program if this future fails. More...
 
future discard_result () noexcept
 Discards the value carried by this future. More...
 
template<typename Func >
+requires std::is_invocable_r_v<future<T> ,Func, std::exception_ptr> || (std::tuple_size_v<tuple_type> == 0 && std::is_invocable_r_v<void, Func, std::exception_ptr>) || (std::tuple_size_v<tuple_type> == 1 && std::is_invocable_r_v<T, Func, std::exception_ptr>) || (std::tuple_size_v<tuple_type> > 1 && std::is_invocable_r_v<tuple_type ,Func, std::exception_ptr>)
future< T > handle_exception (Func &&func) noexcept
 Handle the exception carried by this future. More...
 
template<typename Func >
future< T > handle_exception_type (Func &&func) noexcept
 Handle the exception of a certain type carried by this future. More...
 
void ignore_ready_future () noexcept
 Ignore any result hold by this future. More...
 
+

Class Documentation

+ +

◆ seastar::future::finally_body

+ +
+
+ + + + +
struct seastar::future::finally_body
+
+ +
+
+

Member Typedef Documentation

+ +

◆ get0_return_type

+ +
+
+
+template<typename T >
+ + + + +
using seastar::future< T >::get0_return_type = typename future_state::get0_return_type
+
+

Gets the value returned by the computation.

+

Similar to get(), but instead of returning a T&&, returns T.

+
Note
The get0() method is deprecated. It's a remnant from older versions of Seastar that supported variadic futures, capable of returning multiple values through a tuple. Back then, get0() served the purpose of retrieving the first (and usually the only) value. Today, the get() method accomplishes the same task. However, there's a subtle difference in return types: get0() returned T, while get() returns T&& (an rvalue reference to T). This distinction typically won't cause issues when switching from get0() to get(). However, in specific metaprogramming scenarios, especially when the code expects type T, you'll need to use std::remove_reference_t<decltype(fut.get())> to extract the underlying type T. For new code that utilizes future<tuple<...>>, employ std::get<0>(fut.get()) to access the first element of the tuple, rather than the deprecated get0().
+ +
+
+

Member Function Documentation

+ +

◆ available()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
bool seastar::future< T >::available () const
+
+inlinenoexcept
+
+ +

Checks whether the future is available.

+
Returns
true if the future has a value, or has failed.
+ +
+
+ +

◆ discard_result()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
future seastar::future< T >::discard_result ()
+
+inlinenoexcept
+
+ +

Discards the value carried by this future.

+

Converts the future into a no-value future<>, by ignoring any result. Exceptions are propagated unchanged.

+ +
+
+ +

◆ failed()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
bool seastar::future< T >::failed () const
+
+inlinenoexcept
+
+ +

Checks whether the future has failed.

+
Returns
true if the future is availble and has failed.
+ +
+
+ +

◆ finally()

+ +
+
+
+template<typename T >
+
+template<std::invocable Func>
+ + + + + +
+ + + + + + + + +
future< T > seastar::future< T >::finally (Func && func)
+
+inlinenoexcept
+
+

Finally continuation for statements that require waiting for the result. I.e. you need to "finally" call a function that returns a possibly unavailable future. The returned future will be "waited for", any exception generated will be propagated, but the return value is ignored. I.e. the original return value (the future upon which you are making this call) will be preserved.

+

If the original return value or the callback return value is an exceptional future it will be propagated.

+

If both of them are exceptional - the seastar::nested_exception exception with the callback exception on top and the original future exception nested will be propagated.

+ +
+
+ +

◆ forward_to()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
void seastar::future< T >::forward_to (promise< T > && pr)
+
+inlinenoexcept
+
+ +

Satisfy some promise object with this future as a result.

+

Arranges so that when this future is resolve, it will be used to satisfy an unrelated promise. This is similar to scheduling a continuation that moves the result of this future into the promise (using promise::set_value() or promise::set_exception(), except that it is more efficient.

+
Parameters
+ + +
pra promise that will be fulfilled with the results of this future.
+
+
+ +
+
+ +

◆ get()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
value_type && seastar::future< T >::get ()
+
+inline
+
+ +

gets the value returned by the computation

+

Requires that the future be available. If the value was computed successfully, it is returned (as an std::tuple). Otherwise, an exception is thrown.

+

If get() is called in a seastar::thread context, then it need not be available; instead, the thread will be paused until the future becomes available.

+
Examples
closeable_test.cc.
+
+ +
+
+ +

◆ handle_exception()

+ +
+
+
+template<typename T >
+
+template<typename Func >
+requires std::is_invocable_r_v<future<T> ,Func, std::exception_ptr> || (std::tuple_size_v<tuple_type> == 0 && std::is_invocable_r_v<void, Func, std::exception_ptr>) || (std::tuple_size_v<tuple_type> == 1 && std::is_invocable_r_v<T, Func, std::exception_ptr>) || (std::tuple_size_v<tuple_type> > 1 && std::is_invocable_r_v<tuple_type ,Func, std::exception_ptr>)
+ + + + + +
+ + + + + + + + +
future< T > seastar::future< T >::handle_exception (Func && func)
+
+inlinenoexcept
+
+ +

Handle the exception carried by this future.

+

When the future resolves, if it resolves with an exception, handle_exception(func) replaces the exception with the value returned by func. The exception is passed (as a std::exception_ptr) as a parameter to func; func may return the replacement value immediately (T or std::tuple<T...>) or in the future (future<T...>) and is even allowed to return (or throw) its own exception.

+

The idiom fut.discard_result().handle_exception(...) can be used to handle an exception (if there is one) without caring about the successful value; Because handle_exception() is used here on a future<>, the handler function does not need to return anything.

+ +
+
+ +

◆ handle_exception_type()

+ +
+
+
+template<typename T >
+
+template<typename Func >
+ + + + + +
+ + + + + + + + +
future< T > seastar::future< T >::handle_exception_type (Func && func)
+
+inlinenoexcept
+
+ +

Handle the exception of a certain type carried by this future.

+

When the future resolves, if it resolves with an exception of a type that provided callback receives as a parameter, handle_exception_type(func) replaces the exception with the value returned by func. The exception is passed (by reference) as a parameter to func; func may return the replacement value immediately (T or std::tuple<T...>) or in the future (future<T...>) and is even allowed to return (or throw) its own exception. If exception, that future holds, does not match func parameter type it is propagated as is.

+ +
+
+ +

◆ ignore_ready_future()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
void seastar::future< T >::ignore_ready_future ()
+
+inlinenoexcept
+
+ +

Ignore any result hold by this future.

+

Ignore any result (value or exception) hold by this future. Use with caution since usually ignoring exception is not what you want

+ +
+
+ +

◆ or_terminate()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
future seastar::future< T >::or_terminate ()
+
+inlinenoexcept
+
+ +

Terminate the program if this future fails.

+

Terminates the entire program is this future resolves to an exception. Use with caution.

+ +
+
+ +

◆ then()

+ +
+
+
+template<typename T >
+
+template<typename Func , typename Result = typename internal::future_result<Func, T>::future_type>
+requires std::invocable<Func, T> || (std::same_as<void, T> && std::invocable<Func>)
+ + + + + +
+ + + + + + + + +
Result seastar::future< T >::then (Func && func)
+
+inlinenoexcept
+
+ +

Schedule a block of code to run when the future is ready.

+

Schedules a function (often a lambda) to run when the future becomes available. The function is called with the result of this future's computation as parameters. The return value of the function becomes the return value of then(), itself as a future; this allows then() calls to be chained.

+

If the future failed, the function is not called, and the exception is propagated into the return value of then().

+
Parameters
+ + +
func- function to be called when the future becomes available, unless it has failed.
+
+
+
Returns
a future representing the return value of func, applied to the eventual value of this future.
+ +
+
+ +

◆ then_unpack()

+ +
+
+
+template<typename T >
+
+template<typename Func , typename Result = futurize_t<internal::result_of_apply_t<Func, T>>>
+ + + + + +
+ + + + + + + + +
requires ::seastar::CanApplyTuple< Func, T > Result seastar::future< T >::then_unpack (Func && func)
+
+inlinenoexcept
+
+ +

Schedule a block of code to run when the future is ready, unpacking tuples.

+

Schedules a function (often a lambda) to run when the future becomes available. The function is called with the result of this future's computation as parameters. The return value of the function becomes the return value of then(), itself as a future; this allows then() calls to be chained.

+

This member function is only available when the payload is std::tuple; The tuple elements are passed as individual arguments to func, which must have the same arity as the tuple.

+

If the future failed, the function is not called, and the exception is propagated into the return value of then().

+
Parameters
+ + +
func- function to be called when the future becomes available, unless it has failed.
+
+
+
Returns
a future representing the return value of func, applied to the eventual value of this future.
+ +
+
+ +

◆ then_wrapped()

+ +
+
+
+template<typename T >
+
+template<std::invocable< future > Func, typename FuncResult = std::invoke_result_t<Func, future>>
+ + + + + +
+ + + + + + + + +
futurize_t< FuncResult > seastar::future< T >::then_wrapped (Func && func) &
+
+inlinenoexcept
+
+ +

Schedule a block of code to run when the future is ready, allowing for exception handling.

+

Schedules a function (often a lambda) to run when the future becomes available. The function is called with the this future as a parameter; it will be in an available state. The return value of the function becomes the return value of then_wrapped(), itself as a future; this allows then_wrapped() calls to be chained.

+

Unlike then(), the function will be called for both value and exceptional futures.

+
Parameters
+ + +
func- function to be called when the future becomes available,
+
+
+
Returns
a future representing the return value of func, applied to the eventual value of this future.
+ +
+
+ +

◆ wait()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
void seastar::future< T >::wait ()
+
+inlinenoexcept
+
+

Wait for the future to be available (in a seastar::thread)

+

When called from a seastar::thread, this function blocks the thread until the future is availble. Other threads and continuations continue to execute; only the thread is blocked.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1future.png b/master/classseastar_1_1future.png new file mode 100644 index 0000000000000000000000000000000000000000..2448f93b3e0258d68af04a7495aec318b9e02e74 GIT binary patch literal 1357 zcmeAS@N?(olHy`uVBq!ia0y~yVAKM#J2;quWV(Bp50H`w@CkAK|NlRb`Qpvj(*8pe zfGjXRaNq!I=N)+ zL+=BVPpq}5-!*;NvEu!+IZFfu1@((2tt!;KEOpI2*mhUszi;;6WlI&S|CatPS^m@V zX4$+|rKYQQKig}&uq^D~g7$BhAG7(Z6{vqTd7xi^*3|q)#uw>-L78Q(Y;#z zf{TmGo)eYFf9={5db%u=e^b`$$NHOA`Myg#e|4^lOHI4H?dnU?9~xJ^s;S<<_`i8` zRyDKU>zR2g*|jtB4y3XBir;ya^LEQFR{8r4pIO$GF}u0cSj}Jfs;*@I6dOUo-4?5% zKIdB9)!~sCDk!MAMoUSlHPqE*$&Qs;OGSdcG}#$q`r{ec9&oH?I`QH4^jJof4O$I6 z=D}sG1wEmR5)H5fufA{w8{$IC^%TF$@63z`t*_8G8@#0NdpzshbM+IXs+Q>IO-d!xpYR5mnFl4sv2NODFek0 zUq=s3m5mxW^tXmGF2QLyQIgj~OnD9$Sng{}lvu~stRm@I)feg+#I<_T5|J=fPt7%6 zlY&%2L_L3H=dJCN>QmeuxW1>-CMj=)(Z9({+R9f=TEgrHROj!(zg2q2Dk)n(tLeu> z=G?#Tx9h;~Mem=Xv|7B0_&h>jP{CBf`*N#_R-Q%~pYJRQq>Q&1g|G&OzmH%(? z&8ybM^gT@pdwOow*>}@JqJAAtu77lvh)5&CA%4CXBS(Q%wD_sb=khHWl{Ng2mY?k-kY{tdc(=yZJXYw6+gD!yc>&>~S zps&+8CN6nj6dC$`bGes@XVsy{6Lt!F{xUnK<>^&e89J$i7ZmmpQ&pC30E#4rPMY#) kS(ZfGL7u|~G9RQDn7r6}zf7qOSoSe^y85}Sb4q9e0K4*jS^xk5 literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1gate-members.html b/master/classseastar_1_1gate-members.html new file mode 100644 index 000000000..13f6e3e35 --- /dev/null +++ b/master/classseastar_1_1gate-members.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::gate Member List
+
+
+ +

This is the complete list of members for seastar::gate, including all inherited members.

+ + + + + + + + + + + + + + + + + +
check()seastar::gateinline
close() noexceptseastar::gateinline
enter()seastar::gateinline
gate() noexcept (defined in seastar::gate)seastar::gateinline
gate(const gate &)=delete (defined in seastar::gate)seastar::gate
gate(gate &&x) noexcept (defined in seastar::gate)seastar::gateinline
get_count() const noexceptseastar::gateinline
hold()seastar::gateinline
is_closed() const noexceptseastar::gateinline
leave() noexceptseastar::gateinline
operator=(gate &&x) noexcept (defined in seastar::gate)seastar::gateinline
try_enter() noexceptseastar::gateinline
try_hold() noexceptseastar::gateinline
try_with_gate(gate &g, Func &&func) noexceptseastar::gaterelated
with_gate(gate &g, Func &&func)seastar::gaterelated
~gate() (defined in seastar::gate)seastar::gateinline
+ + + + diff --git a/master/classseastar_1_1gate.html b/master/classseastar_1_1gate.html new file mode 100644 index 000000000..776a936ae --- /dev/null +++ b/master/classseastar_1_1gate.html @@ -0,0 +1,345 @@ + + + + + + + +Seastar: seastar::gate Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::gate Class Reference
+
+
+

Detailed Description

+

Facility to stop new requests, and to tell when existing requests are done.

+

When stopping a service that serves asynchronous requests, we are faced with two problems: preventing new requests from coming in, and knowing when existing requests have completed. The gate class provides a solution.

+
Examples
closeable_test.cc.
+
+
+

#include <seastar/core/gate.hh>

+ + + + +

+Classes

class  holder
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

gate (const gate &)=delete
 
gate (gate &&x) noexcept
 
+gateoperator= (gate &&x) noexcept
 
bool try_enter () noexcept
 
void enter ()
 
void leave () noexcept
 
void check ()
 
future close () noexcept
 
+size_t get_count () const noexcept
 Returns a current number of registered in-progress requests.
 
+bool is_closed () const noexcept
 Returns whether the gate is closed.
 
holder hold ()
 
std::optional< holdertry_hold () noexcept
 
+ + + + + + + + +

+Related Functions

(Note that these are not member functions.)

+
template<typename Func >
auto with_gate (gate &g, Func &&func)
 
template<typename Func >
auto try_with_gate (gate &g, Func &&func) noexcept
 
+

Member Function Documentation

+ +

◆ check()

+ +
+
+ + + + + +
+ + + + + + + +
void seastar::gate::check ()
+
+inline
+
+

Potentially stop an in-progress request.

+

If the gate is already closed, a gate_closed_exception is thrown. By using enter() and leave(), the program can ensure that no further requests are serviced. However, long-running requests may continue to run. The check() method allows such a long operation to voluntarily stop itself after the gate is closed, by making calls to check() in appropriate places. check() with throw an exception and bail out of the long-running code if the gate is closed.

+
Examples
closeable_test.cc.
+
+ +
+
+ +

◆ close()

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::gate::close ()
+
+inlinenoexcept
+
+

Closes the gate.

+

Future calls to enter() will fail with an exception, and when all current requests call leave(), the returned future will be made ready.

+
Examples
closeable_test.cc.
+
+ +
+
+ +

◆ enter()

+ +
+
+ + + + + +
+ + + + + + + +
void seastar::gate::enter ()
+
+inline
+
+

Registers an in-progress request.

+

If the gate is not closed, the request is registered. Otherwise, a gate_closed_exception is thrown.

+
Examples
closeable_test.cc.
+
+ +
+
+ +

◆ hold()

+ +
+
+ + + + + +
+ + + + + + + +
holder seastar::gate::hold ()
+
+inline
+
+

Get a RAII-based gate::holder object that enter()s the gate when constructed and leave()s it when destroyed.

+
Examples
closeable_test.cc.
+
+ +
+
+ +

◆ leave()

+ +
+
+ + + + + +
+ + + + + + + +
void seastar::gate::leave ()
+
+inlinenoexcept
+
+

Unregisters an in-progress request.

+

If the gate is closed, and there are no more in-progress requests, the _stopped promise will be fulfilled.

+
Examples
closeable_test.cc.
+
+ +
+
+ +

◆ try_enter()

+ +
+
+ + + + + +
+ + + + + + + +
bool seastar::gate::try_enter ()
+
+inlinenoexcept
+
+

Tries to register an in-progress request.

+

If the gate is not closed, the request is registered and the function returns true, Otherwise the function just returns false and has no other effect.

+ +
+
+ +

◆ try_hold()

+ +
+
+ + + + + +
+ + + + + + + +
std::optional< holder > seastar::gate::try_hold ()
+
+inlinenoexcept
+
+

Try getting an optional RAII-based gate::holder object that enter()s the gate when constructed and leave()s it when destroyed. Returns std::nullopt iff the gate is closed.

+
Examples
closeable_test.cc.
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1gate_1_1holder-members.html b/master/classseastar_1_1gate_1_1holder-members.html new file mode 100644 index 000000000..1801687e6 --- /dev/null +++ b/master/classseastar_1_1gate_1_1holder-members.html @@ -0,0 +1,90 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::gate::holder Member List
+
+
+ +

This is the complete list of members for seastar::gate::holder, including all inherited members.

+ + + + + + + + + +
holder() noexceptseastar::gate::holderinline
holder(gate &g)seastar::gate::holderinlineexplicit
holder(const holder &x) noexceptseastar::gate::holderinline
holder(holder &&x) noexceptseastar::gate::holderinline
operator=(const holder &x) noexceptseastar::gate::holderinline
operator=(holder &&x) noexceptseastar::gate::holderinline
release() noexceptseastar::gate::holderinline
~holder()seastar::gate::holderinline
+ + + + diff --git a/master/classseastar_1_1gate_1_1holder.html b/master/classseastar_1_1gate_1_1holder.html new file mode 100644 index 000000000..7c8a7ef31 --- /dev/null +++ b/master/classseastar_1_1gate_1_1holder.html @@ -0,0 +1,281 @@ + + + + + + + +Seastar: seastar::gate::holder Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::gate::holder Class Reference
+
+
+

Detailed Description

+

Facility to hold a gate opened using RAII.

+

A gate::holder is usually obtained using gate::hold.

+

The gate is entered when the gate::holder is constructed, And the gate is left when the gate::holder is destroyed.

+

Copying the gate::holder reenters the gate to keep an extra reference on it. Moving the gate::holder is supported and has no effect on the gate itself.

+
Examples
closeable_test.cc.
+
+
+

#include <seastar/core/gate.hh>

+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 holder () noexcept
 
 holder (gate &g)
 
 holder (const holder &x) noexcept
 
 holder (holder &&x) noexcept
 
~holder ()
 Destroy a holder and leave the referenced gate.
 
holderoperator= (const holder &x) noexcept
 
holderoperator= (holder &&x) noexcept
 
+void release () noexcept
 Leave the held gate.
 
+

Constructor & Destructor Documentation

+ +

◆ holder() [1/4]

+ +
+
+ + + + + +
+ + + + + + + +
seastar::gate::holder::holder ()
+
+inlinenoexcept
+
+

Construct a default holder, referencing no gate. Never throws.

+ +
+
+ +

◆ holder() [2/4]

+ +
+
+ + + + + +
+ + + + + + + + +
seastar::gate::holder::holder (gateg)
+
+inlineexplicit
+
+

Construct a holder by entering the gate. May throw gate_closed_exception if the gate is already closed.

+ +
+
+ +

◆ holder() [3/4]

+ +
+
+ + + + + +
+ + + + + + + + +
seastar::gate::holder::holder (const holderx)
+
+inlinenoexcept
+
+

Construct a holder by copying another holder. Copying a holder never throws: The original holder has already entered the gate, so even if later the gate was close()d, the copy of the holder is also allowed to enter too. Note that the fiber waiting for the close(), which until now was waiting for the one holder to leave, will now wait for both copies to leave.

+ +
+
+ +

◆ holder() [4/4]

+ +
+
+ + + + + +
+ + + + + + + + +
seastar::gate::holder::holder (holder && x)
+
+inlinenoexcept
+
+

Construct a holder by moving another holder. The referenced gate is unaffected, and so the move-constructor must never throw.

+ +
+
+

Member Function Documentation

+ +

◆ operator=() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
holder & seastar::gate::holder::operator= (const holderx)
+
+inlinenoexcept
+
+

Copy-assign another holder. Leave() the current gate before assigning the other one, if they are different. Copying a holder never throws: The original holder has already entered the gate, so even if later the gate was close()d, the copy of the holder is also allowed to enter too. Note that the fiber waiting for the close(), which until now was waiting for the one holder to leave, will now wait for both copies to leave.

+ +
+
+ +

◆ operator=() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
holder & seastar::gate::holder::operator= (holder && x)
+
+inlinenoexcept
+
+

Move-assign another holder. The other gate is unaffected, and so the move-assign operator must always succeed. Leave the current gate before assigning the other one.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1gate__closed__exception-members.html b/master/classseastar_1_1gate__closed__exception-members.html new file mode 100644 index 000000000..404911bef --- /dev/null +++ b/master/classseastar_1_1gate__closed__exception-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::gate_closed_exception Member List
+
+
+ +

This is the complete list of members for seastar::gate_closed_exception, including all inherited members.

+ + +
what() const noexcept override (defined in seastar::gate_closed_exception)seastar::gate_closed_exceptioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1gate__closed__exception.html b/master/classseastar_1_1gate__closed__exception.html new file mode 100644 index 000000000..67f3bf82e --- /dev/null +++ b/master/classseastar_1_1gate__closed__exception.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: seastar::gate_closed_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::gate_closed_exception Class Reference
+
+
+

Detailed Description

+

Exception thrown when a gate object has been closed by the gate::close() method.

+
Examples
closeable_test.cc.
+
+
+

#include <seastar/core/gate.hh>

+
+Inheritance diagram for seastar::gate_closed_exception:
+
+
+ +
+ + + + +

+Public Member Functions

+virtual const char * what () const noexcept override
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1gate__closed__exception.png b/master/classseastar_1_1gate__closed__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..954f70ba14da57856cdfc2a59e8d340321b7396b GIT binary patch literal 657 zcmeAS@N?(olHy`uVBq!ia0vp^dw@8AgBeIp5qzHjq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ06g*uVLn;{G&b?UlT7k!ATTg7l@)y#+T z{hcq<+v0CLUpimPZa1$(kC2>#6DPmG!WQ<9fJ4kK8V?zPK4B2_s%YR)wQ*=cm40&? zgkcfI{Of1jKYyC3^K@&O}T=#Qn@)7IU$xn{q;vUjuD&0qJgF0He@ zwnlHte2eFsYOIsq@7S?+nbgV~Q9m}-osE$1-Puyrd+#D6@3+LF2e%m|emuNf_Q5nD zIOAO635%TFwHI}L`>(ZD?OlDaFhAZpHP~*~)0dBPKhN#C{c?>S`v>12dLi?33TpV@ z>z9_kIFjL+#{7Jm|*PCua{l$ zt)+UG@8z3)r`R3{-~FFkH~HcE54lsfOkZEg%JAFjVYP5gxGIDB3%!bl3|L5|YOj9*241g0MbPgg&ebxsLQ05_O26951J literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1http_1_1experimental_1_1client-members.html b/master/classseastar_1_1http_1_1experimental_1_1client-members.html new file mode 100644 index 000000000..a24c6012e --- /dev/null +++ b/master/classseastar_1_1http_1_1experimental_1_1client-members.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::http::experimental::client Member List
+
+
+ +

This is the complete list of members for seastar::http::experimental::client, including all inherited members.

+ + + + + + + + + + + + +
client(socket_address addr)seastar::http::experimental::clientexplicit
client(socket_address addr, shared_ptr< tls::certificate_credentials > creds, sstring host={})seastar::http::experimental::client
client(std::unique_ptr< connection_factory > f, unsigned max_connections=default_max_connections, retry_requests retry=retry_requests::no)seastar::http::experimental::clientexplicit
close()seastar::http::experimental::client
connections_nr() const noexceptseastar::http::experimental::clientinline
idle_connections_nr() const noexceptseastar::http::experimental::clientinline
make_request(request req, reply_handler handle, std::optional< reply::status_type > expected=std::nullopt)seastar::http::experimental::client
reply_handler typedef (defined in seastar::http::experimental::client)seastar::http::experimental::client
retry_requests typedef (defined in seastar::http::experimental::client)seastar::http::experimental::client
set_maximum_connections(unsigned nr)seastar::http::experimental::client
total_new_connections_nr() const noexceptseastar::http::experimental::clientinline
+ + + + diff --git a/master/classseastar_1_1http_1_1experimental_1_1client.html b/master/classseastar_1_1http_1_1experimental_1_1client.html new file mode 100644 index 000000000..4e23ff6ed --- /dev/null +++ b/master/classseastar_1_1http_1_1experimental_1_1client.html @@ -0,0 +1,396 @@ + + + + + + + +Seastar: seastar::http::experimental::client Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::http::experimental::client Class Reference
+
+
+

Detailed Description

+

Class client wraps communications using HTTP protocol.

+

The class allows making HTTP requests and handling replies. It's up to the caller to provide a transport, though for simple cases the class provides out-of-the-box facilities.

+

The main benefit client provides against connection is the transparent support for Keep-Alive transport sockets.

+
+

#include <seastar/http/client.hh>

+ + + + + + +

+Public Types

+using reply_handler = noncopyable_function< future<>(const reply &, input_stream< char > &&body)>
 
+using retry_requests = bool_class< struct retry_requests_tag >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 client (socket_address addr)
 Construct a simple client. More...
 
 client (socket_address addr, shared_ptr< tls::certificate_credentials > creds, sstring host={})
 Construct a secure client. More...
 
 client (std::unique_ptr< connection_factory > f, unsigned max_connections=default_max_connections, retry_requests retry=retry_requests::no)
 Construct a client with connection factory. More...
 
future make_request (request req, reply_handler handle, std::optional< reply::status_type > expected=std::nullopt)
 Send the request and handle the response. More...
 
future set_maximum_connections (unsigned nr)
 Updates the maximum number of connections a client may have. More...
 
future close ()
 Closes the client. More...
 
+unsigned connections_nr () const noexcept
 Returns the total number of connections.
 
+unsigned idle_connections_nr () const noexcept
 Returns the number of idle connections.
 
unsigned long total_new_connections_nr () const noexcept
 Returns the total number of connection factory invocations made so far. More...
 
+

Constructor & Destructor Documentation

+ +

◆ client() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + +
seastar::http::experimental::client::client (socket_address addr)
+
+explicit
+
+ +

Construct a simple client.

+

This creates a simple client that connects to provided address via plain (non-TLS) socket

+
Parameters
+ + +
addr– host address to connect to
+
+
+ +
+
+ +

◆ client() [2/3]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
seastar::http::experimental::client::client (socket_address addr,
shared_ptr< tls::certificate_credentialscreds,
sstring host = {} 
)
+
+ +

Construct a secure client.

+

This creates a client that connects to provided address via TLS socket with given credentials. In simple words – this makes an HTTPS client

+
Parameters
+ + + + +
addr– host address to connect to
creds– credentials
host– optional host name
+
+
+ +
+
+ +

◆ client() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
seastar::http::experimental::client::client (std::unique_ptr< connection_factoryf,
unsigned max_connections = default_max_connections,
retry_requests retry = retry_requests::no 
)
+
+explicit
+
+ +

Construct a client with connection factory.

+

This creates a client that uses factory to get connected_socket that is then used as transport. The client may withdraw more than one socket from the factory and may re-use the sockets on its own

+
Parameters
+ + + + +
f– the factory pointer
max_connections– maximum number of connection a client is allowed to maintain (both active and cached in pool)
retry– whether or not to retry requests on connection IO errors
+
+
+

The client uses connections provided by factory to send requests over and receive responses back. Once request-response cycle is over the connection used for that is kept by a client in a "pool". Making another http request may then pick up the existing connection from the pool thus avoiding the extra latency of establishing new connection. Pool may thus accumulate more than one connection if user sends several requests in parallel.

+

HTTP servers may sometimes want to terminate the connections it keeps. This can happen in one of several ways.

+

The "gentle" way is when server adds the "connection: close" header to its response. In that case client would handle the response and will just close the connection without putting it to pool.

+

Less gentle way a server may terminate a connection is by closing it, so the underlying TCP stack would communicate regular TCP FIN-s. If the connection happens to be in pool when it happens the client would just clean the connection from pool in the background.

+

Sometimes the least gentle closing occurs when server closes the connection on the fly and TCP starts communicating FIN-s in parallel with client using it. In that case, user would receive exception from the make_request() call and will have to do something about it. Client provides a transparent way of handling it called "retry".

+

When enabled, it makes client catch the transport error, close the broken connection, open another one and retry the very same request one more time over this new connection. If the second attempt fails, this error is reported back to user.

+ +
+
+

Member Function Documentation

+ +

◆ close()

+ +
+
+ + + + + + + +
future seastar::http::experimental::client::close ()
+
+ +

Closes the client.

+

Client must be closed before destruction unconditionally

+ +
+
+ +

◆ make_request()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
future seastar::http::experimental::client::make_request (request req,
reply_handler handle,
std::optional< reply::status_typeexpected = std::nullopt 
)
+
+ +

Send the request and handle the response.

+

Sends the provided request to the server and calls the provided callback to handle the response when it arrives. If the expected status is specified and the response's status is not the expected one, the handler is not called and the method resolves with exceptional future. Otherwise returns the handler's future

+
Parameters
+ + + + +
req– request to be sent
handle– the response handler
expected– the optional expected reply status code, default is std::nullopt
+
+
+

Note that the handle callback should be prepared to be called more than once, because client may restart the whole request processing in case server closes the connection in the middle of operation

+ +
+
+ +

◆ set_maximum_connections()

+ +
+
+ + + + + + + + +
future seastar::http::experimental::client::set_maximum_connections (unsigned nr)
+
+ +

Updates the maximum number of connections a client may have.

+

If the new limit is less than the amount of connections a client has, they will be closed. The returned future resolves when all excessive connections get closed

+
Parameters
+ + +
nr– the new limit on the number of connections
+
+
+ +
+
+ +

◆ total_new_connections_nr()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned long seastar::http::experimental::client::total_new_connections_nr () const
+
+inlinenoexcept
+
+ +

Returns the total number of connection factory invocations made so far.

+

This is the monotonically-increasing counter describing how "frequently" the client kicks its factory for new connections.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1http_1_1experimental_1_1connection-members.html b/master/classseastar_1_1http_1_1experimental_1_1connection-members.html new file mode 100644 index 000000000..f4cba9a2f --- /dev/null +++ b/master/classseastar_1_1http_1_1experimental_1_1connection-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::http::experimental::connection Member List
+
+
+ +

This is the complete list of members for seastar::http::experimental::connection, including all inherited members.

+ + + + + +
close()seastar::http::experimental::connection
connection(connected_socket &&fd, internal::client_ref cr)seastar::http::experimental::connection
in(reply &rep)seastar::http::experimental::connection
make_request(request rq)seastar::http::experimental::connection
+ + + + diff --git a/master/classseastar_1_1http_1_1experimental_1_1connection.html b/master/classseastar_1_1http_1_1experimental_1_1connection.html new file mode 100644 index 000000000..bc0781b5a --- /dev/null +++ b/master/classseastar_1_1http_1_1experimental_1_1connection.html @@ -0,0 +1,228 @@ + + + + + + + +Seastar: seastar::http::experimental::connection Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::http::experimental::connection Class Reference
+
+
+

Detailed Description

+

Class connection represents an HTTP connection over a given transport.

+

Check the demos/http_client_demo.cc for usage example

+
+

#include <seastar/http/client.hh>

+
+Inheritance diagram for seastar::http::experimental::connection:
+
+
+ + +seastar::enable_shared_from_this< connection > +seastar::shared_ptr_count_base + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 connection (connected_socket &&fd, internal::client_ref cr)
 Create an http connection. More...
 
future< replymake_request (request rq)
 Send the request and wait for response. More...
 
input_stream< char > in (reply &rep)
 Get a reference on the connection input stream. More...
 
future close ()
 Closes the connection. More...
 
+shared_ptr< connectionshared_from_this () noexcept
 
+shared_ptr< const connectionshared_from_this () const noexcept
 
+long use_count () const noexcept
 
+

Constructor & Destructor Documentation

+ +

◆ connection()

+ +
+
+ + + + + + + + + + + + + + + + + + +
seastar::http::experimental::connection::connection (connected_socket && fd,
internal::client_ref cr 
)
+
+ +

Create an http connection.

+

Construct the connection that will work over the provided \fd transport socket

+ +
+
+

Member Function Documentation

+ +

◆ close()

+ +
+
+ + + + + + + +
future seastar::http::experimental::connection::close ()
+
+ +

Closes the connection.

+

Connection must be closed regardless of whether there was an exception making the request or not

+ +
+
+ +

◆ in()

+ +
+
+ + + + + + + + +
input_stream< char > seastar::http::experimental::connection::in (replyrep)
+
+ +

Get a reference on the connection input stream.

+

The stream can be used to get back the server response body. After the stream is finished, the reply can be additionally updated with trailing headers and chunk extentions

+ +
+
+ +

◆ make_request()

+ +
+
+ + + + + + + + +
future< reply > seastar::http::experimental::connection::make_request (request rq)
+
+ +

Send the request and wait for response.

+

Sends the provided request to the server, and returns a future that will resolve into the server response.

+

If the request was configured with the set_expects_continue() and the server replied early with some error code, this early reply will be returned back.

+

The returned reply only contains the status and headers. To get the reply body the caller should read it via the input_stream provided by the connection.in() method.

+
Parameters
+ + +
rq– request to be sent
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1http_1_1experimental_1_1connection.png b/master/classseastar_1_1http_1_1experimental_1_1connection.png new file mode 100644 index 0000000000000000000000000000000000000000..628e61add8e2300e6b121c6cec06f1db698c2f1c GIT binary patch literal 1446 zcmb`Hdo+}39LL`Y(M5LCXZ?bSpL1wEbufIl9elW?9_V7Jjx7 z*RV^zY?q44)T2B` z9YZCoW*xqaE)-iSYg!2n;_vs>Me^xRbE((dKUBWr?n_F$D zKfa4jjL9dJKD(U+nnRfvos=aT&_6tt70oA}cxvPpSl{6C>I_`5L3IceEF5by~ zoQiQ@Pu!&Jtd8*!oW^xLGF7A+?VZ`B(vgk9NHl@SC&v8oX8zpN?WH?$o$Ce4^1UI$#5}k_U`13 z04pBxE4*l539jR38B&bSzCs*n#eyZY`BNEyF5)98?2P41C#fzI@V|}8E&{V`^(-F1 zfQNY|0!$cK&2+1D1D21hVPgQTWL>dAHmdcs42chQFKI;q??#j;2OvFJ4H#v+I%gqq zvr6zk9rAc=PECggccHnVu1QTz8{aa=pyPO9Q?(TjsMB!fZqF`e z0(etub)kMYH}LxWvqe|xm2Vg^YlWqZ75(Y`>|dv_?K=49rV|5vOMb!0z34Y>fv+bF ziEq-jZ(Bue<}!HnlpYR4=ZRByu>bh<5a)SJ2iT(9BYmErAJ)~^ieIf&M&X))J$7@p zS@Qg@DHlhr;U`Kr(L zq$lW~M}wLPQ0h1Up_956e@;iPT9(^{T!gdctCr~@u=R+p#X}f4hz$O(CXy&AC1ePH z6ORM59J>Ftf`|lip>&(AoDQ?`Jy&gxsU}_?iY>E!hW*Roi_jDw5Ll{vl)tHlCWr8(84wZc9;N4U~x&he->wjXBKfQ>I0(=+Q&MP|pg zGdc(6@4TvTS(AZL7*Fh(&IBcj%stU*?(^JUcqnLbv+wM&VU4f)$wSwANB^$#S>>R$ zN~MfH?)d6-z%F{~i)KJDt5ULM=thqv1- z?7oQJX7|hajpsXU5;(LVs(tqUUbj=7#O!qBM2r-u+$A&&sA+=+-{z};-jBB9V?m8I YD0Ev&x@``Dg?y?2 + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::http::experimental::connection_factory Member List
+
+
+ +

This is the complete list of members for seastar::http::experimental::connection_factory, including all inherited members.

+ + + +
make()=0seastar::http::experimental::connection_factorypure virtual
~connection_factory() (defined in seastar::http::experimental::connection_factory)seastar::http::experimental::connection_factoryinlinevirtual
+ + + + diff --git a/master/classseastar_1_1http_1_1experimental_1_1connection__factory.html b/master/classseastar_1_1http_1_1experimental_1_1connection__factory.html new file mode 100644 index 000000000..37cb9fcba --- /dev/null +++ b/master/classseastar_1_1http_1_1experimental_1_1connection__factory.html @@ -0,0 +1,126 @@ + + + + + + + +Seastar: seastar::http::experimental::connection_factory Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::http::experimental::connection_factory Class Referenceabstract
+
+
+

Detailed Description

+

Factory that provides transport for client.

+

This customization point allows callers provide its own transport for client. The client code calls factory when it needs more connections to the server and maintains the pool of re-usable sockets internally

+
+

#include <seastar/http/client.hh>

+ + + + + +

+Public Member Functions

virtual future< connected_socketmake ()=0
 Make a connected_socket. More...
 
+

Member Function Documentation

+ +

◆ make()

+ +
+
+ + + + + +
+ + + + + + + +
virtual future< connected_socket > seastar::http::experimental::connection_factory::make ()
+
+pure virtual
+
+ +

Make a connected_socket.

+

The implementations of this method should return ready-to-use socket that will be used by client as transport for its http connections

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1http_1_1internal_1_1client__ref-members.html b/master/classseastar_1_1http_1_1internal_1_1client__ref-members.html new file mode 100644 index 000000000..fc60cb8a6 --- /dev/null +++ b/master/classseastar_1_1http_1_1internal_1_1client__ref-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::http::internal::client_ref Member List
+
+
+ +

This is the complete list of members for seastar::http::internal::client_ref, including all inherited members.

+ + + + + +
client_ref(http::experimental::client *c) noexcept (defined in seastar::http::internal::client_ref)seastar::http::internal::client_ref
client_ref(client_ref &&o) noexcept (defined in seastar::http::internal::client_ref)seastar::http::internal::client_refinline
client_ref(const client_ref &)=delete (defined in seastar::http::internal::client_ref)seastar::http::internal::client_ref
~client_ref() (defined in seastar::http::internal::client_ref)seastar::http::internal::client_ref
+ + + + diff --git a/master/classseastar_1_1http_1_1internal_1_1client__ref.html b/master/classseastar_1_1http_1_1internal_1_1client__ref.html new file mode 100644 index 000000000..1129e139c --- /dev/null +++ b/master/classseastar_1_1http_1_1internal_1_1client__ref.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: seastar::http::internal::client_ref Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::http::internal::client_ref Class Reference
+
+
+ + + + + + + + +

+Public Member Functions

client_ref (http::experimental::client *c) noexcept
 
client_ref (client_ref &&o) noexcept
 
client_ref (const client_ref &)=delete
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1api__docs__20-members.html b/master/classseastar_1_1httpd_1_1api__docs__20-members.html new file mode 100644 index 000000000..303c7ce7b --- /dev/null +++ b/master/classseastar_1_1httpd_1_1api__docs__20-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::api_docs_20 Member List
+
+
+ +

This is the complete list of members for seastar::httpd::api_docs_20, including all inherited members.

+ + + + +
add_api(doc_entry &&f) (defined in seastar::httpd::api_docs_20)seastar::httpd::api_docs_20inline
add_definition(doc_entry &&f) (defined in seastar::httpd::api_docs_20)seastar::httpd::api_docs_20inline
write(output_stream< char > &&, std::unique_ptr< http::request > req) (defined in seastar::httpd::api_docs_20)seastar::httpd::api_docs_20
+ + + + diff --git a/master/classseastar_1_1httpd_1_1api__docs__20.html b/master/classseastar_1_1httpd_1_1api__docs__20.html new file mode 100644 index 000000000..62fc40dc1 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1api__docs__20.html @@ -0,0 +1,112 @@ + + + + + + + +Seastar: seastar::httpd::api_docs_20 Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::api_docs_20 Class Reference
+
+
+

Detailed Description

+

An api doc that support swagger version 2.0.

+

The result is a unified JSON file with the swagger definitions.

+

The file content is a concatenation of the doc_entry by the order of their entry.

+

Definitions will be added under the definition section

+

typical usage:

+

First entry:

+

{ "swagger": "2.0", "host": "localhost:10000", "basePath": "/v2", "paths": {

+

entry: "/config/{id}": { "get": { "description": "Return a config value", "operationId": "findConfigId", "produces": [ "application/json" ], } }

+

Closing the entries: },

+

"definitions": { .....

+

..... } }

+
+

#include <seastar/http/api_docs.hh>

+ + + + + + + + +

+Public Member Functions

+future write (output_stream< char > &&, std::unique_ptr< http::request > req)
 
+void add_api (doc_entry &&f)
 
+void add_definition (doc_entry &&f)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1api__registry-members.html b/master/classseastar_1_1httpd_1_1api__registry-members.html new file mode 100644 index 000000000..2bd6b9b73 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1api__registry-members.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::api_registry Member List
+
+
+ +

This is the complete list of members for seastar::httpd::api_registry, including all inherited members.

+ + + + + + + + + + + + + + + +
_base_path (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_baseprotected
_file_directory (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_baseprotected
_routes (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_baseprotected
api_registry(routes &routes, const sstring &file_directory, const sstring &base_path) (defined in seastar::httpd::api_registry)seastar::httpd::api_registryinline
api_registry_base(routes &routes, const sstring &file_directory, const sstring &base_path) (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_baseinline
handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep) overrideseastar::httpd::api_registryinlinevirtual
handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
handler_base(const handler_base &)=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
mandatory(const sstring &param)seastar::httpd::handler_baseinline
reg(const sstring &api, const sstring &description, const sstring &alternative_path="") (defined in seastar::httpd::api_registry)seastar::httpd::api_registryinline
set_route(handler_base *h) (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_baseinline
verify_mandatory_params(const http::request &req) constseastar::httpd::handler_baseinline
~api_registry_base()=default (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_basevirtual
~handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_basevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1api__registry.html b/master/classseastar_1_1httpd_1_1api__registry.html new file mode 100644 index 000000000..9f7a9bfed --- /dev/null +++ b/master/classseastar_1_1httpd_1_1api__registry.html @@ -0,0 +1,245 @@ + + + + + + + +Seastar: seastar::httpd::api_registry Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::api_registry Class Reference
+
+
+
+Inheritance diagram for seastar::httpd::api_registry:
+
+
+ + +seastar::httpd::api_registry_base +seastar::httpd::handler_base + +
+ + + + + + + + + + + + + + +

+Public Member Functions

api_registry (routes &routes, const sstring &file_directory, const sstring &base_path)
 
future< std::unique_ptr< http::reply > > handle (const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep) override
 
+void reg (const sstring &api, const sstring &description, const sstring &alternative_path="")
 
+void set_route (handler_base *h)
 
handler_basemandatory (const sstring &param)
 
void verify_mandatory_params (const http::request &req) const
 
+ + + + + + + +

+Protected Attributes

+sstring _base_path
 
+sstring _file_directory
 
+routes_routes
 
+

Member Function Documentation

+ +

◆ handle()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< std::unique_ptr< http::reply > > seastar::httpd::api_registry::handle (const sstring & path,
std::unique_ptr< http::requestreq,
std::unique_ptr< http::replyrep 
)
+
+inlineoverridevirtual
+
+

All handlers should implement this method. It fill the reply according to the request.

Parameters
+ + + + +
paththe url path used in this call
reqthe original request
repthe reply
+
+
+ +

Implements seastar::httpd::handler_base.

+ +
+
+ +

◆ mandatory()

+ +
+
+ + + + + +
+ + + + + + + + +
handler_base & seastar::httpd::handler_base::mandatory (const sstring & param)
+
+inlineinherited
+
+

Add a mandatory parameter

Parameters
+ + +
parama parameter name
+
+
+
Returns
a reference to the handler
+ +
+
+ +

◆ verify_mandatory_params()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::httpd::handler_base::verify_mandatory_params (const http::requestreq) const
+
+inlineinherited
+
+

Check if all mandatory parameters exist in the request. if any param does not exist, the function would throw a missing_param_exception

Parameters
+ + +
paramsreq the http request
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1api__registry.png b/master/classseastar_1_1httpd_1_1api__registry.png new file mode 100644 index 0000000000000000000000000000000000000000..ea325b8baffb6139a20c47e82f6eb186e6517004 GIT binary patch literal 1132 zcmeAS@N?(olHy`uVBq!ia0vp^2Z6YQgBeI>o~{Q;NCfzVxc>kDAIN<1=4)yHp$R}1 z7#}!rfVK0EJdn##666=m08|75S5Ji)F)%Ry_H=O!sbG9N_hQ}=4IWp1^GkpJtLIy( zFfw~iK35hSHf@KJM2-c^8ST@Xbb`BGC#i)AcuZQ~jVYQpw(x0gl+qs!MnFj z?|zlXq^tj@D(qEWvh0@K_iu)0e@#6bZ@crOT%6#QiElc#FYUciaieX?E*{RJ2R6~6 zlErbQdY)QOKfOM+Z|&zBhYsFZTwm=9*Q*vG}h z5YNiku)c}mK)55rgVhQQA3_BferRzp)SyZ~h{6cN(q>o~R$KhIa;K!vJ@(hXbe2h9 z_S&gQ)Fzd9i8mfA|Dt=_ApOdb2S z{G4`b#%G(IDl4aKyeY*svvdBEU03d2TNr!UZjsuJ={IF2Tr!hZUb@O8(YK@RKt;IV z5|!0?kMdILyFRTv@ilSvEq;zor#T(3N2Xc1ue-j*bk^(`nbT3Tf=lKvxc%(ov{|{f zyI%di;=cW(+`VRDrq8MDU%nrxQeUa3+%)_9g7dDwo4%P`l)YoK;I!-UohLGvo_AGS zKO^|cy}f$kva?N2xK8>K9Gmhc|9-ptUPk_S6VF}OWSjn!d^vyrXSL<02}|7e{eO_s z*f003zSUvU9TApEPgW~TP>Em50t_%??g!ytnPx;?7Ty!LS=q;b1CvjmfxY7sC5C*W zLLC+nyZsNvpQ|dl7dcy;@xb?A6B5pD`MJ~J>bITS z`M-bFo?YB#*EanFDBRO(`!zpqx79Gtojhml=Q#@Qw`#mo&s5Hf5t?FT7VW$@IP?!o z>B`-VRWL~$vV{mQG*>zi3j_vMZ;M8siyFYhPjaE_ZjaA>6o8A;TT_~M4 z({20fcfNXksk&!1cllq)E&k1a>*_Veb!NW~R~I-X?0eJjPcGs;OX<%B?7@6}CNP+7 z8{GDPR*RqS(@@;Y{>K#(v{$P+FTCpi+bs67?ecp8hCksjkMEP4F(qhL#D9iES-!h{ T+MA~Wiv|WyS3j3^P6 + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::api_registry_20 Member List
+
+
+ +

This is the complete list of members for seastar::httpd::api_registry_20, including all inherited members.

+ + + + + + + + + + + + + + + + +
_base_path (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_baseprotected
_file_directory (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_baseprotected
_routes (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_baseprotected
add_definition(doc_entry &&f) (defined in seastar::httpd::api_registry_20)seastar::httpd::api_registry_20inlinevirtual
api_registry_20(routes &routes, const sstring &file_directory, const sstring &base_path) (defined in seastar::httpd::api_registry_20)seastar::httpd::api_registry_20inline
api_registry_base(routes &routes, const sstring &file_directory, const sstring &base_path) (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_baseinline
handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep) overrideseastar::httpd::api_registry_20inlinevirtual
handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
handler_base(const handler_base &)=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
mandatory(const sstring &param)seastar::httpd::handler_baseinline
reg(doc_entry &&f) (defined in seastar::httpd::api_registry_20)seastar::httpd::api_registry_20inlinevirtual
set_route(handler_base *h) (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_baseinline
verify_mandatory_params(const http::request &req) constseastar::httpd::handler_baseinline
~api_registry_base()=default (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_basevirtual
~handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_basevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1api__registry__20.html b/master/classseastar_1_1httpd_1_1api__registry__20.html new file mode 100644 index 000000000..92377d921 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1api__registry__20.html @@ -0,0 +1,248 @@ + + + + + + + +Seastar: seastar::httpd::api_registry_20 Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::api_registry_20 Class Reference
+
+
+
+Inheritance diagram for seastar::httpd::api_registry_20:
+
+
+ + +seastar::httpd::api_registry_base +seastar::httpd::handler_base + +
+ + + + + + + + + + + + + + + + +

+Public Member Functions

api_registry_20 (routes &routes, const sstring &file_directory, const sstring &base_path)
 
future< std::unique_ptr< http::reply > > handle (const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep) override
 
+virtual void reg (doc_entry &&f)
 
+virtual void add_definition (doc_entry &&f)
 
+void set_route (handler_base *h)
 
handler_basemandatory (const sstring &param)
 
void verify_mandatory_params (const http::request &req) const
 
+ + + + + + + +

+Protected Attributes

+sstring _base_path
 
+sstring _file_directory
 
+routes_routes
 
+

Member Function Documentation

+ +

◆ handle()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< std::unique_ptr< http::reply > > seastar::httpd::api_registry_20::handle (const sstring & path,
std::unique_ptr< http::requestreq,
std::unique_ptr< http::replyrep 
)
+
+inlineoverridevirtual
+
+

All handlers should implement this method. It fill the reply according to the request.

Parameters
+ + + + +
paththe url path used in this call
reqthe original request
repthe reply
+
+
+ +

Implements seastar::httpd::handler_base.

+ +
+
+ +

◆ mandatory()

+ +
+
+ + + + + +
+ + + + + + + + +
handler_base & seastar::httpd::handler_base::mandatory (const sstring & param)
+
+inlineinherited
+
+

Add a mandatory parameter

Parameters
+ + +
parama parameter name
+
+
+
Returns
a reference to the handler
+ +
+
+ +

◆ verify_mandatory_params()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::httpd::handler_base::verify_mandatory_params (const http::requestreq) const
+
+inlineinherited
+
+

Check if all mandatory parameters exist in the request. if any param does not exist, the function would throw a missing_param_exception

Parameters
+ + +
paramsreq the http request
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1api__registry__20.png b/master/classseastar_1_1httpd_1_1api__registry__20.png new file mode 100644 index 0000000000000000000000000000000000000000..51b3119d7ce32bd807b9492f41bd6fea467d1b4b GIT binary patch literal 1149 zcmeAS@N?(olHy`uVBq!ia0vp^2Z6YQgBeI>o~{Q;NCfzVxc>kDAIN<1=4)yHp$R}1 z7#}!rfVK0EJdn##666=m08|75S5Ji)F)*<3c)B=-R4~4sd%N$67LTjAbhnt` zvYb&3y?WPJu1{y9>y8^~f(GkzZg11oHS>&$a8&Tz$HnCN>1sQR=cFjvxz(xd>#tqN z%J_82Y0{d1>semDR5ZQ%v2xpbgWuur{z;weeg36u!MBujo9d|k-qu`?Ri`H?Sf9JN z>Qu?|(C3qu1m*32_p84&F505Q_LsSF)8)+1+r4)enRO+neVKRb>ekb zx^v&JRo|Yo+}x!8!p2Oj%y!Z%qunQ;_KDu#EL%N2A#CbzlY-17@1WK4cbYjHf9_Jx zc;9HtV!xBUR?kYj3N9QjI9fq$jHtCaA=}Wx2gASDX7m|0~7~Tc)X3*o3)9%u8U8kV&jstY$I&rp$y(X41+_SDEDXcDEgf2$x%;vRbdee6zjl&yXj-Uah_*FOV{s)6qOa z>FmVUrn0@y)Wi>On)Xa&um6SI&lTQhx5YVst$npOx?cVsD0DXo|Ef+{J2_;!;KAA7 z7o2x}-gM67qU;@;g{NJw?>v#Y^t`Lu`WeAj?(NkRkDYCD!gbP@*t;ojroTVD{ayoq zyou+o>((qkU%r^X|7W%3rU^^j_We)Tbf91ETfE`~6?4``m7iLm5VAhFE%){*rXP!| z7nW!?86Ipsb}W9c`y8{d%j+E1zxrWwd-~abQ+F3f?OP^39~Asfw$DZWKfkrk z!+kcgy(G(T_f;*|`p@|)h`)UQL)FH)Wk+@2R<%nXd#HDFVV&tQ z&IwX8x9+X%`n2-I*Q?=M?G;X_2{+|!aCwy+-ggI zaQl0LQ^LMCE&t>qUbB?`WOSV0eU5c*<|6AIl}^*U*A-8^>@~mJXPxo#6??0%7uv`& zE&cOocFp4#sXafX846bK_n9!i@88ea`=={&FPKvQP~J!E$FoCq6B!OTLKE!O>(P^g dytrT6M~3@8+sn1(1hA}N@O1TaS?83{1OSB8Aw&QG literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1api__registry__base-members.html b/master/classseastar_1_1httpd_1_1api__registry__base-members.html new file mode 100644 index 000000000..042a73a34 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1api__registry__base-members.html @@ -0,0 +1,94 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::api_registry_base Member List
+
+
+ +

This is the complete list of members for seastar::httpd::api_registry_base, including all inherited members.

+ + + + + + + + + + + + + +
_base_path (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_baseprotected
_file_directory (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_baseprotected
_routes (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_baseprotected
api_registry_base(routes &routes, const sstring &file_directory, const sstring &base_path) (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_baseinline
handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)=0seastar::httpd::handler_basepure virtual
handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
handler_base(const handler_base &)=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
mandatory(const sstring &param)seastar::httpd::handler_baseinline
set_route(handler_base *h) (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_baseinline
verify_mandatory_params(const http::request &req) constseastar::httpd::handler_baseinline
~api_registry_base()=default (defined in seastar::httpd::api_registry_base)seastar::httpd::api_registry_basevirtual
~handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_basevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1api__registry__base.html b/master/classseastar_1_1httpd_1_1api__registry__base.html new file mode 100644 index 000000000..f980e447b --- /dev/null +++ b/master/classseastar_1_1httpd_1_1api__registry__base.html @@ -0,0 +1,243 @@ + + + + + + + +Seastar: seastar::httpd::api_registry_base Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::api_registry_base Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::httpd::api_registry_base:
+
+
+ + +seastar::httpd::handler_base +seastar::httpd::api_registry +seastar::httpd::api_registry_20 + +
+ + + + + + + + + + + + +

+Public Member Functions

api_registry_base (routes &routes, const sstring &file_directory, const sstring &base_path)
 
+void set_route (handler_base *h)
 
virtual future< std::unique_ptr< http::reply > > handle (const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)=0
 
handler_basemandatory (const sstring &param)
 
void verify_mandatory_params (const http::request &req) const
 
+ + + + + + + +

+Protected Attributes

+sstring _base_path
 
+sstring _file_directory
 
+routes_routes
 
+

Member Function Documentation

+ +

◆ handle()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual future< std::unique_ptr< http::reply > > seastar::httpd::handler_base::handle (const sstring & path,
std::unique_ptr< http::requestreq,
std::unique_ptr< http::replyrep 
)
+
+pure virtualinherited
+
+

All handlers should implement this method. It fill the reply according to the request.

Parameters
+ + + + +
paththe url path used in this call
reqthe original request
repthe reply
+
+
+ +

Implemented in seastar::httpd::api_registry, seastar::httpd::api_registry_20, seastar::httpd::directory_handler, seastar::httpd::file_handler, and seastar::httpd::function_handler.

+ +
+
+ +

◆ mandatory()

+ +
+
+ + + + + +
+ + + + + + + + +
handler_base & seastar::httpd::handler_base::mandatory (const sstring & param)
+
+inlineinherited
+
+

Add a mandatory parameter

Parameters
+ + +
parama parameter name
+
+
+
Returns
a reference to the handler
+ +
+
+ +

◆ verify_mandatory_params()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::httpd::handler_base::verify_mandatory_params (const http::requestreq) const
+
+inlineinherited
+
+

Check if all mandatory parameters exist in the request. if any param does not exist, the function would throw a missing_param_exception

Parameters
+ + +
paramsreq the http request
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1api__registry__base.png b/master/classseastar_1_1httpd_1_1api__registry__base.png new file mode 100644 index 0000000000000000000000000000000000000000..bc656350997441a7dd00732506be59ac710b7875 GIT binary patch literal 1537 zcmeAS@N?(olHy`uVBq!ia0y~yVC(_1J2;quG1o_sKzC@w^8jJtloQ8quc0deBHklVh5qr{e}5Pp(7n zPf4h(Oh2{9E%)Q3TRB^AKFQ~}x;`XXPCRflh;J~2JT9q#H|CN|-)!qkEvrBm#6e{PaCJ9f{?&|V=q zZvHzf&6ioR+or8qx$)h~_!o6czaRVOC|TM6EL;7!cihyvIJdl=(>A`^n0@h_dys71 z14e!S?8s$%YyYh1*}Gzot#qtevUgDb{T^n?v)4EF{5zY`zwCa`t6975au=Jdf4jpY zxGMGStXl1v(U}39pO+SE>%adRV`jQ?`{AlLJ7+Di`g6ck)l+|C@l20P)j&_*diMXM zg#631%nF{ffdP{HcrxP$t$H2jN&hrq!P1oK5hMT!=gUbOUhC>OW48Y)QP>5i25YS;(;F!iJz;c>_qbZev<)9Hm zQ-UNFq}e6g5`SbdoIAAre-E0uf2Q@Er_`;vy-;-6>>uRmkZS}n#8hE>C>%IdQ zHcC~5e!g-&WM5g)o+qI%)l;6RSsR75rY@Uo!VK7D0AJ7dl<9SAR8}A^Lj3Pjz2a%4|DVbF{Kb0p{EEAdwdLNc4j*KeEBQBD{j>hPp1Jcg z_ub-pZM{9$)}yo{((TUA{R+vm-0jXKo1D*;$@g0S?-w}xo9f?;2;eIyZY<+nHSv}F zge85Cv$Y=mS-m-=)@CR;xZV@px8Ethf9xV07&7#kaj*Pwu_{aCwT2 z{r|OMle{>}jLM!>UD3F5vLf+c{&Ypp|6S!LCM@AkkenpK0*nR)cqtkVE*wIPg1lbN b{>fioTYl`{D=rCOdClPI>gTe~DWM4fLdLB^ literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1api__registry__builder-members.html b/master/classseastar_1_1httpd_1_1api__registry__builder-members.html new file mode 100644 index 000000000..0837aba65 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1api__registry__builder-members.html @@ -0,0 +1,90 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::api_registry_builder Member List
+
+
+ +

This is the complete list of members for seastar::httpd::api_registry_builder, including all inherited members.

+ + + + + + + + + +
_base_path (defined in seastar::httpd::api_registry_builder_base)seastar::httpd::api_registry_builder_baseprotected
_file_directory (defined in seastar::httpd::api_registry_builder_base)seastar::httpd::api_registry_builder_baseprotected
api_registry_builder(const sstring &file_directory=DEFAULT_DIR, const sstring &base_path=DEFAULT_PATH) (defined in seastar::httpd::api_registry_builder)seastar::httpd::api_registry_builderinline
api_registry_builder_base(const sstring &file_directory=DEFAULT_DIR, const sstring &base_path=DEFAULT_PATH) (defined in seastar::httpd::api_registry_builder_base)seastar::httpd::api_registry_builder_baseinline
DEFAULT_DIR (defined in seastar::httpd::api_registry_builder_base)seastar::httpd::api_registry_builder_baseprotectedstatic
DEFAULT_PATH (defined in seastar::httpd::api_registry_builder_base)seastar::httpd::api_registry_builder_baseprotectedstatic
register_function(routes &r, const sstring &api, const sstring &description, const sstring &alternative_path="") (defined in seastar::httpd::api_registry_builder)seastar::httpd::api_registry_builderinline
set_api_doc(routes &r) (defined in seastar::httpd::api_registry_builder)seastar::httpd::api_registry_builderinline
+ + + + diff --git a/master/classseastar_1_1httpd_1_1api__registry__builder.html b/master/classseastar_1_1httpd_1_1api__registry__builder.html new file mode 100644 index 000000000..f49b765fa --- /dev/null +++ b/master/classseastar_1_1httpd_1_1api__registry__builder.html @@ -0,0 +1,127 @@ + + + + + + + +Seastar: seastar::httpd::api_registry_builder Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::api_registry_builder Class Reference
+
+
+
+Inheritance diagram for seastar::httpd::api_registry_builder:
+
+
+ + +seastar::httpd::api_registry_builder_base + +
+ + + + + + + + +

+Public Member Functions

api_registry_builder (const sstring &file_directory=DEFAULT_DIR, const sstring &base_path=DEFAULT_PATH)
 
+void set_api_doc (routes &r)
 
+void register_function (routes &r, const sstring &api, const sstring &description, const sstring &alternative_path="")
 
+ + + + + +

+Protected Attributes

+sstring _file_directory
 
+sstring _base_path
 
+ + + + + +

+Static Protected Attributes

+static const sstring DEFAULT_DIR
 
+static const sstring DEFAULT_PATH
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1api__registry__builder.png b/master/classseastar_1_1httpd_1_1api__registry__builder.png new file mode 100644 index 0000000000000000000000000000000000000000..647c0c16a8b37b6bd78d59a104978f55961d4c94 GIT binary patch literal 932 zcmeAS@N?(olHy`uVBq!ia0vp^?}0dggBeI3GrFV=q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0jXhl)Ln;{G&VAkYT7jp=*vBjR$1v5wWqXhw|32r znA~qmrI?RyQwf!b`enLrQb`}XWDWoQg6TY=)7yUAtlr)G=+kq*Id_hB@2pVCmDGP{ zb8bm))90o&?Sg3dnpX7xmS&c~-vHtm?XB zcI#*U6s~zZk$K{qDnk_Tvs&@RZqKsXIHcxL?+}zJl&RKc-TI1&5 zYr8@ocW?jqS}TihJ%*>@?|D zMZmAU->V-y=)e2U{NvOm|5>`%tDNmV8b0aS(cbsla&MP1eBi5Lh~W@_{QF~}?jiBV z)r+e&4~0M8{mS^jnTQ(3XGb4#8|aJ0H&kx?!E~nksCWV}G8jH5ePo>>-mQON54w^+ zOimmRofH^i*x<6-HM`X>JzD$uHv6mgu+M4ns|*8jn0Y?x?PGXe(XxIsufdUq_ixvC z-QWEBQo;P^kGBWL^wr0R>A!kBaZBo&d#PRjL^dXAN*Z=`b!p6bk{te%^+ws5>nm23 zOt1W+wT)rv*Xe(odRJeRKVY`|Ex(CfXdR=8#3x4oBJ@|Ix+O{iow&>&t;ucLK6UA CP0R)W literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1api__registry__builder20-members.html b/master/classseastar_1_1httpd_1_1api__registry__builder20-members.html new file mode 100644 index 000000000..8478785e8 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1api__registry__builder20-members.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::api_registry_builder20 Member List
+
+
+ +

This is the complete list of members for seastar::httpd::api_registry_builder20, including all inherited members.

+ + + + + + + + + + + + +
_base_path (defined in seastar::httpd::api_registry_builder_base)seastar::httpd::api_registry_builder_baseprotected
_file_directory (defined in seastar::httpd::api_registry_builder_base)seastar::httpd::api_registry_builder_baseprotected
add_definition(routes &r, doc_entry &&f)seastar::httpd::api_registry_builder20inline
add_definitions_file(routes &r, const sstring &file)seastar::httpd::api_registry_builder20inline
api_registry_builder20(const sstring &file_directory=DEFAULT_DIR, const sstring &base_path=DEFAULT_PATH) (defined in seastar::httpd::api_registry_builder20)seastar::httpd::api_registry_builder20inline
api_registry_builder_base(const sstring &file_directory=DEFAULT_DIR, const sstring &base_path=DEFAULT_PATH) (defined in seastar::httpd::api_registry_builder_base)seastar::httpd::api_registry_builder_baseinline
DEFAULT_DIR (defined in seastar::httpd::api_registry_builder_base)seastar::httpd::api_registry_builder_baseprotectedstatic
DEFAULT_PATH (defined in seastar::httpd::api_registry_builder_base)seastar::httpd::api_registry_builder_baseprotectedstatic
register_api_file(routes &r, const sstring &api)seastar::httpd::api_registry_builder20inline
register_function(routes &r, doc_entry &&f)seastar::httpd::api_registry_builder20inline
set_api_doc(routes &r) (defined in seastar::httpd::api_registry_builder20)seastar::httpd::api_registry_builder20inline
+ + + + diff --git a/master/classseastar_1_1httpd_1_1api__registry__builder20.html b/master/classseastar_1_1httpd_1_1api__registry__builder20.html new file mode 100644 index 000000000..0187aad35 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1api__registry__builder20.html @@ -0,0 +1,211 @@ + + + + + + + +Seastar: seastar::httpd::api_registry_builder20 Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::api_registry_builder20 Class Reference
+
+
+
+Inheritance diagram for seastar::httpd::api_registry_builder20:
+
+
+ + +seastar::httpd::api_registry_builder_base + +
+ + + + + + + + + + + + + + + + +

+Public Member Functions

api_registry_builder20 (const sstring &file_directory=DEFAULT_DIR, const sstring &base_path=DEFAULT_PATH)
 
+void set_api_doc (routes &r)
 
+void register_function (routes &r, doc_entry &&f)
 register a doc_entry This doc_entry can be used to either take the definition from a file or generate them dynamically.
 
+void register_api_file (routes &r, const sstring &api)
 register an API
 
void add_definition (routes &r, doc_entry &&f)
 
void add_definitions_file (routes &r, const sstring &file)
 
+ + + + + +

+Protected Attributes

+sstring _file_directory
 
+sstring _base_path
 
+ + + + + +

+Static Protected Attributes

+static const sstring DEFAULT_DIR
 
+static const sstring DEFAULT_PATH
 
+

Member Function Documentation

+ +

◆ add_definition()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::httpd::api_registry_builder20::add_definition (routesr,
doc_entry && f 
)
+
+inline
+
+

Add a footer doc_entry

+ +
+
+ +

◆ add_definitions_file()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::httpd::api_registry_builder20::add_definitions_file (routesr,
const sstring & file 
)
+
+inline
+
+

Add a definition file

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1api__registry__builder20.png b/master/classseastar_1_1httpd_1_1api__registry__builder20.png new file mode 100644 index 0000000000000000000000000000000000000000..f3ef078d0d4642270b608fa24fd6b18da75be8ba GIT binary patch literal 933 zcmeAS@N?(olHy`uVBq!ia0vp^?}0dggBeI3GrFV=q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0O*~y3Ln;{G&V9Y^u>wzvz1pS9|L*tZ zIUQgtTD|M7o@3IHvp3|D&%{qljm%>a^W4R&7Vjw~K6$-LZ?|wwv&vPE?*4Q6<*nw^ zSD)P%lDy!?v?W}-r`a6~pVU`4>0tGbw&f`+cA3OHkGz{KGQGb1(G$(MGe?y(Pgi`L zqWLTMNY~PoBN|#-iwY+7$3C6@QPuc_@agL-R+UVz{Gzo@Vd}N`Z``VUe)SV_HsAi| z@HqJC^?hGfo&TikSh6zf(s8y}u4SQFbGy3MTj!d1ILd9+WS#o#-NMj#;}t)bEvbB# z{^s+nneh*#`*S|zn&qDQ#(ZV#jUTD&?ihGXUKRKA(sbv`y^j^|A3Obzb%*zf=xuy5 zck@G+NX75@+Wo$~dA)RHel)o=Od~ko+?)*pEp8q)!!O4CP{EDY`A21PW*vH`VXtyU$csq7cUZK zmY#cO=|ijY&*c{Hkg?yc6Zhp9F!E+ppAz}Iy8C93QId$LXrRT(sHm(m0eQD;k z$oXR8?z_NvGh63Y&v5(AHv0=dLVkui6-`?|{aoCvFB=`(6Qazw)SaH6qrtGyNk4G6 zSnuNNpDeM(R>t3~yf-U=QI#HlB<_Ow53{&y-=m8+bIqw||9<;A=ZtTke&2oY+AVHD z?f!oy47aOl%Ddg(-hPb{OVRUV|CaxZxy} + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::api_registry_builder_base Member List
+
+
+ +

This is the complete list of members for seastar::httpd::api_registry_builder_base, including all inherited members.

+ + + + + + +
_base_path (defined in seastar::httpd::api_registry_builder_base)seastar::httpd::api_registry_builder_baseprotected
_file_directory (defined in seastar::httpd::api_registry_builder_base)seastar::httpd::api_registry_builder_baseprotected
api_registry_builder_base(const sstring &file_directory=DEFAULT_DIR, const sstring &base_path=DEFAULT_PATH) (defined in seastar::httpd::api_registry_builder_base)seastar::httpd::api_registry_builder_baseinline
DEFAULT_DIR (defined in seastar::httpd::api_registry_builder_base)seastar::httpd::api_registry_builder_baseprotectedstatic
DEFAULT_PATH (defined in seastar::httpd::api_registry_builder_base)seastar::httpd::api_registry_builder_baseprotectedstatic
+ + + + diff --git a/master/classseastar_1_1httpd_1_1api__registry__builder__base.html b/master/classseastar_1_1httpd_1_1api__registry__builder__base.html new file mode 100644 index 000000000..a86b6717c --- /dev/null +++ b/master/classseastar_1_1httpd_1_1api__registry__builder__base.html @@ -0,0 +1,122 @@ + + + + + + + +Seastar: seastar::httpd::api_registry_builder_base Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::api_registry_builder_base Class Reference
+
+
+
+Inheritance diagram for seastar::httpd::api_registry_builder_base:
+
+
+ + +seastar::httpd::api_registry_builder +seastar::httpd::api_registry_builder20 + +
+ + + + +

+Public Member Functions

api_registry_builder_base (const sstring &file_directory=DEFAULT_DIR, const sstring &base_path=DEFAULT_PATH)
 
+ + + + + +

+Protected Attributes

+sstring _file_directory
 
+sstring _base_path
 
+ + + + + +

+Static Protected Attributes

+static const sstring DEFAULT_DIR
 
+static const sstring DEFAULT_PATH
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1api__registry__builder__base.png b/master/classseastar_1_1httpd_1_1api__registry__builder__base.png new file mode 100644 index 0000000000000000000000000000000000000000..3fde8f2faf141ec714efeb35abe64287baa610f7 GIT binary patch literal 1215 zcmeAS@N?(olHy`uVBq!ia0y~yV0-~&2XHV0$)^colYo>&fKQ0)|NsAi%olIImi8Z- z0AzvjfddCvJMYK?xf~@ye!&btMIdnXREQA+1B;)hi(^Oy-$FP94mEuce~{~?sp`)3K{I|KdjPQY?)JO8U1xh;Sl;Jrx?kV9#LUj0Ryt*CnzQGrYxkcm^SgU>brc&< z`u#auE`JwXbC=2F0Dp!8YQ)U{w(pQWW%l@MeBQpuqSSYBHqR8hPwJ$AQdIb^%BVRrI!}r0{Cvs2epadH zrl$g5%w7IiWEdwuK6Ga4^{Ll$&jQob!Myb|?LA>>O3(9E3Ck~OC9~&_lQi2Gymq{u z zO>dgEWdF+W#%W9J*P=vSK*KZ@_FYZ$mSuiYX0DpG>}3Bx#=JMFk*(4*vw@`zgQu&X J%Q~loCIBkIE4Kgu literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1bad__chunk__exception-members.html b/master/classseastar_1_1httpd_1_1bad__chunk__exception-members.html new file mode 100644 index 000000000..43345cd2e --- /dev/null +++ b/master/classseastar_1_1httpd_1_1bad__chunk__exception-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::bad_chunk_exception Member List
+
+
+ +

This is the complete list of members for seastar::httpd::bad_chunk_exception, including all inherited members.

+ + + + + + + +
bad_chunk_exception(const std::string &msg) (defined in seastar::httpd::bad_chunk_exception)seastar::httpd::bad_chunk_exceptioninline
bad_request_exception(const std::string &msg) (defined in seastar::httpd::bad_request_exception)seastar::httpd::bad_request_exceptioninline
base_exception(const std::string &msg, http::reply::status_type status) (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
status() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
str() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
what() const noexcept (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1bad__chunk__exception.html b/master/classseastar_1_1httpd_1_1bad__chunk__exception.html new file mode 100644 index 000000000..3ebbdc1cc --- /dev/null +++ b/master/classseastar_1_1httpd_1_1bad__chunk__exception.html @@ -0,0 +1,111 @@ + + + + + + + +Seastar: seastar::httpd::bad_chunk_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::bad_chunk_exception Class Reference
+
+
+
+Inheritance diagram for seastar::httpd::bad_chunk_exception:
+
+
+ + +seastar::httpd::bad_request_exception +seastar::httpd::base_exception + +
+ + + + + + + + + + +

+Public Member Functions

bad_chunk_exception (const std::string &msg)
 
+virtual const char * what () const noexcept
 
+http::reply::status_type status () const
 
+virtual const std::string & str () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1bad__chunk__exception.png b/master/classseastar_1_1httpd_1_1bad__chunk__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..44f39e9526e3fa0ea7a597f05a8ddefd12b5f813 GIT binary patch literal 1454 zcmb7^e^AnA9LK-fI?GkA^K7Puwo|(xv*x9tc-CgxHxwFzhy>0YCRvhbN~vVIvx}BF zN(oI{Gh=GPZRR=@gt;Z5gr%l4#AynsC_hwCD|F;`-TrLP-Ru4NJa^A?&*$Es=RQ}C zqM|oCdpH9Cun{~QiLu9FJJNM)?0Sq6kYNw*M`N&uR#sN*>BO|FG_O8xCYlW3fx)SCpes%Du$XA3el=eF-7uWr&L*^#Nv5jeKmKGHW4qH&v#i$+MHF* zP3q0slRL(zPVIwg6$-<%Du(>jX^oWK*f`B546@)sO`h37WH(!AWfH1NXp}!yWIUUZ z3m@k#H#5#Dw~}3{#FPCGRia3jcNb&ns9H_C`i*t`7*yvq4Qg)drx6Q}<SEQMZ>B@iEd)1;(-fwP6s4Yo<{RTg@7jdo`0fEY5tM!xQH8ZVEhk; z?kBq!Gavhab_aar4UTBGXo|-G*@>|?Qt*L+HR?F_{KepYzsbY9&AyWrC{s^Y!pWA& zOh_O^#zWYS$%_W8jlqgippm9q9qvaJ+W2o1Wb_QPP@Qh!1a+pV1iH{Pg1nb?I%2LuE|>E5U90 zVR9T?_iOWfvgS6-e17lpPPpG>bjz6M4(jQMy^8^irIaP>cP9{F==0oBuxEuYz2Pfx zMu4;Rn`!RFcZm*fYaxKGo+gsjq_?%1qgtw$LSeDheB&bm+(Z;r2A2zwm_e3s3vC}(qYiD;W;TgQ zP$plf8kvE2Nsew)f?lz7?KfQoR2t+$2?uQ$ErWF#hZjlotRT`hNg>|BkBTSt$G?vGar zo69{!E%)PVX_ma7>HRVnb{v~|4=qV!*IQk5=#u4~yyKh5<(E(2(-H+6JJE`JiQp5K3+vt}%=T6u>< z$-6j^Sf3y6)LRbfe^T!k@>7V8PjtwlJjP(msL#Pce^^({rDkyf)Sq=Hzm);+H5URALEN9&1 z(vVY79p*C+WLR02kZ{?!bdRpgNiXs)SOA9g5Ew9U_BUP9n5KKYOsWiFZih%oufIeT m24er67%%2}Z()vzry{(yL%0ktWte@q0^lK3B>#)AFZ~UgZ{g + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::bad_param_exception Member List
+
+
+ +

This is the complete list of members for seastar::httpd::bad_param_exception, including all inherited members.

+ + + + + + + +
bad_param_exception(const std::string &msg) (defined in seastar::httpd::bad_param_exception)seastar::httpd::bad_param_exceptioninline
bad_request_exception(const std::string &msg) (defined in seastar::httpd::bad_request_exception)seastar::httpd::bad_request_exceptioninline
base_exception(const std::string &msg, http::reply::status_type status) (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
status() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
str() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
what() const noexcept (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1bad__param__exception.html b/master/classseastar_1_1httpd_1_1bad__param__exception.html new file mode 100644 index 000000000..7220ad514 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1bad__param__exception.html @@ -0,0 +1,111 @@ + + + + + + + +Seastar: seastar::httpd::bad_param_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::bad_param_exception Class Reference
+
+
+
+Inheritance diagram for seastar::httpd::bad_param_exception:
+
+
+ + +seastar::httpd::bad_request_exception +seastar::httpd::base_exception + +
+ + + + + + + + + + +

+Public Member Functions

bad_param_exception (const std::string &msg)
 
+virtual const char * what () const noexcept
 
+http::reply::status_type status () const
 
+virtual const std::string & str () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1bad__param__exception.png b/master/classseastar_1_1httpd_1_1bad__param__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..e90a35ef91e485cbb16dd0a2adda4788b4ec67eb GIT binary patch literal 1464 zcmb7^dr*>T6vokVD_3%Jb2GfOQDaYNiOu_C@bV8WXXf&m>FPCT)k1v|C_waZ;i*pk@ zOy$PYaWU~QQ`6cRd79t>gIR=QLk}bXX39DZ$k}HVW<6T1U8Ssy?L-W*a!XXj@JdIO zxtUE2T|m-{L@nEPFrV(OOr{mLUeSx?=bx@Uq3=Z42)}u zfpz?UN(a0S4tup0tHb$on#hoAQ+=Mhl;EH5OveIQU*P^3nACaj!?}DW);sJ1x z>-q{QXf=-op;P?YMiSzCSV@aLuM1(X&b6bQ)pG@f(;-8b9bF-5|1|B$RK8~{9R-< zhGh>;R(3y5JBm})m-TclNaoci2d{+C)Va{_EMR8E=EMSmn%(*2&VYM3{|=s=oNqIV zsa-{NMuB9$NJhR;1BvB|ohp_-O0Kvi*{uHRhvl>53s86XRfh9eB*ieYtN>=Fw=nTZ zC3=*qrZ#{|U0KgO_y;-UDr1Mt(QT=Mb*5m0cdNjhsxkxy6}@*|zEq%9bvji=>f{p7 zKIJox-V04mx`p#-XxT)hh;YL3f>=jFa(wM`c3)r;S}cnN{s>W3-aBu5Hq)eCKAGQT&) zW~sN5%Xhsl@I1T_Q|j_I2-6g6E&bFMfDzW989f>=KW~0(o#8h@JbQ62+w{%CuwgNw J?cb*U@-L@b;Qs&s literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1bad__request__exception-members.html b/master/classseastar_1_1httpd_1_1bad__request__exception-members.html new file mode 100644 index 000000000..8958aa4ca --- /dev/null +++ b/master/classseastar_1_1httpd_1_1bad__request__exception-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::bad_request_exception Member List
+
+
+ +

This is the complete list of members for seastar::httpd::bad_request_exception, including all inherited members.

+ + + + + + +
bad_request_exception(const std::string &msg) (defined in seastar::httpd::bad_request_exception)seastar::httpd::bad_request_exceptioninline
base_exception(const std::string &msg, http::reply::status_type status) (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
status() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
str() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
what() const noexcept (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1bad__request__exception.html b/master/classseastar_1_1httpd_1_1bad__request__exception.html new file mode 100644 index 000000000..4c1f71b17 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1bad__request__exception.html @@ -0,0 +1,117 @@ + + + + + + + +Seastar: seastar::httpd::bad_request_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::bad_request_exception Class Reference
+
+
+

Detailed Description

+

Throwing this exception will result in a 400 bad request result

+
+

#include <seastar/http/exception.hh>

+
+Inheritance diagram for seastar::httpd::bad_request_exception:
+
+
+ + +seastar::httpd::base_exception +seastar::httpd::bad_chunk_exception +seastar::httpd::bad_param_exception +seastar::httpd::missing_param_exception + +
+ + + + + + + + + + +

+Public Member Functions

bad_request_exception (const std::string &msg)
 
+virtual const char * what () const noexcept
 
+http::reply::status_type status () const
 
+virtual const std::string & str () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1bad__request__exception.png b/master/classseastar_1_1httpd_1_1bad__request__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..8762ee778279a56e220c93f8b1e23f751f7fe50d GIT binary patch literal 2504 zcmcJRdsI_L8o-0Ex~wTs1msl&D%4FCUw}X$)S#3q!PgZLl1P+y08!o;z_mhvimq1C zL_%3w(F+73CV(Jh8xXBvRD^^_fPfGn3CLn15Mnx^uGX{r$NtlM&Ye3m=X>0l@ArK( zIeT&5NL@2s1OkEd`NnHM0+ce0bH1I_lSvio|A?}2S~iyJ zoI}x7ogd3Cj!l2070K|C#aXmEf5r+%HT0K?rLw}e+c>xll9IWylN&!R!TGix>2S&) zp537pE>La#epnHS8s0>xGxf-2s=56QrH)kQ5 z1{L ztrV-eBsH7jH;%rAqYXj=hHAgx}40%qbLZS1L|P=HIk1cDh1O^n%bYdyHAu zTr9(&-X*|1Cp1RwDGT|D9_wXDk`Lw!^^XGYgv;UMU3gYll0c7JSe;}%bhs!tbarni z0R*uvd9;~v!-Cn;-BA)!I^S-7BK+-y3qLZU;e334I#|vv4|nmFp=~L&)QCKxe&hN? zs8cWHml_zB%$^(*LnlYs)Ta!VJqX7ab-}`9@h`7 zq?z7M>1RDxo)%dKpx@l#%$UD;LboeyC6pFfS+auD`YhP?DWNUpDVN5M`}e9}F(bl> z{|w+4N}N!5=19=0yZ#-&`Rki8`e`CI{c=*` zLB8M)dXApLFSjM}Zq|0I%pI>j=rc-7Oj0A-Y%8dg@wye8YYElj)_IxbHH<3>dw5d$ zMgQw|jB%Lhg~=Ne&avF$xiSg5>u|b@xAo>^*^th3kWbqFT{TNBKgZvQ9+NqoPO2&Oc~4&hw4DksdP?D?BjdzgkZr%K6PAO9W=#mupfpa znQ3!L>px*FBP6FOF_LCfn4Y^Di$aj&Yr#MMaV*A0ndBHvD2|68lL-Ppm_G4HyW z9~KuB_4rJwH(!t#z}?n_JPgSdC-N}Y6nCa*&*R+!J1aW~kLDG11gEJU(d39^hG>wM z`{I`4LAD@dt~Bb_J%Zj8Eo+ogZ+Vi*COCAloEA70aF6sKLaX*v$BBriJI=txb?KLs z(Ot0*6OJhMvKvB^tlBd0vZ#mM&SOV1CcB+^1^7H_4T|V7l6t4I{a$ruSj*e+F4VrT zX+nV#7FIq6e(t&}Yh*7^50&}=WX~x17Dz;37^qoFN zyr}%PtCG(iNB=zYop7ox!&l}sn=m#sGcDiHNFTzpdfjQ38`{gmj9=XlT0KcMP}ucL zpA*{WJL~%0n3^MRQKU*FepfABDVt11x7mtzPn!)sagIo>@y96#^3>1DV@o`Q!hxF< zy5jMv3bRRKhP{Sus9M-uw^|Znd8}~4SyP0a@#l~1eu0iRz3rY;N#rK>{2G{kC_VSt zSJSICtCK#jf@xB5j{0Ba1r&j5( zAYlqJZ~!ynB||`i_14{*YH(`3 p&HeJk`twi8)7p~$U39403i`p1T8x{&1Fl^NpPe`_=8mI({|&By(KY}8 literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1base__exception-members.html b/master/classseastar_1_1httpd_1_1base__exception-members.html new file mode 100644 index 000000000..45867e1f3 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1base__exception-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::base_exception Member List
+
+
+ +

This is the complete list of members for seastar::httpd::base_exception, including all inherited members.

+ + + + + +
base_exception(const std::string &msg, http::reply::status_type status) (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
status() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
str() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
what() const noexcept (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1base__exception.html b/master/classseastar_1_1httpd_1_1base__exception.html new file mode 100644 index 000000000..f594e58d6 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1base__exception.html @@ -0,0 +1,121 @@ + + + + + + + +Seastar: seastar::httpd::base_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::base_exception Class Reference
+
+
+

Detailed Description

+

The base_exception is a base for all http exception. It contains a message that will be return as the message content and a status that will be return as a status code.

+
+

#include <seastar/http/exception.hh>

+
+Inheritance diagram for seastar::httpd::base_exception:
+
+
+ + +seastar::httpd::bad_request_exception +seastar::httpd::not_found_exception +seastar::httpd::redirect_exception +seastar::httpd::server_error_exception +seastar::httpd::unexpected_status_error +seastar::httpd::bad_chunk_exception +seastar::httpd::bad_param_exception +seastar::httpd::missing_param_exception + +
+ + + + + + + + + + +

+Public Member Functions

base_exception (const std::string &msg, http::reply::status_type status)
 
+virtual const char * what () const noexcept
 
+http::reply::status_type status () const
 
+virtual const std::string & str () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1base__exception.png b/master/classseastar_1_1httpd_1_1base__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..c0d2fa1fe3f551f89810d624c7184c07b6e178cc GIT binary patch literal 3974 zcmdT{dsI@{8rQO`)5>&uOp}^sW!6;Iq-L6EDP|8Jl^!2iVoy`^k$|X()O9Au%B;!J zGKHHqna32(lmrnAXRN#fkr5^WndJioQ-o6>a1Ur}-8+BGy=&cd*P6T6+K0{F`|Q2H z-}n2z{X2R4g8a?rTFo^wGBV%23wglEXbuf-x0%g`p9(LB)$q^P`vOA!bUGc}92!+% z3m#vATZY=!);1@v*AD(`hB*)vVgygp7v8hb%|=ERi+3Y;gr*xyg~O@$_bi(8{FhsM z#Jc?C1&*sV0mzN4p!!)Zfvj^U)k|j0+HyCpuyTSc-e*fkf8wyr<|h2C zE$OePV|p%k^q=v{OENPvi>SsSaT{+W*LZu>DcD=aJX5CkpxA z8B+^i6fgI3oOG`Vj;gHXJJ)Iqc36((%iuky@(YAJrnmj(caW%c73y?PTkjRq2L1Fq zq#S7WdUUzdtJR$f>~g{DAvHD*-U>qr19xC%%G3F|$MxWwtdE#Rzi4z_^EEw~mUV}w zPaE;jWO~NIf8(Fu?>h7P1A})>*8eG9C%tqDY*=D2&u81ShX0Uwg|XKh$=1v;4U5lk zUx9J)nDU*W1A}YM{Lz4ZW9Dj32|4Ju7_6ve6y>k#@o**Dxl5-oV@T-K?Gd)(Lh-w? zLw&K>Wtzbhs=4i+X#yjz##SyuoH!oKOYoW_agU?t+9k#H7O`srmeKB6(e_rF+s;rO zu`Hu3g|Yg5qOQ4j8Fnn+#pQ<{O$I|ppQAI<*d0N#`7h)aT!c+rRtVKTGtr9bV4%^q4~O36A5FbZ!d1|zSlK3< zl)~0Z23gYub}??zSLrzwV@i735F*(^_cFZph@!}RM?cLUW%t!rB&2`J-M>>TKE}y7-+Ph!+k3k(!qGv0W84t zT17juadUk&xMe*M4oKmEP_Fo+!MCr&dqV;9vY9X%kG$3&3JAwDb0%;o{ki=k%wl73K0FGCUDO#Dvs-O_ke|j`! zo7Rk=i>%fBki8gj_GwCTB{;m1?}(2s0Ryu!PsmDfQ^!cBGlVR9%s5;vc__1om(fXK=Hnb$zp_Szg?Dg z;Rz*`lpUWZ>&&4c%4B@3fG9&-W9@89p43%QRHD5$qV2BOsMSu&Pz!a?kI!aWw;RLV6$f64Ax?FJ(K)&(Oge zxP;6DmCy$TE*gsN%z!fv!2=ynN-H=-d~V8T^!7Y##;GoHHFtV+HbP2~`sNUct{kUJ z1HXSdM5+>X0G#O9FZFz3Jl)n*C!jvJ+d{5oW1wv}L zv&!Ap^L03}+;nN0uyjvz9|tpdl+}gGmr?mz`cQUbFUk)xI47m>42Bar#so=Jwumm> ziDQDY0oG8q)V{Y$rRmCiNr>o-2?`+d==4GI!E*e>Vi!R8z7H=;6lO=NR|X;>#goJ< z@sg%V8suFtGL{8&MQRrb8~EB#jKy41eXke^^)`w(PS_Q^S7egS>LbPDL+$&YT>1YfHjPe3;=0w=Y&U{knRJW>M+QYn(x zBcu5^JX3Qg=v>sX6L`xLR_GjN}CF_|tw6-{{~ZXt01Zykwn z2E{B969E7Lv6*~gB3FZ4)=)(M5%#R;7eB~(jBqEn?)(sG%y}0k9Qdt|C+=OsM)~R6 z$3pbGTZ~+mf#A~94zy};;3qhQdmd18BLLpp+Y%5YbQ5@W);GEVz`6*m29@?)bNtmj zIQJZ>qJi;t`gs1s!9+n5{wgSFN`&kIYN9|k+a#;aSg$E(70oE9y=hxl(GBA0(Tq4c zj(S=)Y7m<54OjB^w#N<+|5ZNyH$tZFn_O0(C0y%f8x*Q~sx-t^uXgwN%+uRvY+PMr znM2qGtARGqp*;pR5|&=^UwqqbxE1dm{9jKC=xIvy9(xWa{WDdxM1itPI|kY>k8$pS z-7$0?_KeqPYrL6R_oeUP_Idr49`!Lv3da$}Lpt9J3 z0PlJ8cmmHmOK44Yjn8mN0eH?k-Sz=Ih-!(C;sL-$HSRUDN|oFwO2`QQ1>i->cw|^h z)%5Ix`GUC5h1rq$CP&YjBT$lF>PES0OK*}nx0c>x-z?UQxXBx_@mjCco=?M~FY5bt zm2spm(`Bh?0_!wS6pfh7x87PNURDRvI$4(L7#`~w^~a!_40>ksXdXC7QK%-8a_M6e za)l$!KBju7eVQuFqwh7Gen(6*KWF9?`YU8{XS7?hDfBIm&>IG4iv1Yk1Ig3#m5Sp z&&5`#D}dljJ=V#s_Z=(nvV*2jw#GZ-82PTZ!OXe!a@>Rl7mZ_%Dpju9g-he-(7;Ox5g^G2RT3B43=B;UG+eMebYw7wqbdwrEEGphy;dz0 zTGjy#dcLPJ*1@@{C;qT2_NSb$TUz+Rx`6EQ1W8y7-HF5H#0+ q3ATm7GD_yBmr+7fI0#5Oqmj6;KNg+xjDbIzjduG5A!~hN{`wDBI;IQ& literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1connection-members.html b/master/classseastar_1_1httpd_1_1connection-members.html new file mode 100644 index 000000000..922404989 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1connection-members.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::connection Member List
+
+
+ +

This is the complete list of members for seastar::httpd::connection, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
connection(http_server &server, connected_socket &&fd, socket_address, bool tls) (defined in seastar::httpd::connection)seastar::httpd::connectioninline
connection(http_server &server, connected_socket &&fd, bool tls) (defined in seastar::httpd::connection)seastar::httpd::connectioninline
connection(http_server &server, connected_socket &&fd, socket_address client_addr, socket_address server_addr, bool tls) (defined in seastar::httpd::connection)seastar::httpd::connectioninline
do_response_loop() (defined in seastar::httpd::connection)seastar::httpd::connection
generate_error_reply_and_close(std::unique_ptr< http::request > req, http::reply::status_type status, const sstring &msg) (defined in seastar::httpd::connection)seastar::httpd::connection
generate_reply(std::unique_ptr< http::request > req) (defined in seastar::httpd::connection)seastar::httpd::connection
on_new_connection() (defined in seastar::httpd::connection)seastar::httpd::connection
out() (defined in seastar::httpd::connection)seastar::httpd::connection
process() (defined in seastar::httpd::connection)seastar::httpd::connection
read() (defined in seastar::httpd::connection)seastar::httpd::connection
read_one() (defined in seastar::httpd::connection)seastar::httpd::connection
respond() (defined in seastar::httpd::connection)seastar::httpd::connection
set_headers(http::reply &resp) (defined in seastar::httpd::connection)seastar::httpd::connection
shutdown() (defined in seastar::httpd::connection)seastar::httpd::connection
start_response() (defined in seastar::httpd::connection)seastar::httpd::connection
write_body() (defined in seastar::httpd::connection)seastar::httpd::connection
~connection() (defined in seastar::httpd::connection)seastar::httpd::connection
+ + + + diff --git a/master/classseastar_1_1httpd_1_1connection.html b/master/classseastar_1_1httpd_1_1connection.html new file mode 100644 index 000000000..20d29c484 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1connection.html @@ -0,0 +1,143 @@ + + + + + + + +Seastar: seastar::httpd::connection Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::connection Class Reference
+
+
+
+Inheritance diagram for seastar::httpd::connection:
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

connection (http_server &server, connected_socket &&fd, socket_address, bool tls)
 
connection (http_server &server, connected_socket &&fd, bool tls)
 
connection (http_server &server, connected_socket &&fd, socket_address client_addr, socket_address server_addr, bool tls)
 
+void on_new_connection ()
 
+future process ()
 
+void shutdown ()
 
+future read ()
 
+future read_one ()
 
+future respond ()
 
+future do_response_loop ()
 
+void set_headers (http::reply &resp)
 
+future start_response ()
 
+future< bool > generate_reply (std::unique_ptr< http::request > req)
 
+void generate_error_reply_and_close (std::unique_ptr< http::request > req, http::reply::status_type status, const sstring &msg)
 
+future write_body ()
 
+output_stream< char > & out ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1connection.png b/master/classseastar_1_1httpd_1_1connection.png new file mode 100644 index 0000000000000000000000000000000000000000..96f2bc01468149882757b17382ca1a29119ebab6 GIT binary patch literal 729 zcmeAS@N?(olHy`uVBq!ia0vp^$ALJ2gBeK9+A)zINJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~Wq7(chEy=VoqKW9Y6Tuwas9jh{~x~| zEW*@ObuQO><>bEI3M?m@1mZn4mr8f2c*d`PFhRwhi_i1Z;zNZE!Mj$Sy-;Oz^ioYJ zo9EY`XQlQ(wwUiXsVefef5DRUT+gGvfvawxo3?D}uQ}gVZVkFG-ES^@c~A8DJu($3 z{N-mR>PFR1x?+DUC#T$IkKP@AgWUx$CVssxaeIf9<)yp*b@#1zue)th9vnG&S$XA?mQ6q=xNL1TWc47`z(FrYD4nYnE$&f<`kG*+}apg0H9jlD{R1Kf!`vkAK`gZS`jaQ0_{azg1v+m-VEm0wdqjKU~jtL|z67Jix zxl$|G2CS;o!YZK&9?glWroG^ zmi^3no%=a-x_(al?DhZb*D?HCvfY>Gg0=+%U#U1>L%*g4!ygSGe(^kcYLHj_`udi6 WMOWv{wCx0@Lk3S*KbLh*2~7Y}hGb>{ literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1content__replace-members.html b/master/classseastar_1_1httpd_1_1content__replace-members.html new file mode 100644 index 000000000..177f5727f --- /dev/null +++ b/master/classseastar_1_1httpd_1_1content__replace-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::content_replace Member List
+
+
+ +

This is the complete list of members for seastar::httpd::content_replace, including all inherited members.

+ + + + + + +
content_replace(const sstring &extension="")seastar::httpd::content_replaceinlineexplicit
file_transformer()=default (defined in seastar::httpd::file_transformer)seastar::httpd::file_transformer
file_transformer(file_transformer &&)=default (defined in seastar::httpd::file_transformer)seastar::httpd::file_transformer
transform(std::unique_ptr< http::request > req, const sstring &extension, output_stream< char > &&s)seastar::httpd::content_replacevirtual
~file_transformer()=default (defined in seastar::httpd::file_transformer)seastar::httpd::file_transformervirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1content__replace.html b/master/classseastar_1_1httpd_1_1content__replace.html new file mode 100644 index 000000000..f4d917b0c --- /dev/null +++ b/master/classseastar_1_1httpd_1_1content__replace.html @@ -0,0 +1,193 @@ + + + + + + + +Seastar: seastar::httpd::content_replace Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::content_replace Class Reference
+
+
+

Detailed Description

+

content_replace replaces variable in a file with a dynamic value. It would take the host from request and will replace the variable in a file

+

The replacement can be restricted to an extension.

+

We are currently support only one file type for replacement. It could be extend if we will need it

+
+

#include <seastar/http/transformers.hh>

+
+Inheritance diagram for seastar::httpd::content_replace:
+
+
+ + +seastar::httpd::file_transformer + +
+ + + + + + +

+Public Member Functions

virtual output_stream< char > transform (std::unique_ptr< http::request > req, const sstring &extension, output_stream< char > &&s)
 
 content_replace (const sstring &extension="")
 
+

Constructor & Destructor Documentation

+ +

◆ content_replace()

+ +
+
+ + + + + +
+ + + + + + + + +
seastar::httpd::content_replace::content_replace (const sstring & extension = "")
+
+inlineexplicit
+
+

the constructor get the file extension the replace would work on.

Parameters
+ + +
extensionfile extension, when not set all files extension
+
+
+ +
+
+

Member Function Documentation

+ +

◆ transform()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual output_stream< char > seastar::httpd::content_replace::transform (std::unique_ptr< http::requestreq,
const sstring & extension,
output_stream< char > && s 
)
+
+virtual
+
+

Any file transformer should implement this method.

Parameters
+ + + +
reqthe request
extensionthe file extension originating the content returns a new output stream to be used when writing the file to the reply
+
+
+ +

Implements seastar::httpd::file_transformer.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1content__replace.png b/master/classseastar_1_1httpd_1_1content__replace.png new file mode 100644 index 0000000000000000000000000000000000000000..47bb02bd38f91ea4b87fe5e6221483ae979ae594 GIT binary patch literal 730 zcmeAS@N?(olHy`uVBq!ia0vp^+krTMgBeKXd=!}uq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0GCf@!Ln;{G&W+}Ktia>S-*@G&e&r>m zgKU>PS6@*!nYKeoBAHMB`Sje|+gOjPDQ%k56zy`v|DdkYqvhInJYANA8@`+RHgD~e zWA`>^Wc75Mxc}Aq-7^KHReO|od*$x<92Fcs_53Y6r}yzU|GYWbyX&ZGRNSS_v25AD z1%r6kPBRO&-dOkV*xF?mry4$gu~TJY*t2JO1-CChGCj8P?{TLqxvP&&jPAV@?l8B) z{BO-x;r7A>^A4T4k{NU1%e*JW=f5Tfzg@rM^n*U@=(B!mf-h5?&+PcBoNcH6`fthp zx3@RPq%HgW*Np%B<=?f3a`&yfJ9+ZVeS6fc=7;qBx{}_%cAv~#|6{TjGIz%H2^H;7 z*Damlakk>||4&u-L)^{tNK_OZvpZlWr^}lt+weM_IpXKDO`V@Kl?Cx(*L#lRc z-|4gDaBb2Bm0h1jS3eK@{CckTyR}BoY{K<8qh`)7HN6q-{r2|C?JKL^ab1sPe7c~V zeUet}jk+m?@3o{0-J%4et$CW@3wDw z`+q;UyWsu1@0{CzS~326GOwm!|M8k2!&isr`~9!_Wj23{@U@>y7{9XBI$W+<^y%gd ze};Wm@9w|D{qdh=`9Id0PoKN~vK53uJ^#h$qvp~rbN(@SY*d@7eW1?-m=GB}UHx3v IIVCg!0C(ba7ytkO literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1directory__handler-members.html b/master/classseastar_1_1httpd_1_1directory__handler-members.html new file mode 100644 index 000000000..edfb5c866 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1directory__handler-members.html @@ -0,0 +1,97 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::directory_handler Member List
+
+
+ +

This is the complete list of members for seastar::httpd::directory_handler, including all inherited members.

+ + + + + + + + + + + + + + + + +
directory_handler(const sstring &doc_root, file_transformer *transformer=nullptr)seastar::httpd::directory_handlerexplicit
file_interaction_handler(file_transformer *p=nullptr) (defined in seastar::httpd::file_interaction_handler)seastar::httpd::file_interaction_handlerinline
get_extension(const sstring &file)seastar::httpd::file_interaction_handlerstatic
get_stream(std::unique_ptr< http::request > req, const sstring &extension, output_stream< char > &&s) (defined in seastar::httpd::file_interaction_handler)seastar::httpd::file_interaction_handlerprotected
handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep) overrideseastar::httpd::directory_handlervirtual
handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
handler_base(const handler_base &)=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
mandatory(const sstring &param)seastar::httpd::handler_baseinline
read(sstring file, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)seastar::httpd::file_interaction_handlerprotected
redirect_if_needed(const http::request &req, http::reply &rep) constseastar::httpd::file_interaction_handler
set_transformer(file_transformer *t)seastar::httpd::file_interaction_handlerinline
transformer (defined in seastar::httpd::file_interaction_handler)seastar::httpd::file_interaction_handlerprotected
verify_mandatory_params(const http::request &req) constseastar::httpd::handler_baseinline
~file_interaction_handler() (defined in seastar::httpd::file_interaction_handler)seastar::httpd::file_interaction_handler
~handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_basevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1directory__handler.html b/master/classseastar_1_1httpd_1_1directory__handler.html new file mode 100644 index 000000000..da00e9488 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1directory__handler.html @@ -0,0 +1,459 @@ + + + + + + + +Seastar: seastar::httpd::directory_handler Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+

Detailed Description

+

The directory handler get a disk path in the constructor. and expect a path parameter in the handle method. it would concatenate the two and return the file e.g. if the path is /usr/mgmt/public in the path parameter is index.html handle will return the content of /usr/mgmt/public/index.html

+
+

#include <seastar/http/file_handler.hh>

+
+Inheritance diagram for seastar::httpd::directory_handler:
+
+
+ + +seastar::httpd::file_interaction_handler +seastar::httpd::handler_base + +
+ + + + + + + + + + + + + + +

+Public Member Functions

 directory_handler (const sstring &doc_root, file_transformer *transformer=nullptr)
 
future< std::unique_ptr< http::reply > > handle (const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep) override
 
file_interaction_handlerset_transformer (file_transformer *t)
 
bool redirect_if_needed (const http::request &req, http::reply &rep) const
 
handler_basemandatory (const sstring &param)
 
void verify_mandatory_params (const http::request &req) const
 
+ + + +

+Static Public Member Functions

static sstring get_extension (const sstring &file)
 
+ + + + + +

+Protected Member Functions

future< std::unique_ptr< http::reply > > read (sstring file, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)
 
+output_stream< char > get_stream (std::unique_ptr< http::request > req, const sstring &extension, output_stream< char > &&s)
 
+ + + +

+Protected Attributes

+file_transformertransformer
 
+

Constructor & Destructor Documentation

+ +

◆ directory_handler()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
seastar::httpd::directory_handler::directory_handler (const sstring & doc_root,
file_transformertransformer = nullptr 
)
+
+explicit
+
+

The directory handler map a base path and a path parameter to a file

Parameters
+ + + +
doc_rootthe root directory to search the file from.
transformeran optional file transformer For example if the root is '/usr/mgmt/public' and the path parameter will be '/css/style.css' the file wil be /usr/mgmt/public/css/style.css'
+
+
+ +
+
+

Member Function Documentation

+ +

◆ get_extension()

+ +
+
+ + + + + +
+ + + + + + + + +
static sstring seastar::httpd::file_interaction_handler::get_extension (const sstring & file)
+
+staticinherited
+
+

A helper method that returns the file extension.

Parameters
+ + +
filethe file to check
+
+
+
Returns
the file extension
+ +
+
+ +

◆ handle()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< std::unique_ptr< http::reply > > seastar::httpd::directory_handler::handle (const sstring & path,
std::unique_ptr< http::requestreq,
std::unique_ptr< http::replyrep 
)
+
+overridevirtual
+
+

All handlers should implement this method. It fill the reply according to the request.

Parameters
+ + + + +
paththe url path used in this call
reqthe original request
repthe reply
+
+
+ +

Implements seastar::httpd::handler_base.

+ +
+
+ +

◆ mandatory()

+ +
+
+ + + + + +
+ + + + + + + + +
handler_base & seastar::httpd::handler_base::mandatory (const sstring & param)
+
+inlineinherited
+
+

Add a mandatory parameter

Parameters
+ + +
parama parameter name
+
+
+
Returns
a reference to the handler
+ +
+
+ +

◆ read()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< std::unique_ptr< http::reply > > seastar::httpd::file_interaction_handler::read (sstring file,
std::unique_ptr< http::requestreq,
std::unique_ptr< http::replyrep 
)
+
+protectedinherited
+
+

read a file from the disk and return it in the replay.

Parameters
+ + + + +
filethe full path to a file on the disk
reqthe reuest
repthe reply
+
+
+ +
+
+ +

◆ redirect_if_needed()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool seastar::httpd::file_interaction_handler::redirect_if_needed (const http::requestreq,
http::replyrep 
) const
+
+inherited
+
+

if the url ends without a slash redirect

Parameters
+ + + +
reqthe request
repthe reply
+
+
+
Returns
true on redirect
+ +
+
+ +

◆ set_transformer()

+ +
+
+ + + + + +
+ + + + + + + + +
file_interaction_handler * seastar::httpd::file_interaction_handler::set_transformer (file_transformert)
+
+inlineinherited
+
+

Allows setting a transformer to be used with the files returned.

Parameters
+ + +
tthe file transformer to use
+
+
+
Returns
this
+ +
+
+ +

◆ verify_mandatory_params()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::httpd::handler_base::verify_mandatory_params (const http::requestreq) const
+
+inlineinherited
+
+

Check if all mandatory parameters exist in the request. if any param does not exist, the function would throw a missing_param_exception

Parameters
+ + +
paramsreq the http request
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1directory__handler.png b/master/classseastar_1_1httpd_1_1directory__handler.png new file mode 100644 index 0000000000000000000000000000000000000000..5ddac24d313ac9ce8e685f7f048303898a7ae2ac GIT binary patch literal 1162 zcmeAS@N?(olHy`uVBq!ia0vp^4}rLYgBeJwO{=*Dq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IYLBt2amLn;{G&V4y)vlS2P?c<@9|K0bg zuA+!Nfb;VFEYQ}yJwIRTS$UOOLB@LYTC+|m{8->(&1 zD>!vqa#D$&dW`HIo0eq}tD~#=lUFW%_uM0EkDWe;xA#}^_4BSJ886QBxYVg9sCHa) z)}j@=ghQ*Erp&*5EAs!Tjrt!Ce4n~^uh$OCT)*Hv@pEp4A@N_P-Fk8RLw`+ux53&p ztJ0Nses_I4&w2UGybYUgoLTXB;u7K5vnH18DfivA>!yBKapHSr!lqBUp6|aLt*&s0 zxO$HBc6EgOqWVhy-!Z#b_dLCH(YC5=`_3)Cs_Q?_iMSOLr4#l3_w1b^lis~*wx6j| zyUyNkM%^m;n;&easN61c^4z4W4rD}eB=;1iG5%R4#}J%db?A6<*^!r=;s;I&K3D$| z!<7*0$B__CJpK@SRO0a!C9g|I;1=w1kWg89_0~?2uLXIn7y7Tsdt9367JUD#^!cCZ zEkBt(rC!P|ROv05T@d;C`fj~zuddzm)!BOGuZ(AJ?(MMbllM38_0u~faZ5K=eRcHx zwEZP_`<^OaKC(+#jB%>#)wxRE{u4eKzsplgw|6gdU)RlfG^`{!G(>-H!7}HcDOc{fx3L?}yOraY2@P)DL#3ZOHf)*w>N@A=@5jw%`vl)SFKrPq zUH*OIbiP*$5B*C$w0O~$%ExkY0%2QcFaPpJE>0=u{X&we|Z= zZ{5=6@)!P9Zks1{zHF69TlD0YiTL()Z7rgSNg6o4fe(QbvgvXElA7>rJhW zzqrqThK`JoSm0H=>O*>B3o6bT`HDK;JMeJV-J6Fm-di$HYgOOM`-eBTe0gYVqp&9H z=Dmv5Y-;*~+rA4VERcV4N%w*7$6lryUmSQ@fkQ`r@gHJ{Dxc7_ ST^U$#FnGH9xvX + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::file_handler Member List
+
+
+ +

This is the complete list of members for seastar::httpd::file_handler, including all inherited members.

+ + + + + + + + + + + + + + + + +
file_handler(const sstring &file, file_transformer *transformer=nullptr, bool force_path=true)seastar::httpd::file_handlerinlineexplicit
file_interaction_handler(file_transformer *p=nullptr) (defined in seastar::httpd::file_interaction_handler)seastar::httpd::file_interaction_handlerinline
get_extension(const sstring &file)seastar::httpd::file_interaction_handlerstatic
get_stream(std::unique_ptr< http::request > req, const sstring &extension, output_stream< char > &&s) (defined in seastar::httpd::file_interaction_handler)seastar::httpd::file_interaction_handlerprotected
handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep) overrideseastar::httpd::file_handlervirtual
handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
handler_base(const handler_base &)=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
mandatory(const sstring &param)seastar::httpd::handler_baseinline
read(sstring file, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)seastar::httpd::file_interaction_handlerprotected
redirect_if_needed(const http::request &req, http::reply &rep) constseastar::httpd::file_interaction_handler
set_transformer(file_transformer *t)seastar::httpd::file_interaction_handlerinline
transformer (defined in seastar::httpd::file_interaction_handler)seastar::httpd::file_interaction_handlerprotected
verify_mandatory_params(const http::request &req) constseastar::httpd::handler_baseinline
~file_interaction_handler() (defined in seastar::httpd::file_interaction_handler)seastar::httpd::file_interaction_handler
~handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_basevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1file__handler.html b/master/classseastar_1_1httpd_1_1file__handler.html new file mode 100644 index 000000000..cb124ed24 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1file__handler.html @@ -0,0 +1,466 @@ + + + + + + + +Seastar: seastar::httpd::file_handler Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+

Detailed Description

+

The file handler get a path to a file on the disk in the constructor. it will always return the content of the file.

+
+

#include <seastar/http/file_handler.hh>

+
+Inheritance diagram for seastar::httpd::file_handler:
+
+
+ + +seastar::httpd::file_interaction_handler +seastar::httpd::handler_base + +
+ + + + + + + + + + + + + + +

+Public Member Functions

 file_handler (const sstring &file, file_transformer *transformer=nullptr, bool force_path=true)
 
future< std::unique_ptr< http::reply > > handle (const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep) override
 
file_interaction_handlerset_transformer (file_transformer *t)
 
bool redirect_if_needed (const http::request &req, http::reply &rep) const
 
handler_basemandatory (const sstring &param)
 
void verify_mandatory_params (const http::request &req) const
 
+ + + +

+Static Public Member Functions

static sstring get_extension (const sstring &file)
 
+ + + + + +

+Protected Member Functions

future< std::unique_ptr< http::reply > > read (sstring file, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)
 
+output_stream< char > get_stream (std::unique_ptr< http::request > req, const sstring &extension, output_stream< char > &&s)
 
+ + + +

+Protected Attributes

+file_transformertransformer
 
+

Constructor & Destructor Documentation

+ +

◆ file_handler()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
seastar::httpd::file_handler::file_handler (const sstring & file,
file_transformertransformer = nullptr,
bool force_path = true 
)
+
+inlineexplicit
+
+

The file handler map a file to a url

Parameters
+ + + + +
filethe full path to the file on the disk
transformeran optional file transformer
force_pathcheck if redirect is needed upon handle
+
+
+ +
+
+

Member Function Documentation

+ +

◆ get_extension()

+ +
+
+ + + + + +
+ + + + + + + + +
static sstring seastar::httpd::file_interaction_handler::get_extension (const sstring & file)
+
+staticinherited
+
+

A helper method that returns the file extension.

Parameters
+ + +
filethe file to check
+
+
+
Returns
the file extension
+ +
+
+ +

◆ handle()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< std::unique_ptr< http::reply > > seastar::httpd::file_handler::handle (const sstring & path,
std::unique_ptr< http::requestreq,
std::unique_ptr< http::replyrep 
)
+
+overridevirtual
+
+

All handlers should implement this method. It fill the reply according to the request.

Parameters
+ + + + +
paththe url path used in this call
reqthe original request
repthe reply
+
+
+ +

Implements seastar::httpd::handler_base.

+ +
+
+ +

◆ mandatory()

+ +
+
+ + + + + +
+ + + + + + + + +
handler_base & seastar::httpd::handler_base::mandatory (const sstring & param)
+
+inlineinherited
+
+

Add a mandatory parameter

Parameters
+ + +
parama parameter name
+
+
+
Returns
a reference to the handler
+ +
+
+ +

◆ read()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< std::unique_ptr< http::reply > > seastar::httpd::file_interaction_handler::read (sstring file,
std::unique_ptr< http::requestreq,
std::unique_ptr< http::replyrep 
)
+
+protectedinherited
+
+

read a file from the disk and return it in the replay.

Parameters
+ + + + +
filethe full path to a file on the disk
reqthe reuest
repthe reply
+
+
+ +
+
+ +

◆ redirect_if_needed()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool seastar::httpd::file_interaction_handler::redirect_if_needed (const http::requestreq,
http::replyrep 
) const
+
+inherited
+
+

if the url ends without a slash redirect

Parameters
+ + + +
reqthe request
repthe reply
+
+
+
Returns
true on redirect
+ +
+
+ +

◆ set_transformer()

+ +
+
+ + + + + +
+ + + + + + + + +
file_interaction_handler * seastar::httpd::file_interaction_handler::set_transformer (file_transformert)
+
+inlineinherited
+
+

Allows setting a transformer to be used with the files returned.

Parameters
+ + +
tthe file transformer to use
+
+
+
Returns
this
+ +
+
+ +

◆ verify_mandatory_params()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::httpd::handler_base::verify_mandatory_params (const http::requestreq) const
+
+inlineinherited
+
+

Check if all mandatory parameters exist in the request. if any param does not exist, the function would throw a missing_param_exception

Parameters
+ + +
paramsreq the http request
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1file__handler.png b/master/classseastar_1_1httpd_1_1file__handler.png new file mode 100644 index 0000000000000000000000000000000000000000..ac03265d2b219903270386c6fc48b91acd07af5d GIT binary patch literal 1124 zcmeAS@N?(olHy`uVBq!ia0vp^4}rLYgBeJwO{=*Dq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0KYO}3hEy=VoqN0QwE~Z;xb({Z|4*vx zdhSs3)i*Bg(J2)-IQUKJ!5*RHp5Sf`PvO&?swcP237C}g+WC-z=i0Exm#$p?ov|Zp z$CH;_o>tR^*D=ZoI$d6KH+RqSjbA4Hw42PExU3}xdlF#m$ zez95Q(S~(%4c5NlwC+FKWhDZ;e|Y=^$uEsw)F`)Ae6XV+VOW6~F&_&x3HEurt{ zY}niWRq@x!>KoTD={{ULt?%8%yLYZ#+BU`JS#e@!cIL*++Bf;vf;_9j{<=XBfpKiALRx_fMQ_tNQSzRxtd5qJBQ?$O=-*N?hNIqy$>@uYNf?!VI) z-p1G&`L450oEUI3??j!F0v~kU{6=xx>s-Qq7UV+s(gO5a<%@& zhGlk3-COR4*h!XtnfTbTZ@Jy<;91b%?k|g1jKYuo!Uv??v-)C-_H>Xd( z-=NL@HRR!cqlbaPziJ-K$q9t*HTQpc({_)`jeCcmZ!PiOu_8A%ue>GRxO>rzkO24y36{rRsJrm>ousgvcK7FZu`S}ipuRGC(li~ z>Oe*mM{-YL8snc;c?`kXRflfpmK}M?DSqIj;B)maQCtbJejEwW#N!XKtpbOxC^7ix zsIzR)1>&{&0(`b>jxAle{If>r&b*I_c8l8?=e>B(@tN7-<8S9fspl_0-<);ro!Py+ zx_eXn;+OpWSo_a#?xZ;J>D=bYdpA}5D0+0Av%BTgG9&d>U$`gKCl_zF$WJk}jo9hV zRIzG0hxzlfD>ctWPt4fNE_+HbQ9N;n?DhV8-OEkp?z-}BThbq~hr4#D`5c?Kp_`>( z(R3}}eXlK#T|Bq%2jA<>Mo!ss{}>NtfB(?1;Z>~F(&p*kt(R|Evo!ipw65&k>AQEX zUHUif>Q)o!;IizVZPS=yE|~9YXL$arSAs$LuYJqQ%Rm3-{E=n4F-;hPul + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::file_interaction_handler Member List
+
+
+ +

This is the complete list of members for seastar::httpd::file_interaction_handler, including all inherited members.

+ + + + + + + + + + + + + + + +
file_interaction_handler(file_transformer *p=nullptr) (defined in seastar::httpd::file_interaction_handler)seastar::httpd::file_interaction_handlerinline
get_extension(const sstring &file)seastar::httpd::file_interaction_handlerstatic
get_stream(std::unique_ptr< http::request > req, const sstring &extension, output_stream< char > &&s) (defined in seastar::httpd::file_interaction_handler)seastar::httpd::file_interaction_handlerprotected
handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)=0seastar::httpd::handler_basepure virtual
handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
handler_base(const handler_base &)=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
mandatory(const sstring &param)seastar::httpd::handler_baseinline
read(sstring file, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)seastar::httpd::file_interaction_handlerprotected
redirect_if_needed(const http::request &req, http::reply &rep) constseastar::httpd::file_interaction_handler
set_transformer(file_transformer *t)seastar::httpd::file_interaction_handlerinline
transformer (defined in seastar::httpd::file_interaction_handler)seastar::httpd::file_interaction_handlerprotected
verify_mandatory_params(const http::request &req) constseastar::httpd::handler_baseinline
~file_interaction_handler() (defined in seastar::httpd::file_interaction_handler)seastar::httpd::file_interaction_handler
~handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_basevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1file__interaction__handler.html b/master/classseastar_1_1httpd_1_1file__interaction__handler.html new file mode 100644 index 000000000..d30bc5cb3 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1file__interaction__handler.html @@ -0,0 +1,409 @@ + + + + + + + +Seastar: seastar::httpd::file_interaction_handler Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::file_interaction_handler Class Referenceabstract
+
+
+

Detailed Description

+

A base class for handlers that interact with files. directory and file handlers both share some common logic with regards to file handling. they both needs to read a file from the disk, optionally transform it, and return the result or page not found on error

+
+

#include <seastar/http/file_handler.hh>

+
+Inheritance diagram for seastar::httpd::file_interaction_handler:
+
+
+ + +seastar::httpd::handler_base +seastar::httpd::directory_handler +seastar::httpd::file_handler + +
+ + + + + + + + + + + + + + +

+Public Member Functions

file_interaction_handler (file_transformer *p=nullptr)
 
file_interaction_handlerset_transformer (file_transformer *t)
 
bool redirect_if_needed (const http::request &req, http::reply &rep) const
 
virtual future< std::unique_ptr< http::reply > > handle (const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)=0
 
handler_basemandatory (const sstring &param)
 
void verify_mandatory_params (const http::request &req) const
 
+ + + +

+Static Public Member Functions

static sstring get_extension (const sstring &file)
 
+ + + + + +

+Protected Member Functions

future< std::unique_ptr< http::reply > > read (sstring file, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)
 
+output_stream< char > get_stream (std::unique_ptr< http::request > req, const sstring &extension, output_stream< char > &&s)
 
+ + + +

+Protected Attributes

+file_transformertransformer
 
+

Member Function Documentation

+ +

◆ get_extension()

+ +
+
+ + + + + +
+ + + + + + + + +
static sstring seastar::httpd::file_interaction_handler::get_extension (const sstring & file)
+
+static
+
+

A helper method that returns the file extension.

Parameters
+ + +
filethe file to check
+
+
+
Returns
the file extension
+ +
+
+ +

◆ handle()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual future< std::unique_ptr< http::reply > > seastar::httpd::handler_base::handle (const sstring & path,
std::unique_ptr< http::requestreq,
std::unique_ptr< http::replyrep 
)
+
+pure virtualinherited
+
+

All handlers should implement this method. It fill the reply according to the request.

Parameters
+ + + + +
paththe url path used in this call
reqthe original request
repthe reply
+
+
+ +

Implemented in seastar::httpd::api_registry, seastar::httpd::api_registry_20, seastar::httpd::directory_handler, seastar::httpd::file_handler, and seastar::httpd::function_handler.

+ +
+
+ +

◆ mandatory()

+ +
+
+ + + + + +
+ + + + + + + + +
handler_base & seastar::httpd::handler_base::mandatory (const sstring & param)
+
+inlineinherited
+
+

Add a mandatory parameter

Parameters
+ + +
parama parameter name
+
+
+
Returns
a reference to the handler
+ +
+
+ +

◆ read()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< std::unique_ptr< http::reply > > seastar::httpd::file_interaction_handler::read (sstring file,
std::unique_ptr< http::requestreq,
std::unique_ptr< http::replyrep 
)
+
+protected
+
+

read a file from the disk and return it in the replay.

Parameters
+ + + + +
filethe full path to a file on the disk
reqthe reuest
repthe reply
+
+
+ +
+
+ +

◆ redirect_if_needed()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool seastar::httpd::file_interaction_handler::redirect_if_needed (const http::requestreq,
http::replyrep 
) const
+
+

if the url ends without a slash redirect

Parameters
+ + + +
reqthe request
repthe reply
+
+
+
Returns
true on redirect
+ +
+
+ +

◆ set_transformer()

+ +
+
+ + + + + +
+ + + + + + + + +
file_interaction_handler * seastar::httpd::file_interaction_handler::set_transformer (file_transformert)
+
+inline
+
+

Allows setting a transformer to be used with the files returned.

Parameters
+ + +
tthe file transformer to use
+
+
+
Returns
this
+ +
+
+ +

◆ verify_mandatory_params()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::httpd::handler_base::verify_mandatory_params (const http::requestreq) const
+
+inlineinherited
+
+

Check if all mandatory parameters exist in the request. if any param does not exist, the function would throw a missing_param_exception

Parameters
+ + +
paramsreq the http request
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1file__interaction__handler.png b/master/classseastar_1_1httpd_1_1file__interaction__handler.png new file mode 100644 index 0000000000000000000000000000000000000000..67a04a6fc934d55b31c91082bbd80ad0c0c2d60a GIT binary patch literal 1610 zcmcJPdrXsO6vjUU6;uX;;RUoHn;1kWR-p(?6s!d;1$#r3;)S+=a*=Tpq{^lSq(-g| zi?ogjm9`?2QVy)(Krc%#sXl|$4}Xbg8{(u-hlo4aOVuh8Dj;!ZRS9K-L|)j9b2!$HFfuQXlGCk zh?NE#F0Wl!tx4;vi}f?qIM;H%4WM)O`Trec6zY2p?p4>QBnb<}_a7**qQN0q*oGrL{4LcJM-G(GN^bR8dy$tRJTv4e z5=wDyGD15G6EF|aY1ur;^wdXNyi>bAII6b~i6qC7f2~j5LUOAc4JrryBtp6kjLW6c zr{XEpUBAOEPuvzs)GxzqYJOHE=Fh)t(>3cJ!`{~<92AvlqihdF92=_0V0<58R?q(E zTmAgm$x0mr!y0vKa+nfoAwEi8IZAn^gJGg^9NdnbzFh#rUjiHdLPLc0*TsHmm;Db>@vcBi>&*DgIuh1luQ}#Z zMsndx17#iz4tG=^%RlbdcDyekJJwbGbbQ@ z5NG1ar`M>panZKJ!o&wJxCyc{L8ae-dCSK1LHA8Yyh!~4y11`66h9E~8e@n(TFp#m zw)f@;+>;)cof}<5mL^qLDx2x_Z^-*o>MD<~-Eh94KgrDw&xd6yTBJM*Y`KG@Ede znADgQ?U9h8AgS7`TDtvZN{@t$o{g6*5a>MWj#$}^dVP;q;*6pcZZ&BpQ+1A5OxwPx+2h#im3Zpz}et5-4_ z;~>1;d`WlAL#PkM06lrP$BDdb<17E{`3q?a0Qwu4Z>Nz5dIFW%viH4|^^dV-6w6uB zB^|(5Ku@BfKk#93Y0`1gmUc#tmUb&ri$S#vRBPB4cE(`+7oMfZ)%TAd1B?~xVhf5) z%)t%&?{o$6WBX?cRp3hdNa2BeyeY~N>*fk#{3%;W?wmwj=XnA=qyjM(*I{b|7qPL8 zxDjasTrnyVdhAr@1j%qji?ETTOGnGQq)jb>U5lP$(5!bJBY*Ds^DALZi~+>w=O8tL z=#o(Fnq+mPVj=W5dq#fRxJnSN6otb;n?SmFj!eL(7QV*Z!S+=#--SL)i+E5Yu5x-H zxz0&McVviEkqjuEep<|wZ+;Rpwl3>H1GUz%`-Lbgx5hEAK@emWm*%X@os-h8S6?2D0=j+eeshEXFQspb6H z8ZKLCK?`sh8nQ1sE#5$nzja=p2YrO%zYxcdv|r|M9S3zQ!c5ZqM;2s1Hn#N(=`AJm zgFDWrP&igT8+o}^dq|?Gud_yFH2TtGs;=Ry4=-o>5{9@pM3wd4t3y(7RlBM3aQJLD zA)!;~3EsXrf-wC>7BYl5JZ%hx@HlrLYNYs!;-RA5>TF5SwAF_n&C(hLO6WWLrFkMKi=&}8E`C2nZ35|dFmjNyq{6GK#z5l-NiSPaZn3x8& literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1file__transformer-members.html b/master/classseastar_1_1httpd_1_1file__transformer-members.html new file mode 100644 index 000000000..1b9e6b401 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1file__transformer-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::file_transformer Member List
+
+
+ +

This is the complete list of members for seastar::httpd::file_transformer, including all inherited members.

+ + + + + +
file_transformer()=default (defined in seastar::httpd::file_transformer)seastar::httpd::file_transformer
file_transformer(file_transformer &&)=default (defined in seastar::httpd::file_transformer)seastar::httpd::file_transformer
transform(std::unique_ptr< http::request > req, const sstring &extension, output_stream< char > &&s)=0seastar::httpd::file_transformerpure virtual
~file_transformer()=default (defined in seastar::httpd::file_transformer)seastar::httpd::file_transformervirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1file__transformer.html b/master/classseastar_1_1httpd_1_1file__transformer.html new file mode 100644 index 000000000..5cfe8d201 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1file__transformer.html @@ -0,0 +1,162 @@ + + + + + + + +Seastar: seastar::httpd::file_transformer Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::file_transformer Class Referenceabstract
+
+
+

Detailed Description

+

This is a base class for file transformer.

+

File transformer adds the ability to modify a file content before returning the results, it acts as a factory class for output_stream.

+

The transformer decides according to the file extension if transforming is needed.

+

If a transformation is needed it would create a new output stream from the given stream.

+
+

#include <seastar/http/file_handler.hh>

+
+Inheritance diagram for seastar::httpd::file_transformer:
+
+
+ + +seastar::httpd::content_replace + +
+ + + + + + +

+Public Member Functions

virtual output_stream< char > transform (std::unique_ptr< http::request > req, const sstring &extension, output_stream< char > &&s)=0
 
file_transformer (file_transformer &&)=default
 
+

Member Function Documentation

+ +

◆ transform()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual output_stream< char > seastar::httpd::file_transformer::transform (std::unique_ptr< http::requestreq,
const sstring & extension,
output_stream< char > && s 
)
+
+pure virtual
+
+

Any file transformer should implement this method.

Parameters
+ + + +
reqthe request
extensionthe file extension originating the content returns a new output stream to be used when writing the file to the reply
+
+
+ +

Implemented in seastar::httpd::content_replace.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1file__transformer.png b/master/classseastar_1_1httpd_1_1file__transformer.png new file mode 100644 index 0000000000000000000000000000000000000000..306ec9e42376002555a5aa6ca4076ced674107e7 GIT binary patch literal 738 zcmeAS@N?(olHy`uVBq!ia0vp^+krTMgBeKXd=!}uq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ03O!vMLn;{G&W+}Ktia>S@Am57bel|$ zgA$iAS6x#!nO4Lqk<6$6eEO82r~s9Qry_S4>bUY4?DrnF{c6z@eX)FdSmo!#52k<4 zO=kGF?tY;;yF=~zXVw4Th?YmbHa30rXvMW}FZW&T+WF+t<-c$4@8&*b7;*djgshCM zTUOrcy!q4ggk`UuRdHwBK9;w$XPJ`se`Y7$!&n$Jm z#}2lx=94e(Sn$$T^LgB<%gb)b7s@yDmTxSxp2@J-?nqCx{ibKd8}IG@eRu!fd8=o? ztlEEe_5Skx`a5>ts{Z~YX&L|f&U5Obi|xMNOkS<;{(N#Fdr8!~>5n-q?@XR%waeq| zkE8#W{O7S`SOUlpZ)T?ajI8nrv zCn#voy1k=g{=El&N=jkvh1$Q~t^8d2-urv_+}Fj+@9NG3g`#BkYSGV|mz$J*Hwzbk zSu$TD>d3z0{?y7<|4+u2y(`FfP1h@)s^7UKKkwSngnZqt`P1*kChpXpvy*A<+Vab5 z&a`Y@Y*iloMez8!b!G+f?wjXVYx>X5s&Cxgvg?7I)ojO$Gs`WbXY5qJfAjslyl=PJ z%$x0Y-xt3V` + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::function_handler Member List
+
+
+ +

This is the complete list of members for seastar::httpd::function_handler, including all inherited members.

+ + + + + + + + + + + + + + + +
_f_handle (defined in seastar::httpd::function_handler)seastar::httpd::function_handlerprotected
_type (defined in seastar::httpd::function_handler)seastar::httpd::function_handlerprotected
function_handler(const handle_function &f_handle, const sstring &type) (defined in seastar::httpd::function_handler)seastar::httpd::function_handlerinline
function_handler(const future_handler_function &f_handle, const sstring &type) (defined in seastar::httpd::function_handler)seastar::httpd::function_handlerinline
function_handler(const request_function &_handle, const sstring &type) (defined in seastar::httpd::function_handler)seastar::httpd::function_handlerinline
function_handler(const json_request_function &_handle) (defined in seastar::httpd::function_handler)seastar::httpd::function_handlerinline
function_handler(const future_json_function &_handle) (defined in seastar::httpd::function_handler)seastar::httpd::function_handlerinline
function_handler(const function_handler &)=default (defined in seastar::httpd::function_handler)seastar::httpd::function_handler
handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep) overrideseastar::httpd::function_handlerinlinevirtual
handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
handler_base(const handler_base &)=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
mandatory(const sstring &param)seastar::httpd::handler_baseinline
verify_mandatory_params(const http::request &req) constseastar::httpd::handler_baseinline
~handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_basevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1function__handler.html b/master/classseastar_1_1httpd_1_1function__handler.html new file mode 100644 index 000000000..7c23ed543 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1function__handler.html @@ -0,0 +1,254 @@ + + + + + + + +Seastar: seastar::httpd::function_handler Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::function_handler Class Reference
+
+
+

Detailed Description

+

The function handler get a lambda expression in the constructor. it will call that expression to get the result This is suited for very simple handlers

+
+

#include <seastar/http/function_handlers.hh>

+
+Inheritance diagram for seastar::httpd::function_handler:
+
+
+ + +seastar::httpd::handler_base + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

function_handler (const handle_function &f_handle, const sstring &type)
 
function_handler (const future_handler_function &f_handle, const sstring &type)
 
function_handler (const request_function &_handle, const sstring &type)
 
function_handler (const json_request_function &_handle)
 
function_handler (const future_json_function &_handle)
 
function_handler (const function_handler &)=default
 
future< std::unique_ptr< http::reply > > handle (const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep) override
 
handler_basemandatory (const sstring &param)
 
void verify_mandatory_params (const http::request &req) const
 
+ + + + + +

+Protected Attributes

+future_handler_function _f_handle
 
+sstring _type
 
+

Member Function Documentation

+ +

◆ handle()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< std::unique_ptr< http::reply > > seastar::httpd::function_handler::handle (const sstring & path,
std::unique_ptr< http::requestreq,
std::unique_ptr< http::replyrep 
)
+
+inlineoverridevirtual
+
+

All handlers should implement this method. It fill the reply according to the request.

Parameters
+ + + + +
paththe url path used in this call
reqthe original request
repthe reply
+
+
+ +

Implements seastar::httpd::handler_base.

+ +
+
+ +

◆ mandatory()

+ +
+
+ + + + + +
+ + + + + + + + +
handler_base & seastar::httpd::handler_base::mandatory (const sstring & param)
+
+inlineinherited
+
+

Add a mandatory parameter

Parameters
+ + +
parama parameter name
+
+
+
Returns
a reference to the handler
+ +
+
+ +

◆ verify_mandatory_params()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::httpd::handler_base::verify_mandatory_params (const http::requestreq) const
+
+inlineinherited
+
+

Check if all mandatory parameters exist in the request. if any param does not exist, the function would throw a missing_param_exception

Parameters
+ + +
paramsreq the http request
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1function__handler.png b/master/classseastar_1_1httpd_1_1function__handler.png new file mode 100644 index 0000000000000000000000000000000000000000..5a0706c701fbda7657cb0701b05e1a4ad1ad1cb9 GIT binary patch literal 719 zcmeAS@N?(olHy`uVBq!ia0vp^yMZ`>gBeJco&6#Sq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0;yhg(Ln;{G&b_^9kpquwc>bzC|NZ4Q zEPStFb-bcVE%eQ+>`AFS52vO^PV+pfzfS%f5QNMJkHd zcV3i-*8KV&+dH|=#&0es&t+P(dB@(lM~?ojIv7{AD*sM-RDZAQ-ikAFvBxZq2IRWm z`@y1V&!67^t^ClGJ&teQ{g>Dz|8CZQv-RBOi#e|L-U~i`wQ26rx^r^I0@(_End>9= zpOe$A{&p@oIqFgV(Z)U!68b$g*fMScmN)85K*gItWN zX60CI){|X4tJ75A_?GZBxi^xx%-g$AB&TAF=2!MR^VQq_OkREznEDtzUHx3vIVCg!0H9%ML;wH) literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1handler__base-members.html b/master/classseastar_1_1httpd_1_1handler__base-members.html new file mode 100644 index 000000000..d1a78b263 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1handler__base-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::handler_base Member List
+
+
+ +

This is the complete list of members for seastar::httpd::handler_base, including all inherited members.

+ + + + + + + +
handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)=0seastar::httpd::handler_basepure virtual
handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
handler_base(const handler_base &)=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_baseprotected
mandatory(const sstring &param)seastar::httpd::handler_baseinline
verify_mandatory_params(const http::request &req) constseastar::httpd::handler_baseinline
~handler_base()=default (defined in seastar::httpd::handler_base)seastar::httpd::handler_basevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1handler__base.html b/master/classseastar_1_1httpd_1_1handler__base.html new file mode 100644 index 000000000..727e4ad37 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1handler__base.html @@ -0,0 +1,239 @@ + + + + + + + +Seastar: seastar::httpd::handler_base Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::handler_base Class Referenceabstract
+
+
+

Detailed Description

+

handlers holds the logic for serving an incoming request. All handlers inherit from the base handler_base and implement the handle method.

+
+

#include <seastar/http/handlers.hh>

+
+Inheritance diagram for seastar::httpd::handler_base:
+
+
+ + +seastar::httpd::api_registry_base +seastar::httpd::file_interaction_handler +seastar::httpd::function_handler +seastar::httpd::api_registry +seastar::httpd::api_registry_20 +seastar::httpd::directory_handler +seastar::httpd::file_handler + +
+ + + + + + + + +

+Public Member Functions

virtual future< std::unique_ptr< http::reply > > handle (const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)=0
 
handler_basemandatory (const sstring &param)
 
void verify_mandatory_params (const http::request &req) const
 
+ + + +

+Protected Member Functions

handler_base (const handler_base &)=default
 
+

Member Function Documentation

+ +

◆ handle()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual future< std::unique_ptr< http::reply > > seastar::httpd::handler_base::handle (const sstring & path,
std::unique_ptr< http::requestreq,
std::unique_ptr< http::replyrep 
)
+
+pure virtual
+
+

All handlers should implement this method. It fill the reply according to the request.

Parameters
+ + + + +
paththe url path used in this call
reqthe original request
repthe reply
+
+
+ +

Implemented in seastar::httpd::api_registry, seastar::httpd::api_registry_20, seastar::httpd::directory_handler, seastar::httpd::file_handler, and seastar::httpd::function_handler.

+ +
+
+ +

◆ mandatory()

+ +
+
+ + + + + +
+ + + + + + + + +
handler_base & seastar::httpd::handler_base::mandatory (const sstring & param)
+
+inline
+
+

Add a mandatory parameter

Parameters
+ + +
parama parameter name
+
+
+
Returns
a reference to the handler
+ +
+
+ +

◆ verify_mandatory_params()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::httpd::handler_base::verify_mandatory_params (const http::requestreq) const
+
+inline
+
+

Check if all mandatory parameters exist in the request. if any param does not exist, the function would throw a missing_param_exception

Parameters
+ + +
paramsreq the http request
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1handler__base.png b/master/classseastar_1_1httpd_1_1handler__base.png new file mode 100644 index 0000000000000000000000000000000000000000..edf0bce1d998c363f222c1fb09de7bd391cb7cb8 GIT binary patch literal 2925 zcmcgudpuNm8y`htNVjby#@dEPw{eM3Ml9(ha%+`n*d>Y9b=F{pb~W04UCJ4ea@&=r zUd$?lkzr>_F-nV!tX#)+(hO$I45ryL?5)rHdH;Oh^ZA_TJm-9#-*bPy=lQ|i%~?}j zM;!)(X#&R_Jz+3q1jK*8el0}P^yX8chqn6(Zzs824zZK(MEGmW>kzkcH#aw{{Lrrt zy{?b-bn}8iLW=8ko3|MZroId~+Itg}X5LOk&)ICeGJN%$PsGWsyVTNrz8~$CT78Lb z3@&eUE?K~#i!TpG+7!6Cu2tFU-dtOq6w!t#zPzT#g8_p+WMhsfscapCyB|?FdTby2OfQLi%lfgjR08=9@suiU1FdySzpn-7|2z%ZJ*j z(ecu0tbjaxVibw9=-R$(XA4GfWljaMjW4e|n9ED3XQe#5w>YAb8~qdJq};ZwY2ZVH z>Av#D=y}Mp3XwHkW>I&QbJm)u-(D4)=xjS~?#f>lcG~$i5S7%?0S9~fZ~u%DPtC`X z26*fEc49L7c|E56e15t%U$xL(5lUqyUOfKc2C`q^j1$)|1d~y`gJSYjpFnTb`P1T7 zQe?7^ggH4FgPUA(JD*>j-tfzo)nq&vAMm3I?Urx-|TNQOoj1aL!^5i2*iJpPv9zuy%g>vfK`;`u13bnu8`~Nd8 zvHl#H;RKCGZ&Dt}R6Mx)g%>&ax41bYwSGf@_4qyp1+X+o27u08q5<#?6(YV+YBTRJ z)hj$0*HNzS5NYs&2=oebR>XzI9RrOdO%kRtaMy2-9ddO1=}WD$T^a1g!c14tbPNud zeKl%a=r-RIbrlu=r1KTOW#2VvDJI;f2xY#|bpy3!pcMgf6Wb60TU4bEg9bp(=?Mv7 zHZC86cP!jQxg3~)BO(sFA~{X9;)d#L$+^=VIc)aKXmk;OUS1QrF^jEw!D^_CMJnZe z#=>-lpA_e!@&p5nO1|;AliUP{lF#2g%bd{LPs+oC>SrzZwF24T&(z=7r%{HwfhuBhr zm<>xz8dcJcIPWTpBRpRGGND~8iG5kah`h2GkK|ML07j2HUFvAJ-PZ<-p0T7N75U1PU+hf?t$S&@Ku*eI#PMO2N>PvSk>-WS2AM}UfehPJ?<(wmz zayLYep_hYVKd!}~T8}1ennzjZ;Gv$}5w9oWkHPh^QmIR4?t?Bj=Y1K+zz9W$YL@>X zY%!P0G%$R4)3x@*MF+5*u<<$0saBy>V1sLi$~On;SbCKSDP=4AydtU&V#EGR%PX|L zHHHW@0hf2Kjx`F{vb+a3NvDNvCmf>Fc(?9u*47!(P&wdOuzPD|M%$+sGHgzv1GY@W zly0nc`uLl^nzymCs|QtGCA`FJy>E%zC+fY&$F!=Cek8WzhW#rY{J$ZP*_~2sG41{1 zz@O?o|FHDG6Ul+{w&e2CpMy^ZfEhaN&`q!p?;ocj5XS7zl!u4#XTUoaZHS>`yHmhBYR4~v)kmcc;5#?}98_q=oQf6LR*VY$4!nh` zm~9e~y}%RoUnCuFd68D2|HVn2qJ`t2N>Y)%+;4D7_&Sn=YBg)hqWg2pMIpB+>20hj zP#Elk>%Au%waT$vatQ{^Mk*joWK76;aA3~%8lQtNn5dGQL&dkwSb`v{wfOOEOgh$A z{7l53k6Z&s#V*G(kz}&ttg|fGt zli*b%Mg+?e%dj^k-`*Rp@GV@zngDmh1>}+qgb+mtB2r*}zBrse=scLhJ%CQbJ&x*H z-jM!zQNEcGz!+6!2p%rd^l$nT1AVe6^as81EaG&0wo&aaU|a7vTs3s?)EO|H5QVGL z?*D5|fL0F!t@kg=AK*eQKLwCgHYw+P2KSawg1-I4Gj5x;h~6eWt4abj(Fyj?;d^%Nx>UM0P9LA?tuYqBzQhV9H~0Gm%vE^dp$6UndS;9H_mK zH2#QZJ{c?`2^$|Jl_Ze6Wlov0a4Y$xwqa`g`%Dh{#oZknPJpI6h=CC^tTemBdAQwB z!G3-Z^=H;DQ;Fqaw%!H-8TICQQ@1$8^WY_80GDLPDk_{dJ#-S(pB-liM5pqJn|9&) zTqlIP8G;y+%TADM09E`qN5j^9gpgd2ZP@xfv}B?3WM_V{h+)B@lB&C zW)coWD{C$}fXjP6SfzkmoQEexF%@7?-1I{f0PPvgS>Edmfi2nHim8BHDWLCNnV?A2 z4SS$d+0X*;9mPo + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::handler_registration Member List
+
+
+ +

This is the complete list of members for seastar::httpd::handler_registration, including all inherited members.

+ + + +
handler_registration(routes &rs, handler_base &h, const sstring &url, operation_type op=GET)seastar::httpd::handler_registration
~handler_registration()seastar::httpd::handler_registration
+ + + + diff --git a/master/classseastar_1_1httpd_1_1handler__registration.html b/master/classseastar_1_1httpd_1_1handler__registration.html new file mode 100644 index 000000000..5709e15d9 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1handler__registration.html @@ -0,0 +1,165 @@ + + + + + + + +Seastar: seastar::httpd::handler_registration Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::handler_registration Class Reference
+
+
+

Detailed Description

+

The handler_registration object facilitates registration and auto unregistration of an exact-match handler_base into routes

+
+

#include <seastar/http/routes.hh>

+ + + + + + +

+Public Member Functions

 handler_registration (routes &rs, handler_base &h, const sstring &url, operation_type op=GET)
 
 ~handler_registration ()
 
+

Constructor & Destructor Documentation

+ +

◆ handler_registration()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
seastar::httpd::handler_registration::handler_registration (routesrs,
handler_baseh,
const sstring & url,
operation_type op = GET 
)
+
+

Registers the handler_base into routes with routes::put

Parameters
+ + + + + +
rsthe routes object reference
hthe desire handler
urlthe url to match
opthe operation type (GET by default)
+
+
+ +
+
+ +

◆ ~handler_registration()

+ +
+
+ + + + + + + +
seastar::httpd::handler_registration::~handler_registration ()
+
+

Unregisters the handler from routes with routes::drop

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1http__server-members.html b/master/classseastar_1_1httpd_1_1http__server-members.html new file mode 100644 index 000000000..8a5042bab --- /dev/null +++ b/master/classseastar_1_1httpd_1_1http__server-members.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::http_server Member List
+
+
+ +

This is the complete list of members for seastar::httpd::http_server, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
_routes (defined in seastar::httpd::http_server)seastar::httpd::http_server
connection typedef (defined in seastar::httpd::http_server)seastar::httpd::http_server
current_connections() const (defined in seastar::httpd::http_server)seastar::httpd::http_server
do_accepts(int which) (defined in seastar::httpd::http_server)seastar::httpd::http_server
do_accepts(int which, bool with_tls) (defined in seastar::httpd::http_server)seastar::httpd::http_server
get_content_length_limit() const (defined in seastar::httpd::http_server)seastar::httpd::http_server
get_content_streaming() const (defined in seastar::httpd::http_server)seastar::httpd::http_server
http_date() (defined in seastar::httpd::http_server)seastar::httpd::http_serverstatic
http_server(const sstring &name) (defined in seastar::httpd::http_server)seastar::httpd::http_serverinlineexplicit
listen(socket_address addr, server_credentials_ptr credentials) (defined in seastar::httpd::http_server)seastar::httpd::http_server
listen(socket_address addr, listen_options lo, server_credentials_ptr credentials) (defined in seastar::httpd::http_server)seastar::httpd::http_server
listen(socket_address addr, listen_options lo) (defined in seastar::httpd::http_server)seastar::httpd::http_server
listen(socket_address addr) (defined in seastar::httpd::http_server)seastar::httpd::http_server
read_errors() const (defined in seastar::httpd::http_server)seastar::httpd::http_server
reply_errors() const (defined in seastar::httpd::http_server)seastar::httpd::http_server
requests_served() const (defined in seastar::httpd::http_server)seastar::httpd::http_server
server_credentials_ptr typedef (defined in seastar::httpd::http_server)seastar::httpd::http_server
set_content_length_limit(size_t limit) (defined in seastar::httpd::http_server)seastar::httpd::http_server
set_content_streaming(bool b) (defined in seastar::httpd::http_server)seastar::httpd::http_server
set_tls_credentials(server_credentials_ptr credentials)seastar::httpd::http_server
stop() (defined in seastar::httpd::http_server)seastar::httpd::http_server
total_connections() const (defined in seastar::httpd::http_server)seastar::httpd::http_server
+ + + + diff --git a/master/classseastar_1_1httpd_1_1http__server.html b/master/classseastar_1_1httpd_1_1http__server.html new file mode 100644 index 000000000..aa2704eec --- /dev/null +++ b/master/classseastar_1_1httpd_1_1http__server.html @@ -0,0 +1,195 @@ + + + + + + + +Seastar: seastar::httpd::http_server Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::http_server Class Reference
+
+
+ + + + + + +

+Public Types

+using connection = seastar::httpd::connection
 
+using server_credentials_ptr = shared_ptr< seastar::tls::server_credentials >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

http_server (const sstring &name)
 
void set_tls_credentials (server_credentials_ptr credentials)
 set tls credentials for the server Setting the tls credentials will set the http-server to work in https mode. More...
 
+size_t get_content_length_limit () const
 
+void set_content_length_limit (size_t limit)
 
+bool get_content_streaming () const
 
+void set_content_streaming (bool b)
 
+future listen (socket_address addr, server_credentials_ptr credentials)
 
+future listen (socket_address addr, listen_options lo, server_credentials_ptr credentials)
 
+future listen (socket_address addr, listen_options lo)
 
+future listen (socket_address addr)
 
+future stop ()
 
+future do_accepts (int which)
 
+future do_accepts (int which, bool with_tls)
 
+uint64_t total_connections () const
 
+uint64_t current_connections () const
 
+uint64_t requests_served () const
 
+uint64_t read_errors () const
 
+uint64_t reply_errors () const
 
+ + + +

+Static Public Member Functions

+static sstring http_date ()
 
+ + + +

+Public Attributes

+routes _routes
 
+

Member Function Documentation

+ +

◆ set_tls_credentials()

+ +
+
+ + + + + + + + +
void seastar::httpd::http_server::set_tls_credentials (server_credentials_ptr credentials)
+
+ +

set tls credentials for the server Setting the tls credentials will set the http-server to work in https mode.

+

To use the https, create server credentials and pass it to the server before it starts.

+

Use case example using seastar threads for clarity:

+

distributed<http_server> server; // typical server

+

seastar::shared_ptr<seastar::tls::credentials_builder> creds = seastar::make_shared<seastar::tls::credentials_builder>(); sstring ms_cert = "MyCertificate.crt"; sstring ms_key = "MyKey.key";

+

creds->set_dh_level(seastar::tls::dh_params::level::MEDIUM);

+

creds->set_x509_key_file(ms_cert, ms_key, seastar::tls::x509_crt_format::PEM).get(); creds->set_system_trust().get();

+

server.invoke_on_all([creds](http_server& server) { server.set_tls_credentials(creds->build_server_credentials()); return make_ready_future<>(); }).get();

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1http__server__control-members.html b/master/classseastar_1_1httpd_1_1http__server__control-members.html new file mode 100644 index 000000000..4cdaa0ac9 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1http__server__control-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::http_server_control Member List
+
+
+ +

This is the complete list of members for seastar::httpd::http_server_control, including all inherited members.

+ + + + + + + + + + +
http_server_control() (defined in seastar::httpd::http_server_control)seastar::httpd::http_server_controlinline
listen(socket_address addr) (defined in seastar::httpd::http_server_control)seastar::httpd::http_server_control
listen(socket_address addr, http_server::server_credentials_ptr credentials) (defined in seastar::httpd::http_server_control)seastar::httpd::http_server_control
listen(socket_address addr, listen_options lo) (defined in seastar::httpd::http_server_control)seastar::httpd::http_server_control
listen(socket_address addr, listen_options lo, http_server::server_credentials_ptr credentials) (defined in seastar::httpd::http_server_control)seastar::httpd::http_server_control
server() (defined in seastar::httpd::http_server_control)seastar::httpd::http_server_control
set_routes(std::function< void(routes &r)> fun) (defined in seastar::httpd::http_server_control)seastar::httpd::http_server_control
start(const sstring &name=generate_server_name()) (defined in seastar::httpd::http_server_control)seastar::httpd::http_server_control
stop() noexcept (defined in seastar::httpd::http_server_control)seastar::httpd::http_server_control
+ + + + diff --git a/master/classseastar_1_1httpd_1_1http__server__control.html b/master/classseastar_1_1httpd_1_1http__server__control.html new file mode 100644 index 000000000..b94eeff6e --- /dev/null +++ b/master/classseastar_1_1httpd_1_1http__server__control.html @@ -0,0 +1,113 @@ + + + + + + + +Seastar: seastar::httpd::http_server_control Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::http_server_control Class Reference
+
+
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

+future start (const sstring &name=generate_server_name())
 
+future stop () noexcept
 
+future set_routes (std::function< void(routes &r)> fun)
 
+future listen (socket_address addr)
 
+future listen (socket_address addr, http_server::server_credentials_ptr credentials)
 
+future listen (socket_address addr, listen_options lo)
 
+future listen (socket_address addr, listen_options lo, http_server::server_credentials_ptr credentials)
 
+distributed< http_server > & server ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1http__server__tester-members.html b/master/classseastar_1_1httpd_1_1http__server__tester-members.html new file mode 100644 index 000000000..88f28d5d0 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1http__server__tester-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::http_server_tester Member List
+
+
+ +

This is the complete list of members for seastar::httpd::http_server_tester, including all inherited members.

+ + +
listeners(http_server &server) (defined in seastar::httpd::http_server_tester)seastar::httpd::http_server_testerinlinestatic
+ + + + diff --git a/master/classseastar_1_1httpd_1_1http__server__tester.html b/master/classseastar_1_1httpd_1_1http__server__tester.html new file mode 100644 index 000000000..817f4b176 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1http__server__tester.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::httpd::http_server_tester Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::http_server_tester Class Reference
+
+
+ + + + +

+Static Public Member Functions

+static std::vector< server_socket > & listeners (http_server &server)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1http__stats-members.html b/master/classseastar_1_1httpd_1_1http__stats-members.html new file mode 100644 index 000000000..cd214bf77 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1http__stats-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::http_stats Member List
+
+
+ +

This is the complete list of members for seastar::httpd::http_stats, including all inherited members.

+ + +
http_stats(http_server &server, const sstring &name) (defined in seastar::httpd::http_stats)seastar::httpd::http_stats
+ + + + diff --git a/master/classseastar_1_1httpd_1_1http__stats.html b/master/classseastar_1_1httpd_1_1http__stats.html new file mode 100644 index 000000000..9fd2fb494 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1http__stats.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::httpd::http_stats Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::http_stats Class Reference
+
+
+ + + + +

+Public Member Functions

http_stats (http_server &server, const sstring &name)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1internal_1_1chunked__source__impl-members.html b/master/classseastar_1_1httpd_1_1internal_1_1chunked__source__impl-members.html new file mode 100644 index 000000000..0e650d7ad --- /dev/null +++ b/master/classseastar_1_1httpd_1_1internal_1_1chunked__source__impl-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::internal::chunked_source_impl Member List
+
+
+ +

This is the complete list of members for seastar::httpd::internal::chunked_source_impl, including all inherited members.

+ + + + + + +
chunked_source_impl(input_stream< char > &inp, std::unordered_map< sstring, sstring > &chunk_extensions, std::unordered_map< sstring, sstring > &trailing_headers) (defined in seastar::httpd::internal::chunked_source_impl)seastar::httpd::internal::chunked_source_implinline
close() override (defined in seastar::httpd::internal::chunked_source_impl)seastar::httpd::internal::chunked_source_implinlinevirtual
get() override (defined in seastar::httpd::internal::chunked_source_impl)seastar::httpd::internal::chunked_source_implinlinevirtual
skip(uint64_t n) (defined in seastar::data_source_impl)seastar::data_source_implinlinevirtual
~data_source_impl() (defined in seastar::data_source_impl)seastar::data_source_implinlinevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1internal_1_1chunked__source__impl.html b/master/classseastar_1_1httpd_1_1internal_1_1chunked__source__impl.html new file mode 100644 index 000000000..340b31e88 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1internal_1_1chunked__source__impl.html @@ -0,0 +1,164 @@ + + + + + + + +Seastar: seastar::httpd::internal::chunked_source_impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::internal::chunked_source_impl Class Reference
+
+
+
+Inheritance diagram for seastar::httpd::internal::chunked_source_impl:
+
+
+ + +seastar::data_source_impl + +
+ + + + + + + + + + +

+Public Member Functions

chunked_source_impl (input_stream< char > &inp, std::unordered_map< sstring, sstring > &chunk_extensions, std::unordered_map< sstring, sstring > &trailing_headers)
 
virtual future< temporary_buffer< char > > get () override
 
virtual future close () override
 
+virtual future< temporary_buffer< char > > skip (uint64_t n)
 
+

Member Function Documentation

+ +

◆ close()

+ +
+
+ + + + + +
+ + + + + + + +
virtual future seastar::httpd::internal::chunked_source_impl::close ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from seastar::data_source_impl.

+ +
+
+ +

◆ get()

+ +
+
+ + + + + +
+ + + + + + + +
virtual future< temporary_buffer< char > > seastar::httpd::internal::chunked_source_impl::get ()
+
+inlineoverridevirtual
+
+ +

Implements seastar::data_source_impl.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1internal_1_1chunked__source__impl.png b/master/classseastar_1_1httpd_1_1internal_1_1chunked__source__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..2009fc3ed7cb651a49335b776093b045937e9d61 GIT binary patch literal 829 zcmeAS@N?(olHy`uVBq!ia0y~yU}Oif12~w0q;jW29*~j<@CkAK|NlRb`Qpvj(*8pe zfGjXRaNq!I=N)+Dv6Wr?dY>yghqH z?qaaawA3rAUzAMrV{T36eav{X!kc;0*FFE=ef8pdcm3cJ%Dk`4&2|=Ts_gKNncjJ+pq@(+TxCzn5mJA57BMD|-LJh9~J0tHqqt{F+Pr zpSMrZ?|<~@(Vq=_^>2O3p5{N}SMA0nKeCLzT{GWT9lz!It>1^vyb=Av({TNv!E^in ztIwV(Gu`x07U;EklPzYQ`P--i`n6bGu!Cx&BwA5A!SLGNwzp9%eU9bKX@iRxBX!)CadE@AH1CgmC58_YX2Yu&iZf qZ!n*3(a~(d;L_>*IKWHulD&+Y`Qdzb$qryzXYh3Ob6Mw<&;$S*kdIyf literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1internal_1_1content__length__source__impl-members.html b/master/classseastar_1_1httpd_1_1internal_1_1content__length__source__impl-members.html new file mode 100644 index 000000000..ffc095ae3 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1internal_1_1content__length__source__impl-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::internal::content_length_source_impl Member List
+
+
+ +

This is the complete list of members for seastar::httpd::internal::content_length_source_impl, including all inherited members.

+ + + + + + +
close() override (defined in seastar::httpd::internal::content_length_source_impl)seastar::httpd::internal::content_length_source_implinlinevirtual
content_length_source_impl(input_stream< char > &inp, size_t length) (defined in seastar::httpd::internal::content_length_source_impl)seastar::httpd::internal::content_length_source_implinline
get() override (defined in seastar::httpd::internal::content_length_source_impl)seastar::httpd::internal::content_length_source_implinlinevirtual
skip(uint64_t n) override (defined in seastar::httpd::internal::content_length_source_impl)seastar::httpd::internal::content_length_source_implinlinevirtual
~data_source_impl() (defined in seastar::data_source_impl)seastar::data_source_implinlinevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1internal_1_1content__length__source__impl.html b/master/classseastar_1_1httpd_1_1internal_1_1content__length__source__impl.html new file mode 100644 index 000000000..26f8f8b0b --- /dev/null +++ b/master/classseastar_1_1httpd_1_1internal_1_1content__length__source__impl.html @@ -0,0 +1,190 @@ + + + + + + + +Seastar: seastar::httpd::internal::content_length_source_impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::internal::content_length_source_impl Class Reference
+
+
+
+Inheritance diagram for seastar::httpd::internal::content_length_source_impl:
+
+
+ + +seastar::data_source_impl + +
+ + + + + + + + + + +

+Public Member Functions

content_length_source_impl (input_stream< char > &inp, size_t length)
 
virtual future< temporary_buffer< char > > get () override
 
virtual future< temporary_buffer< char > > skip (uint64_t n) override
 
virtual future close () override
 
+

Member Function Documentation

+ +

◆ close()

+ +
+
+ + + + + +
+ + + + + + + +
virtual future seastar::httpd::internal::content_length_source_impl::close ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from seastar::data_source_impl.

+ +
+
+ +

◆ get()

+ +
+
+ + + + + +
+ + + + + + + +
virtual future< temporary_buffer< char > > seastar::httpd::internal::content_length_source_impl::get ()
+
+inlineoverridevirtual
+
+ +

Implements seastar::data_source_impl.

+ +
+
+ +

◆ skip()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual future< temporary_buffer< char > > seastar::httpd::internal::content_length_source_impl::skip (uint64_t n)
+
+inlineoverridevirtual
+
+ +

Reimplemented from seastar::data_source_impl.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1internal_1_1content__length__source__impl.png b/master/classseastar_1_1httpd_1_1internal_1_1content__length__source__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..599d184fab802a529b153f45eff5cabc0dc745a2 GIT binary patch literal 977 zcmeAS@N?(olHy`uVBq!ia0y~yVAKS%12~w0WRYw!FOZT5@CkAK|NlRb`Qpvj(*8pe zfGjXRaNq!I=N)+o>c4KKoVf<9X@GT;HkBADk+=Eg%2BmaV_({PVco?G|fG zeZ0+nZLauTX}9N*>Py`{*RPmesGacFOeFu=EmQWs?wrirUkP1xQm@wDyFKOS@830V zeox6SelV$T^UBG`p4mVBcJsSOS6P1Qvs%Ngp))2d+?pKhTr%-ZX?gJHM;WJ+X1x|D zoKjo7cKfn9XZ{N=OZt6f%hs0fD>KvWPw%_^KKS*`>uNjZM@&9Z_bvDMRk=souU(ay zSNnF?@0;qLkEE8GQSxl4pCx#sA%!p1CQ! z0^<$^Uq+T6KRiMit}oGSVBim2$@O5839EpzEu)J^FoWPF5r-BaSJ9WM+#SnT26=gU zX+CA*a$qX(n#I&HVHpE3avC@?xfGlZOp)FoZkLx_TK)Rya@jfG_g#tGzN?2rq3?6< z>{t0lqEiaZgBgUoSAMF|xSU&Gv-kUp@Vn_}zkTA_p1tZQ&;9QY&d;9tE5fEWi|f~q z+^hF?%k~*>?30|*d#~+o(;0!=cedTyyX=13quedGLl?wPKl<(WPWA22m+slmn|=K4 zT~3+V`HIU{xZCsU)3+w0rxrPSx0(RpzcbuDfiS*7+$jSw!5zioomxmBjrJ{GIk;D5IJx61E7wOO{mqgMYm zeCU^O|L>cd&-0G0-<*G9U)h;2%{exU-`w2(Pxy1?H>pk2YoD3qUu{p1-+gB@|AW + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::json_exception Member List
+
+
+ +

This is the complete list of members for seastar::httpd::json_exception, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
_code (defined in seastar::httpd::json_exception)seastar::httpd::json_exception
_elements (defined in seastar::json::json_base)seastar::json::json_base
_msg (defined in seastar::httpd::json_exception)seastar::httpd::json_exception
add(json_base_element *element, std::string name, bool mandatory=false)seastar::json::json_basevirtual
is_verify() constseastar::json::json_basevirtual
json_base()=default (defined in seastar::json::json_base)seastar::json::json_base
json_base(const json_base &)=delete (defined in seastar::json::json_base)seastar::json::json_base
json_exception(const base_exception &e) (defined in seastar::httpd::json_exception)seastar::httpd::json_exceptioninline
json_exception(std::exception_ptr e) (defined in seastar::httpd::json_exception)seastar::httpd::json_exceptioninline
jsonable()=default (defined in seastar::json::jsonable)seastar::json::jsonable
jsonable(const jsonable &)=default (defined in seastar::json::jsonable)seastar::json::jsonable
operator=(const json_base &)=delete (defined in seastar::json::json_base)seastar::json::json_base
operator=(const jsonable &)=default (defined in seastar::json::jsonable)seastar::json::jsonable
register_params() (defined in seastar::httpd::json_exception)seastar::httpd::json_exceptioninline
to_json() constseastar::json::json_basevirtual
write(output_stream< char > &) constseastar::json::json_basevirtual
~json_base()=default (defined in seastar::json::json_base)seastar::json::json_basevirtual
~jsonable()=default (defined in seastar::json::jsonable)seastar::json::jsonablevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1json__exception.html b/master/classseastar_1_1httpd_1_1json__exception.html new file mode 100644 index 000000000..d4f153439 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1json__exception.html @@ -0,0 +1,265 @@ + + + + + + + +Seastar: seastar::httpd::json_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::json_exception Class Reference
+
+
+
+Inheritance diagram for seastar::httpd::json_exception:
+
+
+ + +seastar::json::json_base +seastar::json::jsonable + +
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

+void register_params ()
 
json_exception (const base_exception &e)
 
json_exception (std::exception_ptr e)
 
virtual std::string to_json () const
 
virtual future write (output_stream< char > &) const
 write to an output stream More...
 
virtual bool is_verify () const
 
virtual void add (json_base_element *element, std::string name, bool mandatory=false)
 
+ + + + + + + +

+Public Attributes

+json::json_element< std::string > _msg
 
+json::json_element< int > _code
 
+std::vector< json_base_element * > _elements
 
+

Member Function Documentation

+ +

◆ add()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void seastar::json::json_base::add (json_base_elementelement,
std::string name,
bool mandatory = false 
)
+
+virtualinherited
+
+

Register an element in an object

Parameters
+ + + + +
elementthe element to be added
namethe element name
mandatoryis this element mandatory.
+
+
+ +
+
+ +

◆ is_verify()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool seastar::json::json_base::is_verify () const
+
+virtualinherited
+
+

Check that all mandatory elements are set

Returns
true if all mandatory parameters are set
+ +
+
+ +

◆ to_json()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string seastar::json::json_base::to_json () const
+
+virtualinherited
+
+

create a formatted string of the object.

Returns
the object formatted.
+ +

Implements seastar::json::jsonable.

+ +
+
+ +

◆ write()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual future seastar::json::json_base::write (output_stream< char > & ) const
+
+virtualinherited
+
+ +

write to an output stream

+ +

Reimplemented from seastar::json::jsonable.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1json__exception.png b/master/classseastar_1_1httpd_1_1json__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..8f83ffbd424c0b0d7adeb41ff0113ed6f4f502fe GIT binary patch literal 992 zcmeAS@N?(olHy`uVBq!ia0vp^8-TcjgBeH`I80mvq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0^F3W0Ln;{G&V7CEwE_=IyX&jp_Mbdw z&u*M>?@^u8@z5}lH#dR}-o+Q4t5lh&nkmD&L8VfwLG@&?Jd?WTs?r@lCKYa-XC2F@ z<0=12>%o_f39Ax+?mD;KL;cj!T*PR>h^`38>Uc9S*T4A*D=Wkc6540b%>|%^N^SUEBV2t=3olEF(Ex zL%fvJv&uRCPoc-9>|gU6>kn1Gv?Qv%TVHa1gzCx*t_LQ4S-6hLuis&%)U@@lYfhKRuYH|z z)6uW@_L(O))Fy?jWUpBs6?Ai9#Ju{3DW{$rs=WMQ=(gFI-LlHMo@r0e&G>*bxz}Fx z9;(WE^Q=O+!fw{flx?s;s$FcUH#vExN6^yA-rMEx%v-3{`OTr~Ky32v2$3EY(O>J@ zqQBR9mNc$k`EZ-J&i2%7(b7q)1U*jLxF2iQ+xYCq0&kB?(!U<{J5RcI;Xb3iURb%Z z>dS!Z4FB_**WXI?{MAdFAX_@cO^7o=1{SFL4Dwbw-IoJqZNItw_XU@4Y-~T=_BvR9 zxbpDXx)`3**Gu2mcfN@I0`dk>`Up%yZw(<_38^ bej%@$=l)ybp8FPHc4Y8$^>bP0l+XkKloZ9D literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1match__rule-members.html b/master/classseastar_1_1httpd_1_1match__rule-members.html new file mode 100644 index 000000000..56a984aef --- /dev/null +++ b/master/classseastar_1_1httpd_1_1match__rule-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::match_rule Member List
+
+
+ +

This is the complete list of members for seastar::httpd::match_rule, including all inherited members.

+ + + + + + + +
add_matcher(matcher *match)seastar::httpd::match_ruleinline
add_param(const sstring &str, bool fullpath=false)seastar::httpd::match_ruleinline
add_str(const sstring &str)seastar::httpd::match_ruleinline
get(const sstring &url, parameters &params)seastar::httpd::match_ruleinline
match_rule(handler_base *handler)seastar::httpd::match_ruleinlineexplicit
~match_rule()seastar::httpd::match_ruleinline
+ + + + diff --git a/master/classseastar_1_1httpd_1_1match__rule.html b/master/classseastar_1_1httpd_1_1match__rule.html new file mode 100644 index 000000000..0b47530e4 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1match__rule.html @@ -0,0 +1,319 @@ + + + + + + + +Seastar: seastar::httpd::match_rule Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::match_rule Class Reference
+
+
+

Detailed Description

+

match_rule check if a url matches criteria, that can contains parameters. the routes object would call the get method with a url and if it matches, the method will return a handler during the matching process, the method fill the parameters object.

+
+

#include <seastar/http/matchrules.hh>

+ + + + + + + + + + + + + + +

+Public Member Functions

 ~match_rule ()
 
 match_rule (handler_base *handler)
 
handler_baseget (const sstring &url, parameters &params)
 
match_ruleadd_matcher (matcher *match)
 
match_ruleadd_str (const sstring &str)
 
match_ruleadd_param (const sstring &str, bool fullpath=false)
 
+

Constructor & Destructor Documentation

+ +

◆ ~match_rule()

+ +
+
+ + + + + +
+ + + + + + + +
seastar::httpd::match_rule::~match_rule ()
+
+inline
+
+

The destructor deletes matchers.

+ +
+
+ +

◆ match_rule()

+ +
+
+ + + + + +
+ + + + + + + + +
seastar::httpd::match_rule::match_rule (handler_basehandler)
+
+inlineexplicit
+
+

Constructor with a handler

Parameters
+ + +
handlerthe handler to return when this match rule is met
+
+
+ +
+
+

Member Function Documentation

+ +

◆ add_matcher()

+ +
+
+ + + + + +
+ + + + + + + + +
match_rule & seastar::httpd::match_rule::add_matcher (matchermatch)
+
+inline
+
+

Add a matcher to the rule

Parameters
+ + +
matchthe matcher to add
+
+
+
Returns
this
+ +
+
+ +

◆ add_param()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
match_rule & seastar::httpd::match_rule::add_param (const sstring & str,
bool fullpath = false 
)
+
+inline
+
+

add a parameter matcher to the rule

Parameters
+ + + +
strthe parameter name
fullpathwhen set to true, parameter will included all the remaining url until its end
+
+
+
Returns
this
+ +
+
+ +

◆ add_str()

+ +
+
+ + + + + +
+ + + + + + + + +
match_rule & seastar::httpd::match_rule::add_str (const sstring & str)
+
+inline
+
+

Add a static url matcher

Parameters
+ + +
strthe string to search for
+
+
+
Returns
this
+ +
+
+ +

◆ get()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
handler_base * seastar::httpd::match_rule::get (const sstring & url,
parametersparams 
)
+
+inline
+
+

Check if url match the rule and return a handler if it does

Parameters
+ + + +
urla url to compare against the rule
paramsthe parameters object, matches parameters will fill the object during the matching process
+
+
+
Returns
a handler if there is a full match or nullptr if not
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1matcher-members.html b/master/classseastar_1_1httpd_1_1matcher-members.html new file mode 100644 index 000000000..782e967bb --- /dev/null +++ b/master/classseastar_1_1httpd_1_1matcher-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::matcher Member List
+
+
+ +

This is the complete list of members for seastar::httpd::matcher, including all inherited members.

+ + + +
match(const sstring &url, size_t ind, parameters &param)=0seastar::httpd::matcherpure virtual
~matcher()=default (defined in seastar::httpd::matcher)seastar::httpd::matchervirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1matcher.html b/master/classseastar_1_1httpd_1_1matcher.html new file mode 100644 index 000000000..2358aed59 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1matcher.html @@ -0,0 +1,159 @@ + + + + + + + +Seastar: seastar::httpd::matcher Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::matcher Class Referenceabstract
+
+
+

Detailed Description

+

a base class for the url matching. Each implementation check if the given url matches a criteria

+
+

#include <seastar/http/matcher.hh>

+
+Inheritance diagram for seastar::httpd::matcher:
+
+
+ + +seastar::httpd::param_matcher +seastar::httpd::str_matcher + +
+ + + + +

+Public Member Functions

virtual size_t match (const sstring &url, size_t ind, parameters &param)=0
 
+

Member Function Documentation

+ +

◆ match()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual size_t seastar::httpd::matcher::match (const sstring & url,
size_t ind,
parametersparam 
)
+
+pure virtual
+
+

check if the given url matches the rule

Parameters
+ + + + +
urlthe url to check
indthe position to start from
paramfill the parameters hash
+
+
+
Returns
the end of of the matched part, or sstring::npos if not matched
+ +

Implemented in seastar::httpd::param_matcher, and seastar::httpd::str_matcher.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1matcher.png b/master/classseastar_1_1httpd_1_1matcher.png new file mode 100644 index 0000000000000000000000000000000000000000..de83e6f6bc0d2c52d7c939b9837b7798293ac343 GIT binary patch literal 959 zcmeAS@N?(olHy`uVBq!ia0y~yU@QQ#12~w0q`Az!ejp_g;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|!0hMg;uuoF_;&8=ywwH*Y{%!T-upk% zzl(Wa1NXv2|GDdqoG9NsujOlegEXgN%RvT-=^qc3KV)dzQNZ9FW6_|fCv#wey=G1M z)yk!z16-I-m-ja^uyV3{|}GaCa7)V}cE_+xhIH~j;ZDUq%VYUgE7k3DtUNSEow$D5k04}`vF7CvN< zj?W{F3K z76$cj(4J zcTcIVpdBi_t=!X9oMU#VNIp8GdQw1K&$DfgfSk(8r#F9Uyn1-|S+#^b$fHDzWIZJKcDZ%HF|GLkGt!Z*7q(sW>Z_6{O+`Nux;q+g6U;-SFMUSAD{Ta zTz+vx^xU^wJHEFp*S)l8(TZJ{Z(kN(@~0+RJKWCwmh#fFuh-7WxgWY;*R$sXyI^^X z{^nWdb+*sWUvBGRy7=D8AKs$bQSR2gT7QH!pY|nh>5l8)F+b?i_Nk|~uFu%7wcw(aFgYqO4~DzoNVXx3yuNb#zCZx|=f7O9 z%5|sXpIrJM + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::missing_param_exception Member List
+
+
+ +

This is the complete list of members for seastar::httpd::missing_param_exception, including all inherited members.

+ + + + + + + +
bad_request_exception(const std::string &msg) (defined in seastar::httpd::bad_request_exception)seastar::httpd::bad_request_exceptioninline
base_exception(const std::string &msg, http::reply::status_type status) (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
missing_param_exception(const std::string &param) (defined in seastar::httpd::missing_param_exception)seastar::httpd::missing_param_exceptioninline
status() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
str() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
what() const noexcept (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1missing__param__exception.html b/master/classseastar_1_1httpd_1_1missing__param__exception.html new file mode 100644 index 000000000..2d3cd9c18 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1missing__param__exception.html @@ -0,0 +1,111 @@ + + + + + + + +Seastar: seastar::httpd::missing_param_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::missing_param_exception Class Reference
+
+
+
+Inheritance diagram for seastar::httpd::missing_param_exception:
+
+
+ + +seastar::httpd::bad_request_exception +seastar::httpd::base_exception + +
+ + + + + + + + + + +

+Public Member Functions

missing_param_exception (const std::string &param)
 
+virtual const char * what () const noexcept
 
+http::reply::status_type status () const
 
+virtual const std::string & str () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1missing__param__exception.png b/master/classseastar_1_1httpd_1_1missing__param__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..c402c6dcf3a5d89fb2ecb6d482a806e5fd23bd35 GIT binary patch literal 1500 zcmaJ>2~ZMP7)FV*Ow-B}uW?N+O*3yd(`_^*JdyCgHqn(lXgx;BqoUjvQY({6$F$bQ zn>;WrMNJVa%L8u?@hUt51-Av%OmVT!B|lpB8pRs9Pqi+g=3n<9jWVZuv>~ zpHe8f8HTpQ>oEGNJshhGf^*WqOW`Y^MbWT5Zmk0pi(WbX5@OE)n$L@;&)`Cm{{A1C-4U0P-_WOw1CiQA9zKNNR?}?Z^SYV zj5HnbNr69=bSF6)Ln>N!fCp|PvPs%^EX>;Q_4tmA*OjZHy?$B zdN|fPtYvLu?c3Qv7U=;F_a^c^TXI`~$tb5rmcBRaVUW%*2POkn=FLQkgmz$ZU+-6ADhS z(f=2gw3bpeP8I5^cLWOP0WLl?2Yh5Tba9*V3Cb=cz53E{QS0eX=;m?hag3HzYU+VE zmR-U>Iw(*0XY32=vhIdYtGP(I{d!bH4L?|~jXh2y);(@x8@iuNZP4gy_DX)&X*hY7 zZsfwj6rG8!x?Uqndf+3XXf!0e+=OXDhx5gJ%gR#HMz=H;i38e6&Eo>~1uh|5s$^ng zMNUgFWPKzt2*USQHiJ0F;2)JoYr6qDiosMl)$TXLf6V(z8EGy`)oSv z!pf!65S@r66V3J{DP(1I|Jl7VhoM&&Mp$cc4Rse$r+}>ILawfo=y^qVqv>9`vS~q`B&%1r^ z{e}USra1#$Z^`tIm%n_@_tu6XrX@>^REjTe+&|-r)39@&AxxT6P2T=9Qz~s&2`Z;n a*LTGr_?6^cxi@8_7yxniajQKQmhm?kf9Smc literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1not__found__exception-members.html b/master/classseastar_1_1httpd_1_1not__found__exception-members.html new file mode 100644 index 000000000..3dd716569 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1not__found__exception-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::not_found_exception Member List
+
+
+ +

This is the complete list of members for seastar::httpd::not_found_exception, including all inherited members.

+ + + + + + +
base_exception(const std::string &msg, http::reply::status_type status) (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
not_found_exception(const std::string &msg="Not found") (defined in seastar::httpd::not_found_exception)seastar::httpd::not_found_exceptioninline
status() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
str() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
what() const noexcept (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1not__found__exception.html b/master/classseastar_1_1httpd_1_1not__found__exception.html new file mode 100644 index 000000000..9ab0cd8eb --- /dev/null +++ b/master/classseastar_1_1httpd_1_1not__found__exception.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar::httpd::not_found_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::not_found_exception Class Reference
+
+
+

Detailed Description

+

Throwing this exception will result in a 404 not found result

+
+

#include <seastar/http/exception.hh>

+
+Inheritance diagram for seastar::httpd::not_found_exception:
+
+
+ + +seastar::httpd::base_exception + +
+ + + + + + + + + + +

+Public Member Functions

not_found_exception (const std::string &msg="Not found")
 
+virtual const char * what () const noexcept
 
+http::reply::status_type status () const
 
+virtual const std::string & str () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1not__found__exception.png b/master/classseastar_1_1httpd_1_1not__found__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..e692fcf3b5f92c888619e2199e0cb635caf67c89 GIT binary patch literal 1040 zcmeAS@N?(olHy`uVBq!ia0vp^7lF8ggBeKrrT%*aq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0=X<(1hEy=Vo%{OIY6Tuw@xo=5|IO{T zb;Ru1KF>^kGT&~GmX=n-f2u74yM!D=w<=psT(v3}Ox*P_vE20_e@@l^%73#wLchk{ zbrzYoT=suguA6t2#CgY8$08@cG}X#kwQBxLu|*4JMO$82uybl`fNpeRaOhu;a=}pP zbJu=wyqa>SJrv0Qo_crEi=Ww@i_Y2wZr-^q=t)hKjn-lpN7L%T6PTuzlb?|5u=M%}&6=IdXYG9G5ioe{j; zC?Xhl_s!qZ-CH_4w%k(aI`{a}qSa>%&uwY^^zGeLmXm8OzHg0Q$*q*Couj1GyREZm ziq^tUKkk%?UDo#J7XSF-wL<$nSC#E|*K|jU{5Fb^idSD{ z^7a?cj$Jj^^6~n#xg95>cRjwXth6(>_($=gAA+}IKOgUKapC(?4D_1(sZJM{oYNp8 zTSclZ@r5Tt{6*#k+NJJaD!#N`k-f-qMKY+~CGIuDn$w*OK!rr(d%+xvC8|sg?nO!r zw?Wv-af?-=QD1Cr_2KA5xo*J&tJckVr}SlgN7><66{ZLc;iH?YuYKM$Tko>PdB5+E z*c0a29Y48kPfeN4-{s1Y>-=6{S~+$1EN6H2*0pL~ub(RjyfV|Bugh3;d+#dwl-5m~ zmd)F?Yc&Hflyw6I*WYnBd>C@1?2zKcQ?Fj}%$AjD$=jrt7Wl@yKJ$<5qB8cIWwTcF z%uzRq{C+h(q&2=e_tZJBOd=hb8Id!=yeddH*XuYVNR*_`DPJYf5aO|U`I nQm`Qxgl+A^6bP0l+XkKoUi4m literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1param__matcher-members.html b/master/classseastar_1_1httpd_1_1param__matcher-members.html new file mode 100644 index 000000000..3f33608bb --- /dev/null +++ b/master/classseastar_1_1httpd_1_1param__matcher-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::param_matcher Member List
+
+
+ +

This is the complete list of members for seastar::httpd::param_matcher, including all inherited members.

+ + + + +
match(const sstring &url, size_t ind, parameters &param) overrideseastar::httpd::param_matchervirtual
param_matcher(const sstring &name, bool entire_path=false)seastar::httpd::param_matcherinlineexplicit
~matcher()=default (defined in seastar::httpd::matcher)seastar::httpd::matchervirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1param__matcher.html b/master/classseastar_1_1httpd_1_1param__matcher.html new file mode 100644 index 000000000..6fad76e69 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1param__matcher.html @@ -0,0 +1,207 @@ + + + + + + + +Seastar: seastar::httpd::param_matcher Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::param_matcher Class Reference
+
+
+

Detailed Description

+

Check if the url match a parameter and fill the parameters object

+

Note that a non empty url will always return true with the parameters object filled

+

Assume that the rule is /file/{path}/ and the param_matcher identify the /{path}

+

For all non empty values, match will return true. If the entire url is /file/etc/hosts, and the part that is passed to param_matcher is /etc/hosts, if entire_path is true, the match will be '/etc/hosts' If entire_path is false, the match will be '/etc'

+
+

#include <seastar/http/matcher.hh>

+
+Inheritance diagram for seastar::httpd::param_matcher:
+
+
+ + +seastar::httpd::matcher + +
+ + + + + + +

+Public Member Functions

 param_matcher (const sstring &name, bool entire_path=false)
 
virtual size_t match (const sstring &url, size_t ind, parameters &param) override
 
+

Constructor & Destructor Documentation

+ +

◆ param_matcher()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
seastar::httpd::param_matcher::param_matcher (const sstring & name,
bool entire_path = false 
)
+
+inlineexplicit
+
+

Constructor

Parameters
+ + + +
namethe name of the parameter, will be used as the key in the parameters object
entire_pathwhen set to true, the matched parameters will include all the remaining url until the end of it. when set to false the match will terminate at the next slash
+
+
+ +
+
+

Member Function Documentation

+ +

◆ match()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual size_t seastar::httpd::param_matcher::match (const sstring & url,
size_t ind,
parametersparam 
)
+
+overridevirtual
+
+

check if the given url matches the rule

Parameters
+ + + + +
urlthe url to check
indthe position to start from
paramfill the parameters hash
+
+
+
Returns
the end of of the matched part, or sstring::npos if not matched
+ +

Implements seastar::httpd::matcher.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1param__matcher.png b/master/classseastar_1_1httpd_1_1param__matcher.png new file mode 100644 index 0000000000000000000000000000000000000000..fa95023078055e7df5bccaa8cb2593c4764d87eb GIT binary patch literal 684 zcmeAS@N?(olHy`uVBq!ia0vp^n}IlhgBeJsN^N-yq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0tUX;ELn;{G&b__vu>y~)xOLF~|C801 zt1t?`P+fbzL()4Z@xTmGy>r^9H|b37be*&;$iREj{-(%De@drXdIqgtTfFv7!S$Pb zJh3V(FWR4&^KN5MaPG5vc49GW@BB5MBwhZU`9>ueb#W>-$*WX$z_8xlT0pYmn+XNUDv;FRc))~ zd0XT8NnSyVm*;;F*=Bpy`^>kz8?|-6RQ4CnXFqeS>O{@IL;dgF=9-ta{5{Hl@3LmT z%1XW4cdYWK{Of<;rV@L}S~7f6T)4scb2^@OTxp)4!a+U>dzKnGZ70iv#nJ~-W=;56 zHk-f7>6vJy)eFg)%J~d`+L|N}#2@5&us(t9L%0F+5A7L@e?-qP{NqYvsAn~9*pDi` zbjg%UDN2k!OQEV?vp!pQ_}b2}vLD>m0Zu$kXV30gws+22->oyNcUQbmwv3f~cid>{ z`ZH(B%%oc$MX$Zy9T@zi^5*7MKIPBOs5)x$udRA!mQ=^>etV5o$3>&}&Sy7<^L@K< z3m8CVL8W$A=ag-?;yrw4zx2;F#kF5T-+rI@dge_z + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::parameters Member List
+
+
+ +

This is the complete list of members for seastar::httpd::parameters, including all inherited members.

+ + + + + + + + +
at(const sstring &key) const (defined in seastar::httpd::parameters)seastar::httpd::parametersinline
clear() (defined in seastar::httpd::parameters)seastar::httpd::parametersinline
exists(const sstring &key) const (defined in seastar::httpd::parameters)seastar::httpd::parametersinline
get_decoded_param(const sstring &key) const (defined in seastar::httpd::parameters)seastar::httpd::parametersinline
operator[](const sstring &key) const (defined in seastar::httpd::parameters)seastar::httpd::parametersinline
path(const sstring &key) const (defined in seastar::httpd::parameters)seastar::httpd::parametersinline
set(const sstring &key, const sstring &value) (defined in seastar::httpd::parameters)seastar::httpd::parametersinline
+ + + + diff --git a/master/classseastar_1_1httpd_1_1parameters.html b/master/classseastar_1_1httpd_1_1parameters.html new file mode 100644 index 000000000..1f78ef677 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1parameters.html @@ -0,0 +1,110 @@ + + + + + + + +Seastar: seastar::httpd::parameters Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::parameters Class Reference
+
+
+ + + + + + + + + + + + + + + + +

+Public Member Functions

+const sstring & path (const sstring &key) const
 
+sstring operator[] (const sstring &key) const
 
+const sstring & at (const sstring &key) const
 
+sstring get_decoded_param (const sstring &key) const
 
+bool exists (const sstring &key) const
 
+void set (const sstring &key, const sstring &value)
 
+void clear ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1redirect__exception-members.html b/master/classseastar_1_1httpd_1_1redirect__exception-members.html new file mode 100644 index 000000000..64766ebc5 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1redirect__exception-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::redirect_exception Member List
+
+
+ +

This is the complete list of members for seastar::httpd::redirect_exception, including all inherited members.

+ + + + + + + +
base_exception(const std::string &msg, http::reply::status_type status) (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
redirect_exception(const std::string &url, http::reply::status_type status=http::reply::status_type::moved_permanently) (defined in seastar::httpd::redirect_exception)seastar::httpd::redirect_exceptioninline
status() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
str() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
url (defined in seastar::httpd::redirect_exception)seastar::httpd::redirect_exception
what() const noexcept (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1redirect__exception.html b/master/classseastar_1_1httpd_1_1redirect__exception.html new file mode 100644 index 000000000..038a7f5f0 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1redirect__exception.html @@ -0,0 +1,121 @@ + + + + + + + +Seastar: seastar::httpd::redirect_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::redirect_exception Class Reference
+
+
+

Detailed Description

+

Throwing this exception will result in a redirect to the given url

+
+

#include <seastar/http/exception.hh>

+
+Inheritance diagram for seastar::httpd::redirect_exception:
+
+
+ + +seastar::httpd::base_exception + +
+ + + + + + + + + + +

+Public Member Functions

redirect_exception (const std::string &url, http::reply::status_type status=http::reply::status_type::moved_permanently)
 
+virtual const char * what () const noexcept
 
+http::reply::status_type status () const
 
+virtual const std::string & str () const
 
+ + + +

+Public Attributes

+std::string url
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1redirect__exception.png b/master/classseastar_1_1httpd_1_1redirect__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..8a5cad21b0ab38ac1e85fb82ea3c6c78e16b5c16 GIT binary patch literal 1037 zcmeAS@N?(olHy`uVBq!ia0vp^M}fG5gBeIBDBLdqQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;k?a(yCV{MMYMvvJ(LjUj(~O9%b}@e8vCXz4sa+ zq4rDn2QB%%_F4V2jGIAvfA48twa7NItva@B)vtB`JSK)@ZRvl(l`cqV*+0LF zGMl14hi-rPO)4Ptt8cB+qG=-E_s>(hT@zHo{wlt@cj{69M;%HluU&Gz@?}@~9&U9( z)8{LSmi5Yn8bxjVYquyQ^!sb;-K?#vUIoTBJB5Dz%*7QNDi0>4G=scezG3>YDUV_K zbybbL?b-=3O-U^~7>=20D7iCM1O_nt2p}H6xoE(1_~lUrrJ^F%){YK-Fd@6ZLrH0` z+T)0=hl}$|r*@oR)ZNqV5q!=`QR!2Rch{GQ$-A<$ru}3tI2K0BwXUN+FusVLW6p;Me^mRy{ZIcvj-z@<92vS$KS zpI^burKAYgm)b)qugP!!CIc=)GKtS;31%C|}m%2qj=EsF#Vq%g++e0db zZlIUu+&Gnn$=VtWH5x#i!G82r%Snr{w;zJ@yJybUX0Wm?{$#JoFwM$?aYMjTiOG5Y zs!Xn4(fMn&yXR?&t^fMpHn*;xKXN-Ndw0#QWs}P$zbd=gxpAvVWv!ekFl5&)vwicy zYqiPk#&fs+P5ZlUn^!`2>CM0pci#;&ICq!jq_64Oemp+%;=H7{QM=#n>Nq7hDf{*M zFa1GJN^M=YZqxo1d)+1{;LCU8{{nY)<^Jl5iQkglAA2!p=d*{VNB5O~Y+01K)@{np z3%%uumrfkpT_F`{W(*ADHy7sAg2K40d8*7+^+U{-t5gn3-P0Ci{V;9c|DX479AtL= z_i9f`5ffJf?_YkdhWT1h@4xtG>8ZJN@@x6CC38Kdna`XK%)1Ppu6{1-oD!M + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::routes Member List
+
+
+ +

This is the complete list of members for seastar::httpd::routes, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
add(match_rule *rule, operation_type type=GET)seastar::httpd::routesinline
add(operation_type type, const url &url, handler_base *handler)seastar::httpd::routes
add_alias(const path_description &old_path, const path_description &new_path)seastar::httpd::routes
add_cookie(match_rule *rule, operation_type type)seastar::httpd::routesinline
add_default_handler(handler_base *handler)seastar::httpd::routes
del_cookie(rule_cookie cookie, operation_type type)seastar::httpd::routes
drop(operation_type type, const sstring &url)seastar::httpd::routes
exception_handler_fun typedef (defined in seastar::httpd::routes)seastar::httpd::routes
exception_handler_id typedef (defined in seastar::httpd::routes)seastar::httpd::routes
exception_reply(std::exception_ptr eptr) (defined in seastar::httpd::routes)seastar::httpd::routes
get_exact_match(operation_type type, const sstring &url) constseastar::httpd::routesinline
get_handler(operation_type type, const sstring &url, parameters &params)seastar::httpd::routes
handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)seastar::httpd::routes
put(operation_type type, const sstring &url, handler_base *handler)seastar::httpd::routes
register_exeption_handler(exception_handler_fun fun)seastar::httpd::routesinline
remove_exception_handler(exception_handler_id id) (defined in seastar::httpd::routes)seastar::httpd::routesinline
routes() (defined in seastar::httpd::routes)seastar::httpd::routes
rule_cookie typedef (defined in seastar::httpd::routes)seastar::httpd::routes
~routes()seastar::httpd::routes
+ + + + diff --git a/master/classseastar_1_1httpd_1_1routes.html b/master/classseastar_1_1httpd_1_1routes.html new file mode 100644 index 000000000..7713a5946 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1routes.html @@ -0,0 +1,584 @@ + + + + + + + +Seastar: seastar::httpd::routes Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::routes Class Reference
+
+
+

Detailed Description

+

routes object do the request dispatching according to the url. It uses two decision mechanism exact match, if a url matches exactly (an optional leading slash is permitted) it is choosen If not, the matching rules are used. matching rules are evaluated by their insertion order

+
+

#include <seastar/http/routes.hh>

+ + + + + + + + +

+Public Types

+using rule_cookie = uint64_t
 
+using exception_handler_fun = std::function< std::unique_ptr< http::reply >(std::exception_ptr eptr)>
 
+using exception_handler_id = size_t
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ~routes ()
 
routesput (operation_type type, const sstring &url, handler_base *handler)
 
handler_basedrop (operation_type type, const sstring &url)
 
routesadd (match_rule *rule, operation_type type=GET)
 
routesadd (operation_type type, const url &url, handler_base *handler)
 
routesadd_default_handler (handler_base *handler)
 
future< std::unique_ptr< http::reply > > handle (const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)
 
handler_baseget_exact_match (operation_type type, const sstring &url) const
 
handler_baseget_handler (operation_type type, const sstring &url, parameters &params)
 
exception_handler_id register_exeption_handler (exception_handler_fun fun)
 
+void remove_exception_handler (exception_handler_id id)
 
+std::unique_ptr< http::replyexception_reply (std::exception_ptr eptr)
 
+void add_alias (const path_description &old_path, const path_description &new_path)
 add an alias to an already registered path. After registering a handler to a path, use this method to add an alias to that handler.
 
rule_cookie add_cookie (match_rule *rule, operation_type type)
 
match_ruledel_cookie (rule_cookie cookie, operation_type type)
 
+

Constructor & Destructor Documentation

+ +

◆ ~routes()

+ +
+
+ + + + + + + +
seastar::httpd::routes::~routes ()
+
+

The destructor deletes the match rules and handlers

+ +
+
+

Member Function Documentation

+ +

◆ add() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
routes & seastar::httpd::routes::add (match_rulerule,
operation_type type = GET 
)
+
+inline
+
+

add a rule to be used. rules are search only if an exact match was not found. rules are search by the order they were added. First in higher priority

Parameters
+ + + +
rulea rule to add
typethe operation type
+
+
+
Returns
it self
+ +
+
+ +

◆ add() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
routes & seastar::httpd::routes::add (operation_type type,
const urlurl,
handler_basehandler 
)
+
+

Add a url match to a handler: Example routes.add(GET, url("/api").remainder("path"), handler);

Parameters
+ + + + +
type
url
handler
+
+
+
Returns
+ +
+
+ +

◆ add_cookie()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
rule_cookie seastar::httpd::routes::add_cookie (match_rulerule,
operation_type type 
)
+
+inline
+
+

Add a rule to be used.

Parameters
+ + + +
rulea rule to add
typethe operation type
+
+
+
Returns
a cookie using which the rule can be removed
+ +
+
+ +

◆ add_default_handler()

+ +
+
+ + + + + + + + +
routes & seastar::httpd::routes::add_default_handler (handler_basehandler)
+
+

Add a default handler - handles any HTTP Method and Path (/*) combination: Example routes.add_default_handler(handler);

Parameters
+ + +
handler
+
+
+
Returns
+ +
+
+ +

◆ del_cookie()

+ +
+
+ + + + + + + + + + + + + + + + + + +
match_rule * seastar::httpd::routes::del_cookie (rule_cookie cookie,
operation_type type 
)
+
+

Del a rule by cookie

Parameters
+ + + +
cookiea cookie returned previously by add_cookie
typethe operation type
+
+
+
Returns
the pointer to the rule
+ +
+
+ +

◆ drop()

+ +
+
+ + + + + + + + + + + + + + + + + + +
handler_base * seastar::httpd::routes::drop (operation_type type,
const sstring & url 
)
+
+

removing a handler from exact match

Parameters
+ + +
urlthe url to match (note that url should start with /)
+
+
+
Returns
the current handler (to be removed by caller)
+ +
+
+ +

◆ get_exact_match()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
handler_base * seastar::httpd::routes::get_exact_match (operation_type type,
const sstring & url 
) const
+
+inline
+
+

Search and return an exact match

Parameters
+ + +
urlthe request url
+
+
+
Returns
the handler if exists or nullptr if it does not
+ +
+
+ +

◆ get_handler()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
handler_base * seastar::httpd::routes::get_handler (operation_type type,
const sstring & url,
parametersparams 
)
+
+

Search and return a handler by the operation type and url

Parameters
+ + + + +
typethe http operation type
urlthe request url
paramsa parameter object that will be filled during the match
+
+
+
Returns
a handler based on the type/url match
+ +
+
+ +

◆ handle()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< std::unique_ptr< http::reply > > seastar::httpd::routes::handle (const sstring & path,
std::unique_ptr< http::requestreq,
std::unique_ptr< http::replyrep 
)
+
+

the main entry point. the general handler calls this method with the request the method takes the headers from the request and find the right handler. It then call the handler with the parameters (if they exists) found in the url

Parameters
+ + + + +
paththe url path found
reqthe http request
repthe http reply
+
+
+ +
+
+ +

◆ put()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
routes & seastar::httpd::routes::put (operation_type type,
const sstring & url,
handler_basehandler 
)
+
+

adding a handler as an exact match

Parameters
+ + + +
urlthe url to match (note that url should start with /)
handlerthe desire handler
+
+
+
Returns
it self
+ +
+
+ +

◆ register_exeption_handler()

+ +
+
+ + + + + +
+ + + + + + + + +
exception_handler_id seastar::httpd::routes::register_exeption_handler (exception_handler_fun fun)
+
+inline
+
+

The exception_handler_fun expect to call std::rethrow_exception(eptr); and catch only the exception it handles

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1rule__registration-members.html b/master/classseastar_1_1httpd_1_1rule__registration-members.html new file mode 100644 index 000000000..ec28f3ce7 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1rule__registration-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::rule_registration Member List
+
+
+ +

This is the complete list of members for seastar::httpd::rule_registration, including all inherited members.

+ + + +
rule_registration(routes &rs, match_rule &rule, operation_type op=GET)seastar::httpd::rule_registration
~rule_registration()seastar::httpd::rule_registration
+ + + + diff --git a/master/classseastar_1_1httpd_1_1rule__registration.html b/master/classseastar_1_1httpd_1_1rule__registration.html new file mode 100644 index 000000000..90a7cbabd --- /dev/null +++ b/master/classseastar_1_1httpd_1_1rule__registration.html @@ -0,0 +1,158 @@ + + + + + + + +Seastar: seastar::httpd::rule_registration Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::rule_registration Class Reference
+
+
+

Detailed Description

+

The rule_registration object facilitates registration and auto unregistration of a match_rule handler into routes

+
+

#include <seastar/http/routes.hh>

+ + + + + + +

+Public Member Functions

 rule_registration (routes &rs, match_rule &rule, operation_type op=GET)
 
 ~rule_registration ()
 
+

Constructor & Destructor Documentation

+ +

◆ rule_registration()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
seastar::httpd::rule_registration::rule_registration (routesrs,
match_rulerule,
operation_type op = GET 
)
+
+

Registers the match_rule into routes with routes::add_cookie

Parameters
+ + + + +
rsthe routes object reference
rulea rule to add
opthe operation type (GET by default)
+
+
+ +
+
+ +

◆ ~rule_registration()

+ +
+
+ + + + + + + +
seastar::httpd::rule_registration::~rule_registration ()
+
+

Unregisters the rule from routes with routes::del_cookie

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1server__error__exception-members.html b/master/classseastar_1_1httpd_1_1server__error__exception-members.html new file mode 100644 index 000000000..12bdf9374 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1server__error__exception-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::server_error_exception Member List
+
+
+ +

This is the complete list of members for seastar::httpd::server_error_exception, including all inherited members.

+ + + + + + +
base_exception(const std::string &msg, http::reply::status_type status) (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
server_error_exception(const std::string &msg) (defined in seastar::httpd::server_error_exception)seastar::httpd::server_error_exceptioninline
status() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
str() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
what() const noexcept (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1server__error__exception.html b/master/classseastar_1_1httpd_1_1server__error__exception.html new file mode 100644 index 000000000..3681b74ca --- /dev/null +++ b/master/classseastar_1_1httpd_1_1server__error__exception.html @@ -0,0 +1,110 @@ + + + + + + + +Seastar: seastar::httpd::server_error_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::server_error_exception Class Reference
+
+
+
+Inheritance diagram for seastar::httpd::server_error_exception:
+
+
+ + +seastar::httpd::base_exception + +
+ + + + + + + + + + +

+Public Member Functions

server_error_exception (const std::string &msg)
 
+virtual const char * what () const noexcept
 
+http::reply::status_type status () const
 
+virtual const std::string & str () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1server__error__exception.png b/master/classseastar_1_1httpd_1_1server__error__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..c8c154008c6396dbe2a6c035d6f651304ddef669 GIT binary patch literal 1064 zcmeAS@N?(olHy`uVBq!ia0vp^kAS#?gBeJkU3mN^kdg@S332`Z|38rV;?396{zDUh zEHFNB-~emq9eE&^qa?^Lm;tB=1g@S6F=Aj~-tOt*7*fIbcJ9MTs}*?M_zRa+{x{#3 zC&;;C?cMBhX*1b7)$^~yv)LD|dS(5U9q6q4YaK#Dzpeull7>sCw22)!|BB6E z+cEb&ciYlsW?aC2wg63TH?K%Tj;qZryTm>HETC_(&&}Gf?)=m3h51UkPEXn|=Y2BS)p5e@IhUz;+`PB%QvX^d31>#GDZP~!l$-Cg zW$)s)*IZvykJw!bJZ>aCzf(_X(?!$wj~J7RL%JWG*`0Cg#^myki=4Lhu1(3A6+QXG zqYW=tq~<8^y%Ff$zE1ySz4)q*6WdFUng_VN`Vn{FyyF@9%k9@I+(iT{7oB$&5&X%3 z2!*p9z@TyFevn?uED`-!`Ci^(eA4Ylctf{bRXIzE3_u2-F%X{q!2RqVN^@6Wx8`<}_HJN@3( z<5|8x-ycZdxGi(t&KVz6Ri#zp_b&-ter%4jZuO1J?9a}&?mcCJ_+p` zzjmYijPc%`rUW6zsS?ss;ld^h{zIbp@((@V9l#8gyn`*`Y?O_KQfcUNazliCvZ zyQ9|YYMIo#M`Y`$U+C$GL3o`0m@K<1}S;r)JU^fWwvzrafh@1W~y7F!Lf971oC1AE@@O1Ta JS?83{1OO`1`!)ao literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1str__matcher-members.html b/master/classseastar_1_1httpd_1_1str__matcher-members.html new file mode 100644 index 000000000..a1c52eabc --- /dev/null +++ b/master/classseastar_1_1httpd_1_1str__matcher-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::str_matcher Member List
+
+
+ +

This is the complete list of members for seastar::httpd::str_matcher, including all inherited members.

+ + + + +
match(const sstring &url, size_t ind, parameters &param) overrideseastar::httpd::str_matchervirtual
str_matcher(const sstring &cmp)seastar::httpd::str_matcherinlineexplicit
~matcher()=default (defined in seastar::httpd::matcher)seastar::httpd::matchervirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1str__matcher.html b/master/classseastar_1_1httpd_1_1str__matcher.html new file mode 100644 index 000000000..685259719 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1str__matcher.html @@ -0,0 +1,194 @@ + + + + + + + +Seastar: seastar::httpd::str_matcher Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::str_matcher Class Reference
+
+
+

Detailed Description

+

Check if the url match a predefine string.

+

When parsing a match rule such as '/file/{path}' the str_match would parse the '/file' part

+
+

#include <seastar/http/matcher.hh>

+
+Inheritance diagram for seastar::httpd::str_matcher:
+
+
+ + +seastar::httpd::matcher + +
+ + + + + + +

+Public Member Functions

 str_matcher (const sstring &cmp)
 
virtual size_t match (const sstring &url, size_t ind, parameters &param) override
 
+

Constructor & Destructor Documentation

+ +

◆ str_matcher()

+ +
+
+ + + + + +
+ + + + + + + + +
seastar::httpd::str_matcher::str_matcher (const sstring & cmp)
+
+inlineexplicit
+
+

Constructor

Parameters
+ + +
cmpthe string to match
+
+
+ +
+
+

Member Function Documentation

+ +

◆ match()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual size_t seastar::httpd::str_matcher::match (const sstring & url,
size_t ind,
parametersparam 
)
+
+overridevirtual
+
+

check if the given url matches the rule

Parameters
+ + + + +
urlthe url to check
indthe position to start from
paramfill the parameters hash
+
+
+
Returns
the end of of the matched part, or sstring::npos if not matched
+ +

Implements seastar::httpd::matcher.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1str__matcher.png b/master/classseastar_1_1httpd_1_1str__matcher.png new file mode 100644 index 0000000000000000000000000000000000000000..e9d4a9f9ecf43d58feb13eedf1b0d07a033d9998 GIT binary patch literal 657 zcmeAS@N?(olHy`uVBq!ia0vp^^ME*jgBeKP-)Ykeq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ06g*uVLn;{G&VAeWT7iePU3lgD|0m3& z)ft61<*s=rx_avo!T4=6AIA5UE#{c>0Cj`RIDUZ0q@zbxmIiT$}czU(z>UR&QK)wQP|JhS)ZolT07+CjOG zCtlnYaqn4&=E~gUJ$Lt=j-FdC`Re6d*SnHFGV@d_W7V!tO8vX>+8O1FXVu57kJbcA zE$66>a;mV~`R|*amg=9ku@81$++OiqzF2){?$dY6-yGQQrn%k$=zAm4n z?Wwr8?xf1gTGe?fu3r;vJbx__@}IN_T%?KbK#AOuy;+ zTkga0&D-}Ge&gDeC;jeo*53CwZ++Y+{5 zTldpfArs%K?_l1u_;cpRZ)^4PdmH`T{NL;Nef%TKqsEs%C&qi)*W*#f_44aK%07%d zU>sLI;dd09`PI8WdG}nrbl`DKb?(wTf4=E`xRW99p7q{O@i>+3Yw!HsvUiW(z8Aqy zw~20SU7x6s)2kBFw9**}<)?9jKRekLa#f4!K S*Yttuhr!d;&t;ucLK6Vwo;i2` literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1unexpected__status__error-members.html b/master/classseastar_1_1httpd_1_1unexpected__status__error-members.html new file mode 100644 index 000000000..814297884 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1unexpected__status__error-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::unexpected_status_error Member List
+
+
+ +

This is the complete list of members for seastar::httpd::unexpected_status_error, including all inherited members.

+ + + + + + +
base_exception(const std::string &msg, http::reply::status_type status) (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
status() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninline
str() const (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
unexpected_status_error(http::reply::status_type st) (defined in seastar::httpd::unexpected_status_error)seastar::httpd::unexpected_status_errorinline
what() const noexcept (defined in seastar::httpd::base_exception)seastar::httpd::base_exceptioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1httpd_1_1unexpected__status__error.html b/master/classseastar_1_1httpd_1_1unexpected__status__error.html new file mode 100644 index 000000000..39725cf84 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1unexpected__status__error.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar::httpd::unexpected_status_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::unexpected_status_error Class Reference
+
+
+

Detailed Description

+

Client-side exception to report unexpected server reply status

+
+

#include <seastar/http/exception.hh>

+
+Inheritance diagram for seastar::httpd::unexpected_status_error:
+
+
+ + +seastar::httpd::base_exception + +
+ + + + + + + + + + +

+Public Member Functions

unexpected_status_error (http::reply::status_type st)
 
+virtual const char * what () const noexcept
 
+http::reply::status_type status () const
 
+virtual const std::string & str () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1httpd_1_1unexpected__status__error.png b/master/classseastar_1_1httpd_1_1unexpected__status__error.png new file mode 100644 index 0000000000000000000000000000000000000000..af645fa49f9e92c1ec0b9a92cbaafd04680ea552 GIT binary patch literal 1072 zcmeAS@N?(olHy`uVBq!ia0vp^FMzm%gBeKPY7Q3wQW60^A+G=b{|Cvv`C8h4XabN0 z#s>}@VC}pk59D%`1o;Is02P72)l(rx3=GWsJzX3_Dj46+eK@IEfro9n#pON!rRVD^ zIj-GmdppxP?*|{JNs8jJ{Y$0<@hh!d^((w#)vBr>5OHa?gZgs+A9B<8eLb}B5a zaK*Kn#N4>|^BY&aimdW~wa#&Uz4wKj-;ozw&zyb~GP$U9<9^mzA=%MO-i7q=?OD8k z@~+~mx{3BHb}e-izwN(d-KtlGwHf~zLPP&{>|z9x4NM`SS0{rBw+mB(UO6zxUuRvw z{*|d}XNl7-?iVL+vS*qv2rOl+(R5(6Apzf8nkdmGcSJ$yQ9PrT(j!kW@t?_8Ny*#y z*v9PT&o4e(@8UA=!l~UIC)U-8hqyf9lx6fa-=2BVw?Eb9y{%p9=TbHPywkidPF=Q{ zQLghmrEEv(=I^(+Z0+oL^MWDco^iEFZ1TC={)IPR-c|Pun!R)B+Lf171%W~3@?>9M zL>g2Y3G~s=ACf9uBw(U)~ zP6f@?3;LdUVd?VfuV->vKEJHk300U4VvACgJbLo^S0nP*a znM4ju24TL2JiQq`$=Ch%*W~=pd-dZguN8~zev_Z8ZGv!}%}*V}I! zO0;k8{~C8z@9fL%o1ZpUOm5vK_^dwn#OCud$7SS}Y&*Md`LqSwa*MNXMD3epr2VQf zcZY%h*`3egr#Ww3p6GbCYWCE$gQq@*ojA>Udh)Fqw_Bf#Vn#I{IzZY~rUhAG2`~SJy`#UFAt4d*^ zX!*Z%p5yx#GyJZ)bd=MY$!7U_*0b|pw0raGbxX5;SjxcqVF?Jo7PnYB<3(VdOp00i_>zopr08lLHZ2$lO literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1httpd_1_1url-members.html b/master/classseastar_1_1httpd_1_1url-members.html new file mode 100644 index 000000000..da8efd592 --- /dev/null +++ b/master/classseastar_1_1httpd_1_1url-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::httpd::url Member List
+
+
+ +

This is the complete list of members for seastar::httpd::url, including all inherited members.

+ + + + + + +
_param (defined in seastar::httpd::url)seastar::httpd::url
_path (defined in seastar::httpd::url)seastar::httpd::url
remainder(const sstring &param)seastar::httpd::urlinline
url(url &&)=defaultseastar::httpd::url
url(const sstring &path)seastar::httpd::urlinline
+ + + + diff --git a/master/classseastar_1_1httpd_1_1url.html b/master/classseastar_1_1httpd_1_1url.html new file mode 100644 index 000000000..e491c7cbe --- /dev/null +++ b/master/classseastar_1_1httpd_1_1url.html @@ -0,0 +1,203 @@ + + + + + + + +Seastar: seastar::httpd::url Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::httpd::url Class Reference
+
+
+

Detailed Description

+

The url helps defining a route.

+
+

#include <seastar/http/routes.hh>

+ + + + + + + + +

+Public Member Functions

 url (url &&)=default
 
 url (const sstring &path)
 
urlremainder (const sstring &param)
 
+ + + + + +

+Public Attributes

+sstring _path
 
+sstring _param
 
+

Constructor & Destructor Documentation

+ +

◆ url() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
seastar::httpd::url::url (url && )
+
+default
+
+

Move constructor

+ +
+
+ +

◆ url() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
seastar::httpd::url::url (const sstring & path)
+
+inline
+
+

Construct with a url path as it's parameter

Parameters
+ + +
paththe url path to be used
+
+
+ +
+
+

Member Function Documentation

+ +

◆ remainder()

+ +
+
+ + + + + +
+ + + + + + + + +
url & seastar::httpd::url::remainder (const sstring & param)
+
+inline
+
+

Adds a parameter that matches untill the end of the URL.

Parameters
+ + +
paramthe parmaeter name
+
+
+
Returns
the current url
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1inheriting__concrete__execution__stage-members.html b/master/classseastar_1_1inheriting__concrete__execution__stage-members.html new file mode 100644 index 000000000..14e8f830e --- /dev/null +++ b/master/classseastar_1_1inheriting__concrete__execution__stage-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::inheriting_concrete_execution_stage< ReturnType, Args > Member List
+
+
+ +

This is the complete list of members for seastar::inheriting_concrete_execution_stage< ReturnType, Args >, including all inherited members.

+ + + + + +
get_stats() const noexceptseastar::inheriting_concrete_execution_stage< ReturnType, Args >inline
inheriting_concrete_execution_stage(const sstring &name, noncopyable_function< ReturnType(Args...)> f)seastar::inheriting_concrete_execution_stage< ReturnType, Args >inline
operator()(typename internal::wrap_for_es< Args >::type... args)seastar::inheriting_concrete_execution_stage< ReturnType, Args >inline
stats typedef (defined in seastar::inheriting_execution_stage)seastar::inheriting_execution_stage
+ + + + diff --git a/master/classseastar_1_1inheriting__concrete__execution__stage.html b/master/classseastar_1_1inheriting__concrete__execution__stage.html new file mode 100644 index 000000000..e19f9470a --- /dev/null +++ b/master/classseastar_1_1inheriting__concrete__execution__stage.html @@ -0,0 +1,248 @@ + + + + + + + +Seastar: seastar::inheriting_concrete_execution_stage< ReturnType, Args > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::inheriting_concrete_execution_stage< ReturnType, Args > Class Template Referencefinal
+
+
+

Detailed Description

+
template<typename ReturnType, typename... Args>
+requires std::is_nothrow_move_constructible_v<std::tuple<Args...>>
+class seastar::inheriting_concrete_execution_stage< ReturnType, Args >

Concrete execution stage class, with support for automatic scheduling_group inheritance.

+

A variation of concrete_execution_stage that inherits the scheduling_group from the caller. Each call (of operator()) can be in its own scheduling group.

+
Template Parameters
+ + + +
ReturnTypereturn type of the function object
Argsargument pack containing arguments to the function object, needs to have move constructor that doesn't throw
+
+
+
+

#include <seastar/core/execution_stage.hh>

+
+Inheritance diagram for seastar::inheriting_concrete_execution_stage< ReturnType, Args >:
+
+
+ + +seastar::inheriting_execution_stage + +
+ + + + +

+Public Types

+using stats = boost::container::static_vector< per_scheduling_group_stats, max_scheduling_groups()>
 
+ + + + + + + +

+Public Member Functions

 inheriting_concrete_execution_stage (const sstring &name, noncopyable_function< ReturnType(Args...)> f)
 
return_type operator() (typename internal::wrap_for_es< Args >::type... args)
 
inheriting_execution_stage::stats get_stats () const noexcept
 
+

Constructor & Destructor Documentation

+ +

◆ inheriting_concrete_execution_stage()

+ +
+
+
+template<typename ReturnType , typename... Args>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
seastar::inheriting_concrete_execution_stage< ReturnType, Args >::inheriting_concrete_execution_stage (const sstring & name,
noncopyable_function< ReturnType(Args...)> f 
)
+
+inline
+
+

Construct an inheriting concrete execution stage.

+
Parameters
+ + + +
nameA name for the execution stage; must be unique
fFunction to be called in response to operator(). The function call will be deferred and batched with similar calls to increase instruction cache hit rate.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ get_stats()

+ +
+
+
+template<typename ReturnType , typename... Args>
+ + + + + +
+ + + + + + + +
inheriting_execution_stage::stats seastar::inheriting_concrete_execution_stage< ReturnType, Args >::get_stats () const
+
+inlinenoexcept
+
+

Returns summary of individual execution stage usage statistics

+
Returns
a vector of the stats of the individual per-scheduling group executation stages. Each element in the vector is a pair composed of the scheduling group and the stats for the respective execution stage. Scheduling groups that have had no respective calls enqueued yet are omitted.
+ +
+
+ +

◆ operator()()

+ +
+
+
+template<typename ReturnType , typename... Args>
+ + + + + +
+ + + + + + + + +
return_type seastar::inheriting_concrete_execution_stage< ReturnType, Args >::operator() (typename internal::wrap_for_es< Args >::type... args)
+
+inline
+
+

Enqueues a call to the stage's function

+

Adds a function call to the queue. Objects passed by value are moved, rvalue references are decayed and the objects are moved, lvalue references need to be explicitly wrapped using seastar::ref().

+

The caller's scheduling_group will be preserved across the call.

+

Usage example:

void do_something(int);
+
thread_local auto stage = seastar::inheriting_concrete_execution_stage<int>("execution-stage", do_something);
+
+
future<> func(int x) {
+
return stage(x);
+
}
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Concrete execution stage class, with support for automatic scheduling_group inheritance.
Definition: execution_stage.hh:324
+
Parameters
+ + +
argsarguments passed to the stage's function
+
+
+
Returns
future containing the result of the call to the stage's function
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1inheriting__concrete__execution__stage.png b/master/classseastar_1_1inheriting__concrete__execution__stage.png new file mode 100644 index 0000000000000000000000000000000000000000..5a167bdd1c12ec809a970e01cf69771749bc89d4 GIT binary patch literal 1189 zcmeAS@N?(olHy`uVBq!ia0y~yU~C7n12~w0|ze;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z+&R*;uuoF_;&8=NlO%XTJ8HnfB);> zbNOv6%SWSk8ELzdzJ_m+@Ho-6WNK=&Ja?VZzw+?KXZzGw1s~L32i)t{_BH-H_x^OAJ=@>xF3wtW za`o%nsQovu^ctVreBCwzTr=xUX+d6r^dt9|21}oQ^;zp3 zx>h>cN@8+z$gY#er(d?(qG)jADzWp^w&9b_;KJDDS>baMHpR1eeuD5;l{ynjoGs{1iZ2lU} z?q7R%SBlf7ZIeor`LC*a?&_7k{KY5m7lZ6FFB7{-Uuw6p*#}Rsdunqh!c z%FBB7(g{l{g4jK~;Ed1$FHKbuE(az7k5>!={z&*dr|d4at(!mpT%G-gG3ME!AI|I3 zpXscBp7HZB^M>;`U1P2SW1WA_rfe&QoMNx`!?k60doDj+Ce`=KPf7pmm-4#x*WORR ze)~$qj{)gx(^k8# zxooYQJxgpsqG!Nb)pdn;A4g4_pa0Eg&gWz9~yWwd3oi#fNKn-tO2O_xIK;5%cfP z?(EZV{Zle4iEzE6aq-Gh)wZ20-M@IW$9)kml~`^x*^Kj(+w+o)>yHk7W6hCe3y`{% zyqWKM+|Rrcf6nL~;iq5abfA`gD zsmGIcRmz>a%Rl|~rEh;X?7Y&uD`frWysh^G|Hr>$ufAq&_2qs0R6g~0?DdcL^S=&a zeD(X>w$JJpZu;jx+j4E0am_!YpSf&$nORKh;%3jRy}LErxbF6wnVCIrquNuWcO>kx z3h8Iy)pKMh|2RRq;qo6BAH9$5pY!S}UD{VJ=;1%`eTPj!{)boJ7=GC09=z}QZQb$o zbBCYmFx@%Qe + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::inheriting_execution_stage Member List
+
+
+ +

This is the complete list of members for seastar::inheriting_execution_stage, including all inherited members.

+ + +
stats typedef (defined in seastar::inheriting_execution_stage)seastar::inheriting_execution_stage
+ + + + diff --git a/master/classseastar_1_1inheriting__execution__stage.html b/master/classseastar_1_1inheriting__execution__stage.html new file mode 100644 index 000000000..4e5b853aa --- /dev/null +++ b/master/classseastar_1_1inheriting__execution__stage.html @@ -0,0 +1,141 @@ + + + + + + + +Seastar: seastar::inheriting_execution_stage Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::inheriting_execution_stage Class Reference
+
+
+

Detailed Description

+

Base class for execution stages with support for automatic scheduling_group inheritance.

+
+

#include <seastar/core/execution_stage.hh>

+
+Inheritance diagram for seastar::inheriting_execution_stage:
+
+
+ + +seastar::inheriting_concrete_execution_stage< ReturnType, Args > + +
+ + + + +

+Classes

struct  per_scheduling_group_stats
 
+ + + +

+Public Types

+using stats = boost::container::static_vector< per_scheduling_group_stats, max_scheduling_groups()>
 
+

Class Documentation

+ +

◆ seastar::inheriting_execution_stage::per_scheduling_group_stats

+ +
+
+ + + + +
struct seastar::inheriting_execution_stage::per_scheduling_group_stats
+
+ + + + + + + + +
Class Members
+scheduling_group +sg +
+stats +stats +
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1inheriting__execution__stage.png b/master/classseastar_1_1inheriting__execution__stage.png new file mode 100644 index 0000000000000000000000000000000000000000..7f44539b959c0a84d823d582d4c28352679d789a GIT binary patch literal 1192 zcmeAS@N?(olHy`uVBq!ia0y~yU~C7n12~w0|ze;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z+&#{;uuoF_;&8ib*~k8T*a*~{rvC0 zFV{GsjpyvnPJeCpyNeVXdc|+7Uos^~W9gI_S0)Zd3oQ$VAKFOx^mOOzW$)h9)Rpww zHwfRF`$nYC{zT&Y&+BFG&HZy$=F(}mRkL2c|Fh5Hlhvm6=T>fXo)^1*;m_H35AJxh zr)#e5dUL+{zmEwXJ9|jgTI_+--GhqHCoR(4bzDJb|E8N#M!|7>#d|+>#cp6?&ogf+g;?gVDKu~{bBffl z+b8oZV0TC)`wlW2wg!2f z3}%?WPQF2)VRaL8!|u8|CYFZnAeNj2khQsq`9OR?0IE)8Q>ewh9$p~PmiVLKFVA6v znjI1@rXG-r*`}|bvvDf0cMX8(jC+U~vOh0UNE8@iJXNhOkqWCUvTb8Q2 z^3ow_(%1`58bK24b4r$nm%Z+^^`APWKJBSh_^gGktw#^DmOMUo;^@5@|J1Vjt2b)- zOp|%zVr;kH{C3vtwFy(jcg@XPn^Q1j{ldBBSF(0)*E$kf`=UU@>Gu62TE&ie{pY419B8lln-C>Mc?6Qvo-Y+fK?US%pdQ#BRU$?fryEQ5P%)5yjN_X81 z`|gl)r@h?o*}2*mbLMWkzow|?aFx^QpcdYO@9S=R<#oFUPd+UZ%u@Q*PG&X#^3Rv5 zY9sEx@`^k4bkFR!<}dy)v%9hT-op#)`FY!!zb;(!WBut}DGh)26}~wo9nmxY-kIF9 zzUjaIq;87#jX4xzIcIH{_Vmi@@6O&>yEuKCVRAIz>5Uq5UKX7YQ(ZaftoNjnnN`PB zPX_-#yjO7ezo5Z>4W#SRGhE1kahLknZeOw`KP@niA-9uuBln&r?!R1r2TM)oJ?DygwtUIo_W96H^20ceCsx8C$Lyy N@O1TaS?83{1OT@=OZNZ( literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1input__stream-members.html b/master/classseastar_1_1input__stream-members.html new file mode 100644 index 000000000..bac7f4676 --- /dev/null +++ b/master/classseastar_1_1input__stream-members.html @@ -0,0 +1,100 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::input_stream< CharType > Member List
+
+
+ +

This is the complete list of members for seastar::input_stream< CharType >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
char_type typedef (defined in seastar::input_stream< CharType >)seastar::input_stream< CharType >
close() noexceptseastar::input_stream< CharType >inline
consume(Consumer &&c) noexcept(std::is_nothrow_move_constructible_v< Consumer >) (defined in seastar::input_stream< CharType >)seastar::input_stream< CharType >
consume(Consumer &c) noexcept(std::is_nothrow_move_constructible_v< Consumer >) (defined in seastar::input_stream< CharType >)seastar::input_stream< CharType >
consumption_result_type typedef (defined in seastar::input_stream< CharType >)seastar::input_stream< CharType >
detach() &&seastar::input_stream< CharType >
eof() const noexceptseastar::input_stream< CharType >inline
fd() noexcept (defined in seastar::input_stream< CharType >)seastar::input_stream< CharType >inlineprotected
input_stream() noexcept=default (defined in seastar::input_stream< CharType >)seastar::input_stream< CharType >
input_stream(data_source fd) noexcept (defined in seastar::input_stream< CharType >)seastar::input_stream< CharType >inlineexplicit
input_stream(input_stream &&)=default (defined in seastar::input_stream< CharType >)seastar::input_stream< CharType >
operator=(input_stream &&)=default (defined in seastar::input_stream< CharType >)seastar::input_stream< CharType >
read() noexceptseastar::input_stream< CharType >
read_exactly(size_t n) noexceptseastar::input_stream< CharType >
read_up_to(size_t n) noexceptseastar::input_stream< CharType >
reset() noexcept (defined in seastar::input_stream< CharType >)seastar::input_stream< CharType >inlineprotected
skip(uint64_t n) noexceptseastar::input_stream< CharType >
unconsumed_remainder typedef (defined in seastar::input_stream< CharType >)seastar::input_stream< CharType >
+ + + + diff --git a/master/classseastar_1_1input__stream.html b/master/classseastar_1_1input__stream.html new file mode 100644 index 000000000..8d140b412 --- /dev/null +++ b/master/classseastar_1_1input__stream.html @@ -0,0 +1,331 @@ + + + + + + + +Seastar: seastar::input_stream< CharType > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::input_stream< CharType > Class Template Referencefinal
+
+
+

Detailed Description

+
template<typename CharType>
+class seastar::input_stream< CharType >

Buffers data from a data_source and provides a stream interface to the user.

+
Note
All methods must be called sequentially. That is, no method may be invoked before the previous method's returned future is resolved.
+
+

#include <seastar/core/iostream.hh>

+ + + + + + + + +

+Public Types

+using consumption_result_type = consumption_result< CharType >
 
+using unconsumed_remainder = std::optional< tmp_buf >
 
+using char_type = CharType
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

input_stream (data_source fd) noexcept
 
input_stream (input_stream &&)=default
 
+input_streamoperator= (input_stream &&)=default
 
future< temporary_buffer< CharType > > read_exactly (size_t n) noexcept
 
+template<typename Consumer >
+requires InputStreamConsumer<Consumer, CharType> || ObsoleteInputStreamConsumer<Consumer, CharType>
future consume (Consumer &&c) noexcept(std::is_nothrow_move_constructible_v< Consumer >)
 
+template<typename Consumer >
+requires InputStreamConsumer<Consumer, CharType> || ObsoleteInputStreamConsumer<Consumer, CharType>
future consume (Consumer &c) noexcept(std::is_nothrow_move_constructible_v< Consumer >)
 
bool eof () const noexcept
 
future< tmp_bufread () noexcept
 
future< tmp_bufread_up_to (size_t n) noexcept
 
future close () noexcept
 
+future skip (uint64_t n) noexcept
 Ignores n next bytes from the stream.
 
data_source detach () &&
 
+ + + + + +

+Protected Member Functions

+void reset () noexcept
 
+data_sourcefd () noexcept
 
+

Member Function Documentation

+ +

◆ close()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + +
future seastar::input_stream< CharType >::close ()
+
+inlinenoexcept
+
+

Detaches the input_stream from the underlying data source.

+

Waits for any background operations (for example, read-ahead) to complete, so that the any resources the stream is using can be safely destroyed. An example is a file resource used by the stream returned by make_file_input_stream().

+
Returns
a future that becomes ready when this stream no longer needs the data source.
+ +
+
+ +

◆ detach()

+ +
+
+
+template<typename CharType >
+ + + + + + + +
data_source seastar::input_stream< CharType >::detach () &&
+
+

Detaches the underlying data_source from the input_stream.

+

The intended usage is custom data_source_impl implementations wrapping an existing input_stream, therefore it shouldn't be called on an input_stream that was already used. After calling detach() the input_stream is in an unusable, moved-from state.

+
Exceptions
+ + +
std::logic_errorif called on a used stream
+
+
+
Returns
the data_source
+ +
+
+ +

◆ eof()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + +
bool seastar::input_stream< CharType >::eof () const
+
+inlinenoexcept
+
+

Returns true if the end-of-file flag is set on the stream. Note that the eof flag is only set after a previous attempt to read from the stream noticed the end of the stream. In other words, it is possible that eof() returns false but read() will return an empty buffer. Checking eof() again after the read will return true.

+ +
+
+ +

◆ read()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + +
future< temporary_buffer< CharType > > seastar::input_stream< CharType >::read
+
+noexcept
+
+

Returns some data from the stream, or an empty buffer on end of stream.

+ +
+
+ +

◆ read_exactly()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + +
future< temporary_buffer< CharType > > seastar::input_stream< CharType >::read_exactly (size_t n)
+
+noexcept
+
+

Reads n bytes from the stream, or fewer if reached the end of stream.

+
Returns
a future that waits until n bytes are available in the stream and returns them. If the end of stream is reached before n bytes were read, fewer than n bytes will be returned - so despite the method's name, the caller must not assume the returned buffer will always contain exactly n bytes.
+
Exceptions
+ + +
ifan I/O error occurs during the read. As explained above, prematurely reaching the end of stream is not an I/O error.
+
+
+ +
+
+ +

◆ read_up_to()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + +
future< temporary_buffer< CharType > > seastar::input_stream< CharType >::read_up_to (size_t n)
+
+noexcept
+
+

Returns up to n bytes from the stream, or an empty buffer on end of stream.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/master/classseastar_1_1io__completion-members.html b/master/classseastar_1_1io__completion-members.html new file mode 100644 index 000000000..d73377e9e --- /dev/null +++ b/master/classseastar_1_1io__completion-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::io_completion Member List
+
+
+ +

This is the complete list of members for seastar::io_completion, including all inherited members.

+ + + + + + + + +
complete(size_t res) noexcept=0 (defined in seastar::io_completion)seastar::io_completionpure virtual
complete_with(ssize_t res) final override (defined in seastar::io_completion)seastar::io_completionvirtual
kernel_completion()=default (defined in seastar::kernel_completion)seastar::kernel_completionprotected
kernel_completion(kernel_completion &&)=default (defined in seastar::kernel_completion)seastar::kernel_completionprotected
operator=(kernel_completion &&)=default (defined in seastar::kernel_completion)seastar::kernel_completionprotected
set_exception(std::exception_ptr eptr) noexcept=0 (defined in seastar::io_completion)seastar::io_completionpure virtual
~kernel_completion()=default (defined in seastar::kernel_completion)seastar::kernel_completionprotected
+ + + + diff --git a/master/classseastar_1_1io__completion.html b/master/classseastar_1_1io__completion.html new file mode 100644 index 000000000..6c94386fa --- /dev/null +++ b/master/classseastar_1_1io__completion.html @@ -0,0 +1,135 @@ + + + + + + + +Seastar: seastar::io_completion Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::io_completion Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::io_completion:
+
+
+ + +seastar::kernel_completion + +
+ + + + + + + + +

+Public Member Functions

virtual void complete_with (ssize_t res) final override
 
+virtual void complete (size_t res) noexcept=0
 
+virtual void set_exception (std::exception_ptr eptr) noexcept=0
 
+

Member Function Documentation

+ +

◆ complete_with()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void seastar::io_completion::complete_with (ssize_t res)
+
+finaloverridevirtual
+
+ +

Implements seastar::kernel_completion.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1io__completion.png b/master/classseastar_1_1io__completion.png new file mode 100644 index 0000000000000000000000000000000000000000..bb51a9d9fc16719c0147d3532dcefaa6aa250b25 GIT binary patch literal 676 zcmeAS@N?(olHy`uVBq!ia0vp^3xPO*gBeJ=IX<-jQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;g4}C*S|yvpRA;ccqKQ-0ORGId%WwO5@y|T$tsXe(uQA z@Z3`Mk_wBByZ zOofWcw_U$$GWj`HAD4F8{nadSN2>AlzINj|p$Gm-#x1$2|Eb`H?x|P@YOKjzN5Gug*L!^blj#aV2 z-;v`%FmCRDAu)8@9f61cXOP| zFF#ve>UiVYOQB`G=Uss= literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1io__group-members.html b/master/classseastar_1_1io__group-members.html new file mode 100644 index 000000000..52ed0bc36 --- /dev/null +++ b/master/classseastar_1_1io__group-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::io_group Member List
+
+
+ +

This is the complete list of members for seastar::io_group, including all inherited members.

+ + + + + +
internal::get_fair_group (defined in seastar::io_group)seastar::io_groupfriend
io_group(io_queue::config io_cfg, unsigned nr_queues) (defined in seastar::io_group)seastar::io_groupexplicit
io_latency_goal() const noexcept (defined in seastar::io_group)seastar::io_group
~io_group() (defined in seastar::io_group)seastar::io_group
+ + + + diff --git a/master/classseastar_1_1io__group.html b/master/classseastar_1_1io__group.html new file mode 100644 index 000000000..cd1d28a75 --- /dev/null +++ b/master/classseastar_1_1io__group.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: seastar::io_group Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::io_group Class Reference
+
+
+ + + + + + +

+Public Member Functions

io_group (io_queue::config io_cfg, unsigned nr_queues)
 
+std::chrono::duration< double > io_latency_goal () const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1io__intent-members.html b/master/classseastar_1_1io__intent-members.html new file mode 100644 index 000000000..7e1fdced1 --- /dev/null +++ b/master/classseastar_1_1io__intent-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::io_intent Member List
+
+
+ +

This is the complete list of members for seastar::io_intent, including all inherited members.

+ + + + + + + + +
cancel() noexceptseastar::io_intentinline
io_intent()=default (defined in seastar::io_intent)seastar::io_intent
io_intent(const io_intent &)=delete (defined in seastar::io_intent)seastar::io_intent
io_intent(io_intent &&o) noexcept (defined in seastar::io_intent)seastar::io_intentinline
operator=(const io_intent &)=delete (defined in seastar::io_intent)seastar::io_intent
operator=(io_intent &&)=delete (defined in seastar::io_intent)seastar::io_intent
~io_intent()=default (defined in seastar::io_intent)seastar::io_intent
+ + + + diff --git a/master/classseastar_1_1io__intent.html b/master/classseastar_1_1io__intent.html new file mode 100644 index 000000000..e7516bc67 --- /dev/null +++ b/master/classseastar_1_1io__intent.html @@ -0,0 +1,136 @@ + + + + + + + +Seastar: seastar::io_intent Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::io_intent Class Reference
+
+
+

Detailed Description

+
Examples
file_demo.cc.
+
+
+ + + + + + + + + + + +

+Public Member Functions

io_intent (const io_intent &)=delete
 
+io_intentoperator= (const io_intent &)=delete
 
+io_intentoperator= (io_intent &&)=delete
 
io_intent (io_intent &&o) noexcept
 
void cancel () noexcept
 
+

Member Function Documentation

+ +

◆ cancel()

+ +
+
+ + + + + +
+ + + + + + + +
void seastar::io_intent::cancel ()
+
+inlinenoexcept
+
+

Explicitly cancels all the requests attached to this intent so far. The respective futures are resolved into the cancelled_error

+
Examples
file_demo.cc.
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1io__queue-members.html b/master/classseastar_1_1io__queue-members.html new file mode 100644 index 000000000..c4abca889 --- /dev/null +++ b/master/classseastar_1_1io__queue-members.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::io_queue Member List
+
+
+ +

This is the complete list of members for seastar::io_queue, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
block_size_shift (defined in seastar::io_queue)seastar::io_queuestatic
cancel_request(queued_io_request &req) noexcept (defined in seastar::io_queue)seastar::io_queue
clock_type typedef (defined in seastar::io_queue)seastar::io_queue
complete_cancelled_request(queued_io_request &req) noexcept (defined in seastar::io_queue)seastar::io_queue
complete_request(io_desc_read_write &desc) noexcept (defined in seastar::io_queue)seastar::io_queue
dev_id() const noexcept (defined in seastar::io_queue)seastar::io_queueinline
get_config() const noexcept (defined in seastar::io_queue)seastar::io_queueinline
get_request_limits() const noexcept (defined in seastar::io_queue)seastar::io_queue
internal::get_fair_group (defined in seastar::io_queue)seastar::io_queuefriend
io_queue(io_group_ptr group, internal::io_sink &sink) (defined in seastar::io_queue)seastar::io_queue
mountpoint() const (defined in seastar::io_queue)seastar::io_queueinline
next_pending_aio() const noexcept (defined in seastar::io_queue)seastar::io_queue
poll_io_queue() (defined in seastar::io_queue)seastar::io_queue
queued_requests() const (defined in seastar::io_queue)seastar::io_queueinline
read_request_base_count (defined in seastar::io_queue)seastar::io_queuestatic
rename_priority_class(internal::priority_class pc, sstring new_name) (defined in seastar::io_queue)seastar::io_queue
request_capacity(internal::io_direction_and_length dnl) const noexcept (defined in seastar::io_queue)seastar::io_queue
request_stream(internal::io_direction_and_length dnl) const noexcept (defined in seastar::io_queue)seastar::io_queue
requests_currently_executing() const (defined in seastar::io_queue)seastar::io_queueinline
submit_io_read(internal::priority_class priority_class, size_t len, internal::io_request req, io_intent *intent, iovec_keeper iovs={}) noexcept (defined in seastar::io_queue)seastar::io_queue
submit_io_write(internal::priority_class priority_class, size_t len, internal::io_request req, io_intent *intent, iovec_keeper iovs={}) noexcept (defined in seastar::io_queue)seastar::io_queue
submit_request(io_desc_read_write *desc, internal::io_request req) noexcept (defined in seastar::io_queue)seastar::io_queue
throttle_priority_class(const priority_class_data &pc) noexcept (defined in seastar::io_queue)seastar::io_queue
unthrottle_priority_class(const priority_class_data &pc) noexcept (defined in seastar::io_queue)seastar::io_queue
update_bandwidth_for_class(internal::priority_class pc, uint64_t new_bandwidth) (defined in seastar::io_queue)seastar::io_queue
update_shares_for_class(internal::priority_class pc, size_t new_shares) (defined in seastar::io_queue)seastar::io_queue
~io_queue() (defined in seastar::io_queue)seastar::io_queue
+ + + + diff --git a/master/classseastar_1_1io__queue.html b/master/classseastar_1_1io__queue.html new file mode 100644 index 000000000..1a9c8504b --- /dev/null +++ b/master/classseastar_1_1io__queue.html @@ -0,0 +1,311 @@ + + + + + + + +Seastar: seastar::io_queue Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::io_queue Class Reference
+
+
+ + + + + + +

+Classes

struct  config
 
struct  request_limits
 
+ + + +

+Public Types

+using clock_type = std::chrono::steady_clock
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

io_queue (io_group_ptr group, internal::io_sink &sink)
 
+stream_id request_stream (internal::io_direction_and_length dnl) const noexcept
 
+future< size_t > submit_io_read (internal::priority_class priority_class, size_t len, internal::io_request req, io_intent *intent, iovec_keeper iovs={}) noexcept
 
+future< size_t > submit_io_write (internal::priority_class priority_class, size_t len, internal::io_request req, io_intent *intent, iovec_keeper iovs={}) noexcept
 
+void submit_request (io_desc_read_write *desc, internal::io_request req) noexcept
 
+void cancel_request (queued_io_request &req) noexcept
 
+void complete_cancelled_request (queued_io_request &req) noexcept
 
+void complete_request (io_desc_read_write &desc) noexcept
 
+size_t queued_requests () const
 
+size_t requests_currently_executing () const
 
+void poll_io_queue ()
 
+clock_type::time_point next_pending_aio () const noexcept
 
+fair_queue_entry::capacity_t request_capacity (internal::io_direction_and_length dnl) const noexcept
 
+sstring mountpoint () const
 
+dev_t dev_id () const noexcept
 
+void update_shares_for_class (internal::priority_class pc, size_t new_shares)
 
+future update_bandwidth_for_class (internal::priority_class pc, uint64_t new_bandwidth)
 
+void rename_priority_class (internal::priority_class pc, sstring new_name)
 
+void throttle_priority_class (const priority_class_data &pc) noexcept
 
+void unthrottle_priority_class (const priority_class_data &pc) noexcept
 
+request_limits get_request_limits () const noexcept
 
+const configget_config () const noexcept
 
+ + + + + +

+Static Public Attributes

+static constexpr unsigned read_request_base_count = 128
 
+static constexpr unsigned block_size_shift = 9
 
+

Class Documentation

+ +

◆ seastar::io_queue::config

+ +
+
+ + + + +
struct seastar::io_queue::config
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class Members
+size_t +block_count_limit_min +
+unsigned long +blocks_count_rate +
+dev_t +devid +
+unsigned +disk_blocks_write_to_read_multiplier +
+size_t +disk_read_saturation_length +
+unsigned +disk_req_write_to_read_multiplier +
+size_t +disk_write_saturation_length +
+bool +duplex +
+double +flow_ratio_backpressure_threshold +
+double +flow_ratio_ema_factor +
+unsigned +flow_ratio_ticks +
+sstring +mountpoint +
+duration< double > +rate_limit_duration +
+unsigned long +req_count_rate +
+ +
+
+ +

◆ seastar::io_queue::request_limits

+ +
+
+ + + + +
struct seastar::io_queue::request_limits
+
+ + + + + + + + +
Class Members
+size_t +max_read +
+size_t +max_write +
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1json_1_1formatter-members.html b/master/classseastar_1_1json_1_1formatter-members.html new file mode 100644 index 000000000..268811e77 --- /dev/null +++ b/master/classseastar_1_1json_1_1formatter-members.html @@ -0,0 +1,110 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::json::formatter Member List
+
+
+ +

This is the complete list of members for seastar::json::formatter, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
to_json(const sstring &str)seastar::json::formatterstatic
to_json(int n)seastar::json::formatterstatic
to_json(unsigned n)seastar::json::formatterstatic
to_json(long n)seastar::json::formatterstatic
to_json(float f)seastar::json::formatterstatic
to_json(double d)seastar::json::formatterstatic
to_json(const char *str, size_t len)seastar::json::formatterstatic
to_json(const char *str)seastar::json::formatterstatic
to_json(bool d)seastar::json::formatterstatic
to_json(const std::vector< Args... > &vec)seastar::json::formatterinlinestatic
to_json(const std::map< Args... > &map) (defined in seastar::json::formatter)seastar::json::formatterinlinestatic
to_json(const std::unordered_map< Args... > &map) (defined in seastar::json::formatter)seastar::json::formatterinlinestatic
to_json(const date_time &d)seastar::json::formatterstatic
to_json(const jsonable &obj)seastar::json::formatterstatic
to_json(unsigned long l)seastar::json::formatterstatic
write(output_stream< char > &s, const sstring &str)seastar::json::formatterinlinestatic
write(output_stream< char > &s, int n)seastar::json::formatterinlinestatic
write(output_stream< char > &s, long n)seastar::json::formatterinlinestatic
write(output_stream< char > &s, float f)seastar::json::formatterinlinestatic
write(output_stream< char > &s, double d)seastar::json::formatterinlinestatic
write(output_stream< char > &s, const char *str)seastar::json::formatterinlinestatic
write(output_stream< char > &s, bool d)seastar::json::formatterinlinestatic
write(output_stream< char > &s, std::vector< Args... > vec)seastar::json::formatterinlinestatic
write(output_stream< char > &s, std::map< Args... > map) (defined in seastar::json::formatter)seastar::json::formatterinlinestatic
write(output_stream< char > &s, std::unordered_map< Args... > map) (defined in seastar::json::formatter)seastar::json::formatterinlinestatic
write(output_stream< char > &s, const date_time &d)seastar::json::formatterinlinestatic
write(output_stream< char > &s, Jsonable obj)seastar::json::formatterinlinestatic
write(output_stream< char > &s, unsigned long l)seastar::json::formatterinlinestatic
+ + + + diff --git a/master/classseastar_1_1json_1_1formatter.html b/master/classseastar_1_1json_1_1formatter.html new file mode 100644 index 000000000..1ef37bcb9 --- /dev/null +++ b/master/classseastar_1_1json_1_1formatter.html @@ -0,0 +1,1081 @@ + + + + + + + +Seastar: seastar::json::formatter Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::json::formatter Class Reference
+
+
+

Detailed Description

+

The formatter prints json values in a json format it overload to_json method for each of the supported format all to_json parameters are passed as a pointer

+
+

#include <seastar/json/formatter.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static sstring to_json (const sstring &str)
 
static sstring to_json (int n)
 
static sstring to_json (unsigned n)
 
static sstring to_json (long n)
 
static sstring to_json (float f)
 
static sstring to_json (double d)
 
static sstring to_json (const char *str, size_t len)
 
static sstring to_json (const char *str)
 
static sstring to_json (bool d)
 
template<typename... Args>
static sstring to_json (const std::vector< Args... > &vec)
 
+template<typename... Args>
static sstring to_json (const std::map< Args... > &map)
 
+template<typename... Args>
static sstring to_json (const std::unordered_map< Args... > &map)
 
static sstring to_json (const date_time &d)
 
static sstring to_json (const jsonable &obj)
 
static sstring to_json (unsigned long l)
 
static future write (output_stream< char > &s, const sstring &str)
 
static future write (output_stream< char > &s, int n)
 
static future write (output_stream< char > &s, long n)
 
static future write (output_stream< char > &s, float f)
 
static future write (output_stream< char > &s, double d)
 
static future write (output_stream< char > &s, const char *str)
 
static future write (output_stream< char > &s, bool d)
 
template<typename... Args>
static future write (output_stream< char > &s, std::vector< Args... > vec)
 
+template<typename... Args>
static future write (output_stream< char > &s, std::map< Args... > map)
 
+template<typename... Args>
static future write (output_stream< char > &s, std::unordered_map< Args... > map)
 
static future write (output_stream< char > &s, const date_time &d)
 
template<std::derived_from< jsonable > Jsonable>
static future write (output_stream< char > &s, Jsonable obj)
 
static future write (output_stream< char > &s, unsigned long l)
 
+

Member Function Documentation

+ +

◆ to_json() [1/13]

+ +
+
+ + + + + +
+ + + + + + + + +
static sstring seastar::json::formatter::to_json (bool d)
+
+static
+
+

return a json formatted bool

Parameters
+ + +
dthe bool to format
+
+
+
Returns
the given bool in a json format
+ +
+
+ +

◆ to_json() [2/13]

+ +
+
+ + + + + +
+ + + + + + + + +
static sstring seastar::json::formatter::to_json (const char * str)
+
+static
+
+

return a json formatted char* (treated as string), assuming there are no zero-chars in the middle

Parameters
+ + +
strthe char* to format
+
+
+
Returns
the given char* in a json format
+
Deprecated:
A more robust overload should be preferred: to_json(const char*, size_t)
+ +
+
+ +

◆ to_json() [3/13]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static sstring seastar::json::formatter::to_json (const char * str,
size_t len 
)
+
+static
+
+

return a json formatted char* (treated as string), possibly with zero-chars in the middle

Parameters
+ + + +
strthe char* to format
lennumber of bytes to read from the str
+
+
+
Returns
the given char* in a json format
+ +
+
+ +

◆ to_json() [4/13]

+ +
+
+ + + + + +
+ + + + + + + + +
static sstring seastar::json::formatter::to_json (const date_time & d)
+
+static
+
+

return a json formatted date_time

Parameters
+ + +
dthe date_time to format
+
+
+
Returns
the given date_time in a json format
+ +
+
+ +

◆ to_json() [5/13]

+ +
+
+ + + + + +
+ + + + + + + + +
static sstring seastar::json::formatter::to_json (const jsonableobj)
+
+static
+
+

return a json formatted json object

Parameters
+ + +
objthe date_time to format
+
+
+
Returns
the given json object in a json format
+ +
+
+ +

◆ to_json() [6/13]

+ +
+
+ + + + + +
+ + + + + + + + +
static sstring seastar::json::formatter::to_json (const sstring & str)
+
+static
+
+

return a json formatted string

Parameters
+ + +
strthe string to format
+
+
+
Returns
the given string in a json format
+ +
+
+ +

◆ to_json() [7/13]

+ +
+
+
+template<typename... Args>
+ + + + + +
+ + + + + + + + +
static sstring seastar::json::formatter::to_json (const std::vector< Args... > & vec)
+
+inlinestatic
+
+

return a json formatted list of a given vector of params

Parameters
+ + +
vecthe vector to format
+
+
+
Returns
the given vector in a json format
+ +
+
+ +

◆ to_json() [8/13]

+ +
+
+ + + + + +
+ + + + + + + + +
static sstring seastar::json::formatter::to_json (double d)
+
+static
+
+

return a json formatted double

Parameters
+ + +
dthe double to format
+
+
+
Returns
the given double in a json format
+ +
+
+ +

◆ to_json() [9/13]

+ +
+
+ + + + + +
+ + + + + + + + +
static sstring seastar::json::formatter::to_json (float f)
+
+static
+
+

return a json formatted float

Parameters
+ + +
fthe float to format
+
+
+
Returns
the given float in a json format
+ +
+
+ +

◆ to_json() [10/13]

+ +
+
+ + + + + +
+ + + + + + + + +
static sstring seastar::json::formatter::to_json (int n)
+
+static
+
+

return a json formatted int

Parameters
+ + +
nthe int to format
+
+
+
Returns
the given int in a json format
+ +
+
+ +

◆ to_json() [11/13]

+ +
+
+ + + + + +
+ + + + + + + + +
static sstring seastar::json::formatter::to_json (long n)
+
+static
+
+

return a json formatted long

Parameters
+ + +
nthe long to format
+
+
+
Returns
the given long in a json format
+ +
+
+ +

◆ to_json() [12/13]

+ +
+
+ + + + + +
+ + + + + + + + +
static sstring seastar::json::formatter::to_json (unsigned long l)
+
+static
+
+

return a json formatted unsigned long

Parameters
+ + +
lunsigned long to format
+
+
+
Returns
the given unsigned long in a json format
+ +
+
+ +

◆ to_json() [13/13]

+ +
+
+ + + + + +
+ + + + + + + + +
static sstring seastar::json::formatter::to_json (unsigned n)
+
+static
+
+

return a json formatted unsigned

Parameters
+ + +
nthe unsigned to format
+
+
+
Returns
the given unsigned in a json format
+ +
+
+ +

◆ write() [1/11]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static future seastar::json::formatter::write (output_stream< char > & s,
bool d 
)
+
+inlinestatic
+
+

return a json formatted bool

Parameters
+ + +
dthe bool to format
+
+
+
Returns
the given bool in a json format
+ +
+
+ +

◆ write() [2/11]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static future seastar::json::formatter::write (output_stream< char > & s,
const char * str 
)
+
+inlinestatic
+
+

return a json formatted char* (treated as string)

Parameters
+ + +
strthe char* to format
+
+
+
Returns
the given char* in a json format
+ +
+
+ +

◆ write() [3/11]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static future seastar::json::formatter::write (output_stream< char > & s,
const date_time & d 
)
+
+inlinestatic
+
+

return a json formatted date_time

Parameters
+ + +
dthe date_time to format
+
+
+
Returns
the given date_time in a json format
+ +
+
+ +

◆ write() [4/11]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static future seastar::json::formatter::write (output_stream< char > & s,
const sstring & str 
)
+
+inlinestatic
+
+

return a json formatted string

Parameters
+ + +
strthe string to format
+
+
+
Returns
the given string in a json format
+ +
+
+ +

◆ write() [5/11]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static future seastar::json::formatter::write (output_stream< char > & s,
double d 
)
+
+inlinestatic
+
+

return a json formatted double

Parameters
+ + +
dthe double to format
+
+
+
Returns
the given double in a json format
+ +
+
+ +

◆ write() [6/11]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static future seastar::json::formatter::write (output_stream< char > & s,
float f 
)
+
+inlinestatic
+
+

return a json formatted float

Parameters
+ + +
fthe float to format
+
+
+
Returns
the given float in a json format
+ +
+
+ +

◆ write() [7/11]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static future seastar::json::formatter::write (output_stream< char > & s,
int n 
)
+
+inlinestatic
+
+

return a json formatted int

Parameters
+ + +
nthe int to format
+
+
+
Returns
the given int in a json format
+ +
+
+ +

◆ write() [8/11]

+ +
+
+
+template<std::derived_from< jsonable > Jsonable>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static future seastar::json::formatter::write (output_stream< char > & s,
Jsonable obj 
)
+
+inlinestatic
+
+

return a json formatted json object

Parameters
+ + +
objthe date_time to format
+
+
+
Returns
the given json object in a json format
+ +
+
+ +

◆ write() [9/11]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static future seastar::json::formatter::write (output_stream< char > & s,
long n 
)
+
+inlinestatic
+
+

return a json formatted long

Parameters
+ + +
nthe long to format
+
+
+
Returns
the given long in a json format
+ +
+
+ +

◆ write() [10/11]

+ +
+
+
+template<typename... Args>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static future seastar::json::formatter::write (output_stream< char > & s,
std::vector< Args... > vec 
)
+
+inlinestatic
+
+

return a json formatted list of a given vector of params

Parameters
+ + +
vecthe vector to format
+
+
+
Returns
the given vector in a json format
+ +
+
+ +

◆ write() [11/11]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static future seastar::json::formatter::write (output_stream< char > & s,
unsigned long l 
)
+
+inlinestatic
+
+

return a json formatted unsigned long

Parameters
+ + +
lunsigned long to format
+
+
+
Returns
the given unsigned long in a json format
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1json_1_1json__base__element-members.html b/master/classseastar_1_1json_1_1json__base__element-members.html new file mode 100644 index 000000000..ba42cfb53 --- /dev/null +++ b/master/classseastar_1_1json_1_1json__base__element-members.html @@ -0,0 +1,94 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::json::json_base_element Member List
+
+
+ +

This is the complete list of members for seastar::json::json_base_element, including all inherited members.

+ + + + + + + + + + + + + +
_mandatory (defined in seastar::json::json_base_element)seastar::json::json_base_element
_name (defined in seastar::json::json_base_element)seastar::json::json_base_element
_set (defined in seastar::json::json_base_element)seastar::json::json_base_element
is_verify() noexceptseastar::json::json_base_elementinlinevirtual
json_base_element() noexceptseastar::json::json_base_elementinlineprotected
json_base_element(const json_base_element &o) noexcept=default (defined in seastar::json::json_base_element)seastar::json::json_base_elementprotected
json_base_element(json_base_element &&)=delete (defined in seastar::json::json_base_element)seastar::json::json_base_elementprotected
operator=(const json_base_element &o) noexcept (defined in seastar::json::json_base_element)seastar::json::json_base_elementinlineprotected
operator=(json_base_element &&)=delete (defined in seastar::json::json_base_element)seastar::json::json_base_elementprotected
to_string()=0seastar::json::json_base_elementpure virtual
write(output_stream< char > &s) const =0 (defined in seastar::json::json_base_element)seastar::json::json_base_elementpure virtual
~json_base_element()=default (defined in seastar::json::json_base_element)seastar::json::json_base_elementvirtual
+ + + + diff --git a/master/classseastar_1_1json_1_1json__base__element.html b/master/classseastar_1_1json_1_1json__base__element.html new file mode 100644 index 000000000..6e79344f6 --- /dev/null +++ b/master/classseastar_1_1json_1_1json__base__element.html @@ -0,0 +1,226 @@ + + + + + + + +Seastar: seastar::json::json_base_element Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::json::json_base_element Class Referenceabstract
+
+
+

Detailed Description

+

The base class for all json element. Every json element has a name An indication if it was set or not And is this element is mandatory. When a mandatory element is not set this is not a valid object

+
+

#include <seastar/json/json_elements.hh>

+
+Inheritance diagram for seastar::json::json_base_element:
+
+
+ + +seastar::json::json_element< std::string > +seastar::json::json_element< int > +seastar::json::json_list< seastar::httpd::api_doc > +seastar::json::json_element< T > +seastar::json::json_list< T > + +
+ + + + + + + + +

+Public Member Functions

virtual bool is_verify () noexcept
 
virtual std::string to_string ()=0
 
+virtual future write (output_stream< char > &s) const =0
 
+ + + + + + + +

+Public Attributes

+std::string _name
 
+bool _mandatory
 
+bool _set
 
+ + + + + + + + + + + +

+Protected Member Functions

 json_base_element () noexcept
 
json_base_element (const json_base_element &o) noexcept=default
 
+json_base_elementoperator= (const json_base_element &o) noexcept
 
json_base_element (json_base_element &&)=delete
 
+json_base_elementoperator= (json_base_element &&)=delete
 
+

Constructor & Destructor Documentation

+ +

◆ json_base_element()

+ +
+
+ + + + + +
+ + + + + + + +
seastar::json::json_base_element::json_base_element ()
+
+inlineprotectednoexcept
+
+

The constructors

+ +
+
+

Member Function Documentation

+ +

◆ is_verify()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool seastar::json::json_base_element::is_verify ()
+
+inlinevirtualnoexcept
+
+

Check if it's a mandatory parameter and if it's set.

Returns
true if this is not a mandatory parameter or if it is and it's value is set
+ +
+
+ +

◆ to_string()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string seastar::json::json_base_element::to_string ()
+
+pure virtual
+
+

returns the internal value in a json format Each inherit class must implement this method

Returns
formated internal value
+ +

Implemented in seastar::json::json_element< T >, seastar::json::json_element< std::string >, seastar::json::json_element< int >, seastar::json::json_list< T >, and seastar::json::json_list< seastar::httpd::api_doc >.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1json_1_1json__base__element.png b/master/classseastar_1_1json_1_1json__base__element.png new file mode 100644 index 0000000000000000000000000000000000000000..1ab79abbf1fad677add58a9cf19abad3056ef39d GIT binary patch literal 2339 zcmdT`do)|=7B?-uY6ka~R_m438A_YBs`XaPB_2`F3avMddeyt4>RHxIjaPCfsuZE6 zA{4nzxX9yY+5d^s>bk^K|?jLvVU-ztazO&Eo`<=ai-`;!ebuyhC ztfi$CrNqRfI|Kbi~nkMay5p~rwEzu#rAN`=J?$O>F7b6GvPs1 z;K_Gl*N8DgTm>ol#%GfeByiJY!~-dLO{eFrH-f)ylR9}+LP|bf#a`|9i#yN1PdkFI z$P@>|z5xioA#{HB`!Or+h=f!#^4y79Cv7KyFuMLL#3Ok$>e2e*E&A$Au6`}SS^B^Q zMRhppyWCKbXW@C$4`YIBO?mB1I-c8}J%!|Y3VF(1%5kc+K)AAl%>C{7u+4P3ZohA1 z(y_}!xW@-Uim$F*lTpa%oJTzhAce6rR9=OT7>>)iQ46P{^~(5RK1$Ll<`s&7`Zc47 zEEe2Gm6#aaVmH(&m(B2JlHfVzJL7fYe^8FU=I;Ko`dyZa%ArC(3OL8O6y+6>uYZ(Cq42tV&_dL}SG$TNvxOX4ZN)2QgTw41C zt!qn>f2E)u?n{xuV^DEJNO2%*nrlZ=On!cRG|WKuP{-)&P8=h7w@u%x<>=?~-!qG` z(O1)LF16DA&t(~eq@TQS>>xEoHvcs51WGC4V=Z^w4R=~pk>#<~xF*8*YFw3QL+Xi% zr~|%Fs~b3wEg5-~EzJM^r=HI1Ev3-xo8&rn+*{QS@8l`I^#NjMSw`#@HF4kAD$Sa>#I`%__Mu4g4Vm+i|4`&4f zcFuXIE&AfK0!Q={HTRp=(5qM^I>1gvy}Qr~fv$befugk$Pt@QnO(^w)Gdd>(rqO-j zQkmKrmp@4@u1F|QtE%;BuHmwZt!7I%k}*EIQRs`?7|zF^NV7}1aVeh{2f@P8#Kvis zrI%*eUA}%KnT6Hp7|^o~;jb5{k+?5$DL%(dJ8aSJiD7`A7uLY9pdLA^% zCuQ0FQhw(a*Dz_~jk0EU^Q4kRu~1xJVYpbcEy$YJuR6jblK%i63C#q?$BZc z4O0@Enj{&-HX1X=&@UT?WZcUxeu}q2>wZ38W;Pwpi2f0!W;j1F=yI#2(ZB9OeM!e< z!viRC1zm2 z2u>aMJ_u~lztFI+?X43Z1dC*h*Um0vdE~N~bx9A~ZC$-gGFM{4nDFGFmEz^Ei}}{P zh8rPo*T(NG4La}boJjg1UyT@dw#JM)M&3(Sl^qRa_NHz=H1`?Y)};!lh%H3SezgDF z6}*1^%e6{ei{Dy3=i@IV-lOek%Q}MuMvsDit!pRhoOTXNE`JolYg-@#;vLtTOfEp{ z=UzCIb5A5a5`{Ql!_`$wyXKP5#>3mP<)q4u%33UmM**jsZ zDg2IrHs4F^EypCwW>m7#aAQ#DT~>yM*2ku*r2U^r4_hZ-_Dp2yFPyxKhWM;k8n0{1 z^AkMc`l;?^jJ^enhF$4`_n4-=*@^@?^({#-G;q}%mWm`8tG3u~ks)UEf`mZFk_3&V!~E#C6lz^=DOZ>jx4Y)L+TaTcrgw$FQ>h=?Rkv#TpkT044fFHv?J_CTHMBV68x z%pQwT^ZmY!(X+od5nlKb9gv@4#nZE0`^pX7_o))-;N>&4&x0Ljv(#A$m@>StymHiB*}y+s0SU+ql}ZlB~%-c#>p6DQ>I0$Lj?cB&bG&sz|l7Jjz~ zw?8Pa2O3t=tTa0{tfjpw{a;}Kj2-|0 literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1json_1_1json__element-members.html b/master/classseastar_1_1json_1_1json__element-members.html new file mode 100644 index 000000000..6630458e7 --- /dev/null +++ b/master/classseastar_1_1json_1_1json__element-members.html @@ -0,0 +1,97 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::json::json_element< T > Member List
+
+
+ +

This is the complete list of members for seastar::json::json_element< T >, including all inherited members.

+ + + + + + + + + + + + + + + + +
_mandatory (defined in seastar::json::json_base_element)seastar::json::json_base_element
_name (defined in seastar::json::json_base_element)seastar::json::json_base_element
_set (defined in seastar::json::json_base_element)seastar::json::json_base_element
is_verify() noexceptseastar::json::json_base_elementinlinevirtual
json_base_element() noexceptseastar::json::json_base_elementinlineprotected
json_base_element(const json_base_element &o) noexcept=default (defined in seastar::json::json_base_element)seastar::json::json_base_elementprotected
json_base_element(json_base_element &&)=delete (defined in seastar::json::json_base_element)seastar::json::json_base_elementprotected
operator()() const noexceptseastar::json::json_element< T >inline
operator=(const T &new_value)seastar::json::json_element< T >inline
operator=(const C &new_value)seastar::json::json_element< T >inline
operator=(const json_base_element &o) noexcept (defined in seastar::json::json_base_element)seastar::json::json_base_elementinlineprotected
operator=(json_base_element &&)=delete (defined in seastar::json::json_base_element)seastar::json::json_base_elementprotected
to_string() overrideseastar::json::json_element< T >inlinevirtual
write(output_stream< char > &s) const override (defined in seastar::json::json_element< T >)seastar::json::json_element< T >inlinevirtual
~json_base_element()=default (defined in seastar::json::json_base_element)seastar::json::json_base_elementvirtual
+ + + + diff --git a/master/classseastar_1_1json_1_1json__element.html b/master/classseastar_1_1json_1_1json__element.html new file mode 100644 index 000000000..b6d465118 --- /dev/null +++ b/master/classseastar_1_1json_1_1json__element.html @@ -0,0 +1,316 @@ + + + + + + + +Seastar: seastar::json::json_element< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::json::json_element< T > Class Template Reference
+
+
+

Detailed Description

+
template<class T>
+class seastar::json::json_element< T >

Basic json element instantiate the json_element template. it adds a value to the base definition and the to_string implementation using the formatter

+
+

#include <seastar/json/json_elements.hh>

+
+Inheritance diagram for seastar::json::json_element< T >:
+
+
+ + +seastar::json::json_base_element + +
+ + + + + + + + + + + + + + + +

+Public Member Functions

json_elementoperator= (const T &new_value)
 
template<class C >
json_elementoperator= (const C &new_value)
 
const T & operator() () const noexcept
 
virtual std::string to_string () override
 
virtual future write (output_stream< char > &s) const override
 
virtual bool is_verify () noexcept
 
+ + + + + + + +

+Public Attributes

+std::string _name
 
+bool _mandatory
 
+bool _set
 
+

Member Function Documentation

+ +

◆ is_verify()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool seastar::json::json_base_element::is_verify ()
+
+inlinevirtualnoexceptinherited
+
+

Check if it's a mandatory parameter and if it's set.

Returns
true if this is not a mandatory parameter or if it is and it's value is set
+ +
+
+ +

◆ operator()()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
const T & seastar::json::json_element< T >::operator() () const
+
+inlinenoexcept
+
+

The brackets operator

Returns
the value
+ +
+
+ +

◆ operator=() [1/2]

+ +
+
+
+template<class T >
+
+template<class C >
+ + + + + +
+ + + + + + + + +
json_element & seastar::json::json_element< T >::operator= (const C & new_value)
+
+inline
+
+

the assignment operator also set the set value to true.

Parameters
+ + +
new_valuethe new value
+
+
+
Returns
the value itself
+ +
+
+ +

◆ operator=() [2/2]

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
json_element & seastar::json::json_element< T >::operator= (const T & new_value)
+
+inline
+
+

the assignment operator also set the set value to true.

Parameters
+ + +
new_valuethe new value
+
+
+
Returns
the value itself
+ +
+
+ +

◆ to_string()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
virtual std::string seastar::json::json_element< T >::to_string ()
+
+inlineoverridevirtual
+
+

The to_string return the value formated as a json value

Returns
the value formatted for json
+ +

Implements seastar::json::json_base_element.

+ +
+
+ +

◆ write()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
virtual future seastar::json::json_element< T >::write (output_stream< char > & s) const
+
+inlineoverridevirtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1json_1_1json__element.png b/master/classseastar_1_1json_1_1json__element.png new file mode 100644 index 0000000000000000000000000000000000000000..75b3a02e8e2b32f6223b62a1e20f869aecc31f12 GIT binary patch literal 765 zcmeAS@N?(olHy`uVBq!ia0vp^hk-bNgBeIp4mKKFTC>q|C6(G zIc7xX-PQGNJ<`#@SZrXi-siH(-58%qCE2`ep0Cy)RPg*;+HlY_XkFHG#m9YL&p6mW z&}vqRy<%^)BfbB$*8iQ`4)5B(Rn{tc(P`i03`zNgg5Ngz7<2!Sz0G>vvN2Ke$?{`b zFXPg@^mNak^1PbV^K65b-J6ai`}4ln_dMk(ENk()wQ_cfThd(QF1vqI+0=vI+?L;rJvA@5(1^V!HNEKar4#D$NB?P+ zzdTTVqT)7B?&GE33!drS-1FqVp9ka5Ns+H6&e1eYR@Gl?SN1t5=33S1Pm@&UUf}+3 z;rT0g@5F~ct_snFPG#q{#h@_ zV18ZPz(($S`wylz$%o$r?jJDtBy>PM!+_z-^#q0&>kl$qh;L?Gu%C_Dp`Mqm;hz)_ z!(USghF{sJ3KGK4S(X<+WXM|!)6i!S;-2GYU81+U`4VF`ACpJvOvVSMb5kU5@K>R3g0FwiSNe z7&G0ZZsFdNl?$YA- z3(t7}D{WPoXni(_-y%5cSXo@xmdKI;Vst0I--`@c;k- literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1json_1_1json__list-members.html b/master/classseastar_1_1json_1_1json__list-members.html new file mode 100644 index 000000000..e3d23f08d --- /dev/null +++ b/master/classseastar_1_1json_1_1json__list-members.html @@ -0,0 +1,97 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::json::json_list< T > Member List
+
+
+ +

This is the complete list of members for seastar::json::json_list< T >, including all inherited members.

+ + + + + + + + + + + + + + + + +
_elements (defined in seastar::json::json_list< T >)seastar::json::json_list< T >
_mandatory (defined in seastar::json::json_base_element)seastar::json::json_base_element
_name (defined in seastar::json::json_base_element)seastar::json::json_base_element
_set (defined in seastar::json::json_base_element)seastar::json::json_base_element
is_verify() noexceptseastar::json::json_base_elementinlinevirtual
json_base_element() noexceptseastar::json::json_base_elementinlineprotected
json_base_element(const json_base_element &o) noexcept=default (defined in seastar::json::json_base_element)seastar::json::json_base_elementprotected
json_base_element(json_base_element &&)=delete (defined in seastar::json::json_base_element)seastar::json::json_base_elementprotected
operator=(const C &list)seastar::json::json_list< T >inline
operator=(const json_base_element &o) noexcept (defined in seastar::json::json_base_element)seastar::json::json_base_elementinlineprotected
operator=(json_base_element &&)=delete (defined in seastar::json::json_base_element)seastar::json::json_base_elementprotected
push(const T &element)seastar::json::json_list< T >inline
to_string() overrideseastar::json::json_list< T >inlinevirtual
write(output_stream< char > &s) const override (defined in seastar::json::json_list< T >)seastar::json::json_list< T >inlinevirtual
~json_base_element()=default (defined in seastar::json::json_base_element)seastar::json::json_base_elementvirtual
+ + + + diff --git a/master/classseastar_1_1json_1_1json__list.html b/master/classseastar_1_1json_1_1json__list.html new file mode 100644 index 000000000..60add031a --- /dev/null +++ b/master/classseastar_1_1json_1_1json__list.html @@ -0,0 +1,283 @@ + + + + + + + +Seastar: seastar::json::json_list< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::json::json_list< T > Class Template Reference
+
+
+

Detailed Description

+
template<class T>
+class seastar::json::json_list< T >

json_list is based on std vector implementation.

+

When values are added with push it is set the "set" flag to true hence will be included in the parsed object

+
+

#include <seastar/json/json_elements.hh>

+
+Inheritance diagram for seastar::json::json_list< T >:
+
+
+ + +seastar::json::json_base_element + +
+ + + + + + + + + + + + + +

+Public Member Functions

void push (const T &element)
 
virtual std::string to_string () override
 
template<class C >
json_listoperator= (const C &list)
 
virtual future write (output_stream< char > &s) const override
 
virtual bool is_verify () noexcept
 
+ + + + + + + + + +

+Public Attributes

+std::vector< T > _elements
 
+std::string _name
 
+bool _mandatory
 
+bool _set
 
+

Member Function Documentation

+ +

◆ is_verify()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool seastar::json::json_base_element::is_verify ()
+
+inlinevirtualnoexceptinherited
+
+

Check if it's a mandatory parameter and if it's set.

Returns
true if this is not a mandatory parameter or if it is and it's value is set
+ +
+
+ +

◆ operator=()

+ +
+
+
+template<class T >
+
+template<class C >
+ + + + + +
+ + + + + + + + +
json_list & seastar::json::json_list< T >::operator= (const C & list)
+
+inline
+
+

Assignment can be done from any object that support const range iteration and that it's elements can be assigned to the list elements

+ +
+
+ +

◆ push()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
void seastar::json::json_list< T >::push (const T & element)
+
+inline
+
+

Add an element to the list.

Parameters
+ + +
elementa new element that will be added to the list
+
+
+ +
+
+ +

◆ to_string()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
virtual std::string seastar::json::json_list< T >::to_string ()
+
+inlineoverridevirtual
+
+

returns the internal value in a json format Each inherit class must implement this method

Returns
formated internal value
+ +

Implements seastar::json::json_base_element.

+ +
+
+ +

◆ write()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
virtual future seastar::json::json_list< T >::write (output_stream< char > & s) const
+
+inlineoverridevirtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1json_1_1json__list.png b/master/classseastar_1_1json_1_1json__list.png new file mode 100644 index 0000000000000000000000000000000000000000..8ee0aaf8032ae6a5e8178f631fa7302f6f78daa7 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^hk-bNgBeIp4mKP;>RFcih=DF#5!UUD-w+RK4rmViT^Yo8HRVfdw z9_Tcy%)P=cd1v$S)T_UCZvDHfzSO2<8_V?A#rdvwHHY7)&J@$#@XjKxVD@9lX^yY2 z1gPFU?Q?SJ(@4veQA)`r5u)-RJCf|r`(EGklqa#Q!Ryw_*(q*GZ>472Rq>oPUU%eD zjqSc~wSl{Nrn5QUmWa)IlAQY^;Fh0NP3l`M=R4AK(l$=9UH&MgOycx8l}ndq`|s=e z8=91Py!u4NZJyl6E58@0OnbCv%RbrpOrKOYUs2w<;!4ldJzIWO%$$B`)5h&O`kt2< z_kQf3yu|yfyyU$1hL(Aro|U#vlep%l{8*N4QOiH+i>?&Uq?Gjs6+FMql3bQK>z!`H z`B#hu#eW$NKQ65AkWZK)n8*K-n@3rnv8I`gxnVEy_<*FF~LIbJUQ zvU+*8#f3ELqKR0bd-t`@KowvLR z7*|Cd51CjP1{RJoa|M4NkIcxr-xjw3Tg~cwuhD?qen2f2K`- zFXn1LZJYU1?f1v)(;i+*$dG;Y_W5j?@+W&=W9c^*V%~frQV-~4uArYxx&AUr~3aPhT7P}301t| ocbOYz!aSD7_I%Fn?f)46P1Wc*F+*lEFj+Eqy85}Sb4q9e07o%gdH?_b literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1json_1_1jsonable-members.html b/master/classseastar_1_1json_1_1jsonable-members.html new file mode 100644 index 000000000..e3089feab --- /dev/null +++ b/master/classseastar_1_1json_1_1jsonable-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::json::jsonable Member List
+
+
+ +

This is the complete list of members for seastar::json::jsonable, including all inherited members.

+ + + + + + + +
jsonable()=default (defined in seastar::json::jsonable)seastar::json::jsonable
jsonable(const jsonable &)=default (defined in seastar::json::jsonable)seastar::json::jsonable
operator=(const jsonable &)=default (defined in seastar::json::jsonable)seastar::json::jsonable
to_json() const =0seastar::json::jsonablepure virtual
write(output_stream< char > &s) constseastar::json::jsonableinlinevirtual
~jsonable()=default (defined in seastar::json::jsonable)seastar::json::jsonablevirtual
+ + + + diff --git a/master/classseastar_1_1json_1_1jsonable.html b/master/classseastar_1_1json_1_1jsonable.html new file mode 100644 index 000000000..01cb69d4f --- /dev/null +++ b/master/classseastar_1_1json_1_1jsonable.html @@ -0,0 +1,173 @@ + + + + + + + +Seastar: seastar::json::jsonable Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::json::jsonable Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::json::jsonable:
+
+
+ + +seastar::json::json_base +seastar::json::json_void +seastar::httpd::api_doc +seastar::httpd::api_docs +seastar::httpd::json_exception + +
+ + + + + + + + + + + +

+Public Member Functions

jsonable (const jsonable &)=default
 
+jsonableoperator= (const jsonable &)=default
 
virtual std::string to_json () const =0
 
virtual future write (output_stream< char > &s) const
 write an object to the output stream More...
 
+

Member Function Documentation

+ +

◆ to_json()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string seastar::json::jsonable::to_json () const
+
+pure virtual
+
+

create a formatted string of the object.

Returns
the object formated.
+ +

Implemented in seastar::json::json_base, and seastar::json::json_void.

+ +
+
+ +

◆ write()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual future seastar::json::jsonable::write (output_stream< char > & s) const
+
+inlinevirtual
+
+ +

write an object to the output stream

+

The defult implementation uses the to_json Object implementation override it.

+ +

Reimplemented in seastar::json::json_base, and seastar::json::json_void.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1json_1_1jsonable.png b/master/classseastar_1_1json_1_1jsonable.png new file mode 100644 index 0000000000000000000000000000000000000000..e9bb50f4eaab0a91e4d8166792a184824e27897f GIT binary patch literal 1809 zcmb_dX;4#F6pmP|WTYr=Xa!Vm1T{v)B`hhRAoW6l44@Q2B8cFEPzZ({n^IO6+`*obBZ+hKJ zx8B*j^>sw%4L}!>JPfCCI6ZaEFNc$-gw-|2nhI|zl?x~%F+*1et>R0mG}@|(3}ZcP z9Dbvp#wsX@+8#<%S?JfOM5!D}k>Z)tofS-)iYLy#Ou#9N|i-^O14v`p!Z_3_?2;vnc;Jp~8nbViy z^d>^<1lvT1+>je~`|LbhTJGI-hB|es3PIA|@4dIy^CfP^{J|aWqrbj9RzfZ4A9tw3 z=(`#YwMZ&O{rybPb_w|mdqi>fm#Gp%wAesPWgy}h`LPl>y(MiS@AP_gs=)+naWG4p zR3T>J$d0L681-E-p02~x>bBH%(T6H(bBh68C;tK5?ur2E zE>xxU5GkHp2)G1T=2!b`i84b3^5o{w#5fV*ZaH^CsE{LoyE(oZEwIOa46Nt-yIEQslfOUWxwP)$V*z!3V60*4DZjj3#}`?+_HTZKyhank`z#F6MlX0b<&CG zl$wo1L*ZyaL>G%Lfk;3_wO}GM8Nc6jBe%~ipY-MhGkHc{Whj)@)>(JAF+!S_!G}*~ zdyw$b;RlV~{xol7xPCGqawG9_u<0p&$Mn5u<$Ypde!KD%=eay-)@5C+pkC44%4?2e zHyss%>R@WMbkR)wt-K{{{stnfym;}=xKkJ+Xsn860DtMyM2LV*OgjULxPyYeby&kK z57xxMHzz<2tJq&=%3%O#YNCw>ABl{ENX%7q4{6&#f4~eeO7A&4?cn^ylb%Qe-6dMf z>fY-d&(z`|ejEf__zN zIRGD$(LhNt*V=5wW|RE*soqy-Q<0EXir3pmcgN1CV{=7|-H`z5RwWMyt!zXt2w+IW zXwvMitD_T#IT;x(fUbI{i#pNwb?y`^|Kf zbW8rF^I`lgtu~YilCqD!j#v((3!6cEu1O&%~FgS+T{{!BVP8{z3aF$hbc(}@dr9%rEiD!ggp?Gnw~!_ z)lK$m*_QMs*=l!P;1!m`4V6jE zF`AiVf$sP^z`@R>A>o-*rc3}wZ_`~{}%ZrcC= literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1kernel__completion-members.html b/master/classseastar_1_1kernel__completion-members.html new file mode 100644 index 000000000..5510f209c --- /dev/null +++ b/master/classseastar_1_1kernel__completion-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::kernel_completion Member List
+
+
+ +

This is the complete list of members for seastar::kernel_completion, including all inherited members.

+ + + + + + +
complete_with(ssize_t res)=0 (defined in seastar::kernel_completion)seastar::kernel_completionpure virtual
kernel_completion()=default (defined in seastar::kernel_completion)seastar::kernel_completionprotected
kernel_completion(kernel_completion &&)=default (defined in seastar::kernel_completion)seastar::kernel_completionprotected
operator=(kernel_completion &&)=default (defined in seastar::kernel_completion)seastar::kernel_completionprotected
~kernel_completion()=default (defined in seastar::kernel_completion)seastar::kernel_completionprotected
+ + + + diff --git a/master/classseastar_1_1kernel__completion.html b/master/classseastar_1_1kernel__completion.html new file mode 100644 index 000000000..4050fa531 --- /dev/null +++ b/master/classseastar_1_1kernel__completion.html @@ -0,0 +1,111 @@ + + + + + + + +Seastar: seastar::kernel_completion Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::kernel_completion Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::kernel_completion:
+
+
+ + +seastar::io_completion + +
+ + + + +

+Public Member Functions

+virtual void complete_with (ssize_t res)=0
 
+ + + + + +

+Protected Member Functions

kernel_completion (kernel_completion &&)=default
 
+kernel_completionoperator= (kernel_completion &&)=default
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1kernel__completion.png b/master/classseastar_1_1kernel__completion.png new file mode 100644 index 0000000000000000000000000000000000000000..2647554751d40e6d2e7a009cc4c2401bc43560b3 GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^3xPO*gBeJ=IX<-jQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;SFTV2s|C6&h zMR*i5jnA!{Ahxw!L2ny>LV6shV#`Wbh8Ypv0tc46ay+;!-g20A{+@kz%VW2n^)vEy z;V1}Dy%T5i`+nJp%ioJ*=Q>IK{${vNEnc{&e}ek^QdQ^PAAD)WYRBJ%v>%((@p=1= zQ+~fVzUK7Qp1-T}e)7!tYNyGUmKk#U+^Z=Q$S_gKsgo-ZToGTbay;7af7+#poM$`L zO}=gVU6N_e(S4lVY4_J%3wA$USLYjA)?WUZ$N$tD@zNV_)fnd5T}`yzdH?RF+&wbO zOulTWVEg)G;q>g)rEMTFJV7@xvZQLTD zCU#(P6{FAEmz?qIZwf9~zr&#JK4*TxSEGh-m^vkv51E2YKeli%)hw91Yt{R?pcU5>MUCGXvvSj0{Pr2W2e&=-Z+_kVR zVA48MHJ;u1FWPKs?WeQYC!2}YKi;W-X0pi)hpXoQwLE*UQ;=%Y32FjMOJt2oxFFB!++i1N7J?+)=%CzGo3%N>!HGy+%VhS(Pi@< zdYXC$DZ9(Y3HRBofBoT~?(M!aAHALBSHD^{{q**?PwzOC-dr0!ZOQVlyQjZg+)~Zl zb3bdcfY&8p5KUR~JE~>Ulgmm|ROXubP0l+XkK D;JZ21 literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1lambda__task-members.html b/master/classseastar_1_1lambda__task-members.html new file mode 100644 index 000000000..7975b9373 --- /dev/null +++ b/master/classseastar_1_1lambda__task-members.html @@ -0,0 +1,94 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::lambda_task< Func > Member List
+
+
+ +

This is the complete list of members for seastar::lambda_task< Func >, including all inherited members.

+ + + + + + + + + + + + + +
_sg (defined in seastar::task)seastar::taskprotected
get_backtrace() const (defined in seastar::task)seastar::taskinline
get_future() noexcept (defined in seastar::lambda_task< Func >)seastar::lambda_task< Func >inline
group() const (defined in seastar::task)seastar::taskinline
lambda_task(scheduling_group sg, const Func &func) (defined in seastar::lambda_task< Func >)seastar::lambda_task< Func >inline
lambda_task(scheduling_group sg, Func &&func) (defined in seastar::lambda_task< Func >)seastar::lambda_task< Func >inline
make_backtrace() noexcept (defined in seastar::task)seastar::taskinline
run_and_dispose() noexcept override (defined in seastar::lambda_task< Func >)seastar::lambda_task< Func >inlinevirtual
set_scheduling_group(scheduling_group new_sg) noexcept (defined in seastar::task)seastar::taskinlineprotected
task(scheduling_group sg=current_scheduling_group()) noexcept (defined in seastar::task)seastar::taskinlineexplicit
waiting_task() noexcept overrideseastar::lambda_task< Func >inlinevirtual
~task()=default (defined in seastar::task)seastar::taskprotected
+ + + + diff --git a/master/classseastar_1_1lambda__task.html b/master/classseastar_1_1lambda__task.html new file mode 100644 index 000000000..c872b6a45 --- /dev/null +++ b/master/classseastar_1_1lambda__task.html @@ -0,0 +1,196 @@ + + + + + + + +Seastar: seastar::lambda_task< Func > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::lambda_task< Func > Class Template Referencefinal
+
+
+
+Inheritance diagram for seastar::lambda_task< Func >:
+
+
+ + +seastar::task + +
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

lambda_task (scheduling_group sg, const Func &func)
 
lambda_task (scheduling_group sg, Func &&func)
 
+futurator::type get_future () noexcept
 
virtual void run_and_dispose () noexcept override
 
virtual taskwaiting_task () noexcept override
 Returns the next task which is waiting for this task to complete execution, or nullptr. More...
 
+scheduling_group group () const
 
+shared_backtrace get_backtrace () const
 
+void make_backtrace () noexcept
 
+ + + +

+Protected Member Functions

+scheduling_group set_scheduling_group (scheduling_group new_sg) noexcept
 
+ + + +

+Protected Attributes

+scheduling_group _sg
 
+

Member Function Documentation

+ +

◆ run_and_dispose()

+ +
+
+
+template<typename Func >
+ + + + + +
+ + + + + + + +
virtual void seastar::lambda_task< Func >::run_and_dispose ()
+
+inlineoverridevirtualnoexcept
+
+ +

Implements seastar::task.

+ +
+
+ +

◆ waiting_task()

+ +
+
+
+template<typename Func >
+ + + + + +
+ + + + + + + +
virtual task * seastar::lambda_task< Func >::waiting_task ()
+
+inlineoverridevirtualnoexcept
+
+ +

Returns the next task which is waiting for this task to complete execution, or nullptr.

+ +

Implements seastar::task.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1lambda__task.png b/master/classseastar_1_1lambda__task.png new file mode 100644 index 0000000000000000000000000000000000000000..d28f5fecb43259aef6d269905d75393dbebcd4e3 GIT binary patch literal 639 zcmeAS@N?(olHy`uVBq!ia0vp^TY)%$gBeI>upC(hq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0_&i-4Ln;{G&V8NtT0wxV{d~~9{}cU_ zr1xZJJT^PK?ZuiSEX_N4HmKD{PD`E1C+0b;XUnuD5|^STB~^5nPF!OA{8XZ{=dJ_) z(_^o7p4PlApS|%51Z)l*zg^_1oh&ugfZvT$giZmz#de ziPM5b_FtyWKAfML{#NSmq^-SY4}TC*e7(KF zUV2ZFA#jPQ15YNefO8b{kqOrr4DoRryq8Wfk`-w<>5<(aaY;&{jr-bRwq~#3t9xz3 zzuf)4oAH5V{c))WTJ2xAU8vow3-s;JjJr~6OMg4RE!mSR{qoqFShj0#*9tS{WXavO zNISx0_Es&xCu(zP)7ypn3}fHC*p@%{+O4Q;`;FPJ*7n<_DMf#i%3FK4>+j0)ik(Uaz%ZfB!! zl(ql6v+Mrr?83h*zfOO2tG#Qp+1>d^OY7U;{Jrg3G_P{~miQY#`7%G>F#M%kaKB;p z%bT)H2E6&(?*02%SJQO|>d7r^9S=WV5Af2Q{E=T=U+uMi%f3`#YGLqn^>bP0l+XkK DOZzV} literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1layered__file__impl-members.html b/master/classseastar_1_1layered__file__impl-members.html new file mode 100644 index 000000000..69b00e313 --- /dev/null +++ b/master/classseastar_1_1layered__file__impl-members.html @@ -0,0 +1,113 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::layered_file_impl Member List
+
+
+ +

This is the complete list of members for seastar::layered_file_impl, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_disk_overwrite_dma_alignment (defined in seastar::file_impl)seastar::file_implprotected
_disk_read_dma_alignment (defined in seastar::file_impl)seastar::file_implprotected
_disk_write_dma_alignment (defined in seastar::file_impl)seastar::file_implprotected
_memory_dma_alignment (defined in seastar::file_impl)seastar::file_implprotected
_read_max_length (defined in seastar::file_impl)seastar::file_implprotected
_underlying_file (defined in seastar::layered_file_impl)seastar::layered_file_implprotected
_write_max_length (defined in seastar::file_impl)seastar::file_implprotected
allocate(uint64_t position, uint64_t length)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
close()=0 (defined in seastar::file_impl)seastar::file_implpure virtual
discard(uint64_t offset, uint64_t length)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
dma_read_bulk(uint64_t offset, size_t range_size, io_intent *)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
dup() (defined in seastar::file_impl)seastar::file_implvirtual
experimental_list_directory() (defined in seastar::file_impl)seastar::file_implvirtual
fcntl(int op, uintptr_t arg) noexcept (defined in seastar::file_impl)seastar::file_implvirtual
fcntl_short(int op, uintptr_t arg) noexcept (defined in seastar::file_impl)seastar::file_implvirtual
flush()=0 (defined in seastar::file_impl)seastar::file_implpure virtual
get_file_impl(file &f) (defined in seastar::file_impl)seastar::file_implprotectedstatic
ioctl(uint64_t cmd, void *argp) noexcept (defined in seastar::file_impl)seastar::file_implvirtual
ioctl_short(uint64_t cmd, void *argp) noexcept (defined in seastar::file_impl)seastar::file_implvirtual
layered_file_impl(file underlying_file) noexceptseastar::layered_file_implinlineexplicit
list_directory(std::function< future<>(directory_entry de)> next)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
read_dma(uint64_t pos, void *buffer, size_t len, io_intent *)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
read_dma(uint64_t pos, std::vector< iovec > iov, io_intent *)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
size()=0 (defined in seastar::file_impl)seastar::file_implpure virtual
stat()=0 (defined in seastar::file_impl)seastar::file_implpure virtual
truncate(uint64_t length)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
underlying_file() noexceptseastar::layered_file_implinline
underlying_file() const noexceptseastar::layered_file_implinline
write_dma(uint64_t pos, const void *buffer, size_t len, io_intent *)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
write_dma(uint64_t pos, std::vector< iovec > iov, io_intent *)=0 (defined in seastar::file_impl)seastar::file_implpure virtual
~file_impl() (defined in seastar::file_impl)seastar::file_implinlinevirtual
+ + + + diff --git a/master/classseastar_1_1layered__file__impl.html b/master/classseastar_1_1layered__file__impl.html new file mode 100644 index 000000000..f12476102 --- /dev/null +++ b/master/classseastar_1_1layered__file__impl.html @@ -0,0 +1,230 @@ + + + + + + + +Seastar: seastar::layered_file_impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+

Detailed Description

+

Base class for layered file implementations.

+

A layered file implementation implements file_impl virtual functions such as dma_read() by forwarding them to another, existing file called the underlying file. This base class simplifies construction of layered files by performing standard tasks such as setting up the file alignment. Actual implementation of the I/O methods is left for the derived class.

+
+

#include <seastar/core/layered_file.hh>

+
+Inheritance diagram for seastar::layered_file_impl:
+
+
+ + +seastar::file_impl + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 layered_file_impl (file underlying_file) noexcept
 
+fileunderlying_file () noexcept
 The underlying file which can be used to back I/O methods.
 
+const fileunderlying_file () const noexcept
 The underlying file which can be used to back I/O methods.
 
+virtual future< size_t > write_dma (uint64_t pos, const void *buffer, size_t len, io_intent *)=0
 
+virtual future< size_t > write_dma (uint64_t pos, std::vector< iovec > iov, io_intent *)=0
 
+virtual future< size_t > read_dma (uint64_t pos, void *buffer, size_t len, io_intent *)=0
 
+virtual future< size_t > read_dma (uint64_t pos, std::vector< iovec > iov, io_intent *)=0
 
+virtual future< temporary_buffer< uint8_t > > dma_read_bulk (uint64_t offset, size_t range_size, io_intent *)=0
 
+virtual future flush ()=0
 
+virtual future< struct stat > stat ()=0
 
+virtual future truncate (uint64_t length)=0
 
+virtual future discard (uint64_t offset, uint64_t length)=0
 
+virtual future< int > ioctl (uint64_t cmd, void *argp) noexcept
 
+virtual future< int > ioctl_short (uint64_t cmd, void *argp) noexcept
 
+virtual future< int > fcntl (int op, uintptr_t arg) noexcept
 
+virtual future< int > fcntl_short (int op, uintptr_t arg) noexcept
 
+virtual future allocate (uint64_t position, uint64_t length)=0
 
+virtual future< uint64_t > size ()=0
 
+virtual future close ()=0
 
+virtual std::unique_ptr< file_handle_impldup ()
 
+virtual subscription< directory_entrylist_directory (std::function< future<>(directory_entry de)> next)=0
 
+virtual coroutine::experimental::generator< directory_entryexperimental_list_directory ()
 
+ + + +

+Static Protected Member Functions

+static file_implget_file_impl (file &f)
 
+ + + + + + + + + + + + + + + +

+Protected Attributes

+file _underlying_file
 
+unsigned _memory_dma_alignment = 4096
 
+unsigned _disk_read_dma_alignment = 4096
 
+unsigned _disk_write_dma_alignment = 4096
 
+unsigned _disk_overwrite_dma_alignment = 4096
 
+unsigned _read_max_length = 1u << 30
 
+unsigned _write_max_length = 1u << 30
 
+

Constructor & Destructor Documentation

+ +

◆ layered_file_impl()

+ +
+
+ + + + + +
+ + + + + + + + +
seastar::layered_file_impl::layered_file_impl (file underlying_file)
+
+inlineexplicitnoexcept
+
+

Constructs a layered file. This sets up the underlying_file() method and initializes alignment constants to be the same as the underlying file.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1layered__file__impl.png b/master/classseastar_1_1layered__file__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..61159ba07bd517c30f12433a1c15cb5cd2c5af5b GIT binary patch literal 653 zcmeAS@N?(olHy`uVBq!ia0vp^vw=8(gBeI#PWXNjNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~$#}XrhEy=Vo%^tFivo`;|Mir6|0mjq zvvxn?xtnUP5e);;~+nR@W z=Kb%^Y5#b6SM!Z)E;;|d7Q{UJeQ1m1_tO4!)+H(>dvCCNR$WUs+dNHH>+`v)?*^yy zf1hBrmsNS`8Ji<{;Lx?Ft0m-aN=Z*$qW<+-$y$HO?z4Bc-{?!pdT-ulwczgZr{*jCRWmnK#nsgx+*aD+`@kh>06It`D-T(hczk*&c*% zVEiGP!%&Bt`&EA9(kYjgC^7o1Okndy8&v@ + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::lazy_eval< Func > Member List
+
+
+ +

This is the complete list of members for seastar::lazy_eval< Func >, including all inherited members.

+ + + + +
operator()()seastar::lazy_eval< Func >inline
operator()() constseastar::lazy_eval< Func >inline
value_of (defined in seastar::lazy_eval< Func >)seastar::lazy_eval< Func >friend
+ + + + diff --git a/master/classseastar_1_1lazy__eval.html b/master/classseastar_1_1lazy__eval.html new file mode 100644 index 000000000..d657c181f --- /dev/null +++ b/master/classseastar_1_1lazy__eval.html @@ -0,0 +1,164 @@ + + + + + + + +Seastar: seastar::lazy_eval< Func > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::lazy_eval< Func > Class Template Reference
+
+
+

Detailed Description

+
template<typename Func>
+class seastar::lazy_eval< Func >

This class is a wrapper for a lazy evaluation of a value.

+

The value is evaluated by a functor that gets no parameters, which is provided to a lazy_value constructor.

+

The instance may be created only using seastar::value_of helper function.

+

The evaluation is triggered by operator().

+
+

#include <seastar/util/lazy.hh>

+ + + + + + + + +

+Public Member Functions

auto operator() ()
 Evaluate a value. More...
 
auto operator() () const
 Evaluate a value (const version). More...
 
+

Member Function Documentation

+ +

◆ operator()() [1/2]

+ +
+
+
+template<typename Func >
+ + + + + +
+ + + + + + + +
auto seastar::lazy_eval< Func >::operator() ()
+
+inline
+
+ +

Evaluate a value.

+
Returns
the evaluated value
+ +
+
+ +

◆ operator()() [2/2]

+ +
+
+
+template<typename Func >
+ + + + + +
+ + + + + + + +
auto seastar::lazy_eval< Func >::operator() () const
+
+inline
+
+ +

Evaluate a value (const version).

+
Returns
the evaluated value
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1lowres__clock-members.html b/master/classseastar_1_1lowres__clock-members.html new file mode 100644 index 000000000..de554a61b --- /dev/null +++ b/master/classseastar_1_1lowres__clock-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::lowres_clock Member List
+
+
+ +

This is the complete list of members for seastar::lowres_clock, including all inherited members.

+ + + + + + + + +
duration typedef (defined in seastar::lowres_clock)seastar::lowres_clock
is_steady (defined in seastar::lowres_clock)seastar::lowres_clockstatic
now() noexceptseastar::lowres_clockinlinestatic
period typedef (defined in seastar::lowres_clock)seastar::lowres_clock
rep typedef (defined in seastar::lowres_clock)seastar::lowres_clock
time_point typedef (defined in seastar::lowres_clock)seastar::lowres_clock
update() noexcept (defined in seastar::lowres_clock)seastar::lowres_clockstatic
+ + + + diff --git a/master/classseastar_1_1lowres__clock.html b/master/classseastar_1_1lowres__clock.html new file mode 100644 index 000000000..ef22b85e2 --- /dev/null +++ b/master/classseastar_1_1lowres__clock.html @@ -0,0 +1,151 @@ + + + + + + + +Seastar: seastar::lowres_clock Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::lowres_clock Class Referencefinal
+
+
+

Detailed Description

+

Low-resolution and efficient steady clock.

+

This is a monotonic clock with a granularity of ~task_quota. Time points from this clock do not correspond to system time.

+

The primary benefit of this clock is that invoking now() is inexpensive compared to std::chrono::steady_clock::now().

+
See also
lowres_system_clock for a low-resolution clock which produces time points corresponding to system time.
+
+

#include <seastar/core/lowres_clock.hh>

+ + + + + + + + + + +

+Public Types

+using rep = std::chrono::steady_clock::rep
 
+using period = std::chrono::steady_clock::period
 
+using duration = std::chrono::steady_clock::duration
 
+using time_point = std::chrono::time_point< lowres_clock, duration >
 
+ + + + + +

+Static Public Member Functions

static time_point now () noexcept
 
+static void update () noexcept
 
+ + + +

+Static Public Attributes

+static constexpr bool is_steady = true
 
+

Member Function Documentation

+ +

◆ now()

+ +
+
+ + + + + +
+ + + + + + + +
static time_point seastar::lowres_clock::now ()
+
+inlinestaticnoexcept
+
+
Note
Outside of a Seastar application, the result is undefined.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1lowres__system__clock-members.html b/master/classseastar_1_1lowres__system__clock-members.html new file mode 100644 index 000000000..0754a6d35 --- /dev/null +++ b/master/classseastar_1_1lowres__system__clock-members.html @@ -0,0 +1,90 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::lowres_system_clock Member List
+
+
+ +

This is the complete list of members for seastar::lowres_system_clock, including all inherited members.

+ + + + + + + + + +
duration typedef (defined in seastar::lowres_system_clock)seastar::lowres_system_clock
from_time_t(std::time_t t) noexcept (defined in seastar::lowres_system_clock)seastar::lowres_system_clockinlinestatic
is_steady (defined in seastar::lowres_system_clock)seastar::lowres_system_clockstatic
now() noexceptseastar::lowres_system_clockinlinestatic
period typedef (defined in seastar::lowres_system_clock)seastar::lowres_system_clock
rep typedef (defined in seastar::lowres_system_clock)seastar::lowres_system_clock
time_point typedef (defined in seastar::lowres_system_clock)seastar::lowres_system_clock
to_time_t(time_point t) noexcept (defined in seastar::lowres_system_clock)seastar::lowres_system_clockinlinestatic
+ + + + diff --git a/master/classseastar_1_1lowres__system__clock.html b/master/classseastar_1_1lowres__system__clock.html new file mode 100644 index 000000000..8cb080c19 --- /dev/null +++ b/master/classseastar_1_1lowres__system__clock.html @@ -0,0 +1,153 @@ + + + + + + + +Seastar: seastar::lowres_system_clock Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::lowres_system_clock Class Referencefinal
+
+
+

Detailed Description

+

Low-resolution and efficient system clock.

+

This clock has the same granularity as lowres_clock, but it is not required to be monotonic and its time points correspond to system time.

+

The primary benefit of this clock is that invoking now() is inexpensive compared to std::chrono::system_clock::now().

+
+

#include <seastar/core/lowres_clock.hh>

+ + + + + + + + + + +

+Public Types

+using rep = std::chrono::system_clock::rep
 
+using period = std::chrono::system_clock::period
 
+using duration = std::chrono::system_clock::duration
 
+using time_point = std::chrono::time_point< lowres_system_clock, duration >
 
+ + + + + + + +

+Static Public Member Functions

static time_point now () noexcept
 
+static std::time_t to_time_t (time_point t) noexcept
 
+static time_point from_time_t (std::time_t t) noexcept
 
+ + + +

+Static Public Attributes

+static constexpr bool is_steady = false
 
+

Member Function Documentation

+ +

◆ now()

+ +
+
+ + + + + +
+ + + + + + + +
static time_point seastar::lowres_system_clock::now ()
+
+inlinestaticnoexcept
+
+
Note
Outside of a Seastar application, the result is undefined.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1lw__shared__ptr-members.html b/master/classseastar_1_1lw__shared__ptr-members.html new file mode 100644 index 000000000..f6938d299 --- /dev/null +++ b/master/classseastar_1_1lw__shared__ptr-members.html @@ -0,0 +1,110 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::lw_shared_ptr< T > Member List
+
+
+ +

This is the complete list of members for seastar::lw_shared_ptr< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
dispose(T *p) noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inlinestatic
element_type typedef (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >
get() const noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
lw_shared_ptr() noexcept=default (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >
lw_shared_ptr(std::nullptr_t) noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
lw_shared_ptr(const lw_shared_ptr &x) noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
lw_shared_ptr(lw_shared_ptr &&x) noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
make_lw_shared (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >friend
make_lw_shared (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >friend
make_lw_shared (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >friend
operator bool() const noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inlineexplicit
operator lw_shared_ptr< const T >() const noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
operator!=(const lw_shared_ptr< const T > &x) const (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
operator!=(const lw_shared_ptr< std::remove_const_t< T > > &x) const (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
operator*() const noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
operator->() const noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
operator<(const lw_shared_ptr< const T > &x) const (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
operator<(const lw_shared_ptr< std::remove_const_t< T > > &x) const (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
operator=(const lw_shared_ptr &x) noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
operator=(lw_shared_ptr &&x) noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
operator=(std::nullptr_t) noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
operator=(T &&x) noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
operator==(const lw_shared_ptr< const T > &x) const (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
operator==(const lw_shared_ptr< std::remove_const_t< T > > &x) const (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
owned() const noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
release() noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
use_count() const noexcept (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
~lw_shared_ptr() (defined in seastar::lw_shared_ptr< T >)seastar::lw_shared_ptr< T >inline
+ + + + diff --git a/master/classseastar_1_1lw__shared__ptr.html b/master/classseastar_1_1lw__shared__ptr.html new file mode 100644 index 000000000..8adc64792 --- /dev/null +++ b/master/classseastar_1_1lw__shared__ptr.html @@ -0,0 +1,172 @@ + + + + + + + +Seastar: seastar::lw_shared_ptr< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::lw_shared_ptr< T > Class Template Reference
+
+
+ + + + +

+Classes

class  disposer
 
+ + + +

+Public Types

+using element_type = T
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

lw_shared_ptr (std::nullptr_t) noexcept
 
lw_shared_ptr (const lw_shared_ptr &x) noexcept
 
lw_shared_ptr (lw_shared_ptr &&x) noexcept
 
+lw_shared_ptroperator= (const lw_shared_ptr &x) noexcept
 
+lw_shared_ptroperator= (lw_shared_ptr &&x) noexcept
 
+lw_shared_ptroperator= (std::nullptr_t) noexcept
 
+lw_shared_ptroperator= (T &&x) noexcept
 
+T & operator* () const noexcept
 
+T * operator-> () const noexcept
 
+T * get () const noexcept
 
+std::unique_ptr< T, disposerrelease () noexcept
 
+long int use_count () const noexcept
 
operator lw_shared_ptr< const T > () const noexcept
 
operator bool () const noexcept
 
+bool owned () const noexcept
 
+bool operator== (const lw_shared_ptr< const T > &x) const
 
+bool operator!= (const lw_shared_ptr< const T > &x) const
 
+bool operator== (const lw_shared_ptr< std::remove_const_t< T > > &x) const
 
+bool operator!= (const lw_shared_ptr< std::remove_const_t< T > > &x) const
 
+bool operator< (const lw_shared_ptr< const T > &x) const
 
+bool operator< (const lw_shared_ptr< std::remove_const_t< T > > &x) const
 
+ + + +

+Static Public Member Functions

+static void dispose (T *p) noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1lw__shared__ptr_1_1disposer-members.html b/master/classseastar_1_1lw__shared__ptr_1_1disposer-members.html new file mode 100644 index 000000000..1a6a355e2 --- /dev/null +++ b/master/classseastar_1_1lw__shared__ptr_1_1disposer-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::lw_shared_ptr< T >::disposer Member List
+
+
+ +

This is the complete list of members for seastar::lw_shared_ptr< T >::disposer, including all inherited members.

+ + +
operator()(T *p) const noexcept (defined in seastar::lw_shared_ptr< T >::disposer)seastar::lw_shared_ptr< T >::disposerinline
+ + + + diff --git a/master/classseastar_1_1lw__shared__ptr_1_1disposer.html b/master/classseastar_1_1lw__shared__ptr_1_1disposer.html new file mode 100644 index 000000000..8e3bf7ec4 --- /dev/null +++ b/master/classseastar_1_1lw__shared__ptr_1_1disposer.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::lw_shared_ptr< T >::disposer Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::lw_shared_ptr< T >::disposer Class Reference
+
+
+ + + + +

+Public Member Functions

+void operator() (T *p) const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1manual__clock-members.html b/master/classseastar_1_1manual__clock-members.html new file mode 100644 index 000000000..6a5cc65cc --- /dev/null +++ b/master/classseastar_1_1manual__clock-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::manual_clock Member List
+
+
+ +

This is the complete list of members for seastar::manual_clock, including all inherited members.

+ + + + + + + + +
advance(duration d) noexcept (defined in seastar::manual_clock)seastar::manual_clockstatic
duration typedef (defined in seastar::manual_clock)seastar::manual_clock
manual_clock() noexcept (defined in seastar::manual_clock)seastar::manual_clock
now() noexcept (defined in seastar::manual_clock)seastar::manual_clockinlinestatic
period typedef (defined in seastar::manual_clock)seastar::manual_clock
rep typedef (defined in seastar::manual_clock)seastar::manual_clock
time_point typedef (defined in seastar::manual_clock)seastar::manual_clock
+ + + + diff --git a/master/classseastar_1_1manual__clock.html b/master/classseastar_1_1manual__clock.html new file mode 100644 index 000000000..6799c3f3b --- /dev/null +++ b/master/classseastar_1_1manual__clock.html @@ -0,0 +1,111 @@ + + + + + + + +Seastar: seastar::manual_clock Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::manual_clock Class Reference
+
+
+ + + + + + + + + + +

+Public Types

+using rep = int64_t
 
+using period = std::chrono::nanoseconds::period
 
+using duration = std::chrono::duration< rep, period >
 
+using time_point = std::chrono::time_point< manual_clock, duration >
 
+ + + + + +

+Static Public Member Functions

+static time_point now () noexcept
 
+static void advance (duration d) noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1measuring__output__stream-members.html b/master/classseastar_1_1measuring__output__stream-members.html new file mode 100644 index 000000000..81ba7f898 --- /dev/null +++ b/master/classseastar_1_1measuring__output__stream-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::measuring_output_stream Member List
+
+
+ +

This is the complete list of members for seastar::measuring_output_stream, including all inherited members.

+ + + +
size() const (defined in seastar::measuring_output_stream)seastar::measuring_output_streaminline
write(const char *, size_t size) (defined in seastar::measuring_output_stream)seastar::measuring_output_streaminline
+ + + + diff --git a/master/classseastar_1_1measuring__output__stream.html b/master/classseastar_1_1measuring__output__stream.html new file mode 100644 index 000000000..2c568fd7a --- /dev/null +++ b/master/classseastar_1_1measuring__output__stream.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: seastar::measuring_output_stream Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::measuring_output_stream Class Reference
+
+
+ + + + + + +

+Public Member Functions

+void write (const char *, size_t size)
 
+size_t size () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1memory_1_1alloc__failure__injector-members.html b/master/classseastar_1_1memory_1_1alloc__failure__injector-members.html new file mode 100644 index 000000000..8b4d6c7d6 --- /dev/null +++ b/master/classseastar_1_1memory_1_1alloc__failure__injector-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::memory::alloc_failure_injector Member List
+
+
+ +

This is the complete list of members for seastar::memory::alloc_failure_injector, including all inherited members.

+ + + + + + + +
alloc_count() constseastar::memory::alloc_failure_injectorinline
cancel()seastar::memory::alloc_failure_injectorinline
fail_after(uint64_t count)seastar::memory::alloc_failure_injectorinline
failed() constseastar::memory::alloc_failure_injectorinline
on_alloc_point()seastar::memory::alloc_failure_injectorinline
run_with_callback(noncopyable_function< void()> callback, noncopyable_function< void()> to_run)seastar::memory::alloc_failure_injector
+ + + + diff --git a/master/classseastar_1_1memory_1_1alloc__failure__injector.html b/master/classseastar_1_1memory_1_1alloc__failure__injector.html new file mode 100644 index 000000000..ea50fdea8 --- /dev/null +++ b/master/classseastar_1_1memory_1_1alloc__failure__injector.html @@ -0,0 +1,128 @@ + + + + + + + +Seastar: seastar::memory::alloc_failure_injector Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::memory::alloc_failure_injector Class Reference
+
+
+

Detailed Description

+

Allocation failure injection framework. Allows testing for exception safety.

+

To exhaustively inject failure at every allocation point:

uint64_t i = 0;
+while (true) {
+    try {
+        local_failure_injector().fail_after(i++);
+        code_under_test();
+        local_failure_injector().cancel();
+        break;
+    } catch (const std::bad_alloc&) {
+        // expected
+    }
+} 
+
+

#include <seastar/util/alloc_failure_injector.hh>

+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+void on_alloc_point ()
 Marks a point in code which should be considered for failure injection.
 
+uint64_t alloc_count () const
 Counts encountered allocation points which didn't fail and didn't have failure suppressed.
 
+void fail_after (uint64_t count)
 Will cause count-th allocation point from now to fail, counting from 0.
 
+void cancel ()
 Cancels the failure scheduled by fail_after().
 
+bool failed () const
 Returns true iff allocation was failed since last fail_after().
 
+void run_with_callback (noncopyable_function< void()> callback, noncopyable_function< void()> to_run)
 Runs given function with a custom failure action instead of the default std::bad_alloc throw.
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1memory_1_1scoped__heap__profiling-members.html b/master/classseastar_1_1memory_1_1scoped__heap__profiling-members.html new file mode 100644 index 000000000..0a3d77b1a --- /dev/null +++ b/master/classseastar_1_1memory_1_1scoped__heap__profiling-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::memory::scoped_heap_profiling Member List
+
+
+ +

This is the complete list of members for seastar::memory::scoped_heap_profiling, including all inherited members.

+ + + +
scoped_heap_profiling(size_t) noexcept (defined in seastar::memory::scoped_heap_profiling)seastar::memory::scoped_heap_profiling
~scoped_heap_profiling() (defined in seastar::memory::scoped_heap_profiling)seastar::memory::scoped_heap_profiling
+ + + + diff --git a/master/classseastar_1_1memory_1_1scoped__heap__profiling.html b/master/classseastar_1_1memory_1_1scoped__heap__profiling.html new file mode 100644 index 000000000..cf449db2a --- /dev/null +++ b/master/classseastar_1_1memory_1_1scoped__heap__profiling.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: seastar::memory::scoped_heap_profiling Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::memory::scoped_heap_profiling Class Reference
+
+
+

Detailed Description

+

Enable heap profiling for the duration of the scope.

+

Note: Nesting different sample rates is currently not supported.

+

For more information about heap profiling see set_heap_profiling_sampling_rate().

+
+

#include <seastar/core/memory.hh>

+ + + + +

+Public Member Functions

scoped_heap_profiling (size_t) noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1memory_1_1scoped__large__allocation__warning__disable-members.html b/master/classseastar_1_1memory_1_1scoped__large__allocation__warning__disable-members.html new file mode 100644 index 000000000..c714e03f7 --- /dev/null +++ b/master/classseastar_1_1memory_1_1scoped__large__allocation__warning__disable-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::memory::scoped_large_allocation_warning_disable Member List
+
+
+ +

This is the complete list of members for seastar::memory::scoped_large_allocation_warning_disable, including all inherited members.

+ + + + + + + +
operator=(const scoped_large_allocation_warning_disable &) const =delete (defined in seastar::memory::scoped_large_allocation_warning_disable)seastar::memory::scoped_large_allocation_warning_disable
operator=(scoped_large_allocation_warning_disable &&)=delete (defined in seastar::memory::scoped_large_allocation_warning_disable)seastar::memory::scoped_large_allocation_warning_disable
scoped_large_allocation_warning_disable() (defined in seastar::memory::scoped_large_allocation_warning_disable)seastar::memory::scoped_large_allocation_warning_disableinline
scoped_large_allocation_warning_disable(const scoped_large_allocation_warning_disable &)=delete (defined in seastar::memory::scoped_large_allocation_warning_disable)seastar::memory::scoped_large_allocation_warning_disable
scoped_large_allocation_warning_disable(scoped_large_allocation_warning_disable &&x)=delete (defined in seastar::memory::scoped_large_allocation_warning_disable)seastar::memory::scoped_large_allocation_warning_disable
~scoped_large_allocation_warning_disable() (defined in seastar::memory::scoped_large_allocation_warning_disable)seastar::memory::scoped_large_allocation_warning_disableinline
+ + + + diff --git a/master/classseastar_1_1memory_1_1scoped__large__allocation__warning__disable.html b/master/classseastar_1_1memory_1_1scoped__large__allocation__warning__disable.html new file mode 100644 index 000000000..f046db17b --- /dev/null +++ b/master/classseastar_1_1memory_1_1scoped__large__allocation__warning__disable.html @@ -0,0 +1,105 @@ + + + + + + + +Seastar: seastar::memory::scoped_large_allocation_warning_disable Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::memory::scoped_large_allocation_warning_disable Class Reference
+
+
+

Detailed Description

+

Disable large allocation warnings for a scope.

+
+

#include <seastar/core/memory.hh>

+ + + + + + + + + + +

+Public Member Functions

scoped_large_allocation_warning_disable (const scoped_large_allocation_warning_disable &)=delete
 
scoped_large_allocation_warning_disable (scoped_large_allocation_warning_disable &&x)=delete
 
+void operator= (const scoped_large_allocation_warning_disable &) const =delete
 
+void operator= (scoped_large_allocation_warning_disable &&)=delete
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1memory_1_1scoped__large__allocation__warning__threshold-members.html b/master/classseastar_1_1memory_1_1scoped__large__allocation__warning__threshold-members.html new file mode 100644 index 000000000..6824bcbb1 --- /dev/null +++ b/master/classseastar_1_1memory_1_1scoped__large__allocation__warning__threshold-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::memory::scoped_large_allocation_warning_threshold Member List
+
+
+ +

This is the complete list of members for seastar::memory::scoped_large_allocation_warning_threshold, including all inherited members.

+ + + + + + + +
operator=(const scoped_large_allocation_warning_threshold &) const =delete (defined in seastar::memory::scoped_large_allocation_warning_threshold)seastar::memory::scoped_large_allocation_warning_threshold
operator=(scoped_large_allocation_warning_threshold &&)=delete (defined in seastar::memory::scoped_large_allocation_warning_threshold)seastar::memory::scoped_large_allocation_warning_threshold
scoped_large_allocation_warning_threshold(size_t threshold) (defined in seastar::memory::scoped_large_allocation_warning_threshold)seastar::memory::scoped_large_allocation_warning_thresholdinlineexplicit
scoped_large_allocation_warning_threshold(const scoped_large_allocation_warning_threshold &)=delete (defined in seastar::memory::scoped_large_allocation_warning_threshold)seastar::memory::scoped_large_allocation_warning_threshold
scoped_large_allocation_warning_threshold(scoped_large_allocation_warning_threshold &&x)=delete (defined in seastar::memory::scoped_large_allocation_warning_threshold)seastar::memory::scoped_large_allocation_warning_threshold
~scoped_large_allocation_warning_threshold() (defined in seastar::memory::scoped_large_allocation_warning_threshold)seastar::memory::scoped_large_allocation_warning_thresholdinline
+ + + + diff --git a/master/classseastar_1_1memory_1_1scoped__large__allocation__warning__threshold.html b/master/classseastar_1_1memory_1_1scoped__large__allocation__warning__threshold.html new file mode 100644 index 000000000..9b78547c2 --- /dev/null +++ b/master/classseastar_1_1memory_1_1scoped__large__allocation__warning__threshold.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: seastar::memory::scoped_large_allocation_warning_threshold Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::memory::scoped_large_allocation_warning_threshold Class Reference
+
+
+

Detailed Description

+

Set a different large allocation warning threshold for a scope.

+
+

#include <seastar/core/memory.hh>

+ + + + + + + + + + + + +

+Public Member Functions

scoped_large_allocation_warning_threshold (size_t threshold)
 
scoped_large_allocation_warning_threshold (const scoped_large_allocation_warning_threshold &)=delete
 
scoped_large_allocation_warning_threshold (scoped_large_allocation_warning_threshold &&x)=delete
 
+void operator= (const scoped_large_allocation_warning_threshold &) const =delete
 
+void operator= (scoped_large_allocation_warning_threshold &&)=delete
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1memory_1_1statistics-members.html b/master/classseastar_1_1memory_1_1statistics-members.html new file mode 100644 index 000000000..e6cbbbf98 --- /dev/null +++ b/master/classseastar_1_1memory_1_1statistics-members.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::memory::statistics Member List
+
+ + + + + diff --git a/master/classseastar_1_1memory_1_1statistics.html b/master/classseastar_1_1memory_1_1statistics.html new file mode 100644 index 000000000..b14100137 --- /dev/null +++ b/master/classseastar_1_1memory_1_1statistics.html @@ -0,0 +1,194 @@ + + + + + + + +Seastar: seastar::memory::statistics Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::memory::statistics Class Reference
+
+
+

Detailed Description

+

Memory allocation statistics.

+
+

#include <seastar/core/memory.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+uint64_t mallocs () const
 Total number of memory allocations calls since the system was started.
 
+uint64_t frees () const
 Total number of memory deallocations calls since the system was started.
 
uint64_t cross_cpu_frees () const
 
+size_t live_objects () const
 Total number of objects which were allocated but not freed.
 
+size_t free_memory () const
 Total free memory (in bytes)
 
+size_t allocated_memory () const
 Total allocated memory (in bytes)
 
+size_t total_memory () const
 Total memory (in bytes)
 
+uint64_t reclaims () const
 Number of reclaims performed due to low memory.
 
+uint64_t large_allocations () const
 Number of allocations which violated the large allocation threshold.
 
uint64_t failed_allocations () const
 
+uint64_t foreign_mallocs () const
 Number of foreign allocations.
 
+uint64_t foreign_frees () const
 Number of foreign frees.
 
+uint64_t foreign_cross_frees () const
 Number of foreign frees on reactor threads.
 
+

Member Function Documentation

+ +

◆ cross_cpu_frees()

+ +
+
+ + + + + +
+ + + + + + + +
uint64_t seastar::memory::statistics::cross_cpu_frees () const
+
+inline
+
+

Total number of memory deallocations that occured on a different lcore than the one on which they were allocated.

+ +
+
+ +

◆ failed_allocations()

+ +
+
+ + + + + +
+ + + + + + + +
uint64_t seastar::memory::statistics::failed_allocations () const
+
+inline
+
+

Number of allocations which failed, i.e., where the required memory could not be obtained even after reclaim was attempted

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1memory__input__stream-members.html b/master/classseastar_1_1memory__input__stream-members.html new file mode 100644 index 000000000..aaa960d5b --- /dev/null +++ b/master/classseastar_1_1memory__input__stream-members.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::memory_input_stream< Iterator > Member List
+
+
+ +

This is the complete list of members for seastar::memory_input_stream< Iterator >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
copy_to(Output &out) (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >inline
fragmented typedef (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >
has_with_stream typedef (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >
iterator_type typedef (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >
memory_input_stream(simple stream) (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >inline
memory_input_stream(fragmented stream) (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >inline
memory_input_stream(const memory_input_stream &other) noexcept (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >inline
memory_input_stream(memory_input_stream &&other) noexcept (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >inline
operator=(const memory_input_stream &other) noexcept (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >inline
operator=(memory_input_stream &&other) noexcept (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >inline
read(char *p, size_t size) (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >inline
read_substream(size_t size) (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >inline
simple typedef (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >
size() const (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >inline
skip(size_t size) (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >inline
with_serialized_stream (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >friend
with_stream(StreamVisitor &&visitor) (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >inline
with_stream(StreamVisitor &&visitor) const (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >inline
~memory_input_stream() (defined in seastar::memory_input_stream< Iterator >)seastar::memory_input_stream< Iterator >inline
+ + + + diff --git a/master/classseastar_1_1memory__input__stream.html b/master/classseastar_1_1memory__input__stream.html new file mode 100644 index 000000000..42eed9bca --- /dev/null +++ b/master/classseastar_1_1memory__input__stream.html @@ -0,0 +1,147 @@ + + + + + + + +Seastar: seastar::memory_input_stream< Iterator > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::memory_input_stream< Iterator > Class Template Reference
+
+
+ + + + + + + + + + +

+Public Types

+using simple = simple_memory_input_stream
 
+using fragmented = fragmented_memory_input_stream< Iterator >
 
+using has_with_stream = std::true_type
 
+using iterator_type = Iterator
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+template<typename StreamVisitor >
decltype(auto) with_stream (StreamVisitor &&visitor)
 
+template<typename StreamVisitor >
decltype(auto) with_stream (StreamVisitor &&visitor) const
 
memory_input_stream (simple stream)
 
memory_input_stream (fragmented stream)
 
memory_input_stream (const memory_input_stream &other) noexcept
 
memory_input_stream (memory_input_stream &&other) noexcept
 
+memory_input_streamoperator= (const memory_input_stream &other) noexcept
 
+memory_input_streamoperator= (memory_input_stream &&other) noexcept
 
+void skip (size_t size)
 
+memory_input_stream read_substream (size_t size)
 
+void read (char *p, size_t size)
 
+template<typename Output >
void copy_to (Output &out)
 
+size_t size () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1memory__output__stream-members.html b/master/classseastar_1_1memory__output__stream-members.html new file mode 100644 index 000000000..31ecfad8b --- /dev/null +++ b/master/classseastar_1_1memory__output__stream-members.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::memory_output_stream< Iterator > Member List
+
+
+ +

This is the complete list of members for seastar::memory_output_stream< Iterator >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
fill(char c, size_t size) (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
fragmented typedef (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >
has_with_stream typedef (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >
iterator_type typedef (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >
memory_output_stream() (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
memory_output_stream(simple stream) (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
memory_output_stream(fragmented stream) (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
memory_output_stream(const memory_output_stream &other) noexcept (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
memory_output_stream(memory_output_stream &&other) noexcept (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
operator=(const memory_output_stream &other) noexcept (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
operator=(memory_output_stream &&other) noexcept (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
simple typedef (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >
size() const (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
skip(size_t size) (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
to_input_stream() const (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
with_stream(StreamVisitor &&visitor) (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
with_stream(StreamVisitor &&visitor) const (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
write(const char *p, size_t size) (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
write_substream(size_t size) (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
~memory_output_stream() (defined in seastar::memory_output_stream< Iterator >)seastar::memory_output_stream< Iterator >inline
+ + + + diff --git a/master/classseastar_1_1memory__output__stream.html b/master/classseastar_1_1memory__output__stream.html new file mode 100644 index 000000000..affbcddbd --- /dev/null +++ b/master/classseastar_1_1memory__output__stream.html @@ -0,0 +1,149 @@ + + + + + + + +Seastar: seastar::memory_output_stream< Iterator > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::memory_output_stream< Iterator > Class Template Reference
+
+
+ + + + + + + + + + +

+Public Types

+using simple = simple_memory_output_stream
 
+using fragmented = fragmented_memory_output_stream< Iterator >
 
+using has_with_stream = std::true_type
 
+using iterator_type = Iterator
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+template<typename StreamVisitor >
decltype(auto) with_stream (StreamVisitor &&visitor)
 
+template<typename StreamVisitor >
decltype(auto) with_stream (StreamVisitor &&visitor) const
 
memory_output_stream (simple stream)
 
memory_output_stream (fragmented stream)
 
memory_output_stream (const memory_output_stream &other) noexcept
 
memory_output_stream (memory_output_stream &&other) noexcept
 
+memory_output_streamoperator= (const memory_output_stream &other) noexcept
 
+memory_output_streamoperator= (memory_output_stream &&other) noexcept
 
+void skip (size_t size)
 
+memory_output_stream write_substream (size_t size)
 
+void write (const char *p, size_t size)
 
+void fill (char c, size_t size)
 
+size_t size () const
 
+memory_input_stream< Iterator > to_input_stream () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1description-members.html b/master/classseastar_1_1metrics_1_1description-members.html new file mode 100644 index 000000000..51363fd5b --- /dev/null +++ b/master/classseastar_1_1metrics_1_1description-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::description Member List
+
+
+ +

This is the complete list of members for seastar::metrics::description, including all inherited members.

+ + + +
description(sstring s=sstring()) (defined in seastar::metrics::description)seastar::metrics::descriptioninline
str() const (defined in seastar::metrics::description)seastar::metrics::descriptioninline
+ + + + diff --git a/master/classseastar_1_1metrics_1_1description.html b/master/classseastar_1_1metrics_1_1description.html new file mode 100644 index 000000000..ce18bad71 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1description.html @@ -0,0 +1,106 @@ + + + + + + + +Seastar: seastar::metrics::description Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::description Class Reference
+
+
+

Detailed Description

+

Human-readable description of a metric/group.

+

Uses a separate class to deal with type resolution

+

Add this to metric creation:

+
_metrics->add_group("groupname", {
+
sm::make_gauge("metric_name", value, description("A documentation about the return value"))
+
});
+
Human-readable description of a metric/group.
Definition: metrics.hh:133
+
impl::metric_definition_impl make_gauge(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
Gauge are a general purpose metric.
Definition: metrics.hh:442
+
+

#include <seastar/core/metrics.hh>

+ + + + + + +

+Public Member Functions

description (sstring s=sstring())
 
+const sstring & str () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1double__registration-members.html b/master/classseastar_1_1metrics_1_1double__registration-members.html new file mode 100644 index 000000000..3e35d03c3 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1double__registration-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::double_registration Member List
+
+
+ +

This is the complete list of members for seastar::metrics::double_registration, including all inherited members.

+ + +
double_registration(std::string what) (defined in seastar::metrics::double_registration)seastar::metrics::double_registration
+ + + + diff --git a/master/classseastar_1_1metrics_1_1double__registration.html b/master/classseastar_1_1metrics_1_1double__registration.html new file mode 100644 index 000000000..932ead873 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1double__registration.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: seastar::metrics::double_registration Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::double_registration Class Reference
+
+
+
+Inheritance diagram for seastar::metrics::double_registration:
+
+
+ +
+ + + + +

+Public Member Functions

double_registration (std::string what)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1double__registration.png b/master/classseastar_1_1metrics_1_1double__registration.png new file mode 100644 index 0000000000000000000000000000000000000000..a5b64820e337ecace64a05c22afb984cd3e61c2d GIT binary patch literal 989 zcmeAS@N?(olHy`uVBq!ia0vp^SAn>LgBeJ=_r=WsQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;rsS8wOpZ~WrU8C|+>)4h_Oa8k@cuwL!N zDt#^?%}i#73a=Z?@Pd0OP+|+6EYEyIT zcciSExFo*7in%`7^#4@O9mgj6m`?h_?HAT?YAYGH9^29-#qpq(=l}tQSGs|*G#^ib0W7$f!`io8 zcU;e2ULJIO;)mNa(ms^zwEml=-B5cjVlUUHth{Zry8e869a_6&{p->~wbyn}e;41s z6Y6u$zU%1RBUiS@PE8Jeqw7%>@O8$YD@Jd`Qlp<6l~*f7+%0;t)Hd0~_?86Q&aW4D ze>nP2%#r8RwR?Gww}w?pub!jJ_Qbth@wD-aO^a`@Ik#`qt=SjX@+)sw^P1dvIWlj4 zbbR67xCAuTAmX{@U99`hmKPozwOl z*n6q!!*{L+`ah2{<)?hr5xBarbSGy)%kKH1t2sZ&u}gA%P=qF@gMYl!(#$0OGu%G( W_hx^^F%Do}WbkzLb6Mw<&;$V86x{g$ literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1metrics_1_1impl_1_1impl-members.html b/master/classseastar_1_1metrics_1_1impl_1_1impl-members.html new file mode 100644 index 000000000..f7d25ec64 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1impl_1_1impl-members.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::impl::impl Member List
+
+
+ +

This is the complete list of members for seastar::metrics::impl::impl, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
add_registration(const metric_id &id, const metric_type &type, metric_function f, const description &d, bool enabled, skip_when_empty skip, const std::vector< std::string > &aggregate_labels) (defined in seastar::metrics::impl::impl)seastar::metrics::impl::impl
dirty() (defined in seastar::metrics::impl::impl)seastar::metrics::impl::implinline
functions() (defined in seastar::metrics::impl::impl)seastar::metrics::impl::impl
get_config() const (defined in seastar::metrics::impl::impl)seastar::metrics::impl::implinline
get_labels() const noexcept (defined in seastar::metrics::impl::impl)seastar::metrics::impl::implinline
get_metric_family_configs() const noexcept (defined in seastar::metrics::impl::impl)seastar::metrics::impl::implinline
get_relabel_configs() const noexcept (defined in seastar::metrics::impl::impl)seastar::metrics::impl::implinline
get_value_map() (defined in seastar::metrics::impl::impl)seastar::metrics::impl::implinline
get_value_map() const (defined in seastar::metrics::impl::impl)seastar::metrics::impl::implinline
metadata() (defined in seastar::metrics::impl::impl)seastar::metrics::impl::impl
remove_registration(const metric_id &id) (defined in seastar::metrics::impl::impl)seastar::metrics::impl::impl
set_config(const config &c) (defined in seastar::metrics::impl::impl)seastar::metrics::impl::implinline
set_metric_family_configs(const std::vector< metric_family_config > &metrics_config) (defined in seastar::metrics::impl::impl)seastar::metrics::impl::impl
set_relabel_configs(const std::vector< relabel_config > &relabel_configs) (defined in seastar::metrics::impl::impl)seastar::metrics::impl::impl
stop() (defined in seastar::metrics::impl::impl)seastar::metrics::impl::implinline
update_aggregate(metric_family_info &mf) const noexcept (defined in seastar::metrics::impl::impl)seastar::metrics::impl::impl
update_metrics_if_needed() (defined in seastar::metrics::impl::impl)seastar::metrics::impl::impl
+ + + + diff --git a/master/classseastar_1_1metrics_1_1impl_1_1impl.html b/master/classseastar_1_1metrics_1_1impl_1_1impl.html new file mode 100644 index 000000000..fefad031a --- /dev/null +++ b/master/classseastar_1_1metrics_1_1impl_1_1impl.html @@ -0,0 +1,140 @@ + + + + + + + +Seastar: seastar::metrics::impl::impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::impl::impl Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+value_map & get_value_map ()
 
+const value_map & get_value_map () const
 
+void add_registration (const metric_id &id, const metric_type &type, metric_function f, const description &d, bool enabled, skip_when_empty skip, const std::vector< std::string > &aggregate_labels)
 
+void remove_registration (const metric_id &id)
 
+future stop ()
 
+const configget_config () const
 
+void set_config (const config &c)
 
+shared_ptr< metric_metadata > metadata ()
 
+std::vector< std::deque< metric_function > > & functions ()
 
+void update_metrics_if_needed ()
 
+void dirty ()
 
+const std::set< sstring > & get_labels () const noexcept
 
+future< metric_relabeling_resultset_relabel_configs (const std::vector< relabel_config > &relabel_configs)
 
+const std::vector< relabel_config > & get_relabel_configs () const noexcept
 
+const std::vector< metric_family_config > & get_metric_family_configs () const noexcept
 
+void set_metric_family_configs (const std::vector< metric_family_config > &metrics_config)
 
+void update_aggregate (metric_family_info &mf) const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1impl_1_1metric__family-members.html b/master/classseastar_1_1metrics_1_1impl_1_1metric__family-members.html new file mode 100644 index 000000000..5dddbfc4e --- /dev/null +++ b/master/classseastar_1_1metrics_1_1impl_1_1metric__family-members.html @@ -0,0 +1,103 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::impl::metric_family Member List
+
+
+ +

This is the complete list of members for seastar::metrics::impl::metric_family, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
at(const labels_type &l) const (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
begin() (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
begin() const (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
const_iterator typedef (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_family
empty() const (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
end() (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
end() const (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
erase(const_iterator position) (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
find(const labels_type &l) (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
find(const labels_type &l) const (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
info() (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
info() const (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
iterator typedef (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_family
metric_family()=default (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_family
metric_family(const metric_family &)=default (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_family
metric_family(const metric_instances &instances) (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
metric_family(const metric_instances &instances, const metric_family_info &info) (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
metric_family(metric_instances &&instances, metric_family_info &&info) (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
metric_family(metric_instances &&instances) (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
operator[](const labels_type &l) (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
size() const (defined in seastar::metrics::impl::metric_family)seastar::metrics::impl::metric_familyinline
+ + + + diff --git a/master/classseastar_1_1metrics_1_1impl_1_1metric__family.html b/master/classseastar_1_1metrics_1_1impl_1_1metric__family.html new file mode 100644 index 000000000..f603caa44 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1impl_1_1metric__family.html @@ -0,0 +1,153 @@ + + + + + + + +Seastar: seastar::metrics::impl::metric_family Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::impl::metric_family Class Reference
+
+
+ + + + + + +

+Public Types

+using iterator = metric_instances::iterator
 
+using const_iterator = metric_instances::const_iterator
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

metric_family (const metric_family &)=default
 
metric_family (const metric_instances &instances)
 
metric_family (const metric_instances &instances, const metric_family_info &info)
 
metric_family (metric_instances &&instances, metric_family_info &&info)
 
metric_family (metric_instances &&instances)
 
+register_refoperator[] (const labels_type &l)
 
+const register_refat (const labels_type &l) const
 
+metric_family_infoinfo ()
 
+const metric_family_infoinfo () const
 
+iterator find (const labels_type &l)
 
+const_iterator find (const labels_type &l) const
 
+iterator begin ()
 
+const_iterator begin () const
 
+iterator end ()
 
+bool empty () const
 
+iterator erase (const_iterator position)
 
+const_iterator end () const
 
+uint32_t size () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1impl_1_1metric__groups__def-members.html b/master/classseastar_1_1metrics_1_1impl_1_1metric__groups__def-members.html new file mode 100644 index 000000000..a02ec6741 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1impl_1_1metric__groups__def-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::impl::metric_groups_def Member List
+
+
+ +

This is the complete list of members for seastar::metrics::impl::metric_groups_def, including all inherited members.

+ + + + + + + + +
add_group(group_name_type name, const std::initializer_list< metric_definition > &l)=0 (defined in seastar::metrics::impl::metric_groups_def)seastar::metrics::impl::metric_groups_defpure virtual
add_group(group_name_type name, const std::vector< metric_definition > &l)=0 (defined in seastar::metrics::impl::metric_groups_def)seastar::metrics::impl::metric_groups_defpure virtual
add_metric(group_name_type name, const metric_definition &md)=0 (defined in seastar::metrics::impl::metric_groups_def)seastar::metrics::impl::metric_groups_defpure virtual
metric_groups_def()=default (defined in seastar::metrics::impl::metric_groups_def)seastar::metrics::impl::metric_groups_def
metric_groups_def(const metric_groups_def &)=delete (defined in seastar::metrics::impl::metric_groups_def)seastar::metrics::impl::metric_groups_def
metric_groups_def(metric_groups_def &&)=default (defined in seastar::metrics::impl::metric_groups_def)seastar::metrics::impl::metric_groups_def
~metric_groups_def()=default (defined in seastar::metrics::impl::metric_groups_def)seastar::metrics::impl::metric_groups_defvirtual
+ + + + diff --git a/master/classseastar_1_1metrics_1_1impl_1_1metric__groups__def.html b/master/classseastar_1_1metrics_1_1impl_1_1metric__groups__def.html new file mode 100644 index 000000000..cd9b4ec82 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1impl_1_1metric__groups__def.html @@ -0,0 +1,113 @@ + + + + + + + +Seastar: seastar::metrics::impl::metric_groups_def Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::impl::metric_groups_def Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::metrics::impl::metric_groups_def:
+
+
+ + +seastar::metrics::impl::metric_groups_impl + +
+ + + + + + + + + + + + +

+Public Member Functions

metric_groups_def (const metric_groups_def &)=delete
 
metric_groups_def (metric_groups_def &&)=default
 
+virtual metric_groups_defadd_metric (group_name_type name, const metric_definition &md)=0
 
+virtual metric_groups_defadd_group (group_name_type name, const std::initializer_list< metric_definition > &l)=0
 
+virtual metric_groups_defadd_group (group_name_type name, const std::vector< metric_definition > &l)=0
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1impl_1_1metric__groups__def.png b/master/classseastar_1_1metrics_1_1impl_1_1metric__groups__def.png new file mode 100644 index 0000000000000000000000000000000000000000..b7bb6f182dbce61acca6e2ad05cae80f4acc14a4 GIT binary patch literal 887 zcmeAS@N?(olHy`uVBq!ia0vp^pMW@kgBeJQB;6MJ>BP+^X80x3-`Nu zn>VUd?%(#8?@oDwPRyi*<>q`RO`abyo&3?@!HuJL(r)0o%txbOnTa@FaG&IBR0nF><~RxA(`E^`UWT8+D!rJU81*dW~{t%^$6RK+M3fz zKR<+P*gJh%&2*E4+2Y58JXMJY9p}4>LQlr`8y%1~RAK(orzp9g+~)t`V6T^c3>Exx z4Brp^Rk4@be!0f}^c zA2RX19Q|R&vdk*>87eRRBqph@Eay2n>58?Kin`~nL)%vF*=Z1+YMVZ3iP{z4e_K*K zvkomy@%$Ajqq6+E57%9*JNtZj=54Ng{b}>M*@t&;tVxj5iM77`?xEL)wQC|Y*B%v~ z9QkR}EXyTNZohJxS9!5Tc%rgr^=bA=Pj0DB7EBa-EBJiHU0GkZlfSpVEq}0&Ir-rv zp3U9;Q+$fg#Tw7t!(&m#tLB_^{^z9MHtGAgdrk)(yg1{=^hv9IdM5$nM$ytuqy5J2 zz^=0w`vqR8+zjh4>RstuboOA^lWp7Y%)0R~RW&nTJv(*Tk7;+?mOhz!zv$)@&!c5e zmBJ(*r>@alm!$skf);n_vWSgydpCF08r=M`U&qtFBmeLFY5ehlzrONM_@k9=c4*R* z2f>Nj2jz8cu9~<+`Cru()t74#0hM<0vWf5ZL-i@*MvbveGU>ov!r + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::impl::metric_groups_impl Member List
+
+
+ +

This is the complete list of members for seastar::metrics::impl::metric_groups_impl, including all inherited members.

+ + + + + + + + + + + + +
add_group(group_name_type name, const std::initializer_list< metric_definition > &l) (defined in seastar::metrics::impl::metric_groups_impl)seastar::metrics::impl::metric_groups_implvirtual
add_group(group_name_type name, const std::vector< metric_definition > &l) (defined in seastar::metrics::impl::metric_groups_impl)seastar::metrics::impl::metric_groups_implvirtual
add_metric(group_name_type name, const metric_definition &md) (defined in seastar::metrics::impl::metric_groups_impl)seastar::metrics::impl::metric_groups_implvirtual
metric_groups_def()=default (defined in seastar::metrics::impl::metric_groups_def)seastar::metrics::impl::metric_groups_def
metric_groups_def(const metric_groups_def &)=delete (defined in seastar::metrics::impl::metric_groups_def)seastar::metrics::impl::metric_groups_def
metric_groups_def(metric_groups_def &&)=default (defined in seastar::metrics::impl::metric_groups_def)seastar::metrics::impl::metric_groups_def
metric_groups_impl()=default (defined in seastar::metrics::impl::metric_groups_impl)seastar::metrics::impl::metric_groups_impl
metric_groups_impl(const metric_groups_impl &)=delete (defined in seastar::metrics::impl::metric_groups_impl)seastar::metrics::impl::metric_groups_impl
metric_groups_impl(metric_groups_impl &&)=default (defined in seastar::metrics::impl::metric_groups_impl)seastar::metrics::impl::metric_groups_impl
~metric_groups_def()=default (defined in seastar::metrics::impl::metric_groups_def)seastar::metrics::impl::metric_groups_defvirtual
~metric_groups_impl() (defined in seastar::metrics::impl::metric_groups_impl)seastar::metrics::impl::metric_groups_impl
+ + + + diff --git a/master/classseastar_1_1metrics_1_1impl_1_1metric__groups__impl.html b/master/classseastar_1_1metrics_1_1impl_1_1metric__groups__impl.html new file mode 100644 index 000000000..219046cdf --- /dev/null +++ b/master/classseastar_1_1metrics_1_1impl_1_1metric__groups__impl.html @@ -0,0 +1,225 @@ + + + + + + + +Seastar: seastar::metrics::impl::metric_groups_impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::impl::metric_groups_impl Class Reference
+
+
+
+Inheritance diagram for seastar::metrics::impl::metric_groups_impl:
+
+
+ + +seastar::metrics::impl::metric_groups_def + +
+ + + + + + + + + + + + +

+Public Member Functions

metric_groups_impl (const metric_groups_impl &)=delete
 
metric_groups_impl (metric_groups_impl &&)=default
 
metric_groups_impladd_metric (group_name_type name, const metric_definition &md)
 
metric_groups_impladd_group (group_name_type name, const std::initializer_list< metric_definition > &l)
 
metric_groups_impladd_group (group_name_type name, const std::vector< metric_definition > &l)
 
+

Member Function Documentation

+ +

◆ add_group() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
metric_groups_impl & seastar::metrics::impl::metric_groups_impl::add_group (group_name_type name,
const std::initializer_list< metric_definition > & l 
)
+
+virtual
+
+
+ +

◆ add_group() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
metric_groups_impl & seastar::metrics::impl::metric_groups_impl::add_group (group_name_type name,
const std::vector< metric_definition > & l 
)
+
+virtual
+
+
+ +

◆ add_metric()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
metric_groups_impl & seastar::metrics::impl::metric_groups_impl::add_metric (group_name_type name,
const metric_definitionmd 
)
+
+virtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1impl_1_1metric__groups__impl.png b/master/classseastar_1_1metrics_1_1impl_1_1metric__groups__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..46cf2eb995b66cf898607a957cce84110bec482f GIT binary patch literal 880 zcmeAS@N?(olHy`uVBq!ia0vp^pMW@kgBeJQB;6W>gx3G^d_Ctdk-jimLHm;#R)Br{vA&^XKI?xjyj-lDw(lnHOU;ljH0n z)56AGchi!6i!8SlvAwHLSR*rOVY#}Vs&S0Kbsx1u4Ua|2=X>7sFIYXJ_SDO-S2HGW znfj>FPVC##Cu+gVQ^IfTWH8EHTlAQ;TekSd!!tCJ{R?HSJ=-rvWEdaqdt39Rq`&`m=Dzt)+8^!C+_&(_&5ex5j!)q+0IF@cXsF8E)2At! zP~vlv0T|qD60*TY2VTsW#OQ{u z0}+-g$7TBdWL!9z^2+FeMd=Qn*1s#J+dMCSR^M6}yNX4M`*%>$YIgT6= z2l~pUMf=oFie@xZ`F{85y+eHF+K!Uy*`>=Wrr&Mb`t<7iqPtH$kC(kwDw7aSeWST9 zS>2-NnA2>{vYh9S*Cflwl+{gVjO)n%xmr3t@EG@}*Q)lnXPq@@Xx4At%esGK%4)U; r9l)q)kUt6w-H$(~`e`n;e#n1P+-S + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::impl::metric_id Member List
+
+
+ +

This is the complete list of members for seastar::metrics::impl::metric_id, including all inherited members.

+ + + + + + + + + + + + + + + + +
full_name() const (defined in seastar::metrics::impl::metric_id)seastar::metrics::impl::metric_id
group_name() const (defined in seastar::metrics::impl::metric_id)seastar::metrics::impl::metric_idinline
group_name(const group_name_type &name) (defined in seastar::metrics::impl::metric_id)seastar::metrics::impl::metric_idinline
instance_id() const (defined in seastar::metrics::impl::metric_id)seastar::metrics::impl::metric_idinline
labels() const (defined in seastar::metrics::impl::metric_id)seastar::metrics::impl::metric_idinline
labels() (defined in seastar::metrics::impl::metric_id)seastar::metrics::impl::metric_idinline
metric_id()=default (defined in seastar::metrics::impl::metric_id)seastar::metrics::impl::metric_id
metric_id(group_name_type group, metric_name_type name, labels_type labels={}) (defined in seastar::metrics::impl::metric_id)seastar::metrics::impl::metric_idinline
metric_id(metric_id &&)=default (defined in seastar::metrics::impl::metric_id)seastar::metrics::impl::metric_id
metric_id(const metric_id &)=default (defined in seastar::metrics::impl::metric_id)seastar::metrics::impl::metric_id
name() const (defined in seastar::metrics::impl::metric_id)seastar::metrics::impl::metric_idinline
operator<(const metric_id &) const (defined in seastar::metrics::impl::metric_id)seastar::metrics::impl::metric_id
operator=(metric_id &&)=default (defined in seastar::metrics::impl::metric_id)seastar::metrics::impl::metric_id
operator=(const metric_id &)=default (defined in seastar::metrics::impl::metric_id)seastar::metrics::impl::metric_id
operator==(const metric_id &) const (defined in seastar::metrics::impl::metric_id)seastar::metrics::impl::metric_id
+ + + + diff --git a/master/classseastar_1_1metrics_1_1impl_1_1metric__id.html b/master/classseastar_1_1metrics_1_1impl_1_1metric__id.html new file mode 100644 index 000000000..b935c17dd --- /dev/null +++ b/master/classseastar_1_1metrics_1_1impl_1_1metric__id.html @@ -0,0 +1,138 @@ + + + + + + + +Seastar: seastar::metrics::impl::metric_id Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::impl::metric_id Class Reference
+
+
+

Detailed Description

+

Metrics are collected in groups that belongs to some logical entity. For example, different measurements of the cpu, will belong to group "cpu".

+

Name is the metric name like used_objects or used_bytes

+

Inherit type allows customizing one of the basic types (gauge, counter, derive).

+

Instance_id is used to differentiate multiple instance of the metrics. In the seastar environment it is typical to have a metric per shard.

+
+

#include <seastar/core/metrics_api.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

metric_id (group_name_type group, metric_name_type name, labels_type labels={})
 
metric_id (metric_id &&)=default
 
metric_id (const metric_id &)=default
 
+metric_idoperator= (metric_id &&)=default
 
+metric_idoperator= (const metric_id &)=default
 
+const group_name_typegroup_name () const
 
+void group_name (const group_name_type &name)
 
+const instance_id_typeinstance_id () const
 
+const metric_name_typename () const
 
+const labels_type & labels () const
 
+labels_type & labels ()
 
+sstring full_name () const
 
+bool operator< (const metric_id &) const
 
+bool operator== (const metric_id &) const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1impl_1_1metric__value-members.html b/master/classseastar_1_1metrics_1_1impl_1_1metric__value-members.html new file mode 100644 index 000000000..a45cafd98 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1impl_1_1metric__value-members.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::impl::metric_value Member List
+
+
+ +

This is the complete list of members for seastar::metrics::impl::metric_value, including all inherited members.

+ + + + + + + + + + + + + + + +
_type (defined in seastar::metrics::impl::metric_value)seastar::metrics::impl::metric_value
d() const (defined in seastar::metrics::impl::metric_value)seastar::metrics::impl::metric_valueinline
get_histogram() const (defined in seastar::metrics::impl::metric_value)seastar::metrics::impl::metric_valueinline
i() const (defined in seastar::metrics::impl::metric_value)seastar::metrics::impl::metric_valueinline
is_empty() const noexceptseastar::metrics::impl::metric_valueinline
metric_value() (defined in seastar::metrics::impl::metric_value)seastar::metrics::impl::metric_valueinline
metric_value(histogram &&h, data_type t=data_type::HISTOGRAM) (defined in seastar::metrics::impl::metric_value)seastar::metrics::impl::metric_valueinline
metric_value(const histogram &h, data_type t=data_type::HISTOGRAM) (defined in seastar::metrics::impl::metric_value)seastar::metrics::impl::metric_valueinline
metric_value(double d, data_type t) (defined in seastar::metrics::impl::metric_value)seastar::metrics::impl::metric_valueinline
operator+(const metric_value &c) (defined in seastar::metrics::impl::metric_value)seastar::metrics::impl::metric_value
operator+=(const metric_value &c) (defined in seastar::metrics::impl::metric_value)seastar::metrics::impl::metric_valueinline
type() const (defined in seastar::metrics::impl::metric_value)seastar::metrics::impl::metric_valueinline
u (defined in seastar::metrics::impl::metric_value)seastar::metrics::impl::metric_value
ui() const (defined in seastar::metrics::impl::metric_value)seastar::metrics::impl::metric_valueinline
+ + + + diff --git a/master/classseastar_1_1metrics_1_1impl_1_1metric__value.html b/master/classseastar_1_1metrics_1_1impl_1_1metric__value.html new file mode 100644 index 000000000..c0a6a249b --- /dev/null +++ b/master/classseastar_1_1metrics_1_1impl_1_1metric__value.html @@ -0,0 +1,166 @@ + + + + + + + +Seastar: seastar::metrics::impl::metric_value Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::impl::metric_value Class Reference
+
+
+

Detailed Description

+

A helper class that used to return metrics value.

+

Do not use directly

See also
metrics_creation
+
+

#include <seastar/core/metrics.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+data_type type () const
 
+double d () const
 
+uint64_t ui () const
 
+int64_t i () const
 
metric_value (histogram &&h, data_type t=data_type::HISTOGRAM)
 
metric_value (const histogram &h, data_type t=data_type::HISTOGRAM)
 
metric_value (double d, data_type t)
 
+metric_valueoperator+= (const metric_value &c)
 
+metric_value operator+ (const metric_value &c)
 
+const histogramget_histogram () const
 
bool is_empty () const noexcept
 return true if this metric was never used More...
 
+ + + + + +

+Public Attributes

+std::variant< double, histogramu
 
+data_type _type
 
+

Member Function Documentation

+ +

◆ is_empty()

+ +
+
+ + + + + +
+ + + + + + + +
bool seastar::metrics::impl::metric_value::is_empty () const
+
+inlinenoexcept
+
+ +

return true if this metric was never used

+

Histograms, Summaries and counters are ever growing by nature, so it is possible to check if they have been used or not.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1impl_1_1registered__metric-members.html b/master/classseastar_1_1metrics_1_1impl_1_1registered__metric-members.html new file mode 100644 index 000000000..72c5b466e --- /dev/null +++ b/master/classseastar_1_1metrics_1_1impl_1_1registered__metric-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::impl::registered_metric Member List
+
+
+ +

This is the complete list of members for seastar::metrics::impl::registered_metric, including all inherited members.

+ + + + + + + + + + +
get_function() const (defined in seastar::metrics::impl::registered_metric)seastar::metrics::impl::registered_metricinline
get_id() const (defined in seastar::metrics::impl::registered_metric)seastar::metrics::impl::registered_metricinline
info() const (defined in seastar::metrics::impl::registered_metric)seastar::metrics::impl::registered_metricinline
info() (defined in seastar::metrics::impl::registered_metric)seastar::metrics::impl::registered_metricinline
is_enabled() const (defined in seastar::metrics::impl::registered_metric)seastar::metrics::impl::registered_metricinline
operator()() const (defined in seastar::metrics::impl::registered_metric)seastar::metrics::impl::registered_metricinline
registered_metric(metric_id id, metric_function f, bool enabled=true, skip_when_empty skip=skip_when_empty::no) (defined in seastar::metrics::impl::registered_metric)seastar::metrics::impl::registered_metric
set_enabled(bool b) (defined in seastar::metrics::impl::registered_metric)seastar::metrics::impl::registered_metricinline
set_skip_when_empty(skip_when_empty skip) noexcept (defined in seastar::metrics::impl::registered_metric)seastar::metrics::impl::registered_metricinline
+ + + + diff --git a/master/classseastar_1_1metrics_1_1impl_1_1registered__metric.html b/master/classseastar_1_1metrics_1_1impl_1_1registered__metric.html new file mode 100644 index 000000000..9c6ae48e1 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1impl_1_1registered__metric.html @@ -0,0 +1,116 @@ + + + + + + + +Seastar: seastar::metrics::impl::registered_metric Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::impl::registered_metric Class Referencefinal
+
+
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

registered_metric (metric_id id, metric_function f, bool enabled=true, skip_when_empty skip=skip_when_empty::no)
 
+metric_value operator() () const
 
+bool is_enabled () const
 
+void set_enabled (bool b)
 
+void set_skip_when_empty (skip_when_empty skip) noexcept
 
+const metric_idget_id () const
 
+const metric_infoinfo () const
 
+metric_infoinfo ()
 
+const metric_function & get_function () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram-members.html b/master/classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram-members.html new file mode 100644 index 000000000..1ba17f386 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram-members.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision > Member List
+
+
+ +

This is the complete list of members for seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
add(uint64_t n)seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
approximate_exponential_histogram() (defined in seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >)seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
clear()seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
count() constseastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
find_bucket_index(uint64_t val) constseastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
get(size_t bucket) const (defined in seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >)seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
get_bucket_lower_limit(uint16_t bucket_id) constseastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
get_bucket_upper_limit(uint16_t bucket_id) constseastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
get_schema() const noexceptseastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
max() constseastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
mean() constseastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
merge(const approximate_exponential_histogram &b)seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
merge (defined in seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >)seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >friend
min() constseastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
min_as_native_histogram_id() const noexceptseastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
operator*=(double v)seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
operator[](size_t b) noexcept (defined in seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >)seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
quantile(float quantile) constseastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
size() constseastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
to_metrics_histogram() const noexcept (defined in seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >)seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >inline
+ + + + diff --git a/master/classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html b/master/classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html new file mode 100644 index 000000000..1f1df58bd --- /dev/null +++ b/master/classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html @@ -0,0 +1,351 @@ + + + + + + + +Seastar: seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision > Class Template Reference
+
+
+

Detailed Description

+
template<uint64_t Min, uint64_t Max, size_t Precision>
+class seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >

This is a pseudo-exponential implementation of an estimated histogram.

+

An exponential-histogram with coefficient 'coef', is a histogram where for bucket 'i' the lower limit is coef^i and the higher limit is coef^(i+1).

+

A pseudo-exponential is similar but the bucket limits are an approximation.

+

The approximate_exponential_histogram is an efficient pseudo-exponential implementation.

+

The histogram is defined by a Min and Max value limits, and a Precision (all should be power of 2 and will be explained).

+

When adding a value to a histogram: All values lower than Min will be included in the first bucket (the assumption is that it's not suppose to happen but it is ok if it does).

+

All values higher than Max will be included in the last bucket that serves as the infinity bucket (the assumption is that it can happen but it is rare).

+

Note the difference between the first and last buckets. The first bucket is just like a regular bucket but has a second roll to collect unexpected low values. The last bucket, also known as the infinity bucket, collect all values that passes the defined Max, it only collect those values.

+

+Buckets Distribution (limits)

+

The buckets limits in the histogram are defined similar to a floating-point representation.

+

Buckets limits have an exponent part and a linear part.

+

The exponential part is a power of 2. Each power-of-2 range [2^n..2^n+1) is split linearly to 'Precision' number of buckets.

+

The total number of buckets is: NUM_BUCKETS = log2(Max/Min)*Precision +1

+

For example, if the Min value is 128, the Max is 1024 and the Precision is 4, the number of buckets is 13.

+

Anything below 160 will be in the bucket 0, anything above 1024 will be in bucket 13. Note that the first bucket will include all values below Min.

+

the range [128, 1024) will be split into log2(1024/128) = 3 ranges: 128, 256, 512, 1024 Or more mathematically: [128, 256), [256, 512), [512,1024)

+

Each range is split into 4 (The Precision). 128 | 256 | 512 | 1024 128 160 192 224| 256 320 384 448| 512 640 768 896|

+

To get the exponential part of an index you divide by the Precision. The linear part of the index is Modulus the precision.

+

Calculating the bucket lower limit of bucket i: The exponential part: exp_part = 2^floor(i/Precision)* Min with the above example 2^floor(i/4)*128 The linear part: (iPrecision) * (exp_part/Precision) With the example: (i%4) * (exp_part/4)

+

So the lower limit of bucket 6: 2^floor(6/4)* 128 = 256 (6%4) * 256/4 = 128 lower-limit = 384

+

+How to find a bucket index for a value

+

The bucket index consist of two parts: higher bits (exponential part) are based on log2(value/min)

+

lower bits (linear part) are based on the 'n' MSB (ignoring the leading 1) where n=log2(Precision). Continuing with the example where the number of precision bits: PRECISION_BITS = log2(4) = 2

+

for example: 330 (101001010) The number of precision_bits: PRECISION_BITS = log2(4) = 2 higher bits: log2(330/128) = 1 MSB: 01 (the highest two bits following the leading 1) So the index: 101 = 5

+

+About the Min, Max and Precision

+

For Min, Max and Precision, choose numbers that are a power of 2.

+

Limitation: You must set the MIN value to be higher or equal to the Precision.

+
Parameters
+ + + + +
Min- The lowest expected value. A value below that will be set to the Min value.
Max- The highest number to consider. A value above that is considered infinite.
Precision- The number of buckets in each range (where a range is the i^2..i^(2+1) )
+
+
+
+

#include <seastar/core/internal/estimated_histogram.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+uint64_t get_bucket_lower_limit (uint16_t bucket_id) const
 Returns the bucket lower limit given the bucket id. The first and last bucket will always return the MIN and MAX respectively.
 
+uint64_t get_bucket_upper_limit (uint16_t bucket_id) const
 Returns the bucket upper limit given the bucket id. The last bucket (Infinity bucket) will return UMAX_INT.
 
+uint16_t find_bucket_index (uint64_t val) const
 Find the bucket index for a given value The position of a value that is lower or equal to Min will always be 0. The position of a value that is higher or equal to MAX will always be NUM_BUCKETS - 1.
 
+void clear ()
 clear the current values.
 
+void add (uint64_t n)
 Add an item to the histogram Increments the count of the bucket holding that value.
 
uint64_t min () const
 returns the smallest value that could have been added to this histogram This method looks for the first non-empty bucket and returns its lower limit. Note that for non-empty histogram the lowest potentail value is Min. More...
 
uint64_t max () const
 returns the largest value that could have been added to this histogram. This method looks for the first non empty bucket and return its upper limit. If the histogram overflowed, it will returns UINT64_MAX. More...
 
+approximate_exponential_histogrammerge (const approximate_exponential_histogram &b)
 merge a histogram to the current one.
 
+uint64_t get (size_t bucket) const
 
uint64_t quantile (float quantile) const
 get a histogram quantile More...
 
+uint64_t mean () const
 returns the mean histogram value (average of bucket offsets, weighted by count) It will return 0 if the histogram is empty.
 
+size_t size () const
 returns the number of buckets;
 
+uint64_t count () const
 returns the total number of values inserted
 
+approximate_exponential_histogramoperator*= (double v)
 multiple all the buckets content in the histogram by a constant
 
+uint64_t & operator[] (size_t b) noexcept
 
int32_t get_schema () const noexcept
 get_schema the schema of a native histogram More...
 
int32_t min_as_native_histogram_id () const noexcept
 return the histogram min as a native histogram ID More...
 
+seastar::metrics::histogram to_metrics_histogram () const noexcept
 
+

Member Function Documentation

+ +

◆ get_schema()

+ +
+
+
+template<uint64_t Min, uint64_t Max, size_t Precision>
+ + + + + +
+ + + + + + + +
int32_t seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >::get_schema () const
+
+inlinenoexcept
+
+ +

get_schema the schema of a native histogram

+

Native histograms (also known as sparse histograms), are an experimental Prometheus feature.

+

schema defines the bucket schema. Currently, valid numbers are -4 <= n <= 8. They are all for base-2 bucket schemas, where 1 is a bucket boundary in each case, and then each power of two is divided into 2^n logarithmic buckets. Or in other words, each bucket boundary is the previous boundary times 2^(2^-n).

+ +
+
+ +

◆ max()

+ +
+
+
+template<uint64_t Min, uint64_t Max, size_t Precision>
+ + + + + +
+ + + + + + + +
uint64_t seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >::max () const
+
+inline
+
+ +

returns the largest value that could have been added to this histogram. This method looks for the first non empty bucket and return its upper limit. If the histogram overflowed, it will returns UINT64_MAX.

+

It will return 0 if the histogram is empty.

+ +
+
+ +

◆ min()

+ +
+
+
+template<uint64_t Min, uint64_t Max, size_t Precision>
+ + + + + +
+ + + + + + + +
uint64_t seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >::min () const
+
+inline
+
+ +

returns the smallest value that could have been added to this histogram This method looks for the first non-empty bucket and returns its lower limit. Note that for non-empty histogram the lowest potentail value is Min.

+

It will return 0 if the histogram is empty.

+ +
+
+ +

◆ min_as_native_histogram_id()

+ +
+
+
+template<uint64_t Min, uint64_t Max, size_t Precision>
+ + + + + +
+ + + + + + + +
int32_t seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >::min_as_native_histogram_id () const
+
+inlinenoexcept
+
+ +

return the histogram min as a native histogram ID

+

Native histograms (also known as sparse histograms), are an experimental Prometheus feature.

+

Native histograms always starts from 1, while approximate_exponential_histogram have a min first bucket This function returns approximate_exponential_histogram min value as the bucket id of native histogram.

+ +
+
+ +

◆ quantile()

+ +
+
+
+template<uint64_t Min, uint64_t Max, size_t Precision>
+ + + + + +
+ + + + + + + + +
uint64_t seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >::quantile (float quantile) const
+
+inline
+
+ +

get a histogram quantile

+

This method will returns the estimated value at a given quantile. If there are N values in the histogram. It would look for the bucket that the total number of elements in the buckets before it are less than N * quantile and return that bucket lower limit.

+

For example, quantile(0.5) will find the bucket that that sum of all buckets values below it is less than half and will return that bucket lower limit. In this example, this is a median estimation.

+

It will return 0 if the histogram is empty.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1internal_1_1time__estimated__histogram-members.html b/master/classseastar_1_1metrics_1_1internal_1_1time__estimated__histogram-members.html new file mode 100644 index 000000000..32dcb382c --- /dev/null +++ b/master/classseastar_1_1metrics_1_1internal_1_1time__estimated__histogram-members.html @@ -0,0 +1,100 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::internal::time_estimated_histogram Member List
+
+
+ +

This is the complete list of members for seastar::metrics::internal::time_estimated_histogram, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
add(const T &latency) (defined in seastar::metrics::internal::time_estimated_histogram)seastar::metrics::internal::time_estimated_histograminline
approximate_exponential_histogram< 512, 33554432, 4 >::add(uint64_t n)seastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >inline
add_micro(uint64_t n) (defined in seastar::metrics::internal::time_estimated_histogram)seastar::metrics::internal::time_estimated_histograminline
clear()seastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >inline
count() constseastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >inline
find_bucket_index(uint64_t val) constseastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >inline
get_bucket_lower_limit(uint16_t bucket_id) constseastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >inline
get_bucket_upper_limit(uint16_t bucket_id) constseastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >inline
get_schema() const noexceptseastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >inline
max() constseastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >inline
mean() constseastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >inline
merge(const time_estimated_histogram &b) (defined in seastar::metrics::internal::time_estimated_histogram)seastar::metrics::internal::time_estimated_histograminline
approximate_exponential_histogram< 512, 33554432, 4 >::merge(const approximate_exponential_histogram &b)seastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >inline
min() constseastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >inline
min_as_native_histogram_id() const noexceptseastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >inline
operator*=(double v)seastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >inline
quantile(float quantile) constseastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >inline
size() constseastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >inline
+ + + + diff --git a/master/classseastar_1_1metrics_1_1internal_1_1time__estimated__histogram.html b/master/classseastar_1_1metrics_1_1internal_1_1time__estimated__histogram.html new file mode 100644 index 000000000..0f57c0e0d --- /dev/null +++ b/master/classseastar_1_1metrics_1_1internal_1_1time__estimated__histogram.html @@ -0,0 +1,323 @@ + + + + + + + +Seastar: seastar::metrics::internal::time_estimated_histogram Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::internal::time_estimated_histogram Class Reference
+
+
+

Detailed Description

+

estimated histogram for duration values time_estimated_histogram is used for short task timing. It covers the range of 0.5ms to 33s with a precision of 4.

+

512us, 640us, 768us, 896us, 1024us, 1280us, 1536us, 1792us...16s, 20s, 25s, 29s, 33s (33554432us)

+
+

#include <seastar/core/internal/estimated_histogram.hh>

+
+Inheritance diagram for seastar::metrics::internal::time_estimated_histogram:
+
+
+ + +seastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 > + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+time_estimated_histogrammerge (const time_estimated_histogram &b)
 
+void add_micro (uint64_t n)
 
+template<typename T >
void add (const T &latency)
 
+uint64_t get_bucket_lower_limit (uint16_t bucket_id) const
 Returns the bucket lower limit given the bucket id. The first and last bucket will always return the MIN and MAX respectively.
 
+uint64_t get_bucket_upper_limit (uint16_t bucket_id) const
 Returns the bucket upper limit given the bucket id. The last bucket (Infinity bucket) will return UMAX_INT.
 
+uint16_t find_bucket_index (uint64_t val) const
 Find the bucket index for a given value The position of a value that is lower or equal to Min will always be 0. The position of a value that is higher or equal to MAX will always be NUM_BUCKETS - 1.
 
+void clear ()
 clear the current values.
 
+void add (uint64_t n)
 Add an item to the histogram Increments the count of the bucket holding that value.
 
uint64_t min () const
 returns the smallest value that could have been added to this histogram This method looks for the first non-empty bucket and returns its lower limit. Note that for non-empty histogram the lowest potentail value is Min. More...
 
uint64_t max () const
 returns the largest value that could have been added to this histogram. This method looks for the first non empty bucket and return its upper limit. If the histogram overflowed, it will returns UINT64_MAX. More...
 
+approximate_exponential_histogrammerge (const approximate_exponential_histogram &b)
 merge a histogram to the current one.
 
+uint64_t get (size_t bucket) const
 
uint64_t quantile (float quantile) const
 get a histogram quantile More...
 
+uint64_t mean () const
 returns the mean histogram value (average of bucket offsets, weighted by count) It will return 0 if the histogram is empty.
 
+size_t size () const
 returns the number of buckets;
 
+uint64_t count () const
 returns the total number of values inserted
 
+approximate_exponential_histogramoperator*= (double v)
 multiple all the buckets content in the histogram by a constant
 
+uint64_t & operator[] (size_t b) noexcept
 
int32_t get_schema () const noexcept
 get_schema the schema of a native histogram More...
 
int32_t min_as_native_histogram_id () const noexcept
 return the histogram min as a native histogram ID More...
 
+seastar::metrics::histogram to_metrics_histogram () const noexcept
 
+

Member Function Documentation

+ +

◆ get_schema()

+ +
+
+ + + + + +
+ + + + + + + +
int32_t seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >::get_schema () const
+
+inlinenoexceptinherited
+
+ +

get_schema the schema of a native histogram

+

Native histograms (also known as sparse histograms), are an experimental Prometheus feature.

+

schema defines the bucket schema. Currently, valid numbers are -4 <= n <= 8. They are all for base-2 bucket schemas, where 1 is a bucket boundary in each case, and then each power of two is divided into 2^n logarithmic buckets. Or in other words, each bucket boundary is the previous boundary times 2^(2^-n).

+ +
+
+ +

◆ max()

+ +
+
+ + + + + +
+ + + + + + + +
uint64_t seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >::max () const
+
+inlineinherited
+
+ +

returns the largest value that could have been added to this histogram. This method looks for the first non empty bucket and return its upper limit. If the histogram overflowed, it will returns UINT64_MAX.

+

It will return 0 if the histogram is empty.

+ +
+
+ +

◆ min()

+ +
+
+ + + + + +
+ + + + + + + +
uint64_t seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >::min () const
+
+inlineinherited
+
+ +

returns the smallest value that could have been added to this histogram This method looks for the first non-empty bucket and returns its lower limit. Note that for non-empty histogram the lowest potentail value is Min.

+

It will return 0 if the histogram is empty.

+ +
+
+ +

◆ min_as_native_histogram_id()

+ +
+
+ + + + + +
+ + + + + + + +
int32_t seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >::min_as_native_histogram_id () const
+
+inlinenoexceptinherited
+
+ +

return the histogram min as a native histogram ID

+

Native histograms (also known as sparse histograms), are an experimental Prometheus feature.

+

Native histograms always starts from 1, while approximate_exponential_histogram have a min first bucket This function returns approximate_exponential_histogram min value as the bucket id of native histogram.

+ +
+
+ +

◆ quantile()

+ +
+
+ + + + + +
+ + + + + + + + +
uint64_t seastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >::quantile (float quantile) const
+
+inlineinherited
+
+ +

get a histogram quantile

+

This method will returns the estimated value at a given quantile. If there are N values in the histogram. It would look for the bucket that the total number of elements in the buckets before it are less than N * quantile and return that bucket lower limit.

+

For example, quantile(0.5) will find the bucket that that sum of all buckets values below it is less than half and will return that bucket lower limit. In this example, this is a median estimation.

+

It will return 0 if the histogram is empty.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1internal_1_1time__estimated__histogram.png b/master/classseastar_1_1metrics_1_1internal_1_1time__estimated__histogram.png new file mode 100644 index 0000000000000000000000000000000000000000..10366fa7fed0e2c1793b0c7f55800d8acef76ccd GIT binary patch literal 1427 zcmb`HX;9L67{}2TJ3QB1uU5&@c6G8t49l}EkN(==ovxbXq*)p{E^8iOw5ye-E{T?A zVHqBkp=p7siRYL{S$QW4Dk`B80s;X7``>-J)64zMJiq7r%zS2^H=lWO1CTzt+swB? zAP`;Pgl7;0qQL@lz?MzmpX5&%0h?*S$q+BKS`Eg}tKt+w*DWypTOA!8(A;SlIBxkp z2pJ3kp?}`kK!^hb0^J38{t}X=!6U8wCbHA%^khn>jw8 zaYQUD)=D37b8_PrjI4;UqcUXRM@w;%=qZOg=dHfNul*Q5&hT*Vl`xHId&*WO5T9p; z=s~HSg0oXx*O=%_nXPI*)-?5l{=^sZ(0QgVGX4AHh)vF+-A$H?G@h` zXycs1Fl;?So}Jm)EiE19N&77KS4TK{cwxQ zkR_y_I7pC7(_q5&zWXXAGnH??hw$r?83RkGJGUV@#nVmHDMt=bcGraVj?@nFkS*-X zekr432hFv{E7^Q{NsB^N+9EyviJ=I*3p)P?6L;3X`edRG5OyY^)~UNaCgBfi0ed;8 z|L2a><(jXO7xymF=7t^2n!S4rgu%T>e)8y_u7sY%$eaVy44*`w4{xt-7zbJI<`oge zff~QEgK0rm)ZFF=J$RRYHyJ)Jq`)K6%kSUoo;?t|5pnEnY1 + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::label Member List
+
+
+ +

This is the complete list of members for seastar::metrics::label, including all inherited members.

+ + + + + +
instance typedef (defined in seastar::metrics::label)seastar::metrics::label
label(const sstring &key)seastar::metrics::labelinlineexplicit
name() constseastar::metrics::labelinline
operator()(T value) constseastar::metrics::labelinline
+ + + + diff --git a/master/classseastar_1_1metrics_1_1label.html b/master/classseastar_1_1metrics_1_1label.html new file mode 100644 index 000000000..cf7f41afb --- /dev/null +++ b/master/classseastar_1_1metrics_1_1label.html @@ -0,0 +1,151 @@ + + + + + + + +Seastar: seastar::metrics::label Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::label Class Reference
+
+
+

Detailed Description

+

Class that creates label instances.

+

A factory class to create label instance Typically, the same Label name is used in multiple places. label is a label factory, you create it once, and use it to create the label_instance.

+

In the example we would like to label the smp_queue with with the queue owner

+

seastar::metrics::label smp_owner("smp_owner");

+

now, when creating a new smp metric we can add a label to it:

+

sm::make_queue_length("send_batch_queue_length", _last_snt_batch, {smp_owner(cpuid)})

+

where cpuid in this case is unsiged.

+
+

#include <seastar/core/metrics.hh>

+ + + + +

+Public Types

+using instance = label_instance
 
+ + + + + + + + + + + +

+Public Member Functions

label (const sstring &key)
 creating a label key is the label name, it will be the key for all label_instance that will be created from this label.
 
template<typename T >
instance operator() (T value) const
 creating a label instance More...
 
+const sstring & name () const
 returns the label name
 
+

Member Function Documentation

+ +

◆ operator()()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
instance seastar::metrics::label::operator() (value) const
+
+inline
+
+ +

creating a label instance

+

Use the function operator to create a new label instance. T - the value type can be any type that can be lexical_cast to string (ie. if it support the redirection operator for stringstream).

+

All primitive types are supported so if lab is a label, all the following examples are valid: lab(1) lab("my_value") lab(-1)

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1label__instance-members.html b/master/classseastar_1_1metrics_1_1label__instance-members.html new file mode 100644 index 000000000..362c1f106 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1label__instance-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::label_instance Member List
+
+
+ +

This is the complete list of members for seastar::metrics::label_instance, including all inherited members.

+ + + + + + + +
key() constseastar::metrics::label_instanceinline
label_instance(const sstring &key, T v)seastar::metrics::label_instanceinline
operator!=(const label_instance &) const (defined in seastar::metrics::label_instance)seastar::metrics::label_instance
operator<(const label_instance &) const (defined in seastar::metrics::label_instance)seastar::metrics::label_instance
operator==(const label_instance &) const (defined in seastar::metrics::label_instance)seastar::metrics::label_instance
value() constseastar::metrics::label_instanceinline
+ + + + diff --git a/master/classseastar_1_1metrics_1_1label__instance.html b/master/classseastar_1_1metrics_1_1label__instance.html new file mode 100644 index 000000000..c0f878ec4 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1label__instance.html @@ -0,0 +1,159 @@ + + + + + + + +Seastar: seastar::metrics::label_instance Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::label_instance Class Reference
+
+
+

Detailed Description

+

Label a metrics.

+

Label are useful for adding information about a metric that later you would need to aggregate by. For example, if you have multiple queues on a shard. Adding the queue id as a Label will allow you to use the same name of the metrics with multiple id instances.

+

label_instance holds an instance of label consist of a key and value.

+

Typically you will not generate a label_instance yourself, but use a label object for that.

See also
label for more information
+
+

#include <seastar/core/metrics.hh>

+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

template<typename T >
 label_instance (const sstring &key, T v)
 create a label_instance label instance consists of key and value. The key is an sstring. T - the value type can be any type that can be fmt::format'ed to string (ie. if it provides fmt::format<T> specialization). More...
 
+const sstring key () const
 returns the label key
 
+const sstring value () const
 returns the label value
 
+bool operator< (const label_instance &) const
 
+bool operator== (const label_instance &) const
 
+bool operator!= (const label_instance &) const
 
+

Constructor & Destructor Documentation

+ +

◆ label_instance()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
seastar::metrics::label_instance::label_instance (const sstring & key,
v 
)
+
+inline
+
+ +

create a label_instance label instance consists of key and value. The key is an sstring. T - the value type can be any type that can be fmt::format'ed to string (ie. if it provides fmt::format<T> specialization).

+

All primitive types are supported so all the following examples are valid: label_instance a("smp_queue", 1) label_instance a("my_key", "my_value") label_instance a("internal_id", -1)

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1metric__definition-members.html b/master/classseastar_1_1metrics_1_1metric__definition-members.html new file mode 100644 index 000000000..b9027b417 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1metric__definition-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::metric_definition Member List
+
+
+ +

This is the complete list of members for seastar::metrics::metric_definition, including all inherited members.

+ + + + + +
metric_definition(const impl::metric_definition_impl &impl) noexcept (defined in seastar::metrics::metric_definition)seastar::metrics::metric_definition
metric_definition(metric_definition &&m) noexcept (defined in seastar::metrics::metric_definition)seastar::metrics::metric_definition
metric_groups (defined in seastar::metrics::metric_definition)seastar::metrics::metric_definition
~metric_definition() (defined in seastar::metrics::metric_definition)seastar::metrics::metric_definition
+ + + + diff --git a/master/classseastar_1_1metrics_1_1metric__definition.html b/master/classseastar_1_1metrics_1_1metric__definition.html new file mode 100644 index 000000000..4a7e152e7 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1metric__definition.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: seastar::metrics::metric_definition Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::metric_definition Class Reference
+
+
+ + + + + + +

+Public Member Functions

metric_definition (const impl::metric_definition_impl &impl) noexcept
 
metric_definition (metric_definition &&m) noexcept
 
+ + + +

+Public Attributes

+friend metric_groups
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1metric__group-members.html b/master/classseastar_1_1metrics_1_1metric__group-members.html new file mode 100644 index 000000000..798d4bcc1 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1metric__group-members.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::metric_group Member List
+
+
+ +

This is the complete list of members for seastar::metrics::metric_group, including all inherited members.

+ + + + + + + + + + + + + + + +
add_group(const group_name_type &name, const std::initializer_list< metric_definition > &l)seastar::metrics::metric_groups
add_group(const group_name_type &name, const std::vector< metric_definition > &l)seastar::metrics::metric_groups
clear()seastar::metrics::metric_groups
metric_group() noexcept (defined in seastar::metrics::metric_group)seastar::metrics::metric_group
metric_group(const metric_group &)=delete (defined in seastar::metrics::metric_group)seastar::metrics::metric_group
metric_group(metric_group &&)=default (defined in seastar::metrics::metric_group)seastar::metrics::metric_group
metric_group(const group_name_type &name, std::initializer_list< metric_definition > l)seastar::metrics::metric_group
metric_groups() noexcept (defined in seastar::metrics::metric_groups)seastar::metrics::metric_groups
metric_groups(metric_groups &&)=default (defined in seastar::metrics::metric_groups)seastar::metrics::metric_groups
metric_groups(std::initializer_list< metric_group_definition > mg)seastar::metrics::metric_groups
operator=(metric_group &&)=default (defined in seastar::metrics::metric_group)seastar::metrics::metric_group
operator=(metric_groups &&)=default (defined in seastar::metrics::metric_groups)seastar::metrics::metric_groups
~metric_group() (defined in seastar::metrics::metric_group)seastar::metrics::metric_groupvirtual
~metric_groups() (defined in seastar::metrics::metric_groups)seastar::metrics::metric_groupsvirtual
+ + + + diff --git a/master/classseastar_1_1metrics_1_1metric__group.html b/master/classseastar_1_1metrics_1_1metric__group.html new file mode 100644 index 000000000..e7129402a --- /dev/null +++ b/master/classseastar_1_1metrics_1_1metric__group.html @@ -0,0 +1,209 @@ + + + + + + + +Seastar: seastar::metrics::metric_group Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::metric_group Class Reference
+
+
+

Detailed Description

+

hold a single metric group Initialization is done in the constructor or with a call to add_group

+
+

#include <seastar/core/metrics_registration.hh>

+
+Inheritance diagram for seastar::metrics::metric_group:
+
+
+ + +seastar::metrics::metric_groups + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

metric_group (const metric_group &)=delete
 
metric_group (metric_group &&)=default
 
+metric_groupoperator= (metric_group &&)=default
 
metric_group (const group_name_type &name, std::initializer_list< metric_definition > l)
 add metrics belong to the same group in the constructor.
 
metric_groupsadd_group (const group_name_type &name, const std::initializer_list< metric_definition > &l)
 Add metrics belonging to the same group. More...
 
metric_groupsadd_group (const group_name_type &name, const std::vector< metric_definition > &l)
 Add metrics belonging to the same group. More...
 
+void clear ()
 clear all metrics groups registrations.
 
+

Member Function Documentation

+ +

◆ add_group() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
metric_groups & seastar::metrics::metric_groups::add_group (const group_name_typename,
const std::initializer_list< metric_definition > & l 
)
+
+inherited
+
+ +

Add metrics belonging to the same group.

+

Use the metrics creation functions to add metrics.

+

For example: _metrics.add_group("my_group", { make_counter("my_counter_name1", counter, description("my counter description")), make_counter("my_counter_name2", counter, description("my second counter description")), make_gauge("my_gauge_name1", gauge, description("my gauge description")), });

+

Metric name should be unique inside the group. You can chain add_group calls like: _metrics.add_group("my group1", {...}).add_group("my group2", {...});

+

This overload (with initializer_list) is needed because metric_definition has no copy constructor, so the other overload (with vector) cannot be invoked on a braced-init-list.

+ +
+
+ +

◆ add_group() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
metric_groups & seastar::metrics::metric_groups::add_group (const group_name_typename,
const std::vector< metric_definition > & l 
)
+
+inherited
+
+ +

Add metrics belonging to the same group.

+

Use the metrics creation functions to add metrics.

+

For example: vector<metric_definition> v; v.push_back(make_counter("my_counter_name1", counter, description("my counter description"))); v.push_back(make_counter("my_counter_name2", counter, description("my second counter description"))); v.push_back(make_gauge("my_gauge_name1", gauge, description("my gauge description"))); _metrics.add_group("my_group", v);

+

Metric name should be unique inside the group. You can chain add_group calls like: _metrics.add_group("my group1", vec1).add_group("my group2", vec2);

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1metric__group.png b/master/classseastar_1_1metrics_1_1metric__group.png new file mode 100644 index 0000000000000000000000000000000000000000..d059a36c600bc05a8a99524304c341627eeff06a GIT binary patch literal 728 zcmeAS@N?(olHy`uVBq!ia0vp^JApWWgBeH`S*WN0DTx4|5ZC|z{{xvX-h3_XKQsZz z0^*r@8iBrI;V@gH+o#+H9e`CxkhcLN^dB8<)kIXdwpV`@!y>k z^16Pq_obct6xW@+ye)=n{om)Sa~FMmqkHX7y1e=1-*?%MUfbz=!>w$sZQWI;dDHdG zG=HYwU-~6SyH&EVm;cW3<0p2Qb~kfAInLO>ct_cdMTKFTH+4T*d3#AetXY-cG$Ll(oL$x@rEdluUCnam{gtkyy`db{(|7mpnW-yVdGGgM+2vEtTrN9q zQ{Gmy`u@|(*yuaCo#JO2j%Yv4@}BhO^F7(@?&#;oZz*|R57>Ppe6P6T{k(O(+f^)M zr{0lsoRk$iFJ{s&6PPEjdhG*x+@0~yOgV<_S8`9v_wQbGe_9Ree$8LCC)0BoCDwZK z8H7!iNm!$1c_6~KsA1!*Ck)A^CmD}rO=9l3s=_X@8cjiz=F$@Hi41uwVB)_{?DqR^ z^tJVovAM$q`3cN(UcdH#d*Zs(Ozu6^Z|&oAh1aI%Z+vF|d&kT>@9i|Uoy$FBwkiAV z#tm&Y`ms3^{%n39RJCpDp`IPb*z=qd+1^gMelr>xjIS5e{Y{>Bx}$jeLJqFrd#T?4 z&d<8P^!yfSoyrvlA8mSi=zW=uN^LUoIJ9(b9 z^S-P0>D_B}-)%d>o#yapYSC8J#@c(klXDAS|A~lZShvtD_{^%+6Y|ZkACo@ta@CV> s91L6a{P`{{gn4e>RokUg@>bMG?NfW1cm821Fc~s + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::metric_group_definition Member List
+
+
+ +

This is the complete list of members for seastar::metrics::metric_group_definition, including all inherited members.

+ + + + + + +
metric_group_definition(const group_name_type &name, std::initializer_list< metric_definition > l) (defined in seastar::metrics::metric_group_definition)seastar::metrics::metric_group_definition
metric_group_definition(const metric_group_definition &)=delete (defined in seastar::metrics::metric_group_definition)seastar::metrics::metric_group_definition
metrics (defined in seastar::metrics::metric_group_definition)seastar::metrics::metric_group_definition
name (defined in seastar::metrics::metric_group_definition)seastar::metrics::metric_group_definition
~metric_group_definition() (defined in seastar::metrics::metric_group_definition)seastar::metrics::metric_group_definition
+ + + + diff --git a/master/classseastar_1_1metrics_1_1metric__group__definition.html b/master/classseastar_1_1metrics_1_1metric__group__definition.html new file mode 100644 index 000000000..6eb8c02da --- /dev/null +++ b/master/classseastar_1_1metrics_1_1metric__group__definition.html @@ -0,0 +1,105 @@ + + + + + + + +Seastar: seastar::metrics::metric_group_definition Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::metric_group_definition Class Reference
+
+
+ + + + + + +

+Public Member Functions

metric_group_definition (const group_name_type &name, std::initializer_list< metric_definition > l)
 
metric_group_definition (const metric_group_definition &)=delete
 
+ + + + + +

+Public Attributes

+group_name_type name
 
+std::initializer_list< metric_definitionmetrics
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1metric__groups-members.html b/master/classseastar_1_1metrics_1_1metric__groups-members.html new file mode 100644 index 000000000..09e9a5d6e --- /dev/null +++ b/master/classseastar_1_1metrics_1_1metric__groups-members.html @@ -0,0 +1,90 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::metric_groups Member List
+
+
+ +

This is the complete list of members for seastar::metrics::metric_groups, including all inherited members.

+ + + + + + + + + +
add_group(const group_name_type &name, const std::initializer_list< metric_definition > &l)seastar::metrics::metric_groups
add_group(const group_name_type &name, const std::vector< metric_definition > &l)seastar::metrics::metric_groups
clear()seastar::metrics::metric_groups
metric_groups() noexcept (defined in seastar::metrics::metric_groups)seastar::metrics::metric_groups
metric_groups(metric_groups &&)=default (defined in seastar::metrics::metric_groups)seastar::metrics::metric_groups
metric_groups(std::initializer_list< metric_group_definition > mg)seastar::metrics::metric_groups
operator=(metric_groups &&)=default (defined in seastar::metrics::metric_groups)seastar::metrics::metric_groups
~metric_groups() (defined in seastar::metrics::metric_groups)seastar::metrics::metric_groupsvirtual
+ + + + diff --git a/master/classseastar_1_1metrics_1_1metric__groups.html b/master/classseastar_1_1metrics_1_1metric__groups.html new file mode 100644 index 000000000..8deaa2f72 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1metric__groups.html @@ -0,0 +1,213 @@ + + + + + + + +Seastar: seastar::metrics::metric_groups Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::metric_groups Class Reference
+
+
+

Detailed Description

+

holds the metric definition.

+

metric_groups

+

Add multiple metric groups definitions. Initialization can be done in the constructor or with a call to add_group

See also
metrics.hh for example and supported metrics
+
+

#include <seastar/core/metrics_registration.hh>

+
+Inheritance diagram for seastar::metrics::metric_groups:
+
+
+ + +seastar::metrics::metric_group + +
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

metric_groups (metric_groups &&)=default
 
+metric_groupsoperator= (metric_groups &&)=default
 
 metric_groups (std::initializer_list< metric_group_definition > mg)
 add metrics belong to the same group in the constructor. More...
 
metric_groupsadd_group (const group_name_type &name, const std::initializer_list< metric_definition > &l)
 Add metrics belonging to the same group. More...
 
metric_groupsadd_group (const group_name_type &name, const std::vector< metric_definition > &l)
 Add metrics belonging to the same group. More...
 
+void clear ()
 clear all metrics groups registrations.
 
+

Constructor & Destructor Documentation

+ +

◆ metric_groups()

+ +
+
+ + + + + + + + +
seastar::metrics::metric_groups::metric_groups (std::initializer_list< metric_group_definitionmg)
+
+ +

add metrics belong to the same group in the constructor.

+

combine the constructor with the add_group functionality.

+ +
+
+

Member Function Documentation

+ +

◆ add_group() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
metric_groups & seastar::metrics::metric_groups::add_group (const group_name_typename,
const std::initializer_list< metric_definition > & l 
)
+
+ +

Add metrics belonging to the same group.

+

Use the metrics creation functions to add metrics.

+

For example: _metrics.add_group("my_group", { make_counter("my_counter_name1", counter, description("my counter description")), make_counter("my_counter_name2", counter, description("my second counter description")), make_gauge("my_gauge_name1", gauge, description("my gauge description")), });

+

Metric name should be unique inside the group. You can chain add_group calls like: _metrics.add_group("my group1", {...}).add_group("my group2", {...});

+

This overload (with initializer_list) is needed because metric_definition has no copy constructor, so the other overload (with vector) cannot be invoked on a braced-init-list.

+ +
+
+ +

◆ add_group() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
metric_groups & seastar::metrics::metric_groups::add_group (const group_name_typename,
const std::vector< metric_definition > & l 
)
+
+ +

Add metrics belonging to the same group.

+

Use the metrics creation functions to add metrics.

+

For example: vector<metric_definition> v; v.push_back(make_counter("my_counter_name1", counter, description("my counter description"))); v.push_back(make_counter("my_counter_name2", counter, description("my second counter description"))); v.push_back(make_gauge("my_gauge_name1", gauge, description("my gauge description"))); _metrics.add_group("my_group", v);

+

Metric name should be unique inside the group. You can chain add_group calls like: _metrics.add_group("my group1", vec1).add_group("my group2", vec2);

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1metrics_1_1metric__groups.png b/master/classseastar_1_1metrics_1_1metric__groups.png new file mode 100644 index 0000000000000000000000000000000000000000..a2062b90cd01a095423625bf88c5804aece44e59 GIT binary patch literal 733 zcmeAS@N?(olHy`uVBq!ia0vp^JApWWgBeH`S*WN0DTx4|5ZC|z{{xvX-h3_XKQsZz z0^csAC-;BNS-O!&!*=#GG5hS)$mQ$IJoe?R zzB0`ySVHjmj{|$_dqlsVc$C2ObKk*Q?R9d~GTvN0`)1SQBe|C}Ui`>PJN;|>u6^0F zSDHs$TgTRYdRlO~dZltS-^W#q-?g_cs)*5Q*?an~`@J*M`fT3+{nsZvNi(>6=^J5<4j<#D4?bo^|OrM59(d^k_M#!K^V07Lv`<_FVu>Hd6N82;te~GuKV?W?ulk_%bvvCb5(_1 zVl_;Mn&p8A-=c<%vz{;{o1SDmmW8U|!HPM>|E9@VKL4XTQT1iptS6I9!Y0Q|I<~6c z#`Dt5xMg~u+w(lRelhJ-nfvA$x>sja;C`>*WsDL$FIljm6< zu3A-pPON(Sj>|&)GZ;JFPu^*!CZdGhbYJa@I-n!Y!GFJGnQPP2QHo`A#A y)9TfyCzGx$^wjeN27_wm8nI7viuW!4$GGR5I*ZJoGy8#Qk-^i|&t;ucLK6U`h-AY6 literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1metrics_1_1relabel__config__regex-members.html b/master/classseastar_1_1metrics_1_1relabel__config__regex-members.html new file mode 100644 index 000000000..bc18368a2 --- /dev/null +++ b/master/classseastar_1_1metrics_1_1relabel__config__regex-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::metrics::relabel_config_regex Member List
+
+
+ +

This is the complete list of members for seastar::metrics::relabel_config_regex, including all inherited members.

+ + + + + + + + + + +
empty() const noexcept (defined in seastar::metrics::relabel_config_regex)seastar::metrics::relabel_config_regexinline
match(const std::string &str) const noexcept (defined in seastar::metrics::relabel_config_regex)seastar::metrics::relabel_config_regexinline
operator=(const char *expr) (defined in seastar::metrics::relabel_config_regex)seastar::metrics::relabel_config_regexinline
operator=(const std::string &expr) (defined in seastar::metrics::relabel_config_regex)seastar::metrics::relabel_config_regexinline
regex() const noexcept (defined in seastar::metrics::relabel_config_regex)seastar::metrics::relabel_config_regexinline
relabel_config_regex()=default (defined in seastar::metrics::relabel_config_regex)seastar::metrics::relabel_config_regex
relabel_config_regex(const std::string &expr) (defined in seastar::metrics::relabel_config_regex)seastar::metrics::relabel_config_regexinline
relabel_config_regex(const char *expr) (defined in seastar::metrics::relabel_config_regex)seastar::metrics::relabel_config_regexinline
str() const noexcept (defined in seastar::metrics::relabel_config_regex)seastar::metrics::relabel_config_regexinline
+ + + + diff --git a/master/classseastar_1_1metrics_1_1relabel__config__regex.html b/master/classseastar_1_1metrics_1_1relabel__config__regex.html new file mode 100644 index 000000000..e02f092fb --- /dev/null +++ b/master/classseastar_1_1metrics_1_1relabel__config__regex.html @@ -0,0 +1,118 @@ + + + + + + + +Seastar: seastar::metrics::relabel_config_regex Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::metrics::relabel_config_regex Class Reference
+
+
+

Detailed Description

+

a wrapper class around regex with the original expr

+

regex does not contain the original expression, this wrapper class acts both as a string and as a regex.

+
+

#include <seastar/core/relabel_config.hh>

+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

relabel_config_regex (const std::string &expr)
 
relabel_config_regex (const char *expr)
 
+const std::string & str () const noexcept
 
+const std::regex & regex () const noexcept
 
+relabel_config_regexoperator= (const char *expr)
 
+relabel_config_regexoperator= (const std::string &expr)
 
+bool empty () const noexcept
 
+bool match (const std::string &str) const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1named__semaphore__aborted-members.html b/master/classseastar_1_1named__semaphore__aborted-members.html new file mode 100644 index 000000000..fbfe56a07 --- /dev/null +++ b/master/classseastar_1_1named__semaphore__aborted-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::named_semaphore_aborted Member List
+
+
+ +

This is the complete list of members for seastar::named_semaphore_aborted, including all inherited members.

+ + + +
named_semaphore_aborted(std::string_view msg) noexcept (defined in seastar::named_semaphore_aborted)seastar::named_semaphore_aborted
what() const noexceptseastar::named_semaphore_abortedvirtual
+ + + + diff --git a/master/classseastar_1_1named__semaphore__aborted.html b/master/classseastar_1_1named__semaphore__aborted.html new file mode 100644 index 000000000..12fbf241c --- /dev/null +++ b/master/classseastar_1_1named__semaphore__aborted.html @@ -0,0 +1,135 @@ + + + + + + + +Seastar: seastar::named_semaphore_aborted Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::named_semaphore_aborted Class Reference
+
+
+
+Inheritance diagram for seastar::named_semaphore_aborted:
+
+
+ + +seastar::semaphore_aborted +seastar::abort_requested_exception + +
+ + + + + + + +

+Public Member Functions

named_semaphore_aborted (std::string_view msg) noexcept
 
virtual const char * what () const noexcept
 Reports the exception reason. More...
 
+

Member Function Documentation

+ +

◆ what()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const char * seastar::named_semaphore_aborted::what () const
+
+virtualnoexcept
+
+ +

Reports the exception reason.

+ +

Reimplemented from seastar::semaphore_aborted.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1named__semaphore__aborted.png b/master/classseastar_1_1named__semaphore__aborted.png new file mode 100644 index 0000000000000000000000000000000000000000..8fff5950dc910860f4a3eacc33b7ed95bdf8d080 GIT binary patch literal 1419 zcma)+k55xq6vv+m44Jjtz|4U_Hd~OwP=Uf6zoLTdQ48|JRpddZOc)lV0v1IQy zgalzMtStZlz<@smgriZ4(qg^|)iS!-12k+uayT;3Xf&ef)b#v0)<3tt7SkM= zJ-Rhd4-bg|&`WD;pd-=^08FjHfc=r@H)u*U0u^CPpd&Z#uf@v~TtPmo_jrS-d#jfr z-PQuL+48_LDcA|K3%)Z1}d?&fX~`aRD-d@NrWrq}~mS61@i&^V}Ku#4Nr9d|6>nj_GyQB&?hoLfv!uz)MkRmtJd>m{w9S{0+ zbR14%p_x@44pTV}<4_C0+4~U?2s8Tij9*E?9!&$ogYXnlQ3WR|R+_y) zWI>-13?rni8D8CpayUaH+`U{&9lYi=Ar4E?4iAgq0@}hulP)sRr;+O-8tdc}AYUOv zwtF?VZ|Ycom{*)HGR^CFBO6m5wymvqx?b@8s91F&(LqX6X*%O)9k3~hj|COo_0&@@ z_aVKyhYj_H4$hXp<)`nLjuX@*&(pKKJiKF<`onSCNX;{wdkJTY%l(_EHi%|%)TdZW zNomH;P{NQ>S#6t-i@M92Q{`L1s%Rn3)9W6K29M%-3}dP+-<6Z_1GyChzYA)`gW3PZAvn;#XE?{UF>~rwk1^kQ zG@)|c@~vU7N73)~MCP#qoTPf$POzCH z-y(JtLHokZ_)8L4u-x86j;J2(z8T|A0Aorz+M>;PnmFFnqT~i9)^JfBvqRw{o2>B* z4ySgj57kfV0}5|t&6Rk}lu$}`GA9R0@YR?6Qkxl)5d(vO&6ttKWA5^q+!ytpL}$K= zdYic@Vp|G%Y5J#COzd3mOxpYr*ssFg_!jKtE**pxVR~^4oE~yE_G6*z6;qJJLe2*h zU9G%>gq|%W={g8{~!=*;R>KF`Kes-$`23Tlxwo5`0D2^tTjUDD_<#RVyZ!!c)k4EDiB_K>pi%hRF9qkLHvPP2 zXjf?RWh^CBO#9JOqmOQES9&OmOo=B*h>v$IN0rhR+4*Lgly9wx-L_X?Njkc3uwmqS z@~n(m{|sYg>0t`9j*P!V^Z!Xbx68^t;rHM%7oQ@4dS>+yEqo2kaw-TcA2=~3-Jdt`;cUEK~PS#AyjoDG1Dl;jZFlf zQOnz!9(yB9z<7XaVI(7lWMpASSx=p=vKZ*ko!h9pKmL&sErd?GN+V#X8~D97&`FI> OP5=xH2|y0~a`k^K{>d%? literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1named__semaphore__timed__out-members.html b/master/classseastar_1_1named__semaphore__timed__out-members.html new file mode 100644 index 000000000..5ae8a2695 --- /dev/null +++ b/master/classseastar_1_1named__semaphore__timed__out-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::named_semaphore_timed_out Member List
+
+
+ +

This is the complete list of members for seastar::named_semaphore_timed_out, including all inherited members.

+ + + +
named_semaphore_timed_out(std::string_view msg) noexcept (defined in seastar::named_semaphore_timed_out)seastar::named_semaphore_timed_out
what() const noexceptseastar::named_semaphore_timed_outvirtual
+ + + + diff --git a/master/classseastar_1_1named__semaphore__timed__out.html b/master/classseastar_1_1named__semaphore__timed__out.html new file mode 100644 index 000000000..40a246b97 --- /dev/null +++ b/master/classseastar_1_1named__semaphore__timed__out.html @@ -0,0 +1,135 @@ + + + + + + + +Seastar: seastar::named_semaphore_timed_out Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::named_semaphore_timed_out Class Reference
+
+
+
+Inheritance diagram for seastar::named_semaphore_timed_out:
+
+
+ + +seastar::semaphore_timed_out +seastar::timed_out_error + +
+ + + + + + + +

+Public Member Functions

named_semaphore_timed_out (std::string_view msg) noexcept
 
virtual const char * what () const noexcept
 Reports the exception reason. More...
 
+

Member Function Documentation

+ +

◆ what()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const char * seastar::named_semaphore_timed_out::what () const
+
+virtualnoexcept
+
+ +

Reports the exception reason.

+ +

Reimplemented from seastar::semaphore_timed_out.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1named__semaphore__timed__out.png b/master/classseastar_1_1named__semaphore__timed__out.png new file mode 100644 index 0000000000000000000000000000000000000000..fb73ae4ec7a969de1e677dd6d9390589c8a53ca6 GIT binary patch literal 1378 zcma)+YfzF|7{}3;5iBz!-Ledu(8^M@QZu})g=4R#n7U$K*lg4F(xw)uh^(y9Hf?2& zTPka0H+(ZTb)!&0kcF(2h*5Kj@J1z~>7tS1HTKor+0UMt-~V~endi&@obx;vBEo~M zEbT2}Fqjo^2pRho{sfNXhc2^B{u8|8Sz$ncA4| zT0QqiJ&VP@6NUUuHFXsg%J&;AdC?9op55jlcQO?F!Fz6+q4AUyP&e;F$22cIV)7K| zB-BYYl|M^6#6d|<@cqKBxv{kpKXL>o1FM)2>o`q@6m>4KhNa40XjKKKrcC)|jQoRGv(JqCwU%&TcIxtQW152#eN88kWyMLRi;cD_3X0 zJ~nVW0QoQd5D(fo1L+jcoH3y`QHT+NS5P65!Tq5Xe{Z>)66>#}78|@;K#!r*@ew62 zo*un;FiFY9sY5$67D}>KQ!b=#bTJ%G@Nalt35OpN9{sT@vE0@BEXJWriM%M2-{eyr zl1tmc0+a<(-DbUV=7Ec-OuoOCe_R~854Q=kD|haoboZsP#_Eu&!TKRyrHnFJ6l&1^5B~`Wfw?w99W+%69)NTHbd#Z zSEr?V0G$%c1Hh*Tj#n}L`IYWKCoaEfe5C$8ui^7>SwFBHaG*2Ydx_xU&CTTChjYDO z8;;+z!&a5MmYtg%QQt4ZWcuiht0v%@g7$|huV^hRHl%gWc@h4xLVk;sfNv3Wa}6Kk zc`+8wK%&UGXNv3A=2dr=TihS67j1K@i8RE}>WpM5r~Xucyz%X?)P51dU1>y=U!G-l zj~I}Zz9)~S7mW(_>!{fC?8*+izk(50dS!{mDbknP5TVh1h*&C^&BiLW4U*nINtk?j zJ47$~Q&$*-?e(t<=6i}?hw}8;{2C0K)6f#=G)$-4Xha;}uxB1;|Rdf&5sC;>*QlUY#_#a6gplv9l7hJMBgXR5p%XD(wOpFbZK887Ezfi z6wPP{*owD3udHr{sW-<36ykge9A0fSjw3V|Y14VwLL#S^R$-WHF4uNL|M-YDGHzqS zjTRk;^KqeJhhlQ1EJ)y4F=S!;lwWQ>Z%v<{Camof2C^&|F?GcO58I-uo^N4f!vCXJ eoCVE;V+$+3(GK`;sqR>ujW8f69AA6jSkXT!?5Ah| literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1arp-members.html b/master/classseastar_1_1net_1_1arp-members.html new file mode 100644 index 000000000..e8e6d344b --- /dev/null +++ b/master/classseastar_1_1net_1_1arp-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::arp Member List
+
+
+ +

This is the complete list of members for seastar::net::arp, including all inherited members.

+ + + + +
add(uint16_t proto_num, arp_for_protocol *afp) (defined in seastar::net::arp)seastar::net::arp
arp(interface *netif) (defined in seastar::net::arp)seastar::net::arpexplicit
del(uint16_t proto_num) (defined in seastar::net::arp)seastar::net::arp
+ + + + diff --git a/master/classseastar_1_1net_1_1arp.html b/master/classseastar_1_1net_1_1arp.html new file mode 100644 index 000000000..600760423 --- /dev/null +++ b/master/classseastar_1_1net_1_1arp.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: seastar::net::arp Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::arp Class Reference
+
+
+ + + + + + + + +

+Public Member Functions

arp (interface *netif)
 
+void add (uint16_t proto_num, arp_for_protocol *afp)
 
+void del (uint16_t proto_num)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1arp__error-members.html b/master/classseastar_1_1net_1_1arp__error-members.html new file mode 100644 index 000000000..b9ca0c797 --- /dev/null +++ b/master/classseastar_1_1net_1_1arp__error-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::arp_error Member List
+
+
+ +

This is the complete list of members for seastar::net::arp_error, including all inherited members.

+ + +
arp_error(const std::string &msg) (defined in seastar::net::arp_error)seastar::net::arp_errorinline
+ + + + diff --git a/master/classseastar_1_1net_1_1arp__error.html b/master/classseastar_1_1net_1_1arp__error.html new file mode 100644 index 000000000..8fe33db2f --- /dev/null +++ b/master/classseastar_1_1net_1_1arp__error.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: seastar::net::arp_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::arp_error Class Reference
+
+
+
+Inheritance diagram for seastar::net::arp_error:
+
+
+ + +seastar::net::arp_queue_full_error +seastar::net::arp_timeout_error + +
+ + + + +

+Public Member Functions

arp_error (const std::string &msg)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1arp__error.png b/master/classseastar_1_1net_1_1arp__error.png new file mode 100644 index 0000000000000000000000000000000000000000..d19a534d4ad95f713fb77bdaf05557e7b364222a GIT binary patch literal 1816 zcmb_deK^xw9RIC7(bElgZbV-1rd&!Y584!l^0 z$n-K6hJ?vWHIe{kc#7)a{S{=seFk-|so+d(QWJKA-RRIi~^x za5^j3t^@!;2k+}e1OONt(giEv&O#UOa96OmMx%k$@hN3;?(IBC`>zWGg5{^4 zT0qkkM~DF=05V!?eOJuu-!{gbjgs(%4uEkZm9kF-Zf>)VB=hk@_5hDV-^9Omp39-?v z*)7n?ov~_4Irm_s=}gIVGa9clg6s@V{L##oJtq>f!}J7Ey4x_?t=iE zHaj4}TwfD6_j0PvoT;Nb_;j+(ndZix`{1Iid_I|OxECvjJ$cQ1~pAfHvUTXtv2BxX7&44jBxdVYeAZ%+hSoF)ccpC^QHoDxC{Ge>=UQpw_Yn%YaO zsC_0&r*kf$S+nN-^^Lb~w1Ne3k3qnkdUwDNUaMWUMA@fiKDy~QtUDX{`7x%tEZ7!!7^@CPRBeufg*H$ttm zU~(XsLu!srX^z()Ib0MJ_CJbwPrBO)2SgwcLe>*BJ#nd| z){+gw80h@Yp_))q$KoN`)x{?9q1G$zLN^%uEkWK)7`*X*WAR^AHAMwVXWO}v3CDDo zSJhj9x0#Gcg2SmZW&Ad_Vtqu`lh{C%Y&XCjex%^P_GM;m?WVO2kz}#< z<)YE!Mf?tSV4imdmTvqQ`dEtbU(HHppTu=3gd(W9~x={)ym>b*A$q;krY zt#=1A>q(69<0{HBp!TEG*_jDPtJ?eFNk$7Vc58q|2xrsuP(8th00-MIk{DgVCiDNFdfJkwO8&Er)Z~S<=Qubf%_frS)&FXJ3P8a1sLH$3P~E z_OlsIik_M4ceIOT$!D{dxUWL=n$#z^;>5l2wl{htH}4dK^v&1xx0KDl4FRLF_w6Le zI)hW{cuj6souZJ@4^H&ePwwlSG@eOOrZJM%UGf(jz7U>HOPgy8*UZ2fGgD!v3%O2B z2Q=>cXlm6k((jC+9_Ape)voPld8>kOyW^ZRepO@Fk8vABIW2Xa6$6)g>7*U@itL;I zBudLree>^$Nea0rU8;M4--@=S7h`(jfeP6iuwXSl;CyuTMIWlGC aqV~l=Ph^G2!U+1t0K9jASB>YMKmP?^Qe~_F literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1arp__for-members.html b/master/classseastar_1_1net_1_1arp__for-members.html new file mode 100644 index 000000000..2fb12ebc2 --- /dev/null +++ b/master/classseastar_1_1net_1_1arp__for-members.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::arp_for< L3 > Member List
+
+
+ +

This is the complete list of members for seastar::net::arp_for< L3 >, including all inherited members.

+ + + + + + + + + + + + + + +
_arp (defined in seastar::net::arp_for_protocol)seastar::net::arp_for_protocolprotected
_proto_num (defined in seastar::net::arp_for_protocol)seastar::net::arp_for_protocolprotected
arp_for(arp &a) (defined in seastar::net::arp_for< L3 >)seastar::net::arp_for< L3 >inlineexplicit
arp_for_protocol(arp &a, uint16_t proto_num) (defined in seastar::net::arp_for_protocol)seastar::net::arp_for_protocol
forward(forward_hash &out_hash_data, packet &p, size_t off) (defined in seastar::net::arp_for_protocol)seastar::net::arp_for_protocolinlinevirtual
l2addr typedef (defined in seastar::net::arp_for< L3 >)seastar::net::arp_for< L3 >
l3addr typedef (defined in seastar::net::arp_for< L3 >)seastar::net::arp_for< L3 >
learn(l2addr l2, l3addr l3) (defined in seastar::net::arp_for< L3 >)seastar::net::arp_for< L3 >
lookup(const l3addr &addr) (defined in seastar::net::arp_for< L3 >)seastar::net::arp_for< L3 >
run() (defined in seastar::net::arp_for< L3 >)seastar::net::arp_for< L3 >
send_query(const l3addr &paddr) (defined in seastar::net::arp_for< L3 >)seastar::net::arp_for< L3 >
set_self_addr(l3addr addr) (defined in seastar::net::arp_for< L3 >)seastar::net::arp_for< L3 >inline
~arp_for_protocol() (defined in seastar::net::arp_for_protocol)seastar::net::arp_for_protocolvirtual
+ + + + diff --git a/master/classseastar_1_1net_1_1arp__for.html b/master/classseastar_1_1net_1_1arp__for.html new file mode 100644 index 000000000..007a4354a --- /dev/null +++ b/master/classseastar_1_1net_1_1arp__for.html @@ -0,0 +1,140 @@ + + + + + + + +Seastar: seastar::net::arp_for< L3 > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::arp_for< L3 > Class Template Reference
+
+
+
+Inheritance diagram for seastar::net::arp_for< L3 >:
+
+
+ + +seastar::net::arp_for_protocol + +
+ + + + + + +

+Public Types

+using l2addr = ethernet_address
 
+using l3addr = typename L3::address_type
 
+ + + + + + + + + + + + + + + +

+Public Member Functions

+future send_query (const l3addr &paddr)
 
arp_for (arp &a)
 
+future< ethernet_addresslookup (const l3addr &addr)
 
+void learn (l2addr l2, l3addr l3)
 
+void run ()
 
+void set_self_addr (l3addr addr)
 
+virtual bool forward (forward_hash &out_hash_data, packet &p, size_t off)
 
+ + + + + +

+Protected Attributes

+arp_arp
 
+uint16_t _proto_num
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1arp__for.png b/master/classseastar_1_1net_1_1arp__for.png new file mode 100644 index 0000000000000000000000000000000000000000..cb401e8cc8d30dda5cc7a7f4a71b33abdb865cad GIT binary patch literal 701 zcmeAS@N?(olHy`uVBq!ia0vp^8-X~0gBeIBzE8OTq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0d^}woLn;{G&V8GASb@it-#qC4|B2Uo z7@jTGocb)wBWI_Q#X3ug<3CRq${Y`RG+{~WmQK}^;j<$q)tEZUsJx65*5fkvD?h0B z`+7%urM*I*CCAx3)bkeA2OO_mzawtm9Rs)bZtoaxrpe}V zuUizo*>GymoR^}LzHFcM>cHpRU)=F8U%PhHPg_rAQn-!u8t)|=aG&dV-USuGw`&9GRe{LJH3 z9r1@P(q_*rKl0JB^jGi^(evG_GG?&n$3^baxhC^X;tL-oGW`1foYAw)78&qol`;+09&?ChX4Qo literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1arp__for__protocol-members.html b/master/classseastar_1_1net_1_1arp__for__protocol-members.html new file mode 100644 index 000000000..f98f7e72d --- /dev/null +++ b/master/classseastar_1_1net_1_1arp__for__protocol-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::arp_for_protocol Member List
+
+
+ +

This is the complete list of members for seastar::net::arp_for_protocol, including all inherited members.

+ + + + + + + +
_arp (defined in seastar::net::arp_for_protocol)seastar::net::arp_for_protocolprotected
_proto_num (defined in seastar::net::arp_for_protocol)seastar::net::arp_for_protocolprotected
arp_for_protocol(arp &a, uint16_t proto_num) (defined in seastar::net::arp_for_protocol)seastar::net::arp_for_protocol
forward(forward_hash &out_hash_data, packet &p, size_t off) (defined in seastar::net::arp_for_protocol)seastar::net::arp_for_protocolinlinevirtual
received(packet p)=0 (defined in seastar::net::arp_for_protocol)seastar::net::arp_for_protocolpure virtual
~arp_for_protocol() (defined in seastar::net::arp_for_protocol)seastar::net::arp_for_protocolvirtual
+ + + + diff --git a/master/classseastar_1_1net_1_1arp__for__protocol.html b/master/classseastar_1_1net_1_1arp__for__protocol.html new file mode 100644 index 000000000..ab7bde47e --- /dev/null +++ b/master/classseastar_1_1net_1_1arp__for__protocol.html @@ -0,0 +1,118 @@ + + + + + + + +Seastar: seastar::net::arp_for_protocol Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::arp_for_protocol Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::net::arp_for_protocol:
+
+
+ + +seastar::net::arp_for< seastar::net::ipv4 > +seastar::net::arp_for< L3 > + +
+ + + + + + + + +

+Public Member Functions

arp_for_protocol (arp &a, uint16_t proto_num)
 
+virtual future received (packet p)=0
 
+virtual bool forward (forward_hash &out_hash_data, packet &p, size_t off)
 
+ + + + + +

+Protected Attributes

+arp_arp
 
+uint16_t _proto_num
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1arp__for__protocol.png b/master/classseastar_1_1net_1_1arp__for__protocol.png new file mode 100644 index 0000000000000000000000000000000000000000..9c24b310defc3ed7cf83218b7ebd48d86c1362de GIT binary patch literal 1044 zcmeAS@N?(olHy`uVBq!ia0y~yV0;H;2XHV0$rp8LSAmp7fKQ0)|Ns9%B5%Hy_8*!6 zWP$O40|!_;@5lqW93?@1!3;n}AaM0mh!Fz=^I}gI$B+ufw{u@lTCE_!HoJe-p8v}8 zRl4{x%v^fk-JE&1L~=sG%(jR62U?d*nWWEf=TY9*h0+IjQE`H?tn8PbiB;;KR^7dK zpZQO1UFW-hnJsw@YfIc;-ZU`n|Cp`mzxVF`v%JT*e``Pd-{xDu{ugQQo(GziU-NtX zGr57!$^3w{oS~dlc>k)Z3-&d)zG?Fw|764a`&y3C<()Z)2U@?v_j43T|NDA5_qFf^ zp2jEUF# zZMQ}R7Q=tR@dca3+;xrn4R&APEwFn0)cz0S)#V}Wc@4~+mw6wsm9OT%%aF%` zgbUVLFP##@D8Ml1B(DO)2ZtAI9}c}0+s8OZU>D<_g6*>V7;Atm8Np4AcYrh@?DwQ> z_uV^854g`i*Dhh+p-2XPxNGb4IiFSU6rKCY6|>&fdy@K^JkL)qFQ%!Ox8!*iIl~$4 z?^HbPFJE+7xqRZ1SD#Pb$j-g~YTv@&zYVqWFD6?~Kfv--je-UJ~3j|DaamEcwu{ z8@4>Wye&S{V%qE6$a}Xom*2SYRa)9e`0CqT`h9`BC-G+9eYLLmsL8~uCYvIP_x{w; z&w9JfF6E85n%KdcOMgF-FpaktyQlKGT5aaM;JKRm(~S145DK~;^r}h@rfJf&s#ikD&P8~_T-;g5;L`3CYdEo-l-ycVqT`_CAM8{ccz|Eed%zn z@8b1Re)AWer+@jE&KF;7ad%RQWc`a0?@Rel%wJAhV$6AW(v!9ex}Ly91ZC`aeaB literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1arp__queue__full__error-members.html b/master/classseastar_1_1net_1_1arp__queue__full__error-members.html new file mode 100644 index 000000000..ce8928114 --- /dev/null +++ b/master/classseastar_1_1net_1_1arp__queue__full__error-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::arp_queue_full_error Member List
+
+
+ +

This is the complete list of members for seastar::net::arp_queue_full_error, including all inherited members.

+ + + +
arp_error(const std::string &msg) (defined in seastar::net::arp_error)seastar::net::arp_errorinline
arp_queue_full_error() (defined in seastar::net::arp_queue_full_error)seastar::net::arp_queue_full_errorinline
+ + + + diff --git a/master/classseastar_1_1net_1_1arp__queue__full__error.html b/master/classseastar_1_1net_1_1arp__queue__full__error.html new file mode 100644 index 000000000..07d517956 --- /dev/null +++ b/master/classseastar_1_1net_1_1arp__queue__full__error.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: seastar::net::arp_queue_full_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::arp_queue_full_error Class Reference
+
+
+
+Inheritance diagram for seastar::net::arp_queue_full_error:
+
+
+ + +seastar::net::arp_error + +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1arp__queue__full__error.png b/master/classseastar_1_1net_1_1arp__queue__full__error.png new file mode 100644 index 0000000000000000000000000000000000000000..29bb5e36ee18d294f654765a435d7d47d5891fe2 GIT binary patch literal 1262 zcmeAS@N?(olHy`uVBq!ia0vp^r-1kX2Q!c?QsDUmq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IYLYCT;XLn;{G&V609+JJ}c`YE4%-|HVc z?}&_<#NZp%+aD#iVMDL@?NjkynoD^#CS74#spNUlL)5eD*z%BLaegJ&LjS%A{}U|g z`AbGVK(qh7^_)9D+D?4=Dc}0?(p4$v+LK3BURv3QYX;fYIJ$oQFkR{AVW5bSd|+hH z7Pt2PeKED`byb12b*%6#g7Vz(gZ z%$d021zj_5p8ugA>SaG~)2^QF!Ig3)<>A_W{ zp>wGDR>7Lr??Yrxmp)pi{&}%wLfW@JW36|sS5Hjeu3S9*?Sk)8JQM$FrKRax>^!i` zbN>3`GgHmA4l|3d7Y*mF5swf1IDh-Tq^)`1(vBYQp1C$M>?iBg(~Fe z#`IY-=g!Vzsc3CK?fex+M{AD$*Z|6j__whw=~{rAI`?6hw^bKt%S zI(kM&YVIkZKTR1AeBa5u#nD>pd$qCN+Z82hYj>C|nIy@hAV+i(0)?etfR|>j17k)b zG|@e7IK_CqzphVD^lF~}7a9MfUrR$%e@OIyd87aMZOFQ~#h2b+`?z|4&D8Z3DtsFh(h(W& i*yHjwQ-Y!%$SW)szj)HJ*%nwhF?hQAxvX + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::arp_timeout_error Member List
+
+
+ +

This is the complete list of members for seastar::net::arp_timeout_error, including all inherited members.

+ + + +
arp_error(const std::string &msg) (defined in seastar::net::arp_error)seastar::net::arp_errorinline
arp_timeout_error() (defined in seastar::net::arp_timeout_error)seastar::net::arp_timeout_errorinline
+ + + + diff --git a/master/classseastar_1_1net_1_1arp__timeout__error.html b/master/classseastar_1_1net_1_1arp__timeout__error.html new file mode 100644 index 000000000..7ea1294ea --- /dev/null +++ b/master/classseastar_1_1net_1_1arp__timeout__error.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: seastar::net::arp_timeout_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::arp_timeout_error Class Reference
+
+
+
+Inheritance diagram for seastar::net::arp_timeout_error:
+
+
+ + +seastar::net::arp_error + +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1arp__timeout__error.png b/master/classseastar_1_1net_1_1arp__timeout__error.png new file mode 100644 index 0000000000000000000000000000000000000000..0719baf20f27753220eda3f865f43492065af025 GIT binary patch literal 1226 zcmeAS@N?(olHy`uVBq!ia0vp^+kyB12Q!c?oX&IwNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?!gM0&b7hEy=VoqKW9CMzDd@W(y(fA9Yo z$ZaALQj-0rTCI9>L)#V|uNB*;1f6OKP|38o6g}yYN4{s*2;b;#LIQrUZI{;QPNwSQml&3+UA@tw%8_gg{_q}{526}x0xX{k}|boN)j(@Qt4 zQQv%Y^4FBO+GjWPU%5=``~2|slI<$C2_gBOzZ72TdKLnCM+-mdEuHd_;fGjy1Eb`X z-!*c!JLy%6Z7$?P<7$wQELmG`P@ z_L=Wl&e#7dc3o|y)xKxCp7BpifnGkbt2poa=j_*Jr;ELEefkStKXzMraN1+0NhJ-_ z_jF&`_B6*X)_r+<^qs%S+w%71^LkujjQg5*bhq*&e%DX8>vn}~ahuflp=$1)$F+Yy zryBJui>{rxM0wAzSi6}Aet+KkH{&tLl-}+7#VglruV3gl?duWkwfh|Ecb46Z^^dw= zrsv6i;(n!P)rq&&HK}VSFR6Y~;~gYJi|{D4n(N1W=;WCki%Yl9==6OtGwyy|`#ve{ z+YDySw6ymh_J7seK70B*gSqG49{o^sO=$V*eaU~npMTuGVt1X7@n+uhd-50GZHtf% zd-zMH^!4X*q2*=Os-LGmy(DB{eEWIBcImw@e}4-*EW53(S~e@i{^*&U!yB!3?%Dlx z$B~%o$Fcf5D!kuV{ZO=f`Br^h@AbX^_Wu0#F)7XV^%VbV`PJ`%DMaYj`uFRvbjJHH z^Usb9`SpAz_ljj_4Cn9IKTpS69B7C7zwe)nyML|UlYjs5a_lQNcw?der5c$BfDm;=ezv!PTozs`dzQAul-juTD#-& zy8VGic{lG$yt|fHY_ioo6A$Y(hrU|Ay7v6N$~v#)muB_{{{6jk=KNzFX5Gefx1atl zj5(C{;4E+BrHf}z&*j|pxHkX5I=@%`8Mb6hf9WIp&zT!i17FTh*IO{l=y=Vd zX!)ov?-<>f&u@2qO}V-AKzY6X{$I|2O5fiWf2J+61JpwExj ZA7uJ7Gi}=6&%lC*!PC{xWt~$(696|tbAA8- literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1config__exception-members.html b/master/classseastar_1_1net_1_1config__exception-members.html new file mode 100644 index 000000000..f8db0fedd --- /dev/null +++ b/master/classseastar_1_1net_1_1config__exception-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::config_exception Member List
+
+
+ +

This is the complete list of members for seastar::net::config_exception, including all inherited members.

+ + +
config_exception(const std::string &msg) (defined in seastar::net::config_exception)seastar::net::config_exceptioninline
+ + + + diff --git a/master/classseastar_1_1net_1_1config__exception.html b/master/classseastar_1_1net_1_1config__exception.html new file mode 100644 index 000000000..a106ff716 --- /dev/null +++ b/master/classseastar_1_1net_1_1config__exception.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: seastar::net::config_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::config_exception Class Reference
+
+
+
+Inheritance diagram for seastar::net::config_exception:
+
+
+ +
+ + + + +

+Public Member Functions

config_exception (const std::string &msg)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1config__exception.png b/master/classseastar_1_1net_1_1config__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..59ccc36d10eb82a3d3b727de71a5dd2fbc7e8604 GIT binary patch literal 901 zcmeAS@N?(olHy`uVBq!ia0vp^n}E23gBeJcY;~Lnq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0MLb;`Ln;{G&b>RWS%HU5-Td#p|Gn46 zG!M>S^>*3rIl}$HqMUu12cplMImR@3$wZG-&n~s8s+zO>r#wHw&Fm9vfBwStsj4rH z?}cou-gm11vxcte-0$60Gpf$|_G@2P^SoZ+e{;#U-`q2Az2jH=d3USlCDnUj?|P!L zJ(J>1*WY)Wr1#M=an02Cw}WGQP zU}D#Hi;d5^J)PTm(z(yG`8`uTZzVaTdj8T4ik!3v$m>cAGBcLuYLLidNH(1J>8;tE z&lRU8f6O??to6K$QNUk|*=6!6hKoy#986a72>9aRzA-c2yzziarV7mDXRAKl`5k(p zMBjwh@YE!cW2~vWm#_b0vG(`Rzpp0VzO^*w%(s3CbFa*t+L&e)*`he0pY6}T%Div2 z|9bH4{fXS4H!gLY#J6+F9j?;D2jzV}{Vpp%c}3atc#KX@`IPsw*LPd>rM#NBBw5dQ zfAf~N>6NzT`xoT|-3~vsZ;9&b@Ai5<&$}Mx?&^G&KYhYk(Zxr%6?FdQjhmgxRCC4c+FImd(N^|%+y1z3jjG*kph zD$ELD>rk7@2n@7_41C<}GiUa)vKa_LgR9u-=Mih!lFIx^{))2$?+4UbeJWV% zl-6C@XP2w)R{j3>`EF><%aC1bCjHH+TT*Pj#%1faxSdC)?|yf|bo#<)>3d#9@UQms zt(4p;xh*SNYkT9apd#6A^KM*?xnKVI0)N20B>f!Yia?2{%@KWdd#d&Z>6zaPjI&#` zb#B + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::conntrack Member List
+
+
+ +

This is the complete list of members for seastar::net::conntrack, including all inherited members.

+ + + + +
conntrack() (defined in seastar::net::conntrack)seastar::net::conntrackinline
get_handle() (defined in seastar::net::conntrack)seastar::net::conntrackinline
get_handle(shard_id cpu) (defined in seastar::net::conntrack)seastar::net::conntrackinline
+ + + + diff --git a/master/classseastar_1_1net_1_1conntrack.html b/master/classseastar_1_1net_1_1conntrack.html new file mode 100644 index 000000000..506bfd497 --- /dev/null +++ b/master/classseastar_1_1net_1_1conntrack.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: seastar::net::conntrack Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::conntrack Class Reference
+
+
+ + + + +

+Classes

class  handle
 
+ + + + + +

+Public Member Functions

+handle get_handle ()
 
+handle get_handle (shard_id cpu)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1conntrack_1_1handle-members.html b/master/classseastar_1_1net_1_1conntrack_1_1handle-members.html new file mode 100644 index 000000000..f926d7983 --- /dev/null +++ b/master/classseastar_1_1net_1_1conntrack_1_1handle-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::conntrack::handle Member List
+
+
+ +

This is the complete list of members for seastar::net::conntrack::handle, including all inherited members.

+ + + + + + + +
cpu() (defined in seastar::net::conntrack::handle)seastar::net::conntrack::handleinline
handle() (defined in seastar::net::conntrack::handle)seastar::net::conntrack::handleinline
handle(shard_id cpu, lw_shared_ptr< load_balancer > lb) (defined in seastar::net::conntrack::handle)seastar::net::conntrack::handleinline
handle(const handle &)=delete (defined in seastar::net::conntrack::handle)seastar::net::conntrack::handle
handle(handle &&)=default (defined in seastar::net::conntrack::handle)seastar::net::conntrack::handle
~handle() (defined in seastar::net::conntrack::handle)seastar::net::conntrack::handleinline
+ + + + diff --git a/master/classseastar_1_1net_1_1conntrack_1_1handle.html b/master/classseastar_1_1net_1_1conntrack_1_1handle.html new file mode 100644 index 000000000..5df807c10 --- /dev/null +++ b/master/classseastar_1_1net_1_1conntrack_1_1handle.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: seastar::net::conntrack::handle Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::conntrack::handle Class Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

handle (shard_id cpu, lw_shared_ptr< load_balancer > lb)
 
handle (const handle &)=delete
 
handle (handle &&)=default
 
+shard_id cpu ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1datagram-members.html b/master/classseastar_1_1net_1_1datagram-members.html new file mode 100644 index 000000000..a87bcfbfc --- /dev/null +++ b/master/classseastar_1_1net_1_1datagram-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::datagram Member List
+
+
+ +

This is the complete list of members for seastar::net::datagram, including all inherited members.

+ + + + + + +
datagram(std::unique_ptr< datagram_impl > &&impl) noexcept (defined in seastar::net::datagram)seastar::net::datagraminline
get_data() (defined in seastar::net::datagram)seastar::net::datagraminline
get_dst() (defined in seastar::net::datagram)seastar::net::datagraminline
get_dst_port() (defined in seastar::net::datagram)seastar::net::datagraminline
get_src() (defined in seastar::net::datagram)seastar::net::datagraminline
+ + + + diff --git a/master/classseastar_1_1net_1_1datagram.html b/master/classseastar_1_1net_1_1datagram.html new file mode 100644 index 000000000..fce7c5bb3 --- /dev/null +++ b/master/classseastar_1_1net_1_1datagram.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: seastar::net::datagram Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::datagram Class Referencefinal
+
+
+ + + + + + + + + + + + +

+Public Member Functions

datagram (std::unique_ptr< datagram_impl > &&impl) noexcept
 
+socket_address get_src ()
 
+socket_address get_dst ()
 
+uint16_t get_dst_port ()
 
+packetget_data ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1datagram__channel-members.html b/master/classseastar_1_1net_1_1datagram__channel-members.html new file mode 100644 index 000000000..4a5a9afdc --- /dev/null +++ b/master/classseastar_1_1net_1_1datagram__channel-members.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::datagram_channel Member List
+
+
+ +

This is the complete list of members for seastar::net::datagram_channel, including all inherited members.

+ + + + + + + + + + + + + + +
close()seastar::net::datagram_channel
datagram_channel() noexcept (defined in seastar::net::datagram_channel)seastar::net::datagram_channel
datagram_channel(std::unique_ptr< datagram_channel_impl >) noexcept (defined in seastar::net::datagram_channel)seastar::net::datagram_channel
datagram_channel(datagram_channel &&) noexcept (defined in seastar::net::datagram_channel)seastar::net::datagram_channel
is_closed() const (defined in seastar::net::datagram_channel)seastar::net::datagram_channel
local_address() const (defined in seastar::net::datagram_channel)seastar::net::datagram_channel
operator=(datagram_channel &&) noexcept (defined in seastar::net::datagram_channel)seastar::net::datagram_channel
receive() (defined in seastar::net::datagram_channel)seastar::net::datagram_channel
send(const socket_address &dst, const char *msg) (defined in seastar::net::datagram_channel)seastar::net::datagram_channel
send(const socket_address &dst, packet p) (defined in seastar::net::datagram_channel)seastar::net::datagram_channel
shutdown_input()seastar::net::datagram_channel
shutdown_output()seastar::net::datagram_channel
~datagram_channel() (defined in seastar::net::datagram_channel)seastar::net::datagram_channel
+ + + + diff --git a/master/classseastar_1_1net_1_1datagram__channel.html b/master/classseastar_1_1net_1_1datagram__channel.html new file mode 100644 index 000000000..d00f71234 --- /dev/null +++ b/master/classseastar_1_1net_1_1datagram__channel.html @@ -0,0 +1,143 @@ + + + + + + + +Seastar: seastar::net::datagram_channel Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::datagram_channel Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

datagram_channel (std::unique_ptr< datagram_channel_impl >) noexcept
 
datagram_channel (datagram_channel &&) noexcept
 
+datagram_channeloperator= (datagram_channel &&) noexcept
 
+socket_address local_address () const
 
+future< datagramreceive ()
 
+future send (const socket_address &dst, const char *msg)
 
+future send (const socket_address &dst, packet p)
 
+bool is_closed () const
 
+void shutdown_input ()
 Causes a pending receive() to complete (possibly with an exception)
 
+void shutdown_output ()
 Causes a pending send() to complete (possibly with an exception)
 
void close ()
 
+

Member Function Documentation

+ +

◆ close()

+ +
+
+ + + + + + + +
void seastar::net::datagram_channel::close ()
+
+

Close the channel and releases all resources.

+

Must be called only when there are no unfinished send() or receive() calls. You can force pending calls to complete soon by calling shutdown_input() and shutdown_output().

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1datagram__impl-members.html b/master/classseastar_1_1net_1_1datagram__impl-members.html new file mode 100644 index 000000000..cb6739566 --- /dev/null +++ b/master/classseastar_1_1net_1_1datagram__impl-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::datagram_impl Member List
+
+
+ +

This is the complete list of members for seastar::net::datagram_impl, including all inherited members.

+ + + + + + +
get_data()=0 (defined in seastar::net::datagram_impl)seastar::net::datagram_implpure virtual
get_dst()=0 (defined in seastar::net::datagram_impl)seastar::net::datagram_implpure virtual
get_dst_port()=0 (defined in seastar::net::datagram_impl)seastar::net::datagram_implpure virtual
get_src()=0 (defined in seastar::net::datagram_impl)seastar::net::datagram_implpure virtual
~datagram_impl() (defined in seastar::net::datagram_impl)seastar::net::datagram_implinlinevirtual
+ + + + diff --git a/master/classseastar_1_1net_1_1datagram__impl.html b/master/classseastar_1_1net_1_1datagram__impl.html new file mode 100644 index 000000000..83efbcad4 --- /dev/null +++ b/master/classseastar_1_1net_1_1datagram__impl.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: seastar::net::datagram_impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::datagram_impl Class Referenceabstract
+
+
+ + + + + + + + + + +

+Public Member Functions

+virtual socket_address get_src ()=0
 
+virtual socket_address get_dst ()=0
 
+virtual uint16_t get_dst_port ()=0
 
+virtual packetget_data ()=0
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1device-members.html b/master/classseastar_1_1net_1_1device-members.html new file mode 100644 index 000000000..ca8b4a180 --- /dev/null +++ b/master/classseastar_1_1net_1_1device-members.html @@ -0,0 +1,100 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::device Member List
+
+
+ +

This is the complete list of members for seastar::net::device, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
_queues (defined in seastar::net::device)seastar::net::deviceprotected
_rss_table_bits (defined in seastar::net::device)seastar::net::deviceprotected
device() (defined in seastar::net::device)seastar::net::deviceinline
forward_dst(unsigned src_cpuid, Func &&hashfn) (defined in seastar::net::device)seastar::net::deviceinline
hash2cpu(uint32_t hash) (defined in seastar::net::device)seastar::net::deviceinlinevirtual
hash2qid(uint32_t hash) (defined in seastar::net::device)seastar::net::deviceinlinevirtual
hw_address()=0 (defined in seastar::net::device)seastar::net::devicepure virtual
hw_features()=0 (defined in seastar::net::device)seastar::net::devicepure virtual
hw_queues_count() (defined in seastar::net::device)seastar::net::deviceinlinevirtual
init_local_queue(const program_options::option_group &opts, uint16_t qid)=0 (defined in seastar::net::device)seastar::net::devicepure virtual
l2receive(packet p) (defined in seastar::net::device)seastar::net::deviceinline
link_ready() (defined in seastar::net::device)seastar::net::deviceinlinevirtual
local_queue() (defined in seastar::net::device)seastar::net::deviceinline
queue_for_cpu(unsigned cpu) (defined in seastar::net::device)seastar::net::deviceinline
receive(std::function< future<>(packet)> next_packet) (defined in seastar::net::device)seastar::net::device
rss_key() const (defined in seastar::net::device)seastar::net::deviceinlinevirtual
set_local_queue(std::unique_ptr< qp > dev) (defined in seastar::net::device)seastar::net::device
~device() (defined in seastar::net::device)seastar::net::deviceinlinevirtual
+ + + + diff --git a/master/classseastar_1_1net_1_1device.html b/master/classseastar_1_1net_1_1device.html new file mode 100644 index 000000000..7fd62b0f6 --- /dev/null +++ b/master/classseastar_1_1net_1_1device.html @@ -0,0 +1,142 @@ + + + + + + + +Seastar: seastar::net::device Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::device Class Referenceabstract
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+qpqueue_for_cpu (unsigned cpu)
 
+qplocal_queue ()
 
+void l2receive (packet p)
 
+future receive (std::function< future<>(packet)> next_packet)
 
+virtual ethernet_address hw_address ()=0
 
+virtual net::hw_features hw_features ()=0
 
+virtual rss_key_type rss_key () const
 
+virtual uint16_t hw_queues_count ()
 
+virtual future link_ready ()
 
+virtual std::unique_ptr< qpinit_local_queue (const program_options::option_group &opts, uint16_t qid)=0
 
+virtual unsigned hash2qid (uint32_t hash)
 
+void set_local_queue (std::unique_ptr< qp > dev)
 
+template<typename Func >
unsigned forward_dst (unsigned src_cpuid, Func &&hashfn)
 
+virtual unsigned hash2cpu (uint32_t hash)
 
+ + + + + +

+Protected Attributes

+std::unique_ptr< qp *[]> _queues
 
+size_t _rss_table_bits = 0
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1dhcp-members.html b/master/classseastar_1_1net_1_1dhcp-members.html new file mode 100644 index 000000000..08f04a9eb --- /dev/null +++ b/master/classseastar_1_1net_1_1dhcp-members.html @@ -0,0 +1,90 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::dhcp Member List
+
+
+ +

This is the complete list of members for seastar::net::dhcp, including all inherited members.

+ + + + + + + + + +
default_timeout (defined in seastar::net::dhcp)seastar::net::dhcpstatic
dhcp(ipv4 &) (defined in seastar::net::dhcp)seastar::net::dhcp
dhcp(dhcp &&) noexcept (defined in seastar::net::dhcp)seastar::net::dhcp
discover(const steady_clock_type::duration &=default_timeout)seastar::net::dhcp
get_ipv4_filter() (defined in seastar::net::dhcp)seastar::net::dhcp
renew(const lease &, const steady_clock_type::duration &=default_timeout) (defined in seastar::net::dhcp)seastar::net::dhcp
result_type typedef (defined in seastar::net::dhcp)seastar::net::dhcp
~dhcp() (defined in seastar::net::dhcp)seastar::net::dhcp
+ + + + diff --git a/master/classseastar_1_1net_1_1dhcp.html b/master/classseastar_1_1net_1_1dhcp.html new file mode 100644 index 000000000..916c31abf --- /dev/null +++ b/master/classseastar_1_1net_1_1dhcp.html @@ -0,0 +1,222 @@ + + + + + + + +Seastar: seastar::net::dhcp Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::dhcp Class Reference
+
+
+ + + + +

+Classes

struct  lease
 
+ + + +

+Public Types

+typedef future< std::optional< lease > > result_type
 
+ + + + + + + + + + + +

+Public Member Functions

dhcp (ipv4 &)
 
dhcp (dhcp &&) noexcept
 
result_type discover (const steady_clock_type::duration &=default_timeout)
 
+result_type renew (const lease &, const steady_clock_type::duration &=default_timeout)
 
+ip_packet_filterget_ipv4_filter ()
 
+ + + +

+Static Public Attributes

+static const steady_clock_type::duration default_timeout
 
+

Class Documentation

+ +

◆ seastar::net::dhcp::lease

+ +
+
+ + + + +
struct seastar::net::dhcp::lease
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class Members
+ipv4_address +broadcast +
+ipv4_address +dhcp_server +
+ipv4_address +gateway +
+ipv4_address +ip +
+seconds +lease_time +
+uint16_t +mtu +
+vector< ipv4_address > +name_servers +
+ipv4_address +netmask +
+seconds +rebind_time +
+seconds +renew_time +
+ +
+
+

Member Function Documentation

+ +

◆ discover()

+ +
+
+ + + + + + + + +
result_type seastar::net::dhcp::discover (const steady_clock_type::duration &  = default_timeout)
+
+

Runs a discover/request sequence on the ipv4 "stack". During this execution the ipv4 will be "hijacked" more or less (through packet filter), and while not inoperable, most likely quite less efficient.

+

Please note that this does not modify the ipv4 object bound. It only makes queries and records replys for the related NIC. It is up to caller to use the returned information as he se fit.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1dns__resolver-members.html b/master/classseastar_1_1net_1_1dns__resolver-members.html new file mode 100644 index 000000000..aa457c0b6 --- /dev/null +++ b/master/classseastar_1_1net_1_1dns__resolver-members.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::dns_resolver Member List
+
+
+ +

This is the complete list of members for seastar::net::dns_resolver, including all inherited members.

+ + + + + + + + + + + + + + + +
close()seastar::net::dns_resolver
dns_resolver() (defined in seastar::net::dns_resolver)seastar::net::dns_resolver
dns_resolver(dns_resolver &&) noexcept (defined in seastar::net::dns_resolver)seastar::net::dns_resolver
dns_resolver(const options &) (defined in seastar::net::dns_resolver)seastar::net::dns_resolverexplicit
dns_resolver(network_stack &, const options &={}) (defined in seastar::net::dns_resolver)seastar::net::dns_resolverexplicit
get_host_by_addr(const inet_address &)seastar::net::dns_resolver
get_host_by_name(const sstring &, opt_family={})seastar::net::dns_resolver
get_srv_records(srv_proto proto, const sstring &service, const sstring &domain)seastar::net::dns_resolver
operator=(dns_resolver &&) noexcept (defined in seastar::net::dns_resolver)seastar::net::dns_resolver
resolve_addr(const inet_address &)seastar::net::dns_resolver
resolve_name(const sstring &, opt_family={})seastar::net::dns_resolver
srv_proto enum name (defined in seastar::net::dns_resolver)seastar::net::dns_resolver
srv_records typedef (defined in seastar::net::dns_resolver)seastar::net::dns_resolver
~dns_resolver() (defined in seastar::net::dns_resolver)seastar::net::dns_resolver
+ + + + diff --git a/master/classseastar_1_1net_1_1dns__resolver.html b/master/classseastar_1_1net_1_1dns__resolver.html new file mode 100644 index 000000000..300a0a231 --- /dev/null +++ b/master/classseastar_1_1net_1_1dns__resolver.html @@ -0,0 +1,338 @@ + + + + + + + +Seastar: seastar::net::dns_resolver Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::dns_resolver Class Reference
+
+
+

Detailed Description

+

A DNS resolver object. Wraps the query logic & networking. Can be instantiated with options and your network stack of choice, though for "normal" non-test querying, you are probably better of with the global calls further down.

+
+

#include <seastar/net/dns.hh>

+ + + + +

+Classes

struct  options
 
+ + + + + +

+Public Types

enum class  srv_proto { tcp +, udp + }
 
+using srv_records = std::vector< srv_record >
 
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

dns_resolver (dns_resolver &&) noexcept
 
dns_resolver (const options &)
 
dns_resolver (network_stack &, const options &={})
 
+dns_resolveroperator= (dns_resolver &&) noexcept
 
future< hostentget_host_by_name (const sstring &, opt_family={})
 
future< hostentget_host_by_addr (const inet_address &)
 
future< inet_addressresolve_name (const sstring &, opt_family={})
 
future< sstring > resolve_addr (const inet_address &)
 
future< srv_records > get_srv_records (srv_proto proto, const sstring &service, const sstring &domain)
 
future close ()
 
+

Class Documentation

+ +

◆ seastar::net::dns_resolver::options

+ +
+
+ + + + +
struct seastar::net::dns_resolver::options
+
+ + + + + + + + + + + + + + + + + + + + +
Class Members
+optional< vector< sstring > > +domains +
+optional< vector< inet_address > > +servers +
+optional< uint16_t > +tcp_port +
+optional< milliseconds > +timeout +
+optional< uint16_t > +udp_port +
+optional< bool > +use_tcp_query +
+ +
+
+

Member Function Documentation

+ +

◆ close()

+ +
+
+ + + + + + + +
future seastar::net::dns_resolver::close ()
+
+

Shuts the object down. Great for tests.

+ +
+
+ +

◆ get_host_by_addr()

+ +
+
+ + + + + + + + +
future< hostent > seastar::net::dns_resolver::get_host_by_addr (const inet_address)
+
+

Resolves an address to one or more addresses and aliases

+ +
+
+ +

◆ get_host_by_name()

+ +
+
+ + + + + + + + + + + + + + + + + + +
future< hostent > seastar::net::dns_resolver::get_host_by_name (const sstring & ,
opt_family  = {} 
)
+
+

Resolves a hostname to one or more addresses and aliases

+ +
+
+ +

◆ get_srv_records()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< srv_records > seastar::net::dns_resolver::get_srv_records (srv_proto proto,
const sstring & service,
const sstring & domain 
)
+
+

Resolve a service in given domain to one or more SRV records

+ +
+
+ +

◆ resolve_addr()

+ +
+
+ + + + + + + + +
future< sstring > seastar::net::dns_resolver::resolve_addr (const inet_address)
+
+

Resolves an address to one (primary) name

+ +
+
+ +

◆ resolve_name()

+ +
+
+ + + + + + + + + + + + + + + + + + +
future< inet_address > seastar::net::dns_resolver::resolve_name (const sstring & ,
opt_family  = {} 
)
+
+

Resolves a hostname to one (primary) address

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1forward__hash-members.html b/master/classseastar_1_1net_1_1forward__hash-members.html new file mode 100644 index 000000000..dc3fc92c6 --- /dev/null +++ b/master/classseastar_1_1net_1_1forward__hash-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::forward_hash Member List
+
+
+ +

This is the complete list of members for seastar::net::forward_hash, including all inherited members.

+ + + + + + +
operator[](size_t idx) const (defined in seastar::net::forward_hash)seastar::net::forward_hashinline
push_back(uint8_t b) (defined in seastar::net::forward_hash)seastar::net::forward_hashinline
push_back(uint16_t b) (defined in seastar::net::forward_hash)seastar::net::forward_hashinline
push_back(uint32_t b) (defined in seastar::net::forward_hash)seastar::net::forward_hashinline
size() const (defined in seastar::net::forward_hash)seastar::net::forward_hashinline
+ + + + diff --git a/master/classseastar_1_1net_1_1forward__hash.html b/master/classseastar_1_1net_1_1forward__hash.html new file mode 100644 index 000000000..cf94be9a2 --- /dev/null +++ b/master/classseastar_1_1net_1_1forward__hash.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: seastar::net::forward_hash Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::forward_hash Class Reference
+
+
+ + + + + + + + + + + + +

+Public Member Functions

+size_t size () const
 
+void push_back (uint8_t b)
 
+void push_back (uint16_t b)
 
+void push_back (uint32_t b)
 
+const uint8_t & operator[] (size_t idx) const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1icmp-members.html b/master/classseastar_1_1net_1_1icmp-members.html new file mode 100644 index 000000000..6f603dc95 --- /dev/null +++ b/master/classseastar_1_1net_1_1icmp-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::icmp Member List
+
+
+ +

This is the complete list of members for seastar::net::icmp, including all inherited members.

+ + + + + +
icmp(inet_type &inet) (defined in seastar::net::icmp)seastar::net::icmpinlineexplicit
inet_type typedef (defined in seastar::net::icmp)seastar::net::icmp
ipaddr typedef (defined in seastar::net::icmp)seastar::net::icmp
received(packet p, ipaddr from, ipaddr to) (defined in seastar::net::icmp)seastar::net::icmp
+ + + + diff --git a/master/classseastar_1_1net_1_1icmp.html b/master/classseastar_1_1net_1_1icmp.html new file mode 100644 index 000000000..242de92d8 --- /dev/null +++ b/master/classseastar_1_1net_1_1icmp.html @@ -0,0 +1,105 @@ + + + + + + + +Seastar: seastar::net::icmp Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::icmp Class Reference
+
+
+ + + + + + +

+Public Types

+using ipaddr = ipv4_address
 
+using inet_type = ipv4_l4< ip_protocol_num::icmp >
 
+ + + + + +

+Public Member Functions

icmp (inet_type &inet)
 
+void received (packet p, ipaddr from, ipaddr to)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1inet__address-members.html b/master/classseastar_1_1net_1_1inet__address-members.html new file mode 100644 index 000000000..15a6231fc --- /dev/null +++ b/master/classseastar_1_1net_1_1inet__address-members.html @@ -0,0 +1,115 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::inet_address Member List
+
+
+ +

This is the complete list of members for seastar::net::inet_address, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aliases() const (defined in seastar::net::inet_address)seastar::net::inet_address
as_ipv4_address() const (defined in seastar::net::inet_address)seastar::net::inet_address
as_ipv6_address() const noexcept (defined in seastar::net::inet_address)seastar::net::inet_address
data() const noexcept (defined in seastar::net::inet_address)seastar::net::inet_address
family enum name (defined in seastar::net::inet_address)seastar::net::inet_address
find(const sstring &) (defined in seastar::net::inet_address)seastar::net::inet_addressstatic
find(const sstring &, family) (defined in seastar::net::inet_address)seastar::net::inet_addressstatic
find_all(const sstring &) (defined in seastar::net::inet_address)seastar::net::inet_addressstatic
find_all(const sstring &, family) (defined in seastar::net::inet_address)seastar::net::inet_addressstatic
hostname() const (defined in seastar::net::inet_address)seastar::net::inet_address
in_family() const noexcept (defined in seastar::net::inet_address)seastar::net::inet_addressinline
inet_address() noexcept (defined in seastar::net::inet_address)seastar::net::inet_address
inet_address(family) noexcept (defined in seastar::net::inet_address)seastar::net::inet_address
inet_address(::in_addr i) noexcept (defined in seastar::net::inet_address)seastar::net::inet_address
inet_address(::in6_addr i, uint32_t scope=invalid_scope) noexcept (defined in seastar::net::inet_address)seastar::net::inet_address
inet_address(const sstring &) (defined in seastar::net::inet_address)seastar::net::inet_address
inet_address(inet_address &&) noexcept=default (defined in seastar::net::inet_address)seastar::net::inet_address
inet_address(const inet_address &) noexcept=default (defined in seastar::net::inet_address)seastar::net::inet_address
inet_address(const ipv4_address &) noexcept (defined in seastar::net::inet_address)seastar::net::inet_address
inet_address(const ipv6_address &, uint32_t scope=invalid_scope) noexcept (defined in seastar::net::inet_address)seastar::net::inet_address
invalid_scope (defined in seastar::net::inet_address)seastar::net::inet_addressstatic
is_addr_any() const noexcept (defined in seastar::net::inet_address)seastar::net::inet_address
is_ipv4() const noexcept (defined in seastar::net::inet_address)seastar::net::inet_addressinline
is_ipv6() const noexcept (defined in seastar::net::inet_address)seastar::net::inet_addressinline
is_loopback() const noexcept (defined in seastar::net::inet_address)seastar::net::inet_address
operator ipv6_address() const noexcept (defined in seastar::net::inet_address)seastar::net::inet_address
operator::in6_addr() const noexcept (defined in seastar::net::inet_address)seastar::net::inet_address
operator::in_addr() const (defined in seastar::net::inet_address)seastar::net::inet_address
operator=(const inet_address &) noexcept=default (defined in seastar::net::inet_address)seastar::net::inet_address
operator==(const inet_address &) const noexcept (defined in seastar::net::inet_address)seastar::net::inet_address
parse_numerical(const sstring &) (defined in seastar::net::inet_address)seastar::net::inet_addressstatic
scope() const noexcept (defined in seastar::net::inet_address)seastar::net::inet_addressinline
size() const noexcept (defined in seastar::net::inet_address)seastar::net::inet_address
+ + + + diff --git a/master/classseastar_1_1net_1_1inet__address.html b/master/classseastar_1_1net_1_1inet__address.html new file mode 100644 index 000000000..d54772652 --- /dev/null +++ b/master/classseastar_1_1net_1_1inet__address.html @@ -0,0 +1,198 @@ + + + + + + + +Seastar: seastar::net::inet_address Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+ + + + +

+Public Types

enum class  family : sa_family_t { INET = AF_INET +, INET6 = AF_INET6 + }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

inet_address (family) noexcept
 
inet_address (::in_addr i) noexcept
 
inet_address (::in6_addr i, uint32_t scope=invalid_scope) noexcept
 
inet_address (const sstring &)
 
inet_address (inet_address &&) noexcept=default
 
inet_address (const inet_address &) noexcept=default
 
inet_address (const ipv4_address &) noexcept
 
inet_address (const ipv6_address &, uint32_t scope=invalid_scope) noexcept
 
+ipv4_address as_ipv4_address () const
 
+ipv6_address as_ipv6_address () const noexcept
 
+inet_addressoperator= (const inet_address &) noexcept=default
 
+bool operator== (const inet_address &) const noexcept
 
+family in_family () const noexcept
 
+bool is_ipv6 () const noexcept
 
+bool is_ipv4 () const noexcept
 
+size_t size () const noexcept
 
+const void * data () const noexcept
 
+uint32_t scope () const noexcept
 
operator::in_addr () const
 
operator::in6_addr () const noexcept
 
operator ipv6_address () const noexcept
 
+future< sstring > hostname () const
 
+future< std::vector< sstring > > aliases () const
 
+bool is_loopback () const noexcept
 
+bool is_addr_any () const noexcept
 
+ + + + + + + + + + + +

+Static Public Member Functions

+static future< inet_addressfind (const sstring &)
 
+static future< inet_addressfind (const sstring &, family)
 
+static future< std::vector< inet_address > > find_all (const sstring &)
 
+static future< std::vector< inet_address > > find_all (const sstring &, family)
 
+static std::optional< inet_addressparse_numerical (const sstring &)
 
+ + + +

+Static Public Attributes

+static constexpr uint32_t invalid_scope = std::numeric_limits<uint32_t>::max()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1interface-members.html b/master/classseastar_1_1net_1_1interface-members.html new file mode 100644 index 000000000..8fb0ceabc --- /dev/null +++ b/master/classseastar_1_1net_1_1interface-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::interface Member List
+
+
+ +

This is the complete list of members for seastar::net::interface, including all inherited members.

+ + + + + + + + + + +
forward(unsigned cpuid, packet p) (defined in seastar::net::interface)seastar::net::interface
hash2cpu(uint32_t hash) (defined in seastar::net::interface)seastar::net::interface
hw_address() const noexcept (defined in seastar::net::interface)seastar::net::interfaceinline
hw_features() const (defined in seastar::net::interface)seastar::net::interfaceinline
hw_queues_count() (defined in seastar::net::interface)seastar::net::interface
interface(std::shared_ptr< device > dev) (defined in seastar::net::interface)seastar::net::interfaceexplicit
register_l3(eth_protocol_num proto_num, std::function< future<>(packet p, ethernet_address from)> next, std::function< bool(forward_hash &, packet &, size_t)> forward) (defined in seastar::net::interface)seastar::net::interface
register_packet_provider(l3_protocol::packet_provider_type func) (defined in seastar::net::interface)seastar::net::interfaceinline
rss_key() const (defined in seastar::net::interface)seastar::net::interface
+ + + + diff --git a/master/classseastar_1_1net_1_1interface.html b/master/classseastar_1_1net_1_1interface.html new file mode 100644 index 000000000..6e7cf0a0c --- /dev/null +++ b/master/classseastar_1_1net_1_1interface.html @@ -0,0 +1,117 @@ + + + + + + + +Seastar: seastar::net::interface Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::interface Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

interface (std::shared_ptr< device > dev)
 
+ethernet_address hw_address () const noexcept
 
+const net::hw_featureshw_features () const
 
+future register_l3 (eth_protocol_num proto_num, std::function< future<>(packet p, ethernet_address from)> next, std::function< bool(forward_hash &, packet &, size_t)> forward)
 
+void forward (unsigned cpuid, packet p)
 
+unsigned hash2cpu (uint32_t hash)
 
+void register_packet_provider (l3_protocol::packet_provider_type func)
 
+uint16_t hw_queues_count ()
 
+rss_key_type rss_key () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1ip__protocol-members.html b/master/classseastar_1_1net_1_1ip__protocol-members.html new file mode 100644 index 000000000..a5f3a3613 --- /dev/null +++ b/master/classseastar_1_1net_1_1ip__protocol-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::ip_protocol Member List
+
+
+ +

This is the complete list of members for seastar::net::ip_protocol, including all inherited members.

+ + + + +
forward(forward_hash &out_hash_data, packet &p, size_t off) (defined in seastar::net::ip_protocol)seastar::net::ip_protocolinlinevirtual
received(packet p, ipv4_address from, ipv4_address to)=0 (defined in seastar::net::ip_protocol)seastar::net::ip_protocolpure virtual
~ip_protocol() (defined in seastar::net::ip_protocol)seastar::net::ip_protocolinlinevirtual
+ + + + diff --git a/master/classseastar_1_1net_1_1ip__protocol.html b/master/classseastar_1_1net_1_1ip__protocol.html new file mode 100644 index 000000000..41ab7d4bc --- /dev/null +++ b/master/classseastar_1_1net_1_1ip__protocol.html @@ -0,0 +1,106 @@ + + + + + + + +Seastar: seastar::net::ip_protocol Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::ip_protocol Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::net::ip_protocol:
+
+
+ + +seastar::net::ipv4_icmp +seastar::net::ipv4_tcp +seastar::net::ipv4_udp + +
+ + + + + + +

+Public Member Functions

+virtual void received (packet p, ipv4_address from, ipv4_address to)=0
 
+virtual bool forward (forward_hash &out_hash_data, packet &p, size_t off)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1ip__protocol.png b/master/classseastar_1_1net_1_1ip__protocol.png new file mode 100644 index 0000000000000000000000000000000000000000..7542ad370c20566eebc5e41db9c2c0782162eb40 GIT binary patch literal 1060 zcmeAS@N?(olHy`uVBq!ia0y~yU_1_F2XHV0$!Igb^FT@>z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op)!u~ z_T`M8OzVVQRld(#`_}1%K>uZxKdd{n4jb@HXF9-OQn+>BO=Sn`ZyXowk+J`8v5Yr+ zRg@kEo~^kn$9T)~it+*DH-ZlertRb1FW>gcpg!i@^;di9qy!-RT>pJY!EES!LYM<_kSU=VIb>zwg1#$PLZp=O> z$9QkyjqrTyJAW(oPn(->l%Ti3r^d;HHXTc(=UW#5xi;_uem+kJZR zUHJf`$nRI@-FC{PsZZ|uS+m<|`lK^IO^zDyJij)Jub)i3mKnK) z!adR4dy?LfrHgk)P7*mJr>fau>lLK^O~cdiP2i-a8;e!83VpWlxOD%H_qVLg+5XF` z7DlEY&F(8p*q|QX|6RjV)cL``%{E>^u5$0I%POy*s_hSselC5@xv=t-`QPhb z`Q6Mar&-q>Ui0+4%{=+_b)V#2thFQJLfco{q&>PG@w4*Zn`;Nn=W5g?TgLqDSa5vu z!kwI63+K9QFzu`?w2_BM%;u`(E$1_eOczx%K&< zbnHLm_Afu)U1g&gaV0rte*YW()0N-&?%%cRx_-#;{qe_-WdGFJC`5etYw?!Vp8rtM zjQ2D0&rYxY$Tr`5)0@xDTjrLGs{Vmk9YW}b9 z-k0RBbjrP7J?V?x#tQ4u`F&#VZ!h~~(to*Z|LiYZa@#-ZJu2LvfB&?w(mspBXNlvd-n&nkhlMgv9&4@jHaZ W9)7rK^DAJMX7F_Nb6Mw<&;$Sq4FHt@ literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1ipv4-members.html b/master/classseastar_1_1net_1_1ipv4-members.html new file mode 100644 index 000000000..5c57e1698 --- /dev/null +++ b/master/classseastar_1_1net_1_1ipv4-members.html @@ -0,0 +1,106 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::ipv4 Member List
+
+
+ +

This is the complete list of members for seastar::net::ipv4, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
address_type typedef (defined in seastar::net::ipv4)seastar::net::ipv4
arp_protocol_type() (defined in seastar::net::ipv4)seastar::net::ipv4inlinestatic
broadcast_address() (defined in seastar::net::ipv4)seastar::net::ipv4inlinestatic
clock_type typedef (defined in seastar::net::ipv4)seastar::net::ipv4
get_l2_dst_address(ipv4_address to) (defined in seastar::net::ipv4)seastar::net::ipv4
get_tcp() (defined in seastar::net::ipv4)seastar::net::ipv4inline
get_udp() (defined in seastar::net::ipv4)seastar::net::ipv4inline
gw_address() const (defined in seastar::net::ipv4)seastar::net::ipv4
host_address() const (defined in seastar::net::ipv4)seastar::net::ipv4
hw_features() const (defined in seastar::net::ipv4)seastar::net::ipv4inline
ipv4(interface *netif) (defined in seastar::net::ipv4)seastar::net::ipv4explicit
learn(ethernet_address l2, ipv4_address l3) (defined in seastar::net::ipv4)seastar::net::ipv4inline
needs_frag(packet &p, ip_protocol_num proto_num, net::hw_features hw_features) (defined in seastar::net::ipv4)seastar::net::ipv4static
netif() const (defined in seastar::net::ipv4)seastar::net::ipv4inline
netmask_address() const (defined in seastar::net::ipv4)seastar::net::ipv4
packet_filter() const (defined in seastar::net::ipv4)seastar::net::ipv4
proto_type typedef (defined in seastar::net::ipv4)seastar::net::ipv4
register_l4(proto_type id, ip_protocol *handler) (defined in seastar::net::ipv4)seastar::net::ipv4
register_packet_provider(ipv4_traits::packet_provider_type &&func) (defined in seastar::net::ipv4)seastar::net::ipv4inline
send(ipv4_address to, ip_protocol_num proto_num, packet p, ethernet_address e_dst) (defined in seastar::net::ipv4)seastar::net::ipv4
set_gw_address(ipv4_address ip) (defined in seastar::net::ipv4)seastar::net::ipv4
set_host_address(ipv4_address ip) (defined in seastar::net::ipv4)seastar::net::ipv4
set_netmask_address(ipv4_address ip) (defined in seastar::net::ipv4)seastar::net::ipv4
set_packet_filter(ip_packet_filter *) (defined in seastar::net::ipv4)seastar::net::ipv4
+ + + + diff --git a/master/classseastar_1_1net_1_1ipv4.html b/master/classseastar_1_1net_1_1ipv4.html new file mode 100644 index 000000000..fd4484432 --- /dev/null +++ b/master/classseastar_1_1net_1_1ipv4.html @@ -0,0 +1,170 @@ + + + + + + + +Seastar: seastar::net::ipv4 Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+ + + + + + + + +

+Public Types

+using clock_type = lowres_clock
 
+using address_type = ipv4_address
 
+using proto_type = uint16_t
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ipv4 (interface *netif)
 
+void set_host_address (ipv4_address ip)
 
+ipv4_address host_address () const
 
+void set_gw_address (ipv4_address ip)
 
+ipv4_address gw_address () const
 
+void set_netmask_address (ipv4_address ip)
 
+ipv4_address netmask_address () const
 
+interfacenetif () const
 
+void set_packet_filter (ip_packet_filter *)
 
+ip_packet_filterpacket_filter () const
 
+void send (ipv4_address to, ip_protocol_num proto_num, packet p, ethernet_address e_dst)
 
+tcp< ipv4_traits > & get_tcp ()
 
+ipv4_udpget_udp ()
 
+void register_l4 (proto_type id, ip_protocol *handler)
 
+const net::hw_featureshw_features () const
 
+void learn (ethernet_address l2, ipv4_address l3)
 
+void register_packet_provider (ipv4_traits::packet_provider_type &&func)
 
+future< ethernet_addressget_l2_dst_address (ipv4_address to)
 
+ + + + + + + +

+Static Public Member Functions

+static address_type broadcast_address ()
 
+static proto_type arp_protocol_type ()
 
+static bool needs_frag (packet &p, ip_protocol_num proto_num, net::hw_features hw_features)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1ipv4__icmp-members.html b/master/classseastar_1_1net_1_1ipv4__icmp-members.html new file mode 100644 index 000000000..a13a0e61d --- /dev/null +++ b/master/classseastar_1_1net_1_1ipv4__icmp-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::ipv4_icmp Member List
+
+
+ +

This is the complete list of members for seastar::net::ipv4_icmp, including all inherited members.

+ + + + + +
forward(forward_hash &out_hash_data, packet &p, size_t off) (defined in seastar::net::ip_protocol)seastar::net::ip_protocolinlinevirtual
ipv4_icmp(ipv4 &inet) (defined in seastar::net::ipv4_icmp)seastar::net::ipv4_icmpinline
received(packet p, ipv4_address from, ipv4_address to) (defined in seastar::net::ipv4_icmp)seastar::net::ipv4_icmpinlinevirtual
~ip_protocol() (defined in seastar::net::ip_protocol)seastar::net::ip_protocolinlinevirtual
+ + + + diff --git a/master/classseastar_1_1net_1_1ipv4__icmp.html b/master/classseastar_1_1net_1_1ipv4__icmp.html new file mode 100644 index 000000000..21d5351d6 --- /dev/null +++ b/master/classseastar_1_1net_1_1ipv4__icmp.html @@ -0,0 +1,151 @@ + + + + + + + +Seastar: seastar::net::ipv4_icmp Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::ipv4_icmp Class Referencefinal
+
+
+
+Inheritance diagram for seastar::net::ipv4_icmp:
+
+
+ + +seastar::net::ip_protocol + +
+ + + + + + + + +

+Public Member Functions

ipv4_icmp (ipv4 &inet)
 
virtual void received (packet p, ipv4_address from, ipv4_address to)
 
+virtual bool forward (forward_hash &out_hash_data, packet &p, size_t off)
 
+

Member Function Documentation

+ +

◆ received()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void seastar::net::ipv4_icmp::received (packet p,
ipv4_address from,
ipv4_address to 
)
+
+inlinevirtual
+
+ +

Implements seastar::net::ip_protocol.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1ipv4__icmp.png b/master/classseastar_1_1net_1_1ipv4__icmp.png new file mode 100644 index 0000000000000000000000000000000000000000..04b944bb75a3c6f84c2c2ab3167c45d70ef8895f GIT binary patch literal 640 zcmeAS@N?(olHy`uVBq!ia0vp^6M;B@gBeKbZAu4{3=#o8A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;e z;>^cnC!IXA=`pDZDEKrr`^d7`^(M2{EX;Qg-Nmz8v1|G6`SF_G@mKc=96fMefY;_P&tv0PMQ@W` zioa((Ti^TsqU^=Lw!5B1&DyJS=SAK#laqnU*Rwu{tn<9&e#OpQe{YDrS4qszijqlR zn*OyLPg?T+M5oHhX+TG>otpvlgDPW<3xC7XEixA$ZX(P2$-;~` zij)|l{a6xCcQWKy3O4AfGi`Y4!mw=)$AM`G$=C5}T#7AAT^J%fpi0jQ`c`zMK3V%~ zp5NC>r3SxhH|8@d6}y!8&uiJ`arKTK^S4`>J{LQtDJ|b+-1Tg+b*R+gn;mT?=Oaz- zPBf_7`(Ld{@su*(q|0_{tIEpy*4>`F_pamql+CBj?&Lmh)0q49qK zc=i92THteg{uPm_1#YqHwz^by=L?*@yLjgQX}7QD%Ky9a?3VA-s7=#bcE|K-6&HOu zv(=KhZ+7h*; R2bf$KJYD@<);T3K0RUVqDg6Kd literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1ipv4__l4-members.html b/master/classseastar_1_1net_1_1ipv4__l4-members.html new file mode 100644 index 000000000..2b44b1e4d --- /dev/null +++ b/master/classseastar_1_1net_1_1ipv4__l4-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::ipv4_l4< ProtoNum > Member List
+
+
+ +

This is the complete list of members for seastar::net::ipv4_l4< ProtoNum >, including all inherited members.

+ + + + + + +
_inet (defined in seastar::net::ipv4_l4< ProtoNum >)seastar::net::ipv4_l4< ProtoNum >
get_l2_dst_address(ipv4_address to) (defined in seastar::net::ipv4_l4< ProtoNum >)seastar::net::ipv4_l4< ProtoNum >inline
inet() const (defined in seastar::net::ipv4_l4< ProtoNum >)seastar::net::ipv4_l4< ProtoNum >inline
ipv4_l4(ipv4 &inet) (defined in seastar::net::ipv4_l4< ProtoNum >)seastar::net::ipv4_l4< ProtoNum >inline
register_packet_provider(ipv4_traits::packet_provider_type func) (defined in seastar::net::ipv4_l4< ProtoNum >)seastar::net::ipv4_l4< ProtoNum >inline
+ + + + diff --git a/master/classseastar_1_1net_1_1ipv4__l4.html b/master/classseastar_1_1net_1_1ipv4__l4.html new file mode 100644 index 000000000..703421701 --- /dev/null +++ b/master/classseastar_1_1net_1_1ipv4__l4.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: seastar::net::ipv4_l4< ProtoNum > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::ipv4_l4< ProtoNum > Class Template Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

ipv4_l4 (ipv4 &inet)
 
+void register_packet_provider (ipv4_traits::packet_provider_type func)
 
+future< ethernet_addressget_l2_dst_address (ipv4_address to)
 
+const ipv4inet () const
 
+ + + +

+Public Attributes

+ipv4_inet
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1ipv4__tcp-members.html b/master/classseastar_1_1net_1_1ipv4__tcp-members.html new file mode 100644 index 000000000..40ac879bf --- /dev/null +++ b/master/classseastar_1_1net_1_1ipv4__tcp-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::ipv4_tcp Member List
+
+
+ +

This is the complete list of members for seastar::net::ipv4_tcp, including all inherited members.

+ + + + + + +
forward(forward_hash &out_hash_data, packet &p, size_t off) override (defined in seastar::net::ipv4_tcp)seastar::net::ipv4_tcpvirtual
ipv4_tcp(ipv4 &inet) (defined in seastar::net::ipv4_tcp)seastar::net::ipv4_tcp
received(packet p, ipv4_address from, ipv4_address to) override (defined in seastar::net::ipv4_tcp)seastar::net::ipv4_tcpvirtual
~ip_protocol() (defined in seastar::net::ip_protocol)seastar::net::ip_protocolinlinevirtual
~ipv4_tcp() (defined in seastar::net::ipv4_tcp)seastar::net::ipv4_tcp
+ + + + diff --git a/master/classseastar_1_1net_1_1ipv4__tcp.html b/master/classseastar_1_1net_1_1ipv4__tcp.html new file mode 100644 index 000000000..349eff9c8 --- /dev/null +++ b/master/classseastar_1_1net_1_1ipv4__tcp.html @@ -0,0 +1,194 @@ + + + + + + + +Seastar: seastar::net::ipv4_tcp Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::ipv4_tcp Class Referencefinal
+
+
+
+Inheritance diagram for seastar::net::ipv4_tcp:
+
+
+ + +seastar::net::ip_protocol + +
+ + + + + + + + +

+Public Member Functions

ipv4_tcp (ipv4 &inet)
 
virtual void received (packet p, ipv4_address from, ipv4_address to) override
 
virtual bool forward (forward_hash &out_hash_data, packet &p, size_t off) override
 
+

Member Function Documentation

+ +

◆ forward()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool seastar::net::ipv4_tcp::forward (forward_hashout_hash_data,
packetp,
size_t off 
)
+
+overridevirtual
+
+ +

Reimplemented from seastar::net::ip_protocol.

+ +
+
+ +

◆ received()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void seastar::net::ipv4_tcp::received (packet p,
ipv4_address from,
ipv4_address to 
)
+
+overridevirtual
+
+ +

Implements seastar::net::ip_protocol.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1ipv4__tcp.png b/master/classseastar_1_1net_1_1ipv4__tcp.png new file mode 100644 index 0000000000000000000000000000000000000000..a2a22cb29657b39de0b224990be3522e96f32275 GIT binary patch literal 628 zcmeAS@N?(olHy`uVBq!ia0vp^6M;B@gBeKbZAu4{3=#o8A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;A3b!V!mH57TR>-;iyWjDY-oVXEKU@1uuPD7NEW5Gq=CaIX%87rf{@)9lyE&?I zyKkP=qCL62H+o*rbvr2at1NWs=}pp$Dt7<=J9XQc(8t_?CN*st4=%e)+z$-T&R3pw zdhyKtX6F`LFZyk>>snM-99Q0y**kqUU0t#DR^_T|Dlc`j=FeUpx2j)AR#Sex-=ujL z{uj7U`XX#OQRQZllINza!nwD%tyO8*{(^DClxfOUHet?DeHrXgJejsi>rETpKXGB$ zHizTDG-1XYMM@0Oek=*6I~j5;1sinLnKnE{NdB7M>BNz!Daar;399t7i*Vi1)F;tr zXD+mJX1S2L{*`#=qf_hC7v=?-_n%(0x7YS)MJ=j1BHr=rQ^vFPPYb8M)qi?%>$OX}f(oWT@z`&?E9A?|AUBuuSELR^n~0Y^ z_`2G~aBkM=`)W)XUuU~8=%0l6YwdbN3>{an^LB{Ts5 Dpb#do literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1ipv4__udp-members.html b/master/classseastar_1_1net_1_1ipv4__udp-members.html new file mode 100644 index 000000000..c23bdeeb6 --- /dev/null +++ b/master/classseastar_1_1net_1_1ipv4__udp-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::ipv4_udp Member List
+
+
+ +

This is the complete list of members for seastar::net::ipv4_udp, including all inherited members.

+ + + + + + + + + + +
default_queue_size (defined in seastar::net::ipv4_udp)seastar::net::ipv4_udpstatic
forward(forward_hash &out_hash_data, packet &p, size_t off) override (defined in seastar::net::ipv4_udp)seastar::net::ipv4_udpvirtual
inet() const (defined in seastar::net::ipv4_udp)seastar::net::ipv4_udpinline
ipv4_udp(ipv4 &inet) (defined in seastar::net::ipv4_udp)seastar::net::ipv4_udp
make_channel(ipv4_addr addr) (defined in seastar::net::ipv4_udp)seastar::net::ipv4_udp
received(packet p, ipv4_address from, ipv4_address to) override (defined in seastar::net::ipv4_udp)seastar::net::ipv4_udpvirtual
send(uint16_t src_port, ipv4_addr dst, packet &&p) (defined in seastar::net::ipv4_udp)seastar::net::ipv4_udp
set_queue_size(int size) (defined in seastar::net::ipv4_udp)seastar::net::ipv4_udpinline
~ip_protocol() (defined in seastar::net::ip_protocol)seastar::net::ip_protocolinlinevirtual
+ + + + diff --git a/master/classseastar_1_1net_1_1ipv4__udp.html b/master/classseastar_1_1net_1_1ipv4__udp.html new file mode 100644 index 000000000..60fa38e92 --- /dev/null +++ b/master/classseastar_1_1net_1_1ipv4__udp.html @@ -0,0 +1,219 @@ + + + + + + + +Seastar: seastar::net::ipv4_udp Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::ipv4_udp Class Reference
+
+
+
+Inheritance diagram for seastar::net::ipv4_udp:
+
+
+ + +seastar::net::ip_protocol + +
+ + + + +

+Classes

class  registration
 
+ + + + + + + + + + + + + + + +

+Public Member Functions

ipv4_udp (ipv4 &inet)
 
+udp_channel make_channel (ipv4_addr addr)
 
virtual void received (packet p, ipv4_address from, ipv4_address to) override
 
+void send (uint16_t src_port, ipv4_addr dst, packet &&p)
 
bool forward (forward_hash &out_hash_data, packet &p, size_t off) override
 
+void set_queue_size (int size)
 
+const ipv4inet () const
 
+ + + +

+Static Public Attributes

+static const int default_queue_size
 
+

Member Function Documentation

+ +

◆ forward()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool seastar::net::ipv4_udp::forward (forward_hashout_hash_data,
packetp,
size_t off 
)
+
+overridevirtual
+
+ +

Reimplemented from seastar::net::ip_protocol.

+ +
+
+ +

◆ received()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void seastar::net::ipv4_udp::received (packet p,
ipv4_address from,
ipv4_address to 
)
+
+overridevirtual
+
+ +

Implements seastar::net::ip_protocol.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1ipv4__udp.png b/master/classseastar_1_1net_1_1ipv4__udp.png new file mode 100644 index 0000000000000000000000000000000000000000..bb67d458f1fa92060188e6f71677651065e73798 GIT binary patch literal 634 zcmeAS@N?(olHy`uVBq!ia0vp^6M;B@gBeKbZAu4{3=#o8A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;fO)k!Le=Z*NX~Le9)^aXV@Z8pQy5;>^|ET&I z9+T`Yn*>^fITH`{z`|wN;hwBE0s_CLc15d(N+Tx%GI* zvsW3<*7v@C(f49s->*3Do8E_evy8WUZj;&@X6^rVmWu77*QKAY`F>sO;(qe@;>k2s8Z|hr{cM7j>n{&w=TE05NyHwR-W){nMU@ZvFnO)9O{V?$If2ue+50o?BI}Cu^eM z)mIGkTgS7>W%KrXh@4)z^^dPoL)?B>mJhB_-+e7~Y!x`<^ozO9KyL4qiw@ergu>wI L>gTe~DWM4f#0Mrs literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1ipv4__udp_1_1registration-members.html b/master/classseastar_1_1net_1_1ipv4__udp_1_1registration-members.html new file mode 100644 index 000000000..7dceb31e1 --- /dev/null +++ b/master/classseastar_1_1net_1_1ipv4__udp_1_1registration-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::ipv4_udp::registration Member List
+
+
+ +

This is the complete list of members for seastar::net::ipv4_udp::registration, including all inherited members.

+ + + + +
port() const (defined in seastar::net::ipv4_udp::registration)seastar::net::ipv4_udp::registrationinline
registration(ipv4_udp &proto, uint16_t port) (defined in seastar::net::ipv4_udp::registration)seastar::net::ipv4_udp::registrationinline
unregister() (defined in seastar::net::ipv4_udp::registration)seastar::net::ipv4_udp::registrationinline
+ + + + diff --git a/master/classseastar_1_1net_1_1ipv4__udp_1_1registration.html b/master/classseastar_1_1net_1_1ipv4__udp_1_1registration.html new file mode 100644 index 000000000..aa9707581 --- /dev/null +++ b/master/classseastar_1_1net_1_1ipv4__udp_1_1registration.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: seastar::net::ipv4_udp::registration Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::ipv4_udp::registration Class Reference
+
+
+ + + + + + + + +

+Public Member Functions

registration (ipv4_udp &proto, uint16_t port)
 
+void unregister ()
 
+uint16_t port () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1l3__protocol-members.html b/master/classseastar_1_1net_1_1l3__protocol-members.html new file mode 100644 index 000000000..cd7614a5c --- /dev/null +++ b/master/classseastar_1_1net_1_1l3__protocol-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::l3_protocol Member List
+
+
+ +

This is the complete list of members for seastar::net::l3_protocol, including all inherited members.

+ + + + +
l3_protocol(interface *netif, eth_protocol_num proto_num, packet_provider_type func) (defined in seastar::net::l3_protocol)seastar::net::l3_protocolexplicit
packet_provider_type typedef (defined in seastar::net::l3_protocol)seastar::net::l3_protocol
receive(std::function< future<>(packet, ethernet_address)> rx_fn, std::function< bool(forward_hash &, packet &, size_t)> forward) (defined in seastar::net::l3_protocol)seastar::net::l3_protocol
+ + + + diff --git a/master/classseastar_1_1net_1_1l3__protocol.html b/master/classseastar_1_1net_1_1l3__protocol.html new file mode 100644 index 000000000..e298fcb34 --- /dev/null +++ b/master/classseastar_1_1net_1_1l3__protocol.html @@ -0,0 +1,144 @@ + + + + + + + +Seastar: seastar::net::l3_protocol Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::l3_protocol Class Reference
+
+
+ + + + +

+Classes

struct  l3packet
 
+ + + +

+Public Types

+using packet_provider_type = std::function< std::optional< l3packet >()>
 
+ + + + + +

+Public Member Functions

l3_protocol (interface *netif, eth_protocol_num proto_num, packet_provider_type func)
 
+future receive (std::function< future<>(packet, ethernet_address)> rx_fn, std::function< bool(forward_hash &, packet &, size_t)> forward)
 
+

Class Documentation

+ +

◆ seastar::net::l3_protocol::l3packet

+ +
+
+ + + + +
struct seastar::net::l3_protocol::l3packet
+
+ + + + + + + + + + + +
Class Members
+packet +p +
+eth_protocol_num +proto_num +
+ethernet_address +to +
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1packet-members.html b/master/classseastar_1_1net_1_1packet-members.html new file mode 100644 index 000000000..973b57a14 --- /dev/null +++ b/master/classseastar_1_1net_1_1packet-members.html @@ -0,0 +1,128 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::packet Member List
+
+
+ +

This is the complete list of members for seastar::net::packet, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
append(packet &&p) (defined in seastar::net::packet)seastar::net::packetinline
frag(unsigned idx) const noexcept (defined in seastar::net::packet)seastar::net::packetinline
frag(unsigned idx) noexcept (defined in seastar::net::packet)seastar::net::packetinline
fragment_array() const noexcept (defined in seastar::net::packet)seastar::net::packetinline
fragments() const noexcept (defined in seastar::net::packet)seastar::net::packetinline
free_on_cpu(unsigned cpu, std::function< void()> cb=[]{}) (defined in seastar::net::packet)seastar::net::packet
from_static_data(const char *data, size_t len) noexcept (defined in seastar::net::packet)seastar::net::packetinlinestatic
get_header(size_t offset=0) (defined in seastar::net::packet)seastar::net::packetinline
get_header(size_t offset, size_t size) (defined in seastar::net::packet)seastar::net::packetinline
get_offload_info() const noexcept (defined in seastar::net::packet)seastar::net::packetinline
len() const noexcept (defined in seastar::net::packet)seastar::net::packetinline
linearize() (defined in seastar::net::packet)seastar::net::packetinline
make_null_packet() noexcept (defined in seastar::net::packet)seastar::net::packetinlinestatic
memory() const noexcept (defined in seastar::net::packet)seastar::net::packetinline
nr_frags() const noexcept (defined in seastar::net::packet)seastar::net::packetinline
offload_info_ref() noexcept (defined in seastar::net::packet)seastar::net::packetinline
operator bool() noexcept (defined in seastar::net::packet)seastar::net::packetinlineexplicit
operator=(packet &&x) noexcept (defined in seastar::net::packet)seastar::net::packetinline
packet() (defined in seastar::net::packet)seastar::net::packetinline
packet(size_t nr_frags) (defined in seastar::net::packet)seastar::net::packetinline
packet(packet &&x) noexcept (defined in seastar::net::packet)seastar::net::packetinline
packet(const char *data, size_t len) (defined in seastar::net::packet)seastar::net::packetinline
packet(fragment frag) (defined in seastar::net::packet)seastar::net::packetinline
packet(fragment frag, deleter del) (defined in seastar::net::packet)seastar::net::packetinline
packet(std::vector< fragment > frag, deleter del) (defined in seastar::net::packet)seastar::net::packetinline
packet(Iterator begin, Iterator end, deleter del) (defined in seastar::net::packet)seastar::net::packetinline
packet(packet &&x, fragment frag) (defined in seastar::net::packet)seastar::net::packetinline
packet(fragment frag, packet &&x) (defined in seastar::net::packet)seastar::net::packetinline
packet(fragment frag, deleter del, packet &&x) (defined in seastar::net::packet)seastar::net::packet
packet(packet &&x, fragment frag, deleter d) (defined in seastar::net::packet)seastar::net::packetinline
packet(packet &&x, temporary_buffer< char > buf) (defined in seastar::net::packet)seastar::net::packetinline
packet(temporary_buffer< char > buf) (defined in seastar::net::packet)seastar::net::packetinline
packet(packet &&x, deleter d) (defined in seastar::net::packet)seastar::net::packetinline
prepend_header(size_t extra_size=0) (defined in seastar::net::packet)seastar::net::packet
prepend_uninitialized_header(size_t size) (defined in seastar::net::packet)seastar::net::packetinline
release() (defined in seastar::net::packet)seastar::net::packetinline
release_into(Func &&func) (defined in seastar::net::packet)seastar::net::packetinline
reserve(int n_frags) (defined in seastar::net::packet)seastar::net::packetinline
reset() noexcept (defined in seastar::net::packet)seastar::net::packetinline
rss_hash() const noexcept (defined in seastar::net::packet)seastar::net::packetinline
set_offload_info(struct offload_info oi) noexcept (defined in seastar::net::packet)seastar::net::packetinline
set_rss_hash(uint32_t hash) noexcept (defined in seastar::net::packet)seastar::net::packetinline
share() (defined in seastar::net::packet)seastar::net::packetinline
share(size_t offset, size_t len) (defined in seastar::net::packet)seastar::net::packetinline
trim_back(size_t how_much) noexcept (defined in seastar::net::packet)seastar::net::packetinline
trim_front(size_t how_much) noexcept (defined in seastar::net::packet)seastar::net::packetinline
+ + + + diff --git a/master/classseastar_1_1net_1_1packet.html b/master/classseastar_1_1net_1_1packet.html new file mode 100644 index 000000000..09dce6df8 --- /dev/null +++ b/master/classseastar_1_1net_1_1packet.html @@ -0,0 +1,233 @@ + + + + + + + +Seastar: seastar::net::packet Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::packet Class Referencefinal
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

packet (size_t nr_frags)
 
packet (packet &&x) noexcept
 
packet (const char *data, size_t len)
 
packet (fragment frag)
 
packet (fragment frag, deleter del)
 
packet (std::vector< fragment > frag, deleter del)
 
+template<typename Iterator >
 packet (Iterator begin, Iterator end, deleter del)
 
packet (packet &&x, fragment frag)
 
packet (fragment frag, packet &&x)
 
packet (fragment frag, deleter del, packet &&x)
 
packet (packet &&x, fragment frag, deleter d)
 
packet (packet &&x, temporary_buffer< char > buf)
 
packet (temporary_buffer< char > buf)
 
packet (packet &&x, deleter d)
 
+packetoperator= (packet &&x) noexcept
 
+unsigned len () const noexcept
 
+unsigned memory () const noexcept
 
+fragment frag (unsigned idx) const noexcept
 
+fragmentfrag (unsigned idx) noexcept
 
+unsigned nr_frags () const noexcept
 
+pseudo_vector fragments () const noexcept
 
+fragmentfragment_array () const noexcept
 
+packet share ()
 
+packet share (size_t offset, size_t len)
 
+void append (packet &&p)
 
+void trim_front (size_t how_much) noexcept
 
+void trim_back (size_t how_much) noexcept
 
+template<typename Header >
Header * get_header (size_t offset=0)
 
+char * get_header (size_t offset, size_t size)
 
+template<typename Header >
Header * prepend_header (size_t extra_size=0)
 
+char * prepend_uninitialized_header (size_t size)
 
+packet free_on_cpu (unsigned cpu, std::function< void()> cb=[]{})
 
+void linearize ()
 
+void reset () noexcept
 
+void reserve (int n_frags)
 
+std::optional< uint32_t > rss_hash () const noexcept
 
+std::optional< uint32_t > set_rss_hash (uint32_t hash) noexcept
 
+template<typename Func >
void release_into (Func &&func)
 
+std::vector< temporary_buffer< char > > release ()
 
operator bool () noexcept
 
+struct offload_info get_offload_info () const noexcept
 
+struct offload_infooffload_info_ref () noexcept
 
+void set_offload_info (struct offload_info oi) noexcept
 
+ + + + + +

+Static Public Member Functions

+static packet from_static_data (const char *data, size_t len) noexcept
 
+static packet make_null_packet () noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1packet__data__source-members.html b/master/classseastar_1_1net_1_1packet__data__source-members.html new file mode 100644 index 000000000..07e1867ea --- /dev/null +++ b/master/classseastar_1_1net_1_1packet__data__source-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::packet_data_source Member List
+
+
+ +

This is the complete list of members for seastar::net::packet_data_source, including all inherited members.

+ + + + + + +
close() (defined in seastar::data_source_impl)seastar::data_source_implinlinevirtual
get() override (defined in seastar::net::packet_data_source)seastar::net::packet_data_sourceinlinevirtual
packet_data_source(net::packet &&p) (defined in seastar::net::packet_data_source)seastar::net::packet_data_sourceinlineexplicit
skip(uint64_t n) (defined in seastar::data_source_impl)seastar::data_source_implinlinevirtual
~data_source_impl() (defined in seastar::data_source_impl)seastar::data_source_implinlinevirtual
+ + + + diff --git a/master/classseastar_1_1net_1_1packet__data__source.html b/master/classseastar_1_1net_1_1packet__data__source.html new file mode 100644 index 000000000..9af17c9bf --- /dev/null +++ b/master/classseastar_1_1net_1_1packet__data__source.html @@ -0,0 +1,137 @@ + + + + + + + +Seastar: seastar::net::packet_data_source Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::packet_data_source Class Referencefinal
+
+
+
+Inheritance diagram for seastar::net::packet_data_source:
+
+
+ + +seastar::data_source_impl + +
+ + + + + + + + + + +

+Public Member Functions

packet_data_source (net::packet &&p)
 
virtual future< temporary_buffer< char > > get () override
 
+virtual future< temporary_buffer< char > > skip (uint64_t n)
 
+virtual future close ()
 
+

Member Function Documentation

+ +

◆ get()

+ +
+
+ + + + + +
+ + + + + + + +
virtual future< temporary_buffer< char > > seastar::net::packet_data_source::get ()
+
+inlineoverridevirtual
+
+ +

Implements seastar::data_source_impl.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1packet__data__source.png b/master/classseastar_1_1net_1_1packet__data__source.png new file mode 100644 index 0000000000000000000000000000000000000000..316bec51db09e5567e39d4981b33487d640153e6 GIT binary patch literal 740 zcmeAS@N?(olHy`uVBq!ia0vp^M}RnhgBeH`_G|F~DTx4|5ZC|z{{xvX-h3_XKQsZz z0^*O)%;&g$`x6^$B|K+{c{jvGc*Zo_?POC%(i?1x-zv}b(U+JH{FU6$`Sh~Hu z-?h-n`RZ}0<7;oa8q4-n&#meHW$Lm$BX`BWyDAe*-+emmG>2vL>r&OZ^LEFaj=H}0 zy+V<5y5u5RXP$Q|U(d60>|Ro8c-DmNc%aqIYd8ITf_`cpNl!nt}Nj5JyH|m@&DrWqXZp-j)U3^1@O)*!;oqX@6{0e;SmDBw7Xu#ZspOXKwU)}lQnc@@G_+abTfxM#OLo6Vd3x-VIh9-013Rb2Mj@Z}WyM?2S)-u=y|Wd25>?bWW|&83fY z7xM^PwPn2fm(c$@F#OPw8*g3W?e8v_=J$NIW#5KwlbfCI&mFm4V#Qnh(q{&9-6X%i zC)dlKZZ(kIu$fxhrRn^D* + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::packet_merger< Offset, Tag > Member List
+
+
+ +

This is the complete list of members for seastar::net::packet_merger< Offset, Tag >, including all inherited members.

+ + + + +
linearizations() (defined in seastar::net::packet_merger< Offset, Tag >)seastar::net::packet_merger< Offset, Tag >inlinestatic
map (defined in seastar::net::packet_merger< Offset, Tag >)seastar::net::packet_merger< Offset, Tag >
merge(Offset offset, packet p) (defined in seastar::net::packet_merger< Offset, Tag >)seastar::net::packet_merger< Offset, Tag >inline
+ + + + diff --git a/master/classseastar_1_1net_1_1packet__merger.html b/master/classseastar_1_1net_1_1packet__merger.html new file mode 100644 index 000000000..0630f93a3 --- /dev/null +++ b/master/classseastar_1_1net_1_1packet__merger.html @@ -0,0 +1,106 @@ + + + + + + + +Seastar: seastar::net::packet_merger< Offset, Tag > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::packet_merger< Offset, Tag > Class Template Reference
+
+
+ + + + +

+Public Member Functions

+void merge (Offset offset, packet p)
 
+ + + +

+Static Public Member Functions

+static uint64_t linearizations ()
 
+ + + +

+Public Attributes

+std::map< Offset, packetmap
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1posix__ap__network__stack-members.html b/master/classseastar_1_1net_1_1posix__ap__network__stack-members.html new file mode 100644 index 000000000..1850ef9ba --- /dev/null +++ b/master/classseastar_1_1net_1_1posix__ap__network__stack-members.html @@ -0,0 +1,97 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::posix_ap_network_stack Member List
+
+
+ +

This is the complete list of members for seastar::net::posix_ap_network_stack, including all inherited members.

+ + + + + + + + + + + + + + + + +
_allocator (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackprotected
connect(socket_address sa, socket_address={}, transport proto=transport::TCP) (defined in seastar::network_stack)seastar::network_stack
create(const program_options::option_group &opts, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator) (defined in seastar::net::posix_ap_network_stack)seastar::net::posix_ap_network_stackinlinestatic
has_per_core_namespace() override (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackinlinevirtual
initialize() (defined in seastar::network_stack)seastar::network_stackinlinevirtual
listen(socket_address sa, listen_options opts) override (defined in seastar::net::posix_ap_network_stack)seastar::net::posix_ap_network_stackvirtual
make_bound_datagram_channel(const socket_address &local) override (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackvirtual
make_udp_channel(const socket_address &) override (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackvirtual
make_unbound_datagram_channel(sa_family_t) override (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackvirtual
network_interfaces() overrideseastar::net::posix_network_stackvirtual
posix_ap_network_stack(const program_options::option_group &opts, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator) (defined in seastar::net::posix_ap_network_stack)seastar::net::posix_ap_network_stack
posix_network_stack(const program_options::option_group &opts, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator) (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackexplicit
socket() override (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackvirtual
supports_ipv6() const override (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackvirtual
~network_stack() (defined in seastar::network_stack)seastar::network_stackinlinevirtual
+ + + + diff --git a/master/classseastar_1_1net_1_1posix__ap__network__stack.html b/master/classseastar_1_1net_1_1posix__ap__network__stack.html new file mode 100644 index 000000000..6f9cdab81 --- /dev/null +++ b/master/classseastar_1_1net_1_1posix__ap__network__stack.html @@ -0,0 +1,370 @@ + + + + + + + +Seastar: seastar::net::posix_ap_network_stack Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::posix_ap_network_stack Class Reference
+
+
+
+Inheritance diagram for seastar::net::posix_ap_network_stack:
+
+
+ + +seastar::net::posix_network_stack +seastar::network_stack + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

posix_ap_network_stack (const program_options::option_group &opts, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator)
 
virtual server_socket listen (socket_address sa, listen_options opts) override
 
virtual ::seastar::socket socket () override
 
virtual net::udp_channel make_udp_channel (const socket_address &) override
 
virtual net::datagram_channel make_unbound_datagram_channel (sa_family_t) override
 
virtual net::datagram_channel make_bound_datagram_channel (const socket_address &local) override
 
virtual bool has_per_core_namespace () override
 
bool supports_ipv6 () const override
 
std::vector< network_interfacenetwork_interfaces () override
 
+future< connected_socketconnect (socket_address sa, socket_address={}, transport proto=transport::TCP)
 
+virtual future initialize ()
 
+ + + +

+Static Public Member Functions

+static future< std::unique_ptr< network_stack > > create (const program_options::option_group &opts, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator)
 
+ + + +

+Protected Attributes

+std::pmr::polymorphic_allocator< char > * _allocator
 
+

Member Function Documentation

+ +

◆ has_per_core_namespace()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool seastar::net::posix_network_stack::has_per_core_namespace ()
+
+inlineoverridevirtualinherited
+
+ +

Implements seastar::network_stack.

+ +
+
+ +

◆ listen()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual server_socket seastar::net::posix_ap_network_stack::listen (socket_address sa,
listen_options opts 
)
+
+overridevirtual
+
+ +

Reimplemented from seastar::net::posix_network_stack.

+ +
+
+ +

◆ make_bound_datagram_channel()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual net::datagram_channel seastar::net::posix_network_stack::make_bound_datagram_channel (const socket_addresslocal)
+
+overridevirtualinherited
+
+ +

Implements seastar::network_stack.

+ +
+
+ +

◆ make_udp_channel()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual net::udp_channel seastar::net::posix_network_stack::make_udp_channel (const socket_address)
+
+overridevirtualinherited
+
+ +

Implements seastar::network_stack.

+ +
+
+ +

◆ make_unbound_datagram_channel()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual net::datagram_channel seastar::net::posix_network_stack::make_unbound_datagram_channel (sa_family_t )
+
+overridevirtualinherited
+
+ +

Implements seastar::network_stack.

+ +
+
+ +

◆ network_interfaces()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< network_interface > seastar::net::posix_network_stack::network_interfaces ()
+
+overridevirtualinherited
+
+

Returns available network interfaces. This represents a snapshot of interfaces available at call time, hence the return by value.

+ +

Reimplemented from seastar::network_stack.

+ +
+
+ +

◆ socket()

+ +
+
+ + + + + +
+ + + + + + + +
virtual ::seastar::socket seastar::net::posix_network_stack::socket ()
+
+overridevirtualinherited
+
+ +

Implements seastar::network_stack.

+ +
+
+ +

◆ supports_ipv6()

+ +
+
+ + + + + +
+ + + + + + + +
bool seastar::net::posix_network_stack::supports_ipv6 () const
+
+overridevirtualinherited
+
+ +

Reimplemented from seastar::network_stack.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1posix__ap__network__stack.png b/master/classseastar_1_1net_1_1posix__ap__network__stack.png new file mode 100644 index 0000000000000000000000000000000000000000..c5918f21959b5d42edf6789a6e70eeecc7e9cddf GIT binary patch literal 1147 zcmeAS@N?(olHy`uVBq!ia0vp^w}H5WgBeIhy60&FDTx4|5ZC|z{{xvX-h3_XKQsZz z0^9Q7kP61Pb8k<2ti|IhK6}-_|Niq- z_9^Ij^NU)_kF#p7lfSZRG-gL7mb{>EM$Y{BzxA`DnBo?-<+f}_w|VsgL}NO zGvX%gZCV@kc&kTN-L>0qEBl`mhV#h(pU1zt=k4c}aSLbVe%{qtK07z^kj^xfYF#bm z-rB^~xw^M5DwUVNGtW`|sygM>O_#zsESsBO-z(D&*&TY*<5KkBO=|P6ZvFc%`Pt6o z=s1;=amm}tw&`yQ-MJ+*@6p?DYo}bRJMfCjR`X9|FVH3SR{6(GSE}@e?3B@0@(lml zXt%ShXYbz9hijgOR-F-ga!-AC&6dqK-)VV@e?9nqw#wh&U+p*I{ywWaK4Hnmr28r- z=QsII`lERR$dJpid~UOxVc&B322WGN+vm^kDG=Uldtq7Y?3ud1R2tk_r5o&t#|PY} z6rY>irQ;c_1u`6D%S*B7NlS|7&YJUEey?m#xwG^A^_x5|ZQOTgTHLgiKO^(EKd;?& zJk~Jg{ijXf#TD($Ww3~kJbv%S}lyU|$AbJO)jMwf2Q=fABGHTzJQ ze)7e>N78TZ%vk$m{h4sv+YGl=Wcc$h%H8^+nPaodVcYJ&K)GvAHoI)Q9~2z=@(QD# zKHrTs_2;+k-j|-uyz_LJ>XB!wBDXZJI3JX%uUag-Q}6id)a+MlSD$P=dw=fs?WUGC z`MLU%I!jfyt_rj6^PjX=@9W8}rf+Ol%`RR$@o38P9T(K4uTR>x*S~CK4)eylp_6vz z)!tWmx$55|XLZl{7ycjmmL+%ivA(DC-$Sb3d?(2uLgV1H;&a7Z52}AL&Il3S{P)ip zZga!i%(+oJX5L)n&r}hzf$>K$@wmoCbE(Nn4+daxGXUe0;m=E^+pIr=C&#P2KamPd zty3HIH!$A0vizpp{N|_G;eXd`zg@g>+qc)Z%PQs;ml|c~9adXcw(sa8)y>~NpRAiX z`-R#1t7-jZl1BQ%H?jjIGvA(Xe_aw4EWNx?C+F*}P%FMBv(9bNJAG4r_BzTZOkMHu zgIGkcMgFtbpKtkHcH4e;X2PmjHDQOpMQ5#AHA(HKcVLh6mVag|?mkc1_dO@KL_Mc; z>8vd#pUVZx_9Ql^tW%!-u;%o~tedm0UA&rdTln1^NYIz+OU~b(w~vMAO5Rb&3;DmE z?D}`F&+7YD8L`Q8A4kov`Fpi@;k@-vir!C-t-Jjqr+n|XTIL!cGhX~KhpSfoRc?G}X-*zkF>Be;b6ktig;OXk;vd$@?2>?SHJt_bI literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1posix__ap__server__socket__impl-members.html b/master/classseastar_1_1net_1_1posix__ap__server__socket__impl-members.html new file mode 100644 index 000000000..942ff0875 --- /dev/null +++ b/master/classseastar_1_1net_1_1posix__ap__server__socket__impl-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::posix_ap_server_socket_impl Member List
+
+
+ +

This is the complete list of members for seastar::net::posix_ap_server_socket_impl, including all inherited members.

+ + + + + + + +
abort_accept() override (defined in seastar::net::posix_ap_server_socket_impl)seastar::net::posix_ap_server_socket_implvirtual
accept() override (defined in seastar::net::posix_ap_server_socket_impl)seastar::net::posix_ap_server_socket_implvirtual
local_address() const override (defined in seastar::net::posix_ap_server_socket_impl)seastar::net::posix_ap_server_socket_implinline
move_connected_socket(int protocol, socket_address sa, pollable_fd fd, socket_address addr, conntrack::handle handle, std::pmr::polymorphic_allocator< char > *allocator) (defined in seastar::net::posix_ap_server_socket_impl)seastar::net::posix_ap_server_socket_implstatic
posix_ap_server_socket_impl(int protocol, socket_address sa, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator) (defined in seastar::net::posix_ap_server_socket_impl)seastar::net::posix_ap_server_socket_implexplicit
~posix_ap_server_socket_impl() (defined in seastar::net::posix_ap_server_socket_impl)seastar::net::posix_ap_server_socket_impl
+ + + + diff --git a/master/classseastar_1_1net_1_1posix__ap__server__socket__impl.html b/master/classseastar_1_1net_1_1posix__ap__server__socket__impl.html new file mode 100644 index 000000000..e8d00c6fa --- /dev/null +++ b/master/classseastar_1_1net_1_1posix__ap__server__socket__impl.html @@ -0,0 +1,115 @@ + + + + + + + +Seastar: seastar::net::posix_ap_server_socket_impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::posix_ap_server_socket_impl Class Reference
+
+
+
+Inheritance diagram for seastar::net::posix_ap_server_socket_impl:
+
+
+ +
+ + + + + + + + + + +

+Public Member Functions

posix_ap_server_socket_impl (int protocol, socket_address sa, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator)
 
+virtual future< accept_resultaccept () override
 
+virtual void abort_accept () override
 
+socket_address local_address () const override
 
+ + + +

+Static Public Member Functions

+static void move_connected_socket (int protocol, socket_address sa, pollable_fd fd, socket_address addr, conntrack::handle handle, std::pmr::polymorphic_allocator< char > *allocator)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1posix__ap__server__socket__impl.png b/master/classseastar_1_1net_1_1posix__ap__server__socket__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..ad8b2982a38031497d26fc4f771c5d020fb7053c GIT binary patch literal 778 zcmeAS@N?(olHy`uVBq!ia0vp^KY%!ZgBeINJ9z8@QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;y~4d0f@M|NY0c zoDST08TEbE@`MWsy-?uooVdQdg< z!qo%0bJKs?Nyr@yjT z^2_MMy;n=FGfz)(|C#qB`b~8d%Y%b{o|n3-@>l75-nz7Lk4yfm8s!gXf37~Tdx1?w z#AH61xu4A&`P1(_c3&ws=i`L4ORniv9y`A3-M_sr14HjW_~n!_DLZ`4t4Uw_zut4O z=iE0TBrkP}z%czwU#yG)~qJ*}E81Lc%`W*43;G`_O8wUK#Zv z@+xCdW)pMDB^LG*OE~!^cnZrXOjfgSQ1dNl@R{|1VW!DJMqn7AD0pz$$oRAdkHUPI zx+l;r_|f~Ufo@K=iT3DZ~vaYd@<&k zPV=4Y8)xkf)Wt|{$%?V!`6_qRaL(C1_O}neJh**%9iPGVQ+uu&{jxXfe|bHow&k(a zVn{Ih?PmJEk@rDv%Itlw*)Q^IyFOFQvHw{i!7K4(_r&*dv1eCR*z<4XTe&aAbMLm0 z+`o^rZ%@)@`~G(XyWiY))vKp3O4&~z*t%gA^PY9`KHom(|F4L!W7`)t?_H`)FT?U*jrmW0 uWj|=h|9@SY{RbZ`bW8rPnmzOBW%&y!Qy1;BIim+mxD1}IelF{r5}E*ffrH5a literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1posix__data__sink__impl-members.html b/master/classseastar_1_1net_1_1posix__data__sink__impl-members.html new file mode 100644 index 000000000..2bbe967dd --- /dev/null +++ b/master/classseastar_1_1net_1_1posix__data__sink__impl-members.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::posix_data_sink_impl Member List
+
+
+ +

This is the complete list of members for seastar::net::posix_data_sink_impl, including all inherited members.

+ + + + + + + + + + + + + + +
allocate_buffer(size_t size) (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
buffer_size() const noexcept (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
can_batch_flushes() const noexcept override (defined in seastar::net::posix_data_sink_impl)seastar::net::posix_data_sink_implinlinevirtual
close() override (defined in seastar::net::posix_data_sink_impl)seastar::net::posix_data_sink_implvirtual
flush() (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
on_batch_flush_error() noexcept override (defined in seastar::net::posix_data_sink_impl)seastar::net::posix_data_sink_implvirtual
posix_data_sink_impl(pollable_fd fd) (defined in seastar::net::posix_data_sink_impl)seastar::net::posix_data_sink_implinlineexplicit
put(packet p) override (defined in seastar::net::posix_data_sink_impl)seastar::net::posix_data_sink_implvirtual
put(temporary_buffer< char > buf) override (defined in seastar::net::posix_data_sink_impl)seastar::net::posix_data_sink_implvirtual
put(net::packet data)=0 (defined in seastar::net::posix_data_sink_impl)seastar::net::posix_data_sink_implvirtual
put(std::vector< temporary_buffer< char > > data) (defined in seastar::net::posix_data_sink_impl)seastar::net::posix_data_sink_implinlinevirtual
put(temporary_buffer< char > buf) (defined in seastar::net::posix_data_sink_impl)seastar::net::posix_data_sink_implinlinevirtual
~data_sink_impl() (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
+ + + + diff --git a/master/classseastar_1_1net_1_1posix__data__sink__impl.html b/master/classseastar_1_1net_1_1posix__data__sink__impl.html new file mode 100644 index 000000000..4a459393c --- /dev/null +++ b/master/classseastar_1_1net_1_1posix__data__sink__impl.html @@ -0,0 +1,348 @@ + + + + + + + +Seastar: seastar::net::posix_data_sink_impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::posix_data_sink_impl Class Reference
+
+
+
+Inheritance diagram for seastar::net::posix_data_sink_impl:
+
+
+ + +seastar::data_sink_impl + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

posix_data_sink_impl (pollable_fd fd)
 
future put (packet p) override
 
future put (temporary_buffer< char > buf) override
 
future close () override
 
bool can_batch_flushes () const noexcept override
 
void on_batch_flush_error () noexcept override
 
virtual future put (net::packet data)=0
 
virtual future put (std::vector< temporary_buffer< char > > data)
 
virtual future put (temporary_buffer< char > buf)
 
+virtual temporary_buffer< char > allocate_buffer (size_t size)
 
+virtual future flush ()
 
+virtual size_t buffer_size () const noexcept
 
+

Member Function Documentation

+ +

◆ can_batch_flushes()

+ +
+
+ + + + + +
+ + + + + + + +
bool seastar::net::posix_data_sink_impl::can_batch_flushes () const
+
+inlineoverridevirtualnoexcept
+
+ +

Reimplemented from seastar::data_sink_impl.

+ +
+
+ +

◆ close()

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::net::posix_data_sink_impl::close ()
+
+overridevirtual
+
+ +

Implements seastar::data_sink_impl.

+ +
+
+ +

◆ on_batch_flush_error()

+ +
+
+ + + + + +
+ + + + + + + +
void seastar::net::posix_data_sink_impl::on_batch_flush_error ()
+
+overridevirtualnoexcept
+
+ +

Reimplemented from seastar::data_sink_impl.

+ +
+
+ +

◆ put() [1/5]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual future seastar::data_sink_impl::put (net::packet data)
+
+virtual
+
+ +

Implements seastar::data_sink_impl.

+ +
+
+ +

◆ put() [2/5]

+ +
+
+ + + + + +
+ + + + + + + + +
future seastar::net::posix_data_sink_impl::put (packet p)
+
+overridevirtual
+
+ +

Implements seastar::data_sink_impl.

+ +
+
+ +

◆ put() [3/5]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual future seastar::data_sink_impl::put (std::vector< temporary_buffer< char > > data)
+
+inlinevirtual
+
+ +

Reimplemented from seastar::data_sink_impl.

+ +
+
+ +

◆ put() [4/5]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual future seastar::data_sink_impl::put (temporary_buffer< char > buf)
+
+inlinevirtual
+
+ +

Reimplemented from seastar::data_sink_impl.

+ +
+
+ +

◆ put() [5/5]

+ +
+
+ + + + + +
+ + + + + + + + +
future seastar::net::posix_data_sink_impl::put (temporary_buffer< char > buf)
+
+overridevirtual
+
+ +

Reimplemented from seastar::data_sink_impl.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1posix__data__sink__impl.png b/master/classseastar_1_1net_1_1posix__data__sink__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..d99d39c0d5c9dbd41c0366a5fe4b31a2cc2f9999 GIT binary patch literal 763 zcmeAS@N?(olHy`uVBq!ia0vp^CxAGBgBeI>Z$8xoq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0x;$MRLn;{G&V4v(vjUGR|Mi)*|K0yZ zG4e9%{$9I#DWB}S6^bn~9AETLZ_+6j=vJxSr`Dm;yM$B8Q~Bj`1;9?7t`D(9A3*MagJE>%y-2{mnK2j>T zgKk}WAzQod*vT~xX2+-AQ1-gCbC+Y$HnZuEZi`MXUz2rqg4k|V*2{Wqp3#5)EM2ZS z;q7jwPT6Biwbt6RfAr24FZI6NEHgDMcJ;a~b^J@-_w2BGZ=u}k%>3k&anSv!ol2jk zKC$>7t$oktd@PlY@o)lWsShiRMnw@fBzQDrIoH#KI`y zDa?|fLP%gixME8IyC8#IJWTZ!#!HS>uP(j1lgsYR4-CAMU)U8G;`AMVC5J2Y&$jrt zTBQHWto`Nrujg0owLI$6?DOv8CjPs}XFFP6`<1pSj(z!#mHRz(zs;J+nB!fXFZRAZ z@7u`=`T5y`rvu!IV>pecGoQS9tKsPO)g3~AF3br(@KdBXWNTWJ$ZpnyTf{tWE&qDn z&hD&U{(Vu8Hx>*VA7@Xf&FG4odhLJXkFOiGH=n(GOE9}!LBPlQ)>fmU*k|ju#5H`G zJ8}Bbt2W9{6W`l`LU~E8+pB2p{Oo<t>Bmkz zUbccoMeFQYBK6xIylJYPRm!0AWLU*-&dt;VuYon63` O%HZkh=d#Wzp$Pzheo{LC literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1posix__data__source__impl-members.html b/master/classseastar_1_1net_1_1posix__data__source__impl-members.html new file mode 100644 index 000000000..8141176f2 --- /dev/null +++ b/master/classseastar_1_1net_1_1posix__data__source__impl-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::posix_data_source_impl Member List
+
+
+ +

This is the complete list of members for seastar::net::posix_data_source_impl, including all inherited members.

+ + + + + + +
close() override (defined in seastar::net::posix_data_source_impl)seastar::net::posix_data_source_implvirtual
get() override (defined in seastar::net::posix_data_source_impl)seastar::net::posix_data_source_implvirtual
posix_data_source_impl(pollable_fd fd, connected_socket_input_stream_config config, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator) (defined in seastar::net::posix_data_source_impl)seastar::net::posix_data_source_implinlineexplicit
skip(uint64_t n) (defined in seastar::data_source_impl)seastar::data_source_implinlinevirtual
~data_source_impl() (defined in seastar::data_source_impl)seastar::data_source_implinlinevirtual
+ + + + diff --git a/master/classseastar_1_1net_1_1posix__data__source__impl.html b/master/classseastar_1_1net_1_1posix__data__source__impl.html new file mode 100644 index 000000000..f56907502 --- /dev/null +++ b/master/classseastar_1_1net_1_1posix__data__source__impl.html @@ -0,0 +1,163 @@ + + + + + + + +Seastar: seastar::net::posix_data_source_impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::posix_data_source_impl Class Referencefinal
+
+
+
+Inheritance diagram for seastar::net::posix_data_source_impl:
+
+
+ + +seastar::data_source_impl + +
+ + + + + + + + + + +

+Public Member Functions

posix_data_source_impl (pollable_fd fd, connected_socket_input_stream_config config, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator)
 
future< temporary_buffer< char > > get () override
 
future close () override
 
+virtual future< temporary_buffer< char > > skip (uint64_t n)
 
+

Member Function Documentation

+ +

◆ close()

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::net::posix_data_source_impl::close ()
+
+overridevirtual
+
+ +

Reimplemented from seastar::data_source_impl.

+ +
+
+ +

◆ get()

+ +
+
+ + + + + +
+ + + + + + + +
future< temporary_buffer< char > > seastar::net::posix_data_source_impl::get ()
+
+overridevirtual
+
+ +

Implements seastar::data_source_impl.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1posix__data__source__impl.png b/master/classseastar_1_1net_1_1posix__data__source__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..3a6e0fd2966e2395a2792618d4f6a282f7b400cb GIT binary patch literal 1231 zcmZ{kdrVVT9LH}9Dl#4-YC#1e$wn}m8VbGRVcA^iXo9@jD}>^ONd)B$g;JP2hPpr& zh8wilmX?P=X(ix*ma!J8uuV3K#4?IdK$xREN}*65^4`@yw|J6s&gUfGbG|vh^UWy^ z4*b&6{Iod$0G4EbVkiKh3zERXrX4aXb9s(sv%RjM|eNfA!Z9@csZ8lyCFH7Y;o%^XZk!_`Z(8EpDf0 z=VfE-cBGp@y_F$rv>i!oXW-Ue&&C9HtAe`1_NHwwe_|4XY8`OKZJp zY~U(c^xK#nEk0NmnRMxlu68_||H1?sjucLFoLya|#)c5-_dLQ_kGGjR&t&oBWu|x9*4#*c@|E$N{pKX7p0D=3%`08K{ycL)2^vn_O%v7Xdmqcoin=Dz*bd1& zwp7REEGux@oab2veA>Y87kv_PEMeM}gcbMs7N3o=*aSTU3vYJY3a(PfO1KrzitEUX zkL_L!NOO`5sMn6m>2WYUfKM zZf~IktiQj!rlF{>N_Rp+PohA>GQ!am!cR#d#YKza*~{kgT@4kA3ZcGx^sPb{=k#l+ zAmXngw4kU634x6b5&~!Ez)VYKhenUDwU8rO2?3mj9HJ9*Q5K?tBU6;k9mCqwr=)s} z0l2g9EIA{`nsHb45fe!ExHDpE2Vn}p_zAxm)Xxyrv4DcWryqcc<;|Trv>8e+_W!s5 z@dglU0Er(^d43Anq%cVpBX(4jwL*kOPWphrK&mfSJwV%Cf3)BCf4NIr>YNJ4mSE`P zqk;p8+{NB2NU6HTr z#hRs%Kiglq*~rE`>>u8C!h#a^1b1!+t4e%jN+TRG8g$QaQ8|B5W`eV1UNy4*!GA!) zFb<#Fem~3LsCQwEO1Ey2b>U+$CuQp5w+>9k!6|r@`zQ?CYTdFL7~S%?Cn5iB1nR04 zSiZR3AX(RF8zgGcQu{zx+l6nsnl<>K%Iw$Dfh7*eyEs)$bNyu<}1;K{{p>j BT}1!@ literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1posix__network__stack-members.html b/master/classseastar_1_1net_1_1posix__network__stack-members.html new file mode 100644 index 000000000..4999a9106 --- /dev/null +++ b/master/classseastar_1_1net_1_1posix__network__stack-members.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::posix_network_stack Member List
+
+
+ +

This is the complete list of members for seastar::net::posix_network_stack, including all inherited members.

+ + + + + + + + + + + + + + + +
_allocator (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackprotected
connect(socket_address sa, socket_address={}, transport proto=transport::TCP) (defined in seastar::network_stack)seastar::network_stack
create(const program_options::option_group &opts, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator) (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackinlinestatic
has_per_core_namespace() override (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackinlinevirtual
initialize() (defined in seastar::network_stack)seastar::network_stackinlinevirtual
listen(socket_address sa, listen_options opts) override (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackvirtual
make_bound_datagram_channel(const socket_address &local) override (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackvirtual
make_udp_channel(const socket_address &) override (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackvirtual
make_unbound_datagram_channel(sa_family_t) override (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackvirtual
network_interfaces() overrideseastar::net::posix_network_stackvirtual
posix_network_stack(const program_options::option_group &opts, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator) (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackexplicit
socket() override (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackvirtual
supports_ipv6() const override (defined in seastar::net::posix_network_stack)seastar::net::posix_network_stackvirtual
~network_stack() (defined in seastar::network_stack)seastar::network_stackinlinevirtual
+ + + + diff --git a/master/classseastar_1_1net_1_1posix__network__stack.html b/master/classseastar_1_1net_1_1posix__network__stack.html new file mode 100644 index 000000000..cdef9ff90 --- /dev/null +++ b/master/classseastar_1_1net_1_1posix__network__stack.html @@ -0,0 +1,370 @@ + + + + + + + +Seastar: seastar::net::posix_network_stack Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::posix_network_stack Class Reference
+
+
+
+Inheritance diagram for seastar::net::posix_network_stack:
+
+
+ + +seastar::network_stack +seastar::net::posix_ap_network_stack + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

posix_network_stack (const program_options::option_group &opts, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator)
 
virtual server_socket listen (socket_address sa, listen_options opts) override
 
virtual ::seastar::socket socket () override
 
virtual net::udp_channel make_udp_channel (const socket_address &) override
 
virtual net::datagram_channel make_unbound_datagram_channel (sa_family_t) override
 
virtual net::datagram_channel make_bound_datagram_channel (const socket_address &local) override
 
virtual bool has_per_core_namespace () override
 
bool supports_ipv6 () const override
 
std::vector< network_interfacenetwork_interfaces () override
 
+future< connected_socketconnect (socket_address sa, socket_address={}, transport proto=transport::TCP)
 
+virtual future initialize ()
 
+ + + +

+Static Public Member Functions

+static future< std::unique_ptr< network_stack > > create (const program_options::option_group &opts, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator)
 
+ + + +

+Protected Attributes

+std::pmr::polymorphic_allocator< char > * _allocator
 
+

Member Function Documentation

+ +

◆ has_per_core_namespace()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool seastar::net::posix_network_stack::has_per_core_namespace ()
+
+inlineoverridevirtual
+
+ +

Implements seastar::network_stack.

+ +
+
+ +

◆ listen()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual server_socket seastar::net::posix_network_stack::listen (socket_address sa,
listen_options opts 
)
+
+overridevirtual
+
+ +

Implements seastar::network_stack.

+ +
+
+ +

◆ make_bound_datagram_channel()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual net::datagram_channel seastar::net::posix_network_stack::make_bound_datagram_channel (const socket_addresslocal)
+
+overridevirtual
+
+ +

Implements seastar::network_stack.

+ +
+
+ +

◆ make_udp_channel()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual net::udp_channel seastar::net::posix_network_stack::make_udp_channel (const socket_address)
+
+overridevirtual
+
+ +

Implements seastar::network_stack.

+ +
+
+ +

◆ make_unbound_datagram_channel()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual net::datagram_channel seastar::net::posix_network_stack::make_unbound_datagram_channel (sa_family_t )
+
+overridevirtual
+
+ +

Implements seastar::network_stack.

+ +
+
+ +

◆ network_interfaces()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< network_interface > seastar::net::posix_network_stack::network_interfaces ()
+
+overridevirtual
+
+

Returns available network interfaces. This represents a snapshot of interfaces available at call time, hence the return by value.

+ +

Reimplemented from seastar::network_stack.

+ +
+
+ +

◆ socket()

+ +
+
+ + + + + +
+ + + + + + + +
virtual ::seastar::socket seastar::net::posix_network_stack::socket ()
+
+overridevirtual
+
+ +

Implements seastar::network_stack.

+ +
+
+ +

◆ supports_ipv6()

+ +
+
+ + + + + +
+ + + + + + + +
bool seastar::net::posix_network_stack::supports_ipv6 () const
+
+overridevirtual
+
+ +

Reimplemented from seastar::network_stack.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1posix__network__stack.png b/master/classseastar_1_1net_1_1posix__network__stack.png new file mode 100644 index 0000000000000000000000000000000000000000..5084743d1f1fe271c185b57110468b8b8650861b GIT binary patch literal 1152 zcmeAS@N?(olHy`uVBq!ia0vp^w}H5WgBeIhy60&FDTx4|5ZC|z{{xvX-h3_XKQsZz z0^E|+oS7p~Hn%>cru>R;N^Le^Na!iPeXH?KRHP3HPawett$ER>lDp@!4^nrUb^?3AG z?wPZ8)?-`GjJiv2|J9^?+H<<^eEs_NC5OI$4LKjsyUqRXk=GEjLxl%irneRK6_Mx>`K(XpLZ(tWWjrvjK0zo+^9Fe?2~{CiMEh>Kk3p`*N!V zmwb}iymj&432UQH7tNeqv%B{6(o&fXyPW*F>K`b3KL0iS-0eMTqDv;On($L)Qb}n1 zi^(gKW!|p!R-YRF&MWn(4ZZf<%Nj%=S zNWdu~gr!0CX$}K0>=?e4biZwSz4CPBpEqxTq1U$2K9zaKYxSJ-{D;5YT@4PvBew51 zC0E^^b$N#7iy0ev@7CPYT2^U$^<-%0n?UBihf*rnUoAJv4_=~ktWUUjrpxQeH(zCX zZHcTqe0T1f_jXk~HGb~&*$~^Zv+{h|tIPU{!WUIH-S6!xikiG$=w^MfZ|Krs^&NX> zY?%7d_O{@!nQMKY=tXZ;cp7CoxlG_|iZp7Z{hq0K)A=f8?azVjYfFo*ZRJP?kXe*+jcK@9sZGbaShI_lg zZQZ(B{))d9S~D_8M9nZ{E=$t zb)A%i_dYj2Fq?VqTA9DOb-SU7{mZg?JEi&MHx2jZp3OWXGUfT5xOeLwe>Cgg-nBE{ z-_>XKUAd_>eA~{3?BNNj%sn;j+W$K-3*Ty9-&2~9w)*+HX~~nmybIp+w6ZwktBuEo zs1+M4{nu#D;eY(~^)0^3Y1{A1+WGqKTb20#tZ8Vd=jI>Lfjz-Gk54b@n=$#L-R7+~ z=WYmn^K_HR<8pzedlM%+6`rkWdz^cGb!v8$d-&w3=g)rrwo$G9`Pz4?k3V1Q6<6U6 zX+1Of-v#x{f84EK9SXM0(PKZp)$ZrN)zZ$kadD>?`cRC)rv88J8#P9+S9!#XgWXqGxein-8$K OVDNPHb6Mw<&;$Swh)$9K literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1posix__reuseport__server__socket__impl-members.html b/master/classseastar_1_1net_1_1posix__reuseport__server__socket__impl-members.html new file mode 100644 index 000000000..53da1b028 --- /dev/null +++ b/master/classseastar_1_1net_1_1posix__reuseport__server__socket__impl-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::posix_reuseport_server_socket_impl Member List
+
+
+ +

This is the complete list of members for seastar::net::posix_reuseport_server_socket_impl, including all inherited members.

+ + + + + +
abort_accept() override (defined in seastar::net::posix_reuseport_server_socket_impl)seastar::net::posix_reuseport_server_socket_implvirtual
accept() override (defined in seastar::net::posix_reuseport_server_socket_impl)seastar::net::posix_reuseport_server_socket_implvirtual
local_address() const override (defined in seastar::net::posix_reuseport_server_socket_impl)seastar::net::posix_reuseport_server_socket_implvirtual
posix_reuseport_server_socket_impl(int protocol, socket_address sa, pollable_fd lfd, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator) (defined in seastar::net::posix_reuseport_server_socket_impl)seastar::net::posix_reuseport_server_socket_implinlineexplicit
+ + + + diff --git a/master/classseastar_1_1net_1_1posix__reuseport__server__socket__impl.html b/master/classseastar_1_1net_1_1posix__reuseport__server__socket__impl.html new file mode 100644 index 000000000..798feade6 --- /dev/null +++ b/master/classseastar_1_1net_1_1posix__reuseport__server__socket__impl.html @@ -0,0 +1,107 @@ + + + + + + + +Seastar: seastar::net::posix_reuseport_server_socket_impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::posix_reuseport_server_socket_impl Class Reference
+
+
+
+Inheritance diagram for seastar::net::posix_reuseport_server_socket_impl:
+
+
+ +
+ + + + + + + + + + +

+Public Member Functions

posix_reuseport_server_socket_impl (int protocol, socket_address sa, pollable_fd lfd, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator)
 
+virtual future< accept_resultaccept () override
 
+virtual void abort_accept () override
 
+virtual socket_address local_address () const override
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1posix__reuseport__server__socket__impl.png b/master/classseastar_1_1net_1_1posix__reuseport__server__socket__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..0f7351ccd2a1857f4fef9b3c2456f7d89ae8a0a7 GIT binary patch literal 912 zcmeAS@N?(olHy`uVBq!ia0y~yU{nCI12~w0WFJSwaUdlT;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z%1|S;uuoF_;&8aqSp#Mtl|2$|NkGq zzOhp;C(cPrT7*;%btt*?KD*vUH)pL{bKeMjfuiww>2#82bUBbPiu3LBZ;{4`sfj?F$ znh9-TtzWVr@l#yDjA;JXvQ74Z7p64tS(eewYN=6@5Tu_!xA|G{nZMsdZ)$Gyln~zK zxo*#AO*K#P;=fPoqc6;Ax?8C4sqV6HzP`t#ItQTJ3aR!oFd?)Z(x&6#Y5qn z?=Qxf13NO0FP|Ugf4MBXlc`^uZ&E9x@bL?eSNvVv#lq^=AN}T=>HYP!-Cuq;FIfA~ zWx{)V?pLza4+6xwXDz!q-5`W_=7}zL@bT`c2)G zv;KwY$M5}mqG{%0V{`P_8SCwD|JR0=b?r1R0dh@QqIn*)?@8J)-H+qJ>@%~!?B|R! zemr3KZn;7OjT)bbQ;rt@h$b=?@6ZXry*R89Z6?X-geHc7l{an^L HB{Ts5HV1$y literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1posix__server__socket__impl-members.html b/master/classseastar_1_1net_1_1posix__server__socket__impl-members.html new file mode 100644 index 000000000..332cac1c3 --- /dev/null +++ b/master/classseastar_1_1net_1_1posix__server__socket__impl-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::posix_server_socket_impl Member List
+
+
+ +

This is the complete list of members for seastar::net::posix_server_socket_impl, including all inherited members.

+ + + + + +
abort_accept() override (defined in seastar::net::posix_server_socket_impl)seastar::net::posix_server_socket_implvirtual
accept() override (defined in seastar::net::posix_server_socket_impl)seastar::net::posix_server_socket_implvirtual
local_address() const override (defined in seastar::net::posix_server_socket_impl)seastar::net::posix_server_socket_implvirtual
posix_server_socket_impl(int protocol, socket_address sa, pollable_fd lfd, server_socket::load_balancing_algorithm lba, shard_id fixed_cpu, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator) (defined in seastar::net::posix_server_socket_impl)seastar::net::posix_server_socket_implinlineexplicit
+ + + + diff --git a/master/classseastar_1_1net_1_1posix__server__socket__impl.html b/master/classseastar_1_1net_1_1posix__server__socket__impl.html new file mode 100644 index 000000000..ff0f152f9 --- /dev/null +++ b/master/classseastar_1_1net_1_1posix__server__socket__impl.html @@ -0,0 +1,107 @@ + + + + + + + +Seastar: seastar::net::posix_server_socket_impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::posix_server_socket_impl Class Reference
+
+
+
+Inheritance diagram for seastar::net::posix_server_socket_impl:
+
+
+ +
+ + + + + + + + + + +

+Public Member Functions

posix_server_socket_impl (int protocol, socket_address sa, pollable_fd lfd, server_socket::load_balancing_algorithm lba, shard_id fixed_cpu, std::pmr::polymorphic_allocator< char > *allocator=memory::malloc_allocator)
 
+virtual future< accept_resultaccept () override
 
+virtual void abort_accept () override
 
+virtual socket_address local_address () const override
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1posix__server__socket__impl.png b/master/classseastar_1_1net_1_1posix__server__socket__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..6734e8be27efb8d721ea3de1b5be71d3e54c721f GIT binary patch literal 761 zcmeAS@N?(olHy`uVBq!ia0vp^kAXOVgBeKP;WJtaq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0Iy_w*Ln;{G&b>QpwE~Z8c;2r2|9ksG zS(-LpzHHz9RQg+lvr44IBi*z#b#XP%<<}CXEcs_Dp}MkO_VkOS>9ZAS=<>r}H zqOka^zyJINs{OC;Px4Rgs(pTX$(uQ9LKpr#c(kd?>ymR-U*XBc1yAp9)%4f}FZo_~ zZ0F*T`vRV~0-xMsU94ieFdpc3b+Frc-8^5#3oo8|b0_PE$XEuyb@B;&V$SjZWbP4u z^ir|DvG7Z1gK>rd)0g!JIWFvHQ+D_-)x+>Nn~;G1^qDtLwldC%Y8G5j&+FFkuay0< z?CgTePp{5?aZTIYaYo872IT|VTMu(w$T)0K>o#ru(%nnuzpnkb?(gNCY`^Sf?W<(V z^)l#qHuTO1s6TQxfP$!z_b8)M7TK4+Tr zJUzK-&+hzH_ucQCnrE6%oK;gR@_x74q|-|GcKJs6uJwCw7w^4x>Tll1MjH=D*vHEY zi?2+1=yT3IDMu-JhoDha_SV*ieA`za=}EX+uzvZR2ZtoSO`JRB_6do+H&gTe~DWM4fcvo@Q literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1net_1_1qp-members.html b/master/classseastar_1_1net_1_1qp-members.html new file mode 100644 index 000000000..c1cdd5073 --- /dev/null +++ b/master/classseastar_1_1net_1_1qp-members.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::qp Member List
+
+
+ +

This is the complete list of members for seastar::net::qp, including all inherited members.

+ + + + + + + + + + + + + + + +
_metrics (defined in seastar::net::qp)seastar::net::qpprotected
_queue_name (defined in seastar::net::qp)seastar::net::qpprotected
_stats (defined in seastar::net::qp)seastar::net::qpprotected
_stats_plugin_name (defined in seastar::net::qp)seastar::net::qpprotected
build_sw_reta(const std::map< unsigned, float > &cpu_weights) (defined in seastar::net::qp)seastar::net::qp
configure_proxies(const std::map< unsigned, float > &cpu_weights) (defined in seastar::net::qp)seastar::net::qp
poll_tx() (defined in seastar::net::qp)seastar::net::qp
proxy_send(packet p) (defined in seastar::net::qp)seastar::net::qpinline
qp(bool register_copy_stats=false, const std::string stats_plugin_name=std::string("network"), uint8_t qid=0) (defined in seastar::net::qp)seastar::net::qp
register_packet_provider(packet_provider_type func) (defined in seastar::net::qp)seastar::net::qpinline
rx_start() (defined in seastar::net::qp)seastar::net::qpinlinevirtual
send(packet p)=0 (defined in seastar::net::qp)seastar::net::qppure virtual
send(circular_buffer< packet > &p) (defined in seastar::net::qp)seastar::net::qpinlinevirtual
~qp() (defined in seastar::net::qp)seastar::net::qpvirtual
+ + + + diff --git a/master/classseastar_1_1net_1_1qp.html b/master/classseastar_1_1net_1_1qp.html new file mode 100644 index 000000000..c9a279380 --- /dev/null +++ b/master/classseastar_1_1net_1_1qp.html @@ -0,0 +1,132 @@ + + + + + + + +Seastar: seastar::net::qp Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::qp Class Referenceabstract
+
+
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

qp (bool register_copy_stats=false, const std::string stats_plugin_name=std::string("network"), uint8_t qid=0)
 
+virtual future send (packet p)=0
 
+virtual uint32_t send (circular_buffer< packet > &p)
 
+virtual void rx_start ()
 
+void configure_proxies (const std::map< unsigned, float > &cpu_weights)
 
+void build_sw_reta (const std::map< unsigned, float > &cpu_weights)
 
+void proxy_send (packet p)
 
+void register_packet_provider (packet_provider_type func)
 
+bool poll_tx ()
 
+ + + + + + + + + +

+Protected Attributes

+const std::string _stats_plugin_name
 
+const std::string _queue_name
 
+metrics::metric_groups _metrics
 
+qp_stats _stats
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1tcp-members.html b/master/classseastar_1_1net_1_1tcp-members.html new file mode 100644 index 000000000..0056d80bf --- /dev/null +++ b/master/classseastar_1_1net_1_1tcp-members.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::tcp< InetTraits > Member List
+
+
+ +

This is the complete list of members for seastar::net::tcp< InetTraits >, including all inherited members.

+ + + + + + + + + + + + + + +
add_connected_tcb(lw_shared_ptr< tcb > tcbp, uint16_t local_port) (defined in seastar::net::tcp< InetTraits >)seastar::net::tcp< InetTraits >inline
connect(socket_address sa) (defined in seastar::net::tcp< InetTraits >)seastar::net::tcp< InetTraits >
connid typedef (defined in seastar::net::tcp< InetTraits >)seastar::net::tcp< InetTraits >
connid_hash typedef (defined in seastar::net::tcp< InetTraits >)seastar::net::tcp< InetTraits >
forward(forward_hash &out_hash_data, packet &p, size_t off) (defined in seastar::net::tcp< InetTraits >)seastar::net::tcp< InetTraits >
hw_features() const (defined in seastar::net::tcp< InetTraits >)seastar::net::tcp< InetTraits >inline
inet() const (defined in seastar::net::tcp< InetTraits >)seastar::net::tcp< InetTraits >inline
inet_type typedef (defined in seastar::net::tcp< InetTraits >)seastar::net::tcp< InetTraits >
ipaddr typedef (defined in seastar::net::tcp< InetTraits >)seastar::net::tcp< InetTraits >
listen(uint16_t port, size_t queue_length=100) (defined in seastar::net::tcp< InetTraits >)seastar::net::tcp< InetTraits >
poll_tcb(ipaddr to, lw_shared_ptr< tcb > tcb) (defined in seastar::net::tcp< InetTraits >)seastar::net::tcp< InetTraits >
received(packet p, ipaddr from, ipaddr to) (defined in seastar::net::tcp< InetTraits >)seastar::net::tcp< InetTraits >
tcp(inet_type &inet) (defined in seastar::net::tcp< InetTraits >)seastar::net::tcp< InetTraits >explicit
+ + + + diff --git a/master/classseastar_1_1net_1_1tcp.html b/master/classseastar_1_1net_1_1tcp.html new file mode 100644 index 000000000..58fa6cdcc --- /dev/null +++ b/master/classseastar_1_1net_1_1tcp.html @@ -0,0 +1,141 @@ + + + + + + + +Seastar: seastar::net::tcp< InetTraits > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::tcp< InetTraits > Class Template Reference
+
+
+ + + + + + +

+Classes

class  connection
 
class  listener
 
+ + + + + + + + + +

+Public Types

+using ipaddr = typename InetTraits::address_type
 
+using inet_type = typename InetTraits::inet_type
 
+using connid = l4connid< InetTraits >
 
+using connid_hash = typename connid::connid_hash
 
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+const inet_type & inet () const
 
tcp (inet_type &inet)
 
+void received (packet p, ipaddr from, ipaddr to)
 
+bool forward (forward_hash &out_hash_data, packet &p, size_t off)
 
+listener listen (uint16_t port, size_t queue_length=100)
 
+connection connect (socket_address sa)
 
+const net::hw_featureshw_features () const
 
+future poll_tcb (ipaddr to, lw_shared_ptr< tcb > tcb)
 
+void add_connected_tcb (lw_shared_ptr< tcb > tcbp, uint16_t local_port)
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/master/classseastar_1_1net_1_1tcp_1_1connection-members.html b/master/classseastar_1_1net_1_1tcp_1_1connection-members.html new file mode 100644 index 000000000..a962d1987 --- /dev/null +++ b/master/classseastar_1_1net_1_1tcp_1_1connection-members.html @@ -0,0 +1,100 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::tcp< InetTraits >::connection Member List
+
+
+ +

This is the complete list of members for seastar::net::tcp< InetTraits >::connection, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
close_read() noexcept (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connection
close_write() noexcept (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connection
connected() (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connectioninline
connection(lw_shared_ptr< tcb > tcbp) (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connectioninlineexplicit
connection(const connection &)=delete (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connection
connection(connection &&x) noexcept (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connectioninline
foreign_ip() (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connectioninline
foreign_port() (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connectioninline
local_ip() (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connectioninline
local_port() (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connectioninline
operator=(const connection &)=delete (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connection
operator=(connection &&x) (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connectioninline
read() (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connectioninline
send(packet p) (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connectioninline
shutdown_connect() (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connection
wait_for_data() (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connectioninline
wait_input_shutdown() (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connectioninline
~connection() (defined in seastar::net::tcp< InetTraits >::connection)seastar::net::tcp< InetTraits >::connection
+ + + + diff --git a/master/classseastar_1_1net_1_1tcp_1_1connection.html b/master/classseastar_1_1net_1_1tcp_1_1connection.html new file mode 100644 index 000000000..70f58a70e --- /dev/null +++ b/master/classseastar_1_1net_1_1tcp_1_1connection.html @@ -0,0 +1,140 @@ + + + + + + + +Seastar: seastar::net::tcp< InetTraits >::connection Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::tcp< InetTraits >::connection Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

connection (lw_shared_ptr< tcb > tcbp)
 
connection (const connection &)=delete
 
connection (connection &&x) noexcept
 
+void operator= (const connection &)=delete
 
+connectionoperator= (connection &&x)
 
+future connected ()
 
+future send (packet p)
 
+future wait_for_data ()
 
+future wait_input_shutdown ()
 
+packet read ()
 
+ipaddr foreign_ip ()
 
+uint16_t foreign_port ()
 
+ipaddr local_ip ()
 
+uint16_t local_port ()
 
+void shutdown_connect ()
 
+void close_read () noexcept
 
+void close_write () noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1tcp_1_1listener-members.html b/master/classseastar_1_1net_1_1tcp_1_1listener-members.html new file mode 100644 index 000000000..76bbdb598 --- /dev/null +++ b/master/classseastar_1_1net_1_1tcp_1_1listener-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::tcp< InetTraits >::listener Member List
+
+ + + + + diff --git a/master/classseastar_1_1net_1_1tcp_1_1listener.html b/master/classseastar_1_1net_1_1tcp_1_1listener.html new file mode 100644 index 000000000..17c9a5383 --- /dev/null +++ b/master/classseastar_1_1net_1_1tcp_1_1listener.html @@ -0,0 +1,113 @@ + + + + + + + +Seastar: seastar::net::tcp< InetTraits >::listener Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::net::tcp< InetTraits >::listener Class Reference
+
+
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

listener (listener &&x)
 
+future< connectionaccept ()
 
+void abort_accept ()
 
+bool full ()
 
+void inc_pending ()
 
+void dec_pending ()
 
+const tcpget_tcp () const
 
+uint16_t port () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1unknown__host.html b/master/classseastar_1_1net_1_1unknown__host.html new file mode 100644 index 000000000..806888cba --- /dev/null +++ b/master/classseastar_1_1net_1_1unknown__host.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: seastar::net::unknown_host Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::net::unknown_host Class Reference
+
+
+
+Inheritance diagram for seastar::net::unknown_host:
+
+
+ +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1net_1_1unknown__host.png b/master/classseastar_1_1net_1_1unknown__host.png new file mode 100644 index 0000000000000000000000000000000000000000..1aab735717e673f48b48840aab9dd6fe4f1773e6 GIT binary patch literal 1163 zcmeAS@N?(olHy`uVBq!ia0vp^i-7n52Q!e|AmC8}q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IYLq&!_5Ln;{G&b@tYl>rZ%x_RCE|Hq^? zm$Ew^T(Ency`Ec6mDDY^d_!YtX`e}MY9gv9y*0chO)nRjE~jqg=X*cCbG@e5rRq5$ zTYgt9S)X-JkWQVyWV2XHB1j+`5@HA5a%R#z*~cYZ`>Nc%5Q7sgs0n8_CDGGbhFXQ zeR7AczS(I~t*h(hFe$Fkt*|sRY@vKlDA;_G?>g{jVV@#iU_AG5!Vy z%IWzbKx0tiSiH;o>8-T&A4T5J_PS(QwrgIG_ zo}u6QcBbXd3b*|pr#^W}U##ooQ>j5auf@MzdnK%UQ$_gSP5Fys+NLb&OYiD+DSmdV zVC{{wm)Cqh#%#-@=_z~O{8wkvt+kca-$a711|Qw}J-Tc5XFH8=lgm1b6GU%EdA_o! z5tA1=J>B!^tdD(fPG`!)^=|KU)t9XCcQQPy+Cd2g6tQZq#+w&1?wBTh;6~5-iru{LE%rT1vDo#P zU&GCf`3Lr-fthapcmj>tc#r{@DIkf6xr=>X;_{Q7%kO9HI#TCVSoMF&_LSo2x@Se1 zvD@RbrU$-n46*+IYSy~mqKf1_S&ynN*~FA*A6l8d>({s3%Bk5_PY+?q6VhxhcV+|}xteix2SDBW{? zrB&EQ%YPw-`HT7I9A%b{RXuubhJ?wRp6v^N%(z&&yr}G}@)O|+vz|m;Ul(^W?f!Pr z*FEPX + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::network_interface Member List
+
+
+ +

This is the complete list of members for seastar::network_interface, including all inherited members.

+ + + + + + + + + + + + + + + +
addresses() const (defined in seastar::network_interface)seastar::network_interface
display_name() const (defined in seastar::network_interface)seastar::network_interface
hardware_address() const (defined in seastar::network_interface)seastar::network_interface
index() const (defined in seastar::network_interface)seastar::network_interface
is_loopback() const (defined in seastar::network_interface)seastar::network_interface
is_up() const (defined in seastar::network_interface)seastar::network_interface
is_virtual() const (defined in seastar::network_interface)seastar::network_interface
mtu() const (defined in seastar::network_interface)seastar::network_interface
name() const (defined in seastar::network_interface)seastar::network_interface
network_interface()=delete (defined in seastar::network_interface)seastar::network_interface
network_interface(shared_ptr< net::network_interface_impl >) noexcept (defined in seastar::network_interface)seastar::network_interface
network_interface(network_interface &&) noexcept (defined in seastar::network_interface)seastar::network_interface
operator=(network_interface &&) noexcept (defined in seastar::network_interface)seastar::network_interface
supports_ipv6() const (defined in seastar::network_interface)seastar::network_interface
+ + + + diff --git a/master/classseastar_1_1network__interface.html b/master/classseastar_1_1network__interface.html new file mode 100644 index 000000000..1eee47f2d --- /dev/null +++ b/master/classseastar_1_1network__interface.html @@ -0,0 +1,128 @@ + + + + + + + +Seastar: seastar::network_interface Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::network_interface Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

network_interface (shared_ptr< net::network_interface_impl >) noexcept
 
network_interface (network_interface &&) noexcept
 
+network_interfaceoperator= (network_interface &&) noexcept
 
+uint32_t index () const
 
+uint32_t mtu () const
 
+const sstring & name () const
 
+const sstring & display_name () const
 
+const std::vector< net::inet_address > & addresses () const
 
+const std::vector< uint8_t > hardware_address () const
 
+bool is_loopback () const
 
+bool is_virtual () const
 
+bool is_up () const
 
+bool supports_ipv6 () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1network__stack-members.html b/master/classseastar_1_1network__stack-members.html new file mode 100644 index 000000000..75f1bddb3 --- /dev/null +++ b/master/classseastar_1_1network__stack-members.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::network_stack Member List
+
+
+ +

This is the complete list of members for seastar::network_stack, including all inherited members.

+ + + + + + + + + + + + +
connect(socket_address sa, socket_address={}, transport proto=transport::TCP) (defined in seastar::network_stack)seastar::network_stack
has_per_core_namespace()=0 (defined in seastar::network_stack)seastar::network_stackpure virtual
initialize() (defined in seastar::network_stack)seastar::network_stackinlinevirtual
listen(socket_address sa, listen_options opts)=0 (defined in seastar::network_stack)seastar::network_stackpure virtual
make_bound_datagram_channel(const socket_address &local)=0 (defined in seastar::network_stack)seastar::network_stackpure virtual
make_udp_channel(const socket_address &={})=0 (defined in seastar::network_stack)seastar::network_stackpure virtual
make_unbound_datagram_channel(sa_family_t)=0 (defined in seastar::network_stack)seastar::network_stackpure virtual
network_interfaces()seastar::network_stackvirtual
socket()=0 (defined in seastar::network_stack)seastar::network_stackpure virtual
supports_ipv6() const (defined in seastar::network_stack)seastar::network_stackinlinevirtual
~network_stack() (defined in seastar::network_stack)seastar::network_stackinlinevirtual
+ + + + diff --git a/master/classseastar_1_1network__stack.html b/master/classseastar_1_1network__stack.html new file mode 100644 index 000000000..3c35dce4d --- /dev/null +++ b/master/classseastar_1_1network__stack.html @@ -0,0 +1,157 @@ + + + + + + + +Seastar: seastar::network_stack Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::network_stack Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::network_stack:
+
+
+ + +seastar::net::posix_network_stack +seastar::net::posix_ap_network_stack + +
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual server_socket listen (socket_address sa, listen_options opts)=0
 
+future< connected_socketconnect (socket_address sa, socket_address={}, transport proto=transport::TCP)
 
+virtual ::seastar::socket socket ()=0
 
+virtual net::udp_channel make_udp_channel (const socket_address &={})=0
 
+virtual net::datagram_channel make_unbound_datagram_channel (sa_family_t)=0
 
+virtual net::datagram_channel make_bound_datagram_channel (const socket_address &local)=0
 
+virtual future initialize ()
 
+virtual bool has_per_core_namespace ()=0
 
+virtual bool supports_ipv6 () const
 
virtual std::vector< network_interfacenetwork_interfaces ()
 
+

Member Function Documentation

+ +

◆ network_interfaces()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::vector< network_interface > seastar::network_stack::network_interfaces ()
+
+virtual
+
+

Returns available network interfaces. This represents a snapshot of interfaces available at call time, hence the return by value.

+ +

Reimplemented in seastar::net::posix_network_stack.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1network__stack.png b/master/classseastar_1_1network__stack.png new file mode 100644 index 0000000000000000000000000000000000000000..fdee15cc181932c296e4b92d5f0a8b8976cde46b GIT binary patch literal 1153 zcmeAS@N?(olHy`uVBq!ia0vp^w}H5WgBeIhy60&FDTx4|5ZC|z{{xvX-h3_XKQsZz z0^XYKpfC(k9gMKAVSRy8Yk-lADLj6g^z zt&3w%q+Qz-_e|}6-hHpkT=p|zFJ>S5e^c*|`SaZUYMus@IB(8pd9Y&N1@-BD8@F!P zo4a(6SO3iCcYdX8mwTI0TFz>*Lci`l!@nv21a4o+KUdDvurcXA#5Z6cotzfr^3#K)EoXDQ=)@(zW`*jk{a;-?*X4EajW;Hyx8mxW=Spv$ z`c?b!%;#1I%LKoj&EB@#?yr!UV64*XyDK!xfdQ)Yx_+f*u$9@tpGWzkW$$m!T{!>d zEthkfX0oolzG~){<_+m5e|WFl_08$|u9^* zqHJqg<(uy$8ANEDoK}2}4uQ@93G^a`xJf&|Ik9~^7s4aH!Sj-5 z?QC7&V^{v@Zh!q*?B^cszSFm_?djRcGS%|=^wqB`_S{SkGX4H~Wmo3r=*435dvnb~ z^(TkKZ|++9wLaf0Bm2~}>uh3X*4rcd<}L}JKWpuoXs5HE6&yDQB!8Y25o{rU?Dh4n zvdhlq?Y&(yYgSF@;a~Atr$Rh8|0oXZ310K~^^$Ef%pcdLWpA!NoOa`NYUZ)`3R%^M z)t0`x^;xpdTz>tuwVAT9zEbliL!w~zTh+&(uk}t>;Z1S+Hu)bgng85gcBNJSslo0X znd85neA(Q4urK^t(d)@~e{H*Y_3qaj-+d?by*kqV?)H5b&rQ1~ + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::no_sharded_instance_exception Member List
+
+
+ +

This is the complete list of members for seastar::no_sharded_instance_exception, including all inherited members.

+ + + + +
no_sharded_instance_exception() (defined in seastar::no_sharded_instance_exception)seastar::no_sharded_instance_exceptioninline
no_sharded_instance_exception(sstring type_info) (defined in seastar::no_sharded_instance_exception)seastar::no_sharded_instance_exceptioninlineexplicit
what() const noexcept override (defined in seastar::no_sharded_instance_exception)seastar::no_sharded_instance_exceptioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1no__sharded__instance__exception.html b/master/classseastar_1_1no__sharded__instance__exception.html new file mode 100644 index 000000000..45da215ef --- /dev/null +++ b/master/classseastar_1_1no__sharded__instance__exception.html @@ -0,0 +1,105 @@ + + + + + + + +Seastar: seastar::no_sharded_instance_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::no_sharded_instance_exception Class Reference
+
+
+

Detailed Description

+

Exception thrown when a sharded object does not exist.

+
+

#include <seastar/core/sharded.hh>

+
+Inheritance diagram for seastar::no_sharded_instance_exception:
+
+
+ +
+ + + + + + +

+Public Member Functions

no_sharded_instance_exception (sstring type_info)
 
+virtual const char * what () const noexcept override
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1no__sharded__instance__exception.png b/master/classseastar_1_1no__sharded__instance__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c9d25441558c6de1e87ffbbcdf5ae1fe6aa1b8 GIT binary patch literal 716 zcmeAS@N?(olHy`uVBq!ia0vp^AAvZ4gBeKv4^1urQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;I)Wl!v2^XRUUJ>dO4P9(yeQHU7_h_4oJx>m8~u zbA=wPhVIa-s5>`>#o)tOYWTN^VvC-fAXm?pvcl)-8UGY zUi`^XdrCgPO(k~K?@d+SfBvlQe7^C$`Z}@r@J(~p&tCj5C~0!h>P=NEWAg7j)<5%V zYuNIy^RK)Lxq10UdFob`z3ctgDFQA2EY%+|$!@8_v?cpQk4(Cp+EolZ zOCNT~_g|dQt~{@S-C3^RBFog_Jy%i#P#pu%6O6yY1em|9RbYD&?Z|Usdy~Y1d{#q; z`)CSk+|tsVIhiFqU~2X{{<*AsbLRW@;`Q_Du5$X+&01GCU!vfxQ&K~((Z??fXYD`t zZsQ-Hzc#ne>(_>?k25_lZFWZ` z?GQibe*4(&uWoFix2+Do zPczl;T+0fc{^`%PKzZT)<^BGftET_>Ah-SS+&isXzAbf`8okwVQ4xVZ?_4_d zYWL);uNmiDePy)zdO>K<{Hs~=Me3^=tuAn0P(8AK(nCLn2QL3pzw}*I?_m7bcTAbh lA^;Ye=g)7QdDGz+`*pQRi@g_oP6Q@B22WQ%mvv4FO#qkdSy=!8 literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1noncopyable__function_3_01Ret_07Args_8_8_8_08_01noexcept_07Noexcept_08_4-members.html b/master/classseastar_1_1noncopyable__function_3_01Ret_07Args_8_8_8_08_01noexcept_07Noexcept_08_4-members.html new file mode 100644 index 000000000..6464c05f7 --- /dev/null +++ b/master/classseastar_1_1noncopyable__function_3_01Ret_07Args_8_8_8_08_01noexcept_07Noexcept_08_4-members.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)> Member List
+
+
+ +

This is the complete list of members for seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>, including all inherited members.

+ + + + + + + + + + + + +
noncopyable_function() noexcept (defined in seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>)seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>inline
noncopyable_function(Func func) (defined in seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>)seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>inline
noncopyable_function(Ret(Object::*member)(AllButFirstArg...) noexcept(Noexcept)) (defined in seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>)seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>inline
noncopyable_function(Ret(Object::*member)(AllButFirstArg...) const noexcept(Noexcept)) (defined in seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>)seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>inline
noncopyable_function(const noncopyable_function &)=delete (defined in seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>)seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>
noncopyable_function(noncopyable_function &&x) noexcept (defined in seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>)seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>inline
operator bool() const (defined in seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>)seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>inlineexplicit
operator()(Args... args) const noexcept(Noexcept) (defined in seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>)seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>inline
operator=(const noncopyable_function &)=delete (defined in seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>)seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>
operator=(noncopyable_function &&x) noexcept (defined in seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>)seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>inline
~noncopyable_function() (defined in seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>)seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>inline
+ + + + diff --git a/master/classseastar_1_1noncopyable__function_3_01Ret_07Args_8_8_8_08_01noexcept_07Noexcept_08_4.html b/master/classseastar_1_1noncopyable__function_3_01Ret_07Args_8_8_8_08_01noexcept_07Noexcept_08_4.html new file mode 100644 index 000000000..6804912a9 --- /dev/null +++ b/master/classseastar_1_1noncopyable__function_3_01Ret_07Args_8_8_8_08_01noexcept_07Noexcept_08_4.html @@ -0,0 +1,132 @@ + + + + + + + +Seastar: seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)> Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)> Class Template Reference
+
+
+

Detailed Description

+
template<typename Ret, typename... Args, bool Noexcept>
+class seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>

A clone of std::function, but only invokes the move constructor of the contained function.

+
+

#include <seastar/util/noncopyable_function.hh>

+
+Inheritance diagram for seastar::noncopyable_function< Ret(Args...) noexcept(Noexcept)>:
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+template<typename Func >
+requires std::is_invocable_r_v<Ret, Func, Args...>
 noncopyable_function (Func func)
 
+template<typename Object , typename... AllButFirstArg>
 noncopyable_function (Ret(Object::*member)(AllButFirstArg...) noexcept(Noexcept))
 
+template<typename Object , typename... AllButFirstArg>
 noncopyable_function (Ret(Object::*member)(AllButFirstArg...) const noexcept(Noexcept))
 
noncopyable_function (const noncopyable_function &)=delete
 
+noncopyable_functionoperator= (const noncopyable_function &)=delete
 
noncopyable_function (noncopyable_function &&x) noexcept
 
+noncopyable_functionoperator= (noncopyable_function &&x) noexcept
 
+Ret operator() (Args... args) const noexcept(Noexcept)
 
operator bool () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1noncopyable__function_3_01Ret_07Args_8_8_8_08_01noexcept_07Noexcept_08_4.png b/master/classseastar_1_1noncopyable__function_3_01Ret_07Args_8_8_8_08_01noexcept_07Noexcept_08_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d4b3abc36dd097a81dfbb81b43d012a017af10 GIT binary patch literal 1167 zcmeAS@N?(olHy`uVBq!ia0y~yU~B}k12~w0K#WAFU@$KB#n>HEnxQ3^lJ5%@H z{NI;=1=B?szlPX9+Tl{=IqTiBpWQPf6Vl8$d?qn@N;zpLcq((Us${AxY*6V{5t*=L z;+}BE>)&qec=_vPsVehY+1E4nnSP(MuW&M(#)i$mbGb@*^DF+8ur6~>y{i0o?)~W+ zb^Wuh+ipGQdwSQawBylPF&R>ulkF?dUZ1#j$;`Lw7S>E$qF&L;6zt+1Flp+2k??yj z%CEP*I(Y8(x?@fkuBKj3zBYC4#&ZsyRc+#$6IiFkuej+N@Ww%~(?@H?x+iY8)?9!4 z+A33YMeojSW=+2ZScA6Rw|}{FOX_=B)=lqT^0k%N}mKArUe3;6sd&3pR()q!`>8QYoOE{)aN5X*kbWMbxDt75y|d_JC) z=TH5d$mH|2wCa86Zj;qMUo-VzC&luglDb?wp>A^HAGI~7!ZxnB=_Rz`gYo&yX6?0J zmo(!_xIHg9bOF7m|LA{Eg7LKbrz$_(m^V||ll{kfksqf5{_(S_yo^Q-+ZLutCX;3} zrKL5_yeYx3Z}6oFO&M{|MT9}(Bp+*>R-nh)0Q=D^3}x|^Llh% zr8D2XdAs*?rtZ0Q=Idw9&3`78C+Iwl`)rjh=bx?bBI=EqlmC7zSMJ}lLwr+iWb@ij zyFCs+yZE};{8ab?vun4sHmmz@4Qsq)FrmI!);h1sG55{4Z%4kSRBXQ>bpB7oEn2Xu*1gf{&!M_neVMsC%1oy2xaoZSb|LGh)0-wfWwpGp zW=}-T)-UgLx4gY&eQ_OAwc59$gm~GCH4fF8)46i4H-6i)gUes|I0*unXp| zBQ`%{7p^WH|w-E6yiwny*H2Q|vY>YJyEcs*Qx?{Hbg%v0Th z_Qro0#B%2@h%*1JZg%ti74?Sakv#j)GB-58&aYQ?nEvYm!<$9B%>Rcp`m*mYUA1-s z!}7w{Z(BuwyyhuT{a|XhaZAmqg)i?)KkVfKCWzS>vFgicy!pVH9G?FS-I|YHoees{ R1}r@oJYD@<);T3K0RVdu5mW#G literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1optimized__optional-members.html b/master/classseastar_1_1optimized__optional-members.html new file mode 100644 index 000000000..5fb2cde5a --- /dev/null +++ b/master/classseastar_1_1optimized__optional-members.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::optimized_optional< T > Member List
+
+
+ +

This is the complete list of members for seastar::optimized_optional< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
operator bool() const noexcept (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >inlineexplicit
operator!=(const optimized_optional &other) const (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >inline
operator*() noexcept (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >inline
operator*() const noexcept (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >inline
operator->() noexcept (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >inline
operator->() const noexcept (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >inline
operator<< (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >friend
operator=(std::nullopt_t) noexcept (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >inline
operator=(U &&obj) noexcept (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >inline
operator=(const optimized_optional &)=default (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >
operator=(optimized_optional &&)=default (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >
operator==(const optimized_optional &other) const (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >inline
optimized_optional()=default (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >
optimized_optional(std::nullopt_t) noexcept (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >inline
optimized_optional(const T &obj) (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >inline
optimized_optional(T &&obj) noexcept (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >inline
optimized_optional(std::optional< T > &&obj) noexcept (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >inline
optimized_optional(const optimized_optional &)=default (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >
optimized_optional(optimized_optional &&)=default (defined in seastar::optimized_optional< T >)seastar::optimized_optional< T >
+ + + + diff --git a/master/classseastar_1_1optimized__optional.html b/master/classseastar_1_1optimized__optional.html new file mode 100644 index 000000000..de633f1f2 --- /dev/null +++ b/master/classseastar_1_1optimized__optional.html @@ -0,0 +1,146 @@ + + + + + + + +Seastar: seastar::optimized_optional< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::optimized_optional< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename T>
+class seastar::optimized_optional< T >

optimized_optional<> is intended mainly for use with classes that store their data externally and expect pointer to this data to be always non-null. In such case there is no real need for another flag signifying whether the optional is engaged.

+
+

#include <seastar/util/optimized_optional.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

optimized_optional (std::nullopt_t) noexcept
 
optimized_optional (const T &obj)
 
optimized_optional (T &&obj) noexcept
 
optimized_optional (std::optional< T > &&obj) noexcept
 
optimized_optional (const optimized_optional &)=default
 
optimized_optional (optimized_optional &&)=default
 
+optimized_optionaloperator= (std::nullopt_t) noexcept
 
+template<typename U >
std::enable_if_t< std::is_same_v< std::decay_t< U >, T >, optimized_optional & > operator= (U &&obj) noexcept
 
+optimized_optionaloperator= (const optimized_optional &)=default
 
+optimized_optionaloperator= (optimized_optional &&)=default
 
operator bool () const noexcept
 
+T * operator-> () noexcept
 
+const T * operator-> () const noexcept
 
+T & operator* () noexcept
 
+const T & operator* () const noexcept
 
+bool operator== (const optimized_optional &other) const
 
+bool operator!= (const optimized_optional &other) const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1output__stream-members.html b/master/classseastar_1_1output__stream-members.html new file mode 100644 index 000000000..d4589ff07 --- /dev/null +++ b/master/classseastar_1_1output__stream-members.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::output_stream< CharType > Member List
+
+
+ +

This is the complete list of members for seastar::output_stream< CharType >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
batch_flush_list_t typedef (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >
char_type typedef (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >
close() noexceptseastar::output_stream< CharType >
detach() &&seastar::output_stream< CharType >
flush() noexcept (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >
operator=(output_stream &&) noexcept=default (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >
output_stream() noexcept=default (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >
output_stream(data_sink fd, size_t size, output_stream_options opts={}) noexcept (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >inline
output_stream(data_sink fd, size_t size, bool trim_to_size, bool batch_flushes=false) noexcept (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >inline
output_stream(data_sink fd) noexcept (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >inline
output_stream(output_stream &&) noexcept=default (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >
write(const char_type *buf, size_t n) noexcept (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >
write(const char_type *buf) noexcept (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >inline
write(const basic_sstring< StringChar, SizeType, MaxSize, NulTerminate > &s) noexcept (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >inline
write(const std::basic_string< char_type > &s) noexcept (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >inline
write(net::packet p) noexcept (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >
write(scattered_message< char_type > msg) noexcept (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >
write(temporary_buffer< char_type >) noexcept (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >
~output_stream() (defined in seastar::output_stream< CharType >)seastar::output_stream< CharType >inline
+ + + + diff --git a/master/classseastar_1_1output__stream.html b/master/classseastar_1_1output__stream.html new file mode 100644 index 000000000..d64c4b621 --- /dev/null +++ b/master/classseastar_1_1output__stream.html @@ -0,0 +1,208 @@ + + + + + + + +Seastar: seastar::output_stream< CharType > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::output_stream< CharType > Class Template Referencefinal
+
+
+

Detailed Description

+
template<typename CharType>
+class seastar::output_stream< CharType >

Facilitates data buffering before it's handed over to data_sink.

+

When trim_to_size is true it's guaranteed that data sink will not receive chunks larger than the configured size, which could be the case when a single write call is made with data larger than the configured size.

+

The data sink will not receive empty chunks.

+
Note
All methods must be called sequentially. That is, no method may be invoked before the previous method's returned future is resolved.
+
+

#include <seastar/core/iostream.hh>

+ + + + + + +

+Public Types

+using char_type = CharType
 
+using batch_flush_list_t = bi::slist< output_stream, bi::constant_time_size< false >, bi::cache_last< true >, bi::member_hook< output_stream, bi::slist_member_hook<>, &output_stream::_in_poller > >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

output_stream (data_sink fd, size_t size, output_stream_options opts={}) noexcept
 
output_stream (data_sink fd, size_t size, bool trim_to_size, bool batch_flushes=false) noexcept
 
output_stream (data_sink fd) noexcept
 
output_stream (output_stream &&) noexcept=default
 
+output_streamoperator= (output_stream &&) noexcept=default
 
+future write (const char_type *buf, size_t n) noexcept
 
+future write (const char_type *buf) noexcept
 
+template<typename StringChar , typename SizeType , SizeType MaxSize, bool NulTerminate>
future write (const basic_sstring< StringChar, SizeType, MaxSize, NulTerminate > &s) noexcept
 
+future write (const std::basic_string< char_type > &s) noexcept
 
+future write (net::packet p) noexcept
 
+future write (scattered_message< char_type > msg) noexcept
 
+future write (temporary_buffer< char_type >) noexcept
 
+future flush () noexcept
 
future close () noexcept
 
data_sink detach () &&
 
+

Member Function Documentation

+ +

◆ close()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + +
future seastar::output_stream< CharType >::close
+
+noexcept
+
+

Flushes the stream before closing it (and the underlying data sink) to any further writes. The resulting future must be waited on before destroying this object.

+
Examples
file_demo.cc.
+
+ +
+
+ +

◆ detach()

+ +
+
+
+template<typename CharType >
+ + + + + + + +
data_sink seastar::output_stream< CharType >::detach () &&
+
+

Detaches the underlying data_sink from the output_stream.

+

The intended usage is custom data_sink_impl implementations wrapping an existing output_stream, therefore it shouldn't be called on an output_stream that was already used. After calling detach() the output_stream is in an unusable, moved-from state.

+
Exceptions
+ + +
std::logic_errorif called on a used stream
+
+
+
Returns
the data_sink
+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/master/classseastar_1_1peering__sharded__service-members.html b/master/classseastar_1_1peering__sharded__service-members.html new file mode 100644 index 000000000..a1980c959 --- /dev/null +++ b/master/classseastar_1_1peering__sharded__service-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::peering_sharded_service< Service > Member List
+
+
+ +

This is the complete list of members for seastar::peering_sharded_service< Service >, including all inherited members.

+ + + + + + + +
container() noexcept (defined in seastar::peering_sharded_service< Service >)seastar::peering_sharded_service< Service >inline
container() const noexcept (defined in seastar::peering_sharded_service< Service >)seastar::peering_sharded_service< Service >inline
operator=(const peering_sharded_service< Service > &)=delete (defined in seastar::peering_sharded_service< Service >)seastar::peering_sharded_service< Service >
peering_sharded_service() noexcept=default (defined in seastar::peering_sharded_service< Service >)seastar::peering_sharded_service< Service >
peering_sharded_service(peering_sharded_service< Service > &&) noexcept=default (defined in seastar::peering_sharded_service< Service >)seastar::peering_sharded_service< Service >
peering_sharded_service(const peering_sharded_service< Service > &)=delete (defined in seastar::peering_sharded_service< Service >)seastar::peering_sharded_service< Service >
+ + + + diff --git a/master/classseastar_1_1peering__sharded__service.html b/master/classseastar_1_1peering__sharded__service.html new file mode 100644 index 000000000..a7a55b7e8 --- /dev/null +++ b/master/classseastar_1_1peering__sharded__service.html @@ -0,0 +1,111 @@ + + + + + + + +Seastar: seastar::peering_sharded_service< Service > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::peering_sharded_service< Service > Class Template Reference
+
+
+

Detailed Description

+
template<typename Service>
+class seastar::peering_sharded_service< Service >

Provide a sharded service with access to its peers.

+

If a service class inherits from this, it will gain a

container()
+

method that provides access to the sharded object, with which it can call its peers.

+
+

#include <seastar/core/sharded.hh>

+ + + + + + + + + + + + +

+Public Member Functions

peering_sharded_service (peering_sharded_service< Service > &&) noexcept=default
 
peering_sharded_service (const peering_sharded_service< Service > &)=delete
 
+peering_sharded_serviceoperator= (const peering_sharded_service< Service > &)=delete
 
+sharded< Service > & container () noexcept
 
+const sharded< Service > & container () const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1pipe-members.html b/master/classseastar_1_1pipe-members.html new file mode 100644 index 000000000..835bba7b6 --- /dev/null +++ b/master/classseastar_1_1pipe-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::pipe< T > Member List
+
+
+ +

This is the complete list of members for seastar::pipe< T >, including all inherited members.

+ + + + +
pipe(size_t size) (defined in seastar::pipe< T >)seastar::pipe< T >inlineexplicit
reader (defined in seastar::pipe< T >)seastar::pipe< T >
writer (defined in seastar::pipe< T >)seastar::pipe< T >
+ + + + diff --git a/master/classseastar_1_1pipe.html b/master/classseastar_1_1pipe.html new file mode 100644 index 000000000..e32c9b03d --- /dev/null +++ b/master/classseastar_1_1pipe.html @@ -0,0 +1,111 @@ + + + + + + + +Seastar: seastar::pipe< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::pipe< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename T>
+class seastar::pipe< T >

A fixed-size pipe for communicating between two fibers.

+

A pipe<T> is a mechanism to transfer data between two fibers, one producing data, and the other consuming it. The fixed-size buffer also ensures a balanced execution of the two fibers, because the producer fiber blocks when it writes to a full pipe, until the consumer fiber gets to run and read from the pipe.

+

A pipe<T> resembles a Unix pipe, in that it has a read side, a write side, and a fixed-sized buffer between them, and supports either end to be closed independently (and EOF or broken pipe when using the other side). A pipe<T> object holds the reader and write sides of the pipe as two separate objects. These objects can be moved into two different fibers. Importantly, if one of the pipe ends is destroyed (i.e., the continuations capturing it end), the other end of the pipe will stop blocking, so the other fiber will not hang.

+

The pipe's read and write interfaces are future-based blocking. I.e., the write() and read() methods return a future which is fulfilled when the operation is complete. The pipe is single-reader single-writer, meaning that until the future returned by read() is fulfilled, read() must not be called again (and same for write).

+

Note: The pipe reader and writer are movable, but not copyable. It is often convenient to wrap each end in a shared pointer, so it can be copied (e.g., used in an std::function which needs to be copyable) or easily captured into multiple continuations.

+
+

#include <seastar/core/pipe.hh>

+ + + + +

+Public Member Functions

pipe (size_t size)
 
+ + + + + +

+Public Attributes

+pipe_reader< T > reader
 
+pipe_writer< T > writer
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1pipe__reader-members.html b/master/classseastar_1_1pipe__reader-members.html new file mode 100644 index 000000000..b29684f5b --- /dev/null +++ b/master/classseastar_1_1pipe__reader-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::pipe_reader< T > Member List
+
+
+ +

This is the complete list of members for seastar::pipe_reader< T >, including all inherited members.

+ + + + + + +
operator=(pipe_reader &&other) noexcept (defined in seastar::pipe_reader< T >)seastar::pipe_reader< T >inline
pipe_reader(pipe_reader &&other) noexcept (defined in seastar::pipe_reader< T >)seastar::pipe_reader< T >inline
read()seastar::pipe_reader< T >inline
unread(T &&item)seastar::pipe_reader< T >inline
~pipe_reader() (defined in seastar::pipe_reader< T >)seastar::pipe_reader< T >inline
+ + + + diff --git a/master/classseastar_1_1pipe__reader.html b/master/classseastar_1_1pipe__reader.html new file mode 100644 index 000000000..31aa3049b --- /dev/null +++ b/master/classseastar_1_1pipe__reader.html @@ -0,0 +1,169 @@ + + + + + + + +Seastar: seastar::pipe_reader< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::pipe_reader< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename T>
+class seastar::pipe_reader< T >

Read side of a seastar::pipe.

+

The read side of a pipe, which allows only reading from the pipe. A pipe_reader object cannot be created separately, but only as part of a reader/writer pair through seastar::pipe.

+
+

#include <seastar/core/pipe.hh>

+ + + + + + + + + + + + +

+Public Member Functions

future< std::optional< T > > read ()
 Read next item from the pipe. More...
 
void unread (T &&item)
 Return an item to the front of the pipe. More...
 
pipe_reader (pipe_reader &&other) noexcept
 
+pipe_readeroperator= (pipe_reader &&other) noexcept
 
+

Member Function Documentation

+ +

◆ read()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
future< std::optional< T > > seastar::pipe_reader< T >::read ()
+
+inline
+
+ +

Read next item from the pipe.

+

Returns a future value, which is fulfilled when the pipe's buffer becomes non-empty, or the write side is closed. The value returned is an optional<T>, which is disengaged to mark and end of file (i.e., the write side was closed, and we've read everything it sent).

+ +
+
+ +

◆ unread()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
void seastar::pipe_reader< T >::unread (T && item)
+
+inline
+
+ +

Return an item to the front of the pipe.

+

Pushes the given item to the front of the pipe, so it will be returned by the next read() call. The typical use case is to unread() the last item returned by read(). More generally, it is legal to unread() any item, not just one previously returned by read(), but note that the unread() is limited to just one item - two calls to unread() without an intervening call to read() will cause an exception.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1pipe__writer-members.html b/master/classseastar_1_1pipe__writer-members.html new file mode 100644 index 000000000..f8a36e536 --- /dev/null +++ b/master/classseastar_1_1pipe__writer-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::pipe_writer< T > Member List
+
+
+ +

This is the complete list of members for seastar::pipe_writer< T >, including all inherited members.

+ + + + + +
operator=(pipe_writer &&other) noexcept (defined in seastar::pipe_writer< T >)seastar::pipe_writer< T >inline
pipe_writer(pipe_writer &&other) noexcept (defined in seastar::pipe_writer< T >)seastar::pipe_writer< T >inline
write(T &&data)seastar::pipe_writer< T >inline
~pipe_writer() (defined in seastar::pipe_writer< T >)seastar::pipe_writer< T >inline
+ + + + diff --git a/master/classseastar_1_1pipe__writer.html b/master/classseastar_1_1pipe__writer.html new file mode 100644 index 000000000..7d7494b5d --- /dev/null +++ b/master/classseastar_1_1pipe__writer.html @@ -0,0 +1,136 @@ + + + + + + + +Seastar: seastar::pipe_writer< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::pipe_writer< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename T>
+class seastar::pipe_writer< T >

Write side of a seastar::pipe.

+

The write side of a pipe, which allows only writing to the pipe. A pipe_writer object cannot be created separately, but only as part of a reader/writer pair through seastar::pipe.

+
+

#include <seastar/core/pipe.hh>

+ + + + + + + + + +

+Public Member Functions

future write (T &&data)
 Write an item to the pipe. More...
 
pipe_writer (pipe_writer &&other) noexcept
 
+pipe_writeroperator= (pipe_writer &&other) noexcept
 
+

Member Function Documentation

+ +

◆ write()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
future seastar::pipe_writer< T >::write (T && data)
+
+inline
+
+ +

Write an item to the pipe.

+

Returns a future value, which is fulfilled when the data was written to the buffer (when it become non-full). If the data could not be written because the read side was closed, an exception broken_pipe_exception is returned in the future.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1pollable__fd-members.html b/master/classseastar_1_1pollable__fd-members.html new file mode 100644 index 000000000..fab07484d --- /dev/null +++ b/master/classseastar_1_1pollable__fd-members.html @@ -0,0 +1,111 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::pollable_fd Member List
+
+
+ +

This is the complete list of members for seastar::pollable_fd, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
accept() (defined in seastar::pollable_fd)seastar::pollable_fdinline
close() (defined in seastar::pollable_fd)seastar::pollable_fdinline
connect(socket_address &sa) (defined in seastar::pollable_fd)seastar::pollable_fdinline
get_fd() const (defined in seastar::pollable_fd)seastar::pollable_fdinlineprotected
get_file_desc() const (defined in seastar::pollable_fd)seastar::pollable_fdinline
maybe_no_more_recv() (defined in seastar::pollable_fd)seastar::pollable_fdinlineprotected
maybe_no_more_send() (defined in seastar::pollable_fd)seastar::pollable_fdinlineprotected
operator bool() const noexcept (defined in seastar::pollable_fd)seastar::pollable_fdinlineexplicit
poll_rdhup() (defined in seastar::pollable_fd)seastar::pollable_fdinline
pollable_fd()=default (defined in seastar::pollable_fd)seastar::pollable_fd
pollable_fd(file_desc fd, speculation speculate=speculation()) (defined in seastar::pollable_fd)seastar::pollable_fd
read_some(char *buffer, size_t size) (defined in seastar::pollable_fd)seastar::pollable_fdinline
read_some(uint8_t *buffer, size_t size) (defined in seastar::pollable_fd)seastar::pollable_fdinline
read_some(const std::vector< iovec > &iov) (defined in seastar::pollable_fd)seastar::pollable_fdinline
read_some(internal::buffer_allocator *ba) (defined in seastar::pollable_fd)seastar::pollable_fdinline
readable() (defined in seastar::pollable_fd)seastar::pollable_fdinline
readable_or_writeable() (defined in seastar::pollable_fd)seastar::pollable_fdinline
recv_some(internal::buffer_allocator *ba) (defined in seastar::pollable_fd)seastar::pollable_fdinline
recvmsg(struct msghdr *msg) (defined in seastar::pollable_fd)seastar::pollable_fdinline
sendmsg(struct msghdr *msg) (defined in seastar::pollable_fd)seastar::pollable_fdinline
sendto(socket_address addr, const void *buf, size_t len) (defined in seastar::pollable_fd)seastar::pollable_fdinline
shutdown(int how, shutdown_kernel_only kernel_only=shutdown_kernel_only::yes) (defined in seastar::pollable_fd)seastar::pollable_fd
shutdown_kernel_only typedef (defined in seastar::pollable_fd)seastar::pollable_fd
speculation typedef (defined in seastar::pollable_fd)seastar::pollable_fd
write_all(const char *buffer, size_t size) (defined in seastar::pollable_fd)seastar::pollable_fdinline
write_all(const uint8_t *buffer, size_t size) (defined in seastar::pollable_fd)seastar::pollable_fdinline
write_all(net::packet &p) (defined in seastar::pollable_fd)seastar::pollable_fdinline
write_some(net::packet &p) (defined in seastar::pollable_fd)seastar::pollable_fdinline
writeable() (defined in seastar::pollable_fd)seastar::pollable_fdinline
+ + + + diff --git a/master/classseastar_1_1pollable__fd.html b/master/classseastar_1_1pollable__fd.html new file mode 100644 index 000000000..8e280abeb --- /dev/null +++ b/master/classseastar_1_1pollable__fd.html @@ -0,0 +1,181 @@ + + + + + + + +Seastar: seastar::pollable_fd Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::pollable_fd Class Reference
+
+
+ + + + + + +

+Public Types

+using speculation = pollable_fd_state::speculation
 
+using shutdown_kernel_only = bool_class< struct shutdown_kernel_only_tag >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

pollable_fd (file_desc fd, speculation speculate=speculation())
 
+future< size_t > read_some (char *buffer, size_t size)
 
+future< size_t > read_some (uint8_t *buffer, size_t size)
 
+future< size_t > read_some (const std::vector< iovec > &iov)
 
+future< temporary_buffer< char > > read_some (internal::buffer_allocator *ba)
 
+future write_all (const char *buffer, size_t size)
 
+future write_all (const uint8_t *buffer, size_t size)
 
+future< size_t > write_some (net::packet &p)
 
+future write_all (net::packet &p)
 
+future readable ()
 
+future writeable ()
 
+future readable_or_writeable ()
 
+future< std::tuple< pollable_fd, socket_address > > accept ()
 
+future connect (socket_address &sa)
 
+future< temporary_buffer< char > > recv_some (internal::buffer_allocator *ba)
 
+future< size_t > sendmsg (struct msghdr *msg)
 
+future< size_t > recvmsg (struct msghdr *msg)
 
+future< size_t > sendto (socket_address addr, const void *buf, size_t len)
 
+file_descget_file_desc () const
 
+void shutdown (int how, shutdown_kernel_only kernel_only=shutdown_kernel_only::yes)
 
+void close ()
 
operator bool () const noexcept
 
+future poll_rdhup ()
 
+ + + + + + + +

+Protected Member Functions

+int get_fd () const
 
+void maybe_no_more_recv ()
 
+void maybe_no_more_send ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1pollable__fd__state-members.html b/master/classseastar_1_1pollable__fd__state-members.html new file mode 100644 index 000000000..2438248e7 --- /dev/null +++ b/master/classseastar_1_1pollable__fd__state-members.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::pollable_fd_state Member List
+
+
+ +

This is the complete list of members for seastar::pollable_fd_state, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
accept() (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
connect(socket_address &sa) (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
events_epoll (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
events_known (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
events_requested (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
events_rw (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
fd (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
intrusive_ptr_add_ref (defined in seastar::pollable_fd_state)seastar::pollable_fd_statefriend
intrusive_ptr_release (defined in seastar::pollable_fd_state)seastar::pollable_fd_statefriend
operator=(const pollable_fd_state &)=delete (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
poll_rdhup() (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
pollable_fd_state(const pollable_fd_state &)=delete (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
pollable_fd_state(file_desc fd, speculation speculate=speculation()) (defined in seastar::pollable_fd_state)seastar::pollable_fd_stateinlineexplicitprotected
read_some(char *buffer, size_t size) (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
read_some(uint8_t *buffer, size_t size) (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
read_some(const std::vector< iovec > &iov) (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
read_some(internal::buffer_allocator *ba) (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
readable() (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
readable_or_writeable() (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
recv_some(internal::buffer_allocator *ba) (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
recvmsg(struct msghdr *msg) (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
sendmsg(struct msghdr *msg) (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
sendto(socket_address addr, const void *buf, size_t len) (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
shutdown_mask (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
speculate_epoll(int events)seastar::pollable_fd_stateinline
take_speculation(int events)seastar::pollable_fd_stateinline
write_all(const char *buffer, size_t size) (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
write_all(const uint8_t *buffer, size_t size) (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
write_all(net::packet &p) (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
write_some(net::packet &p) (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
writeable() (defined in seastar::pollable_fd_state)seastar::pollable_fd_state
~pollable_fd_state()=default (defined in seastar::pollable_fd_state)seastar::pollable_fd_stateprotected
+ + + + diff --git a/master/classseastar_1_1pollable__fd__state.html b/master/classseastar_1_1pollable__fd__state.html new file mode 100644 index 000000000..81fe2239c --- /dev/null +++ b/master/classseastar_1_1pollable__fd__state.html @@ -0,0 +1,245 @@ + + + + + + + +Seastar: seastar::pollable_fd_state Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::pollable_fd_state Class Reference
+
+
+ + + + +

+Classes

struct  speculation
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

pollable_fd_state (const pollable_fd_state &)=delete
 
+void operator= (const pollable_fd_state &)=delete
 
void speculate_epoll (int events)
 
bool take_speculation (int events)
 
+future< size_t > read_some (char *buffer, size_t size)
 
+future< size_t > read_some (uint8_t *buffer, size_t size)
 
+future< size_t > read_some (const std::vector< iovec > &iov)
 
+future< temporary_buffer< char > > read_some (internal::buffer_allocator *ba)
 
+future write_all (const char *buffer, size_t size)
 
+future write_all (const uint8_t *buffer, size_t size)
 
+future< size_t > write_some (net::packet &p)
 
+future write_all (net::packet &p)
 
+future readable ()
 
+future writeable ()
 
+future readable_or_writeable ()
 
+future< std::tuple< pollable_fd, socket_address > > accept ()
 
+future connect (socket_address &sa)
 
+future< temporary_buffer< char > > recv_some (internal::buffer_allocator *ba)
 
+future< size_t > sendmsg (struct msghdr *msg)
 
+future< size_t > recvmsg (struct msghdr *msg)
 
+future< size_t > sendto (socket_address addr, const void *buf, size_t len)
 
+future poll_rdhup ()
 
+ + + + + + + + + + + + + +

+Public Attributes

+file_desc fd
 
+bool events_rw = false
 
+unsigned shutdown_mask = 0
 
+int events_requested = 0
 
+int events_epoll = 0
 
+int events_known = 0
 
+ + + +

+Protected Member Functions

pollable_fd_state (file_desc fd, speculation speculate=speculation())
 
+

Member Function Documentation

+ +

◆ speculate_epoll()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::pollable_fd_state::speculate_epoll (int events)
+
+inline
+
+

Set the speculation of specified I/O events

+

We try to speculate. If an I/O is completed successfully without being blocked and it didn't return the short read/write. We anticipate that the next I/O will also be non-blocking and will not return EAGAIN. But the speculation is invalidated once it is "used" by take_speculation()

+ +
+
+ +

◆ take_speculation()

+ +
+
+ + + + + +
+ + + + + + + + +
bool seastar::pollable_fd_state::take_speculation (int events)
+
+inline
+
+

Check whether we speculate specified I/O is possible on the fd, invalidate the speculation if it matches with all specified events.

+
Returns
true if the current speculation includes all specified events
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1posix__thread-members.html b/master/classseastar_1_1posix__thread-members.html new file mode 100644 index 000000000..e149a5d37 --- /dev/null +++ b/master/classseastar_1_1posix__thread-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::posix_thread Member List
+
+
+ +

This is the complete list of members for seastar::posix_thread, including all inherited members.

+ + + + + + +
join() (defined in seastar::posix_thread)seastar::posix_thread
posix_thread(std::function< void()> func) (defined in seastar::posix_thread)seastar::posix_thread
posix_thread(attr a, std::function< void()> func) (defined in seastar::posix_thread)seastar::posix_thread
posix_thread(posix_thread &&x) (defined in seastar::posix_thread)seastar::posix_thread
~posix_thread() (defined in seastar::posix_thread)seastar::posix_thread
+ + + + diff --git a/master/classseastar_1_1posix__thread.html b/master/classseastar_1_1posix__thread.html new file mode 100644 index 000000000..917a96c3a --- /dev/null +++ b/master/classseastar_1_1posix__thread.html @@ -0,0 +1,107 @@ + + + + + + + +Seastar: seastar::posix_thread Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::posix_thread Class Reference
+
+
+ + + + +

+Classes

class  attr
 
+ + + + + + + + + +

+Public Member Functions

posix_thread (std::function< void()> func)
 
posix_thread (attr a, std::function< void()> func)
 
posix_thread (posix_thread &&x)
 
+void join ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1posix__thread_1_1attr-members.html b/master/classseastar_1_1posix__thread_1_1attr-members.html new file mode 100644 index 000000000..5a7231d4e --- /dev/null +++ b/master/classseastar_1_1posix__thread_1_1attr-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::posix_thread::attr Member List
+
+
+ +

This is the complete list of members for seastar::posix_thread::attr, including all inherited members.

+ + + + + + + +
attr()=default (defined in seastar::posix_thread::attr)seastar::posix_thread::attr
attr(A... a) (defined in seastar::posix_thread::attr)seastar::posix_thread::attrinline
set() (defined in seastar::posix_thread::attr)seastar::posix_thread::attrinline
set(A a, Rest... rest) (defined in seastar::posix_thread::attr)seastar::posix_thread::attrinline
set(stack_size ss) (defined in seastar::posix_thread::attr)seastar::posix_thread::attrinline
set(cpu_set_t affinity) (defined in seastar::posix_thread::attr)seastar::posix_thread::attrinline
+ + + + diff --git a/master/classseastar_1_1posix__thread_1_1attr.html b/master/classseastar_1_1posix__thread_1_1attr.html new file mode 100644 index 000000000..82467e2db --- /dev/null +++ b/master/classseastar_1_1posix__thread_1_1attr.html @@ -0,0 +1,136 @@ + + + + + + + +Seastar: seastar::posix_thread::attr Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::posix_thread::attr Class Reference
+
+
+ + + + +

+Classes

struct  stack_size
 
+ + + + + + + + + + + + + +

+Public Member Functions

+template<typename... A>
 attr (A... a)
 
+void set ()
 
+template<typename A , typename... Rest>
void set (A a, Rest... rest)
 
+void set (stack_size ss)
 
+void set (cpu_set_t affinity)
 
+

Class Documentation

+ +

◆ seastar::posix_thread::attr::stack_size

+ +
+
+ + + + +
struct seastar::posix_thread::attr::stack_size
+
+ + + + + +
Class Members
+size_t +size +
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1program__options_1_1basic__value-members.html b/master/classseastar_1_1program__options_1_1basic__value-members.html new file mode 100644 index 000000000..511fd7e27 --- /dev/null +++ b/master/classseastar_1_1program__options_1_1basic__value-members.html @@ -0,0 +1,97 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::program_options::basic_value Member List
+
+
+ +

This is the complete list of members for seastar::program_options::basic_value, including all inherited members.

+ + + + + + + + + + + + + + + + +
_description (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
_group (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
_name (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
_used (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
basic_value(option_group &group, bool used, std::string name, std::string description) (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
basic_value(basic_value &&) (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
basic_value(const basic_value &)=delete (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
describe(options_descriptor &descriptor) const (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
description() const (defined in seastar::program_options::basic_value)seastar::program_options::basic_valueinline
mutate(options_mutator &mutator) (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
name() const (defined in seastar::program_options::basic_value)seastar::program_options::basic_valueinline
operator=(basic_value &&)=delete (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
operator=(const basic_value &)=delete (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
used() const (defined in seastar::program_options::basic_value)seastar::program_options::basic_valueinline
~basic_value()=default (defined in seastar::program_options::basic_value)seastar::program_options::basic_valuevirtual
+ + + + diff --git a/master/classseastar_1_1program__options_1_1basic__value.html b/master/classseastar_1_1program__options_1_1basic__value.html new file mode 100644 index 000000000..91988ecac --- /dev/null +++ b/master/classseastar_1_1program__options_1_1basic__value.html @@ -0,0 +1,165 @@ + + + + + + + +Seastar: seastar::program_options::basic_value Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::program_options::basic_value Class Referenceabstract
+
+
+

Detailed Description

+

A basic configuration option value.

+

This serves as the common base-class of all the concrete value types.

+
+

#include <seastar/util/program-options.hh>

+
+Inheritance diagram for seastar::program_options::basic_value:
+
+
+ + +seastar::program_options::selection_value< network_stack_factory > +seastar::program_options::selection_value< reactor_backend_selector > +seastar::program_options::value< log_level > +seastar::program_options::value< log_level_map > +seastar::program_options::value< logger_timestamp_style > +seastar::program_options::value< bool > +seastar::program_options::value< seastar::logger_ostream_type > +seastar::program_options::value< std::string > +seastar::program_options::value< unsigned > +seastar::program_options::value< int > +seastar::program_options::value< float > +seastar::program_options::value< double > +seastar::program_options::value< memory::alloc_failure_kind > +seastar::program_options::value< resource::cpuset > +seastar::program_options::selection_value< T > +seastar::program_options::value< T > +seastar::program_options::value< std::monostate > + +
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

basic_value (option_group &group, bool used, std::string name, std::string description)
 
basic_value (basic_value &&)
 
basic_value (const basic_value &)=delete
 
+basic_valueoperator= (basic_value &&)=delete
 
+basic_valueoperator= (const basic_value &)=delete
 
+bool used () const
 
+const std::string & name () const
 
+const std::string & description () const
 
+void describe (options_descriptor &descriptor) const
 
+void mutate (options_mutator &mutator)
 
+ + + + + + + + + +

+Public Attributes

+option_group_group
 
+bool _used = true
 
+std::string _name
 
+std::string _description
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1program__options_1_1basic__value.png b/master/classseastar_1_1program__options_1_1basic__value.png new file mode 100644 index 0000000000000000000000000000000000000000..e642bc64117fc27abb635d6afbdc81a8eca02f79 GIT binary patch literal 14495 zcmeHOc~nzp+IL#P5d~&ig}MN(4O$n#4Ui?tQ0o#}Agz`~*1AAhBl{MTQ)tWQprWBd zS%cb|SdfS)VN0S?L<}KCf-xl!A%sZ6ViIBqWcl735Vb?k^n8DOGw00QV~%*e;CtWq zS$@moDYW+iQV zO?StGcQW*;*ci3v8%aWYrPm%Ni+^tC@_m8kO77svJsj|fu~;>BXHcuv(gp+qf%8uu zcj9)FRp7FVMqgiNDgl3!#az2;Y=2G$9*-B?Fg9xLu7naB22h$CUH;09&u9XbUJ!4v>ay-8iT>mGdPuD&M9j-?fVsCG57)6ukb_}^w68& zq04TZS#T9Pf_F4lLU&Im}ghw8F#$$6L2* z)hbP@sfmfny%yT74?g(dorjf`m0_I+eC)uz{kx$%kIKLuG}y~*59mQ-N9ZO8dhGx8 zrv97O!INb0dA#j|$2q#jFy@S9cK=i2iu!8&dymij?u}`pz7ZGmhK;jMN}JTmZ3@&x z%`s^Eip)%`XUs8taGd7_Gl^CR!PDy*t~7U>&~SxJ;+g=TWh-KyPAAAVk_LM=6A#qY zDs~r6?wDmMvw29i#=h!L(~)5Bg+;oc_8%L9zEiYEo)6jIb(vYm-AnZ9e7iWb1 z+MeOf?AV4;KY9PQ4;0UgrY+&jXE&%p`53N@uQ_@CslZRqdd$kK-dLwu*64E8!{bgc zLn(G0x3@u(#LUNI)1#GVEwOO2FtBFem`ial@_yv9GR9zhrdx;+5=sHh08!fHPmyi2 z7*%-m!xTyAx}Hhx$fxMMzyX&PI8P83(=-aNw3ik#rPv*}Vuo)~u|jfN6R#-DQ>E=L zZbSYe|G_Qdj(H@sKBai(^q^2*MEdw$qQlwtx)YhM@$ucsYit}Ec%Pk(sIW&68J*9% zGCMaVW;KhDzlcnWsNWEwfU8%FGqzWWH_jg2dVMZ4nG;JtwrOr75+^kWs{-%pp`|=# zn<=MeCd`bC7!=*ah+*s$=Msp^kDy@vg0=i#7p$+Q%G3i7ub$n#yS;kC??k7MRuX<79EWPc{v1!j zT!q_$s)vqoHyOs8D{h42P`$fnne7Ve@R@FqDO7Y9#b^~{yZ!)aU=72WsP3Loh3fob zz`fldcuo}aevyfWyu4dU zhYY$p4kcgyAWwNXbPhIO@qY%LzBJ2?g`60fhs#6fI+u_#}+%K~^1LaF; zp(4su~XpQ&#rMWdPQ zmQJM(J7Jp@VWGfRijEV4Y@nP8LDzk=U4M^eEvVtSZH=fu#jmS(J`tis_~osg8{8uCn8X%QWb z_>mp^R3owRC{N8(!)lxx0@QhddN(ro0j-r2pQLIhl|?^<>>yLYWtqH=Bau$c?88PV zP-czs2XDx2vYU86#8I;&ax!jG;g2tNQO@eGAs!^q1cDuwZ#OV5cG2T4NU6Em@aE-` zfti-s*sS0;QYGm-$$NL=`7I*tX7~jmHrKzb;q>!|k7g=dV5)71pBdpeaps7FM?dqb z$DOnM33NMBIyjTGd|1(@37nnYhYPsL%?p=`6k)V3@A>RHNjHl~WmKeFH>4^zkfpG~ zO%(cp5o)ntDvsJ5x-k!bp>Ojx{a?jmLI3|09KQx)hi`lV#?HLHUU$orp5RMpxo&La zAY7JxWb&=N{z-+HlyijUMZjK;n9ylf>e9WTig3zGGJ1<|B{_x91|41 z@*jCw8N1R9C4U;tk{j7?tc^ugnw z^yVH`2z_;KZ_lVmJuRo|(~_+kE41QtrzEUPsH=FPoy3un;0o8veN~hdNxJ6VzY(Oz z)PE{eF|?2CBJIT~svPX#Wqx`UfFOw`l71tI&DhY+hd zat^Z@UeV1!KA0ge8EspQmCwO-smtRUeJ3UKr&K*Z7q%7r(!WP8^^y!ck_DmjoxW~% z<0Pc$O`@_S+U9DecJ{!inbB;j2}r#lhne)XRHH1M3}MN6uNWCOAlH3Y@gTnbv!YG* zm&+L)<(}4AV?2(2#{~uBp2FsY+P5wbT6ub|tIo)r`=YfOoiwyIuk{Z8%aUCcNiwzO z#J7rDPR+B*PQ`6nm8D1UrdoHG4rRRR5F7cNHIORiC{#a7a`-XM`N#+5RDk)A;!47B zx=QyfKewRMhFyLE)>|3oL$@O@g%12#3JEbI@@p>` zc7xD87wUPO$|rb|hi!-DdW0qK3uRJ9I)YyPbG{$?+f6s z358#idl4`_;Jk1jka?du2;Gy@z+kKWLw>*)0*jY?RCYB1M4R31K_<#3|T4|q1%(~rn3we(7A}Me%vies> z&4V^i9D-bWyuvIheTGFFQDx$Cj|{}5?@#?;nmU0-$y+k3GHFl!q|dzJK47Cp@=K{@ zL`D<$1})l78c^MiiF=;o0{ZrO8{WmU(bAJyO-tqKp)~ivKGNHkmMq^%@txTBNW)#u z2!!3vG6!{{6DiY<;-6(z9Ui|6(abyQiIR^)C?tQWp|xxv29lAqGW?7VB?pWlM{A`s^vTFfUe zk&*~Bl_!1%3i5|4{J)5oWP4E7b6)0Uk=Yj17L?N*iG3Z<{lm*@PNH*R>g9l%+@R$?hoJ-=Hmw2Pgc4u~BI^C@vT?V&2$1HSry4uae$Zjv?7~7lq8W(z0)TNLXvu zy{?{y>KXO&s;`pYWf~4YMf)zPRpd?>?t>Brvs}_pUAQ$>x98eD=Kb`f^ye8*6VnG^ zJDXXpwaW^M+2Ou|@of{QDHZmD_uDtyi)&l52&caUQ7l-^8Oy}d$7Z5Qbb+Xj0^oEY5rx7E9@`%3{f-KpX&Yq8`go%7uA z2R@^`!|4N8-b_WMuYkiHAMF|`Sf3y~cU**Addpoq5~7%eGxpkHQpBfoxd42*HSM+S z2;~QUE^Vtn68Q@J(r9{Vh2z1|0qmo2Tw>h;kA4Ryl&%@{cp2P{6R%uf<5ToEMCkhb zh^^0(hK4TjBwF_dyW#Kn>U-^^ecvi<@m(WH6w&G`N>1;#xO)-K&FeU#Si0S1VupWqM?)&gV_04LeJ%cY9Fzv{d)P751wl48p*lPc_dZ!+){xc;3rJ7epOcM` z2FI8+ajls_c_R4rVnxM10zV4<3}Xt#2rd*H^p|MVjX4Hy+c8J#FTm!=`(Z*1#OJ@i z68TeP$rV;MSN;HEJ(MreX!Le6^kt>7k&#i(T0r4fM*Ume3~?cYC6`=@{B>KJor4tw zEMp+p{!d?ay5a@a`X*DagFK&sk&IuTGQ6Oyz(HAoS-Ax@5ry7<#iN{iPdv1z zy29Im-CneM>i0;yeN{5n(hbu)3{JBUMGR}{tYX);&fK!0nZ zbKJGGtq<10fLM})v18w=n&>1Pw)7rf^DJCum(#@9jj69w9*=YSsrN(t^lrxZdjar? zEKcbpp_lPcTS+%?nrTn8xL+g`Phr=TS|P1CvTVw-TmI)stXLdHctsWwR-0sFoV-i6 z{sxw>C!1$Cm8HyD=r>>WTPYa_*S@UHhQ4u0^iziGYkeaD^o?D))i%=5;d5=rYGXs% zC&sS!Uu@b7KjQ6jTn3O&;4fmTGSS0|pcanUiN%zOTQL}m&IF69LwainUM1WglWlJ* z#bi5(fi`u3esiytW$QeLk)_pN@!n)_-&9j0G@^b}MsO2MPv5+MQrGq}os`=wNcLCG z?XAh@olxYvx}A`P7xjeK;#~}>^&^Cz%pd)d__37Xa2uwk_GlTRSnGk|z=;8<-#U|- z+!VsLEbJ-0T79N6d>vmN>zjCx5E10m(c30atbtC>VG`}*z_sbW=v_B$J`U?RbMe|9 zln$!GnlK1o?Sw%3ZwdB46y*P`?qi-aFE3b5Xt{?bb@KL&6)tCN3F=J|C40c+b{{mTg(qG60mNQ-(>iXQ*XKpW6 z$Al|`DIxG{YrP0I5215@pUk_mJ@hB@#Nv@R%4xI|EbK=^B@=~Z>x0}*^%^aIZ!099*%;zJq@Rbth z1OVpVM>6(W74^T2`FbBi%qw4u`H)tZ(jHo&-!_I>+!aQe0H*!|5!xm-RF=>#$e@7fzh}~CM ztqV|Qr&s?gMcRML1`J5ge2qjeW6&KTrXTe7gkzlN_Cwv2VXFYXrcq!-z%lMC*TIhnUxe-e%; z4af>D*JeCa_#{y!ynR$m((Gmof^$p6AVH`|XU&N@)L@^dmc_13RJ68jU{GCwWLBGT zgwcMv(wC`=u482Nx!HW-A{svTV=hsyizOa3l&(eL6t#z|1ED^tMZU>QR*QH7bIC}j zsAa^tWndbIR^W?!Mtxw)zkAT2i_9=`3|-CLmt408NWL43fe=)IOQfi^zNoC&=jN$o z(WnVh_qz_#}P6poJ+^9H{?~|A8s`o`kBsOv7e}{3~ z{UY$YM%&88R7OSWnK<=+XOCe0>OzGl0T1C%{0czzRAFDaQ{yUvgF*6m_oxQ~`oAuQ z=^^%v+f8Pw5}@v|SFh%Uq3g6KU8;J&D;N$PDeBY{VQd2vYu*c|>FRIpE#IhZO96md zr?|oe-%NLah>1D`BhFEGook}FrQM3y+M2w`qr25=YS(!VtXGoZo@Q6*S% z6aZp%Pj0m&L4EMXr+?&Sg?_KJhM%vJ4*5n@nB&J1VI4<61x_ml9UIjOc8mfU27u=d zCJtKp`jCpmLLOHevxwLX`hzFb9}XsDb%wiUwo0F-Z^vkB(7qR8@UKz;r{aIGXEPQ{Ac@ee1qBPbiDIP~jaEloTv&UlF&$#Ws~L zlSQ5%#IAE)$c>mQinI2Yt5}jWB1{cDjuhc0P~$)|$!FX3*o1VVZSl z9hwh;Oo-Wx$JM{Z2@NlS2`&QE6O))*Vp{;q*RoT|q=*uj9tCw#!Lkdm3osP~SwXXZ zjdHvQ`GuT#3Fay5A;a+R|E|R2B^P>nAqRy03+D9D&`Ma$&rcgHri?<#6lq;Kr-nNOSfs1G5EUqt<9uSY$De|(2KQM?5p z2`A|Ab6=16gHujqC8o$ns!ChM84s^-=;+UM$j~(Y05wCOrO5-q2%I;&sFo+|@vw53 z&OqlG;eO?hs9Yx;@WvLl{N|2WRM9%SX6;uCu88t|4;ELK%(C;9&s&Mi9?XOzL(pm^ zxl@>euNpTq(m#TVq~eqV+Ymn zvN!fxaUZ>ePhpF}Cwh5VolAdo`aU3o?_dNxt{POk7Yvgi{lW$k{8VB45L7fi!(~$= z0;gnwm+W%NX&UoJ-I%I%)Tq@;M_tio+YUDL53cLKXaG|T>OEq`XTbRYGC=KDkoPuR z^G8(w|166GY5p?iLw#s~351u<)don;s+bz)nVRf(B*WGuP6z#c-qyGgf(!{hP!pj~ zuQ0U=wI3MXjdc|%zH~~dxcB23NQo+C#W{7u)Q(W#76D?-g^0EHR`t#V>);BS^-Pe+ z`BZ0|;^f$!<0Ey&z0`&~azB*34vO7LBZx$AO`Rjrz#@-DO9l4CN0YJ-$fEF+#GKHN z4fyD@MJV(ACpQ~elga!%-O6nl>FD9fmsm((5=CDRZ1Ug4b|@(2e+8xd_|%%ZNAm`LyvFD)gdu^07pHk-mK^j|uC&MY9NV&8$omyh-q7&0=~2EV z-y*?t0xJ~uY-mk?M;zm=Iua5ekqGy3LE(I$l6%cSbPLB5tJEqkmZ13_ipkPS`-Q3v zUflzLVL=k*RKQM@+&?E9_`{GnFbn=>0R#UYNWS+{g!~UM2lU%tG66hNd9ndM_&R-^ z0WJWJSNX&Z#I2fwpbL?D2G%g%VKF+Vp$hNPSNfqsZfc^WWmvErQn)qy(RE&5&^J(C(@SHQrfy2C`xM?FJ37O- z@CRvZX=xd?L-6rSIAR0A5n({}usEj)H8NURND}a)ag1Cy4l54OS$ee_pz8x-ws&y2Abp>lzX&fLm7%;B19B@~Ftj+!O@i|BMhI-tF={n%7(96m|X}oU^ zrYgQkX+Q+Op~l9$S6mzKIhB`JvsIP$s>OxbJ6Ds>56}4PM%??P<@h}Y0Wt^dv%zfB;b9zwr4VxWf5Y z6#UNJI;Y%Lk+Z&JR93`1MBgKTI$kft9vRjg%b5lh(^#o@Cks`w7g9~Z;!+KZ`b`h3 zW>d9sVU z{q|eq;~~TAtNzyvFVUGtn3j@svql7@ezeFgiI?e3@(y8;Z81?OxdVh-u2zQUJ#D%@ z(ysFB%Ww&CuH}6gWUNfv;V`e~X9j+h;EzZ+XrW8#WibvWd=Cd-TQtvJ-bq9m5Q^I( zw6mISpq(QI9klmE}Xxuxs{L57G1X^mFj%gDtmrPLg$p>aL(YeQU4e3nL##;VY z7URLcHqrXwte|y%!5|gkNQ7%v4z0S=?c;h=U$TKjf zSC!sLIpPzQt{&>AU{0!g%T=BPJ!GStHcAenFfX{_gDid>jh_eeE_jnuZUVo^r?jiI1rm%LeOixH;4?<%iq#gWI!(CVl;&C`zxh&u;ys6dM zpxoTccAfm~B<$z5&MMcqO?cx%W~Pgp0cLl`eMKg7; z9il^M6?JQep!{dnD3Cj^0^Gz;#3WNJwNdf?SH&Ikd^S%+Z{a5J98yY_l@Anil<>HS zB+O9(0n$0w@GqWSF#@J4s@n`SfB-kp0Dl7wIMOd(XG65uild)p^U5Y}wQT56)|Rvj zQ7pkp-2}5vEIyM9id3rcoHKBOZAYIByo8cl;Ue}!We0D?Ir08M0H-ErkVsRL5Kr(N z<|M|bi-01uuU*yhH8|D_Fa`x2#(zDnS6vd#XY&&kINgAA1R_f*=yF|;2dM#x2$p{a zTs9GCzG^DIZ2FiD*uDxZ2Hie6+QU_f=JEpfYF-q%-4zWXDM&CaD~{xQk7kS{@2C2O zt}E8ZIi5TI94J9Iq5Rro-z<8g4C%c>zCdlCa&0rMy58fq(`riv$TB|Gl}SxMDcae` ztHNL)c!f(7Sd*jvR|b z{O9!(=w~*`xxg^t2NI?GkUl~n<=8DqIV#fB;j?v~g5`(qQ_UF~V(*P~A>RLr9TfU}*Toz|gLO(vQNa>3g1s?Nspi9A|y_!8!Jaa|G7y$>2sXQ2Nrk zO;O*(@1IXZBTwkJ6@1$P#ybXIN?m9y>nizazm&Q7lhol(PJ z+PXWiKQm|28v^)PpG71{|F*fQo&Ac4utq++XZAz1)F-u3A*n&_9C=|b306UBPLW7n zI{O+4#$4bOZxBI+*0WVhm0=<dzfYFrbn(UDS(n!j54F zOZGm>FIDYfr|L$#D1_lmh|*(B403xvoVp%=w0mQRFLd+T(qvva0l@V + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::program_options::option_group Member List
+
+
+ +

This is the complete list of members for seastar::program_options::option_group, including all inherited members.

+ + + + + + + + + + + + + + + + + +
describe(options_descriptor &descriptor) constseastar::program_options::option_group
mutate(options_mutator &mutator)seastar::program_options::option_group
name() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
operator bool() constseastar::program_options::option_groupinline
operator=(option_group &&)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
operator=(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
option_group(option_group *parent, std::string name)seastar::program_options::option_groupexplicit
option_group(option_group *parent, std::string name, unused)seastar::program_options::option_groupexplicit
option_group(option_group &&) (defined in seastar::program_options::option_group)seastar::program_options::option_group
option_group(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
option_group_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
used() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
value_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
values() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
values() (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
~option_group()=default (defined in seastar::program_options::option_group)seastar::program_options::option_groupvirtual
+ + + + diff --git a/master/classseastar_1_1program__options_1_1option__group.html b/master/classseastar_1_1program__options_1_1option__group.html new file mode 100644 index 000000000..0f930aef9 --- /dev/null +++ b/master/classseastar_1_1program__options_1_1option__group.html @@ -0,0 +1,321 @@ + + + + + + + +Seastar: seastar::program_options::option_group Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::program_options::option_group Class Reference
+
+
+

Detailed Description

+

A group of options.

+

option_group is the basis for organizing options. It can hold a number of basic_value objects. These are typically also its members:

struct my_option_group : public option_group {
+    value<> opt1;
+    value<bool> opt2;
+    ...
+
+    my_option_group()
+        : option_group(nullptr, "My option group")
+        , opt1(this, "opt1", ...
+        , opt2(this, "opt2", ...
+        , ...
+    { }
+};
+

Option groups can also be nested and using this property one can build a tree of option groups and values. This tree then can be visited using the two visitor methods exposed by option_group:

+

Using these two visitors one can easily implement glue code to expose an entire options tree to the command line. Use describe() to build the command-line level description of the objects (using e.g. boost::program_options) and after parsing the provided command-line options use mutate() to propagate the extracted values back into the options tree. How this is done is entirely up to the visitors, the above methods only offer an API to visit each group and value in the tree, they don't make any assumption about how the visitor works and what its purpose is.

+
+

#include <seastar/util/program-options.hh>

+
+Inheritance diagram for seastar::program_options::option_group:
+
+
+ + +seastar::log_cli::options +seastar::metrics::options +seastar::net::dpdk_options +seastar::net::native_stack_options +seastar::net::virtio_options +seastar::reactor_options +seastar::scollectd::options +seastar::smp_options + +
+ + + + + + +

+Public Types

+using value_list_type = boost::intrusive::list< basic_value, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
 
+using option_group_list_type = boost::intrusive::list< option_group, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 option_group (option_group *parent, std::string name)
 
 option_group (option_group *parent, std::string name, unused)
 
option_group (option_group &&)
 
option_group (const option_group &)=delete
 
+option_groupoperator= (option_group &&)=delete
 
+option_groupoperator= (const option_group &)=delete
 
operator bool () const
 Does the option group has any values contained in it?
 
+bool used () const
 
+const std::string & name () const
 
+const value_list_type & values () const
 
+value_list_type & values ()
 
void describe (options_descriptor &descriptor) const
 
void mutate (options_mutator &mutator)
 
+

Constructor & Destructor Documentation

+ +

◆ option_group() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
seastar::program_options::option_group::option_group (option_groupparent,
std::string name 
)
+
+explicit
+
+

Construct an option group.

+
Parameters
+ + + +
parent- the parent option-group, this option group will become a sub option group of the parent group
name- the name of the option group
+
+
+ +
+
+ +

◆ option_group() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
seastar::program_options::option_group::option_group (option_groupparent,
std::string name,
unused  
)
+
+explicit
+
+

Construct an unused option group.

+
Parameters
+ + + +
parent- the parent option-group, this option group will become a sub option group of the parent group
name- the name of the option group
+
+
+ +
+
+

Member Function Documentation

+ +

◆ describe()

+ +
+
+ + + + + + + + +
void seastar::program_options::option_group::describe (options_descriptordescriptor) const
+
+

Describe the content of this option group to the visitor.

+

The content is visited in a depth-first manner:

+ +
+
+ +

◆ mutate()

+ +
+
+ + + + + + + + +
void seastar::program_options::option_group::mutate (options_mutatormutator)
+
+

Mutate the content of this option group by the visitor.

+

The visiting algorithm is identical to that of describe(), with the following differences:

    +
  • options_mutator::visit_value() is allowed to mutate the value through the passed-in reference. It should return true if it did so and false otherwise.
  • +
  • When visiting a selection value, only the nested group belonging to the selected value is visited afterwards.
  • +
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1program__options_1_1option__group.png b/master/classseastar_1_1program__options_1_1option__group.png new file mode 100644 index 0000000000000000000000000000000000000000..c730d0906a49a413a26c9d05035fb258f569ea3b GIT binary patch literal 4570 zcmds*c~nzp8pdyMtymH9h$s{fiijepD9C17Wobbcg&0`^76b;_G%R6{Q?1CFQXmKz za19c+$`%5Ipj4Jbpo%FX37{b`1V~7bHH6F;!Rd^3mUG7bF_Uv{a+B}geD}V;_j%vv zy9o|Q0%EOqd8ZRlw`M+h7wdok%whagDN?;G>4oFZW3gmL^G(~YZ>-l$TfCUL$i zcMY`MO6AmzbBMd|`F)prh(HTPb;quR@+}S5H%-9I`3KgYIHiHvdhPa}G?VpB4jHX# z*S_6jJ-DIifa#-dw}KITBsQ+;NwUWx(*hjZq*NJVq1%`n`KV*OK`elWgx2RBFM5=j z%+aBZ8lvOB-I{l6`?c!!XPQ6NM(^|*iwhH2E}iDm?H#$TgrDafP}^U^kj*u*($=|Q z$4t>HT};7OgL3uB%B^fXH?zW~V8olE&4BEMw4)(<3<;uc>FA>Jn4DRE`7g?7^1?z^ zHG;CA#h_M6zukJR;5rMu-;v!+Q<<;|MuRsUSdW}F^4fasHRiXme|Dprx%%925EVHH zHc+Js$$e?2p?qt1{E0ESj9qBh1rgUE9JY581@caCxqQc5_sdgYcu$% zXjmc`wn%XM?}r=Je+fg)C_*vY@WoXl z;d|BeYHbZs9URT*4mkgT<20uKYBOWnJ0!x|C^hHh!jWkoy?)79dzU+$8(YqL_Snz% zmMhuM+dj>xwxjP_YEqrf=q93`)_|eNcl~v+$t7YNR-1 zL%Y)c&eVr`)MBl2q7dHAv#0b7S{-*3IEB z)omxkuZA%L!%%aN0*sl_V0yFUFp*ea201Q;g)P=m-w@vJ zBh(e}-prPloS}nQ5)w>>JS3oVtftnb$xoPK>q3G}KsI>{b~4I&+rj^VI9xcTfvnn- zR^*b=nbA8FEBy>wFbc-YZ-m@I4f&)}{3xf7>D-VpE^d&ng%)pO7zhdU{`y)G`>mHS z=HGUdBpCVGi;x|qMu=b~3aRsAmK!sFRrxP(%=20+vS+g=Ui6!-7RfymH(>9U}$1VJ-otO5$$ z@d=CQe@qUjo1V*^j_t>;gs>fTTv8k)%dFqX$pnadR@mp0S>7St#=bEyjbf?+F?!XX zE#-xP9ot&YaZGMd?adag?H)**H=&rQHxDM?F6<$v9o>yn>F;hirIbrckcDq*OVU*Y z;CH;ay4|C{XRs=$Knuvx`DB<@T2WNeB{ScoKr>Wx`<;Bry3+5p{JPca-=?2t+YgfZ z&KD>5=NH1C(mYjsLd&G7PN9dcWl0KF;U{^ ztuheHa>XOC@%iJd5&NmVpwRfbIm}cU(cplk{P|(I`b1o2(LCmVmni&sVc(E79XUJQ z&Kvp`$D9gb-1hu)* z?=@cN(qY-o9S&}#PLQVT>P0qnZ{3+k(xT7cX^DMHcuTk0jGp0Zn=*g#;W0;Fy;w82 zC|yQfghp~H1< znBK%ksCYP38X0uI&P5x-lWZyq`8&{v;6q!Qy|mTDj>RhZ0@_1eL!sr^6|^+1Jm#qC z1_9?7Wt`|78bB9mTI9~^wc0wbu4$L=VCBP zhXy($E8H$a6YKs!pZigM@0)AAb5Q?`#0r`iu6Hfvt=afD6ZF3M&#xr#;->Fmxh$h1 z-YQU9KXc!SoQecHzO|ghrFxu%=Wq?gQS+PU6Hk(HcXu0LVN402gGlZ%9RU34$#qC>DHY#8A(Hkc__f+O8uFoRvK8#v0g@(DnF9WGBA+%>2wrMvbhNd4LXZ! zft8`Q{fQWM57o6>{#8lu{kM}Zd)UBi=G|KwtGQM2q`K80v#RH^auA^n<=01iMX8)z zgO~yCm#kvLSte&o+l6@=dzMc-y~K{Cjj8CzQ+rCq?Qapbv2H>1LyZdcZ=SNV;)G98 zGJ3xD5BR%)c=gw9mHD6hsum|XmQ4m!N>_8U^R^^MUJN;9xpkuO2r0=942%P*xdSbhk^i%QUJNS}`K4ygXSKVUieFJ<a9rWBY}OS7W2H@!4^}+&Fmu@Td zhi9QA1z=P#2hOw$I$!8jVN`;<)HB7wcy80{ixKLbt$~;qZ!S3E^|pwt1{afnTS=*3 zcuMsNmuA;RW%71{gi=fX9<4)b33{$?oYS0gyItWN!gpBX7#xn69?}x&;k_>#irk#f z#Qu;($`chtWrDiDkLVS;063MU6Tq^b+=h^x_`t=3M+7pPC?|#GDJbnLHQwS39>hT3 NSlF4D9zXZpUjge2t`z_P literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1program__options_1_1options__descriptor-members.html b/master/classseastar_1_1program__options_1_1options__descriptor-members.html new file mode 100644 index 000000000..517bd2b1e --- /dev/null +++ b/master/classseastar_1_1program__options_1_1options__descriptor-members.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::program_options::options_descriptor Member List
+
+
+ +

This is the complete list of members for seastar::program_options::options_descriptor, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
visit_group_end()=0seastar::program_options::options_descriptorpure virtual
visit_group_start(const std::string &name, bool used)=0seastar::program_options::options_descriptorpure virtual
visit_selection_value(const std::vector< std::string > &candidate_names, const std::size_t *default_candidate)=0seastar::program_options::options_descriptorpure virtual
visit_value()=0seastar::program_options::options_descriptorpure virtual
visit_value(const bool *default_val)=0seastar::program_options::options_descriptorpure virtual
visit_value(const int *default_val)=0seastar::program_options::options_descriptorpure virtual
visit_value(const unsigned *default_val)=0seastar::program_options::options_descriptorpure virtual
visit_value(const float *default_val)=0seastar::program_options::options_descriptorpure virtual
visit_value(const double *default_val)=0seastar::program_options::options_descriptorpure virtual
visit_value(const std::string *default_val)=0seastar::program_options::options_descriptorpure virtual
visit_value(const std::set< unsigned > *default_val)=0seastar::program_options::options_descriptorpure virtual
visit_value(const log_level *default_val)=0seastar::program_options::options_descriptorpure virtual
visit_value(const logger_timestamp_style *default_val)=0seastar::program_options::options_descriptorpure virtual
visit_value(const logger_ostream_type *default_val)=0seastar::program_options::options_descriptorpure virtual
visit_value(const memory::alloc_failure_kind *default_val)=0seastar::program_options::options_descriptorpure virtual
visit_value(const std::unordered_map< sstring, log_level > *default_val)=0seastar::program_options::options_descriptorpure virtual
visit_value_metadata(const std::string &name, const std::string &description, bool used)=0seastar::program_options::options_descriptorpure virtual
+ + + + diff --git a/master/classseastar_1_1program__options_1_1options__descriptor.html b/master/classseastar_1_1program__options_1_1options__descriptor.html new file mode 100644 index 000000000..5d62b068e --- /dev/null +++ b/master/classseastar_1_1program__options_1_1options__descriptor.html @@ -0,0 +1,266 @@ + + + + + + + +Seastar: seastar::program_options::options_descriptor Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::program_options::options_descriptor Class Referenceabstract
+
+
+

Detailed Description

+

Visitor interface for option_group::describe().

+

See option_group::describe() for more details on the visiting algorithm.

+
+

#include <seastar/util/program-options.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual bool visit_group_start (const std::string &name, bool used)=0
 
virtual void visit_group_end ()=0
 
virtual bool visit_value_metadata (const std::string &name, const std::string &description, bool used)=0
 
+virtual void visit_value ()=0
 Visit a switch (value<std::monostate>).
 
+virtual void visit_value (const bool *default_val)=0
 Visit a value (value), default_val is null when value has no default.
 
+virtual void visit_value (const int *default_val)=0
 Visit a value (value), default_val is null when value has no default.
 
+virtual void visit_value (const unsigned *default_val)=0
 Visit a value (value), default_val is null when value has no default.
 
+virtual void visit_value (const float *default_val)=0
 Visit a value (value), default_val is null when value has no default.
 
+virtual void visit_value (const double *default_val)=0
 Visit a value (value), default_val is null when value has no default.
 
+virtual void visit_value (const std::string *default_val)=0
 Visit a value (value), default_val is null when value has no default.
 
+virtual void visit_value (const std::set< unsigned > *default_val)=0
 Visit a value (value), default_val is null when value has no default.
 
+virtual void visit_value (const log_level *default_val)=0
 Visit a value (value), default_val is null when value has no default.
 
+virtual void visit_value (const logger_timestamp_style *default_val)=0
 Visit a value (value), default_val is null when value has no default.
 
+virtual void visit_value (const logger_ostream_type *default_val)=0
 Visit a value (value), default_val is null when value has no default.
 
+virtual void visit_value (const memory::alloc_failure_kind *default_val)=0
 Visit a value (value), default_val is null when value has no default.
 
+virtual void visit_value (const std::unordered_map< sstring, log_level > *default_val)=0
 Visit a value (value), default_val is null when value has no default.
 
+virtual void visit_selection_value (const std::vector< std::string > &candidate_names, const std::size_t *default_candidate)=0
 Visit a selection value (selection_value), default_candidate is null when there is no default candidate.
 
+

Member Function Documentation

+ +

◆ visit_group_end()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void seastar::program_options::options_descriptor::visit_group_end ()
+
+pure virtual
+
+

Visit the end of the group.

+

Called after all values and nested groups were visited in the current group.

+ +
+
+ +

◆ visit_group_start()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool seastar::program_options::options_descriptor::visit_group_start (const std::string & name,
bool used 
)
+
+pure virtual
+
+

Visit the start of the group.

+

Called when entering a group. Groups can be nested, in which case there will be another call to this method, before the current groups is closed.

Returns
whether visitor is interested in the group: true - visit, false - skip.
+ +
+
+ +

◆ visit_value_metadata()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool seastar::program_options::options_descriptor::visit_value_metadata (const std::string & name,
const std::string & description,
bool used 
)
+
+pure virtual
+
+

Visit value metadata, common across all value types.

+

Called at the start of visiting a value. After this, a call to the appropriate visit_value() overload (or visit_selection_value()) follows.

Returns
whether visitor is interested in the value: true - visit, false - skip.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1program__options_1_1options__mutator-members.html b/master/classseastar_1_1program__options_1_1options__mutator-members.html new file mode 100644 index 000000000..36349fd3b --- /dev/null +++ b/master/classseastar_1_1program__options_1_1options__mutator-members.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::program_options::options_mutator Member List
+
+
+ +

This is the complete list of members for seastar::program_options::options_mutator, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
visit_group_end()=0seastar::program_options::options_mutatorpure virtual
visit_group_start(const std::string &name, bool used)=0seastar::program_options::options_mutatorpure virtual
visit_selection_value(const std::vector< std::string > &candidate_names, std::size_t &selected_candidate)=0seastar::program_options::options_mutatorpure virtual
visit_value()=0seastar::program_options::options_mutatorpure virtual
visit_value(bool &val)=0seastar::program_options::options_mutatorpure virtual
visit_value(int &val)=0seastar::program_options::options_mutatorpure virtual
visit_value(unsigned &val)=0seastar::program_options::options_mutatorpure virtual
visit_value(float &val)=0seastar::program_options::options_mutatorpure virtual
visit_value(double &val)=0seastar::program_options::options_mutatorpure virtual
visit_value(std::string &val)=0seastar::program_options::options_mutatorpure virtual
visit_value(std::set< unsigned > &val)=0seastar::program_options::options_mutatorpure virtual
visit_value(log_level &val)=0seastar::program_options::options_mutatorpure virtual
visit_value(logger_timestamp_style &val)=0seastar::program_options::options_mutatorpure virtual
visit_value(logger_ostream_type &val)=0seastar::program_options::options_mutatorpure virtual
visit_value(memory::alloc_failure_kind &val)=0seastar::program_options::options_mutatorpure virtual
visit_value(std::unordered_map< sstring, log_level > &val)=0seastar::program_options::options_mutatorpure virtual
visit_value_metadata(const std::string &name, bool used)=0seastar::program_options::options_mutatorpure virtual
+ + + + diff --git a/master/classseastar_1_1program__options_1_1options__mutator.html b/master/classseastar_1_1program__options_1_1options__mutator.html new file mode 100644 index 000000000..49885a453 --- /dev/null +++ b/master/classseastar_1_1program__options_1_1options__mutator.html @@ -0,0 +1,260 @@ + + + + + + + +Seastar: seastar::program_options::options_mutator Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::program_options::options_mutator Class Referenceabstract
+
+
+

Detailed Description

+

Visitor interface option_group::mutate().

+

See option_group::mutate() for more details on the visiting algorithm.

+
+

#include <seastar/util/program-options.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual bool visit_group_start (const std::string &name, bool used)=0
 
virtual void visit_group_end ()=0
 
virtual bool visit_value_metadata (const std::string &name, bool used)=0
 
+virtual bool visit_value ()=0
 Visit a switch (value<std::monostate>), switch is set to returned value.
 
+virtual bool visit_value (bool &val)=0
 Visit and optionally mutate a value (value), should return true if value was mutated.
 
+virtual bool visit_value (int &val)=0
 Visit a value (value), default_val is null when value has no default.
 
+virtual bool visit_value (unsigned &val)=0
 Visit and optionally mutate a value (value), should return true if value was mutated.
 
+virtual bool visit_value (float &val)=0
 Visit and optionally mutate a value (value), should return true if value was mutated.
 
+virtual bool visit_value (double &val)=0
 Visit and optionally mutate a value (value), should return true if value was mutated.
 
+virtual bool visit_value (std::string &val)=0
 Visit and optionally mutate a value (value), should return true if value was mutated.
 
+virtual bool visit_value (std::set< unsigned > &val)=0
 Visit and optionally mutate a value (value), should return true if value was mutated.
 
+virtual bool visit_value (log_level &val)=0
 Visit and optionally mutate a value (value), should return true if value was mutated.
 
+virtual bool visit_value (logger_timestamp_style &val)=0
 Visit and optionally mutate a value (value), should return true if value was mutated.
 
+virtual bool visit_value (logger_ostream_type &val)=0
 Visit and optionally mutate a value (value), should return true if value was mutated.
 
+virtual bool visit_value (memory::alloc_failure_kind &val)=0
 Visit and optionally mutate a value (value), should return true if value was mutated.
 
+virtual bool visit_value (std::unordered_map< sstring, log_level > &val)=0
 Visit and optionally mutate a value (value), should return true if value was mutated.
 
+virtual bool visit_selection_value (const std::vector< std::string > &candidate_names, std::size_t &selected_candidate)=0
 Visit and optionally mutate a selection value (selection_value), should return true if value was mutated.
 
+

Member Function Documentation

+ +

◆ visit_group_end()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void seastar::program_options::options_mutator::visit_group_end ()
+
+pure virtual
+
+

Visit the end of the group.

+

Called after all values and nested groups were visited in the current group.

+ +
+
+ +

◆ visit_group_start()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool seastar::program_options::options_mutator::visit_group_start (const std::string & name,
bool used 
)
+
+pure virtual
+
+

Visit the start of the group.

+

Called when entering a group. Groups can be nested, in which case there will be another call to this method, before the current groups is closed.

Returns
whether visitor is interested in the group: true - visit, false - skip.
+ +
+
+ +

◆ visit_value_metadata()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool seastar::program_options::options_mutator::visit_value_metadata (const std::string & name,
bool used 
)
+
+pure virtual
+
+

Visit value metadata, common across all value types.

+

Called at the start of visiting a value. After this, a call to the appropriate visit_value() overload (or visit_selection_value()) follows.

Returns
whether visitor is interested in the value: true - visit, false - skip.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1program__options_1_1selection__value-members.html b/master/classseastar_1_1program__options_1_1selection__value-members.html new file mode 100644 index 000000000..7caa8408e --- /dev/null +++ b/master/classseastar_1_1program__options_1_1selection__value-members.html @@ -0,0 +1,111 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::program_options::selection_value< T > Member List
+
+
+ +

This is the complete list of members for seastar::program_options::selection_value< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_description (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
_group (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
_name (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
_used (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
basic_value(option_group &group, bool used, std::string name, std::string description) (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
basic_value(basic_value &&) (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
basic_value(const basic_value &)=delete (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
candidates typedef (defined in seastar::program_options::selection_value< T >)seastar::program_options::selection_value< T >
defaulted() constseastar::program_options::selection_value< T >inline
deleter typedef (defined in seastar::program_options::selection_value< T >)seastar::program_options::selection_value< T >
describe(options_descriptor &descriptor) const (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
description() const (defined in seastar::program_options::basic_value)seastar::program_options::basic_valueinline
get_selected_candidate() const (defined in seastar::program_options::selection_value< T >)seastar::program_options::selection_value< T >inline
get_selected_candidate_name() constseastar::program_options::selection_value< T >inline
get_selected_candidate_opts() constseastar::program_options::selection_value< T >inline
get_selected_candidate_opts()seastar::program_options::selection_value< T >inline
mutate(options_mutator &mutator) (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
name() const (defined in seastar::program_options::basic_value)seastar::program_options::basic_valueinline
operator bool() constseastar::program_options::selection_value< T >inline
operator=(basic_value &&)=delete (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
operator=(const basic_value &)=delete (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
select_candidate(std::string candidate_name)seastar::program_options::selection_value< T >inline
select_default_candidate(std::string candidate_name)seastar::program_options::selection_value< T >inline
selection_value(option_group &group, std::string name, candidates candidates, std::string default_candidate, std::string description)seastar::program_options::selection_value< T >inline
selection_value(option_group &group, std::string name, candidates candidates, std::string description) (defined in seastar::program_options::selection_value< T >)seastar::program_options::selection_value< T >inline
selection_value(option_group &group, std::string name, unused)seastar::program_options::selection_value< T >inline
used() const (defined in seastar::program_options::basic_value)seastar::program_options::basic_valueinline
value_handle typedef (defined in seastar::program_options::selection_value< T >)seastar::program_options::selection_value< T >
~basic_value()=default (defined in seastar::program_options::basic_value)seastar::program_options::basic_valuevirtual
+ + + + diff --git a/master/classseastar_1_1program__options_1_1selection__value.html b/master/classseastar_1_1program__options_1_1selection__value.html new file mode 100644 index 000000000..6efbc6ec2 --- /dev/null +++ b/master/classseastar_1_1program__options_1_1selection__value.html @@ -0,0 +1,365 @@ + + + + + + + +Seastar: seastar::program_options::selection_value< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::program_options::selection_value< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename T = std::monostate>
+class seastar::program_options::selection_value< T >

A selection value, allows selection from multiple candidates.

+

The candidates objects are of an opaque type which may not accessible to whoever is choosing between the available candidates. This allows the user selecting between seastar internal types without exposing them. Each candidate has a name, which is what the users choose based on. Each candidate can also have an associated option_group containing related candidate-specific configuration options, allowing further configuring the selected candidate. The code exposing the candidates should document the concrete types these can be down-casted to.

+
+

#include <seastar/util/program-options.hh>

+
+Inheritance diagram for seastar::program_options::selection_value< T >:
+
+
+ + +seastar::program_options::basic_value + +
+ + + + +

+Classes

struct  candidate
 
+ + + + + + + +

+Public Types

+using deleter = std::function< void(T *)>
 
+using value_handle = std::unique_ptr< T, deleter >
 
+using candidates = std::vector< candidate >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 selection_value (option_group &group, std::string name, candidates candidates, std::string default_candidate, std::string description)
 
selection_value (option_group &group, std::string name, candidates candidates, std::string description)
 
selection_value (option_group &group, std::string name, unused)
 Construct an unused value.
 
operator bool () const
 Was there a candidate selected (default also counts)?
 
+bool defaulted () const
 Is the currently selected candidate the default one?
 
+const std::string & get_selected_candidate_name () const
 Get the name of the currently selected candidate (assumes there is one selected, see \operator bool()).
 
+const option_groupget_selected_candidate_opts () const
 Get the options of the currently selected candidate (assumes there is one selected, see \operator bool()).
 
+option_groupget_selected_candidate_opts ()
 Get the options of the currently selected candidate (assumes there is one selected, see \operator bool()).
 
+T & get_selected_candidate () const
 
option_groupselect_candidate (std::string candidate_name)
 
option_groupselect_default_candidate (std::string candidate_name)
 
+bool used () const
 
+const std::string & name () const
 
+const std::string & description () const
 
+void describe (options_descriptor &descriptor) const
 
+void mutate (options_mutator &mutator)
 
+ + + + + + + + + +

+Public Attributes

+option_group_group
 
+bool _used = true
 
+std::string _name
 
+std::string _description
 
+

Class Documentation

+ +

◆ seastar::program_options::selection_value::candidate

+ +
+
+ + + + +
struct seastar::program_options::selection_value::candidate
+
+ + + + + + + + + + + +
Class Members
+string +name +
+unique_ptr< option_group > +opts +
+value_handle +value +
+ +
+
+

Constructor & Destructor Documentation

+ +

◆ selection_value()

+ +
+
+
+template<typename T = std::monostate>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
seastar::program_options::selection_value< T >::selection_value (option_groupgroup,
std::string name,
candidates candidates,
std::string default_candidate,
std::string description 
)
+
+inline
+
+

Construct a value.

+
Parameters
+ + + + + + +
group- the group containing this value
name- the name of this value
candidates- the available candidates
default_candidates- the name of the default candidate
description- the description of the value
+
+
+ +
+
+

Member Function Documentation

+ +

◆ select_candidate()

+ +
+
+
+template<typename T = std::monostate>
+ + + + + +
+ + + + + + + + +
option_group * seastar::program_options::selection_value< T >::select_candidate (std::string candidate_name)
+
+inline
+
+

Select a candidate.

+
Parameters
+ + +
candidate_name- the name of the to-be-selected candidate.
+
+
+ +
+
+ +

◆ select_default_candidate()

+ +
+
+
+template<typename T = std::monostate>
+ + + + + +
+ + + + + + + + +
option_group * seastar::program_options::selection_value< T >::select_default_candidate (std::string candidate_name)
+
+inline
+
+

Select a candidate and make it the default.

+
Parameters
+ + +
candidate_name- the name of the to-be-selected candidate.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1program__options_1_1selection__value.png b/master/classseastar_1_1program__options_1_1selection__value.png new file mode 100644 index 0000000000000000000000000000000000000000..007d198c528266f0ff539d3c5ea35967f13838d9 GIT binary patch literal 1351 zcmb`HX;4#F6vrP+3}p|+R4j}o167b9n^Kicd;&2F$RhF*AXZsIY;4)2rf#%gLPQuD zV*@5wTCmiF2;>E12a8k_NkQ^#ffx~kmHR1*2osU zG|7qzj|TKXZ;#?pj28eHBLr|?Os>HcZz@Bx%^FpHBzAmVmFqy-Via1hZei{6Wkh8; zIsP0}eyKx@lu?D*`5Z3QtHGA`P-ZJ|_Kv>Gksa!Syu94SxleGnCs7<;kH=$g_^_bDq64}LFF z)UOT9eM)v8F8nG&I`;JvJWm)zt2`T>b1XhdeWP*P1FPwdzNq~+JO%FkKw*`Sijnz4 zvM&pVemQ`=%mG2X@YP>Y%AY+hG@hh*A(+!zZ$#Ve7v)zbT5Bq+U;b&y@0dOQvymih!Z7> zB|fJYt)=xlm0h0yrM%vipBA4Ii>}M|a2l8quVIz9l9SB|Sx4E2*2LI&kFgj2B6S+C ztpVzr!Y82jT85`nBiVH0mi>F2VHtdSIhDcYgG%h4z#BnQ!XS^dlZ9mdNMvWw%~J`4 z%KC~eJa9G1YIwkl+3p$nh;6j_xgR=-rrsVw%hGB9Q literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1program__options_1_1string__map-members.html b/master/classseastar_1_1program__options_1_1string__map-members.html new file mode 100644 index 000000000..a260a9508 --- /dev/null +++ b/master/classseastar_1_1program__options_1_1string__map-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::program_options::string_map Member List
+
+
+ +

This is the complete list of members for seastar::program_options::string_map, including all inherited members.

+ + + +
operator!= (defined in seastar::program_options::string_map)seastar::program_options::string_mapfriend
operator== (defined in seastar::program_options::string_map)seastar::program_options::string_mapfriend
+ + + + diff --git a/master/classseastar_1_1program__options_1_1string__map.html b/master/classseastar_1_1program__options_1_1string__map.html new file mode 100644 index 000000000..b4d0ac59b --- /dev/null +++ b/master/classseastar_1_1program__options_1_1string__map.html @@ -0,0 +1,97 @@ + + + + + + + +Seastar: seastar::program_options::string_map Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::program_options::string_map Class Referencefinal
+
+
+

Detailed Description

+

Wrapper for command-line options with arbitrary string associations.

+

This type, to be used with Boost.Program_options, will result in an option that stores an arbitrary number of string associations.

+

Values are specified in the form "key0=value0:[key1=value1:...]". Options of this type can be specified multiple times, and the values will be merged (with the last-provided value for a key taking precedence).

+
Note
We need a distinct type (rather than a simple type alias) for overload resolution in the implementation, but advertizing our inheritance of std::unordered_map would introduce the possibility of memory leaks since STL containers do not declare virtual destructors.
+
+

#include <seastar/util/program-options.hh>

+
+Inheritance diagram for seastar::program_options::string_map:
+
+
+ +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1program__options_1_1string__map.png b/master/classseastar_1_1program__options_1_1string__map.png new file mode 100644 index 0000000000000000000000000000000000000000..42e0173437a693f037fe750df91256ecc912187a GIT binary patch literal 862 zcmeAS@N?(olHy`uVBq!ia0vp^&wx09gBeI#ssDTkq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0-g>$?hEy=Vo%=BFwE|D8z4zpEzxRL4 zoh^`~5P2zg?`-d*nL^1q@;PVX&z$+hJbB5R878Wl+-km_r<&TH{VJUFYu~NQ)!}0E zj0>WEZ@)BU$@#*l-Iuo9KK-_-a!=0b_xj}*lgsAT*W_gdZppIzf7&HB#-~-`)F#u0 zO&JOAHkCPFUSjpfU1ZIbJy*KtG)i50WI5~Bq1@Q=XNxUQKC-y*Ezn}t>|RGR<+FKd zDp`xN&is~`^?&2#^ex(t1Ge~I*zG@DYx$&*$(7n>bF{^vu^wnq8+XJg-9ycx4PA$#H1 zhIWxPxm&kw(U2;Q3g6-#ZS!KwVc%HU*h|x%xEJSpT{{0rv%LAx)FrZeCOum$|Fv_s z-{wrFNhJ+)d4DqBl*yf@(rb9F&eGSj$`%|vp23qgJ#f2xM#q*Ru9v^zPX+%hdHMW< zpKUYlMeJifZ@!T8gV>CnEGL>~`ZnmyxJd%zhx|&k({_3tPOjCxpO-&(N!I=Oep~h&n_U$hv(7|cJMqc{ zvF}HN3Z7)_SkQfG#ah+lTpykE>?A&8g{eeigF&Pfyx$*Xq;1zuifB_uJ%b>cP@ku@~bO?EGo7 z=w^=B-P4YX4!lTkXjacCx;9OK!;n{Srix)Ah8 z^ZQ)0FRAfcqWO7JU(8CpoEdv@*SX6kJC*Kh-dd_IUlP^8eIxSMrr8zuU93OfHM#99 zxc>Ck&RX`fK>`P#oz9qci`C*-_~yzNFQPM<{_y(DVu&=zWJ)=BZSvVOLXYL0f3`IJ U+kGe=m>C#6UHx3vIVCg!07ja!G5`Po literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1program__options_1_1value-members.html b/master/classseastar_1_1program__options_1_1value-members.html new file mode 100644 index 000000000..a567d92ab --- /dev/null +++ b/master/classseastar_1_1program__options_1_1value-members.html @@ -0,0 +1,106 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::program_options::value< T > Member List
+
+
+ +

This is the complete list of members for seastar::program_options::value< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
_description (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
_group (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
_name (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
_used (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
basic_value(option_group &group, bool used, std::string name, std::string description) (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
basic_value(basic_value &&) (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
basic_value(const basic_value &)=delete (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
defaulted() constseastar::program_options::value< T >inline
describe(options_descriptor &descriptor) const (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
description() const (defined in seastar::program_options::basic_value)seastar::program_options::basic_valueinline
get_value() constseastar::program_options::value< T >inline
get_value() (defined in seastar::program_options::value< T >)seastar::program_options::value< T >inline
mutate(options_mutator &mutator) (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
name() const (defined in seastar::program_options::basic_value)seastar::program_options::basic_valueinline
operator bool() constseastar::program_options::value< T >inline
operator=(basic_value &&)=delete (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
operator=(const basic_value &)=delete (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
set_default_value(T value) (defined in seastar::program_options::value< T >)seastar::program_options::value< T >inline
set_value(T value) (defined in seastar::program_options::value< T >)seastar::program_options::value< T >inline
used() const (defined in seastar::program_options::basic_value)seastar::program_options::basic_valueinline
value(option_group &group, std::string name, std::optional< T > default_value, std::string description)seastar::program_options::value< T >inline
value(option_group &group, std::string name, unused)seastar::program_options::value< T >inline
value(value &&)=default (defined in seastar::program_options::value< T >)seastar::program_options::value< T >
~basic_value()=default (defined in seastar::program_options::basic_value)seastar::program_options::basic_valuevirtual
+ + + + diff --git a/master/classseastar_1_1program__options_1_1value.html b/master/classseastar_1_1program__options_1_1value.html new file mode 100644 index 000000000..662f26fb2 --- /dev/null +++ b/master/classseastar_1_1program__options_1_1value.html @@ -0,0 +1,231 @@ + + + + + + + +Seastar: seastar::program_options::value< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::program_options::value< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename T = std::monostate>
+class seastar::program_options::value< T >

A configuration option value.

+
Template Parameters
+ + +
Tthe type of the contained value.
+
+
+
+

#include <seastar/util/program-options.hh>

+
+Inheritance diagram for seastar::program_options::value< T >:
+
+
+ + +seastar::program_options::basic_value + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 value (option_group &group, std::string name, std::optional< T > default_value, std::string description)
 
value (option_group &group, std::string name, unused)
 Construct an unused value.
 
value (value &&)=default
 
operator bool () const
 Is there a contained value?
 
+bool defaulted () const
 Does this value still contain a default-value?
 
+const T & get_value () const
 Return the contained value, assumes there is one, see operator bool().
 
+T & get_value ()
 
+void set_default_value (T value)
 
+void set_value (T value)
 
+bool used () const
 
+const std::string & name () const
 
+const std::string & description () const
 
+void describe (options_descriptor &descriptor) const
 
+void mutate (options_mutator &mutator)
 
+ + + + + + + + + +

+Public Attributes

+option_group_group
 
+bool _used = true
 
+std::string _name
 
+std::string _description
 
+

Constructor & Destructor Documentation

+ +

◆ value()

+ +
+
+
+template<typename T = std::monostate>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
seastar::program_options::value< T >::value (option_groupgroup,
std::string name,
std::optional< T > default_value,
std::string description 
)
+
+inline
+
+

Construct a value.

+
Parameters
+ + + + + +
group- the group containing this value
name- the name of this value
default_value- the default value, can be unset
description- the description of the value
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1program__options_1_1value.png b/master/classseastar_1_1program__options_1_1value.png new file mode 100644 index 0000000000000000000000000000000000000000..71ced780db3bc37433330e646cc875eeb9f482ab GIT binary patch literal 1122 zcmeAS@N?(olHy`uVBq!ia0vp^kAb*@gBeIFC9io7q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0KYF@2hEy=VoqKW9W-T5!@xo<${!7b8 zy9!;n_AdGRerMyy;oc1sSQYP03i4|1o>F|ySzDs`+|B(>hR^5xeeHDY=EY~Lt!m%a zl^>aEU9bE2-2aCX@AqB$Tl-)0+SC78M!n5~{QBZaap!i}9*yE%_WfkX)6%=1bxj*j zU)`EowOjD)>q9Ajeb&7*IHws=eZ4LEm|3{*i)!=S`5*hAzuNu1aQ;XB>vJacR)-d! zKDcaM-p!m>uTm$78$FxzdH$8-67r=_GoM!2Dm|a0A228RoaOIugJ*L#*Rz6{*U!ud z@=E4@P+rO`5fgu)Vs|h9Pu3peM;|8KKOj*mn!v)U+)z(EKJawbvP`KMA0;JV0JysR z0TZuTl7$3+wxk{RuYF&-k0WjSZ+YXc4w+Z%-1`%J`u| z6n;G5%uwz_-?s3c{N4vukzLxc#jpOHy8Pr-R*$-1a41^*_L>>_wCky zx^Ht2{aGLN>c#KqnbY={9o~NO>FuStsy(_nwhIgyURfUAv17xzFPp9I>m1E;-@eTK zN$izVXBWOzkdXD=uJ~&MpTyN`FK-9kuH6EPjkW1H)o)kFKJK`9;6_g6wAD{v<*lD3 z``%Db_+I**ZvWp=?+;E=IKDH=diJc~!+|$9RJ%-gF{Q!HK4HsY>-byuZ$GbiXD4ND z?Vv6x{9^h3Qmca3um9gUzHi+usZHCi7A;*jOKVMW>FQN!f}zf{cdaVg>Z7HyTHl&E z;QY#b_5+o&J~q$aC&$M$xLr58mBRMw^9rF|d<=j3^z4rB6=8buq($&RYm?xC{UH4A g{v%*mMg3FVdQ&MBb@0AIH&r2qf` literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4-members.html b/master/classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4-members.html new file mode 100644 index 000000000..c0fb043b9 --- /dev/null +++ b/master/classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4-members.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::program_options::value< std::monostate > Member List
+
+
+ +

This is the complete list of members for seastar::program_options::value< std::monostate >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
_description (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
_group (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
_name (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
_used (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
basic_value(option_group &group, bool used, std::string name, std::string description) (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
basic_value(basic_value &&) (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
basic_value(const basic_value &)=delete (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
describe(options_descriptor &descriptor) const (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
description() const (defined in seastar::program_options::basic_value)seastar::program_options::basic_valueinline
mutate(options_mutator &mutator) (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
name() const (defined in seastar::program_options::basic_value)seastar::program_options::basic_valueinline
operator bool() constseastar::program_options::value< std::monostate >inline
operator=(basic_value &&)=delete (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
operator=(const basic_value &)=delete (defined in seastar::program_options::basic_value)seastar::program_options::basic_value
set_value() (defined in seastar::program_options::value< std::monostate >)seastar::program_options::value< std::monostate >inline
unset_value() (defined in seastar::program_options::value< std::monostate >)seastar::program_options::value< std::monostate >inline
used() const (defined in seastar::program_options::basic_value)seastar::program_options::basic_valueinline
value(option_group &group, std::string name, std::string description)seastar::program_options::value< std::monostate >inline
value(option_group &group, std::string name, unused)seastar::program_options::value< std::monostate >inline
~basic_value()=default (defined in seastar::program_options::basic_value)seastar::program_options::basic_valuevirtual
+ + + + diff --git a/master/classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4.html b/master/classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4.html new file mode 100644 index 000000000..f9ea75dc3 --- /dev/null +++ b/master/classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4.html @@ -0,0 +1,202 @@ + + + + + + + +Seastar: seastar::program_options::value< std::monostate > Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::program_options::value< std::monostate > Class Reference
+
+
+

Detailed Description

+

A switch-style configuration option value.

+

Contains no value, can be set or not.

+
+

#include <seastar/util/program-options.hh>

+
+Inheritance diagram for seastar::program_options::value< std::monostate >:
+
+
+ + +seastar::program_options::basic_value + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 value (option_group &group, std::string name, std::string description)
 
value (option_group &group, std::string name, unused)
 Construct an unused value.
 
operator bool () const
 Is the option set?
 
+void set_value ()
 
+void unset_value ()
 
+bool used () const
 
+const std::string & name () const
 
+const std::string & description () const
 
+void describe (options_descriptor &descriptor) const
 
+void mutate (options_mutator &mutator)
 
+ + + + + + + + + +

+Public Attributes

+option_group_group
 
+bool _used = true
 
+std::string _name
 
+std::string _description
 
+

Constructor & Destructor Documentation

+ +

◆ value()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
seastar::program_options::value< std::monostate >::value (option_groupgroup,
std::string name,
std::string description 
)
+
+inline
+
+

Construct a value.

+
Parameters
+ + + + +
group- the group containing this value
name- the name of this value
description- the description of the value
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4.png b/master/classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3a0d0457fdbc275ec0011cd6185b2ffb0e405d GIT binary patch literal 1391 zcmeAS@N?(olHy`uVBq!ia0y~yU{nFJJ2;quWMyC4e;_3h;1lBd|38TN;?396{zDUh zEHFNB-~emq9eE&^qa?^Lm;tB=1g@S6F=Aj~`RD247*fIbcJ9NX)d~V`=hqqE{a*ig zwwe}qR+x3}t=o0Rb5?Zd%-Qfk+}JoVt&B%ZP*F*#Z^Dv}4kpj84h=Y?V&RhL1*T!# zQSJA0KVI7ZZR@16cdD97Q8U9Q?Tx=*Kke4>zcE*BWwz}2{>jTzy z5fis#+CJw?YImP4fA@CT(SpjF<*Qs?)E}ay$HTn_5cwuD$0jajUwz{Fz@fd&%!-e@cF@jdpR_!?YH|m2l_o z@H8?OPD^WN_+xO7f#rbVB$f|zwwp&XRdlH^+B|>eF^yrKq9=oD5KDl9Cj;vwDpMbr zRedj;bY{+4mOSIm-PYZ|1t&du7pLI)?j0+fF<;^2oxA&+qL2IkzE>T|^DH^}@54!V z?(+Y1c(8t2%6A5{m}j@2R>~fIyYA|iYwxdzeBJT3>CDyQ$-jeFMYml%?va0s-P8MB z>WYGLeM{Y!7i;A;rdxi9+I;2P+T*K!+kD>g`FO2IvHWR^WpxI%)7gW8%62Mg{?)HM zo^k&6#?(*A%m4oDF)N)daX8`E%6zHXrAtyp&zvsXxn*m$@1@7huP6N~dENZJA}88` z&*J&-mo>XL6>euVQFPulcj}gl1yMm+`@TQ(xRkeR=kECrCx2g(clWJ?rRK>y#W(Y` zERTJ*&5Ya`yLi3t_L^O#(jWiKY1=d>@9xLRmve1ze~O&qzv*F#_e--QCz@~0i~g(? z&GhZ=uHDmPJk86$ZHtYXIvwmGzA?>1{S#vx7n1uVJHrMSl)!ek*7k*>v znblUZTX*}{UDuXAzdT7!K4$uq^nE;f-%Xc)O77)(Sr&N7V)xeP3$NEb&im}iT~$7@ zVdKGuMt+Z1v-5wQ`pY{@&-<4D_TELOtAq9j=Jn2*k}~1+Lyza16L&uhslId)l)H2N zx92IpGd}=K7t3A!wtp=+x%u4kGX=Z8T3)Eiul*X&uy)DBq@Gma#j;Cs%hdhM8@Od^ zO4n`fZ)N!*XBQYWzu!UoJMTts=7#@m=VLs7XNx90Snt8~!x%Lx@2Je2$!WaV`5&X= W+*doYTn>XuM+Q$ + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::promise< T > Member List
+
+
+ +

This is the complete list of members for seastar::promise< T >, including all inherited members.

+ + + + + + + + + + + + + +
get_future() noexceptseastar::promise< T >inline
move_it(promise &&x) noexceptseastar::promise< T >inline
operator=(promise &&x) noexcept (defined in seastar::promise< T >)seastar::promise< T >inline
operator=(const promise &)=delete (defined in seastar::promise< T >)seastar::promise< T >
promise() noexceptseastar::promise< T >inline
promise(promise &&x) noexcept (defined in seastar::promise< T >)seastar::promise< T >inline
promise(const promise &)=delete (defined in seastar::promise< T >)seastar::promise< T >
set_exception(std::exception_ptr &&ex) noexceptseastar::promise< T >inline
set_exception(const std::exception_ptr &ex) noexcept (defined in seastar::promise< T >)seastar::promise< T >inline
set_exception(Exception &&e) noexceptseastar::promise< T >inline
set_to_current_exception() noexceptseastar::promise< T >inline
set_value(A &&... a) noexceptseastar::promise< T >inline
+ + + + diff --git a/master/classseastar_1_1promise.html b/master/classseastar_1_1promise.html new file mode 100644 index 000000000..4b1f36fe0 --- /dev/null +++ b/master/classseastar_1_1promise.html @@ -0,0 +1,304 @@ + + + + + + + +Seastar: seastar::promise< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::promise< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename T>
+class seastar::promise< T >

promise - allows a future value to be made available at a later time.

+
Template Parameters
+ + +
TA list of types to be carried as the result of the associated future. A list with two or more types is deprecated; use promise<std::tuple<T...>> instead.
+
+
+
+

#include <seastar/core/future.hh>

+
+Inheritance diagram for seastar::promise< T >:
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 promise () noexcept
 Constructs an empty promise. More...
 
+void move_it (promise &&x) noexcept
 Moves a promise object.
 
promise (promise &&x) noexcept
 
promise (const promise &)=delete
 
+promiseoperator= (promise &&x) noexcept
 
+void operator= (const promise &)=delete
 
void set_to_current_exception () noexcept
 
future< T > get_future () noexcept
 Gets the promise's associated future. More...
 
template<typename... A>
void set_value (A &&... a) noexcept
 Sets the promises value. More...
 
void set_exception (std::exception_ptr &&ex) noexcept
 Marks the promise as failed. More...
 
+void set_exception (const std::exception_ptr &ex) noexcept
 
template<typename Exception >
std::enable_if_t<!std::is_same_v< std::remove_reference_t< Exception >, std::exception_ptr >, void > set_exception (Exception &&e) noexcept
 Marks the promise as failed. More...
 
+

Constructor & Destructor Documentation

+ +

◆ promise()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
seastar::promise< T >::promise ()
+
+inlinenoexcept
+
+ +

Constructs an empty promise.

+

Creates promise with no associated future yet (see get_future()).

+ +
+
+

Member Function Documentation

+ +

◆ set_exception() [1/2]

+ +
+
+
+template<typename T >
+
+template<typename Exception >
+ + + + + +
+ + + + + + + + +
std::enable_if_t<!std::is_same_v< std::remove_reference_t< Exception >, std::exception_ptr >, void > seastar::promise< T >::set_exception (Exception && e)
+
+inlinenoexcept
+
+ +

Marks the promise as failed.

+

Forwards the exception argument to the future and makes it available. May be called either before or after get_future().

+ +
+
+ +

◆ set_exception() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
void seastar::promise< T >::set_exception (std::exception_ptr && ex)
+
+inlinenoexcept
+
+ +

Marks the promise as failed.

+

Forwards the exception argument to the future and makes it available. May be called either before or after get_future().

+ +
+
+ +

◆ set_to_current_exception()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
void seastar::promise< T >::set_to_current_exception ()
+
+inlinenoexcept
+
+

Set this promise to the current exception.

+

This is equivalent to set_exception(std::current_exception()), but expands to less code.

+ +
+
+ +

◆ set_value()

+ +
+
+
+template<typename T >
+
+template<typename... A>
+ + + + + +
+ + + + + + + + +
void seastar::promise< T >::set_value (A &&... a)
+
+inlinenoexcept
+
+ +

Sets the promises value.

+

Forwards the arguments and makes them available to the associated future. May be called either before or after get_future().

+

The arguments can have either the types the promise is templated with, or a corresponding std::tuple. That is, given a promise<int, double>, both calls are valid:

+

pr.set_value(42, 43.0); pr.set_value(std::tuple<int, double>(42, 43.0))

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1promise.png b/master/classseastar_1_1promise.png new file mode 100644 index 0000000000000000000000000000000000000000..87624868b6e4af60f76d82bb6b2c908abaf7ca63 GIT binary patch literal 892 zcmeAS@N?(olHy`uVBq!ia0y~yU=#te12~w0dtRv;x2;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z|8IG;uuoF_;&8?JZ(iD*Xc{We*gdf z!=;$<_TdYjewWmyMo&{XT)WwD{fwESY0rezJX`;32dZcWF7gOksL&-(Yui{{L$5Kaxv5nh)XUHJbl zTjVu^RdM^@&A&D0?dMCyt8bfada&F#_E%I=_qFoOTg&goZZP*?_I#D8=T)9?;?VQZ z)@jGCRxY@(=m#vNwRXsOv*N?4F#MFM8 z1g()y+ZnX^#OBan4!6x8&MDh)s5AJ|x!5w#DU&@UW9xG^{+r*q>F9wi)2!zd=`M@e zXU87cch<*hS#{E>ge@C2_>WI{{Caciif_l}=osv=JNV_JNcH4@MoV88|NHeO+f(0T zhYYjt_Lp*XwJI-L|D4g8B=Uk?(KEc#IdEEog~gR_-I~-2JJpv`^|v(N-JG!G^q(mj zlfD=Ni76ULL4L$n#CY?eGgV9#!uuGw4lEU7RrvHZbQJ@Omq^12-^oF&94lQIH5m3S zu3-vbIHS3oL4=|BlqLh~fjLE74vYrN=a3@&ymwAgTG))4-VzRiH9?CQT!5CibTUoQ z2xJhlS3h<4vyauAewG8=70H1N=PI9Wny+`Ns_wSowjAwu`)@DV9`t|HwRJ~xZzoDD zSne;BdiTP%RMT#_hU+lu@F-3!+ j6DpRs2$;AZzLyU#n>%CMmAz+yS%tyV)z4*}Q$iB}yIh*B literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1queue-members.html b/master/classseastar_1_1queue-members.html new file mode 100644 index 000000000..ce7edb25d --- /dev/null +++ b/master/classseastar_1_1queue-members.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: Member List + + + + + + + + + + +
+
seastar::queue< T > Member List
+
+
+ +

This is the complete list of members for seastar::queue< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + +
abort(std::exception_ptr ex) noexceptseastar::queue< T >inline
consume(Func &&func)seastar::queue< T >inline
empty() const noexceptseastar::queue< T >inline
front() noexceptseastar::queue< T >inline
full() const noexceptseastar::queue< T >inline
has_blocked_consumer() const noexceptseastar::queue< T >inline
max_size() const noexceptseastar::queue< T >inline
not_empty() noexceptseastar::queue< T >inline
not_full() noexceptseastar::queue< T >inline
pop() noexceptseastar::queue< T >inline
pop_eventually() noexceptseastar::queue< T >inline
push(T &&a)seastar::queue< T >inline
push_eventually(T &&data) noexceptseastar::queue< T >inline
queue(size_t size) (defined in seastar::queue< T >)seastar::queue< T >inlineexplicit
set_max_size(size_t max) noexceptseastar::queue< T >inline
size() const noexceptseastar::queue< T >inline
+ + + + diff --git a/master/classseastar_1_1queue.html b/master/classseastar_1_1queue.html new file mode 100644 index 000000000..2a98be9be --- /dev/null +++ b/master/classseastar_1_1queue.html @@ -0,0 +1,488 @@ + + + + + + + +Seastar: seastar::queue< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::queue< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename T>
+requires std::is_nothrow_move_constructible_v<T>
+class seastar::queue< T >

Asynchronous single-producer single-consumer queue with limited capacity. There can be at most one producer-side and at most one consumer-side operation active at any time. Operations returning a future are considered to be active until the future resolves.

+

Note: queue requires the data type T to be nothrow move constructible as it's returned as future<T> by pop_eventually and seastar futurized data type are required to be nothrow move-constructible.

+
+

#include <seastar/core/queue.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

queue (size_t size)
 
bool push (T &&a)
 Push an item. More...
 
pop () noexcept
 Pop an item. More...
 
T & front () noexcept
 access the front element in the queue More...
 
template<typename Func >
+requires std::is_nothrow_move_constructible_v<T>
bool consume (Func &&func)
 
+bool empty () const noexcept
 Returns true when the queue is empty.
 
+bool full () const noexcept
 Returns true when the queue is full.
 
future not_empty () noexcept
 
future not_full () noexcept
 
future< T > pop_eventually () noexcept
 
future push_eventually (T &&data) noexcept
 
+size_t size () const noexcept
 Returns the number of items currently in the queue.
 
size_t max_size () const noexcept
 
void set_max_size (size_t max) noexcept
 
void abort (std::exception_ptr ex) noexcept
 
bool has_blocked_consumer () const noexcept
 Check if there is an active consumer. More...
 
+

Member Function Documentation

+ +

◆ abort()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
void seastar::queue< T >::abort (std::exception_ptr ex)
+
+inlinenoexcept
+
+

Destroy any items in the queue, and pass the provided exception to any waiting readers or writers - or to any later read or write attempts.

+ +
+
+ +

◆ consume()

+ +
+
+
+template<typename T >
+requires std::is_nothrow_move_constructible_v<T>
+
+template<typename Func >
+requires std::is_nothrow_move_constructible_v<T>
+ + + + + +
+ + + + + + + + +
bool seastar::queue< T >::consume (Func && func)
+
+inline
+
+

Consumes items from the queue, passing them to func, until func returns false or the queue it empty

+

Returns false if func returned false.

+ +
+
+ +

◆ front()

+ +
+
+
+template<typename T >
+requires std::is_nothrow_move_constructible_v<T>
+ + + + + +
+ + + + +
T & seastar::queue< T >::front
+
+inlinenoexcept
+
+ +

access the front element in the queue

+

Accessing the front of an empty or aborted queue will result in undefined behaviour.

+ +
+
+ +

◆ has_blocked_consumer()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
bool seastar::queue< T >::has_blocked_consumer () const
+
+inlinenoexcept
+
+ +

Check if there is an active consumer.

+

Returns true if another fiber waits for an item to be pushed into the queue

+ +
+
+ +

◆ max_size()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
size_t seastar::queue< T >::max_size () const
+
+inlinenoexcept
+
+

Returns the size limit imposed on the queue during its construction or by a call to set_max_size(). If the queue contains max_size() items (or more), further items cannot be pushed until some are popped.

+ +
+
+ +

◆ not_empty()

+ +
+
+
+template<typename T >
+requires std::is_nothrow_move_constructible_v<T>
+ + + + + +
+ + + + +
future seastar::queue< T >::not_empty
+
+inlinenoexcept
+
+

Returns a future<> that becomes available when pop() or consume() can be called. A consumer-side operation. Cannot be called concurrently with other consumer-side operations.

+ +
+
+ +

◆ not_full()

+ +
+
+
+template<typename T >
+requires std::is_nothrow_move_constructible_v<T>
+ + + + + +
+ + + + +
future seastar::queue< T >::not_full
+
+inlinenoexcept
+
+

Returns a future<> that becomes available when push() can be called. A producer-side operation. Cannot be called concurrently with other producer-side operations.

+ +
+
+ +

◆ pop()

+ +
+
+
+template<typename T >
+requires std::is_nothrow_move_constructible_v<T>
+ + + + + +
+ + + + +
T seastar::queue< T >::pop
+
+inlinenoexcept
+
+ +

Pop an item.

+

Popping from an empty queue will result in undefined behavior.

+ +
+
+ +

◆ pop_eventually()

+ +
+
+
+template<typename T >
+requires std::is_nothrow_move_constructible_v<T>
+ + + + + +
+ + + + +
future< T > seastar::queue< T >::pop_eventually
+
+inlinenoexcept
+
+

Pops element now or when there is some. Returns a future that becomes available when some element is available. If the queue is, or already was, abort()ed, the future resolves with the exception provided to abort(). A consumer-side operation. Cannot be called concurrently with other consumer-side operations.

+ +
+
+ +

◆ push()

+ +
+
+
+template<typename T >
+requires std::is_nothrow_move_constructible_v<T>
+ + + + + +
+ + + + + + + + +
bool seastar::queue< T >::push (T && a)
+
+inline
+
+ +

Push an item.

+

Returns false if the queue was full and the item was not pushed.

+ +
+
+ +

◆ push_eventually()

+ +
+
+
+template<typename T >
+requires std::is_nothrow_move_constructible_v<T>
+ + + + + +
+ + + + + + + + +
future seastar::queue< T >::push_eventually (T && data)
+
+inlinenoexcept
+
+

Pushes the element now or when there is room. Returns a future<> which resolves when data was pushed. If the queue is, or already was, abort()ed, the future resolves with the exception provided to abort(). A producer-side operation. Cannot be called concurrently with other producer-side operations.

+ +
+
+ +

◆ set_max_size()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
void seastar::queue< T >::set_max_size (size_t max)
+
+inlinenoexcept
+
+

Set the maximum size to a new value. If the queue's max size is reduced, items already in the queue will not be expunged and the queue will be temporarily bigger than its max_size.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1ragel__parser__base-members.html b/master/classseastar_1_1ragel__parser__base-members.html new file mode 100644 index 000000000..5e6798038 --- /dev/null +++ b/master/classseastar_1_1ragel__parser__base-members.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::ragel_parser_base< ConcreteParser > Member List
+
+
+ +

This is the complete list of members for seastar::ragel_parser_base< ConcreteParser >, including all inherited members.

+ + + + + + + + + + + + + + + +
_builder (defined in seastar::ragel_parser_base< ConcreteParser >)seastar::ragel_parser_base< ConcreteParser >protected
_fsm_act (defined in seastar::ragel_parser_base< ConcreteParser >)seastar::ragel_parser_base< ConcreteParser >protected
_fsm_cs (defined in seastar::ragel_parser_base< ConcreteParser >)seastar::ragel_parser_base< ConcreteParser >protected
_fsm_stack (defined in seastar::ragel_parser_base< ConcreteParser >)seastar::ragel_parser_base< ConcreteParser >protected
_fsm_stack_size (defined in seastar::ragel_parser_base< ConcreteParser >)seastar::ragel_parser_base< ConcreteParser >protected
_fsm_te (defined in seastar::ragel_parser_base< ConcreteParser >)seastar::ragel_parser_base< ConcreteParser >protected
_fsm_top (defined in seastar::ragel_parser_base< ConcreteParser >)seastar::ragel_parser_base< ConcreteParser >protected
_fsm_ts (defined in seastar::ragel_parser_base< ConcreteParser >)seastar::ragel_parser_base< ConcreteParser >protected
get_str() (defined in seastar::ragel_parser_base< ConcreteParser >)seastar::ragel_parser_base< ConcreteParser >inlineprotected
init_base() (defined in seastar::ragel_parser_base< ConcreteParser >)seastar::ragel_parser_base< ConcreteParser >inlineprotected
operator()(temporary_buffer< char > buf) (defined in seastar::ragel_parser_base< ConcreteParser >)seastar::ragel_parser_base< ConcreteParser >inline
postpop() (defined in seastar::ragel_parser_base< ConcreteParser >)seastar::ragel_parser_base< ConcreteParser >inlineprotected
prepush() (defined in seastar::ragel_parser_base< ConcreteParser >)seastar::ragel_parser_base< ConcreteParser >inlineprotected
unconsumed_remainder typedef (defined in seastar::ragel_parser_base< ConcreteParser >)seastar::ragel_parser_base< ConcreteParser >
+ + + + diff --git a/master/classseastar_1_1ragel__parser__base.html b/master/classseastar_1_1ragel__parser__base.html new file mode 100644 index 000000000..0749165c3 --- /dev/null +++ b/master/classseastar_1_1ragel__parser__base.html @@ -0,0 +1,143 @@ + + + + + + + +Seastar: seastar::ragel_parser_base< ConcreteParser > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::ragel_parser_base< ConcreteParser > Class Template Reference
+
+
+ + + + +

+Public Types

+using unconsumed_remainder = std::optional< temporary_buffer< char > >
 
+ + + +

+Public Member Functions

+future< unconsumed_remainder > operator() (temporary_buffer< char > buf)
 
+ + + + + + + + + +

+Protected Member Functions

+void init_base ()
 
+void prepush ()
 
+void postpop ()
 
+sstring get_str ()
 
+ + + + + + + + + + + + + + + + + +

+Protected Attributes

+int _fsm_cs
 
+std::unique_ptr< int[]> _fsm_stack = nullptr
 
+int _fsm_stack_size = 0
 
+int _fsm_top
 
+int _fsm_act
 
+char * _fsm_ts
 
+char * _fsm_te
 
+sstring_builder _builder
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1reactor-members.html b/master/classseastar_1_1reactor-members.html new file mode 100644 index 000000000..2fb8246d8 --- /dev/null +++ b/master/classseastar_1_1reactor-members.html @@ -0,0 +1,167 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::reactor Member List
+
+
+ +

This is the complete list of members for seastar::reactor, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
abandoned_failed_futures() const (defined in seastar::reactor)seastar::reactorinline
add_high_priority_task(task *) noexcept (defined in seastar::reactor)seastar::reactor
add_task(task *t) noexcept (defined in seastar::reactor)seastar::reactor
add_urgent_task(task *t) noexcept (defined in seastar::reactor)seastar::reactor
alien()seastar::reactorinline
at_destroy(Func &&func) (defined in seastar::reactor)seastar::reactorinline
at_exit(noncopyable_function< future<>()> func) (defined in seastar::reactor)seastar::reactor
chmod(std::string_view name, file_permissions permissions) noexcept (defined in seastar::reactor)seastar::reactor
connect(socket_address sa) (defined in seastar::reactor)seastar::reactor
connect(socket_address, socket_address, transport proto=transport::TCP) (defined in seastar::reactor)seastar::reactor
cpu_id() const (defined in seastar::reactor)seastar::reactor
create_scheduling_groupseastar::reactorfriend
current_task() const (defined in seastar::reactor)seastar::reactorinline
drain() (defined in seastar::reactor)seastar::reactorstatic
enable_timer(steady_clock_type::time_point when) noexcept (defined in seastar::reactor)seastar::reactor
exit(int ret) (defined in seastar::reactor)seastar::reactor
file_accessible(std::string_view pathname, access_flags flags) noexcept (defined in seastar::reactor)seastar::reactor
file_exists(std::string_view pathname) noexcept (defined in seastar::reactor)seastar::reactorinline
file_size(std::string_view pathname) noexcept (defined in seastar::reactor)seastar::reactor
file_stat(std::string_view pathname, follow_symlink) noexcept (defined in seastar::reactor)seastar::reactor
file_system_at(std::string_view pathname) noexcept (defined in seastar::reactor)seastar::reactor
file_type(std::string_view name, follow_symlink=follow_symlink::yes) noexcept (defined in seastar::reactor)seastar::reactor
force_poll() (defined in seastar::reactor)seastar::reactor
get_blocked_reactor_notify_ms() const (defined in seastar::reactor)seastar::reactor
get_io_queue(dev_t devid=0) (defined in seastar::reactor)seastar::reactorinline
get_io_stats() const (defined in seastar::reactor)seastar::reactorinline
get_sched_stats() constseastar::reactor
handle_signal(int signo, noncopyable_function< void()> &&handler)seastar::reactor
idle_cpu_handler typedef (defined in seastar::reactor)seastar::reactor
idle_cpu_handler_result typedef (defined in seastar::reactor)seastar::reactor
inotify_add_watch(int fd, std::string_view path, uint32_t flags) (defined in seastar::reactor)seastar::reactor
internal::add_to_flush_poller (defined in seastar::reactor)seastar::reactorfriend
io_completion::complete_with (defined in seastar::reactor)seastar::reactorfriend
kill(pid_t pid, int sig) (defined in seastar::reactor)seastar::reactor
link_file(std::string_view oldpath, std::string_view newpath) noexcept (defined in seastar::reactor)seastar::reactor
listen(socket_address sa, listen_options opts={}) (defined in seastar::reactor)seastar::reactor
make_directory(std::string_view name, file_permissions permissions=file_permissions::default_dir_permissions) noexcept (defined in seastar::reactor)seastar::reactor
make_file_impl (defined in seastar::reactor)seastar::reactorfriend
make_pipe() (defined in seastar::reactor)seastar::reactor
make_pollable_fd(socket_address sa, int proto) (defined in seastar::reactor)seastar::reactor
net() (defined in seastar::reactor)seastar::reactorinline
now() noexcept (defined in seastar::reactor)seastar::reactorinlinestatic
open_directory(std::string_view name) noexcept (defined in seastar::reactor)seastar::reactor
open_file_dma(std::string_view name, open_flags flags, file_open_options options={}) noexcept (defined in seastar::reactor)seastar::reactor
operator=(const reactor &)=delete (defined in seastar::reactor)seastar::reactor
poll_rdhup(pollable_fd_state &fd) (defined in seastar::reactor)seastar::reactor
poller typedef (defined in seastar::reactor)seastar::reactor
posix_connect(pollable_fd pfd, socket_address sa, socket_address local) (defined in seastar::reactor)seastar::reactor
posix_listen(socket_address sa, listen_options opts={}) (defined in seastar::reactor)seastar::reactor
posix_reuseport_available() const (defined in seastar::reactor)seastar::reactorinline
reactor(std::shared_ptr< smp > smp, alien::instance &alien, unsigned id, reactor_backend_selector rbs, reactor_config cfg) (defined in seastar::reactor)seastar::reactorexplicit
reactor(const reactor &)=delete (defined in seastar::reactor)seastar::reactor
read_directory(int fd, char *buffer, size_t buffer_size) (defined in seastar::reactor)seastar::reactor
readable(pollable_fd_state &fd) (defined in seastar::reactor)seastar::reactor
readable_or_writeable(pollable_fd_state &fd) (defined in seastar::reactor)seastar::reactor
remove_file(std::string_view pathname) noexcept (defined in seastar::reactor)seastar::reactor
rename_file(std::string_view old_pathname, std::string_view new_pathname) noexcept (defined in seastar::reactor)seastar::reactor
report_failed_future (defined in seastar::reactor)seastar::reactorfriend
run() noexcept (defined in seastar::reactor)seastar::reactor
run_in_background(future<> f) (defined in seastar::reactor)seastar::reactor
run_in_background(Func &&func) (defined in seastar::reactor)seastar::reactorinline
scheduling_group_key_createseastar::reactorfriend
seastar::destroy_scheduling_group (defined in seastar::reactor)seastar::reactorfriend
seastar::rename_scheduling_group (defined in seastar::reactor)seastar::reactorfriend
send_all(pollable_fd_state &fd, const void *buffer, size_t size) (defined in seastar::reactor)seastar::reactor
set_bypass_fsync(bool value) (defined in seastar::reactor)seastar::reactor
set_current_task(task *t) (defined in seastar::reactor)seastar::reactorinline
set_idle_cpu_handler(idle_cpu_handler &&handler)seastar::reactorinline
set_strict_dma(bool value)seastar::reactor
sleep() (defined in seastar::reactor)seastar::reactor
spawn(std::string_view pathname, std::vector< sstring > argv, std::vector< sstring > env={}) (defined in seastar::reactor)seastar::reactor
statvfs(std::string_view pathname) noexcept (defined in seastar::reactor)seastar::reactor
total_busy_time() (defined in seastar::reactor)seastar::reactor
total_idle_time() (defined in seastar::reactor)seastar::reactor
total_steal_time() (defined in seastar::reactor)seastar::reactor
touch_directory(std::string_view name, file_permissions permissions=file_permissions::default_dir_permissions) noexcept (defined in seastar::reactor)seastar::reactor
update_blocked_reactor_notify_ms(std::chrono::milliseconds ms) (defined in seastar::reactor)seastar::reactor
uptime() (defined in seastar::reactor)seastar::reactorinline
wait_for_stop(std::chrono::duration< Rep, Period > timeout) (defined in seastar::reactor)seastar::reactorinline
waitpid(pid_t pid) (defined in seastar::reactor)seastar::reactor
wakeup() (defined in seastar::reactor)seastar::reactor
when_started() (defined in seastar::reactor)seastar::reactorinline
work_waiting_on_reactor typedef (defined in seastar::reactor)seastar::reactor
writeable(pollable_fd_state &fd) (defined in seastar::reactor)seastar::reactor
~reactor() (defined in seastar::reactor)seastar::reactor
+ + + + diff --git a/master/classseastar_1_1reactor.html b/master/classseastar_1_1reactor.html new file mode 100644 index 000000000..e2089aa53 --- /dev/null +++ b/master/classseastar_1_1reactor.html @@ -0,0 +1,546 @@ + + + + + + + +Seastar: seastar::reactor Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+ + + + + + + + + +

+Classes

struct  io_stats
 
struct  sched_stats
 Scheduling statistics. More...
 
class  test
 
+ + + + + + + + + +

+Public Types

+using poller = internal::poller
 
+using idle_cpu_handler_result = seastar::idle_cpu_handler_result
 
+using work_waiting_on_reactor = seastar::work_waiting_on_reactor
 
+using idle_cpu_handler = seastar::idle_cpu_handler
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

alien::instancealien ()
 
+void handle_signal (int signo, noncopyable_function< void()> &&handler)
 Register a user-defined signal handler.
 
+void wakeup ()
 
reactor (std::shared_ptr< smp > smp, alien::instance &alien, unsigned id, reactor_backend_selector rbs, reactor_config cfg)
 
reactor (const reactor &)=delete
 
+void operator= (const reactor &)=delete
 
+sched_clock::duration uptime ()
 
+io_queueget_io_queue (dev_t devid=0)
 
+server_socket listen (socket_address sa, listen_options opts={})
 
+future< connected_socketconnect (socket_address sa)
 
+future< connected_socketconnect (socket_address, socket_address, transport proto=transport::TCP)
 
+pollable_fd posix_listen (socket_address sa, listen_options opts={})
 
+bool posix_reuseport_available () const
 
+pollable_fd make_pollable_fd (socket_address sa, int proto)
 
+future posix_connect (pollable_fd pfd, socket_address sa, socket_address local)
 
+future send_all (pollable_fd_state &fd, const void *buffer, size_t size)
 
+future< fileopen_file_dma (std::string_view name, open_flags flags, file_open_options options={}) noexcept
 
+future< fileopen_directory (std::string_view name) noexcept
 
+future make_directory (std::string_view name, file_permissions permissions=file_permissions::default_dir_permissions) noexcept
 
+future touch_directory (std::string_view name, file_permissions permissions=file_permissions::default_dir_permissions) noexcept
 
+future< std::optional< directory_entry_type > > file_type (std::string_view name, follow_symlink=follow_symlink::yes) noexcept
 
+future< stat_datafile_stat (std::string_view pathname, follow_symlink) noexcept
 
+future< uint64_t > file_size (std::string_view pathname) noexcept
 
+future< bool > file_accessible (std::string_view pathname, access_flags flags) noexcept
 
+future< bool > file_exists (std::string_view pathname) noexcept
 
+future< fs_typefile_system_at (std::string_view pathname) noexcept
 
+future< struct statvfs > statvfs (std::string_view pathname) noexcept
 
+future remove_file (std::string_view pathname) noexcept
 
+future rename_file (std::string_view old_pathname, std::string_view new_pathname) noexcept
 
+future link_file (std::string_view oldpath, std::string_view newpath) noexcept
 
+future chmod (std::string_view name, file_permissions permissions) noexcept
 
+future< size_t > read_directory (int fd, char *buffer, size_t buffer_size)
 
+future< int > inotify_add_watch (int fd, std::string_view path, uint32_t flags)
 
+future< std::tuple< file_desc, file_desc > > make_pipe ()
 
+future< std::tuple< pid_t, file_desc, file_desc, file_desc > > spawn (std::string_view pathname, std::vector< sstring > argv, std::vector< sstring > env={})
 
+future< int > waitpid (pid_t pid)
 
+void kill (pid_t pid, int sig)
 
+int run () noexcept
 
+void exit (int ret)
 
+future when_started ()
 
+template<typename Rep , typename Period >
future wait_for_stop (std::chrono::duration< Rep, Period > timeout)
 
+void at_exit (noncopyable_function< future<>()> func)
 
+template<typename Func >
void at_destroy (Func &&func)
 
+taskcurrent_task () const
 
+void set_current_task (task *t)
 
+void add_task (task *t) noexcept
 
+void add_urgent_task (task *t) noexcept
 
+void run_in_background (future<> f)
 
+template<typename Func >
void run_in_background (Func &&func)
 
void set_idle_cpu_handler (idle_cpu_handler &&handler)
 
+void force_poll ()
 
+void add_high_priority_task (task *) noexcept
 
+network_stacknet ()
 
+shard_id cpu_id () const
 
+void sleep ()
 
+steady_clock_type::duration total_idle_time ()
 
+steady_clock_type::duration total_busy_time ()
 
+std::chrono::nanoseconds total_steal_time ()
 
+const io_statsget_io_stats () const
 
sched_stats get_sched_stats () const
 
+uint64_t abandoned_failed_futures () const
 
+future readable (pollable_fd_state &fd)
 
+future writeable (pollable_fd_state &fd)
 
+future readable_or_writeable (pollable_fd_state &fd)
 
+future poll_rdhup (pollable_fd_state &fd)
 
+void enable_timer (steady_clock_type::time_point when) noexcept
 
void set_strict_dma (bool value)
 
+void set_bypass_fsync (bool value)
 
+void update_blocked_reactor_notify_ms (std::chrono::milliseconds ms)
 
+std::chrono::milliseconds get_blocked_reactor_notify_ms () const
 
+ + + + + +

+Static Public Member Functions

+static sched_clock::time_point now () noexcept
 
+static future drain ()
 
+

Class Documentation

+ +

◆ seastar::reactor::io_stats

+ +
+
+ + + + +
struct seastar::reactor::io_stats
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class Members
+uint64_t +aio_errors +
+uint64_t +aio_outsizes +
+uint64_t +aio_read_bytes +
+uint64_t +aio_reads +
+uint64_t +aio_write_bytes +
+uint64_t +aio_writes +
+uint64_t +fstream_read_ahead_discarded_bytes +
+uint64_t +fstream_read_aheads_discarded +
+uint64_t +fstream_read_bytes +
+uint64_t +fstream_read_bytes_blocked +
+uint64_t +fstream_reads +
+uint64_t +fstream_reads_blocked +
+ +
+
+ +

◆ seastar::reactor::sched_stats

+ +
+
+ + + + +
struct seastar::reactor::sched_stats
+
+ + + + + +
Class Members
+uint64_t +tasks_processed +

Total number of tasks processed by this shard's reactor until this point. Note that tasks can be tiny, running for a few nanoseconds, or can take an entire task quota.

+
+ +
+
+

Member Function Documentation

+ +

◆ alien()

+ +
+
+ + + + + +
+ + + + + + + +
alien::instance & seastar::reactor::alien ()
+
+inline
+
+

Obtains an alien::instance object that can be used to send messages to Seastar shards from non-Seastar threads.

+ +
+
+ +

◆ get_sched_stats()

+ +
+
+ + + + + + + +
sched_stats seastar::reactor::get_sched_stats () const
+
+

Returns statistics related to scheduling. The statistics are local to this shard.

+

See sched_stats for a description of individual statistics.

Returns
An object containing a snapshot of the statistics at this point in time.
+ +
+
+ +

◆ set_idle_cpu_handler()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::reactor::set_idle_cpu_handler (idle_cpu_handler && handler)
+
+inline
+
+

Set a handler that will be called when there is no task to execute on cpu. Handler should do a low priority work.

+

Handler's return value determines whether handler did any actual work. If no work was done then reactor will go into sleep.

+

Handler's argument is a function that returns true if a task which should be executed on cpu appears or false otherwise. This function should be used by a handler to return early if a task appears.

+ +
+
+ +

◆ set_strict_dma()

+ +
+
+ + + + + + + + +
void seastar::reactor::set_strict_dma (bool value)
+
+

Sets the "Strict DMA" flag.

+

When true (default), file I/O operations must use DMA. This is the most performant option, but does not work on some file systems such as tmpfs or aufs (used in some Docker setups).

+

When false, file I/O operations can fall back to buffered I/O if DMA is not available. This can result in dramatic reducation in performance and an increase in memory consumption.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1reactor_1_1test-members.html b/master/classseastar_1_1reactor_1_1test-members.html new file mode 100644 index 000000000..a23e482da --- /dev/null +++ b/master/classseastar_1_1reactor_1_1test-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::reactor::test Member List
+
+
+ +

This is the complete list of members for seastar::reactor::test, including all inherited members.

+ + + + +
get_stall_detector_report_function() (defined in seastar::reactor::test)seastar::reactor::teststatic
set_stall_detector_report_function(std::function< void()> report)seastar::reactor::teststatic
with_allow_abandoned_failed_futures(unsigned count, noncopyable_function< void()> func) (defined in seastar::reactor::test)seastar::reactor::teststatic
+ + + + diff --git a/master/classseastar_1_1reactor_1_1test.html b/master/classseastar_1_1reactor_1_1test.html new file mode 100644 index 000000000..3f2440351 --- /dev/null +++ b/master/classseastar_1_1reactor_1_1test.html @@ -0,0 +1,125 @@ + + + + + + + +Seastar: seastar::reactor::test Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::reactor::test Class Reference
+
+
+ + + + + + + + +

+Static Public Member Functions

+static void with_allow_abandoned_failed_futures (unsigned count, noncopyable_function< void()> func)
 
static void set_stall_detector_report_function (std::function< void()> report)
 
+static std::function< void()> get_stall_detector_report_function ()
 
+

Member Function Documentation

+ +

◆ set_stall_detector_report_function()

+ +
+
+ + + + + +
+ + + + + + + + +
static void seastar::reactor::test::set_stall_detector_report_function (std::function< void()> report)
+
+static
+
+

Sets the stall reporting function which is called when a stall is detected (and not suppressed). Setting the function also resets the supression state.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1readable__eventfd-members.html b/master/classseastar_1_1readable__eventfd-members.html new file mode 100644 index 000000000..de3b83741 --- /dev/null +++ b/master/classseastar_1_1readable__eventfd-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::readable_eventfd Member List
+
+
+ +

This is the complete list of members for seastar::readable_eventfd, including all inherited members.

+ + + + + + +
get_write_fd() (defined in seastar::readable_eventfd)seastar::readable_eventfdinline
readable_eventfd(size_t initial=0) (defined in seastar::readable_eventfd)seastar::readable_eventfdinlineexplicit
readable_eventfd(readable_eventfd &&)=default (defined in seastar::readable_eventfd)seastar::readable_eventfd
wait() (defined in seastar::readable_eventfd)seastar::readable_eventfd
write_side() (defined in seastar::readable_eventfd)seastar::readable_eventfd
+ + + + diff --git a/master/classseastar_1_1readable__eventfd.html b/master/classseastar_1_1readable__eventfd.html new file mode 100644 index 000000000..36b93b807 --- /dev/null +++ b/master/classseastar_1_1readable__eventfd.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: seastar::readable_eventfd Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::readable_eventfd Class Reference
+
+
+ + + + + + + + + + + + +

+Public Member Functions

readable_eventfd (size_t initial=0)
 
readable_eventfd (readable_eventfd &&)=default
 
+writeable_eventfd write_side ()
 
+future< size_t > wait ()
 
+int get_write_fd ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1reference__wrapper-members.html b/master/classseastar_1_1reference__wrapper-members.html new file mode 100644 index 000000000..03a2b8925 --- /dev/null +++ b/master/classseastar_1_1reference__wrapper-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::reference_wrapper< T > Member List
+
+
+ +

This is the complete list of members for seastar::reference_wrapper< T >, including all inherited members.

+ + + + + + +
cref (defined in seastar::reference_wrapper< T >)seastar::reference_wrapper< T >friend
get() const noexcept (defined in seastar::reference_wrapper< T >)seastar::reference_wrapper< T >inline
operator T&() const noexcept (defined in seastar::reference_wrapper< T >)seastar::reference_wrapper< T >inline
ref (defined in seastar::reference_wrapper< T >)seastar::reference_wrapper< T >friend
type typedef (defined in seastar::reference_wrapper< T >)seastar::reference_wrapper< T >
+ + + + diff --git a/master/classseastar_1_1reference__wrapper.html b/master/classseastar_1_1reference__wrapper.html new file mode 100644 index 000000000..41eb8f54a --- /dev/null +++ b/master/classseastar_1_1reference__wrapper.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: seastar::reference_wrapper< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::reference_wrapper< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename T>
+class seastar::reference_wrapper< T >

Wrapper for lvalue references

+

reference_wrapper wraps a lvalue reference into a copyable and assignable object. It is very similar to std::reference_wrapper except that it doesn't allow implicit construction from a reference and the only way to construct it is to use either ref() or cref(). The reason for that discrepancy (and also the reason why seastar::reference_wrapper was introduced) is that it server different purpose than std::reference_wrapper. The latter protects references from decaying and allows copying and assigning them. seastar::reference_wrapper is used mainly to force user to explicitly state that object is passed by reference thus reducing the chances that the referred object being prematurely destroyed in case the execution is deferred to a continuation.

+
+

#include <seastar/util/reference_wrapper.hh>

+ + + + +

+Public Types

+using type = T
 
+ + + + + +

+Public Member Functions

operator T& () const noexcept
 
+T & get () const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1canceled__error-members.html b/master/classseastar_1_1rpc_1_1canceled__error-members.html new file mode 100644 index 000000000..445ef2548 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1canceled__error-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::canceled_error Member List
+
+
+ +

This is the complete list of members for seastar::rpc::canceled_error, including all inherited members.

+ + + +
canceled_error() (defined in seastar::rpc::canceled_error)seastar::rpc::canceled_errorinline
error(const std::string &msg) (defined in seastar::rpc::error)seastar::rpc::errorinline
+ + + + diff --git a/master/classseastar_1_1rpc_1_1canceled__error.html b/master/classseastar_1_1rpc_1_1canceled__error.html new file mode 100644 index 000000000..c871ed7da --- /dev/null +++ b/master/classseastar_1_1rpc_1_1canceled__error.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: seastar::rpc::canceled_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::canceled_error Class Reference
+
+
+
+Inheritance diagram for seastar::rpc::canceled_error:
+
+
+ + +seastar::rpc::error + +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1canceled__error.png b/master/classseastar_1_1rpc_1_1canceled__error.png new file mode 100644 index 0000000000000000000000000000000000000000..7540613a7405063de5d6b351cf4f2ed9c5c085e1 GIT binary patch literal 1149 zcmeAS@N?(olHy`uVBq!ia0vp^Yk>Fw2Q!ddceCO&kdg@S332`Z|38rV;?396{zDUh zEHFNB-~emq9eE&^qa?^Lm;tB=1g@S6F=Aj~;qi2F45?szJNMzV)ml7m<(Ibp+WTKx zer;$|nbkJqmpkXomfYsRa!2XH{uwiSnbbU!12#>X;&{?4h%Nv0z1@2+RA>D<-1&3O z8kN5d6YCG5g)-?Qd6^`}}Td!IZiGziskD5y|q=Y?Dgn#aBC>^yJ>K02*@~nZjnuEeK|ZX75kl< zb>&i6RCn!{e{Qo2YPMg~{T9nK>C2qYn{plPDyo1X@v^Y^t3B8 z>u&Vb9Z*gs;pRRp+8N{4*uDEVFf4Xgv#Gv*H}9Z->e;)0ga34I zDx171woHHB*EBov<^OL~$u2jI)ob7P?p=I=-#4=_xqI|pAL_2rcxU}~);iv(19$&w zE>FE4xVSdFzj(9dn`@pOyJvsjvD^On)Kr7oO}h7!7S=hLnfXrcJ)hhBe&5@jGw*)V zxmlcDrhfbW-!DcT%MaGF=ei$y7+bdd;I_|Z=YOlR+_^h{(s%A@1x(Z5RBU?pZokjT zUAxl*fGnW@r=Nam#KFKB!|0Z%a`Sbm!tIGE>emZ%+9$2O%%IRtgwJ8&a^{R1BeMi7 ztSl6Nzs|qR|Krey=2L#lZxp>MySaDAwc8hp3xD;m-Cn#qb+=fyf!zbg>z3PMejU&2 z&Hp~VFzH&W_|Jele9EiA57jmyVdQx;%~LuZudB`HS@VYf5$;Xx{P*uy|JXW9IKlc}#AfT8 z|K5pDTfhG1mdKI;Vst0I`@XrT_o{ literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1client-members.html b/master/classseastar_1_1rpc_1_1client-members.html new file mode 100644 index 000000000..04420889a --- /dev/null +++ b/master/classseastar_1_1rpc_1_1client-members.html @@ -0,0 +1,158 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::client Member List
+
+
+ +

This is the complete list of members for seastar::rpc::client, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_compressor (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_connected (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_error (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_fd (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_handler_duration_negotiated (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_id (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_is_stream (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_logger (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_negotiated (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_outgoing_queue (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_outgoing_queue_ready (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_outgoing_queue_size (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_propagate_timeout (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_read_buf (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_serializer (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_sink_closed (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_sink_closed_future (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_source_closed (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stats (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stopped (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stream_queue (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stream_sem (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_streams (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_timeout_negotiated (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_write_buf (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
abort() (defined in seastar::rpc::connection)seastar::rpc::connection
abort_all_streams() (defined in seastar::rpc::client)seastar::rpc::client
await_connection() (defined in seastar::rpc::client)seastar::rpc::clientinline
client(const logger &l, void *s, const socket_address &addr, const socket_address &local={})seastar::rpc::client
client(const logger &l, void *s, client_options options, const socket_address &addr, const socket_address &local={}) (defined in seastar::rpc::client)seastar::rpc::client
client(const logger &l, void *s, socket socket, const socket_address &addr, const socket_address &local={})seastar::rpc::client
client(const logger &l, void *s, client_options options, socket socket, const socket_address &addr, const socket_address &local={}) (defined in seastar::rpc::client)seastar::rpc::client
close_sink() (defined in seastar::rpc::connection)seastar::rpc::connectioninline
close_source() (defined in seastar::rpc::connection)seastar::rpc::connectioninline
compress(snd_buf buf) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
connection(connected_socket &&fd, const logger &l, void *s, connection_id id=invalid_connection_id) (defined in seastar::rpc::connection)seastar::rpc::connectioninline
connection(const logger &l, void *s, connection_id id=invalid_connection_id) (defined in seastar::rpc::connection)seastar::rpc::connectioninline
deregister_this_stream() (defined in seastar::rpc::client)seastar::rpc::client
error() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
get_connection_id() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
get_logger() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
get_stats() const (defined in seastar::rpc::client)seastar::rpc::client
get_stats_internal() noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
get_stream(connection_id id) const (defined in seastar::rpc::connection)seastar::rpc::connection
handle_stream_frame() (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
incoming_queue_length() const noexcept (defined in seastar::rpc::client)seastar::rpc::clientinline
is_stream() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninlineprotected
make_stream_sink(socket socket) (defined in seastar::rpc::client)seastar::rpc::clientinline
make_stream_sink() (defined in seastar::rpc::client)seastar::rpc::clientinline
next_message_id() (defined in seastar::rpc::client)seastar::rpc::clientinline
outgoing_queue_length() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
peer_address() const override (defined in seastar::rpc::client)seastar::rpc::clientinlinevirtual
read_frame(socket_address info, input_stream< char > &in) (defined in seastar::rpc::connection)seastar::rpc::connection
read_frame_compressed(socket_address info, std::unique_ptr< compressor > &compressor, input_stream< char > &in) (defined in seastar::rpc::connection)seastar::rpc::connection
read_stream_frame_compressed(input_stream< char > &in) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
register_stream(connection_id id, xshard_connection_ptr c) (defined in seastar::rpc::connection)seastar::rpc::connection
request(uint64_t type, int64_t id, snd_buf buf, std::optional< rpc_clock_type::time_point > timeout={}, cancellable *cancel=nullptr) (defined in seastar::rpc::client)seastar::rpc::client
send(snd_buf buf, std::optional< rpc_clock_type::time_point > timeout={}, cancellable *cancel=nullptr) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
send_buffer(snd_buf buf) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
send_entry(outgoing_entry &d) noexcept (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
send_negotiation_frame(feature_map features) (defined in seastar::rpc::connection)seastar::rpc::connection
serializer() (defined in seastar::rpc::connection)seastar::rpc::connectioninline
set_negotiated() noexcept (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
set_socket(connected_socket &&fd) (defined in seastar::rpc::connection)seastar::rpc::connection
sink_closed() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
stop() noexcept (defined in seastar::rpc::client)seastar::rpc::client
stop_send_loop(std::exception_ptr ex) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
stream_check_twoway_closed() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninlineprotected
stream_close() (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
stream_process_incoming(rcv_buf &&) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
stream_receive(circular_buffer< foreign_ptr< std::unique_ptr< rcv_buf > > > &bufs) (defined in seastar::rpc::connection)seastar::rpc::connection
suspend_for_testing(promise<> &p) (defined in seastar::rpc::connection)seastar::rpc::connectioninline
wait_for_reply(id_type id, std::unique_ptr< reply_handler_base > &&h, std::optional< rpc_clock_type::time_point > timeout, cancellable *cancel) (defined in seastar::rpc::client)seastar::rpc::client
wait_timed_out(id_type id) (defined in seastar::rpc::client)seastar::rpc::client
withdraw(outgoing_entry::container_t::iterator it, std::exception_ptr ex=nullptr) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
~connection() (defined in seastar::rpc::connection)seastar::rpc::connectioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1rpc_1_1client.html b/master/classseastar_1_1rpc_1_1client.html new file mode 100644 index 000000000..c0ebee394 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1client.html @@ -0,0 +1,477 @@ + + + + + + + +Seastar: seastar::rpc::client Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+
+Inheritance diagram for seastar::rpc::client:
+
+
+ + +seastar::rpc::connection +seastar::weakly_referencable< client > +seastar::rpc::protocol< Serializer, MsgType >::client + +
+ + + + +

+Classes

struct  reply_handler
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 client (const logger &l, void *s, const socket_address &addr, const socket_address &local={})
 
client (const logger &l, void *s, client_options options, const socket_address &addr, const socket_address &local={})
 
 client (const logger &l, void *s, socket socket, const socket_address &addr, const socket_address &local={})
 
client (const logger &l, void *s, client_options options, socket socket, const socket_address &addr, const socket_address &local={})
 
+stats get_stats () const
 
+size_t incoming_queue_length () const noexcept
 
+auto next_message_id ()
 
+void wait_for_reply (id_type id, std::unique_ptr< reply_handler_base > &&h, std::optional< rpc_clock_type::time_point > timeout, cancellable *cancel)
 
+void wait_timed_out (id_type id)
 
+future stop () noexcept
 
+void abort_all_streams ()
 
+void deregister_this_stream ()
 
socket_address peer_address () const override
 
+future await_connection ()
 
+template<typename Serializer , typename... Out>
future< sink< Out... > > make_stream_sink (socket socket)
 
+template<typename Serializer , typename... Out>
future< sink< Out... > > make_stream_sink ()
 
+future request (uint64_t type, int64_t id, snd_buf buf, std::optional< rpc_clock_type::time_point > timeout={}, cancellable *cancel=nullptr)
 
+size_t outgoing_queue_length () const noexcept
 
+void set_socket (connected_socket &&fd)
 
+future send_negotiation_frame (feature_map features)
 
+bool error () const noexcept
 
+void abort ()
 
+future stream_receive (circular_buffer< foreign_ptr< std::unique_ptr< rcv_buf > > > &bufs)
 
+future close_sink ()
 
+bool sink_closed () const noexcept
 
+future close_source ()
 
+connection_id get_connection_id () const noexcept
 
+statsget_stats_internal () noexcept
 
+xshard_connection_ptr get_stream (connection_id id) const
 
+void register_stream (connection_id id, xshard_connection_ptr c)
 
+const loggerget_logger () const noexcept
 
+template<typename Serializer >
Serializer & serializer ()
 
+template<typename FrameType >
future< typename FrameType::return_type > read_frame (socket_address info, input_stream< char > &in)
 
+template<typename FrameType >
future< typename FrameType::return_type > read_frame_compressed (socket_address info, std::unique_ptr< compressor > &compressor, input_stream< char > &in)
 
+void suspend_for_testing (promise<> &p)
 
+weak_ptr< clientweak_from_this () noexcept
 
+weak_ptr< const clientweak_from_this () const noexcept
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

+void withdraw (outgoing_entry::container_t::iterator it, std::exception_ptr ex=nullptr)
 
+void set_negotiated () noexcept
 
+bool is_stream () const noexcept
 
+snd_buf compress (snd_buf buf)
 
+future send_buffer (snd_buf buf)
 
+future send (snd_buf buf, std::optional< rpc_clock_type::time_point > timeout={}, cancellable *cancel=nullptr)
 
+future send_entry (outgoing_entry &d) noexcept
 
+future stop_send_loop (std::exception_ptr ex)
 
+future< std::optional< rcv_buf > > read_stream_frame_compressed (input_stream< char > &in)
 
+bool stream_check_twoway_closed () const noexcept
 
+future stream_close ()
 
+future stream_process_incoming (rcv_buf &&)
 
+future handle_stream_frame ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

+connected_socket _fd
 
+input_stream< char > _read_buf
 
+output_stream< char > _write_buf
 
+bool _error = false
 
+bool _connected = false
 
+std::optional< shared_promise<> > _negotiated = shared_promise<>()
 
+promise _stopped
 
+stats _stats
 
+const logger_logger
 
+void * _serializer
 
+future _outgoing_queue_ready = _negotiated->get_shared_future()
 
+outgoing_entry::container_t _outgoing_queue
 
+size_t _outgoing_queue_size = 0
 
+std::unique_ptr< compressor_compressor
 
+bool _propagate_timeout = false
 
+bool _timeout_negotiated = false
 
+bool _handler_duration_negotiated = false
 
+bool _is_stream = false
 
+connection_id _id = invalid_connection_id
 
+std::unordered_map< connection_id, xshard_connection_ptr_streams
 
+queue< rcv_buf_stream_queue = queue<rcv_buf>(max_queued_stream_buffers)
 
+semaphore _stream_sem = semaphore(max_stream_buffers_memory)
 
+bool _sink_closed = true
 
+bool _source_closed = true
 
+future< bool > _sink_closed_future = make_ready_future<bool>(false)
 
+

Constructor & Destructor Documentation

+ +

◆ client() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
seastar::rpc::client::client (const loggerl,
void * s,
const socket_addressaddr,
const socket_addresslocal = {} 
)
+
+

Create client object which will attempt to connect to the remote address.

+
Parameters
+ + + + + +
lseastar::logger to use for logging error messages
san optional connection serializer
addrthe remote address identifying this client
localthe local address of this client
+
+
+ +
+
+ +

◆ client() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
seastar::rpc::client::client (const loggerl,
void * s,
socket socket,
const socket_addressaddr,
const socket_addresslocal = {} 
)
+
+

Create client object which will attempt to connect to the remote address using the specified seastar::socket.

+
Parameters
+ + + + + + +
lseastar::logger to use for logging error messages
san optional connection serializer
addrthe remote address identifying this client
localthe local address of this client
socketthe socket object use to connect to the remote address
+
+
+ +
+
+

Member Function Documentation

+ +

◆ peer_address()

+ +
+
+ + + + + +
+ + + + + + + +
socket_address seastar::rpc::client::peer_address () const
+
+inlineoverridevirtual
+
+ +

Implements seastar::rpc::connection.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1client.png b/master/classseastar_1_1rpc_1_1client.png new file mode 100644 index 0000000000000000000000000000000000000000..3e2f278eb3bf3d09820a8aa87f85ec3a1d413826 GIT binary patch literal 2074 zcmbVNdoY{n9!}eX9(CF2p;*P7-O!?>)P|zz*fv&Ng3y#w+HO>lxD~6eoo3l~sdPhR zS7a&5vc)7calcf%Hk^bsD@3Fy;?jOnf;2*NKHZr;=Z`ZxJLj8uzwde9_xF3}H_!9D zzwcfE`U_p{kF_BXh%UUj|cJHg9pGjVc!=G;Kw+?HyEi_t3kN*W;2!a^Z|%I zjK01;jeAoT;PhY$1|0+egZ7@Wps{5flV6a7pCILb`WczG#j@+wUDvRrK~BI8_O_G0BMkEBRuX7BXb(*(d=R=2NecTSuu&M>cQ|0<3V zlWws-^3~5rQ0v^3p)?y3>EgQytWef_6d{*_chC3;q55OHZMCXz?Q6JcFGlIg*(hEv6Ej+s8glOUd}ZS7QpT^W75}@gqzDY*ZsLuJ?f6Wc!9W3o~{ZlcgtJ*r?A^F<31hWtg71a z`jk1@=FRAhi+0tE^7N|bH${3BKFi4+`??cR@vNizI(dh}h}y_j(fw~4zB{g^r~qs# zSOUyptO9F>otETm5eA^j_#TYsh?D{FZ)~-xogbyIZakPuYhz7Xg_^kyk9w6sqfJ6Q zi{}l9Z@kC}HJyc49L1X3Q|}i?_r#z53`bMcDSDww!w)7XJb zOO6R>kL4=RC#S%m7f8@2(V#tQ3P7Lm0+^O4qXed(z{ybH-8&{WemYSD?QxfyNbvl0fBhkdh;lC5xBAUlvWpqc39MIS~^jq@h z`v$Byq;RQ^%J$2Zl z^0quUJ+XY~kZb+h85fFC3TC!H2`s(lDRC}1Vic99HCW$OS*&*LYFg|~%~(>LgJGB+ z$9gZoLjsxoaq^(Jjm6Vc?($YrPlT2H{Tk3qI75=>B#A}Rg6lfQ-W*N(&ctEvoz}WB zKtH;SBu0Y}P!y8Re$ zvFi@f7alr-CJ03qFR=hfY`Mr zwqV$=DeeiabSW$iwp!gE;tgM#PaVkQ{y@QxqBxp^Ac@6f-6D{wV}|BO>(=j}ZQNbZ z3mWwQ$;Nzgd-%7*3(2Ps8oZSy=Iz%u2G7talxEn8D{uGjX>sFaxGjhodssi9;m`U1 zi!%LRVKWwAmenpBwxb13-Jb;X-Kzb)HJYYiK|Q9q2=C3_&iX{oreS47L=g>I!BDh{?}Gx}G7-HGM`TY#MkoCvcJSvS zqlwoTX8-v2QL2zfVyncn5(IC2*rqEtOO+5dqM+9LOapDQx-+6lPxhe1G*_o(Dz>hr z6hNquGb&?J5Sn=u5Ud(;O~I;${aE5_aF1hDXmb__V((v0{jIA)&ke%@)scc&)2&^~cI~ + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::client_function_type< Ret, In > Member List
+
+
+ +

This is the complete list of members for seastar::rpc::client_function_type< Ret, In >, including all inherited members.

+ + +
type typedef (defined in seastar::rpc::client_function_type< Ret, In >)seastar::rpc::client_function_type< Ret, In >
+ + + + diff --git a/master/classseastar_1_1rpc_1_1client__function__type.html b/master/classseastar_1_1rpc_1_1client__function__type.html new file mode 100644 index 000000000..e541fffb9 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1client__function__type.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: seastar::rpc::client_function_type< Ret, In > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::client_function_type< Ret, In > Class Template Reference
+
+
+ + + + +

+Public Types

+using type = return_type(typename remove_optional< In >::type...)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1closed__error-members.html b/master/classseastar_1_1rpc_1_1closed__error-members.html new file mode 100644 index 000000000..1eaf71c0c --- /dev/null +++ b/master/classseastar_1_1rpc_1_1closed__error-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::closed_error Member List
+
+
+ +

This is the complete list of members for seastar::rpc::closed_error, including all inherited members.

+ + + +
closed_error() (defined in seastar::rpc::closed_error)seastar::rpc::closed_errorinline
error(const std::string &msg) (defined in seastar::rpc::error)seastar::rpc::errorinline
+ + + + diff --git a/master/classseastar_1_1rpc_1_1closed__error.html b/master/classseastar_1_1rpc_1_1closed__error.html new file mode 100644 index 000000000..e855c1267 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1closed__error.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: seastar::rpc::closed_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::closed_error Class Reference
+
+
+
+Inheritance diagram for seastar::rpc::closed_error:
+
+
+ + +seastar::rpc::error + +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1closed__error.png b/master/classseastar_1_1rpc_1_1closed__error.png new file mode 100644 index 0000000000000000000000000000000000000000..fc084cf08d64ce67898a5de36c3103009585d101 GIT binary patch literal 1127 zcmeAS@N?(olHy`uVBq!ia0vp^bAk8(2Q!e=d@=DXkdg@S332`Z|38rV;?396{zDUh zEHFNB-~emq9eE&^qa?^Lm;tB=1g@S6F=Aj~{^sf87*fIbcJAx4W(yuR_fwWX@BQzc z-qM}wB)v#2_I;Qx^R|so54t_kPfI)8BeyVC_m9FpisEo-=jQ1p@2U#b%E-O3I?fH=-cT!2y^*6gt zM!();@^@RkzMiLgMQOVH+r0Yf-8z|HO=*Wd*kh!NuuiacJse~ zGi~$h82_TOvmds;Ew7IFPf1TR(_+Yf!eyZ2 zd^>i%@@w8)^OL-5%(ulp)p3}%iTOle8H431J_Yxij88PI8)Q=1CoF!$P&7r>p${Q> z{Qf3mV`(v;No-4jX1d?>4C*T`^Pc~Hm*4k$|L431TKN6bm2-LBM)R8vuB};pH$3O9 zQMlN}-!lYK^KxpPnpI>!pECwrgn!RQHnxFHmC*S&*ARcdj^4H_c&cl`F}35Vz8CPzn3>icXzWVs``)YS{YctBt-xrqKKf7|yZ}*1S?b`zE6UBG$JFn+=WzpMh zukYN-y}teC-0JsbWqb2jGbWc*O|wlim$Bf-_IHAqoY@-zu9%bdbh;4>fIKBuQ%Sl*>kt>!3_EHZ_n*5 zx8D8lT^@IQ#e2VZz)&&0G;1^er`>bzUQ(U7`L?FXpD)`VJ+?Ony3SVmk-5-=j{hHT mG1kCbpC=z;yxH+5`=9sMC(PoVJ0DmoFnGH9xvX + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::compressor Member List
+
+
+ +

This is the complete list of members for seastar::rpc::compressor, including all inherited members.

+ + + + + + +
close() noexcept (defined in seastar::rpc::compressor)seastar::rpc::compressorinlinevirtual
compress(size_t head_space, snd_buf data)=0 (defined in seastar::rpc::compressor)seastar::rpc::compressorpure virtual
decompress(rcv_buf data)=0 (defined in seastar::rpc::compressor)seastar::rpc::compressorpure virtual
name() const =0 (defined in seastar::rpc::compressor)seastar::rpc::compressorpure virtual
~compressor() (defined in seastar::rpc::compressor)seastar::rpc::compressorinlinevirtual
+ + + + diff --git a/master/classseastar_1_1rpc_1_1compressor.html b/master/classseastar_1_1rpc_1_1compressor.html new file mode 100644 index 000000000..a6c3e1963 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1compressor.html @@ -0,0 +1,117 @@ + + + + + + + +Seastar: seastar::rpc::compressor Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::compressor Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::rpc::compressor:
+
+
+ + +seastar::rpc::lz4_compressor +seastar::rpc::lz4_fragmented_compressor + +
+ + + + +

+Classes

class  factory
 
+ + + + + + + + + +

+Public Member Functions

+virtual snd_buf compress (size_t head_space, snd_buf data)=0
 
+virtual rcv_buf decompress (rcv_buf data)=0
 
+virtual sstring name () const =0
 
+virtual future close () noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1compressor.png b/master/classseastar_1_1rpc_1_1compressor.png new file mode 100644 index 0000000000000000000000000000000000000000..e9ecbb711233df6b1872881f2bb80019f96d89fd GIT binary patch literal 1066 zcmeAS@N?(olHy`uVBq!ia0y~yVEh1N2XHV0$%~TL`+$^0fKQ0)|NsAi%olIImi8Z- z0AzvjfddCvJMYK?xf~@ye!&btMIdnXREQA+1M^N#7srqa#;C_V z{)>dzeEe9Q^`eb;mnojeT{iU(>klQ(rB8Sm_W$6vZ(+7jLd9nu@uwKKFrNVm|1o-g z$p7_*E26)1S6<(_e*5(L+q=&s-@3;5+js84Gxye4=Y3X`N$BxC^X!<2@8@q!Gj7*i zC~ONYc^l>J@wT*@$H0SwT_RaJL@0jk&0TYUE?W`3{%x(vE&lB5wwZb@%siW94_@ED zchA8LP z+D_&T%0QX`KHwfXE%hUJgK_tz-%xxYKFy91-}hR&`0=RdF95&U=UM2^GumDgW< z6UgqbJE^ux^QWZXzO@^4le(5w-rl_PE&Ei7(`mQMZBA0^VzBqH|j~HJgH^R(mi(cZtyFL z`F?ZDl)t=t58gGmbpOGw^!k{}$+-3t{m)O$`E%w!@B2gf^UHSboqqK3YkgHypj2?* zmvZ-O@9jOmRh2BU|Ho@TbN)x=zrTJ>Tl6L)wq*Tx{b{mSWRhy5-W&;9b^YF*63aaI zN%J0GocM3siCcg3gSWfAc^N(JPT2O#XHJ}dFj3FbnWtjH66-y7%}bu`s$SxKNkIQy zc2q>O@ZW|HZ`t1`9=F%|6PS{0?^ygU{&S;W^4veS3j3^P6 + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::compressor::factory Member List
+
+
+ +

This is the complete list of members for seastar::rpc::compressor::factory, including all inherited members.

+ + + + + +
negotiate(sstring feature, bool is_server, std::function< future<>()> send_empty_frame) const (defined in seastar::rpc::compressor::factory)seastar::rpc::compressor::factoryinlinevirtual
negotiate(sstring feature, bool is_server) const =0 (defined in seastar::rpc::compressor::factory)seastar::rpc::compressor::factorypure virtual
supported() const =0 (defined in seastar::rpc::compressor::factory)seastar::rpc::compressor::factorypure virtual
~factory() (defined in seastar::rpc::compressor::factory)seastar::rpc::compressor::factoryinlinevirtual
+ + + + diff --git a/master/classseastar_1_1rpc_1_1compressor_1_1factory.html b/master/classseastar_1_1rpc_1_1compressor_1_1factory.html new file mode 100644 index 000000000..8b63abda7 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1compressor_1_1factory.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: seastar::rpc::compressor::factory Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::compressor::factory Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::rpc::compressor::factory:
+
+
+ + +seastar::rpc::lz4_compressor::factory +seastar::rpc::lz4_fragmented_compressor::factory +seastar::rpc::multi_algo_compressor_factory + +
+ + + + + + + + +

+Public Member Functions

+virtual const sstring & supported () const =0
 
+virtual std::unique_ptr< compressornegotiate (sstring feature, bool is_server, std::function< future<>()> send_empty_frame) const
 
+virtual std::unique_ptr< compressornegotiate (sstring feature, bool is_server) const =0
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1compressor_1_1factory.png b/master/classseastar_1_1rpc_1_1compressor_1_1factory.png new file mode 100644 index 0000000000000000000000000000000000000000..c3132b17ab736a219975cfc6dfea6e371528c08f GIT binary patch literal 1813 zcmb_deN<9u9!3py?8BMT(NT+?S^P+=nM`F$)Y{SNCL$`OIg++bnc+tx0wy0eb<$%W zL!mQfNI01hP9v_6r=Nexj^*^BKz``4a5XYV=py}$Q9zvuTp zzxTb*xfM9bhK6Wd{_LB)u$%HnT2d)E)&wLm<;^Owaav~({&f;zdS~3IP zRfP!3N^BHn)l56VCjqnPmK0{)*{FYtg-k($#3+)e>kD1rld96ssI2-!VBOgm6_G(c zlKDUdPERc?9kE)6`VDUs%0gRMeq4m3HZw^=5v1g0pC2O-9Twj=loj9tYa=DG=l`-3Q05&C^IP%|oxs zNNFA#l=hf4(q+2m^Zg_1pccF&Q|(vjOOnX~rL)1J(l;+;T~_M2pJ)7Cf61ZoeVxoJ z>5H-t6BZaebAHS3-8`Ru-jTk8P!IBsct-d|W%{Wyu{V#q3Y*=mZaNg=gegRk4nx)F zHnjJp8dP)3wpPjQ5x<%)i?L-#yRl?&>iHAOPPEVPx4NXqpvJrVmj%rKySN@RZqocJUnh3x@^#tROx z1A?hQ%ii!5HncSRc10(FeJ@E}g-obwMCRNotVR;?JN$tS4Z*;TyE=cBPcH^|7Hg-? zstDCc^%~(zN;VtK=X}f{Ufrs`&nhpU4^*umBF5B_&a3-LmY3~vFuDM6)&`b@sIq8M z4Ra@zlfDJ;Dc&+~A)(&AEh&z9dg|-k<$RF+&0{6WvX`INsTW87+c?p)7Nt-=(2GhK zGo8Q0zfg)LMC(?&J9DvP=@W(4SHndmV~xPGN0=Rq9>v?Kf`-zJ4DD;m-->>})}7fr zA4Zi_NTSsKMTTs|%_a0qSH5j8?PpEvFes~KQR)@hSI)CEoP5)ra$SO(?W8DGWU7Rm z_S?p#Kdi2n{vdHeV|WzgaKQM{fFT?rf95bq*?>B@{qXc1uSDjQrT6k`>9ZVP63RPQ zBs0jLtjd`j?n`qI{4H*jIX9IsWW1br`9vGeAMm-Z)+?hhn{LIIX(vCAA`ajrmv+XZUtWerDnEcdhb`zVw3EZ6o}&-tB%xU%adDo4If);>9skKgOl_Iy$ym z*H*5mcaop9i}7f?Dbdn1y9t+WPQ8K=Dgs}osw26rIZ{c}gEqaHzg#mt zVhuAZIL=RsbFK~CcfL>w$_VRN+s@Q>&zVa(`qL$f{#16@b`6GS{(|{}WSkO~{_^eX zA33a}HA8vP1QW%B8b7i%tTH>kTL`#FBa`>7h1gW}?B2^=O z&&+J5RK88(SnnPPef~YMF7fVsm)Oc2V;S}Vpw^`*H~35%_#-;Qun0`o8t%_)#Wect zHHp3ly}2iOCNsm-dT?>c-1H_8%O0cmj3P2j5u(U + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::connection Member List
+
+
+ +

This is the complete list of members for seastar::rpc::connection, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_compressor (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_connected (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_error (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_fd (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_handler_duration_negotiated (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_id (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_is_stream (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_logger (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_negotiated (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_outgoing_queue (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_outgoing_queue_ready (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_outgoing_queue_size (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_propagate_timeout (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_read_buf (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_serializer (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_sink_closed (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_sink_closed_future (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_source_closed (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stats (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stopped (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stream_queue (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stream_sem (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_streams (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_timeout_negotiated (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_write_buf (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
abort() (defined in seastar::rpc::connection)seastar::rpc::connection
close_sink() (defined in seastar::rpc::connection)seastar::rpc::connectioninline
close_source() (defined in seastar::rpc::connection)seastar::rpc::connectioninline
compress(snd_buf buf) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
connection(connected_socket &&fd, const logger &l, void *s, connection_id id=invalid_connection_id) (defined in seastar::rpc::connection)seastar::rpc::connectioninline
connection(const logger &l, void *s, connection_id id=invalid_connection_id) (defined in seastar::rpc::connection)seastar::rpc::connectioninline
error() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
get_connection_id() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
get_logger() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
get_stats_internal() noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
get_stream(connection_id id) const (defined in seastar::rpc::connection)seastar::rpc::connection
handle_stream_frame() (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
is_stream() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninlineprotected
outgoing_queue_length() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
peer_address() const =0 (defined in seastar::rpc::connection)seastar::rpc::connectionpure virtual
read_frame(socket_address info, input_stream< char > &in) (defined in seastar::rpc::connection)seastar::rpc::connection
read_frame_compressed(socket_address info, std::unique_ptr< compressor > &compressor, input_stream< char > &in) (defined in seastar::rpc::connection)seastar::rpc::connection
read_stream_frame_compressed(input_stream< char > &in) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
register_stream(connection_id id, xshard_connection_ptr c) (defined in seastar::rpc::connection)seastar::rpc::connection
send(snd_buf buf, std::optional< rpc_clock_type::time_point > timeout={}, cancellable *cancel=nullptr) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
send_buffer(snd_buf buf) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
send_entry(outgoing_entry &d) noexcept (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
send_negotiation_frame(feature_map features) (defined in seastar::rpc::connection)seastar::rpc::connection
serializer() (defined in seastar::rpc::connection)seastar::rpc::connectioninline
set_negotiated() noexcept (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
set_socket(connected_socket &&fd) (defined in seastar::rpc::connection)seastar::rpc::connection
sink_closed() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
stop() noexcept (defined in seastar::rpc::connection)seastar::rpc::connection
stop_send_loop(std::exception_ptr ex) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
stream_check_twoway_closed() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninlineprotected
stream_close() (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
stream_process_incoming(rcv_buf &&) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
stream_receive(circular_buffer< foreign_ptr< std::unique_ptr< rcv_buf > > > &bufs) (defined in seastar::rpc::connection)seastar::rpc::connection
suspend_for_testing(promise<> &p) (defined in seastar::rpc::connection)seastar::rpc::connectioninline
withdraw(outgoing_entry::container_t::iterator it, std::exception_ptr ex=nullptr) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
~connection() (defined in seastar::rpc::connection)seastar::rpc::connectioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1rpc_1_1connection.html b/master/classseastar_1_1rpc_1_1connection.html new file mode 100644 index 000000000..2a3c37b48 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1connection.html @@ -0,0 +1,297 @@ + + + + + + + +Seastar: seastar::rpc::connection Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::connection Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::rpc::connection:
+
+
+ + +seastar::rpc::client +seastar::rpc::server::connection +seastar::rpc::protocol< Serializer, MsgType >::client + +
+ + + + +

+Classes

struct  outgoing_entry
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

connection (connected_socket &&fd, const logger &l, void *s, connection_id id=invalid_connection_id)
 
connection (const logger &l, void *s, connection_id id=invalid_connection_id)
 
+size_t outgoing_queue_length () const noexcept
 
+void set_socket (connected_socket &&fd)
 
+future send_negotiation_frame (feature_map features)
 
+bool error () const noexcept
 
+void abort ()
 
+future stop () noexcept
 
+future stream_receive (circular_buffer< foreign_ptr< std::unique_ptr< rcv_buf > > > &bufs)
 
+future close_sink ()
 
+bool sink_closed () const noexcept
 
+future close_source ()
 
+connection_id get_connection_id () const noexcept
 
+statsget_stats_internal () noexcept
 
+xshard_connection_ptr get_stream (connection_id id) const
 
+void register_stream (connection_id id, xshard_connection_ptr c)
 
+virtual socket_address peer_address () const =0
 
+const loggerget_logger () const noexcept
 
+template<typename Serializer >
Serializer & serializer ()
 
+template<typename FrameType >
future< typename FrameType::return_type > read_frame (socket_address info, input_stream< char > &in)
 
+template<typename FrameType >
future< typename FrameType::return_type > read_frame_compressed (socket_address info, std::unique_ptr< compressor > &compressor, input_stream< char > &in)
 
+void suspend_for_testing (promise<> &p)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

+void withdraw (outgoing_entry::container_t::iterator it, std::exception_ptr ex=nullptr)
 
+void set_negotiated () noexcept
 
+bool is_stream () const noexcept
 
+snd_buf compress (snd_buf buf)
 
+future send_buffer (snd_buf buf)
 
+future send (snd_buf buf, std::optional< rpc_clock_type::time_point > timeout={}, cancellable *cancel=nullptr)
 
+future send_entry (outgoing_entry &d) noexcept
 
+future stop_send_loop (std::exception_ptr ex)
 
+future< std::optional< rcv_buf > > read_stream_frame_compressed (input_stream< char > &in)
 
+bool stream_check_twoway_closed () const noexcept
 
+future stream_close ()
 
+future stream_process_incoming (rcv_buf &&)
 
+future handle_stream_frame ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

+connected_socket _fd
 
+input_stream< char > _read_buf
 
+output_stream< char > _write_buf
 
+bool _error = false
 
+bool _connected = false
 
+std::optional< shared_promise<> > _negotiated = shared_promise<>()
 
+promise _stopped
 
+stats _stats
 
+const logger_logger
 
+void * _serializer
 
+future _outgoing_queue_ready = _negotiated->get_shared_future()
 
+outgoing_entry::container_t _outgoing_queue
 
+size_t _outgoing_queue_size = 0
 
+std::unique_ptr< compressor_compressor
 
+bool _propagate_timeout = false
 
+bool _timeout_negotiated = false
 
+bool _handler_duration_negotiated = false
 
+bool _is_stream = false
 
+connection_id _id = invalid_connection_id
 
+std::unordered_map< connection_id, xshard_connection_ptr_streams
 
+queue< rcv_buf_stream_queue = queue<rcv_buf>(max_queued_stream_buffers)
 
+semaphore _stream_sem = semaphore(max_stream_buffers_memory)
 
+bool _sink_closed = true
 
+bool _source_closed = true
 
+future< bool > _sink_closed_future = make_ready_future<bool>(false)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1connection.png b/master/classseastar_1_1rpc_1_1connection.png new file mode 100644 index 0000000000000000000000000000000000000000..08ecb8421fb63bdaee5460a24fefb6a009512727 GIT binary patch literal 1989 zcmb_dc~BF177n<8a&EaGAgHrLvJq-X1Qi(0VHB8#As|E@35Q3JQG$R(4k4hjz<6zD zngDVbR7Oyz0unSSgmCBzCK)ar!o(&C%wU3q20|dnk+2=t{cmf_t(vat?yu|jUcLT( z@B7~GawH+d!gQ-C3Wc%&zS{qd^$x1U6I<+%8I5#AWxBxa}82+X|i&y9JN z*;1p%yVG6plRrK!{GAv-$d4%ToXSa6>t6iCpbYW@&<^Ge9lYfctbH?X#v2#wE4^@EIrQpGFZ8%xTfwFgqS@WEN59E- zuo9)PTfr7<@F%H=qw)d!Z=W)*xl)&9{<@jP-N13zx`IJsntKC za{{q8+Z`L`FA+Y__4TVgHm~-Cn_M*1ZNo)=Vc>-9`DvucptXr6N{?|OK*+EDJ~jX zMqLiHwb@p4dvhVq#oKEi#yE~hO)CyHe{yef%)HEwdSIyA-o=y5p2JM|;mR4NqSY(|v_1}FZEA%Qiw$zdQa zl!N|!AHN(O$Djabi$Pc5$xbmiVUDa*RWhLmhJQqAEV-_%+6nZlcC)pELNx!dufPjf zS>~}Ze0>75S6wl8f*rmixi+&z`SxXe!rTY-D0u1GpGaH#907MmgFw?xe7&i0pXl!% z8INd9rLer+k5-!wt{DYjpoVQMEdQ6a#@XR-AEihK2KR^#f#&i`wx3(sssUZ`tKal_ z6;!mx5B#xq2O}kC)oCIt!D_OYc|*V;hd`qy@4ULtO@-KFfq(!~ zu#7VSsWMroYRlk^(b+Qi$o*;g5i^DSWo;r!y(VG9x|5=So|1xs-YibjZxP^MeGhW5 zciFsO1f1(|SHFg~_!XF+|L~gsdG729iBwXwKxYgk-976$_F%NmeI-tt_wf6Km|&Ub z)SJ2H6#RG`1li`ciOgfp_)C z?p5f9cehzC0AX%IkF)!T-~|1@^g@8JtyCol%h8<-g!KMMHU_Z$A6?8YO+lJ|Ly_Yj z>;(A^WVj8e^USk>KU&=%X@ZXoTRZWy+PCx5iX5im@SjY*25QhjpyM56IO$c2811H> z7{qmm#leYxdmO{pn|y-K4hQBv^Y(V@Ru(jPV3h==Cdu&R);8s$|66T4Fu#q?%;ZI~ z1F?7~C`2tR(WcuRzP&wrSY=2rW>Ds`K4a7J?<)V6<`WxHp;@t!M#ywrUWGDw=Im%wjB|^PC%c67H z5|Tf7R*elEqG#6p@P4xKh9Z*#*qEVKwjd6U;Il1nn3 zPGwz{=pLPD8tG|;$DH|07R74DA7sJJ67dWf`s}xvi&1x%isVth@ z)|5CB)mk~;V#(Ev;*%;L9(YIKWCA1hGgL^BnM>sx7Yuv~ZE(;uUXzGpu-j*XNVy%Q z@PVa7MO(r=*9VdyW6t}CaI)^HibwI;RBpAzqU0`ess+!6D%rXYT%DDOhKIBumo%z7 z^|+L{`3CHieWA_m=;9Q1N$-ABlR{J{bnt<$R34eW?*Dw`54a!{jCKoDVn J4^XU literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1connection__id-members.html b/master/classseastar_1_1rpc_1_1connection__id-members.html new file mode 100644 index 000000000..ca7e83c2c --- /dev/null +++ b/master/classseastar_1_1rpc_1_1connection__id-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::connection_id Member List
+
+
+ +

This is the complete list of members for seastar::rpc::connection_id, including all inherited members.

+ + + + + + + + +
connection_id(uint64_t id) (defined in seastar::rpc::connection_id)seastar::rpc::connection_idinline
id() const (defined in seastar::rpc::connection_id)seastar::rpc::connection_idinline
make_id(uint64_t _id, uint16_t shard) (defined in seastar::rpc::connection_id)seastar::rpc::connection_idinlinestatic
make_invalid_id(uint64_t _id=0) (defined in seastar::rpc::connection_id)seastar::rpc::connection_idinlinestatic
operator bool() const (defined in seastar::rpc::connection_id)seastar::rpc::connection_idinlineexplicit
operator==(const connection_id &o) const (defined in seastar::rpc::connection_id)seastar::rpc::connection_idinline
shard() const (defined in seastar::rpc::connection_id)seastar::rpc::connection_idinline
+ + + + diff --git a/master/classseastar_1_1rpc_1_1connection__id.html b/master/classseastar_1_1rpc_1_1connection__id.html new file mode 100644 index 000000000..5de4e67bc --- /dev/null +++ b/master/classseastar_1_1rpc_1_1connection__id.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar::rpc::connection_id Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::connection_id Class Reference
+
+
+ + + + + + + + + + + + +

+Public Member Functions

+uint64_t id () const
 
+bool operator== (const connection_id &o) const
 
operator bool () const
 
+size_t shard () const
 
+constexpr connection_id (uint64_t id)
 
+ + + + + +

+Static Public Member Functions

+static constexpr connection_id make_invalid_id (uint64_t _id=0)
 
+static constexpr connection_id make_id (uint64_t _id, uint16_t shard)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1error-members.html b/master/classseastar_1_1rpc_1_1error-members.html new file mode 100644 index 000000000..4a1d37ccb --- /dev/null +++ b/master/classseastar_1_1rpc_1_1error-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::error Member List
+
+
+ +

This is the complete list of members for seastar::rpc::error, including all inherited members.

+ + +
error(const std::string &msg) (defined in seastar::rpc::error)seastar::rpc::errorinline
+ + + + diff --git a/master/classseastar_1_1rpc_1_1error.html b/master/classseastar_1_1rpc_1_1error.html new file mode 100644 index 000000000..f053c173b --- /dev/null +++ b/master/classseastar_1_1rpc_1_1error.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: seastar::rpc::error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::error Class Reference
+
+
+
+Inheritance diagram for seastar::rpc::error:
+
+
+ + +seastar::rpc::canceled_error +seastar::rpc::closed_error +seastar::rpc::remote_verb_error +seastar::rpc::rpc_protocol_error +seastar::rpc::stream_closed +seastar::rpc::timeout_error +seastar::rpc::unknown_exception_error +seastar::rpc::unknown_verb_error + +
+ + + + +

+Public Member Functions

error (const std::string &msg)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1error.png b/master/classseastar_1_1rpc_1_1error.png new file mode 100644 index 0000000000000000000000000000000000000000..9327070b9d0a1fc5b64e0cec58a46e6f3300841e GIT binary patch literal 4988 zcmdT|X;@QPw!MIqS|G@vh!SuJ&ZP43RgIs5Fj_Fntk z#P1xew|u?xYY2k2plvLjAV`b_LE<)>B!ESjC`kYxJH9)1!fI`84Sapi6B1H>O9kK7 z-?g>1l8J0JaJwnk$>BHz28muBFHYz}kb)H2^2muWvGL5YOVdVMH}no1m|f|ghf1mE zj+t$OzmvB3A(&dM;S;h#KC>fE7UCA|C@A11vI-7Z>@6*Lk(y9gpbN)7Dv$=Ig8aK@ z&9*L<3#?<#$hl#Jdj0a?de+hp(}9xCXQ!L(bZc)WrRCQ#Ra{z*4}Xtx!3cH1ETfy_ z3WOXPp9eyYz6E9pH&jsIX~l5HnAR!!6N+0MHg|W8P%>RG)k$Erh`0t1Eo9>!Be0d1TPO?Oeh#4^>(cs_M{Uo<)_DnuMD>C25|$R+u~LfXMH2ze9$R z3Bas}L^fbBb2D~jDZuT1I94qBa)RVv-?f09MF05do<45VQPEhso-6weG=D?}601#4 zkenO{OgIS{@7-RTa=+`2WZ*umn0BHwWC0ARU@9=BbfW8@e9O&Ojyp3CL1xK+FL;sl zzqkoZi>mm)QQpER)gz&bR1Btnzzkdic7u(ndK>1x6})<8EOfk&&qCPc)$!)5@)LFK zpZKOF78GbEfKXT~7j(|$mIW_$cduIEmW*A?N{IRY`tk0!Z2b-qM15YKhfX*GSVh>@ zA4AWUv)UgOGVC%6{vJ_KkhKS_Mz1q>nhbf0n=!+RdDh9AoF!7n@0a?#@8915ng2Fs zI|UCK;OU}_`GxxCSDGFy{Gb8;C~|Y1N&SO&$oVdqjy5^qeH>Wj)*is9^EQAL%JTm* zW&b5)M_ip+EHrsV1rm={l9S>#zS&v?g;;9Gs##MGN^y@e#9ieJp*UdJBPVs*h9SN~ zp86->);gl3>nFva$nDuvNb7%JsJ3a|xKWu3Apt@97*eZ)Z&c2*^zfm|6ayndO3e7E zdTV9yVtJ3$Bn+NxMkF*=VCey>&;pR--DMT}V%o_D!9i{nk8khqKrZ%?)(VA9XyY$DPJ=08r z#hsblxEosDy)hQzS~0}ugA5tku`p5iU->qRm&;M1+m>2iF5>GmKO;6=A25uDpqiHS z23wM;oEAFH@-ZCHgLKY@VN2Qr46=W=YcvKwr&GU9bt@4Qx#Ua3aHrF4o{F>U#YZrM7_#}cM$1_L`TFW+{z)RUOlu;3mp@ma0_m+*O>&$6B?9m_2;RexLqH3FIyWh z<4J|YxPxCZSw2UKX;12a;dM0#IN=Qdbo>b5r-(8QcECrzr?UiwVWi+IU`GLfq`OwF z0iZvA0JP)9M?f8}pnOw90!u=^HjZ-VSd-`)ARHRQ_cJ4l?F~#5ah1LHy+3|cIFVas z)ed41YyZZKW1H#!5b}ug+4E3o_rq~dSoZwviHs70M&pbzp{%JFFPkPYdMs&S?=a(A6+0%zg)0mrfj8>1Wt6VSx^PZ@ak9* ze59+AVG`y#&ZNHo2#zQv8-oNJxn-bTWhVDKjo_uxmlup*k zdgMW5zfX0LLdA*(>9rg+{n%Zd;NL-PNkjj(5LJTJDwV2P-mX8i^sG7xJ#LJp*qz4n z$r7H8{!F%*Cu5Sj0WMqRtob42Q8fM(Zyie4dswM;@WJrZ>|GYlr=$dhr~2>pFz*>Qv~Moi9=b}~jPBV3 z=%`FL@<2x@0A96C`coT=jjQ1ovttmcIc}hEm|Ey|o&X^_@`pqfh12YNp5gWT=Ah~k z8^kxnk`?}JIs06OexjTIpVGT_E;T3njq`iW0A;{sM<8L@%O|Pz3wrVPs8I4$#Jha{ z6vbm@LdrMw(CF;-{5(zvu9C;2C&3Ape%bJLTENG`+f(y$`BK{MGJd(9FCUTKlR1-O zNqUmVdNkVgpgd#3h_8Dw*ZeIJ!As`!vT!eV6Kt5Oazsp03W3k`97>y-NcNvtE^APg ziLdXS|CZOffOA~4S0-M(L4{~0OIJBR^hDk4tNO=g0Sl#%6~j$aoFWfI+2M`2$+_Wd z*xD~4?JZJD)-&gd&dYH6%h$w8(n}Rc#TGyy6xb$gj+EEK)SNCku*VH^iKcn15#b%y z`5SQ4W1<1@v-Su3+~Sxal(sBHcAIAOjSkjft+YuvJY^arelqOQ#&=`ILMmK%!S7}cQ$Vt!eL=-ti5m+W_WJF>quvKc#)uU%|A{$FXPR)IQ zv)s*(_z?@)l+sX;!i`$Qj>})pz~37 zPa8blwm3AUuhwhd^z+dLjXq~yWspagzb(k?nQ!*r&WSIdW2ui^0P+~2+`o<3{H)!M zuwTkPZ5% zrO!WTDF@F)-0hXj_~CZwkNGK&jL}Ros81ZM{K4$ip5XQy@AGJ!VtQNaocL@><(8_S z+%(}MGN5YV4#M7DdQuomV0*txi;coxPad|*^k@QuS4htewa$Qvqy)fA1# ztM->}SzePT8mh#o=!b8fRFyxYvZQUT(KuyJqgf zyLY-hxV?Qr9~?it1HZ5A?o1l@8N=PQ|HoKG^vtqvPvk&~Qm@K)OO|ep{s-Mx1nSeL zo}0%Yh`5j|`pmy&-F%A|qZNRAv!_c9W8aKqO3_VJmVjfS)qJl%C*GrJT z_HJppq^uNzYQUC~^xINhTIrXg$GGH2O_zs=?tGM$=R`MSjRxo>2pbvn;@j- zmpIRVu9f=z!NHuUty_kG69&n*;Kcvv1%QE$P0b0IZtl|zwFXHH&SLCFFGb^wl%Nl1 z%nMPYs%t$RO3L|L+H>&~FA?^%YvYBBk{t3KvnO;6;7sE>d~b}X{Hy3c1{>56;|=EFHBN(6fO|A3ysR-loy{RhEVvA#xyHrBP;%w}KJYc6db z=z5vV3jW(wkr;=}-&4#U + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::logger Member List
+
+
+ +

This is the complete list of members for seastar::rpc::logger, including all inherited members.

+ + + + + + + + + +
operator()(const client_info &info, id_type msg_id, const sstring &str) const (defined in seastar::rpc::logger)seastar::rpc::logger
operator()(const client_info &info, id_type msg_id, log_level level, std::string_view str) const (defined in seastar::rpc::logger)seastar::rpc::logger
operator()(const client_info &info, const sstring &str) const (defined in seastar::rpc::logger)seastar::rpc::logger
operator()(const client_info &info, log_level level, std::string_view str) const (defined in seastar::rpc::logger)seastar::rpc::logger
operator()(const socket_address &addr, const sstring &str) const (defined in seastar::rpc::logger)seastar::rpc::logger
operator()(const socket_address &addr, log_level level, std::string_view str) const (defined in seastar::rpc::logger)seastar::rpc::logger
set(std::function< void(const sstring &)> l) (defined in seastar::rpc::logger)seastar::rpc::loggerinline
set(::seastar::logger *logger) (defined in seastar::rpc::logger)seastar::rpc::loggerinline
+ + + + diff --git a/master/classseastar_1_1rpc_1_1logger.html b/master/classseastar_1_1rpc_1_1logger.html new file mode 100644 index 000000000..bd9c3637d --- /dev/null +++ b/master/classseastar_1_1rpc_1_1logger.html @@ -0,0 +1,113 @@ + + + + + + + +Seastar: seastar::rpc::logger Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::logger Class Reference
+
+
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

+void set (std::function< void(const sstring &)> l)
 
+void set (::seastar::logger *logger)
 
+void operator() (const client_info &info, id_type msg_id, const sstring &str) const
 
+void operator() (const client_info &info, id_type msg_id, log_level level, std::string_view str) const
 
+void operator() (const client_info &info, const sstring &str) const
 
+void operator() (const client_info &info, log_level level, std::string_view str) const
 
+void operator() (const socket_address &addr, const sstring &str) const
 
+void operator() (const socket_address &addr, log_level level, std::string_view str) const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1lz4__compressor-members.html b/master/classseastar_1_1rpc_1_1lz4__compressor-members.html new file mode 100644 index 000000000..393e6d8c7 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1lz4__compressor-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::lz4_compressor Member List
+
+
+ +

This is the complete list of members for seastar::rpc::lz4_compressor, including all inherited members.

+ + + + + + + +
close() noexcept (defined in seastar::rpc::compressor)seastar::rpc::compressorinlinevirtual
compress(size_t head_space, snd_buf data) override (defined in seastar::rpc::lz4_compressor)seastar::rpc::lz4_compressorvirtual
decompress(rcv_buf data) override (defined in seastar::rpc::lz4_compressor)seastar::rpc::lz4_compressorvirtual
name() const override (defined in seastar::rpc::lz4_compressor)seastar::rpc::lz4_compressorvirtual
~compressor() (defined in seastar::rpc::compressor)seastar::rpc::compressorinlinevirtual
~lz4_compressor() (defined in seastar::rpc::lz4_compressor)seastar::rpc::lz4_compressorinline
+ + + + diff --git a/master/classseastar_1_1rpc_1_1lz4__compressor.html b/master/classseastar_1_1rpc_1_1lz4__compressor.html new file mode 100644 index 000000000..4a8690c17 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1lz4__compressor.html @@ -0,0 +1,207 @@ + + + + + + + +Seastar: seastar::rpc::lz4_compressor Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::lz4_compressor Class Reference
+
+
+
+Inheritance diagram for seastar::rpc::lz4_compressor:
+
+
+ + +seastar::rpc::compressor + +
+ + + + +

+Classes

class  factory
 
+ + + + + + + + + +

+Public Member Functions

snd_buf compress (size_t head_space, snd_buf data) override
 
rcv_buf decompress (rcv_buf data) override
 
sstring name () const override
 
+virtual future close () noexcept
 
+

Member Function Documentation

+ +

◆ compress()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
snd_buf seastar::rpc::lz4_compressor::compress (size_t head_space,
snd_buf data 
)
+
+overridevirtual
+
+ +

Implements seastar::rpc::compressor.

+ +
+
+ +

◆ decompress()

+ +
+
+ + + + + +
+ + + + + + + + +
rcv_buf seastar::rpc::lz4_compressor::decompress (rcv_buf data)
+
+overridevirtual
+
+ +

Implements seastar::rpc::compressor.

+ +
+
+ +

◆ name()

+ +
+
+ + + + + +
+ + + + + + + +
sstring seastar::rpc::lz4_compressor::name () const
+
+overridevirtual
+
+ +

Implements seastar::rpc::compressor.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1lz4__compressor.png b/master/classseastar_1_1rpc_1_1lz4__compressor.png new file mode 100644 index 0000000000000000000000000000000000000000..e1f140b45a583155f25a67f4fa326f7a535db0a9 GIT binary patch literal 685 zcmeAS@N?(olHy`uVBq!ia0vp^Yk@d`gBeK1)Us{^QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;sa0SlftSo}+!wJcM@(DRZ4SCr?czzbfJ`rlnt^ZeESi+M}tQZL`F z=KZgm_L)52FI)R#M)m8Ky@4`4)zaTn^3P?MUq5>z~PLzp59rz zCjHyC$_3?_>*wBX+x9NkU}}n&{~VR*e-Bk|m{;{r6n5S|Lrwk3_Z7RhPkX#{y|LeP zVU?BFg70sVp7}%C(>g=-Wpf?lT9u#L8LB7U9ko5}W@RqVoaH9i&>Y8bI78#s^=y?p z3p3JhG!`6R)H{da!O{h+9|A8h{m{r@tP$D5V8<23AkV7X(BC9>z}=Di!D1BY)A~!N zvvyIRqCm(AIOL${k(UCvQ|D?W3{y&~h1r8;~|+d`(_xqC_Ma#MWl{1*Mg zZ#-XEXHAw{J~!m?ljrgCTi$*SlS_+?$%|W%+Z?lGtE2CW;3(-GJuiIMUy?hR|2FsY zocovJthe)q-o35!GpBHFq5qr%)BM#B?%TCH(vRnE(yTcN0^fZ9P7p4#jQeFJSZevO zG5_ZG&o6!1^KZTVu}}8L=?q4@7wVaebs + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::lz4_compressor::factory Member List
+
+
+ +

This is the complete list of members for seastar::rpc::lz4_compressor::factory, including all inherited members.

+ + + + + +
negotiate(sstring feature, bool is_server) const override (defined in seastar::rpc::lz4_compressor::factory)seastar::rpc::lz4_compressor::factoryvirtual
negotiate(sstring feature, bool is_server, std::function< future<>()> send_empty_frame) const (defined in seastar::rpc::compressor::factory)seastar::rpc::compressor::factoryinlinevirtual
supported() const override (defined in seastar::rpc::lz4_compressor::factory)seastar::rpc::lz4_compressor::factoryvirtual
~factory() (defined in seastar::rpc::compressor::factory)seastar::rpc::compressor::factoryinlinevirtual
+ + + + diff --git a/master/classseastar_1_1rpc_1_1lz4__compressor_1_1factory.html b/master/classseastar_1_1rpc_1_1lz4__compressor_1_1factory.html new file mode 100644 index 000000000..b002b3f2f --- /dev/null +++ b/master/classseastar_1_1rpc_1_1lz4__compressor_1_1factory.html @@ -0,0 +1,171 @@ + + + + + + + +Seastar: seastar::rpc::lz4_compressor::factory Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::lz4_compressor::factory Class Reference
+
+
+
+Inheritance diagram for seastar::rpc::lz4_compressor::factory:
+
+
+ + +seastar::rpc::compressor::factory + +
+ + + + + + + + +

+Public Member Functions

virtual const sstring & supported () const override
 
virtual std::unique_ptr< rpc::compressornegotiate (sstring feature, bool is_server) const override
 
+virtual std::unique_ptr< compressornegotiate (sstring feature, bool is_server, std::function< future<>()> send_empty_frame) const
 
+

Member Function Documentation

+ +

◆ negotiate()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual std::unique_ptr< rpc::compressor > seastar::rpc::lz4_compressor::factory::negotiate (sstring feature,
bool is_server 
) const
+
+overridevirtual
+
+
+ +

◆ supported()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const sstring & seastar::rpc::lz4_compressor::factory::supported () const
+
+overridevirtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1lz4__compressor_1_1factory.png b/master/classseastar_1_1rpc_1_1lz4__compressor_1_1factory.png new file mode 100644 index 0000000000000000000000000000000000000000..5ecc476f61c7260e7b20d886870359684b87b4cf GIT binary patch literal 809 zcmeAS@N?(olHy`uVBq!ia0vp^w}Ci-gBeIJ*ZPnNq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0c6hothEy=Vo%{OS79Ac}@!Kiy{!g+$ zE}VO?^O@xHzX~qp4t%-dPCrkZ_y#XenzTgE^oGhxTV6BIEdTE}CaL_5)BLqp%$+-D z>2>=JYhO=s+8Fx%{hJ4|bLFk8wkO}3#u=>|ZE$Vz{ksRv?v@<02wOerNl0>Z@(r~o zhfLS6Stg}ERZMJ|jmh+&Px%D}TUtI|>{9tYZ$oOfY?V&tc(zo14!+e=8R~Q+<0!UrOYHcALtS?nSwk-+7*IE|{pU>&AEZ z*h9XRDwcP5-&a|=PTKsw@br}9Ii-_hH_VOrBQ{&*?|l=v*NtxjgJV9^kGXLSb5|vA zyS_SpN8in~EqM>C(xfYe7P#`7HGDIf~cxb#GHo9U$QYZJQH?y67se*fyvjf=ZiKh5eq z{ftLHHdwY{IkBx>>_7TgLFXMFuZ+PTe)mX(DYyYQVaBWOApE{ Q2c~NVPgg&ebxsLQ02SbhUH||9 literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor-members.html b/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor-members.html new file mode 100644 index 000000000..bb0a63db1 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::lz4_fragmented_compressor Member List
+
+
+ +

This is the complete list of members for seastar::rpc::lz4_fragmented_compressor, including all inherited members.

+ + + + + + +
close() noexcept (defined in seastar::rpc::compressor)seastar::rpc::compressorinlinevirtual
compress(size_t head_space, snd_buf data) override (defined in seastar::rpc::lz4_fragmented_compressor)seastar::rpc::lz4_fragmented_compressorvirtual
decompress(rcv_buf data) override (defined in seastar::rpc::lz4_fragmented_compressor)seastar::rpc::lz4_fragmented_compressorvirtual
name() const override (defined in seastar::rpc::lz4_fragmented_compressor)seastar::rpc::lz4_fragmented_compressorvirtual
~compressor() (defined in seastar::rpc::compressor)seastar::rpc::compressorinlinevirtual
+ + + + diff --git a/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor.html b/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor.html new file mode 100644 index 000000000..8dfca88b3 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor.html @@ -0,0 +1,207 @@ + + + + + + + +Seastar: seastar::rpc::lz4_fragmented_compressor Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::lz4_fragmented_compressor Class Referencefinal
+
+
+
+Inheritance diagram for seastar::rpc::lz4_fragmented_compressor:
+
+
+ + +seastar::rpc::compressor + +
+ + + + +

+Classes

class  factory
 
+ + + + + + + + + +

+Public Member Functions

virtual snd_buf compress (size_t head_space, snd_buf data) override
 
virtual rcv_buf decompress (rcv_buf data) override
 
sstring name () const override
 
+virtual future close () noexcept
 
+

Member Function Documentation

+ +

◆ compress()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual snd_buf seastar::rpc::lz4_fragmented_compressor::compress (size_t head_space,
snd_buf data 
)
+
+overridevirtual
+
+ +

Implements seastar::rpc::compressor.

+ +
+
+ +

◆ decompress()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual rcv_buf seastar::rpc::lz4_fragmented_compressor::decompress (rcv_buf data)
+
+overridevirtual
+
+ +

Implements seastar::rpc::compressor.

+ +
+
+ +

◆ name()

+ +
+
+ + + + + +
+ + + + + + + +
sstring seastar::rpc::lz4_fragmented_compressor::name () const
+
+overridevirtual
+
+ +

Implements seastar::rpc::compressor.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor.png b/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor.png new file mode 100644 index 0000000000000000000000000000000000000000..c507413b2952f12486dab30e22517707e0490a46 GIT binary patch literal 789 zcmeAS@N?(olHy`uVBq!ia0vp^pMf}lgBeKvUa;90NJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~E%9`545?szJ2!IDYXu%x{_CN8|Eum- zF;nQYNL_CHg<0#4fkX>m^N-ZXX{iPqJuU^zIy33YeznaiU)N7JR`>jM8^|y5d3kJ_ z(>BrKy?O_>R{Xqq?`B`-Zr&SQSDQAi9DY)iZI zId|7z-Y&O4ZT{hhzxY0H{4F!%?{$XNDwCt$soeasb#w0Gch538@1330vLkj;$mKF` zOM~Cx3p;O5Dv8ps2immHuj0o&_c|l*OSeswHmm&Q^iA`86+bz0(y!~Sl|bL=FxI%+ zGc;#9JexoN;{x`SeG2^Swo0FSZZjxn7%_iYf0F0Iel=r<|Fh08{LLmLARp|d$*U%G z02o|Q)y!v}iyi$|_S877=6?A5Q`R$epMB>3?)U8K;n%NIH?N)Xy7XW6$4{I0Zf@SL zenEeE=E`O3r+z*Ets{6>Y~j192aodS?{B=NBijA?!_}sfF`r*e&^+cSsZcHSE$j9C z>UF0+Y}J)2<$h(I-@Mj;?dxm5PsH?Ib1nGFkr=~KaJKzYj*t3=m6_ZA?F!zvTeUEY zKXiF{`tK^8;<#Hre;H+SVRyfcdap51@#Mc^}=%H4mff6HXv zx?EZ?|M1DXsdi=anP>l(5_|X0uKjn-gPiyGpC@SEy8ro~v5%@MiuTwLJN{`Hb&gPv?Jr`rh5iZTHUZiF>^*d50zg|CaQp`9{ol wt}?SU1piVoK2W~`7Sg-yo@*{OnevY@>W%Td-y!es0Mjsor>mdKI;Vst05?REO#lD@ literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor_1_1factory-members.html b/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor_1_1factory-members.html new file mode 100644 index 000000000..7eceecec0 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor_1_1factory-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::lz4_fragmented_compressor::factory Member List
+
+
+ +

This is the complete list of members for seastar::rpc::lz4_fragmented_compressor::factory, including all inherited members.

+ + + + + +
negotiate(sstring feature, bool is_server) const override (defined in seastar::rpc::lz4_fragmented_compressor::factory)seastar::rpc::lz4_fragmented_compressor::factoryvirtual
negotiate(sstring feature, bool is_server, std::function< future<>()> send_empty_frame) const (defined in seastar::rpc::compressor::factory)seastar::rpc::compressor::factoryinlinevirtual
supported() const override (defined in seastar::rpc::lz4_fragmented_compressor::factory)seastar::rpc::lz4_fragmented_compressor::factoryvirtual
~factory() (defined in seastar::rpc::compressor::factory)seastar::rpc::compressor::factoryinlinevirtual
+ + + + diff --git a/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor_1_1factory.html b/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor_1_1factory.html new file mode 100644 index 000000000..70a66479a --- /dev/null +++ b/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor_1_1factory.html @@ -0,0 +1,171 @@ + + + + + + + +Seastar: seastar::rpc::lz4_fragmented_compressor::factory Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::lz4_fragmented_compressor::factory Class Referencefinal
+
+
+
+Inheritance diagram for seastar::rpc::lz4_fragmented_compressor::factory:
+
+
+ + +seastar::rpc::compressor::factory + +
+ + + + + + + + +

+Public Member Functions

virtual const sstring & supported () const override
 
virtual std::unique_ptr< rpc::compressornegotiate (sstring feature, bool is_server) const override
 
+virtual std::unique_ptr< compressornegotiate (sstring feature, bool is_server, std::function< future<>()> send_empty_frame) const
 
+

Member Function Documentation

+ +

◆ negotiate()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual std::unique_ptr< rpc::compressor > seastar::rpc::lz4_fragmented_compressor::factory::negotiate (sstring feature,
bool is_server 
) const
+
+overridevirtual
+
+
+ +

◆ supported()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const sstring & seastar::rpc::lz4_fragmented_compressor::factory::supported () const
+
+overridevirtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor_1_1factory.png b/master/classseastar_1_1rpc_1_1lz4__fragmented__compressor_1_1factory.png new file mode 100644 index 0000000000000000000000000000000000000000..be2a7e2c52e751a5e2535a5b5babb6517c02f2f2 GIT binary patch literal 1014 zcmeAS@N?(olHy`uVBq!ia0y~yU{nOM12~w0Wa25~pFm0?z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op@2_lZlo|6J0lKJ)1BzUec+f0x*F(N})+!ljQ^ zE}U(B`S09Ys>XG9Cfuxk7BFMS@%c4>BF^S?P5NRbf499!@xSScz{xxL(j6{2?&JU4 zvhb%)^zp6o8IunbOnY1XG2~lq?(zxtn#(tzIVF*K!{*L2RnPF9`%kI76cP{GV=d)r zwV1~<=+N5<|GO6c7OY>a==n=Ns7*x^B2~mj7W$nWEUxW5hBcu#Lg!lz@YqB-05EX9h{2r2`QSDj(yYYU(sb_oo{iQZ#-nssV)4BLaIFIh* z%!k|T^4=?7`uy=@dUk%SZQT6#Vf!>C7tYr|Z6B>%_Oi}-`n`J<=MNvB&$iVyYWD2@ z!U^6X`57;B{u<@2tMI&UbIk2_!S+3e^S4~PpQV?x$}N)T)tBF=vXf_Dp7U$Y-#DRH z$2Bfq$S|9-^SedLWzPV^+8f=zFWA0Wow@$~Rj{ShhWEGlv$~RtZ2F2eoSMg-vip7N zv%jX!#a_oQ2xUn<33&qja!AYie!J5WiT^ggYvipAP3EUY7u`0q z&*%H6Q>^{$$^_20?Fr&XR;S;r10{wwU}EsSU@K_tvAxoFHO~W~{TIIQp0yWvq48`v zukP)OF@|d*8(KDN%r{O6f5LxuVafr9=@t7Gx7*hwbusQt>gTe~DWM4fi%!^k literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1multi__algo__compressor__factory-members.html b/master/classseastar_1_1rpc_1_1multi__algo__compressor__factory-members.html new file mode 100644 index 000000000..2be812cbd --- /dev/null +++ b/master/classseastar_1_1rpc_1_1multi__algo__compressor__factory-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::multi_algo_compressor_factory Member List
+
+
+ +

This is the complete list of members for seastar::rpc::multi_algo_compressor_factory, including all inherited members.

+ + + + + + + + +
multi_algo_compressor_factory(std::vector< const rpc::compressor::factory * > factories) (defined in seastar::rpc::multi_algo_compressor_factory)seastar::rpc::multi_algo_compressor_factoryinline
multi_algo_compressor_factory(std::initializer_list< const rpc::compressor::factory * > factories) (defined in seastar::rpc::multi_algo_compressor_factory)seastar::rpc::multi_algo_compressor_factoryinline
multi_algo_compressor_factory(const rpc::compressor::factory *factory) (defined in seastar::rpc::multi_algo_compressor_factory)seastar::rpc::multi_algo_compressor_factoryinline
negotiate(sstring feature, bool is_server) const override (defined in seastar::rpc::multi_algo_compressor_factory)seastar::rpc::multi_algo_compressor_factoryinlinevirtual
negotiate(sstring feature, bool is_server, std::function< future<>()> send_empty_frame) const override (defined in seastar::rpc::multi_algo_compressor_factory)seastar::rpc::multi_algo_compressor_factoryinlinevirtual
supported() const override (defined in seastar::rpc::multi_algo_compressor_factory)seastar::rpc::multi_algo_compressor_factoryinlinevirtual
~factory() (defined in seastar::rpc::compressor::factory)seastar::rpc::compressor::factoryinlinevirtual
+ + + + diff --git a/master/classseastar_1_1rpc_1_1multi__algo__compressor__factory.html b/master/classseastar_1_1rpc_1_1multi__algo__compressor__factory.html new file mode 100644 index 000000000..22ae3b304 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1multi__algo__compressor__factory.html @@ -0,0 +1,223 @@ + + + + + + + +Seastar: seastar::rpc::multi_algo_compressor_factory Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::multi_algo_compressor_factory Class Reference
+
+
+
+Inheritance diagram for seastar::rpc::multi_algo_compressor_factory:
+
+
+ + +seastar::rpc::compressor::factory + +
+ + + + + + + + + + + + + + +

+Public Member Functions

multi_algo_compressor_factory (std::vector< const rpc::compressor::factory * > factories)
 
multi_algo_compressor_factory (std::initializer_list< const rpc::compressor::factory * > factories)
 
multi_algo_compressor_factory (const rpc::compressor::factory *factory)
 
const sstring & supported () const override
 
std::unique_ptr< compressornegotiate (sstring feature, bool is_server) const override
 
std::unique_ptr< compressornegotiate (sstring feature, bool is_server, std::function< future<>()> send_empty_frame) const override
 
+

Member Function Documentation

+ +

◆ negotiate() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::unique_ptr< compressor > seastar::rpc::multi_algo_compressor_factory::negotiate (sstring feature,
bool is_server 
) const
+
+inlineoverridevirtual
+
+
+ +

◆ negotiate() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
std::unique_ptr< compressor > seastar::rpc::multi_algo_compressor_factory::negotiate (sstring feature,
bool is_server,
std::function< future<>()> send_empty_frame 
) const
+
+inlineoverridevirtual
+
+ +

Reimplemented from seastar::rpc::compressor::factory.

+ +
+
+ +

◆ supported()

+ +
+
+ + + + + +
+ + + + + + + +
const sstring & seastar::rpc::multi_algo_compressor_factory::supported () const
+
+inlineoverridevirtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1multi__algo__compressor__factory.png b/master/classseastar_1_1rpc_1_1multi__algo__compressor__factory.png new file mode 100644 index 0000000000000000000000000000000000000000..018ddaf6c58c9816ddf81b29610b52072c1e7b16 GIT binary patch literal 848 zcmeAS@N?(olHy`uVBq!ia0y~yU}OQZ12~w04C z>vgqev#j2>_4$`w%8~+3LiPqfyAvhaR&%o%Z_e&k;Am3dI5b;P#CY?0@6NjU{g1O1 zQ`XOK2skpLZ_PKS4BM(?Pv3C`Uc`BB#*BCV-zOH$f4Rd)rG?Y&*q>B|*QRAh!59?QL#Z*1B> z>+e2M3?g%fk!I^&Yaoj$l@pfL`*Hf zVCm*&__OH`!-1==0&Z;fixfDfHfnG*2`yIOU}DGu1{DY~G|YxD6c`?;fkhNJ7lMZZYhCP6bKy3o^tH&R>lQocE1dtGcVZo?vt|s!-1181vWL? z3TW+&zW5|h>fHOYmvSxa*4*W}7pK1SrNyPtpL(V9%G()ENU%B_Ji6g!_KA|;ESF|4 zevte2)~<8D;Tk4AvtPyh-I39Ju6e4Z#P&D68?VdA9DmNc)ML?1j>c`DY}Hup0^X}U zZxH3kKJa&LtZnOytL?InKJQPy@AJG|V*Tk$`o&-Vv2k3zqAg%y!L^Y&@#EF@3l2LO zF0Fhn5!W)|-LqhG#XI+6Kf2ml{ZF=3wD`E1(%O#O?9{L_|D4%xkYEitlc_q{t$ zv_D_%%(!FgpBbwU$B1oPefZL|E$_U;SMj|p&v<$ylzsWzN6Zb%pQ<+A&wg0y&mi#R zv%tHTXXfwhR@P5Q{24r5{an^LB{Ts5ZRK{h literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1opt__time__point-members.html b/master/classseastar_1_1rpc_1_1opt__time__point-members.html new file mode 100644 index 000000000..b77c2033d --- /dev/null +++ b/master/classseastar_1_1rpc_1_1opt__time__point-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::opt_time_point Member List
+
+
+ +

This is the complete list of members for seastar::rpc::opt_time_point, including all inherited members.

+ + + +
opt_time_point(std::optional< rpc_clock_type::time_point > time_point) (defined in seastar::rpc::opt_time_point)seastar::rpc::opt_time_pointinline
time_point typedef (defined in seastar::rpc::opt_time_point)seastar::rpc::opt_time_point
+ + + + diff --git a/master/classseastar_1_1rpc_1_1opt__time__point.html b/master/classseastar_1_1rpc_1_1opt__time__point.html new file mode 100644 index 000000000..37811af74 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1opt__time__point.html @@ -0,0 +1,105 @@ + + + + + + + +Seastar: seastar::rpc::opt_time_point Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::opt_time_point Class Reference
+
+
+
+Inheritance diagram for seastar::rpc::opt_time_point:
+
+
+ +
+ + + + +

+Public Types

+using time_point = std::chrono::time_point< lowres_clock, duration >
 
+ + + +

+Public Member Functions

opt_time_point (std::optional< rpc_clock_type::time_point > time_point)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1opt__time__point.png b/master/classseastar_1_1rpc_1_1opt__time__point.png new file mode 100644 index 0000000000000000000000000000000000000000..554913b7e6ed47e42cbd54c6e8a2b5c51cc8c45c GIT binary patch literal 830 zcmeAS@N?(olHy`uVBq!ia0vp^zkxV_gBeJ^DF3_@NJ#|vgt-3y{~sjs=4)yHp$R}1 z7#}!rfVK0EJdn##666=m08|75S5Ji)F)%Ql^>lFzsbG9N_wKY!20X6ic{cC=ACuSG z;u#$xGwreY%T4TW{4c!;IHa4F=Gp2QiwVlwC&QIR~Pl{PUvzT ztWOVMPwHs2&AH{K6`Xr^*IMz#{h2TCuda|Ht~x>CB?^ z&pu`EAMZOo#r2jaec+L|}v*z-64zAb)!Z_dxsgeQlWEc@zd|K*PFsC6N^-TTJeKy|VmuFkWhqtspTWlZlymsOJs^(3yOeJ+? zuWLTreBbwelF5bW_$%gX7yV3>XXmjyR=3)t`HA8a! zuDpCR>C1PMo2r`g)pn~qy?iJyZCWtH{^i^bL8@u{V?G^HPm8~B`A~Y={8BlE#cI|L zcD`i|HM8C@{4}}A_$hM}^OMUd>?f9=Syo{_nu0o4P%JSnxdK!3eAE9U;ag+> z?R}*o!6d*BpD2W$8 z!x(qj`px$lr>-Szy!&+5_8V=h^S9sP{+AzcF8OSA$(32mdzP5rG(Yf+b#3kYZA%t+ zZa5t``}T~pvWq9CH$1QUe@1`#nmeawyqtXY8$yAE)2D{&VVrkUM&&i$BS{{$sU&SN{Y5S2ZUU4lvIBUCS=<`k>x% zCJVzm`APdlx9)wu-S=N$S;O*Q{5Ki*`N9H0_f1-wnH9 literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1optional.html b/master/classseastar_1_1rpc_1_1optional.html new file mode 100644 index 000000000..d2c5d7054 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1optional.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: seastar::rpc::optional< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::optional< T > Class Template Reference
+
+
+
+Inheritance diagram for seastar::rpc::optional< T >:
+
+
+ +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1optional.png b/master/classseastar_1_1rpc_1_1optional.png new file mode 100644 index 0000000000000000000000000000000000000000..aa89b6d9d8360d517cbfe6878b754d5e1d6c4b71 GIT binary patch literal 627 zcmeAS@N?(olHy`uVBq!ia0vp^^MN>kgBeH~REKW{QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;cEvx_KOlOEU%~Ge;}K8$28);M0_uMm9xah~ znDd3XV{#osA(G_(bLY?GBp5U#LRBt5{QeZ%vYl&Rmj0i$)*&nA6}K@e4PDs zx^2$YPdm1q?zfR&Zf{>@-TCvY(c7yWQY3s*he1G*~Py4T(w|&L6kFokM!*bcT_n&0l|MU2@40GXU z6Xa7@KHAj%UjI+c)%v>H@A=OI_pklKQ)9V)-;Vm@e`3QvcJAQ6VyDQzbJywnMvtEC z{`T-U(+Ac2HFp`9K>qWtV=#w$@Z4wXtTZ#7dj9CROQ9)09s*McgQu&X%Q~loCIFR9 BF$(|y literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1protocol-members.html b/master/classseastar_1_1rpc_1_1protocol-members.html new file mode 100644 index 000000000..c067f5c60 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1protocol-members.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::protocol< Serializer, MsgType > Member List
+
+
+ +

This is the complete list of members for seastar::rpc::protocol< Serializer, MsgType >, including all inherited members.

+ + + + + + + + + + + + + + +
get_logger() const (defined in seastar::rpc::protocol< Serializer, MsgType >)seastar::rpc::protocol< Serializer, MsgType >inline
has_handler(MsgType msg_id) (defined in seastar::rpc::protocol< Serializer, MsgType >)seastar::rpc::protocol< Serializer, MsgType >
has_handlers() const noexceptseastar::rpc::protocol< Serializer, MsgType >inline
make_client(MsgType t)seastar::rpc::protocol< Serializer, MsgType >
make_server_connection(rpc::server &server, connected_socket fd, socket_address addr, connection_id id) override (defined in seastar::rpc::protocol< Serializer, MsgType >)seastar::rpc::protocol< Serializer, MsgType >inlinevirtual
protocol(Serializer &&serializer) (defined in seastar::rpc::protocol< Serializer, MsgType >)seastar::rpc::protocol< Serializer, MsgType >inline
register_handler(MsgType t, Func &&func)seastar::rpc::protocol< Serializer, MsgType >
register_handler(MsgType t, scheduling_group sg, Func &&func)seastar::rpc::protocol< Serializer, MsgType >
server (defined in seastar::rpc::protocol< Serializer, MsgType >)seastar::rpc::protocol< Serializer, MsgType >
set_logger(std::function< void(const sstring &)> logger)seastar::rpc::protocol< Serializer, MsgType >inline
set_logger(::seastar::logger *logger)seastar::rpc::protocol< Serializer, MsgType >inline
unregister_handler(MsgType t)seastar::rpc::protocol< Serializer, MsgType >
~protocol_base() (defined in seastar::rpc::protocol_base)seastar::rpc::protocol_baseinlinevirtual
+ + + + diff --git a/master/classseastar_1_1rpc_1_1protocol.html b/master/classseastar_1_1rpc_1_1protocol.html new file mode 100644 index 000000000..31b2831fd --- /dev/null +++ b/master/classseastar_1_1rpc_1_1protocol.html @@ -0,0 +1,456 @@ + + + + + + + +Seastar: seastar::rpc::protocol< Serializer, MsgType > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::protocol< Serializer, MsgType > Class Template Referencefinal
+
+
+

Detailed Description

+
template<typename Serializer, typename MsgType = uint32_t>
+class seastar::rpc::protocol< Serializer, MsgType >

Defines a protocol for communication between a server and a client.

+

A protocol is defined by a Serializer and a MsgType. The Serializer is responsible for serializing and unserializing all types used as arguments and return types used in the protocol. The Serializer is expected to define a read() and write() method for each such type T as follows:

template <typename Output>
+void write(const serializer&, Output& output, const T& data);
+
+template <typename Input>
+T read(const serializer&, Input& input, type<T> type_tag);  // type_tag used to disambiguate
+

Where Input and Output have a void read(char*, size_t) and write(const char*, size_t) respectively. MsgType defines the type to be used as the message id, the id which is used to identify different messages used in the protocol. These are also often referred to as "verbs". The client will use the message id, to specify the remote method (verb) to invoke on the server. The server uses the message id to dispatch the incoming call to the right handler. MsgType should be hashable and serializable. It is preferable to use enum for message types, but do not forget to provide hash function for it.

+

Use register_handler() on the server to define the available verbs and the code to be executed when they are invoked by clients. Use make_client() on the client to create a matching callable that can be used to invoke the verb on the server and wait for its result. Note that register_handler() also returns a client, that can be used to invoke the registered verb on another node (given that the other node has the same verb). This is useful for symmetric protocols, where two or more nodes all have servers as well as connect to the other nodes as clients.

+

Use protocol::server to listen for and accept incoming connections on the server and protocol::client to establish connections to the server. Note that registering the available verbs can be done before/after listening for connections, but best to ensure that by the time incoming requests are to be expected, all the verbs are set-up.

+

+Configuration

+

TODO

+

+Isolation

+

RPC supports isolating verb handlers from each other. There are two ways to achieve this: per-handler isolation (the old way) and per-connection isolation (the new way). If no isolation is configured, all handlers will be executed in the context of the scheduling_group in which the protocol::server was created.

+

Per-handler isolation (the old way) can be configured by using the register_handler() overload which takes a scheduling_group. When invoked, the body of the handler will be executed from the context of the configured scheduling_group.

+

Per-connection isolation (the new way) is a more flexible mechanism that requires user application provided logic to determine how connections are isolated. This mechanism has two parts, the server and the client part. The client configures isolation by setting client_options::isolation_cookie. This cookie is an opaque (to the RPC layer) string that is to be interpreted on the server using user application provided logic. The application provides this logic to the server by setting resource_limits::isolate_connection to an appropriate handler function, that interprets the opaque cookie and resolves it to an isolation_config. The scheduling_group in the former will be used not just to execute all verb handlers, but also the connection loop itself, hence providing better isolation.

+

There a few gotchas related to mixing the two isolation mechanisms. This can happen when the application is updated and one of the client/server is still using the old/new mechanism. In general per-connection isolation overrides the per-handler one. If both are set up, the former will determine the scheduling_group context for the handlers. If the client is not configured to send an isolation cookie, the server's resource_limits::isolate_connection will not be invoked and the server will fall back to per-handler isolation if configured. If the client is configured to send an isolation cookie but the server doesn't have a resource_limits::isolate_connection configured, it will use default_isolate_connection() to interpret the cookie. Note that this still overrides the per-handler isolation if any is configured. If the server is so old that it doesn't have the per-connection isolation feature at all, it will of course just use the per-handler one, if configured.

+

+Compatibility

+

TODO

+
Template Parameters
+ + + +
Serializerthe serializer for the protocol.
MsgTypethe type to be used as the message id or verb id.
+
+
+
+

#include <seastar/rpc/rpc.hh>

+
+Inheritance diagram for seastar::rpc::protocol< Serializer, MsgType >:
+
+
+ + +seastar::rpc::protocol_base + +
+ + + + + + + + +

+Classes

class  client
 Represents a client side connection. More...
 
class  server
 Represents the listening port and all accepted connections. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

protocol (Serializer &&serializer)
 
template<typename Func >
auto make_client (MsgType t)
 
template<typename Func >
auto register_handler (MsgType t, Func &&func)
 
template<typename Func >
auto register_handler (MsgType t, scheduling_group sg, Func &&func)
 
future unregister_handler (MsgType t)
 
void set_logger (std::function< void(const sstring &)> logger)
 
+void set_logger (::seastar::logger *logger)
 Set a logger to be used to log messages.
 
+const loggerget_logger () const
 
shared_ptr< rpc::server::connectionmake_server_connection (rpc::server &server, connected_socket fd, socket_address addr, connection_id id) override
 
+bool has_handler (MsgType msg_id)
 
bool has_handlers () const noexcept
 
+ + + +

+Public Attributes

+friend server
 
+

Member Function Documentation

+ +

◆ has_handlers()

+ +
+
+
+template<typename Serializer , typename MsgType = uint32_t>
+ + + + + +
+ + + + + + + +
bool seastar::rpc::protocol< Serializer, MsgType >::has_handlers () const
+
+inlinenoexcept
+
+

Checks if any there are handlers registered. Debugging helper, should only be used for debugging and not relied on.

+
Returns
true if there are, false if there are no registered handlers.
+ +
+
+ +

◆ make_client()

+ +
+
+
+template<typename Serializer , typename MsgType >
+
+template<typename Func >
+ + + + + + + + +
auto seastar::rpc::protocol< Serializer, MsgType >::make_client (MsgType t)
+
+

Creates a callable that can be used to invoke the verb on the remote.

+
Template Parameters
+ + +
FuncThe signature of the verb. Has to be either the same or compatible with the one passed to register_handler on the server.
+
+
+
Parameters
+ + +
tthe verb to invoke on the remote.
+
+
+
Returns
a callable whose signature is derived from Func as follows: given Func == Ret(Args...) the returned callable has the following signature: future<Ret>(protocol::client&, Args...).
+ +
+
+ +

◆ make_server_connection()

+ +
+
+
+template<typename Serializer , typename MsgType = uint32_t>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
shared_ptr< rpc::server::connection > seastar::rpc::protocol< Serializer, MsgType >::make_server_connection (rpc::serverserver,
connected_socket fd,
socket_address addr,
connection_id id 
)
+
+inlineoverridevirtual
+
+ +

Implements seastar::rpc::protocol_base.

+ +
+
+ +

◆ register_handler() [1/2]

+ +
+
+
+template<typename Serializer , typename MsgType >
+
+template<typename Func >
+ + + + + + + + + + + + + + + + + + +
auto seastar::rpc::protocol< Serializer, MsgType >::register_handler (MsgType t,
Func && func 
)
+
+

Register a handler to be called when this verb is invoked.

+
Template Parameters
+ + +
Functhe type of the handler for the verb. This determines the signature of the verb.
+
+
+
Parameters
+ + + +
tthe verb to register the handler for.
functhe callable to be called when the verb is invoked by the remote.
+
+
+
Returns
a client, a callable that can be used to invoke the verb. See make_client(). The client can be discarded, in fact this is what most callers will do as real clients will live on a remote node, not on the one where handlers are registered.
+ +
+
+ +

◆ register_handler() [2/2]

+ +
+
+
+template<typename Serializer , typename MsgType >
+
+template<typename Func >
+ + + + + + + + + + + + + + + + + + + + + + + + +
auto seastar::rpc::protocol< Serializer, MsgType >::register_handler (MsgType t,
scheduling_group sg,
Func && func 
)
+
+

Register a handler to be called when this verb is invoked.

+
Template Parameters
+ + +
Functhe type of the handler for the verb. This determines the signature of the verb.
+
+
+
Parameters
+ + + + +
tthe verb to register the handler for.
sgthe scheduling group that will be used to invoke the handler in. This can be used to execute different verbs in different scheduling groups. Note that there is a newer mechanism to determine the scheduling groups a handler will run it per invocation, see isolation_config.
functhe callable to be called when the verb is invoked by the remote.
+
+
+
Returns
a client, a callable that can be used to invoke the verb. See make_client(). The client can be discarded, in fact this is what most callers will do as real clients will live on a remote node, not on the one where handlers are registered.
+ +
+
+ +

◆ set_logger()

+ +
+
+
+template<typename Serializer , typename MsgType = uint32_t>
+ + + + + +
+ + + + + + + + +
void seastar::rpc::protocol< Serializer, MsgType >::set_logger (std::function< void(const sstring &)> logger)
+
+inline
+
+

Set a logger function to be used to log messages.

+
Deprecated:
use the logger overload set_logger(::seastar::logger*) instead.
+ +
+
+ +

◆ unregister_handler()

+ +
+
+
+template<typename Serializer , typename MsgType >
+ + + + + + + + +
future seastar::rpc::protocol< Serializer, MsgType >::unregister_handler (MsgType t)
+
+

Unregister the handler for the verb.

+

Waits for all currently running handlers, then unregisters the handler. Future attempts to invoke the verb will fail. This becomes effective immediately after calling this function.

+
Parameters
+ + +
tthe verb to unregister the handler for.
+
+
+
Returns
a future that becomes available once all currently running handlers finished.
+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1protocol.png b/master/classseastar_1_1rpc_1_1protocol.png new file mode 100644 index 0000000000000000000000000000000000000000..286b1fb4cabf90256115a8f327a783149e9a9dc0 GIT binary patch literal 875 zcmeAS@N?(olHy`uVBq!ia0y~yVB`g|12~w0q{-?F%Yl?cfKQ0)|NsAi%olIImi8Z- z0AzvjfddCvJMYK?xf~@ye!&btMIdnXREQA+1Jf^07srqa#2e<5Z zOXfZAUGnbjJ@I+*K8t6URZm#5{zZ=1+&i-3pR=SMZ<+KZ^{>M{iLkkIK1|U6S8#7e z_Ni$?-wzqBP19g472LXPi@5*QDOPXSUlZ}H3Y)n-ojGRGKG*vGW4gifxEVdYp5FKo zDmCfLHY4846PEZaOO%>4<)u?{W5FXwPI&G2*_= zZ~_&YZ#Kpau+>29R!snLa?JMl;(o8B%~oVo_M(F12(@Qm#1bfhgs} zAOj|X3|PjVG3QumO2V7{s-+5lZhwCIuGsz6?ZgmWF^2N5ZYFvC?UV187t2o6`SX$0 zL~8X+-pBWHwtw9jx$j+skhUSI@k5H9vL9#_IbV@6FPt z3rpS3(N*I<^8Z;x^`4*8divh?zuk5sKkw>SmB~jx{_RLqeXZt_&L;J@sV$?+q)C15 z?p%jET_>tkR&dwP zIX%%ftFUsj_0@y~n~NQKyfaJrPwV7vU)eVK)2SOBe#>{?)PHX*b@PLiwP)q5QD8+8QPFEcm+m3oC!0*tw0?rc33HhZ%mG zd}-3-fZ#TVmzT4{gTGzmzbev@K2@6Khhwc(VtmQFUEiN)%AB7r^Y;HdwgZj3E(`Q? sJFE&eVfd$wh>MbifnJ)|s{S(nW3;&2db>sim@^nWUHx3vIVCg!0GG3!<^TWy literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1protocol_1_1client-members.html b/master/classseastar_1_1rpc_1_1protocol_1_1client-members.html new file mode 100644 index 000000000..411d4a036 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1protocol_1_1client-members.html @@ -0,0 +1,162 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::protocol< Serializer, MsgType >::client Member List
+
+
+ +

This is the complete list of members for seastar::rpc::protocol< Serializer, MsgType >::client, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_compressor (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_connected (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_error (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_fd (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_handler_duration_negotiated (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_id (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_is_stream (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_logger (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_negotiated (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_outgoing_queue (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_outgoing_queue_ready (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_outgoing_queue_size (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_propagate_timeout (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_read_buf (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_serializer (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_sink_closed (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_sink_closed_future (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_source_closed (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stats (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stopped (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stream_queue (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stream_sem (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_streams (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_timeout_negotiated (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_write_buf (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
abort() (defined in seastar::rpc::connection)seastar::rpc::connection
abort_all_streams() (defined in seastar::rpc::client)seastar::rpc::client
await_connection() (defined in seastar::rpc::client)seastar::rpc::clientinline
client(protocol &p, const socket_address &addr, const socket_address &local={}) (defined in seastar::rpc::protocol< Serializer, MsgType >::client)seastar::rpc::protocol< Serializer, MsgType >::clientinline
client(protocol &p, client_options options, const socket_address &addr, const socket_address &local={}) (defined in seastar::rpc::protocol< Serializer, MsgType >::client)seastar::rpc::protocol< Serializer, MsgType >::clientinline
client(protocol &p, socket socket, const socket_address &addr, const socket_address &local={})seastar::rpc::protocol< Serializer, MsgType >::clientinline
client(protocol &p, client_options options, socket socket, const socket_address &addr, const socket_address &local={}) (defined in seastar::rpc::protocol< Serializer, MsgType >::client)seastar::rpc::protocol< Serializer, MsgType >::clientinline
seastar::rpc::client::client(const logger &l, void *s, const socket_address &addr, const socket_address &local={})seastar::rpc::client
client(const logger &l, void *s, client_options options, const socket_address &addr, const socket_address &local={}) (defined in seastar::rpc::client)seastar::rpc::client
seastar::rpc::client::client(const logger &l, void *s, socket socket, const socket_address &addr, const socket_address &local={})seastar::rpc::client
client(const logger &l, void *s, client_options options, socket socket, const socket_address &addr, const socket_address &local={}) (defined in seastar::rpc::client)seastar::rpc::client
close_sink() (defined in seastar::rpc::connection)seastar::rpc::connectioninline
close_source() (defined in seastar::rpc::connection)seastar::rpc::connectioninline
compress(snd_buf buf) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
connection(connected_socket &&fd, const logger &l, void *s, connection_id id=invalid_connection_id) (defined in seastar::rpc::connection)seastar::rpc::connectioninline
connection(const logger &l, void *s, connection_id id=invalid_connection_id) (defined in seastar::rpc::connection)seastar::rpc::connectioninline
deregister_this_stream() (defined in seastar::rpc::client)seastar::rpc::client
error() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
get_connection_id() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
get_logger() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
get_stats() const (defined in seastar::rpc::client)seastar::rpc::client
get_stats_internal() noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
get_stream(connection_id id) const (defined in seastar::rpc::connection)seastar::rpc::connection
handle_stream_frame() (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
incoming_queue_length() const noexcept (defined in seastar::rpc::client)seastar::rpc::clientinline
is_stream() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninlineprotected
make_stream_sink(socket socket) (defined in seastar::rpc::client)seastar::rpc::clientinline
make_stream_sink() (defined in seastar::rpc::client)seastar::rpc::clientinline
next_message_id() (defined in seastar::rpc::client)seastar::rpc::clientinline
outgoing_queue_length() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
peer_address() const override (defined in seastar::rpc::client)seastar::rpc::clientinlinevirtual
read_frame(socket_address info, input_stream< char > &in) (defined in seastar::rpc::connection)seastar::rpc::connection
read_frame_compressed(socket_address info, std::unique_ptr< compressor > &compressor, input_stream< char > &in) (defined in seastar::rpc::connection)seastar::rpc::connection
read_stream_frame_compressed(input_stream< char > &in) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
register_stream(connection_id id, xshard_connection_ptr c) (defined in seastar::rpc::connection)seastar::rpc::connection
request(uint64_t type, int64_t id, snd_buf buf, std::optional< rpc_clock_type::time_point > timeout={}, cancellable *cancel=nullptr) (defined in seastar::rpc::client)seastar::rpc::client
send(snd_buf buf, std::optional< rpc_clock_type::time_point > timeout={}, cancellable *cancel=nullptr) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
send_buffer(snd_buf buf) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
send_entry(outgoing_entry &d) noexcept (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
send_negotiation_frame(feature_map features) (defined in seastar::rpc::connection)seastar::rpc::connection
serializer() (defined in seastar::rpc::connection)seastar::rpc::connectioninline
set_negotiated() noexcept (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
set_socket(connected_socket &&fd) (defined in seastar::rpc::connection)seastar::rpc::connection
sink_closed() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
stop() noexcept (defined in seastar::rpc::client)seastar::rpc::client
stop_send_loop(std::exception_ptr ex) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
stream_check_twoway_closed() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninlineprotected
stream_close() (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
stream_process_incoming(rcv_buf &&) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
stream_receive(circular_buffer< foreign_ptr< std::unique_ptr< rcv_buf > > > &bufs) (defined in seastar::rpc::connection)seastar::rpc::connection
suspend_for_testing(promise<> &p) (defined in seastar::rpc::connection)seastar::rpc::connectioninline
wait_for_reply(id_type id, std::unique_ptr< reply_handler_base > &&h, std::optional< rpc_clock_type::time_point > timeout, cancellable *cancel) (defined in seastar::rpc::client)seastar::rpc::client
wait_timed_out(id_type id) (defined in seastar::rpc::client)seastar::rpc::client
withdraw(outgoing_entry::container_t::iterator it, std::exception_ptr ex=nullptr) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
~connection() (defined in seastar::rpc::connection)seastar::rpc::connectioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1rpc_1_1protocol_1_1client.html b/master/classseastar_1_1rpc_1_1protocol_1_1client.html new file mode 100644 index 000000000..c523ce4d3 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1protocol_1_1client.html @@ -0,0 +1,429 @@ + + + + + + + +Seastar: seastar::rpc::protocol< Serializer, MsgType >::client Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::protocol< Serializer, MsgType >::client Class Reference
+
+
+

Detailed Description

+
template<typename Serializer, typename MsgType = uint32_t>
+class seastar::rpc::protocol< Serializer, MsgType >::client

Represents a client side connection.

+
+

#include <seastar/rpc/rpc.hh>

+
+Inheritance diagram for seastar::rpc::protocol< Serializer, MsgType >::client:
+
+
+ + +seastar::rpc::client +seastar::rpc::connection +seastar::weakly_referencable< client > + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

client (protocol &p, const socket_address &addr, const socket_address &local={})
 
client (protocol &p, client_options options, const socket_address &addr, const socket_address &local={})
 
 client (protocol &p, socket socket, const socket_address &addr, const socket_address &local={})
 
client (protocol &p, client_options options, socket socket, const socket_address &addr, const socket_address &local={})
 
+stats get_stats () const
 
+size_t incoming_queue_length () const noexcept
 
+auto next_message_id ()
 
+void wait_for_reply (id_type id, std::unique_ptr< reply_handler_base > &&h, std::optional< rpc_clock_type::time_point > timeout, cancellable *cancel)
 
+void wait_timed_out (id_type id)
 
+future stop () noexcept
 
+void abort_all_streams ()
 
+void deregister_this_stream ()
 
socket_address peer_address () const override
 
+future await_connection ()
 
+template<typename Serializer , typename... Out>
future< sink< Out... > > make_stream_sink (socket socket)
 
+template<typename Serializer , typename... Out>
future< sink< Out... > > make_stream_sink ()
 
+future request (uint64_t type, int64_t id, snd_buf buf, std::optional< rpc_clock_type::time_point > timeout={}, cancellable *cancel=nullptr)
 
+size_t outgoing_queue_length () const noexcept
 
+void set_socket (connected_socket &&fd)
 
+future send_negotiation_frame (feature_map features)
 
+bool error () const noexcept
 
+void abort ()
 
+future stream_receive (circular_buffer< foreign_ptr< std::unique_ptr< rcv_buf > > > &bufs)
 
+future close_sink ()
 
+bool sink_closed () const noexcept
 
+future close_source ()
 
+connection_id get_connection_id () const noexcept
 
+statsget_stats_internal () noexcept
 
+xshard_connection_ptr get_stream (connection_id id) const
 
+void register_stream (connection_id id, xshard_connection_ptr c)
 
+const loggerget_logger () const noexcept
 
+template<typename Serializer >
Serializer & serializer ()
 
+template<typename FrameType >
future< typename FrameType::return_type > read_frame (socket_address info, input_stream< char > &in)
 
+template<typename FrameType >
future< typename FrameType::return_type > read_frame_compressed (socket_address info, std::unique_ptr< compressor > &compressor, input_stream< char > &in)
 
+void suspend_for_testing (promise<> &p)
 
+weak_ptr< clientweak_from_this () noexcept
 
+weak_ptr< const clientweak_from_this () const noexcept
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

+void withdraw (outgoing_entry::container_t::iterator it, std::exception_ptr ex=nullptr)
 
+void set_negotiated () noexcept
 
+bool is_stream () const noexcept
 
+snd_buf compress (snd_buf buf)
 
+future send_buffer (snd_buf buf)
 
+future send (snd_buf buf, std::optional< rpc_clock_type::time_point > timeout={}, cancellable *cancel=nullptr)
 
+future send_entry (outgoing_entry &d) noexcept
 
+future stop_send_loop (std::exception_ptr ex)
 
+future< std::optional< rcv_buf > > read_stream_frame_compressed (input_stream< char > &in)
 
+bool stream_check_twoway_closed () const noexcept
 
+future stream_close ()
 
+future stream_process_incoming (rcv_buf &&)
 
+future handle_stream_frame ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

+connected_socket _fd
 
+input_stream< char > _read_buf
 
+output_stream< char > _write_buf
 
+bool _error = false
 
+bool _connected = false
 
+std::optional< shared_promise<> > _negotiated = shared_promise<>()
 
+promise _stopped
 
+stats _stats
 
+const logger_logger
 
+void * _serializer
 
+future _outgoing_queue_ready = _negotiated->get_shared_future()
 
+outgoing_entry::container_t _outgoing_queue
 
+size_t _outgoing_queue_size = 0
 
+std::unique_ptr< compressor_compressor
 
+bool _propagate_timeout = false
 
+bool _timeout_negotiated = false
 
+bool _handler_duration_negotiated = false
 
+bool _is_stream = false
 
+connection_id _id = invalid_connection_id
 
+std::unordered_map< connection_id, xshard_connection_ptr_streams
 
+queue< rcv_buf_stream_queue = queue<rcv_buf>(max_queued_stream_buffers)
 
+semaphore _stream_sem = semaphore(max_stream_buffers_memory)
 
+bool _sink_closed = true
 
+bool _source_closed = true
 
+future< bool > _sink_closed_future = make_ready_future<bool>(false)
 
+

Constructor & Destructor Documentation

+ +

◆ client()

+ +
+
+
+template<typename Serializer , typename MsgType = uint32_t>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
seastar::rpc::protocol< Serializer, MsgType >::client::client (protocolp,
socket socket,
const socket_addressaddr,
const socket_addresslocal = {} 
)
+
+inline
+
+

Create client object which will attempt to connect to the remote address using the specified seastar::socket.

+
Parameters
+ + + + +
addrthe remote address identifying this client
localthe local address of this client
socketthe socket object use to connect to the remote address
+
+
+ +
+
+

Member Function Documentation

+ +

◆ peer_address()

+ +
+
+ + + + + +
+ + + + + + + +
socket_address seastar::rpc::client::peer_address () const
+
+inlineoverridevirtualinherited
+
+ +

Implements seastar::rpc::connection.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1protocol_1_1client.png b/master/classseastar_1_1rpc_1_1protocol_1_1client.png new file mode 100644 index 0000000000000000000000000000000000000000..a864849b8c3b63920fdd71a22233b0035218ded0 GIT binary patch literal 2070 zcmbW2c~leU8pZ=$78mr`RuE9=JtT^(f)){!6f|N$0z?Y50fLx_NCJu>BtW7q7OHGI ztOX({2r7#eBvC_HRHPwBz#tfhwF1FnWKBv4N$zml-u5p~&z*B-=Kan*@B4l8KEH3~ zl0U}FaINWD7z}2JK5_^PgK3kX_y+?W=t|b|x&z&|_#X{KX*3!roO&-y$a#DPivD}H zwYBM98nl3h1{5sj7z`4v9=URz@aRUSn zpae7^_?x`h@OL)|K7eH&3H=hqFMxYN&nq*^3Z;2)ou#70zCQG%luLAr7ZtYL^(vM7 z(WHv_wxC+xKFu*G|IBbG`>kkO*^HFHO^K*}^&yEC)6G%Qm*z&~EkaQ#S00kk?5B`$ zP&shLNmrs+ z7llu3OZ-kgxR$anS!9WBDRCEPPdEzL=J!aP?RS~clgZ}dwC2RC;ZKuh;&=V>ZNnFS zL;dPko!pfB@&M-~~eqlNR~Eyf|%T}+)^OD z9>2n4#y(fq6BlXbe)nniV7=3ug0#-li~$L%*6j3lKHda(7+E+1ehAXFpBPn(?dPNQ zg^1&4V;v*rKv`p)+jf59LcUYdo*dZ^hZ{R(tvfq79vk^})iE_>po2YUYKqPsx6%=u z0=7n8*@m9aq7?SR74A&05Oi_fs?p8qB#!Lef&-eV3sJCj%#NVUntqcESwGWVk_TzY z5DM`Z0Xy`gkD$_#PWpp0cT@2noH5#P@oC!G*xvR{){av*Zlvmzc5gPJ`2RId`B%`@ z_OsTmE}jUzut3V0%&v8hZcU9EW7}3iLJTAp!vL$?1V597_-wqE}v z)&8%rUWY>|aAre;Vs+kfqQ z#r~D0xa5&Z1t~O`jjQ<45}k&HDj+Svj_m&2@jg;;qG?uvu+yaY*`PPj4$a2T;Zt|t zX^QKOO?ar}0H++6+lSyLzI;8_3c*BWmGGNN6)JMK28p43z1Ht6fI8W6qnNJ_y9Kd# zr~txxX#Mjih?JTSyaKXf+Pl`eVpg!kcUt~>DVB>Q&Q|p`@vcZxsXfwk;WGvsZsN0A zIK;#kIJnY-&4=q-{p~#=cHTqH#0&?s;dJE3I`XIT&#w{W(S|6i@(Wj2Jv#M5(g1mL z6!Io>@=4Qb49%*$0=sGY|Jn8r-TkOc?TD!s-F9JNs##xZb>5zhK;|1$uw(5^Ylo@I z$Em8o@E-K{`pVnQ<+*D&%8$`KcAPhy5xjFRiD0M~=hCSqpoQ1nxN-UPodHQ@&cb6G zc0Kh#0Ay{PC0I5o%227C9S%4*|4O@1_iuz*N|y5S8M^p)C@R#yL-C?JOmc6Uj!eWg zG_mRnxrr@DcbA=xi`ogQK16*xb8i2z(_|g*4X<~<2Val(+~U367?tC~Si{>Fy0N%h zsFczro?o=eCdu^<{c^nglwGUa@bGhQ_Jod|19xt`#t~t**!c5L^fgj2Om*KsaK3cIkn(-b9?w r^%7`p|HS!f(YwG>2p7yKL$NUc+j35U7w(0A;xIG{bEw`k;=BI + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::protocol< Serializer, MsgType >::server Member List
+
+
+ +

This is the complete list of members for seastar::rpc::protocol< Serializer, MsgType >::server, including all inherited members.

+ + + + + + + + + + + + + + + + + +
abort_connection(connection_id id)seastar::rpc::server
accept() (defined in seastar::rpc::server)seastar::rpc::server
client (defined in seastar::rpc::server)seastar::rpc::server
connection (defined in seastar::rpc::server)seastar::rpc::server
foreach_connection(Func &&f) (defined in seastar::rpc::server)seastar::rpc::serverinline
reply_gate() (defined in seastar::rpc::server)seastar::rpc::serverinline
server(protocol &proto, const socket_address &addr, resource_limits memory_limit=resource_limits()) (defined in seastar::rpc::protocol< Serializer, MsgType >::server)seastar::rpc::protocol< Serializer, MsgType >::serverinline
server(protocol &proto, server_options opts, const socket_address &addr, resource_limits memory_limit=resource_limits()) (defined in seastar::rpc::protocol< Serializer, MsgType >::server)seastar::rpc::protocol< Serializer, MsgType >::serverinline
server(protocol &proto, server_socket socket, resource_limits memory_limit=resource_limits(), server_options=server_options{}) (defined in seastar::rpc::protocol< Serializer, MsgType >::server)seastar::rpc::protocol< Serializer, MsgType >::serverinline
server(protocol &proto, server_options opts, server_socket socket, resource_limits memory_limit=resource_limits()) (defined in seastar::rpc::protocol< Serializer, MsgType >::server)seastar::rpc::protocol< Serializer, MsgType >::serverinline
server(protocol_base *proto, const socket_address &addr, resource_limits memory_limit=resource_limits()) (defined in seastar::rpc::server)seastar::rpc::server
server(protocol_base *proto, server_options opts, const socket_address &addr, resource_limits memory_limit=resource_limits()) (defined in seastar::rpc::server)seastar::rpc::server
server(protocol_base *proto, server_socket, resource_limits memory_limit=resource_limits(), server_options opts=server_options{}) (defined in seastar::rpc::server)seastar::rpc::server
server(protocol_base *proto, server_options opts, server_socket, resource_limits memory_limit=resource_limits()) (defined in seastar::rpc::server)seastar::rpc::server
shutdown()seastar::rpc::server
stop()seastar::rpc::server
+ + + + diff --git a/master/classseastar_1_1rpc_1_1protocol_1_1server.html b/master/classseastar_1_1rpc_1_1protocol_1_1server.html new file mode 100644 index 000000000..449ceba6b --- /dev/null +++ b/master/classseastar_1_1rpc_1_1protocol_1_1server.html @@ -0,0 +1,230 @@ + + + + + + + +Seastar: seastar::rpc::protocol< Serializer, MsgType >::server Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::protocol< Serializer, MsgType >::server Class Reference
+
+
+

Detailed Description

+
template<typename Serializer, typename MsgType = uint32_t>
+class seastar::rpc::protocol< Serializer, MsgType >::server

Represents the listening port and all accepted connections.

+
+

#include <seastar/rpc/rpc.hh>

+
+Inheritance diagram for seastar::rpc::protocol< Serializer, MsgType >::server:
+
+
+ + +seastar::rpc::server + +
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

server (protocol &proto, const socket_address &addr, resource_limits memory_limit=resource_limits())
 
server (protocol &proto, server_options opts, const socket_address &addr, resource_limits memory_limit=resource_limits())
 
server (protocol &proto, server_socket socket, resource_limits memory_limit=resource_limits(), server_options=server_options{})
 
server (protocol &proto, server_options opts, server_socket socket, resource_limits memory_limit=resource_limits())
 
+void accept ()
 
future stop ()
 
future shutdown ()
 
+template<typename Func >
void foreach_connection (Func &&f)
 
void abort_connection (connection_id id)
 
+gatereply_gate ()
 
+ + + + + +

+Public Attributes

+friend connection
 
+friend client
 
+

Member Function Documentation

+ +

◆ abort_connection()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::rpc::server::abort_connection (connection_id id)
+
+inherited
+
+

Abort the given connection, causing it to stop receiving any further messages. It's safe to abort a connection from an RPC handler running on that connection. Does nothing if there is no connection with the given ID on this server.

+
Parameters
+ + +
idthe ID of the connection to abort.
+
+
+ +
+
+ +

◆ shutdown()

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::rpc::server::shutdown ()
+
+inherited
+
+

Shuts down the server.

+

Light version of the stop, that just makes sure the server is not visible by remote clients, i.e. – no new rpcs are admitted and no replies on the previously running handlers will be sent. Currently running handlers may still run.

+

Caller of shutdown() mush wait for it to resolve before calling stop.

+ +
+
+ +

◆ stop()

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::rpc::server::stop ()
+
+inherited
+
+

Stops the server.

+

It makes sure that no new rpcs are admitted, no rpc handlers issued on this connection are running any longer and no replies on the previously running handlers will be sent.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1protocol_1_1server.png b/master/classseastar_1_1rpc_1_1protocol_1_1server.png new file mode 100644 index 0000000000000000000000000000000000000000..55caa50003ce7b4fb5dee4928c562d1c47a313e3 GIT binary patch literal 977 zcmeAS@N?(olHy`uVBq!ia0y~yV6*_T12~w0i(^OyKzP&A3y30)ErOCRxtG2)061%-`?CeS8*W$H3p|gDEEJz_I)Cb8tHOV;7ru18e}7Nt+m*Xg{=dzT zeNq{Ia*ot94%7c{f!d~XZ(pV2TR4^3bCw#+;dYU8RBClJ{U$Mi+&$ruil#%?Th7sN@31Xb-`?IE z@AfEXq3WHmA2)rfpQhjKx?Oc&Ejc^+e(Hk1HTKu_-X!O3oZh$9H}Jr}X{X+PH0*KA z{QY;w-ECiQaa>!--*ofSK9}t*^FF6qU+(>Ly#0Q9lWZ*a`Mr6* zZ+34s%UG7Iey(h#wZX2`_e?pQhmUT_Ofuh8cjx&!3+sIkr9P_d6E@e%+Y~xKZg=W^ z)(p|wH!EeXbKX+tnJuPPd?z8X=U365Q1-v~x~b4p_ztHWhISsi@y9?Nl8y(Pg3%#Gg zmoP7%xvcvof7$!%-PV2PCv-LW9;oJ7-}=k-K`+0P`A4{CAp>KOj6;J6yMV$`MwT6& ekjPv1gTFt;DZ + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::protocol_base Member List
+
+
+ +

This is the complete list of members for seastar::rpc::protocol_base, including all inherited members.

+ + + + +
get_handler(uint64_t msg_id)=0 (defined in seastar::rpc::protocol_base)seastar::rpc::protocol_baseprotectedpure virtual
make_server_connection(rpc::server &server, connected_socket fd, socket_address addr, connection_id id)=0 (defined in seastar::rpc::protocol_base)seastar::rpc::protocol_basepure virtual
~protocol_base() (defined in seastar::rpc::protocol_base)seastar::rpc::protocol_baseinlinevirtual
+ + + + diff --git a/master/classseastar_1_1rpc_1_1protocol__base.html b/master/classseastar_1_1rpc_1_1protocol__base.html new file mode 100644 index 000000000..c1232a959 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1protocol__base.html @@ -0,0 +1,144 @@ + + + + + + + +Seastar: seastar::rpc::protocol_base Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::protocol_base Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::rpc::protocol_base:
+
+
+ + +seastar::rpc::protocol< Serializer, MsgType > + +
+ + + + +

+Classes

struct  handler_with_holder
 
+ + + +

+Public Member Functions

+virtual shared_ptr< server::connectionmake_server_connection (rpc::server &server, connected_socket fd, socket_address addr, connection_id id)=0
 
+ + + +

+Protected Member Functions

+virtual std::optional< handler_with_holderget_handler (uint64_t msg_id)=0
 
+

Class Documentation

+ +

◆ seastar::rpc::protocol_base::handler_with_holder

+ +
+
+ + + + +
struct seastar::rpc::protocol_base::handler_with_holder
+
+ + + + + + + + +
Class Members
+rpc_handler & +handler +
+holder +holder +
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1protocol__base.png b/master/classseastar_1_1rpc_1_1protocol__base.png new file mode 100644 index 0000000000000000000000000000000000000000..4538a4373714d3b16fc64ca47b43d17cfda6f3d5 GIT binary patch literal 881 zcmeAS@N?(olHy`uVBq!ia0y~yVB`g|12~w0q{-?F%Yl?cfKQ0)|NsAi%olIImi8Z- z0AzvjfddCvJMYK?xf~@ye!&btMIdnXREQA+12coCi(^Oy&YZ#KuuS}-Medgq4%Pp- z_WM5mow0`X*SG!o+iu^=H;&1_9xoF+fBV9>w=cfi>S>pC`CAy{yepbg;r;LV%6z~7 z@Ke9jC%-j)?b)~2maTO$db{(gt>@x4nU5uZGwRt*e#A652LCbcZO**!_IRJ|^}9Q_ z|K5C|-mo|C)>`HdqI1tKn!G#NVEr;fKkg5ye;w{gEb{ZKI3Zqdk$=WC)w{DgapodP zFGt=**QR`Xv~pI^^4e@)#)`0;CH8Na9M_d|d@f@{$UW)&rHmi4Q>B(MPB;nj z)@857KyQj)%WZgG!nnbQdBOFkNixeA4KiC3fz*T(Ixw%RT{hrt@L859#W2(7unB|F z%(hI16eHft3@1|HhJnKfS>a>zOA*sjEBEW2-lX$hyjvv_6qe4DK$<;*ma%7ucv>x1 zW`6v6Q{1FS@vqmH%UcKC=UcqaEq(W-DKEq??kMF~|9z!f_mRqn}eO3 zGdXtO@uj`qB)6|7leSCtS}eLRE!_LyNI_86v757NMUU;PcZTOH}I4o5-D(F7{n{Ez5I;f9(7PuWbxVOWEvJYJRoY*0pi|lxZ^Uvy5`4 z*zGMdO_l!};5%_i`c%o9Jv+QFnZG#9`FqjlmDTn0j(w~-dGX)-Opi;AyDkg#cdIP5 ta&?~cPa7Q2pcwHywFMLv8{b{GcfVt9&~(!N6fl1 + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::remote_verb_error Member List
+
+
+ +

This is the complete list of members for seastar::rpc::remote_verb_error, including all inherited members.

+
+ + + + diff --git a/master/classseastar_1_1rpc_1_1remote__verb__error.html b/master/classseastar_1_1rpc_1_1remote__verb__error.html new file mode 100644 index 000000000..ed2d4f2dd --- /dev/null +++ b/master/classseastar_1_1rpc_1_1remote__verb__error.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: seastar::rpc::remote_verb_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::remote_verb_error Class Reference
+
+
+
+Inheritance diagram for seastar::rpc::remote_verb_error:
+
+
+ + +seastar::rpc::error + +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1remote__verb__error.png b/master/classseastar_1_1rpc_1_1remote__verb__error.png new file mode 100644 index 0000000000000000000000000000000000000000..5069d3f8a4fa9864bc50036dba581d69fa3c2866 GIT binary patch literal 1215 zcma)+YfO_@7{^Nr(tyB+xdDol1kka~*2)m5VC6O_5Gn`~3llR!4P$`ZSrOi5UWTA8 zbj(tLRk=mopg{$cS>6WFB9vkZ%D8q??$8z}h2Gx2dtGE7x1HoU&+|Wda`K#C{y8^J zM}^v0?YBaqP&VYS;20!>NC+`#WdG(=pbL^5PDjRuz%Y!IOKX}uR!;>|{T)J~(Bj4v z7Ll0Tn5Z)-r0M;7GZ1?Wg))yK2M5F!nknj5^VOg2wXjTSS=#~R@;>{kie_d`v@efJ z5t{dwVvL-a@MVWGx4Z~_M2yoio}BeuN%DvLjs}f&9-&r%Zh~tZ<6yeG$nLOLhuFIK zcW(K;vC&*GC!L*J7H=$%#RCoXbX|RzDH}PtZVw$0Ob~IIHHoaCpBg=%*OC(8N!bMO zogvNi`Olh?R&JZl(R3B4TxlQRrNYkr@VfDwgg3sxQC~dSve40QtZbBDzVL91(|Bb| zi6>_sg4{iri1OJ3BZJyADA^WE)e?w5){S180$!_#j2TF6G%Iz3%x1#?hL05M!rZbf zb^SM4c*>(GcW(&0%YFCqC_Tl_pPsK(T1Tj(0kZz+uz@q#!^BE9&Vtj^@x{txGm-bE zcv%fMZ?&`1DjKi&DUurLN7|oFbVLQ<2--`l$)@qP0Jd%ROYqPRvjSf>$A^?L(dBLj z=Mzn}8z7|H;)*KEsBX)jUffpUt@UbsruWVcR36K}1hon^=l9k(j+$WRB~DJI=-o@#7yfJ&tNW3!F0t5h6J*N zTG30>q+u*0?Ej$H1!b9t<3xxq5jpo+z|**M_3jPAiXUH}MX1yC~>|3KZsp8Z3QpSOot^Y8!&ZQISUNIg21B?!1D&% zyE$+GxQe3h467|&*#G5-T?~kQ{xoZe&7CG`{E$`g?ur}OzuxV%-tHByn zI*O~;2>x*f1og2XLAauAfOq&Up!w+O1kDh~6=;$Mel&?T0fCsbXnt*BVus%FTl;q_eTk1i + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::rpc_protocol_error Member List
+
+
+ +

This is the complete list of members for seastar::rpc::rpc_protocol_error, including all inherited members.

+ + + +
error(const std::string &msg) (defined in seastar::rpc::error)seastar::rpc::errorinline
rpc_protocol_error() (defined in seastar::rpc::rpc_protocol_error)seastar::rpc::rpc_protocol_errorinline
+ + + + diff --git a/master/classseastar_1_1rpc_1_1rpc__protocol__error.html b/master/classseastar_1_1rpc_1_1rpc__protocol__error.html new file mode 100644 index 000000000..470935b5c --- /dev/null +++ b/master/classseastar_1_1rpc_1_1rpc__protocol__error.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: seastar::rpc::rpc_protocol_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::rpc_protocol_error Class Reference
+
+
+
+Inheritance diagram for seastar::rpc::rpc_protocol_error:
+
+
+ + +seastar::rpc::error + +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1rpc__protocol__error.png b/master/classseastar_1_1rpc_1_1rpc__protocol__error.png new file mode 100644 index 0000000000000000000000000000000000000000..c4bdee38ddcb3943cf37e308b2047718faa4b86c GIT binary patch literal 1169 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE8Azrw%`pX15&=FTuK)l42Qpv0`C8h4XabN0 z#s>}@VC}pk59D%`1o;Is02P72)l(rx3=Av^o-U3d6^w7^zMZyNi^r|}($-&h{>#em zcg&7{-E+3!-kBZU3XEn<|BjwnlWO3ZHC<%F5|1EogKoF13f ze=ufz{k-VUN;lJKXM*phKU=ceRFrq;DxXPyAC(y=p9)P+(F&hCBP2d_rpnxh%b8Yx zoO-FS>H6!}TW16L&%Iv+F8F_&t0%SIFTr@)+huy)j~}}J;RR~k8tHUd&29txqv;ol zxXvD~Eap0!el139SBuI^3-K>gnI@IYc*d&oa=Is@XO{}AismH0183GGGUz?!yI{1I z`_B7b=`DH}diUoxKV$tQ!qlP4%An-Q*x(VwpfE{0vZ*qs%h9U=3(M_K?Nq(8_nm6&sa1a%8+W}5XMMGC3ZMDwM>nJ+F6DE{ z+-8<;{Cau+hL%^s8Ml_64*c?9yJhRNyL)?Tf34)YbC>^9ul~oS@f|?7)jNM?diQSn zL?8i-z1`I+a}T^N+il8oVCfyksAZ*%zxNh4Ut`_%aeMBCJr47n7&b0pa8S`?5b)$; zaGAu!FcB|zJup-yc^1S%)6tWL1Fdc6XZ>4n`u{|S@ zNiSb%U%Mgm#b(=r0?w=L2e(L0U;JX>?6ZlVzZ^WQ8RBGT(Ryv-Zf}kU%JbUZ+3k2% z{fV_PQNAx<;DJQ3zya@nZ_OD5e4)Po5-)DNx$GxD^J~tvpSKx?1IrHvPgg&ebxsLQ E0NPd*vj6}9 literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1server-members.html b/master/classseastar_1_1rpc_1_1server-members.html new file mode 100644 index 000000000..30ce51da7 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1server-members.html @@ -0,0 +1,94 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::server Member List
+
+
+ +

This is the complete list of members for seastar::rpc::server, including all inherited members.

+ + + + + + + + + + + + + +
abort_connection(connection_id id)seastar::rpc::server
accept() (defined in seastar::rpc::server)seastar::rpc::server
client (defined in seastar::rpc::server)seastar::rpc::server
connection (defined in seastar::rpc::server)seastar::rpc::server
foreach_connection(Func &&f) (defined in seastar::rpc::server)seastar::rpc::serverinline
reply_gate() (defined in seastar::rpc::server)seastar::rpc::serverinline
server(protocol_base *proto, const socket_address &addr, resource_limits memory_limit=resource_limits()) (defined in seastar::rpc::server)seastar::rpc::server
server(protocol_base *proto, server_options opts, const socket_address &addr, resource_limits memory_limit=resource_limits()) (defined in seastar::rpc::server)seastar::rpc::server
server(protocol_base *proto, server_socket, resource_limits memory_limit=resource_limits(), server_options opts=server_options{}) (defined in seastar::rpc::server)seastar::rpc::server
server(protocol_base *proto, server_options opts, server_socket, resource_limits memory_limit=resource_limits()) (defined in seastar::rpc::server)seastar::rpc::server
shutdown()seastar::rpc::server
stop()seastar::rpc::server
+ + + + diff --git a/master/classseastar_1_1rpc_1_1server.html b/master/classseastar_1_1rpc_1_1server.html new file mode 100644 index 000000000..73c6cbd18 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1server.html @@ -0,0 +1,207 @@ + + + + + + + +Seastar: seastar::rpc::server Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::server Class Reference
+
+
+
+Inheritance diagram for seastar::rpc::server:
+
+
+ + +seastar::rpc::protocol< Serializer, MsgType >::server + +
+ + + + +

+Classes

class  connection
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

server (protocol_base *proto, const socket_address &addr, resource_limits memory_limit=resource_limits())
 
server (protocol_base *proto, server_options opts, const socket_address &addr, resource_limits memory_limit=resource_limits())
 
server (protocol_base *proto, server_socket, resource_limits memory_limit=resource_limits(), server_options opts=server_options{})
 
server (protocol_base *proto, server_options opts, server_socket, resource_limits memory_limit=resource_limits())
 
+void accept ()
 
future stop ()
 
future shutdown ()
 
+template<typename Func >
void foreach_connection (Func &&f)
 
void abort_connection (connection_id id)
 
+gatereply_gate ()
 
+ + + + + +

+Public Attributes

+friend connection
 
+friend client
 
+

Member Function Documentation

+ +

◆ abort_connection()

+ +
+
+ + + + + + + + +
void seastar::rpc::server::abort_connection (connection_id id)
+
+

Abort the given connection, causing it to stop receiving any further messages. It's safe to abort a connection from an RPC handler running on that connection. Does nothing if there is no connection with the given ID on this server.

+
Parameters
+ + +
idthe ID of the connection to abort.
+
+
+ +
+
+ +

◆ shutdown()

+ +
+
+ + + + + + + +
future seastar::rpc::server::shutdown ()
+
+

Shuts down the server.

+

Light version of the stop, that just makes sure the server is not visible by remote clients, i.e. – no new rpcs are admitted and no replies on the previously running handlers will be sent. Currently running handlers may still run.

+

Caller of shutdown() mush wait for it to resolve before calling stop.

+ +
+
+ +

◆ stop()

+ +
+
+ + + + + + + +
future seastar::rpc::server::stop ()
+
+

Stops the server.

+

It makes sure that no new rpcs are admitted, no rpc handlers issued on this connection are running any longer and no replies on the previously running handlers will be sent.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1server.png b/master/classseastar_1_1rpc_1_1server.png new file mode 100644 index 0000000000000000000000000000000000000000..e84e8b8bd34b29643518057f1c605b7eb1fbce07 GIT binary patch literal 975 zcmeAS@N?(olHy`uVBq!ia0y~yV6*_T12~w0et&|4XL?O$zd|WMfrev~cQT=9ut^foX|F1A``?!h!qZ z-@VoKjxw_Rn6cy2i{&NTe->8eAG{;K+&;SM%DI@Q2bb|ST>cSb|M_YDyU)Q(D&J_o z4SiwHIOi<;QC;QDYIk?@rhdKfHub(=_^NE?2PSsALzlnZa_@Tnv%gz+teb1b@}2WR zid}_;343nC-E+U&EWV%Y`u!oYc&*I!&d>Yb&6@Z1@9F5P^Hvpqi|@bYIIn!_nU#rs z0iXB(Whu~;zq5*=eMepj(3x&PR~MufGE7$my40hPfiXzNp+SUQAVDbHOVd+xsSMMD zO?McC8j^wDdVD7@lkb6nCf@^#$=glX3#I_oDQ!j3rhsY+rQ97`c0^_G)!GguG(tSR zR9c#%)FXyXNZ~gxA z?%dZ~1$CU|OVUpN7AiY-?dPV0C6E3z)NHSQEc-R{=*$IoPed_VA1o8wU3&TA>Y|N5 zPPqp4i<|!_RXI29gLa8A$+`01<^LEESd;21);$3NWlJvPt z3ugB9T1W?#CzPDNSGqxs=lXJ688hYA$7|npZGJ4hPB8zGcH!bjYSCX`ZjJsH%f5Ee z+s_GouUT@1+kCm%i|-^P_9WfBzp8o1_D5yKcO06}hU#xyW&3Sf-*o4~2^z6Wm-^41 z7|X2hcU4t>%jeay>DlMr`(4e`{K50i@9MUiGQZI6tU2tjS$4mB6E<~;bC2JbxxsOh z&OJQMxBKXq=7)c)3V;9QE%FA&#Pl6+Grq4@*?T(rk;=<@)uWz44I=8Ej6ri$SUn0S li2xH+_FB)iTjd_{$IIF4&iY&N0GRt2JYD@<);T3K0RSPSzcl~= literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1server_1_1connection-members.html b/master/classseastar_1_1rpc_1_1server_1_1connection-members.html new file mode 100644 index 000000000..739906bc0 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1server_1_1connection-members.html @@ -0,0 +1,156 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::server::connection Member List
+
+
+ +

This is the complete list of members for seastar::rpc::server::connection, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_compressor (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_connected (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_error (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_fd (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_handler_duration_negotiated (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_id (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_is_stream (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_logger (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_negotiated (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_outgoing_queue (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_outgoing_queue_ready (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_outgoing_queue_size (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_propagate_timeout (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_read_buf (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_serializer (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_sink_closed (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_sink_closed_future (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_source_closed (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stats (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stopped (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stream_queue (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_stream_sem (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_streams (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_timeout_negotiated (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
_write_buf (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
abort() (defined in seastar::rpc::connection)seastar::rpc::connection
abort_all_streams() (defined in seastar::rpc::server::connection)seastar::rpc::server::connection
close_sink() (defined in seastar::rpc::connection)seastar::rpc::connectioninline
close_source() (defined in seastar::rpc::connection)seastar::rpc::connectioninline
compress(snd_buf buf) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
connection(server &s, connected_socket &&fd, socket_address &&addr, const logger &l, void *seralizer, connection_id id) (defined in seastar::rpc::server::connection)seastar::rpc::server::connection
connection(connected_socket &&fd, const logger &l, void *s, connection_id id=invalid_connection_id) (defined in seastar::rpc::connection)seastar::rpc::connectioninline
connection(const logger &l, void *s, connection_id id=invalid_connection_id) (defined in seastar::rpc::connection)seastar::rpc::connectioninline
deregister_this_stream() (defined in seastar::rpc::server::connection)seastar::rpc::server::connection
error() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
estimate_request_size(size_t serialized_size) (defined in seastar::rpc::server::connection)seastar::rpc::server::connectioninline
get_connection_id() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
get_logger() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
get_server() (defined in seastar::rpc::server::connection)seastar::rpc::server::connectioninline
get_server() const (defined in seastar::rpc::server::connection)seastar::rpc::server::connectioninline
get_stats() const (defined in seastar::rpc::server::connection)seastar::rpc::server::connectioninline
get_stats_internal() noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
get_stream(connection_id id) const (defined in seastar::rpc::connection)seastar::rpc::connection
handle_stream_frame() (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
info() (defined in seastar::rpc::server::connection)seastar::rpc::server::connectioninline
info() const (defined in seastar::rpc::server::connection)seastar::rpc::server::connectioninline
is_stream() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninlineprotected
max_request_size() const (defined in seastar::rpc::server::connection)seastar::rpc::server::connectioninline
outgoing_queue_length() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
peer_address() const override (defined in seastar::rpc::server::connection)seastar::rpc::server::connectioninlinevirtual
process() (defined in seastar::rpc::server::connection)seastar::rpc::server::connection
read_frame(socket_address info, input_stream< char > &in) (defined in seastar::rpc::connection)seastar::rpc::connection
read_frame_compressed(socket_address info, std::unique_ptr< compressor > &compressor, input_stream< char > &in) (defined in seastar::rpc::connection)seastar::rpc::connection
read_stream_frame_compressed(input_stream< char > &in) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
register_stream(connection_id id, xshard_connection_ptr c) (defined in seastar::rpc::connection)seastar::rpc::connection
respond(int64_t msg_id, snd_buf &&data, std::optional< rpc_clock_type::time_point > timeout, std::optional< rpc_clock_type::duration > handler_duration) (defined in seastar::rpc::server::connection)seastar::rpc::server::connection
send(snd_buf buf, std::optional< rpc_clock_type::time_point > timeout={}, cancellable *cancel=nullptr) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
send_buffer(snd_buf buf) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
send_entry(outgoing_entry &d) noexcept (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
send_negotiation_frame(feature_map features) (defined in seastar::rpc::connection)seastar::rpc::connection
serializer() (defined in seastar::rpc::connection)seastar::rpc::connectioninline
set_negotiated() noexcept (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
set_socket(connected_socket &&fd) (defined in seastar::rpc::connection)seastar::rpc::connection
sink_closed() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninline
stop() noexcept (defined in seastar::rpc::connection)seastar::rpc::connection
stop_send_loop(std::exception_ptr ex) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
stream_check_twoway_closed() const noexcept (defined in seastar::rpc::connection)seastar::rpc::connectioninlineprotected
stream_close() (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
stream_process_incoming(rcv_buf &&) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
stream_receive(circular_buffer< foreign_ptr< std::unique_ptr< rcv_buf > > > &bufs) (defined in seastar::rpc::connection)seastar::rpc::connection
suspend_for_testing(promise<> &p) (defined in seastar::rpc::connection)seastar::rpc::connectioninline
wait_for_resources(size_t memory_consumed, std::optional< rpc_clock_type::time_point > timeout) (defined in seastar::rpc::server::connection)seastar::rpc::server::connectioninline
withdraw(outgoing_entry::container_t::iterator it, std::exception_ptr ex=nullptr) (defined in seastar::rpc::connection)seastar::rpc::connectionprotected
~connection() (defined in seastar::rpc::connection)seastar::rpc::connectioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1rpc_1_1server_1_1connection.html b/master/classseastar_1_1rpc_1_1server_1_1connection.html new file mode 100644 index 000000000..9bb5bb687 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1server_1_1connection.html @@ -0,0 +1,360 @@ + + + + + + + +Seastar: seastar::rpc::server::connection Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::server::connection Class Reference
+
+
+
+Inheritance diagram for seastar::rpc::server::connection:
+
+
+ + +seastar::rpc::connection +seastar::enable_shared_from_this< connection > +seastar::shared_ptr_count_base + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

connection (server &s, connected_socket &&fd, socket_address &&addr, const logger &l, void *seralizer, connection_id id)
 
+future process ()
 
+future respond (int64_t msg_id, snd_buf &&data, std::optional< rpc_clock_type::time_point > timeout, std::optional< rpc_clock_type::duration > handler_duration)
 
+client_infoinfo ()
 
+const client_infoinfo () const
 
+stats get_stats () const
 
socket_address peer_address () const override
 
+future< resource_permitwait_for_resources (size_t memory_consumed, std::optional< rpc_clock_type::time_point > timeout)
 
+size_t estimate_request_size (size_t serialized_size)
 
+size_t max_request_size () const
 
+serverget_server ()
 
+const serverget_server () const
 
+future deregister_this_stream ()
 
+future abort_all_streams ()
 
+size_t outgoing_queue_length () const noexcept
 
+void set_socket (connected_socket &&fd)
 
+future send_negotiation_frame (feature_map features)
 
+bool error () const noexcept
 
+void abort ()
 
+future stop () noexcept
 
+future stream_receive (circular_buffer< foreign_ptr< std::unique_ptr< rcv_buf > > > &bufs)
 
+future close_sink ()
 
+bool sink_closed () const noexcept
 
+future close_source ()
 
+connection_id get_connection_id () const noexcept
 
+statsget_stats_internal () noexcept
 
+xshard_connection_ptr get_stream (connection_id id) const
 
+void register_stream (connection_id id, xshard_connection_ptr c)
 
+const loggerget_logger () const noexcept
 
+template<typename Serializer >
Serializer & serializer ()
 
+template<typename FrameType >
future< typename FrameType::return_type > read_frame (socket_address info, input_stream< char > &in)
 
+template<typename FrameType >
future< typename FrameType::return_type > read_frame_compressed (socket_address info, std::unique_ptr< compressor > &compressor, input_stream< char > &in)
 
+void suspend_for_testing (promise<> &p)
 
+shared_ptr< connectionshared_from_this () noexcept
 
+shared_ptr< const connectionshared_from_this () const noexcept
 
+long use_count () const noexcept
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

+void withdraw (outgoing_entry::container_t::iterator it, std::exception_ptr ex=nullptr)
 
+void set_negotiated () noexcept
 
+bool is_stream () const noexcept
 
+snd_buf compress (snd_buf buf)
 
+future send_buffer (snd_buf buf)
 
+future send (snd_buf buf, std::optional< rpc_clock_type::time_point > timeout={}, cancellable *cancel=nullptr)
 
+future send_entry (outgoing_entry &d) noexcept
 
+future stop_send_loop (std::exception_ptr ex)
 
+future< std::optional< rcv_buf > > read_stream_frame_compressed (input_stream< char > &in)
 
+bool stream_check_twoway_closed () const noexcept
 
+future stream_close ()
 
+future stream_process_incoming (rcv_buf &&)
 
+future handle_stream_frame ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

+connected_socket _fd
 
+input_stream< char > _read_buf
 
+output_stream< char > _write_buf
 
+bool _error = false
 
+bool _connected = false
 
+std::optional< shared_promise<> > _negotiated = shared_promise<>()
 
+promise _stopped
 
+stats _stats
 
+const logger_logger
 
+void * _serializer
 
+future _outgoing_queue_ready = _negotiated->get_shared_future()
 
+outgoing_entry::container_t _outgoing_queue
 
+size_t _outgoing_queue_size = 0
 
+std::unique_ptr< compressor_compressor
 
+bool _propagate_timeout = false
 
+bool _timeout_negotiated = false
 
+bool _handler_duration_negotiated = false
 
+bool _is_stream = false
 
+connection_id _id = invalid_connection_id
 
+std::unordered_map< connection_id, xshard_connection_ptr_streams
 
+queue< rcv_buf_stream_queue = queue<rcv_buf>(max_queued_stream_buffers)
 
+semaphore _stream_sem = semaphore(max_stream_buffers_memory)
 
+bool _sink_closed = true
 
+bool _source_closed = true
 
+future< bool > _sink_closed_future = make_ready_future<bool>(false)
 
+

Member Function Documentation

+ +

◆ peer_address()

+ +
+
+ + + + + +
+ + + + + + + +
socket_address seastar::rpc::server::connection::peer_address () const
+
+inlineoverridevirtual
+
+ +

Implements seastar::rpc::connection.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1server_1_1connection.png b/master/classseastar_1_1rpc_1_1server_1_1connection.png new file mode 100644 index 0000000000000000000000000000000000000000..f48da90a9fb05a199e30198547db9e4abf884580 GIT binary patch literal 1956 zcmb7F3s93+77iey)PQSAQKVs{sUQ%rN~t1GC6X)x5hy`|K$Ta3fKZWFAfn|Vp-unD zO63(Aso-E5K?vm`AO#tuks&FM7);QJ5kvxHgMkFIH}2Yy++amv z-_<-7jb9;r_5F5Mn`Yk3c=}A`&08k~&SZVVl+QlJ;TUkc9otSqj2L?9reh)XDB%t3 z``Z!waI1~j{XUq#GTecAITz3D;rY6JB z?h4(Ks!wGm5+^EO#Yc8VO1f$T8Phn-r9C|k{8+M69QqN*r8@S_;mLcPNouxC`EwLuI@AxM{!og@n9xkKDe4wrk1cW9y!4qY=9nUOXcUllN7$^pc!rR^TsqT$!! z!Z&|&s~x?T-_}+`(7N>>?Ha+-d?O`kIRhP%W$|EnKs#!C(QXi~*7X^@(>cg-u$5uA!wi_eAh}=C zH#F8D*;ss?SApaPVym&4?NV;5wReHOVLm++Ws9%tlaG~dGBh?*xrajlq~Ggn|IYbM z0_J}@dlI1c;lL9sZ<1iajB=DP+A&Bs)q%i00D(5^A`b-F>FF{H1`N9hQd0wp?V1_# zaYYS(vE;g#3D4tTrHVtV(;ZJ0X>si0DtAvRo>8`+v8=s}#jTvy#6l_Va#C+Ibg~xB zAEH0M<7(Mk`^f2Fu6ljlQ=VrLf8q7i+3{t!=eZ)5FT<@E4lU*le%rx}N>EOSS-lczpsn%B;LKpua~o(xaX z68v#1C>Knp48e)#M%Fd)5`~#HW8w9fS1l;ERcpk0LktBeCvv%y7FiyV^U7I`H{?;Y zhK3d?gTiE|*9!f+kH=&`Mmz}rcEu2SG^iEsvKpdrvG$NtZ*%q!bV9vSuC~E+$`PsE z!{f=EsJI(md6;@y!02zPE<1k1k%e09Zp_=zdrw5Y)VQQB86q=(sf#G;!8Ytzon^mn z6x{mt!vnScFF*+G53^jW#Tz$T@~b(QD<$V02S$=;yFVh!k2xOMJA8FY^ms9AP~cJYWVBFvCFCd>R0GU^=u8 z($|C)IQz!}g3+$O*FI4Bb$by$gyPvG|!i z;H71ifCq$Rfk*ZKZE0whCdJ1N1L0rShqgd0jGd1zIc}H>qGg@DkMuVxN(i~*D=66W zFO$qyY1B`x>Hj)T*CMn8XeLe9TV@+gzO}6_kJ~^# zQEz>pzBDzl%KfR@M85ksT!nNkeP0xZm*V=l!-MNQ(uKL{jBNFp1&k;=v)jd@=oWVW zK;Utu9POuTnLGa3F*m(ynE$PA|54IIpxo&|RP`~X)E35_CN)Ch0)DA5945f$=cCb= F{sH%|t`q + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::sink< Out > Member List
+
+
+ +

This is the complete list of members for seastar::rpc::sink< Out >, including all inherited members.

+ + + + + + +
close() (defined in seastar::rpc::sink< Out >)seastar::rpc::sink< Out >inline
flush() (defined in seastar::rpc::sink< Out >)seastar::rpc::sink< Out >inline
get_id() const (defined in seastar::rpc::sink< Out >)seastar::rpc::sink< Out >
operator()(const Out &... args) (defined in seastar::rpc::sink< Out >)seastar::rpc::sink< Out >inline
sink(shared_ptr< impl > impl) (defined in seastar::rpc::sink< Out >)seastar::rpc::sink< Out >inline
+ + + + diff --git a/master/classseastar_1_1rpc_1_1sink.html b/master/classseastar_1_1rpc_1_1sink.html new file mode 100644 index 000000000..029116a2b --- /dev/null +++ b/master/classseastar_1_1rpc_1_1sink.html @@ -0,0 +1,111 @@ + + + + + + + +Seastar: seastar::rpc::sink< Out > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::sink< Out > Class Template Reference
+
+
+ + + + +

+Classes

class  impl
 
+ + + + + + + + + + + +

+Public Member Functions

sink (shared_ptr< impl > impl)
 
+future operator() (const Out &... args)
 
+future close ()
 
+future flush ()
 
+connection_id get_id () const
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1sink_1_1impl-members.html b/master/classseastar_1_1rpc_1_1sink_1_1impl-members.html new file mode 100644 index 000000000..ae0510ccf --- /dev/null +++ b/master/classseastar_1_1rpc_1_1sink_1_1impl-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::sink< Out >::impl Member List
+
+
+ +

This is the complete list of members for seastar::rpc::sink< Out >::impl, including all inherited members.

+ + + + + + + + + + +
_con (defined in seastar::rpc::sink< Out >::impl)seastar::rpc::sink< Out >::implprotected
_ex (defined in seastar::rpc::sink< Out >::impl)seastar::rpc::sink< Out >::implprotected
_sem (defined in seastar::rpc::sink< Out >::impl)seastar::rpc::sink< Out >::implprotected
close()=0 (defined in seastar::rpc::sink< Out >::impl)seastar::rpc::sink< Out >::implpure virtual
flush()=0 (defined in seastar::rpc::sink< Out >::impl)seastar::rpc::sink< Out >::implpure virtual
impl(xshard_connection_ptr con) (defined in seastar::rpc::sink< Out >::impl)seastar::rpc::sink< Out >::implinlineprotected
operator()(const Out &... args)=0 (defined in seastar::rpc::sink< Out >::impl)seastar::rpc::sink< Out >::implpure virtual
sink (defined in seastar::rpc::sink< Out >::impl)seastar::rpc::sink< Out >::impl
~impl() (defined in seastar::rpc::sink< Out >::impl)seastar::rpc::sink< Out >::implinlinevirtual
+ + + + diff --git a/master/classseastar_1_1rpc_1_1sink_1_1impl.html b/master/classseastar_1_1rpc_1_1sink_1_1impl.html new file mode 100644 index 000000000..83376278e --- /dev/null +++ b/master/classseastar_1_1rpc_1_1sink_1_1impl.html @@ -0,0 +1,134 @@ + + + + + + + +Seastar: seastar::rpc::sink< Out >::impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::sink< Out >::impl Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::rpc::sink< Out >::impl:
+
+
+ + +seastar::rpc::sink_impl< Serializer, Out > + +
+ + + + + + + + +

+Public Member Functions

+virtual future operator() (const Out &... args)=0
 
+virtual future close ()=0
 
+virtual future flush ()=0
 
+ + + +

+Public Attributes

+friend sink
 
+ + + +

+Protected Member Functions

impl (xshard_connection_ptr con)
 
+ + + + + + + +

+Protected Attributes

+xshard_connection_ptr _con
 
+semaphore _sem
 
+std::exception_ptr _ex
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1sink_1_1impl.png b/master/classseastar_1_1rpc_1_1sink_1_1impl.png new file mode 100644 index 0000000000000000000000000000000000000000..95086f7663c7d2a7fc7fadce9896a6132ebcbb0e GIT binary patch literal 860 zcmeAS@N?(olHy`uVBq!ia0vp^pMW@kgBeJQB;6IWntzSEJer?w)#+|K+6&q)p8Y`|5%e~j| z=gYdLk_ESevnq0q%-mWhDVVGvX6Y)Sv!#8n=xc_U7kouew45#_&+c6td?oRCf$0bF z6W30?`%x`at*`SjTs2cFURnI5%*5!ct9lm|KYV-QR`xOD&by5-|n0V zr?-c$Shc(`=;*oYSD2bFzqKvjx$cIQ_TwEl1cNt*#%A9z+kZN1s&GW`AI5cGn%)~Z zMCX_AJ}Jwe+sgC7%D02(!}l#9pE|Kg#QqMyWBEKy=s@}xh8fC=2YvnQ6C1!NsMbrs~#RLWRtGwU)zeDa`^?%NXt}bbpoWukrW4R+; zQc6k{tOX~|K2_XxlQ;a^#M}Q|T(%#&8ETSNcleL*iNBlA{!Xs2dTu3R{onh^^Jgu# zUiJ&6kKa6c@9w{?TR#=cxW5x!E;8@QcVCUIj}n*7X>DGU>~;C7kZG|K-@Pq+El%p{ z%xOPQi>^{Bwx)5Vsb$Sh1*VO=)*; z=#`%zwt77|cAGn8Ylr6>+w@2I8>_t5Xg^V!yL-axJKQIu8*JZCUvx#x_JpQL?7mH| zWvN2DnRmMFDn9j5AlS()FDi2JzWP(OYcGqY9k(g z(Yr2cotC=h#?`(VU2FT-Y|EWfv^r_|`>a*RH8%!t+%CHNPswqmwHz)kTl?N`>hOrR z|CRLrO|ibxuDgZbtWUVFG?f15^(1;9n`Nrt#JIm4kuFdEUq%FI?umQV_EY~c$}Kix V`RgRQ4VV=eJYD@<);T3K0RT`5qNxA? literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1sink__impl-members.html b/master/classseastar_1_1rpc_1_1sink__impl-members.html new file mode 100644 index 000000000..4af88bdae --- /dev/null +++ b/master/classseastar_1_1rpc_1_1sink__impl-members.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::sink_impl< Serializer, Out > Member List
+
+ + + + + diff --git a/master/classseastar_1_1rpc_1_1sink__impl.html b/master/classseastar_1_1rpc_1_1sink__impl.html new file mode 100644 index 000000000..4276e4f7e --- /dev/null +++ b/master/classseastar_1_1rpc_1_1sink__impl.html @@ -0,0 +1,212 @@ + + + + + + + +Seastar: seastar::rpc::sink_impl< Serializer, Out > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::sink_impl< Serializer, Out > Class Template Reference
+
+
+
+Inheritance diagram for seastar::rpc::sink_impl< Serializer, Out >:
+
+
+ + +seastar::rpc::sink< Out >::impl + +
+ + + + + + + + + + +

+Public Member Functions

sink_impl (xshard_connection_ptr con)
 
future operator() (const Out &... args) override
 
future close () override
 
future flush () override
 
+ + + +

+Public Attributes

+friend sink
 
+ + + + + + + +

+Protected Attributes

+xshard_connection_ptr _con
 
+semaphore _sem
 
+std::exception_ptr _ex
 
+

Member Function Documentation

+ +

◆ close()

+ +
+
+
+template<typename Serializer , typename... Out>
+ + + + + +
+ + + + +
future seastar::rpc::sink_impl< Serializer, Out >::close
+
+overridevirtual
+
+
+ +

◆ flush()

+ +
+
+
+template<typename Serializer , typename... Out>
+ + + + + +
+ + + + +
future seastar::rpc::sink_impl< Serializer, Out >::flush
+
+overridevirtual
+
+
+ +

◆ operator()()

+ +
+
+
+template<typename Serializer , typename... Out>
+ + + + + +
+ + + + + + + + +
future seastar::rpc::sink_impl< Serializer, Out >::operator() (const Out &... args)
+
+overridevirtual
+
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1sink__impl.png b/master/classseastar_1_1rpc_1_1sink__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..08739b2dfd5194b17614e53003f8208187e1667e GIT binary patch literal 854 zcmeAS@N?(olHy`uVBq!ia0vp^pMW@kgBeJQB;6Br>0MHxvI^ z7hR~RG@20aWXE@RkNxWhZ%>@>?fytKByCuT{pQ(ow5v#ztP{mQpPjpup45k3(*Cpz>; z_VSu{(Pbx|W{9q;++-1b^xXWF?9-ZZ=l`7cx+{0H(bsO-Lebk-wzlPdjx&oZONjkA zeTnkkhjG)EY>V5yQT64Vbw4FfO!{JXS0HlIzj&=B}v>b?*EP z)i3K#^dEma<9)l0@crJOZ6_8dF@IU#$a7&gn~}qNsS^x)vlW=XtRp1wXMz*Q!#E{| zJD$vv3(9#@8t#=c{j{#0^ju`KwD-^OY)@7nZ87VvV`uZL{&0Nyc{8u(?Ync9d`Hj! z7y7x=vao;K{2w!ZRdzlt{I~sD+T5=epMnd$KKjb#J4yDho*Ahlmm+)F?Cy>gGq-aV znr8beY=2=<9)7?2TG@u4jJmyBl8SESf4=f5YrzIUfJ)}BgudH}K|I^O=n~J+NY(hW&3_Wo+|EALJSlzIDo^O=i zFK)k^zjNIUP3_>L>&lLV=2WL_&3!y2TC{q1`1Yzjs^7xi)E?Da|1M++FJr>3&T7d8 zYp3VExxTLYz&7pfzdWC!vhK9)7yfxEYVI7P1Ce`Mcs~5kgoS$A69K0kQ~xpY%`z4| U^YJ)8FcUC%y85}Sb4q9e04_zQn*aa+ literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1source-members.html b/master/classseastar_1_1rpc_1_1source-members.html new file mode 100644 index 000000000..90a16d7da --- /dev/null +++ b/master/classseastar_1_1rpc_1_1source-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::source< In > Member List
+
+
+ +

This is the complete list of members for seastar::rpc::source< In >, including all inherited members.

+ + + + + +
get_id() const (defined in seastar::rpc::source< In >)seastar::rpc::source< In >
make_sink() (defined in seastar::rpc::source< In >)seastar::rpc::source< In >
operator()() (defined in seastar::rpc::source< In >)seastar::rpc::source< In >inline
source(shared_ptr< impl > impl) (defined in seastar::rpc::source< In >)seastar::rpc::source< In >inline
+ + + + diff --git a/master/classseastar_1_1rpc_1_1source.html b/master/classseastar_1_1rpc_1_1source.html new file mode 100644 index 000000000..e22dd6d9b --- /dev/null +++ b/master/classseastar_1_1rpc_1_1source.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: seastar::rpc::source< In > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::source< In > Class Template Reference
+
+
+ + + + +

+Classes

class  impl
 
+ + + + + + + + + + +

+Public Member Functions

source (shared_ptr< impl > impl)
 
+future< std::optional< std::tuple< In... > > > operator() ()
 
+connection_id get_id () const
 
+template<typename Serializer , typename... Out>
sink< Out... > make_sink ()
 
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1source_1_1impl-members.html b/master/classseastar_1_1rpc_1_1source_1_1impl-members.html new file mode 100644 index 000000000..96f69fd51 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1source_1_1impl-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::source< In >::impl Member List
+
+
+ +

This is the complete list of members for seastar::rpc::source< In >::impl, including all inherited members.

+ + + + + + + +
_bufs (defined in seastar::rpc::source< In >::impl)seastar::rpc::source< In >::implprotected
_con (defined in seastar::rpc::source< In >::impl)seastar::rpc::source< In >::implprotected
impl(xshard_connection_ptr con) (defined in seastar::rpc::source< In >::impl)seastar::rpc::source< In >::implinlineprotected
operator()()=0 (defined in seastar::rpc::source< In >::impl)seastar::rpc::source< In >::implpure virtual
source (defined in seastar::rpc::source< In >::impl)seastar::rpc::source< In >::impl
~impl() (defined in seastar::rpc::source< In >::impl)seastar::rpc::source< In >::implinlinevirtual
+ + + + diff --git a/master/classseastar_1_1rpc_1_1source_1_1impl.html b/master/classseastar_1_1rpc_1_1source_1_1impl.html new file mode 100644 index 000000000..a93257f5e --- /dev/null +++ b/master/classseastar_1_1rpc_1_1source_1_1impl.html @@ -0,0 +1,125 @@ + + + + + + + +Seastar: seastar::rpc::source< In >::impl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::source< In >::impl Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::rpc::source< In >::impl:
+
+
+ + +seastar::rpc::source_impl< Serializer, In > + +
+ + + + +

+Public Member Functions

+virtual future< std::optional< std::tuple< In... > > > operator() ()=0
 
+ + + +

+Public Attributes

+friend source
 
+ + + +

+Protected Member Functions

impl (xshard_connection_ptr con)
 
+ + + + + +

+Protected Attributes

+xshard_connection_ptr _con
 
+circular_buffer< foreign_ptr< std::unique_ptr< rcv_buf > > > _bufs
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1source_1_1impl.png b/master/classseastar_1_1rpc_1_1source_1_1impl.png new file mode 100644 index 0000000000000000000000000000000000000000..cc2119815ca49517884072410789e7b68807a5cc GIT binary patch literal 861 zcmeAS@N?(olHy`uVBq!ia0vp^KY=)agBeJ^X;N+hQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;)rIfGKUd7= z4E-wqlmAZnufVyBK5f|(cz*YFubkb?78k9bWKH~~@pbRFAn&Xy1G}=jZ_EE`8_TEp zDcme#uk2j%e0|Jq*zsr*^PkPLo-k}QImwvxvhvsRDM1d5HNN}}6S%zpRk*nFd+%#t zckTDKE4Fqp@hxhIfT_)##C+ruER-h8C`?ncbkIRl@Td0aoX^|8oUnYJ->IV{6fil) zMP-`W&JGWqSOtG2CG*S&Z{?RhRae^e<@eHWRTanc_xtE6J$kY$I-kG2z-pWJliO#e zapr-8`XxN54SHYiUK^NeFSSeR(5*FQ_vZXowmos{V8{N6;{9@to-Wfb#qN)-w#mw^ z&2s*`;`^??GrO+-4BmQCprrctq0$RgA@5Cge!3pL;{NWFR}AucZGKMl6}sr^zq)(T z#?ZI5AFc(gkjuX6`rA0~)zvRI7k_WL(^G5`GkN2r4n6mSkxI92DL=dZZL#~iUvfWx1k?(?JzTr)XePM>d{pSa`xzn<0IvFBR<30If8wczmdEfSm<5p|;YoaLf_ Z4Eu|W3;b@%`~&6%22WQ%mvv4FO#sLYt=j+q literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1source__impl-members.html b/master/classseastar_1_1rpc_1_1source__impl-members.html new file mode 100644 index 000000000..77e91f8f0 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1source__impl-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::source_impl< Serializer, In > Member List
+
+
+ +

This is the complete list of members for seastar::rpc::source_impl< Serializer, In >, including all inherited members.

+ + + + + + + + +
_bufs (defined in seastar::rpc::source< In >::impl)seastar::rpc::source< In >::implprotected
_con (defined in seastar::rpc::source< In >::impl)seastar::rpc::source< In >::implprotected
impl(xshard_connection_ptr con) (defined in seastar::rpc::source< In >::impl)seastar::rpc::source< In >::implinlineprotected
operator()() override (defined in seastar::rpc::source_impl< Serializer, In >)seastar::rpc::source_impl< Serializer, In >virtual
source (defined in seastar::rpc::source< In >::impl)seastar::rpc::source< In >::impl
source_impl(xshard_connection_ptr con) (defined in seastar::rpc::source_impl< Serializer, In >)seastar::rpc::source_impl< Serializer, In >inline
~impl() (defined in seastar::rpc::source< In >::impl)seastar::rpc::source< In >::implinlinevirtual
+ + + + diff --git a/master/classseastar_1_1rpc_1_1source__impl.html b/master/classseastar_1_1rpc_1_1source__impl.html new file mode 100644 index 000000000..343cc0ed6 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1source__impl.html @@ -0,0 +1,148 @@ + + + + + + + +Seastar: seastar::rpc::source_impl< Serializer, In > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::source_impl< Serializer, In > Class Template Reference
+
+
+
+Inheritance diagram for seastar::rpc::source_impl< Serializer, In >:
+
+
+ + +seastar::rpc::source< In >::impl + +
+ + + + + + +

+Public Member Functions

source_impl (xshard_connection_ptr con)
 
future< std::optional< std::tuple< In... > > > operator() () override
 
+ + + +

+Public Attributes

+friend source
 
+ + + + + +

+Protected Attributes

+xshard_connection_ptr _con
 
+circular_buffer< foreign_ptr< std::unique_ptr< rcv_buf > > > _bufs
 
+

Member Function Documentation

+ +

◆ operator()()

+ +
+
+
+template<typename Serializer , typename... In>
+ + + + + +
+ + + + +
future< std::optional< std::tuple< In... > > > seastar::rpc::source_impl< Serializer, In >::operator()
+
+overridevirtual
+
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1source__impl.png b/master/classseastar_1_1rpc_1_1source__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..a14ca3f4c285b14938cdf457e1fdbad44d25345f GIT binary patch literal 853 zcmeAS@N?(olHy`uVBq!ia0vp^KY=)agBeJ^X;N+hQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;p^3xLMHu|C5)u z#=H@TS{1yk_*mxVqi1hKZcL7goR-R|Ddx$w!c)(4qsd8C&1rTH^Hg4X*>W3Hloi?S zpBppDs&(>X~iU!Xu2FZ9`;-0H^e^2`P zw-562wG;h*PyZ#p>-(Fvn_Pb8)g`?%kJsMFukNY;g>R>4(Cnpqw>kQH-3^%|KfnBc zT=nU-?a{)TKMPqa*DX1&FaO%M`0uPcdz4ixuX3#0R{kW`HpVw^@2p981otS(hwVQ9 z(_nr4>7P4m?@j!@+}S>Mx%I8*k4+~|lD+=sb8Y_m%jaqX4$|>0^6Xk_{d1F!w+my9uX)1+ zF7LYCuCDyvb?p3Ia?@+Rl{I9{dcpt<9mb^0Nz6wssjzn}_2d)qo-Cs6jP-0}c0#mGhVtvf4#`piO-D+brzV-F*o1b6$=GV=XSr9Cqx7TLQA%3;{ zC$>*L%N@i2b4!f5fB)s*_oLqbHIbA*x5MUkPuJg!S7}_UBMtA_Y>&2^8QmaQZ+hA; zidA)ka(njl>?6wA@0Uy5iq?H)W&D2an)#N}z6Wnrck4M!zbCu%WB&FDh99~!6L-mc zed3-cbR%*4*42wPt`@5Oa3yd?N2%bSBAZvsWMa>R?bSbV*T(&FsjPORtozZK+P8Mz zE?f99SGVt^uVAlKs`0y3e_4KRxK(?u`f|FZzGm)9sgT{-&F`Q6xnuYK#O@o)_O&bR zR(^YExBW@A`Q5Pk$hV7Y_q~5xdTXbCf6z_SPt(?aE8K9^;@#WQo~r7<^RAzZUA?zX z?AN__+zC&<-1#n(u;zT-OZ!)Ew{F&-xc=^n*D3Q=>>s|aKWllQ_-}{IgX>waz_+gS d(saEd@6T#d``qA%8!!(rc)I$ztaD0e0sx>$q3r+w literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1stream__closed-members.html b/master/classseastar_1_1rpc_1_1stream__closed-members.html new file mode 100644 index 000000000..4a38d1b28 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1stream__closed-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::stream_closed Member List
+
+
+ +

This is the complete list of members for seastar::rpc::stream_closed, including all inherited members.

+ + + +
error(const std::string &msg) (defined in seastar::rpc::error)seastar::rpc::errorinline
stream_closed() (defined in seastar::rpc::stream_closed)seastar::rpc::stream_closedinline
+ + + + diff --git a/master/classseastar_1_1rpc_1_1stream__closed.html b/master/classseastar_1_1rpc_1_1stream__closed.html new file mode 100644 index 000000000..bf5e4bfbe --- /dev/null +++ b/master/classseastar_1_1rpc_1_1stream__closed.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: seastar::rpc::stream_closed Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::stream_closed Class Reference
+
+
+
+Inheritance diagram for seastar::rpc::stream_closed:
+
+
+ + +seastar::rpc::error + +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1stream__closed.png b/master/classseastar_1_1rpc_1_1stream__closed.png new file mode 100644 index 0000000000000000000000000000000000000000..54ed14f0bdd43d22da1afa2a6502fbe64fe3dcc6 GIT binary patch literal 1147 zcmeAS@N?(olHy`uVBq!ia0vp^OM&= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IYLxIA4PLn;{G&V4&=lNFC!`J*Vi@Ab#o zpDfm05j^(=ce>HxX=Y}rmxcax&%F8Ypvub!OO~n}oiJ^Z$l>T|#izJu9=>pY&9Uz~ zsxM>Xwr(j5UDp5VQgBM-mW`X|v;`KwxVAcJ(v{QQ)6}Lees?0I?^jAtZHS@gt0$$W z-4?klUz#P~{@h%_bMBtakE>6A%+Izw`mgutv!>fwTGczFFX>0k3h6uBcmC?-k1=(b z$FEDpulwoTtDoPZ`t7Ie^d)skY5u1_M|fR&@9FK?rKqc_*>>>KnKv&OSc+LKY?g1> z6L)?=CD&=kPb{;ZZ#W~x-l3$+nB?KzAaO}Zp=}FGhazt7{_M=OvI+xFD~n7`PeYK8 zFXUVHSDV%RcxU`wCRfw*V@c$#9Uhn6Q;oJAzn9B8T`@RaY~Rz6%{~W>mT`GpO0LrJ z)jEDFYF2K^zNuHY>{~f0?71JKXO++L)XEp{Vz$}M43Yod?!8RRv&!jv-~MFFe^;gV zol%|{rSg(aX&kpnX;8iG(mQKEPKv%Y z>C22it!q{-dz`E6*?(f|lqC|Ef+hhy=-HLH!Nl0wis4`kBj0&Vo%Pp^Gv*yCnqbrT z%u;9bF~&v2g#j>x9=?x?)0=+!;loGo>IyDhx@+6ErKG(7VfeIX@BZ=rv!7PBdE?p4 zJiWh*Y|PsKSA8+^m$a&VQ*`(4`wNMcvp<^!7H1urTzd76T5g*jv)6&Ue-&$|oi5p0 zc6ohx^4=fMCa!q&?wRhpcl|H#eM~IB_E~E6FWG5dFI1fV)s%Yetl77>ZKxh?!h&DXp9yM$fJ%Xe}fQM+~@ zpD^v+J42pn(@#GwDq(2a$s{u`I3jL+`URWTrwWx!XNx1!dYN4&PGc}!qUykt$tmC* z#dKr>PVV9RTYu zr?^9T&hnA>rdNF3c_(7qeY+iNtNZWnKL2#zvFU-{7vJS21wRhGxMu3*bKAGp>^;U9 z_cYr+`u~wnVRB!s#U4o3C+ITnbAo!iM?cMYbMt5UKQ@o~f3E+N4lF4cJYD@<);T3K F0RU%MGmroP literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1streaming__domain__type-members.html b/master/classseastar_1_1rpc_1_1streaming__domain__type-members.html new file mode 100644 index 000000000..b2131c387 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1streaming__domain__type-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::streaming_domain_type Member List
+
+
+ +

This is the complete list of members for seastar::rpc::streaming_domain_type, including all inherited members.

+ + + + +
operator<< (defined in seastar::rpc::streaming_domain_type)seastar::rpc::streaming_domain_typefriend
operator==(const streaming_domain_type &o) const (defined in seastar::rpc::streaming_domain_type)seastar::rpc::streaming_domain_typeinline
streaming_domain_type(uint64_t id) (defined in seastar::rpc::streaming_domain_type)seastar::rpc::streaming_domain_typeinlineexplicit
+ + + + diff --git a/master/classseastar_1_1rpc_1_1streaming__domain__type.html b/master/classseastar_1_1rpc_1_1streaming__domain__type.html new file mode 100644 index 000000000..25025ab91 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1streaming__domain__type.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: seastar::rpc::streaming_domain_type Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::streaming_domain_type Class Reference
+
+
+ + + + + + +

+Public Member Functions

streaming_domain_type (uint64_t id)
 
+bool operator== (const streaming_domain_type &o) const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1timeout__error-members.html b/master/classseastar_1_1rpc_1_1timeout__error-members.html new file mode 100644 index 000000000..80f11f1a8 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1timeout__error-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::timeout_error Member List
+
+
+ +

This is the complete list of members for seastar::rpc::timeout_error, including all inherited members.

+ + + +
error(const std::string &msg) (defined in seastar::rpc::error)seastar::rpc::errorinline
timeout_error() (defined in seastar::rpc::timeout_error)seastar::rpc::timeout_errorinline
+ + + + diff --git a/master/classseastar_1_1rpc_1_1timeout__error.html b/master/classseastar_1_1rpc_1_1timeout__error.html new file mode 100644 index 000000000..8f42eba06 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1timeout__error.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: seastar::rpc::timeout_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::timeout_error Class Reference
+
+
+
+Inheritance diagram for seastar::rpc::timeout_error:
+
+
+ + +seastar::rpc::error + +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1timeout__error.png b/master/classseastar_1_1rpc_1_1timeout__error.png new file mode 100644 index 0000000000000000000000000000000000000000..221dc96b09d3383ce83175722463100cb62f5048 GIT binary patch literal 1141 zcmeAS@N?(olHy`uVBq!ia0vp^^MUvP2Q!e=m3908q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IYLSUg=ELn;{G&dr>5$byH>`;qOw-}ft+ zBKK@y6_hx?WmoXWCSCC|k$*{PW(G4|0d5OjQ-@1?Q&oJZV%|F!tM@92U zbY0oa&YxkrR^Qi1mu9XxYLfMG*S1x5p0|!#*Qrfiop&N+-7bTb`#>UxXV;zmw6y%* zyl)@oulBwqchByA^#0TF@6Esey|q4i)%oc~Mdr7E2-{CSb#?ChN%Ge7_OGA+e%k)m zS^A&K&wktbe)e;1&)=2`B_OA)|K)k9eaU>4qn`GjUB*9W&g|trFmVneTUx>X&y_g` z5B^o#yO7oW`{_TdKU%&pcTBEhD7?h4;P;F1h^Kvn#Y=Vp^}h^{mdHEIK}epP|Jm4B zTEb^io9bT`O+Sz=bL&noNKamVe&2^s{;!jlG*`Y&pWZt&f9m0-b(yi{xw1y)Vpm_! z(K>Y}@>q!Mq%RHAfnLsDz4q$1@}EMplmC{U+EVrIj-n_3jmP0~>#Vu2wR(Ont>2N7 zHF1gi8|(WW_n)q}yJy-5;h*dmm;O}oKX3B$3SbD7J`T5Uo3!=1{`vCL_p4s23BT%p zu37$h`x)I*&#D9R|7&+YJG#2OL&f${|NHqWwJxyenLK~y%^eIfCnXaS*uGoOKQ1P7 zC;yUkR6)u9Gw}`n9=QCD7BGJ-_g{WlA|>JX?%m-@b?@F4UOIo**6+^wJ9qb=tG{=C zo!m81@6ufHo8G0r*1NASJayq`nep|zd!J9eZ+gqrCD`Qd=KRpN>ZQ)t8J8Zu``6C; z&ozgw1((;ACq!?nW>{5M{#mU2J3BB0Ug~TsdcFFV^`BP@-G5#6o?3Bt;oIB$*VSTVV`Pi3#x48eIxZJ+$ zOL2MsWROeMz%CbWP_|^|IrE_I`R5x=&A)xCoVoknP5;ULffH-gqj?{cF6^JD15>`l zfep|^vib1)z4`{dc1DlP|1iuG`ZPPv^z-cvn$uq0(p#v1_2quKy^s3_vU_>-PhaS|CH9f zUB3HV`Q5WOeqMXIjpg>FA8A|l>b=uUivDsZ^4@;>zHGIX-QT}I4*H+p|D^nEca}8c ryHES?**EAzv%$HiqS + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::tuple< T > Member List
+
+
+ +

This is the complete list of members for seastar::rpc::tuple< T >, including all inherited members.

+ + +
tuple(std::tuple< T... > &&x) (defined in seastar::rpc::tuple< T >)seastar::rpc::tuple< T >inline
+ + + + diff --git a/master/classseastar_1_1rpc_1_1tuple.html b/master/classseastar_1_1rpc_1_1tuple.html new file mode 100644 index 000000000..92a5828d1 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1tuple.html @@ -0,0 +1,105 @@ + + + + + + + +Seastar: seastar::rpc::tuple< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::tuple< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename... T>
+class seastar::rpc::tuple< T >

Used to return multiple values in rpc without variadic futures

+

If you wish to return multiple values from an rpc procedure, use a signature future<rpc::tuple<return type list> (argument list)>>. This will be marshalled by rpc, so you do not need to have your Serializer serialize/deserialize this tuple type. The serialization format is compatible with the deprecated variadic future support, and is compatible with adding new return types in a backwards compatible way provided new parameters are appended only, and wrapped with rpc::optional: future<rpc::tuple<existing return type list, rpc::optional<new_return_type>>> (argument list)

+

You may also use another tuple type, such as std::tuple. In this case, your Serializer type must recognize your tuple type and provide serialization and deserialization for it.

+
+

#include <seastar/rpc/rpc_types.hh>

+
+Inheritance diagram for seastar::rpc::tuple< T >:
+
+
+ +
+ + + + +

+Public Member Functions

tuple (std::tuple< T... > &&x)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1tuple.png b/master/classseastar_1_1rpc_1_1tuple.png new file mode 100644 index 0000000000000000000000000000000000000000..8e4e97ee887bdce565738624742563f4afd2794c GIT binary patch literal 574 zcmeAS@N?(olHy`uVBq!ia0vp^eLx(*!3-pSi0@4WQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;XUSwVocI{N zWuBibuFPCC+qq`aZr`sjE3@WW>ujCtQWJH2Nt932bl>Qx+NE3VKYnDJ_d;Z4+Gek^ zs<~;p<-+~n9_MUc_wvl~ZPCva{Jvj38Tjt|BL(Z(rFL^=CuhAZxy1PY?B>a4tM9CF zd-Ce6maWRmDc1W>#s9G7m-YPAQD5Tui37-x@IQVgM}oobAajDuu}hUUZJ#8)pJy6R zI-g)wxS65GiT!|b34;v*>hb(nAaAl6a4lqhAZW!PCtecw`R z^P^c)PKQ^W`D%6Y%a1>6s-GWUY1A8e@7xo%{6pex85$>4oMmZ>KEc ze*gDP$?l?QbF+9^e6`@t>dg#sPb*$n3%Bz%xc^zq lT+zbUaJ<4QE$#3JW~JCrE}4}}KLI0~!PC{xWt~$(69DFG3jhEB literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1rpc_1_1unknown__exception__error-members.html b/master/classseastar_1_1rpc_1_1unknown__exception__error-members.html new file mode 100644 index 000000000..9ab3705c8 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1unknown__exception__error-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::unknown_exception_error Member List
+
+
+ +

This is the complete list of members for seastar::rpc::unknown_exception_error, including all inherited members.

+ + + +
error(const std::string &msg) (defined in seastar::rpc::error)seastar::rpc::errorinline
unknown_exception_error() (defined in seastar::rpc::unknown_exception_error)seastar::rpc::unknown_exception_errorinline
+ + + + diff --git a/master/classseastar_1_1rpc_1_1unknown__exception__error.html b/master/classseastar_1_1rpc_1_1unknown__exception__error.html new file mode 100644 index 000000000..5bc338086 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1unknown__exception__error.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: seastar::rpc::unknown_exception_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::unknown_exception_error Class Reference
+
+
+
+Inheritance diagram for seastar::rpc::unknown_exception_error:
+
+
+ + +seastar::rpc::error + +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1unknown__exception__error.png b/master/classseastar_1_1rpc_1_1unknown__exception__error.png new file mode 100644 index 0000000000000000000000000000000000000000..cd6d2b500647cfd61494b341f8d51dba14f9d28e GIT binary patch literal 1266 zcmeAS@N?(olHy`uVBq!ia0vp^&w=;=2Q!d7(cCfzNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?!gGkKA)zeO&>QNW}6Je}>XQ@GaTUhYbtxsO5yfodCie<1P3=K9}5`=&1WTl3=MOHEJt1>*jmzZih5LJxn>uEP%^y)-{E{xC^z z;Cpf8bIm*FEyCv=H*;T%voXHUTUBUU-@1owo=Y~-apf+ zUe$jd?Th`iHax?q?|K8ot9z1E^H2n{Ip3PU@Cp)R6KL!{c&agN$ zsF)VyRl{I+R&oKe)kmB8zXjeNDZcQ=X^Z&zGus&^5)~k@@cN+UxBT)-W{a6KTh(pP zo&g3;T3TVn`gB9%-&~h2pUF{w`YJeV`pYuC@Rz6Ges~{!{_&M%k6$iZKl7%s%)`pw zS5jWZnXBCM%Xh!ql4WJSLNqPyeDQ?mG84q}Pu00j`w%XD`|51bY(wMf#>d~@Za6;e zbAsxR;P9M-z8$C(v4 z$8X)CGjA&I{r+oWeEZqu_-kKGjH~7MR?M1NI|<0_cCMN=^JwA+o4J0=e=yX{GIn4u zc~oilUGY}u^946sGxX=p%x6@ZNNhR*15hULe9 z8~QgaUor2ndfJ~^W}tAno*tXmUVp!e^O@Dh>$?g$XO#tSeH~~2WO8@)1CvuShk;q= z*16z@$18g)I&1neN;6j-Kfd#Jsd{(>Px#$E>6-=3-6MI+qOX_DQ!5w!cga`eeA^6Jw_kKvn3{Z_Z}r}ozsAo$S=(Mezorxzk`4W~wI{Y7 z&AR_@^YdMIL(KQOzgEqZ+p%>`|Fz + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::rpc::unknown_verb_error Member List
+
+
+ +

This is the complete list of members for seastar::rpc::unknown_verb_error, including all inherited members.

+ + + + +
error(const std::string &msg) (defined in seastar::rpc::error)seastar::rpc::errorinline
type (defined in seastar::rpc::unknown_verb_error)seastar::rpc::unknown_verb_error
unknown_verb_error(uint64_t type_) (defined in seastar::rpc::unknown_verb_error)seastar::rpc::unknown_verb_errorinline
+ + + + diff --git a/master/classseastar_1_1rpc_1_1unknown__verb__error.html b/master/classseastar_1_1rpc_1_1unknown__verb__error.html new file mode 100644 index 000000000..24b471d68 --- /dev/null +++ b/master/classseastar_1_1rpc_1_1unknown__verb__error.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: seastar::rpc::unknown_verb_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::rpc::unknown_verb_error Class Reference
+
+
+
+Inheritance diagram for seastar::rpc::unknown_verb_error:
+
+
+ + +seastar::rpc::error + +
+ + + + +

+Public Member Functions

unknown_verb_error (uint64_t type_)
 
+ + + +

+Public Attributes

+uint64_t type
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1rpc_1_1unknown__verb__error.png b/master/classseastar_1_1rpc_1_1unknown__verb__error.png new file mode 100644 index 0000000000000000000000000000000000000000..81a9231cd655cf1c0280cc0890bd1231bc22f83a GIT binary patch literal 1214 zcmeAS@N?(olHy`uVBq!ia0vp^r-AqY2Q!eI`zZYokdg@S332`Z|38rV;?396{zDUh zEHFNB-~emq9eE&^qa?^Lm;tB=1g@S6F=Aj~@%40Z45?szJNNaZ)d~V^vpqxieXoDK z_~Ri5o85-f&x)At-gby(ikrm$ATP~khlxuRJ;Xh`+;@2d+1z`&>E6>LXO}I@pLcBi zE{{vnmCfEW(<>}@GU`oy%X((&TcfQ}&f8~odtTz+^Dbyf)sL>OR}b}FKeYozKJPiY zR5Ghq@A5sp1M^K)Usm4Ra_n8~v;Fr{J6+3Owq1SRw5#e}oWI3%rK^jhlV9JfPuSlQ zm0T@%+wGgT-0e;G#JV>fQ+Ziv_w7K*#3jomPr6RBa{{^PlIx^LhC8POoswXvnWud~ zf#*rl-acjH38$AB^_=n0n|Yi;X_6kpM-TCaiY43*HkVix(q8!Wc zXd;UA1Cgauj5tI*rJ8{DR4nOMIr><2`qtO}r5# z*A4OCXRNk=@Mw13>7)Fs?RH07^zWVi_m}GQF^s@l~=xyG3^0j8K1fT+*s+XLX9OW!9y&8(*${ zd)@ZgEBTU}_Y-SFo`rZwuZ0bmQWJn&q=ZeoZUae8oO}+r>h;+x~hVUX}mf zx}N<&^v`{#bG^+!^Z$5!ovkp2;of0yJ%&bDMtXKWP;)8IL3_{rlBwrTS9}E)HVmGw KelF{r5}E+kVO5m? literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1scattered__message-members.html b/master/classseastar_1_1scattered__message-members.html new file mode 100644 index 000000000..683504c01 --- /dev/null +++ b/master/classseastar_1_1scattered__message-members.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::scattered_message< CharType > Member List
+
+
+ +

This is the complete list of members for seastar::scattered_message< CharType >, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
append(std::string_view v) (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >inline
append(temporary_buffer< CharType > buff) (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >inline
append(basic_sstring< char_type, size_type, max_size > s) (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >inline
append(const basic_sstring< char_type, size_type, max_size > &s, Callback callback) (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >inline
append_static(const char_type *buf, size_t size) (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >inline
append_static(const char_type(&s)[N]) (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >inline
append_static(const char_type *s) (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >inline
append_static(const basic_sstring< char_type, size_type, max_size > &s) (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >inline
append_static(const std::string_view &s) (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >inline
on_delete(Callback callback) (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >inline
operator bool() const (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >inline
release() && (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >inline
reserve(int n_frags) (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >inline
scattered_message() (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >inline
scattered_message(scattered_message &&)=default (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >
scattered_message(const scattered_message &)=delete (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >
size() (defined in seastar::scattered_message< CharType >)seastar::scattered_message< CharType >inline
+ + + + diff --git a/master/classseastar_1_1scattered__message.html b/master/classseastar_1_1scattered__message.html new file mode 100644 index 000000000..a83bb9383 --- /dev/null +++ b/master/classseastar_1_1scattered__message.html @@ -0,0 +1,142 @@ + + + + + + + +Seastar: seastar::scattered_message< CharType > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::scattered_message< CharType > Class Template Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

scattered_message (scattered_message &&)=default
 
scattered_message (const scattered_message &)=delete
 
+void append_static (const char_type *buf, size_t size)
 
+template<size_t N>
void append_static (const char_type(&s)[N])
 
+void append_static (const char_type *s)
 
+template<typename size_type , size_type max_size>
void append_static (const basic_sstring< char_type, size_type, max_size > &s)
 
+void append_static (const std::string_view &s)
 
+void append (std::string_view v)
 
+void append (temporary_buffer< CharType > buff)
 
+template<typename size_type , size_type max_size>
void append (basic_sstring< char_type, size_type, max_size > s)
 
+template<typename size_type , size_type max_size, typename Callback >
void append (const basic_sstring< char_type, size_type, max_size > &s, Callback callback)
 
+void reserve (int n_frags)
 
+packet release () &&
 
+template<typename Callback >
void on_delete (Callback callback)
 
operator bool () const
 
+size_t size ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1scheduling__group-members.html b/master/classseastar_1_1scheduling__group-members.html new file mode 100644 index 000000000..923cb44d3 --- /dev/null +++ b/master/classseastar_1_1scheduling__group-members.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::scheduling_group Member List
+
+
+ +

This is the complete list of members for seastar::scheduling_group, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
active() const noexcept (defined in seastar::scheduling_group)seastar::scheduling_groupinline
create_scheduling_groupseastar::scheduling_groupfriend
destroy_scheduling_groupseastar::scheduling_groupfriend
get_shares() const noexceptseastar::scheduling_group
get_specific(scheduling_group_key key) noexceptseastar::scheduling_groupinline
internal::scheduling_group_from_index (defined in seastar::scheduling_group)seastar::scheduling_groupfriend
internal::scheduling_group_index (defined in seastar::scheduling_group)seastar::scheduling_groupfriend
is_at_exit() const noexcept (defined in seastar::scheduling_group)seastar::scheduling_groupinline
is_main() const noexcept (defined in seastar::scheduling_group)seastar::scheduling_groupinline
map_reduce_scheduling_group_specificseastar::scheduling_groupfriend
name() const noexcept (defined in seastar::scheduling_group)seastar::scheduling_group
operator!=(scheduling_group x) const noexcept (defined in seastar::scheduling_group)seastar::scheduling_groupinline
operator==(scheduling_group x) const noexcept (defined in seastar::scheduling_group)seastar::scheduling_groupinline
reduce_scheduling_group_specificseastar::scheduling_groupfriend
rename_scheduling_groupseastar::scheduling_groupfriend
scheduling_group() noexceptseastar::scheduling_groupinline
set_shares(float shares) noexceptseastar::scheduling_group
short_name() const noexcept (defined in seastar::scheduling_group)seastar::scheduling_group
update_io_bandwidth(uint64_t bandwidth) constseastar::scheduling_group
+ + + + diff --git a/master/classseastar_1_1scheduling__group.html b/master/classseastar_1_1scheduling__group.html new file mode 100644 index 000000000..609d697a4 --- /dev/null +++ b/master/classseastar_1_1scheduling__group.html @@ -0,0 +1,261 @@ + + + + + + + +Seastar: seastar::scheduling_group Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::scheduling_group Class Reference
+
+
+

Detailed Description

+

Identifies function calls that are accounted as a group.

+

A scheduling_group is a tag that can be used to mark a function call. Executions of such tagged calls are accounted as a group.

+
+

#include <seastar/core/scheduling.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+constexpr scheduling_group () noexcept
 Creates a scheduling_group object denoting the default group.
 
+bool active () const noexcept
 
+const sstring & name () const noexcept
 
+const sstring & short_name () const noexcept
 
+bool operator== (scheduling_group x) const noexcept
 
+bool operator!= (scheduling_group x) const noexcept
 
+bool is_main () const noexcept
 
+bool is_at_exit () const noexcept
 
template<typename T >
T & get_specific (scheduling_group_key key) noexcept
 
void set_shares (float shares) noexcept
 
float get_shares () const noexcept
 
future update_io_bandwidth (uint64_t bandwidth) const
 Updates the current IO bandwidth for a given scheduling group. More...
 
+

Member Function Documentation

+ +

◆ get_shares()

+ +
+
+ + + + + +
+ + + + + + + +
float seastar::scheduling_group::get_shares () const
+
+noexcept
+
+

Returns the number of shares the group has

+

Similarly to the set_shares, the returned value is only relevant to the calling shard

+ +
+
+ +

◆ get_specific()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
T & seastar::scheduling_group::get_specific (scheduling_group_key key)
+
+inlinenoexcept
+
+

Returnes a reference to this scheduling group specific value

Template Parameters
+ + +
T- the type of the scheduling specific type (cannot be deduced)
+
+
+
Parameters
+ + +
key- the key of the value to retrieve.
+
+
+
Returns
A reference to this scheduling specific value.
+ +
+
+ +

◆ set_shares()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::scheduling_group::set_shares (float shares)
+
+noexcept
+
+

Adjusts the number of shares allotted to the group.

+

Dynamically adjust the number of shares allotted to the group, increasing or decreasing the amount of CPU bandwidth it gets. The adjustment is local to the shard.

+

This can be used to reduce a background job's interference with a foreground load: the shares can be started at a low value, increased when the background job's backlog increases, and reduced again when the backlog decreases.

+
Parameters
+ + +
sharesnumber of shares allotted to the group. Use numbers in the 1-1000 range.
+
+
+ +
+
+ +

◆ update_io_bandwidth()

+ +
+
+ + + + + + + + +
future seastar::scheduling_group::update_io_bandwidth (uint64_t bandwidth) const
+
+ +

Updates the current IO bandwidth for a given scheduling group.

+

The bandwidth applied is NOT shard-local, instead it is applied so that all shards cannot consume more bytes-per-second altogether

+
Parameters
+ + +
bandwidththe new bandwidth value in bytes/second
+
+
+
Returns
a future that is ready when the bandwidth update is applied
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1scheduling__group__key-members.html b/master/classseastar_1_1scheduling__group__key-members.html new file mode 100644 index 000000000..b2f389356 --- /dev/null +++ b/master/classseastar_1_1scheduling__group__key-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::scheduling_group_key Member List
+
+
+ +

This is the complete list of members for seastar::scheduling_group_key, including all inherited members.

+ + + + + + + +
internal::scheduling_group_get_specific_ptr (defined in seastar::scheduling_group_key)seastar::scheduling_group_keyfriend
internal::scheduling_group_key_id (defined in seastar::scheduling_group_key)seastar::scheduling_group_keyfriend
scheduling_group_get_specificseastar::scheduling_group_keyfriend
scheduling_group_key(const scheduling_group_key &) noexcept=defaultseastar::scheduling_group_key
scheduling_group_key(scheduling_group_key &&) noexcept=default (defined in seastar::scheduling_group_key)seastar::scheduling_group_key
scheduling_group_key_createseastar::scheduling_group_keyfriend
+ + + + diff --git a/master/classseastar_1_1scheduling__group__key.html b/master/classseastar_1_1scheduling__group__key.html new file mode 100644 index 000000000..55d0074ec --- /dev/null +++ b/master/classseastar_1_1scheduling__group__key.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: seastar::scheduling_group_key Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::scheduling_group_key Class Reference
+
+
+

Detailed Description

+

A class that is intended to encapsulate the scheduling group specific key and "hide" it implementation concerns and details.

+
Note
this object can be copied accross shards and scheduling groups.
+
+

#include <seastar/core/scheduling.hh>

+ + + + + + + +

+Public Member Functions

scheduling_group_key (const scheduling_group_key &) noexcept=default
 The only user allowed operation on a key is copying.
 
scheduling_group_key (scheduling_group_key &&) noexcept=default
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1percpu__plugin__instance__metrics-members.html b/master/classseastar_1_1scollectd_1_1percpu__plugin__instance__metrics-members.html new file mode 100644 index 000000000..da705444c --- /dev/null +++ b/master/classseastar_1_1scollectd_1_1percpu__plugin__instance__metrics-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::scollectd::percpu_plugin_instance_metrics Member List
+
+
+ +

This is the complete list of members for seastar::scollectd::percpu_plugin_instance_metrics, including all inherited members.

+ + + + + +
add(const typed_value &) (defined in seastar::scollectd::plugin_instance_metrics)seastar::scollectd::plugin_instance_metrics
bound_ids() const (defined in seastar::scollectd::plugin_instance_metrics)seastar::scollectd::plugin_instance_metrics
percpu_plugin_instance_metrics(const plugin_id &p, TypedValues &&... values) (defined in seastar::scollectd::percpu_plugin_instance_metrics)seastar::scollectd::percpu_plugin_instance_metricsinline
plugin_instance_metrics(const plugin_id &p, const plugin_instance_id &pi, TypedValues &&... values) (defined in seastar::scollectd::plugin_instance_metrics)seastar::scollectd::plugin_instance_metricsinline
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1percpu__plugin__instance__metrics.html b/master/classseastar_1_1scollectd_1_1percpu__plugin__instance__metrics.html new file mode 100644 index 000000000..de77bf59d --- /dev/null +++ b/master/classseastar_1_1scollectd_1_1percpu__plugin__instance__metrics.html @@ -0,0 +1,112 @@ + + + + + + + +Seastar: seastar::scollectd::percpu_plugin_instance_metrics Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::scollectd::percpu_plugin_instance_metrics Class Reference
+
+
+

Detailed Description

+

Simplified wrapper for the common case of per-cpu plugin instances (i.e. distributed objects)

+
+

#include <seastar/core/scollectd.hh>

+
+Inheritance diagram for seastar::scollectd::percpu_plugin_instance_metrics:
+
+
+ + +seastar::scollectd::plugin_instance_metrics + +
+ + + + + + + + + +

+Public Member Functions

+template<typename... TypedValues>
 percpu_plugin_instance_metrics (const plugin_id &p, TypedValues &&... values)
 
+std::vector< type_instance_idbound_ids () const
 
+void add (const typed_value &)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1percpu__plugin__instance__metrics.png b/master/classseastar_1_1scollectd_1_1percpu__plugin__instance__metrics.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ae0643c56f3ab9c0056d2e6c1a424932364fc7 GIT binary patch literal 1061 zcmeAS@N?(olHy`uVBq!ia0y~yVAKS%12~w0WRYw!FOZT5@CkAK|NlRb`Qpvj(*8pe zfGjXRaNq!I=N)+pZz0$*EUH1{%?=oNFMF{mAy->;;Sdwt=o6h zjrVH#t9x_bN_*-mKQn%mYB*un;$KX)TF>5nTbb;>d|7E^t#(lNiqx-nFD-w@of`eH ztn*Cmr(f@~50G0^P68$SIDEW8w zwnwLHr(dbP*F9-TWPJ6qcTo#e?k>_-RP~Hsr=sd9sH*ANrQzurIw$EsY@7=y!;q|IvYABi8#1;aw#lQ zVHF6R#MGhT$>=g=34@YX5T(+!>MMi1Jf{YoYSm!SYzRiTt06?<>EXgpxo!O0lTF{; z`f#r$dW!g8cTdJSz({9U%op_Z=VC~l_dJEgxxf#etc$l5)E*w*vA?=iMtNpz(PX*w zH;cF3HNCklREouRW$v$s7iY$MIvC2Iuia+3|4qZW*~#|D63wH_TYh`);?Q54{A2E) zjTejmDX*+^FPDFOA=PZ}te~Pv(*7OhCk)P3F|!5LT?)1fzH(;c_wv>63!i*@o@f03 z?7>p;pH_#`c84!H(_lVXYO-9|JvBMc(tX<=pS!wU!Cs{M{(UD>r`Zc~w30`to0Fr9sft@Uu2+pW?PT+oKcnYOa^Zb8pk+ zEuY_cPha}|yW4NdHf(-%d$QTq7k6rFFU7L1duP`Wf1%3kyYC&25Bpzvd)iv(l<#_W z?3yLhk*|JN=358 + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::scollectd::plugin_instance_metrics Member List
+
+
+ +

This is the complete list of members for seastar::scollectd::plugin_instance_metrics, including all inherited members.

+ + + + +
add(const typed_value &) (defined in seastar::scollectd::plugin_instance_metrics)seastar::scollectd::plugin_instance_metrics
bound_ids() const (defined in seastar::scollectd::plugin_instance_metrics)seastar::scollectd::plugin_instance_metrics
plugin_instance_metrics(const plugin_id &p, const plugin_instance_id &pi, TypedValues &&... values) (defined in seastar::scollectd::plugin_instance_metrics)seastar::scollectd::plugin_instance_metricsinline
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1plugin__instance__metrics.html b/master/classseastar_1_1scollectd_1_1plugin__instance__metrics.html new file mode 100644 index 000000000..b87bbaeed --- /dev/null +++ b/master/classseastar_1_1scollectd_1_1plugin__instance__metrics.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: seastar::scollectd::plugin_instance_metrics Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::scollectd::plugin_instance_metrics Class Reference
+
+
+
+Inheritance diagram for seastar::scollectd::plugin_instance_metrics:
+
+
+ + +seastar::scollectd::percpu_plugin_instance_metrics + +
+ + + + + + + + + +

+Public Member Functions

+template<typename... TypedValues>
 plugin_instance_metrics (const plugin_id &p, const plugin_instance_id &pi, TypedValues &&... values)
 
+std::vector< type_instance_idbound_ids () const
 
+void add (const typed_value &)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1plugin__instance__metrics.png b/master/classseastar_1_1scollectd_1_1plugin__instance__metrics.png new file mode 100644 index 0000000000000000000000000000000000000000..52a9a789eb9a9486eee1ee250138efac3192e8bd GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yVAKS%12~w0WRYw!FOZT5@CkAK|NlRb`Qpvj(*8pe zfGjXRaNq!I=N)+-V`pT-=jlOSo>PNPwQ4YEHUz6`Hgrr9ad7eEQdp$IDsb`p zl0$|0?$38iRsBAbpZ7!Wx9+R>Me=@J4?^sfSp}}DuKZLPzw7p|@@hLa$sOyLtjYar znCSiB*)E6nn?4cd9t& zFXOYW(EHWx@4nwnn^*l^aOKhOc0sjbch6kEQWey@{;sF}x_u{|O0Sl`y7%U-w5PA~ zA34d?ixYP({>427llrrVb5HMwcmQ#*!{wrM5CEyLMLG)@#2^0#!9tJ(qh0O%e&5 zG-*l4q$w({Qr+uqylaP3|6UqjQ=>gst9&!F|q zAwPFaeYfr3-Ff{R+1_buW=GfiM2P?3j9R?i(dSTmVg2?N8ReOwQfhbWH}>8NyPmT9 z+$Dt!&)oU%^Li^iowUHw{$Rdr!G~uN{dG6aUdws-P1*N|#@gf`bN_6-VE2Ds$nHhE z`!yG+8Gk>u)Wl=meZ|F&yUw2xU!ZL2ckAinMK;H;)koC6*WG@n|v_w-=b789ZJ6T-G@yGywoS CN#}h4 literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1scollectd_1_1registrations-members.html b/master/classseastar_1_1scollectd_1_1registrations-members.html new file mode 100644 index 000000000..ebd19030f --- /dev/null +++ b/master/classseastar_1_1scollectd_1_1registrations-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::scollectd::registrations Member List
+
+
+ +

This is the complete list of members for seastar::scollectd::registrations, including all inherited members.

+ + + + + + + +
operator=(vector_type &&v) (defined in seastar::scollectd::registrations)seastar::scollectd::registrationsinline
operator=(const std::initializer_list< type_instance_id > &l) (defined in seastar::scollectd::registrations)seastar::scollectd::registrationsinline
registrations() (defined in seastar::scollectd::registrations)seastar::scollectd::registrationsinline
registrations(vector_type &&v) (defined in seastar::scollectd::registrations)seastar::scollectd::registrationsinline
registrations(const std::initializer_list< type_instance_id > &l) (defined in seastar::scollectd::registrations)seastar::scollectd::registrationsinline
vector_type typedef (defined in seastar::scollectd::registrations)seastar::scollectd::registrations
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1registrations.html b/master/classseastar_1_1scollectd_1_1registrations.html new file mode 100644 index 000000000..15ec4e5d0 --- /dev/null +++ b/master/classseastar_1_1scollectd_1_1registrations.html @@ -0,0 +1,126 @@ + + + + + + + +Seastar: seastar::scollectd::registrations Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::scollectd::registrations Class Reference
+
+
+

Detailed Description

+

Helper type to make generating vectors of registration objects easier, since it constructs from an initializer list of type_instance_id:s, avoiding early conversion to registration objs, which in case of init lists, are copy semantics, not move...

+
+

#include <seastar/core/scollectd.hh>

+
+Inheritance diagram for seastar::scollectd::registrations:
+
+
+ +
+ + + + +

+Public Types

+typedef std::vector< registrationvector_type
 
+ + + + + + + + + +

+Public Member Functions

registrations (vector_type &&v)
 
registrations (const std::initializer_list< type_instance_id > &l)
 
+registrationsoperator= (vector_type &&v)
 
+registrationsoperator= (const std::initializer_list< type_instance_id > &l)
 
+ + + + +

+Public Attributes

+T elements
 STL member.
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1registrations.png b/master/classseastar_1_1scollectd_1_1registrations.png new file mode 100644 index 0000000000000000000000000000000000000000..4c3ac95aaa9e2e4843150a3873a3ed50702b4bfe GIT binary patch literal 739 zcmeAS@N?(olHy`uVBq!ia0vp^JAgQVgBeK9{pBwOq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0iacE$Ln;{G&b_;7wE~Y@c;2k<^^X@v zH-1pQYJ2x(qMC6{luv^z$4gx$C2g+2&{%)Qb*o;jWC#!adWGlDmNVtwa_-;UExD~! zp6!C#2?%x%Us zQ+c2I&VDOy9=LU_>GVF&Ij41Fn!-y$kDOgy<~4EcGReHn^L{896@T$u#q-SLd1g{j z^Yzsx_tY+wEe?0La^JsaPN`VPgSS^}r9WDIxI2U2EhfY}+e6Lr-nuIjI#=axKOq0? zN9CNItCmD8y&b;FYo%cGth76`Rt4!j2n?9Ds%WuY)xYAp5>@>V(SaeMd$qTB%$Hoe z>X%^UvaVIHj*C24wQ3$$L1?Id?gJ$yZmtLCzc57vu5Q{N*F9-H*S^B_p8IqvLPQzj zSuGltGszqXX5@RYl7an0NCR_))&WKv(FY7b?F{~?(iy5sn-&Q)d=-Jp-euUock|he zpKa~WJUg-NSfbKlK5 zUZt~k3tWA0oTsc-;PRf`fYDxT*r%P(4UZ*lLt%4fnK9wjlw%52`rEWgA{dbtp*bxw`=?vC>3 z*WCB;)oec{`okbJ?@5L8UzOwSD=$6&AyYHqaqUbG?pfOR + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::scollectd::type_instance_id Member List
+
+
+ +

This is the complete list of members for seastar::scollectd::type_instance_id, including all inherited members.

+ + + + + + + + + + + + + + +
operator<(const type_instance_id &) const (defined in seastar::scollectd::type_instance_id)seastar::scollectd::type_instance_id
operator=(type_instance_id &&)=default (defined in seastar::scollectd::type_instance_id)seastar::scollectd::type_instance_id
operator=(const type_instance_id &)=default (defined in seastar::scollectd::type_instance_id)seastar::scollectd::type_instance_id
operator==(const type_instance_id &) const (defined in seastar::scollectd::type_instance_id)seastar::scollectd::type_instance_id
plugin() const (defined in seastar::scollectd::type_instance_id)seastar::scollectd::type_instance_idinline
plugin_instance() const (defined in seastar::scollectd::type_instance_id)seastar::scollectd::type_instance_idinline
type() const (defined in seastar::scollectd::type_instance_id)seastar::scollectd::type_instance_idinline
type_instance() const (defined in seastar::scollectd::type_instance_id)seastar::scollectd::type_instance_idinline
type_instance_id()=default (defined in seastar::scollectd::type_instance_id)seastar::scollectd::type_instance_id
type_instance_id(plugin_id p, plugin_instance_id pi, type_id t, scollectd::type_instance ti=std::string()) (defined in seastar::scollectd::type_instance_id)seastar::scollectd::type_instance_idinline
type_instance_id(const seastar::metrics::impl::metric_id &id, const type_id &inherit_type) (defined in seastar::scollectd::type_instance_id)seastar::scollectd::type_instance_idinline
type_instance_id(type_instance_id &&)=default (defined in seastar::scollectd::type_instance_id)seastar::scollectd::type_instance_id
type_instance_id(const type_instance_id &)=default (defined in seastar::scollectd::type_instance_id)seastar::scollectd::type_instance_id
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1type__instance__id.html b/master/classseastar_1_1scollectd_1_1type__instance__id.html new file mode 100644 index 000000000..cfc967b48 --- /dev/null +++ b/master/classseastar_1_1scollectd_1_1type__instance__id.html @@ -0,0 +1,125 @@ + + + + + + + +Seastar: seastar::scollectd::type_instance_id Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::scollectd::type_instance_id Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

type_instance_id (plugin_id p, plugin_instance_id pi, type_id t, scollectd::type_instance ti=std::string())
 
type_instance_id (const seastar::metrics::impl::metric_id &id, const type_id &inherit_type)
 
type_instance_id (type_instance_id &&)=default
 
type_instance_id (const type_instance_id &)=default
 
+type_instance_idoperator= (type_instance_id &&)=default
 
+type_instance_idoperator= (const type_instance_id &)=default
 
+const plugin_id & plugin () const
 
+const plugin_instance_id & plugin_instance () const
 
+const type_id & type () const
 
+const scollectd::type_instance & type_instance () const
 
+bool operator< (const type_instance_id &) const
 
+bool operator== (const type_instance_id &) const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1value-members.html b/master/classseastar_1_1scollectd_1_1value-members.html new file mode 100644 index 000000000..cba932cfb --- /dev/null +++ b/master/classseastar_1_1scollectd_1_1value-members.html @@ -0,0 +1,90 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::scollectd::value< T > Member List
+
+
+ +

This is the complete list of members for seastar::scollectd::value< T >, including all inherited members.

+ + + + + + + + + +
operator data_type() const (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >inline
operator uint64_t() const (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >inline
operator()() const (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >inline
stored_type typedef (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >
type() const (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >inline
value(const value_type &t) (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >inline
value(data_type type, const value_type &t) (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >inline
value_type typedef (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1value.html b/master/classseastar_1_1scollectd_1_1value.html new file mode 100644 index 000000000..d7347deda --- /dev/null +++ b/master/classseastar_1_1scollectd_1_1value.html @@ -0,0 +1,132 @@ + + + + + + + +Seastar: seastar::scollectd::value< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::scollectd::value< T > Class Template Reference
+
+
+
+Inheritance diagram for seastar::scollectd::value< T >:
+
+
+ + +seastar::scollectd::value< typed< T > > + +
+ + + + +

+Classes

struct  wrap
 
+ + + + + +

+Public Types

+typedef std::remove_reference_t< T > value_type
 
+typedef std::conditional_t< is_callable< std::remove_reference_t< T > >::value, value_type, wrap< value_type > > stored_type
 
+ + + + + + + + + + + + + +

+Public Member Functions

value (const value_type &t)
 
value (data_type type, const value_type &t)
 
+uint64_t operator() () const
 
operator uint64_t () const
 
operator data_type () const
 
+data_type type () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1value.png b/master/classseastar_1_1scollectd_1_1value.png new file mode 100644 index 0000000000000000000000000000000000000000..3dc956d36c5ef8bacc1770e5a923e9825b35a81d GIT binary patch literal 769 zcmeAS@N?(olHy`uVBq!ia0vp^FMv3JgBeJwygLaJkO=SzasB`QKS=J)*V6t&6M!r* zK5*awYv&z#AeW;g$S;@ys0akEo(eHyU|^cy>Eakt!T5IW+q}aHJg)rWE8qV=@mh@I znX=&PTdRs^6ipZ5`SGCtev7~%Q5S{}>sh%TcyfyznEa2;YVWta8#k9VHrt-tcCJ<= zA?&}<7jyOhTqV2rl(hfWu6=etb#Y@Q)7Ipd^CPE)uGLuG@M#ZAiS=f?yLKm~IldYj zy+7`k{+9D6oAiZ~BJ)^G#q)$Oro_K?w!K<;&!~s*1yi-aMa?Teubln5f4^7K)di`m znD6HBJ8ah99T@l9_`(H~{b`F#MSq^!D`Z@KfBCbc+fH|jmCV>Bd)8aYDtvMAv%^wr z_sEBSn4PsHfAP(OcWk9QR<4^Zb~_<`&ijKYAFr+B{_uXQ1EWo5BU8mCCe{y2v>V$5 z4zaR)D7(wBZo%q?dwJrDd%0fB{VcU)I%90C_<`wS8V%~Y0Sx|83mE2YLDmTi6Ep>J zOC^$Pw&xih`;jK7dUC(m3YE%BOjA|-XEE?jGFiMkF?}{0-#3f9zj8LsCA%k<7(#;YFiP;PGI)COxBKI(@($aLUtfMZdCx?rzddJuZ@e5??X>UUtu>~; zX3z4@OiwhsFLotnhp)@z+PBBPhCHu4ZD6&4J13gceSO!8t``DZJ@3X``Mp{tj5lhT z)rGU)7);Xt=WStss~#$SUpH)Paq_M5^{~ppCrq`=g5wKYD%S_W-+b`}(d^eBxNXT{H?%WNV`|mfOOuA9(TWGWO zwbv!~Q+Ik*Y}fI#ubs79#dghkwzbl;fwaGWtY=jhJXCfyACq{@`h`{XuYqJ@kY5Wh Py)t;Z`njxgN@xNAr^RMr literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1scollectd_1_1value_3_01typed_3_01T_01_4_01_4-members.html b/master/classseastar_1_1scollectd_1_1value_3_01typed_3_01T_01_4_01_4-members.html new file mode 100644 index 000000000..3f6852bc9 --- /dev/null +++ b/master/classseastar_1_1scollectd_1_1value_3_01typed_3_01T_01_4_01_4-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::scollectd::value< typed< T > > Member List
+
+
+ +

This is the complete list of members for seastar::scollectd::value< typed< T > >, including all inherited members.

+ + + + + + + + + + +
operator data_type() const (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >inline
operator uint64_t() const (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >inline
operator()() const (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >inline
stored_type typedef (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >
type() const (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >inline
value(const typed< T > &args) (defined in seastar::scollectd::value< typed< T > >)seastar::scollectd::value< typed< T > >inline
value(const value_type &t) (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >inline
value(data_type type, const value_type &t) (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >inline
value_type typedef (defined in seastar::scollectd::value< T >)seastar::scollectd::value< T >
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1value_3_01typed_3_01T_01_4_01_4.html b/master/classseastar_1_1scollectd_1_1value_3_01typed_3_01T_01_4_01_4.html new file mode 100644 index 000000000..d420c2a8f --- /dev/null +++ b/master/classseastar_1_1scollectd_1_1value_3_01typed_3_01T_01_4_01_4.html @@ -0,0 +1,123 @@ + + + + + + + +Seastar: seastar::scollectd::value< typed< T > > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::scollectd::value< typed< T > > Class Template Reference
+
+
+
+Inheritance diagram for seastar::scollectd::value< typed< T > >:
+
+
+ + +seastar::scollectd::value< T > + +
+ + + + + + +

+Public Types

+typedef std::remove_reference_t< T > value_type
 
+typedef std::conditional_t< is_callable< std::remove_reference_t< T > >::value, value_type, wrap< value_type > > stored_type
 
+ + + + + + + + + + + +

+Public Member Functions

value (const typed< T > &args)
 
+uint64_t operator() () const
 
operator uint64_t () const
 
operator data_type () const
 
+data_type type () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1value_3_01typed_3_01T_01_4_01_4.png b/master/classseastar_1_1scollectd_1_1value_3_01typed_3_01T_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..407d351a4004f0cb2ebe98c2e8c769ce5eb3040a GIT binary patch literal 765 zcmeAS@N?(olHy`uVBq!ia0vp^FMv3JgBeJwygLaJkO=SzasB`QKS=J)*V6t&6M!r* zK5*awYv&z#AeW;g$S;@ys0akEo(eHyU|{O;ba4!+V0=6GbkBGMMvG@Brq5>g`?lkj z)!Y9rF3Y~EJJuI{>Ua2l`gD24o=@pNW6#UYNDr``_J2jHYnp4Us?yg=&KGsdY-85CgKe5uj%yPBAhWU*Kzhxg(R_rR6+oAP4O8!mA^UBi(Rtvb_c)BbPcpkj{%Kwk6 zI#V5Ahp_LuJ+EQf8~dJ9x866lE&KVk{>sU;lsl^pFMqGijLY4VMXXLwH#Ps&9uU_TW>%Evu?n(w@ zZCdZQ+$}i~yV98rua*W4_jJK5x-Ux|?J^-dw22WQ%mvv4FO#t}BXJ!BZ literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1scollectd_1_1value__list-members.html b/master/classseastar_1_1scollectd_1_1value__list-members.html new file mode 100644 index 000000000..a6c52e9ab --- /dev/null +++ b/master/classseastar_1_1scollectd_1_1value__list-members.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::scollectd::value_list Member List
+
+
+ +

This is the complete list of members for seastar::scollectd::value_list, including all inherited members.

+ + + + + + + + + + + +
desc() const (defined in seastar::scollectd::value_list)seastar::scollectd::value_listinline
empty() const (defined in seastar::scollectd::value_list)seastar::scollectd::value_listinline
is_enabled() const (defined in seastar::scollectd::value_list)seastar::scollectd::value_listinline
set_enabled(bool b) (defined in seastar::scollectd::value_list)seastar::scollectd::value_listinline
size() const =0 (defined in seastar::scollectd::value_list)seastar::scollectd::value_listpure virtual
types(data_type *) const =0 (defined in seastar::scollectd::value_list)seastar::scollectd::value_listpure virtual
value_list(description d) (defined in seastar::scollectd::value_list)seastar::scollectd::value_listinline
value_list(value_list &&)=default (defined in seastar::scollectd::value_list)seastar::scollectd::value_list
values(net::packed< uint64_t > *) const =0 (defined in seastar::scollectd::value_list)seastar::scollectd::value_listpure virtual
~value_list() (defined in seastar::scollectd::value_list)seastar::scollectd::value_listinlinevirtual
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1value__list.html b/master/classseastar_1_1scollectd_1_1value__list.html new file mode 100644 index 000000000..97431f985 --- /dev/null +++ b/master/classseastar_1_1scollectd_1_1value__list.html @@ -0,0 +1,125 @@ + + + + + + + +Seastar: seastar::scollectd::value_list Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::scollectd::value_list Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::scollectd::value_list:
+
+
+ + +seastar::scollectd::values_impl< Args > + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

value_list (description d)
 
value_list (value_list &&)=default
 
+virtual size_t size () const =0
 
+virtual void types (data_type *) const =0
 
+virtual void values (net::packed< uint64_t > *) const =0
 
+const descriptiondesc () const
 
+bool empty () const
 
+bool is_enabled () const
 
+void set_enabled (bool b)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1value__list.png b/master/classseastar_1_1scollectd_1_1value__list.png new file mode 100644 index 0000000000000000000000000000000000000000..0075d8449444c2711e16a19a0ab6103ab7e5407e GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0vp^FMv3JgBeJwygLaJkO=SzasB`QKS=J)*V6t&6M!r* zK5*awYv&z#AeW;g$S;@ys0akEo(eHyU|`zl>Eakt!T5IW!%d47c-;6Cm%aag;@Fw5<>0P-J)d!{N3W7YzOi6)MWN-xD7+GTax&TT81^TVQetu3$K z|E&w`W9wu}ehRJK|1I#}weqbO@9k-LweM5%`R4|!jQb+fPG332FkOo6Zq4nhrPg6> zOQO!-`5xQ%N_192l_%4KufhRaA6f~9ew!I^XF~U$!wJt((Bx0|K0BEy;4#vCBI++h;-z>dSUEFP>dkx9;{krOp@EjK9}TU%c-zM<%O@9M4I<_~UE&Th};#b$Pq()9e&+@$e-*yO>R$go>3*Nrg+|yhjMU5mLGfET8{j_{*4PZNRS+z + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::scollectd::values_impl< Args > Member List
+
+
+ +

This is the complete list of members for seastar::scollectd::values_impl< Args >, including all inherited members.

+ + + + + + + + + + + + + + + +
desc() const (defined in seastar::scollectd::value_list)seastar::scollectd::value_listinline
empty() const (defined in seastar::scollectd::value_list)seastar::scollectd::value_listinline
is_enabled() const (defined in seastar::scollectd::value_list)seastar::scollectd::value_listinline
num_values (defined in seastar::scollectd::values_impl< Args >)seastar::scollectd::values_impl< Args >static
set_enabled(bool b) (defined in seastar::scollectd::value_list)seastar::scollectd::value_listinline
size() const override (defined in seastar::scollectd::values_impl< Args >)seastar::scollectd::values_impl< Args >inlinevirtual
types(data_type *p) const override (defined in seastar::scollectd::values_impl< Args >)seastar::scollectd::values_impl< Args >inlinevirtual
value_list(description d) (defined in seastar::scollectd::value_list)seastar::scollectd::value_listinline
value_list(value_list &&)=default (defined in seastar::scollectd::value_list)seastar::scollectd::value_list
values(net::packed< uint64_t > *p) const override (defined in seastar::scollectd::values_impl< Args >)seastar::scollectd::values_impl< Args >inlinevirtual
values_impl(description d, Args &&...args) (defined in seastar::scollectd::values_impl< Args >)seastar::scollectd::values_impl< Args >inline
values_impl(values_impl< Args... > &&a)=default (defined in seastar::scollectd::values_impl< Args >)seastar::scollectd::values_impl< Args >
values_impl(const values_impl< Args... > &a)=default (defined in seastar::scollectd::values_impl< Args >)seastar::scollectd::values_impl< Args >
~value_list() (defined in seastar::scollectd::value_list)seastar::scollectd::value_listinlinevirtual
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1values__impl.html b/master/classseastar_1_1scollectd_1_1values__impl.html new file mode 100644 index 000000000..8ad2d5eb9 --- /dev/null +++ b/master/classseastar_1_1scollectd_1_1values__impl.html @@ -0,0 +1,222 @@ + + + + + + + +Seastar: seastar::scollectd::values_impl< Args > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::scollectd::values_impl< Args > Class Template Reference
+
+
+
+Inheritance diagram for seastar::scollectd::values_impl< Args >:
+
+
+ + +seastar::scollectd::value_list + +
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

values_impl (description d, Args &&...args)
 
values_impl (values_impl< Args... > &&a)=default
 
values_impl (const values_impl< Args... > &a)=default
 
size_t size () const override
 
void types (data_type *p) const override
 
void values (net::packed< uint64_t > *p) const override
 
+const descriptiondesc () const
 
+bool empty () const
 
+bool is_enabled () const
 
+void set_enabled (bool b)
 
+ + + +

+Static Public Attributes

+static const size_t num_values = sizeof...(Args)
 
+

Member Function Documentation

+ +

◆ size()

+ +
+
+
+template<typename ... Args>
+ + + + + +
+ + + + + + + +
size_t seastar::scollectd::values_impl< Args >::size () const
+
+inlineoverridevirtual
+
+ +

Implements seastar::scollectd::value_list.

+ +
+
+ +

◆ types()

+ +
+
+
+template<typename ... Args>
+ + + + + +
+ + + + + + + + +
void seastar::scollectd::values_impl< Args >::types (data_type * p) const
+
+inlineoverridevirtual
+
+ +

Implements seastar::scollectd::value_list.

+ +
+
+ +

◆ values()

+ +
+
+
+template<typename ... Args>
+ + + + + +
+ + + + + + + + +
void seastar::scollectd::values_impl< Args >::values (net::packed< uint64_t > * p) const
+
+inlineoverridevirtual
+
+ +

Implements seastar::scollectd::value_list.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1scollectd_1_1values__impl.png b/master/classseastar_1_1scollectd_1_1values__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..1661bed4880760ede7e1384596092fa67396d119 GIT binary patch literal 800 zcmeAS@N?(olHy`uVBq!ia0vp^FMv3JgBeJwygLaJkO=SzasB`QKS=J)*V6t&6M!r* zK5*awYv&z#AeW;g$S;@ys0akEo(eHyU|?GB>Eakt!T5IW#lF`HJTCmgEC2sLX@1)w ziTUKFUAIGDD;WARAN$cz7#BG$b!T&gisnAG6)LWmSf(!V_{Dlb#Zx(oSNisy!bgwK zZ2fAodM_}r~cjf zeWp719`oHCe+Tbx@7+@K;ud<|4Hr=szqfI|S*iZn*j2I3Wx?AY|1w=^UEqHF%b{lA4Bt3YvmFUYbiw*e5bP%7!Usyzp>t z1T+wDm8NfbE7kjMt|OyX=^y@I7ChJW&wdLn?f7qkuC+B`&yEKO z@3i0ikBK*HkXR~Z8^}DisVfU{uF2~uTfZn9#d>zply)jc8k?cR)JZ + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::semaphore_aborted Member List
+
+
+ +

This is the complete list of members for seastar::semaphore_aborted, including all inherited members.

+ + +
what() const noexceptseastar::semaphore_abortedvirtual
+ + + + diff --git a/master/classseastar_1_1semaphore__aborted.html b/master/classseastar_1_1semaphore__aborted.html new file mode 100644 index 000000000..94e3abb6d --- /dev/null +++ b/master/classseastar_1_1semaphore__aborted.html @@ -0,0 +1,139 @@ + + + + + + + +Seastar: seastar::semaphore_aborted Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::semaphore_aborted Class Reference
+
+
+

Detailed Description

+

Exception thrown when a semaphore wait operation was aborted.

+
See also
semaphore::wait(abort_source&, size_t nr)
+
+

#include <seastar/core/semaphore.hh>

+
+Inheritance diagram for seastar::semaphore_aborted:
+
+
+ + +seastar::abort_requested_exception +seastar::named_semaphore_aborted + +
+ + + + + +

+Public Member Functions

virtual const char * what () const noexcept
 Reports the exception reason. More...
 
+

Member Function Documentation

+ +

◆ what()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const char * seastar::semaphore_aborted::what () const
+
+virtualnoexcept
+
+ +

Reports the exception reason.

+ +

Reimplemented from seastar::abort_requested_exception.

+ +

Reimplemented in seastar::named_semaphore_aborted.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1semaphore__aborted.png b/master/classseastar_1_1semaphore__aborted.png new file mode 100644 index 0000000000000000000000000000000000000000..2f610a02b612fbb1a5af978290f99bca37f35cea GIT binary patch literal 1420 zcma)+do&Yz9Kff%DvqY4lT>o5tECey?xM#SBayN-MMF`HG(*eE<5q0zK}@EVM=!av zho#Jzwq7@e^?$Wvc_dDnF`999~_s{qI&W{`z05@N{W+?ywF!%L= z9nnXr9---Cy-TsikMv=6;6a3!PN&nS-;|o*#bhL(1_fidtWH~*%; zVBiysB$ETS=Coq|68aCy&mP?sXVnz&P?3=DOUP!>XXw2&qN8-4EkFK_fkpZ;6h5L# zdAk;j3iLm8n;6nlgB57w){SX)uvE}JHzYf==ij;`ko7DJV)AyR#1(_k+d{-cAV(X1 zDq6nO?&`mW6OKIqNruZvQ~& z#*OC}ltc!RNNda0qs^hPM@M6H&B~4`VYfS#C8oW4e?)q^Z~rRw z0H&z^n=nL0nx8CUzk$lH-2nS zcS~a3cZp{PemM3o?P}=}OL5h*KH3}~plsm%;+s}s?P2$I|%nY{Q`uz#2(h17t>Z3hC~7E~*=g29TViLI>Tc>Ok+ zu6t3z-V1M6;C4sm{5pzHE6jA;*|YYx)}=y|ivPp~edZE-c%P#cZ48Gjlvv|1O2rPo zc~+L#S}bU9ae3l=ZWSW4h4)GMjP^j5o%p%<B)Lr+3B@dwSogw3^z=Qoxs1+`3o40$*PO!T3V?ILIy+@_+B*P@a(V-!v zn4n5K(NDk%I%m&2SXhjqs&2f~>^T0G5X5%e+=TveQU~4B>`zTcszy;ynZ&x3cs$y| z3zp`&Z!UQy5YoDZSI`xz + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::semaphore_timed_out Member List
+
+
+ +

This is the complete list of members for seastar::semaphore_timed_out, including all inherited members.

+ + +
what() const noexceptseastar::semaphore_timed_outvirtual
+ + + + diff --git a/master/classseastar_1_1semaphore__timed__out.html b/master/classseastar_1_1semaphore__timed__out.html new file mode 100644 index 000000000..4882f4c71 --- /dev/null +++ b/master/classseastar_1_1semaphore__timed__out.html @@ -0,0 +1,139 @@ + + + + + + + +Seastar: seastar::semaphore_timed_out Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::semaphore_timed_out Class Reference
+
+
+

Detailed Description

+

Exception thrown when a semaphore wait operation times out.

+
See also
semaphore::wait(typename timer<>::duration timeout, size_t nr)
+
+

#include <seastar/core/semaphore.hh>

+
+Inheritance diagram for seastar::semaphore_timed_out:
+
+
+ + +seastar::timed_out_error +seastar::named_semaphore_timed_out + +
+ + + + + +

+Public Member Functions

virtual const char * what () const noexcept
 Reports the exception reason. More...
 
+

Member Function Documentation

+ +

◆ what()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const char * seastar::semaphore_timed_out::what () const
+
+virtualnoexcept
+
+ +

Reports the exception reason.

+ +

Reimplemented from seastar::timed_out_error.

+ +

Reimplemented in seastar::named_semaphore_timed_out.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1semaphore__timed__out.png b/master/classseastar_1_1semaphore__timed__out.png new file mode 100644 index 0000000000000000000000000000000000000000..a23719098d2c6da100374d2dd6ead45a59e48a84 GIT binary patch literal 1387 zcmeAS@N?(olHy`uVBq!ia0vp^4}tgq2Q!d7I`_+MASDst6XN>+|9>F!#hb6C{f8z1 zSzvtNzya3IJMus-M@f)hFauB#2wXiCV#L6}^2^i3F{Fa=?cBH1Hd*nwmCIi<`d)vW zz18V9qhtJ+8SBn$V4v-2Z>IZEUvuddQx)UQeVoq5#`jwm&YYQVmtevF=$I1`yF7&MG@0a$v#I`?s zhMc#@+1!6KZdcCz{w-PhbKE*vuF0AfhUy|8?^GvOcv?MkJ)F7nbJw+K(Rn?mU+??0 z%vtdgU)b^GS1M1KDtJDxxVvG-o|r4Q)`ibp@=0s{5zoWhK0b1+dp)J^c`>8@u}>~0@kJLj%#%)9%>Hs9ss=3hGd-QfLu{yCR6O?&qAS=6nr zD^`do^2^-FyU+S}?(GYFW_ze~_m0rH&(Ht-UHK~F z`@Zj5(`L2LIad9wAi?6S5&yP(t3IUgtlY6I_5A9n+fUcNi_uB;TwVSA`1UtZdkq?V z`*^Q^Ts1u<_j>p0W%23vtNc_}WXyYY?eX3_1$GhN=l|Syr0ZK*)y4yN?itTvzh$Iv(!)USPhrR{#IoDS7+aE9)7}DtAtMHnT`K z_gc)=bC0IjscF565A?o%{`8c$lJ{3HwfruhrFkHc0)yt|9p5RlU{4Z1 zB1zrZ-v&&T$y7|0_n(;Y90n#`m6ged0ww{|E--xxw|P#Ad%iWV{buqZzjJZdE#I9C zm}F*=J40^bl{=t7<}t6+5|aP8EZOkm<|~y8s`glB|FYpXEVr4FA(bta|Lb^?#n(B) z;552?^|^YT4euh>yvuxbtzu{7nmW&FyFlfO66-9l9*n>JwWajYHQ`l#-oLMOS^g{2 zxj84bd{OP;pBwJfKl?4DeXE{ldA&&V?A!HzFMq9{6R<2#^4#P+={(<(gc~-uzn(M~ ze$R95oo_6|t=!wex9{zrYikpCMf&|i$-~XxKfJI0nZLZ`v+bGRzxPagc5mmjZL80? zXKEJgtPSu!edTz5vB~uC?KVrY8!PPs1#_}js{EDT^D|f5^ZAb@4;M>K`K{oo>)w{m hRyj);O9KDNAGq><>341+31G>{;OXk;vd$@?2>?X`vTFbU literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1semaphore__units-members.html b/master/classseastar_1_1semaphore__units-members.html new file mode 100644 index 000000000..cecbc67e5 --- /dev/null +++ b/master/classseastar_1_1semaphore__units-members.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::semaphore_units< ExceptionFactory, Clock > Member List
+
+
+ +

This is the complete list of members for seastar::semaphore_units< ExceptionFactory, Clock >, including all inherited members.

+ + + + + + + + + + + + + + +
adopt(semaphore_units &&other) noexceptseastar::semaphore_units< ExceptionFactory, Clock >inline
count() const noexceptseastar::semaphore_units< ExceptionFactory, Clock >inline
operator bool() const noexceptseastar::semaphore_units< ExceptionFactory, Clock >inlineexplicit
operator=(semaphore_units &&o) noexcept (defined in seastar::semaphore_units< ExceptionFactory, Clock >)seastar::semaphore_units< ExceptionFactory, Clock >inline
release() noexceptseastar::semaphore_units< ExceptionFactory, Clock >inline
return_all() noexceptseastar::semaphore_units< ExceptionFactory, Clock >inline
return_units(size_t units)seastar::semaphore_units< ExceptionFactory, Clock >inline
semaphore_units() noexcept (defined in seastar::semaphore_units< ExceptionFactory, Clock >)seastar::semaphore_units< ExceptionFactory, Clock >inline
semaphore_units(basic_semaphore< ExceptionFactory, Clock > &sem, size_t n) noexcept (defined in seastar::semaphore_units< ExceptionFactory, Clock >)seastar::semaphore_units< ExceptionFactory, Clock >inline
semaphore_units(semaphore_units &&o) noexcept (defined in seastar::semaphore_units< ExceptionFactory, Clock >)seastar::semaphore_units< ExceptionFactory, Clock >inline
semaphore_units(const semaphore_units &)=delete (defined in seastar::semaphore_units< ExceptionFactory, Clock >)seastar::semaphore_units< ExceptionFactory, Clock >
split(size_t units)seastar::semaphore_units< ExceptionFactory, Clock >inline
~semaphore_units() noexcept (defined in seastar::semaphore_units< ExceptionFactory, Clock >)seastar::semaphore_units< ExceptionFactory, Clock >inline
+ + + + diff --git a/master/classseastar_1_1semaphore__units.html b/master/classseastar_1_1semaphore__units.html new file mode 100644 index 000000000..aa762629e --- /dev/null +++ b/master/classseastar_1_1semaphore__units.html @@ -0,0 +1,255 @@ + + + + + + + +Seastar: seastar::semaphore_units< ExceptionFactory, Clock > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::semaphore_units< ExceptionFactory, Clock > Class Template Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

semaphore_units (basic_semaphore< ExceptionFactory, Clock > &sem, size_t n) noexcept
 
semaphore_units (semaphore_units &&o) noexcept
 
+semaphore_unitsoperator= (semaphore_units &&o) noexcept
 
semaphore_units (const semaphore_units &)=delete
 
size_t return_units (size_t units)
 
+void return_all () noexcept
 Return ownership of all units. The semaphore will be signaled by the number of units returned.
 
size_t release () noexcept
 
semaphore_units split (size_t units)
 
void adopt (semaphore_units &&other) noexcept
 
+size_t count () const noexcept
 Returns the number of units held.
 
operator bool () const noexcept
 Returns true iff there any units held.
 
+

Member Function Documentation

+ +

◆ adopt()

+ +
+
+
+template<typename ExceptionFactory = semaphore_default_exception_factory, typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + +
void seastar::semaphore_units< ExceptionFactory, Clock >::adopt (semaphore_units< ExceptionFactory, Clock > && other)
+
+inlinenoexcept
+
+

The inverse of split(), in which the units held by the specified semaphore_units object are merged into the current one. The function assumes (and asserts) that both are associated with the same semaphore.

+
Returns
the updated semaphore_units object
+ +
+
+ +

◆ release()

+ +
+
+
+template<typename ExceptionFactory = semaphore_default_exception_factory, typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + +
size_t seastar::semaphore_units< ExceptionFactory, Clock >::release ()
+
+inlinenoexcept
+
+

Releases ownership of the units. The semaphore will not be signalled.

+
Returns
the number of units held
+ +
+
+ +

◆ return_units()

+ +
+
+
+template<typename ExceptionFactory = semaphore_default_exception_factory, typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + +
size_t seastar::semaphore_units< ExceptionFactory, Clock >::return_units (size_t units)
+
+inline
+
+

Return ownership of some units to the semaphore. The semaphore will be signaled by the number of units returned.

+
Parameters
+ + +
unitsnumber of units to subtract.
+
+
+
Note
throws exception if units is more than those protected by the semaphore
+
Returns
the number of remaining units
+ +
+
+ +

◆ split()

+ +
+
+
+template<typename ExceptionFactory = semaphore_default_exception_factory, typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + +
semaphore_units seastar::semaphore_units< ExceptionFactory, Clock >::split (size_t units)
+
+inline
+
+

Splits this instance into a semaphore_units object holding the specified amount of units. This object will continue holding the remaining units.

+
Parameters
+ + +
unitsnumber of units to subtract.
+
+
+
Note
throws exception if units is more than those protected by the semaphore
+
Returns
semaphore_units holding the specified number of units
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1server__socket-members.html b/master/classseastar_1_1server__socket-members.html new file mode 100644 index 000000000..99b0b33c1 --- /dev/null +++ b/master/classseastar_1_1server__socket-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::server_socket Member List
+
+
+ +

This is the complete list of members for seastar::server_socket, including all inherited members.

+ + + + + + + + + + +
abort_accept()seastar::server_socket
accept()seastar::server_socket
load_balancing_algorithm enum name (defined in seastar::server_socket)seastar::server_socket
local_address() const noexceptseastar::server_socket
operator bool() const noexceptseastar::server_socketinlineexplicit
operator=(server_socket &&cs) noexceptseastar::server_socket
server_socket() noexceptseastar::server_socket
server_socket(server_socket &&ss) noexceptseastar::server_socket
~server_socket() (defined in seastar::server_socket)seastar::server_socket
+ + + + diff --git a/master/classseastar_1_1server__socket.html b/master/classseastar_1_1server__socket.html new file mode 100644 index 000000000..11b4f21f7 --- /dev/null +++ b/master/classseastar_1_1server__socket.html @@ -0,0 +1,225 @@ + + + + + + + +Seastar: seastar::server_socket Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::server_socket Class Reference
+
+
+

Detailed Description

+

A listening socket, waiting to accept incoming network connections.

+
+

#include <seastar/net/api.hh>

+ + + + +

+Public Types

enum class  load_balancing_algorithm { connection_distribution +, port +, fixed +, default_ = connection_distribution + }
 
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

server_socket () noexcept
 Constructs a server_socket without being bound to any address.
 
server_socket (server_socket &&ss) noexcept
 Moves a server_socket object.
 
+server_socketoperator= (server_socket &&cs) noexcept
 Move-assigns a server_socket object.
 
future< accept_resultaccept ()
 
void abort_accept ()
 
socket_address local_address () const noexcept
 
 operator bool () const noexcept
 
+

Member Function Documentation

+ +

◆ abort_accept()

+ +
+
+ + + + + + + +
void seastar::server_socket::abort_accept ()
+
+

Stops any accept() in progress.

+

Current and future accept() calls will terminate immediately with an error.

+ +
+
+ +

◆ accept()

+ +
+
+ + + + + + + +
future< accept_result > seastar::server_socket::accept ()
+
+

Accepts the next connection to successfully connect to this socket.

+
Returns
an accept_result representing the connection and the socket_address of the remote endpoint.
+
See also
listen(socket_address sa)
+
+listen(socket_address sa, listen_options opts)
+ +
+
+ +

◆ local_address()

+ +
+
+ + + + + +
+ + + + + + + +
socket_address seastar::server_socket::local_address () const
+
+noexcept
+
+

Local bound address

+
Returns
the local bound address if the server_socket is listening, an empty address constructed with socket_address() otherwise.
+
See also
listen(socket_address sa)
+
+listen(socket_address sa, listen_options opts)
+ +
+
+ +

◆ operator bool()

+ +
+
+ + + + + +
+ + + + + + + +
seastar::server_socket::operator bool () const
+
+inlineexplicitnoexcept
+
+

Check whether the server_socket is listening on any address.

+
Returns
true if this socket_address is bound to an address, false if it is just created with the default constructor.
+
See also
listen(socket_address sa)
+
+listen(socket_address sa, listen_options opts)
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1sharded-members.html b/master/classseastar_1_1sharded-members.html new file mode 100644 index 000000000..178894664 --- /dev/null +++ b/master/classseastar_1_1sharded-members.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::sharded< Service > Member List
+
+
+ +

This is the complete list of members for seastar::sharded< Service >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
invoke_on(unsigned id, smp_submit_to_options options, Func &&func, Args &&... args)seastar::sharded< Service >inline
invoke_on(unsigned id, Func &&func, Args &&... args)seastar::sharded< Service >inline
invoke_on_all(smp_submit_to_options options, std::function< future<>(Service &)> func) noexceptseastar::sharded< Service >
invoke_on_all(std::function< future<>(Service &)> func) noexceptseastar::sharded< Service >inline
invoke_on_all(smp_submit_to_options options, Func func, Args... args) noexceptseastar::sharded< Service >inline
invoke_on_all(Func func, Args... args) noexceptseastar::sharded< Service >inline
invoke_on_others(smp_submit_to_options options, Func func, Args... args) noexceptseastar::sharded< Service >inline
invoke_on_others(Func func, Args... args) noexceptseastar::sharded< Service >inline
local() const noexceptseastar::sharded< Service >
local() noexceptseastar::sharded< Service >
local_is_initialized() const noexceptseastar::sharded< Service >inline
local_shared() noexceptseastar::sharded< Service >
map(Mapper mapper)seastar::sharded< Service >inline
map_reduce(Reducer &&r, Func &&func, Args &&... args) -> typename reducer_traits< Reducer >::future_typeseastar::sharded< Service >inline
map_reduce(Reducer &&r, Func &&func, Args &&... args) const -> typename reducer_traits< Reducer >::future_typeseastar::sharded< Service >inline
map_reduce0(Mapper map, Initial initial, Reduce reduce)seastar::sharded< Service >inline
map_reduce0(Mapper map, Initial initial, Reduce reduce) constseastar::sharded< Service >inline
operator=(const sharded &other)=delete (defined in seastar::sharded< Service >)seastar::sharded< Service >
operator=(sharded &&other)=delete (defined in seastar::sharded< Service >)seastar::sharded< Service >
sharded() noexceptseastar::sharded< Service >inline
sharded(const sharded &other)=delete (defined in seastar::sharded< Service >)seastar::sharded< Service >
sharded(sharded &&other)=deleteseastar::sharded< Service >
start(Args &&... args) noexceptseastar::sharded< Service >
start_single(Args &&... args) noexceptseastar::sharded< Service >
stop() noexceptseastar::sharded< Service >
~sharded()seastar::sharded< Service >
+ + + + diff --git a/master/classseastar_1_1sharded.html b/master/classseastar_1_1sharded.html new file mode 100644 index 000000000..74868f94c --- /dev/null +++ b/master/classseastar_1_1sharded.html @@ -0,0 +1,920 @@ + + + + + + + +Seastar: seastar::sharded< Service > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::sharded< Service > Class Template Reference
+
+
+

Detailed Description

+
template<typename Service>
+class seastar::sharded< Service >

Template helper to distribute a service across all logical cores.

+

The sharded template manages a sharded service, by creating a copy of the service on each logical core, providing mechanisms to communicate with each shard's copy, and a way to stop the service.

+
Template Parameters
+ + +
Servicea class to be instantiated on each core. Must expose a stop() method that returns a future<>, to be called when the service is stopped.
+
+
+
Examples
sharded_parameter_demo.cc.
+
+
+

#include <seastar/core/sharded.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 sharded () noexcept
 
sharded (const sharded &other)=delete
 
+shardedoperator= (const sharded &other)=delete
 
 sharded (sharded &&other)=delete
 
+shardedoperator= (sharded &&other)=delete
 
~sharded ()
 Destroyes a sharded object. Must not be in a started state.
 
template<typename... Args>
future start (Args &&... args) noexcept
 
template<typename... Args>
future start_single (Args &&... args) noexcept
 
future stop () noexcept
 
future invoke_on_all (smp_submit_to_options options, std::function< future<>(Service &)> func) noexcept
 
future invoke_on_all (std::function< future<>(Service &)> func) noexcept
 
template<typename Func , typename... Args>
+requires std::invocable<Func, Service&, internal::sharded_unwrap_t<Args>...>
future invoke_on_all (smp_submit_to_options options, Func func, Args... args) noexcept
 
template<typename Func , typename... Args>
+requires std::invocable<Func, Service&, internal::sharded_unwrap_t<Args>...>
future invoke_on_all (Func func, Args... args) noexcept
 
template<typename Func , typename... Args>
+requires std::invocable<Func, Service&, Args...>
future invoke_on_others (smp_submit_to_options options, Func func, Args... args) noexcept
 
template<typename Func , typename... Args>
+requires std::invocable<Func, Service&, Args...>
future invoke_on_others (Func func, Args... args) noexcept
 
template<typename Reducer , typename Func , typename... Args>
auto map_reduce (Reducer &&r, Func &&func, Args &&... args) -> typename reducer_traits< Reducer >::future_type
 
+template<typename Reducer , typename Func , typename... Args>
auto map_reduce (Reducer &&r, Func &&func, Args &&... args) const -> typename reducer_traits< Reducer >::future_type
 The const version of map_reduce(Reducer&& r, Func&& func)
 
template<typename Mapper , typename Initial , typename Reduce >
future< Initial > map_reduce0 (Mapper map, Initial initial, Reduce reduce)
 
+template<typename Mapper , typename Initial , typename Reduce >
future< Initial > map_reduce0 (Mapper map, Initial initial, Reduce reduce) const
 The const version of map_reduce0(Mapper map, Initial initial, Reduce reduce)
 
template<typename Mapper , typename Future = futurize_t<std::invoke_result_t<Mapper,Service&>>, typename return_type = decltype(internal::untuple(std::declval<typename Future::tuple_type>()))>
future< std::vector< return_type > > map (Mapper mapper)
 
template<typename Func , typename... Args, typename Ret = futurize_t<std::invoke_result_t<Func, Service&, Args...>>>
+requires std::invocable<Func, Service&, Args&&...>
Ret invoke_on (unsigned id, smp_submit_to_options options, Func &&func, Args &&... args)
 
template<typename Func , typename... Args, typename Ret = futurize_t<std::invoke_result_t<Func, Service&, Args&&...>>>
+requires std::invocable<Func, Service&, Args&&...>
Ret invoke_on (unsigned id, Func &&func, Args &&... args)
 
+const Service & local () const noexcept
 Gets a reference to the local instance.
 
+Service & local () noexcept
 Gets a reference to the local instance.
 
+shared_ptr< Service > local_shared () noexcept
 Gets a shared pointer to the local instance.
 
+bool local_is_initialized () const noexcept
 Checks whether the local instance has been initialized.
 
+

Constructor & Destructor Documentation

+ +

◆ sharded() [1/2]

+ +
+
+
+template<typename Service >
+ + + + + +
+ + + + + + + +
seastar::sharded< Service >::sharded ()
+
+inlinenoexcept
+
+

Constructs an empty sharded object. No instances of the service are created.

+ +
+
+ +

◆ sharded() [2/2]

+ +
+
+
+template<typename Service >
+ + + + + +
+ + + + + + + + +
seastar::sharded< Service >::sharded (sharded< Service > && other)
+
+delete
+
+

Sharded object with T that inherits from peering_sharded_service cannot be moved safely, so disable move operations.

+ +
+
+

Member Function Documentation

+ +

◆ invoke_on() [1/2]

+ +
+
+
+template<typename Service >
+
+template<typename Func , typename... Args, typename Ret = futurize_t<std::invoke_result_t<Func, Service&, Args&&...>>>
+requires std::invocable<Func, Service&, Args&&...>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Ret seastar::sharded< Service >::invoke_on (unsigned id,
Func && func,
Args &&... args 
)
+
+inline
+
+

Invoke a callable on a specific instance of Service.

+
Parameters
+ + + + +
idshard id to call
funca callable with signature Value (Service&) or future<Value> (Service&) (for some Value type), or a pointer to a member function of Service
argsparameters to the callable
+
+
+
Returns
result of calling func(instance) on the designated instance
+ +
+
+ +

◆ invoke_on() [2/2]

+ +
+
+
+template<typename Service >
+
+template<typename Func , typename... Args, typename Ret = futurize_t<std::invoke_result_t<Func, Service&, Args...>>>
+requires std::invocable<Func, Service&, Args&&...>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ret seastar::sharded< Service >::invoke_on (unsigned id,
smp_submit_to_options options,
Func && func,
Args &&... args 
)
+
+inline
+
+

Invoke a callable on a specific instance of Service.

+
Parameters
+ + + + + +
idshard id to call
optionsthe options to forward to the smp::submit_to() called behind the scenes.
funca callable with signature Value (Service&, Args...) or future<Value> (Service&, Args...) (for some Value type), or a pointer to a member function of Service
argsparameters to the callable; will be copied or moved. To pass by reference, use std::ref().
+
+
+
Returns
result of calling func(instance) on the designated instance
+ +
+
+ +

◆ invoke_on_all() [1/4]

+ +
+
+
+template<typename Service >
+
+template<typename Func , typename... Args>
+requires std::invocable<Func, Service&, internal::sharded_unwrap_t<Args>...>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::sharded< Service >::invoke_on_all (Func func,
Args... args 
)
+
+inlinenoexcept
+
+

Invoke a function on all instances of Service. The return value becomes ready when all instances have processed the message. Passes the default smp_submit_to_options to the smp::submit_to() called behind the scenes.

+ +
+
+ +

◆ invoke_on_all() [2/4]

+ +
+
+
+template<typename Service >
+requires std::invocable<Func, Service&, internal::sharded_unwrap_t<Args>...>
+
+template<typename Func , typename... Args>
+requires std::invocable<Func, Service&, internal::sharded_unwrap_t<Args>...>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future seastar::sharded< Service >::invoke_on_all (smp_submit_to_options options,
Func func,
Args... args 
)
+
+inlinenoexcept
+
+

Invoke a function on all instances of Service. The return value becomes ready when all instances have processed the message. The function can be a member pointer to function, a free function, or a functor. The first argument of the function will be a reference to the local service on the shard.

+

For a non-static pointer-to-member-function, the first argument becomes this, not the first declared parameter.

+
Parameters
+ + + +
optionsthe options to forward to the smp::submit_to() called behind the scenes.
funcinvocable accepting a Service& as the first parameter to be invoked on all shards
+
+
+
Returns
Future that becomes ready once all calls have completed
+ +
+
+ +

◆ invoke_on_all() [3/4]

+ +
+
+
+template<typename Service >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::sharded< Service >::invoke_on_all (smp_submit_to_options options,
std::function< future<>(Service &)> func 
)
+
+noexcept
+
+

Invoke a type-erased function on all instances of Service. The return value becomes ready when all instances have processed the message.

+
Parameters
+ + + +
optionsthe options to forward to the smp::submit_to() called behind the scenes.
funcFunction to be invoked on all shards
+
+
+
Returns
Future that becomes ready once all calls have completed
+
Examples
sharded_parameter_demo.cc.
+
+ +
+
+ +

◆ invoke_on_all() [4/4]

+ +
+
+
+template<typename Service >
+ + + + + +
+ + + + + + + + +
future seastar::sharded< Service >::invoke_on_all (std::function< future<>(Service &)> func)
+
+inlinenoexcept
+
+

Invoke a type-erased function on all instances of Service. The return value becomes ready when all instances have processed the message. Passes the default smp_submit_to_options to the smp::submit_to() called behind the scenes.

+ +
+
+ +

◆ invoke_on_others() [1/2]

+ +
+
+
+template<typename Service >
+
+template<typename Func , typename... Args>
+requires std::invocable<Func, Service&, Args...>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::sharded< Service >::invoke_on_others (Func func,
Args... args 
)
+
+inlinenoexcept
+
+

Invoke a callable on all instances of Service except the instance which is allocated on current shard.

+
Parameters
+ + +
funca callable with the signature void (Service&) or future<> (Service&), to be called on each core with the local instance as an argument.
+
+
+
Returns
a future<> that becomes ready when all cores but the current one have processed the message.
+

Passes the default smp_submit_to_options to the smp::submit_to() called behind the scenes.

+ +
+
+ +

◆ invoke_on_others() [2/2]

+ +
+
+
+template<typename Service >
+requires std::invocable<Func, Service&, Args...>
+
+template<typename Func , typename... Args>
+requires std::invocable<Func, Service&, Args...>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future seastar::sharded< Service >::invoke_on_others (smp_submit_to_options options,
Func func,
Args... args 
)
+
+inlinenoexcept
+
+

Invoke a callable on all instances of Service except the instance which is allocated on current shard.

+
Parameters
+ + + +
optionsthe options to forward to the smp::submit_to() called behind the scenes.
funca callable with the signature void (Service&) or future<> (Service&), to be called on each core with the local instance as an argument.
+
+
+
Returns
a future<> that becomes ready when all cores but the current one have processed the message.
+ +
+
+ +

◆ map()

+ +
+
+
+template<typename Service >
+
+template<typename Mapper , typename Future = futurize_t<std::invoke_result_t<Mapper,Service&>>, typename return_type = decltype(internal::untuple(std::declval<typename Future::tuple_type>()))>
+ + + + + +
+ + + + + + + + +
future< std::vector< return_type > > seastar::sharded< Service >::map (Mapper mapper)
+
+inline
+
+

Applies a map function to all shards, and return a vector of the result.

+
Parameters
+ + +
mappercallable with the signature Value (Service&) or future<Value> (Service&) (for some Value type).
+
+
+

Each map invocation runs on the shard associated with the service.

+
Template Parameters
+ + +
Mapperunary function taking Service& and producing some result.
+
+
+
Returns
Result vector of invoking map with each instance in parallel
+ +
+
+ +

◆ map_reduce()

+ +
+
+
+template<typename Service >
+
+template<typename Reducer , typename Func , typename... Args>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
auto seastar::sharded< Service >::map_reduce (Reducer && r,
Func && func,
Args &&... args 
) -> typename reducer_traits<Reducer>::future_type +
+
+inline
+
+

Invoke a callable on all instances of Service and reduce the results using Reducer.

+
See also
map_reduce(Iterator begin, Iterator end, Mapper&& mapper, Reducer&& r)
+ +
+
+ +

◆ map_reduce0()

+ +
+
+
+template<typename Service >
+
+template<typename Mapper , typename Initial , typename Reduce >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< Initial > seastar::sharded< Service >::map_reduce0 (Mapper map,
Initial initial,
Reduce reduce 
)
+
+inline
+
+

Applies a map function to all shards, then reduces the output by calling a reducer function.

+
Parameters
+ + + + +
mapcallable with the signature Value (Service&) or future<Value> (Service&) (for some Value type). used as the second input to reduce
initialinitial value used as the first input to reduce.
reducebinary function used to left-fold the return values of map into initial .
+
+
+

Each map invocation runs on the shard associated with the service.

+
Template Parameters
+ + + + +
Mapperunary function taking Service& and producing some result.
Initialany value type
Reducea binary function taking two Initial values and returning an Initial
+
+
+
Returns
Result of invoking map with each instance in parallel, reduced by calling reduce() on each adjacent pair of results.
+ +
+
+ +

◆ start()

+ +
+
+
+template<typename Service >
+
+template<typename... Args>
+ + + + + +
+ + + + + + + + +
future seastar::sharded< Service >::start (Args &&... args)
+
+noexcept
+
+

Starts Service by constructing an instance on every logical core with a copy of args passed to the constructor.

+
Parameters
+ + +
argsArguments to be forwarded to Service constructor
+
+
+
Returns
a seastar::future<> that becomes ready when all instances have been constructed.
+
Examples
sharded_parameter_demo.cc.
+
+ +
+
+ +

◆ start_single()

+ +
+
+
+template<typename Service >
+
+template<typename... Args>
+ + + + + +
+ + + + + + + + +
future seastar::sharded< Service >::start_single (Args &&... args)
+
+noexcept
+
+

Starts Service by constructing an instance on a single logical core with a copy of args passed to the constructor.

+
Parameters
+ + +
argsArguments to be forwarded to Service constructor
+
+
+
Returns
a seastar::future<> that becomes ready when the instance has been constructed.
+ +
+
+ +

◆ stop()

+ +
+
+
+template<typename Service >
+ + + + + +
+ + + + +
future seastar::sharded< Service >::stop
+
+noexcept
+
+

Stops all started instances and destroys them.

+

For every started instance, its stop() method is called, and then it is destroyed.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1sharded__parameter-members.html b/master/classseastar_1_1sharded__parameter-members.html new file mode 100644 index 000000000..763f4430f --- /dev/null +++ b/master/classseastar_1_1sharded__parameter-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::sharded_parameter< Func, Params > Member List
+
+
+ +

This is the complete list of members for seastar::sharded_parameter< Func, Params >, including all inherited members.

+ + + +
internal::unwrap_sharded_arg (defined in seastar::sharded_parameter< Func, Params >)seastar::sharded_parameter< Func, Params >friend
sharded_parameter(Func func, Params... params)seastar::sharded_parameter< Func, Params >inlineexplicit
+ + + + diff --git a/master/classseastar_1_1sharded__parameter.html b/master/classseastar_1_1sharded__parameter.html new file mode 100644 index 000000000..306b2e400 --- /dev/null +++ b/master/classseastar_1_1sharded__parameter.html @@ -0,0 +1,145 @@ + + + + + + + +Seastar: seastar::sharded_parameter< Func, Params > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::sharded_parameter< Func, Params > Class Template Reference
+
+
+

Detailed Description

+
template<typename Func, typename... Params>
+class seastar::sharded_parameter< Func, Params >

Helper to pass a parameter to a sharded<> object that depends on the shard. It is evaluated on the shard, just before being passed to the local instance. It is useful when passing parameters to sharded::start().

+
Examples
sharded_parameter_demo.cc.
+
+
+

#include <seastar/core/sharded.hh>

+ + + + +

+Public Member Functions

 sharded_parameter (Func func, Params... params)
 
+

Constructor & Destructor Documentation

+ +

◆ sharded_parameter()

+ +
+
+
+template<typename Func , typename... Params>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
seastar::sharded_parameter< Func, Params >::sharded_parameter (Func func,
Params... params 
)
+
+inlineexplicit
+
+

Creates a sharded parameter, which evaluates differently based on the shard it is executed on.

+
Parameters
+ + + +
funcFunction to be executed
paramsoptional parameters to be passed to the function. Can be std::ref(sharded<whatever>), in which case the local instance will be passed. Anything else will be passed by value unchanged.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1shared__future-members.html b/master/classseastar_1_1shared__future-members.html new file mode 100644 index 000000000..39de574ad --- /dev/null +++ b/master/classseastar_1_1shared__future-members.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::shared_future< T > Member List
+
+
+ +

This is the complete list of members for seastar::shared_future< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
available() const noexceptseastar::shared_future< T >inline
clock typedef (defined in seastar::shared_future< T >)seastar::shared_future< T >
failed() const noexceptseastar::shared_future< T >inline
future_type typedef (defined in seastar::shared_future< T >)seastar::shared_future< T >
get_future(time_point timeout=time_point::max()) const noexceptseastar::shared_future< T >inline
get_future(abort_source &as) const noexceptseastar::shared_future< T >inline
operator future_type() const noexceptseastar::shared_future< T >inline
operator=(const shared_future &)=default (defined in seastar::shared_future< T >)seastar::shared_future< T >
operator=(shared_future &&)=default (defined in seastar::shared_future< T >)seastar::shared_future< T >
promise_type typedef (defined in seastar::shared_future< T >)seastar::shared_future< T >
shared_future(future_type f)seastar::shared_future< T >inline
shared_future()=default (defined in seastar::shared_future< T >)seastar::shared_future< T >
shared_future(const shared_future &)=default (defined in seastar::shared_future< T >)seastar::shared_future< T >
shared_future(shared_future &&)=default (defined in seastar::shared_future< T >)seastar::shared_future< T >
time_point typedef (defined in seastar::shared_future< T >)seastar::shared_future< T >
valid() const noexceptseastar::shared_future< T >inline
value_tuple_type typedef (defined in seastar::shared_future< T >)seastar::shared_future< T >
+ + + + diff --git a/master/classseastar_1_1shared__future.html b/master/classseastar_1_1shared__future.html new file mode 100644 index 000000000..dc1152ecf --- /dev/null +++ b/master/classseastar_1_1shared__future.html @@ -0,0 +1,294 @@ + + + + + + + +Seastar: seastar::shared_future< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::shared_future< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename... T>
+class seastar::shared_future< T >

Like future except the result can be waited for by many fibers.

+

Represents a value which may not yet be ready. A fiber can wait for the value using the future obtained by calling get_future() or casting to future type. Multiple fibers are allowed to obtain a future for the result using the same instance of shared_future.

+

All futures obtained from shared_future should end up in the same state. However, if the value's copy constructor throws, some of the futures may end up in a failed state with an exception thrown from the copy constructor and end up with a state different than other futures.

+

The scope of shared_future instance doesn't have to include scopes of the futures obtained from that instance. In that sense the returned futures are independent.

+

shared_future can be copied at any time and all copies will resolve with the same value.

+

shared_future can be in a disengaged state when it's default-constructed or moved-from. When it's in such a state we say it's invalid and obtaining futures must not be attempted.

+

The types in the parameter pack T must all be copy-constructible.

+

When the first type in the parameter pack is with_clock then it has the effect of changing the clock used for timeouts by this instance. This type is omitted from the parameter of the future<> objects.

+

Example:

+

future<int> f; shared_future<with_clock<manual_clock>, int> sf(std::move(f)); future<int> f2 = sf;

+
+

#include <seastar/core/shared_future.hh>

+ + + + + + + + + + + + +

+Public Types

+using clock = typename options::clock_type
 
+using time_point = typename clock::time_point
 
+using future_type = typename future_option_traits< T... >::future_type
 
+using promise_type = typename future_option_traits< T... >::promise_type
 
+using value_tuple_type = typename future_type::tuple_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

shared_future (future_type f)
 Forwards the result of future f into this shared_future.
 
shared_future (const shared_future &)=default
 
+shared_futureoperator= (const shared_future &)=default
 
shared_future (shared_future &&)=default
 
+shared_futureoperator= (shared_future &&)=default
 
future_type get_future (time_point timeout=time_point::max()) const noexcept
 Creates a new future which will resolve with the result of this shared_future. More...
 
future_type get_future (abort_source &as) const noexcept
 Creates a new future which will resolve with the result of this shared_future. More...
 
bool available () const noexcept
 Returns true if the future is available (ready or failed) More...
 
bool failed () const noexcept
 Returns true if the future is failed. More...
 
operator future_type () const noexcept
 Equivalent to get_future()
 
+bool valid () const noexcept
 Returns true if the instance is in valid state.
 
+

Member Function Documentation

+ +

◆ available()

+ +
+
+
+template<typename... T>
+ + + + + +
+ + + + + + + +
bool seastar::shared_future< T >::available () const
+
+inlinenoexcept
+
+ +

Returns true if the future is available (ready or failed)

+
Note
This object must be in a valid state.
+ +
+
+ +

◆ failed()

+ +
+
+
+template<typename... T>
+ + + + + +
+ + + + + + + +
bool seastar::shared_future< T >::failed () const
+
+inlinenoexcept
+
+ +

Returns true if the future is failed.

+
Note
This object must be in a valid state.
+ +
+
+ +

◆ get_future() [1/2]

+ +
+
+
+template<typename... T>
+ + + + + +
+ + + + + + + + +
future_type seastar::shared_future< T >::get_future (abort_sourceas) const
+
+inlinenoexcept
+
+ +

Creates a new future which will resolve with the result of this shared_future.

+
Parameters
+ + +
asabort source. The returned future will resolve with abort_requested_exception if this shared_future doesn't resolve before aborted.
+
+
+

This object must be in a valid state.

+ +
+
+ +

◆ get_future() [2/2]

+ +
+
+
+template<typename... T>
+ + + + + +
+ + + + + + + + +
future_type seastar::shared_future< T >::get_future (time_point timeout = time_point::max()) const
+
+inlinenoexcept
+
+ +

Creates a new future which will resolve with the result of this shared_future.

+
Parameters
+ + +
timeoutWhen engaged, the returned future will resolve with timed_out_error if this shared_future doesn't resolve before timeout is reached.
+
+
+

This object must be in a valid state.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/master/classseastar_1_1shared__mutex-members.html b/master/classseastar_1_1shared__mutex-members.html new file mode 100644 index 000000000..f5696e6bf --- /dev/null +++ b/master/classseastar_1_1shared__mutex-members.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::shared_mutex Member List
+
+
+ +

This is the complete list of members for seastar::shared_mutex, including all inherited members.

+ + + + + + + + + + + + + + +
lock() noexceptseastar::shared_mutexinline
lock_shared() noexceptseastar::shared_mutexinline
operator=(shared_mutex &&)=default (defined in seastar::shared_mutex)seastar::shared_mutex
operator=(const shared_mutex &)=delete (defined in seastar::shared_mutex)seastar::shared_mutex
shared_mutex()=default (defined in seastar::shared_mutex)seastar::shared_mutex
shared_mutex(shared_mutex &&)=default (defined in seastar::shared_mutex)seastar::shared_mutex
shared_mutex(const shared_mutex &)=delete (defined in seastar::shared_mutex)seastar::shared_mutex
try_lock() noexceptseastar::shared_mutexinline
try_lock_shared() noexceptseastar::shared_mutexinline
unlock() noexceptseastar::shared_mutexinline
unlock_shared() noexceptseastar::shared_mutexinline
with_lock(shared_mutex &sm, Func &&func) noexceptseastar::shared_mutexrelated
with_shared(shared_mutex &sm, Func &&func) noexceptseastar::shared_mutexrelated
+ + + + diff --git a/master/classseastar_1_1shared__mutex.html b/master/classseastar_1_1shared__mutex.html new file mode 100644 index 000000000..ede4b5a77 --- /dev/null +++ b/master/classseastar_1_1shared__mutex.html @@ -0,0 +1,247 @@ + + + + + + + +Seastar: seastar::shared_mutex Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::shared_mutex Class Reference
+
+
+

Detailed Description

+

Shared/exclusive mutual exclusion.

+

Similar to std::shared_mutex, this class provides protection for a shared resource, with two levels of access protection: shared and exclusive. Shared access allows multiple tasks to access the shared resource concurrently, while exclusive access allows just one task to access the resource at a time.

+

Note that many seastar tasks do not require protection at all, since the seastar scheduler is not preemptive; however tasks that do (by waiting on a future) may require explicit locking.

+

The with_shared(shared_mutex&, Func&&) and with_lock(shared_mutex&, Func&&) provide exception-safe wrappers for use with shared_mutex.

+
See also
semaphore simpler mutual exclusion
+
+

#include <seastar/core/shared_mutex.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

shared_mutex (shared_mutex &&)=default
 
+shared_mutexoperator= (shared_mutex &&)=default
 
shared_mutex (const shared_mutex &)=delete
 
+void operator= (const shared_mutex &)=delete
 
future lock_shared () noexcept
 
bool try_lock_shared () noexcept
 
+void unlock_shared () noexcept
 Unlocks a shared_mutex after a previous call to lock_shared().
 
future lock () noexcept
 
bool try_lock () noexcept
 
+void unlock () noexcept
 Unlocks a shared_mutex after a previous call to lock().
 
+ + + + + + + + +

+Related Functions

(Note that these are not member functions.)

+
template<std::invocable Func>
futurize_t< std::invoke_result_t< Func > > with_shared (shared_mutex &sm, Func &&func) noexcept
 
template<std::invocable Func>
futurize_t< std::invoke_result_t< Func > > with_lock (shared_mutex &sm, Func &&func) noexcept
 
+

Member Function Documentation

+ +

◆ lock()

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::shared_mutex::lock ()
+
+inlinenoexcept
+
+

Lock the shared_mutex for exclusive access

+
Returns
a future that becomes ready when no access, shared or exclusive is granted to anyone.
+ +
+
+ +

◆ lock_shared()

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::shared_mutex::lock_shared ()
+
+inlinenoexcept
+
+

Lock the shared_mutex for shared access

+
Returns
a future that becomes ready when no exclusive access is granted to anyone.
+ +
+
+ +

◆ try_lock()

+ +
+
+ + + + + +
+ + + + + + + +
bool seastar::shared_mutex::try_lock ()
+
+inlinenoexcept
+
+

Try to lock the shared_mutex for exclusive access

+
Returns
true iff could acquire the lock for exclusive access.
+ +
+
+ +

◆ try_lock_shared()

+ +
+
+ + + + + +
+ + + + + + + +
bool seastar::shared_mutex::try_lock_shared ()
+
+inlinenoexcept
+
+

Try to lock the shared_mutex for shared access

+
Returns
true iff could acquire the lock for shared access.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1shared__promise-members.html b/master/classseastar_1_1shared__promise-members.html new file mode 100644 index 000000000..70b62bae8 --- /dev/null +++ b/master/classseastar_1_1shared__promise-members.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::shared_promise< T > Member List
+
+
+ +

This is the complete list of members for seastar::shared_promise< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
available() const noexceptseastar::shared_promise< T >inline
clock typedef (defined in seastar::shared_promise< T >)seastar::shared_promise< T >
failed() const noexceptseastar::shared_promise< T >inline
future_type typedef (defined in seastar::shared_promise< T >)seastar::shared_promise< T >
get_shared_future(time_point timeout=time_point::max()) const noexceptseastar::shared_promise< T >inline
get_shared_future(abort_source &as) const noexceptseastar::shared_promise< T >inline
operator=(shared_promise &&)=default (defined in seastar::shared_promise< T >)seastar::shared_promise< T >
promise_type typedef (defined in seastar::shared_promise< T >)seastar::shared_promise< T >
set_exception(std::exception_ptr ex) noexceptseastar::shared_promise< T >inline
set_exception(Exception &&e) noexceptseastar::shared_promise< T >inline
set_value(const value_tuple_type &result) noexcept(copy_noexcept)seastar::shared_promise< T >inline
set_value(value_tuple_type &&result) noexceptseastar::shared_promise< T >inline
set_value(A &&... a) noexceptseastar::shared_promise< T >inline
shared_future_type typedef (defined in seastar::shared_promise< T >)seastar::shared_promise< T >
shared_promise(const shared_promise &)=delete (defined in seastar::shared_promise< T >)seastar::shared_promise< T >
shared_promise(shared_promise &&)=default (defined in seastar::shared_promise< T >)seastar::shared_promise< T >
shared_promise() (defined in seastar::shared_promise< T >)seastar::shared_promise< T >inline
time_point typedef (defined in seastar::shared_promise< T >)seastar::shared_promise< T >
value_tuple_type typedef (defined in seastar::shared_promise< T >)seastar::shared_promise< T >
+ + + + diff --git a/master/classseastar_1_1shared__promise.html b/master/classseastar_1_1shared__promise.html new file mode 100644 index 000000000..6df78ce75 --- /dev/null +++ b/master/classseastar_1_1shared__promise.html @@ -0,0 +1,165 @@ + + + + + + + +Seastar: seastar::shared_promise< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::shared_promise< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename... T>
+class seastar::shared_promise< T >

Like promise except that its counterpart is shared_future instead of future.

+

When the shared_promise is made ready, every waiter is also made ready.

+

Like the shared_future, the types in the parameter pack T must all be copy-constructible.

+
+

#include <seastar/core/shared_future.hh>

+ + + + + + + + + + + + + + +

+Public Types

+using shared_future_type = shared_future< T... >
 
+using future_type = typename shared_future_type::future_type
 
+using promise_type = typename shared_future_type::promise_type
 
+using clock = typename shared_future_type::clock
 
+using time_point = typename shared_future_type::time_point
 
+using value_tuple_type = typename shared_future_type::value_tuple_type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

shared_promise (const shared_promise &)=delete
 
shared_promise (shared_promise &&)=default
 
+shared_promiseoperator= (shared_promise &&)=default
 
+future_type get_shared_future (time_point timeout=time_point::max()) const noexcept
 Gets new future associated with this promise. If the promise is not resolved before timeout the returned future will resolve with timed_out_error. This instance doesn't have to be kept alive until the returned future resolves.
 
+future_type get_shared_future (abort_source &as) const noexcept
 Gets new future associated with this promise. If the promise is not resolved before abort source is triggered the returned future will resolve with abort_requests_exception. This instance doesn't have to be kept alive until the returned future resolves.
 
+void set_value (const value_tuple_type &result) noexcept(copy_noexcept)
 Sets the shared_promise's value (as tuple; by copying), same as normal promise.
 
+void set_value (value_tuple_type &&result) noexcept
 Sets the shared_promise's value (as tuple; by moving), same as normal promise.
 
+template<typename... A>
void set_value (A &&... a) noexcept
 Sets the shared_promise's value (variadic), same as normal promise.
 
+void set_exception (std::exception_ptr ex) noexcept
 Marks the shared_promise as failed, same as normal promise.
 
+template<typename Exception >
void set_exception (Exception &&e) noexcept
 Marks the shared_promise as failed, same as normal promise.
 
+bool available () const noexcept
 Returns true if the underlying future is available (ready or failed)
 
+bool failed () const noexcept
 Returns true if the underlying future is failed.
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1shared__ptr-members.html b/master/classseastar_1_1shared__ptr-members.html new file mode 100644 index 000000000..17532ebbe --- /dev/null +++ b/master/classseastar_1_1shared__ptr-members.html @@ -0,0 +1,106 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::shared_ptr< T > Member List
+
+
+ +

This is the complete list of members for seastar::shared_ptr< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
const_pointer_cast (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >friend
dynamic_pointer_cast (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >friend
element_type typedef (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >
get() const noexcept (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inline
make(A &&... a) (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >static
make_shared (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >friend
make_shared (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >friend
operator bool() const noexcept (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inlineexplicit
operator*() const noexcept (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inline
operator->() const noexcept (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inline
operator=(const shared_ptr &x) noexcept (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inline
operator=(shared_ptr &&x) noexcept (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inline
operator=(std::nullptr_t) noexcept (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inline
operator=(const shared_ptr< U > &x) noexcept (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inline
operator=(shared_ptr< U > &&x) noexcept (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inline
shared_ptr() noexcept=default (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >
shared_ptr(std::nullptr_t) noexcept (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inline
shared_ptr(const shared_ptr &x) noexcept (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inline
shared_ptr(shared_ptr &&x) noexcept (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inline
shared_ptr(const shared_ptr< U > &x) noexcept (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inline
shared_ptr(shared_ptr< U > &&x) noexcept (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inline
static_pointer_cast (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >friend
use_count() const noexcept (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inline
~shared_ptr() (defined in seastar::shared_ptr< T >)seastar::shared_ptr< T >inline
+ + + + diff --git a/master/classseastar_1_1shared__ptr.html b/master/classseastar_1_1shared__ptr.html new file mode 100644 index 000000000..da5324a2a --- /dev/null +++ b/master/classseastar_1_1shared__ptr.html @@ -0,0 +1,174 @@ + + + + + + + +Seastar: seastar::shared_ptr< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::shared_ptr< T > Class Template Reference
+
+
+ + + + +

+Classes

struct  make_helper
 
+ + + +

+Public Types

+using element_type = T
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

shared_ptr (std::nullptr_t) noexcept
 
shared_ptr (const shared_ptr &x) noexcept
 
shared_ptr (shared_ptr &&x) noexcept
 
+template<typename U , typename = std::enable_if_t<std::is_base_of_v<T, U>>>
 shared_ptr (const shared_ptr< U > &x) noexcept
 
+template<typename U , typename = std::enable_if_t<std::is_base_of_v<T, U>>>
 shared_ptr (shared_ptr< U > &&x) noexcept
 
+shared_ptroperator= (const shared_ptr &x) noexcept
 
+shared_ptroperator= (shared_ptr &&x) noexcept
 
+shared_ptroperator= (std::nullptr_t) noexcept
 
+template<typename U , typename = std::enable_if_t<std::is_base_of_v<T, U>>>
shared_ptroperator= (const shared_ptr< U > &x) noexcept
 
+template<typename U , typename = std::enable_if_t<std::is_base_of_v<T, U>>>
shared_ptroperator= (shared_ptr< U > &&x) noexcept
 
operator bool () const noexcept
 
+T & operator* () const noexcept
 
+T * operator-> () const noexcept
 
+T * get () const noexcept
 
+long use_count () const noexcept
 
+ + + + +

+Static Public Member Functions

+template<bool esft, typename... A>
static shared_ptr make (A &&... a)
 
+

Class Documentation

+ +

◆ seastar::shared_ptr::make_helper

+ +
+
+ + + + +
struct seastar::shared_ptr::make_helper
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1simple__backtrace-members.html b/master/classseastar_1_1simple__backtrace-members.html new file mode 100644 index 000000000..02ee53eab --- /dev/null +++ b/master/classseastar_1_1simple__backtrace-members.html @@ -0,0 +1,90 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::simple_backtrace Member List
+
+
+ +

This is the complete list of members for seastar::simple_backtrace, including all inherited members.

+ + + + + + + + + +
delimeter() const noexcept (defined in seastar::simple_backtrace)seastar::simple_backtraceinline
hash() const noexcept (defined in seastar::simple_backtrace)seastar::simple_backtraceinline
operator!=(const simple_backtrace &o) const noexcept (defined in seastar::simple_backtrace)seastar::simple_backtraceinline
operator<< (defined in seastar::simple_backtrace)seastar::simple_backtracefriend
operator==(const simple_backtrace &o) const noexcept (defined in seastar::simple_backtrace)seastar::simple_backtraceinline
simple_backtrace(vector_type f, char delimeter=' ') noexcept (defined in seastar::simple_backtrace)seastar::simple_backtraceinline
simple_backtrace(char delimeter=' ') noexcept (defined in seastar::simple_backtrace)seastar::simple_backtraceinline
vector_type typedef (defined in seastar::simple_backtrace)seastar::simple_backtrace
+ + + + diff --git a/master/classseastar_1_1simple__backtrace.html b/master/classseastar_1_1simple__backtrace.html new file mode 100644 index 000000000..35a1bf6e9 --- /dev/null +++ b/master/classseastar_1_1simple__backtrace.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar::simple_backtrace Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::simple_backtrace Class Reference
+
+
+ + + + +

+Public Types

+using vector_type = boost::container::static_vector< frame, 64 >
 
+ + + + + + + + + + + + + +

+Public Member Functions

simple_backtrace (vector_type f, char delimeter=' ') noexcept
 
simple_backtrace (char delimeter=' ') noexcept
 
+size_t hash () const noexcept
 
+char delimeter () const noexcept
 
+bool operator== (const simple_backtrace &o) const noexcept
 
+bool operator!= (const simple_backtrace &o) const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1simple__memory__input__stream-members.html b/master/classseastar_1_1simple__memory__input__stream-members.html new file mode 100644 index 000000000..4ab14b4a4 --- /dev/null +++ b/master/classseastar_1_1simple__memory__input__stream-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::simple_memory_input_stream Member List
+
+
+ +

This is the complete list of members for seastar::simple_memory_input_stream, including all inherited members.

+ + + + + + + + + + +
begin() const (defined in seastar::simple_memory_input_stream)seastar::simple_memory_input_streaminline
copy_to(Output &out) const (defined in seastar::simple_memory_input_stream)seastar::simple_memory_input_streaminline
has_with_stream typedef (defined in seastar::simple_memory_input_stream)seastar::simple_memory_input_stream
read(char *p, size_t size) (defined in seastar::simple_memory_input_stream)seastar::simple_memory_input_streaminline
read_substream(size_t size) (defined in seastar::simple_memory_input_stream)seastar::simple_memory_input_streaminline
simple_memory_input_stream()=default (defined in seastar::simple_memory_input_stream)seastar::simple_memory_input_stream
simple_memory_input_stream(const char *p, size_t size) (defined in seastar::simple_memory_input_stream)seastar::simple_memory_input_streaminline
size() const (defined in seastar::simple_memory_input_stream)seastar::simple_memory_input_streaminline
skip(size_t size) (defined in seastar::simple_memory_input_stream)seastar::simple_memory_input_streaminline
+ + + + diff --git a/master/classseastar_1_1simple__memory__input__stream.html b/master/classseastar_1_1simple__memory__input__stream.html new file mode 100644 index 000000000..1eefbf45e --- /dev/null +++ b/master/classseastar_1_1simple__memory__input__stream.html @@ -0,0 +1,118 @@ + + + + + + + +Seastar: seastar::simple_memory_input_stream Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::simple_memory_input_stream Class Reference
+
+
+ + + + +

+Public Types

+using has_with_stream = std::false_type
 
+ + + + + + + + + + + + + + + + +

+Public Member Functions

simple_memory_input_stream (const char *p, size_t size)
 
+const char * begin () const
 
+void skip (size_t size)
 
+simple read_substream (size_t size)
 
+void read (char *p, size_t size)
 
+template<typename Output >
void copy_to (Output &out) const
 
+size_t size () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1simple__memory__output__stream-members.html b/master/classseastar_1_1simple__memory__output__stream-members.html new file mode 100644 index 000000000..d2deaeb3e --- /dev/null +++ b/master/classseastar_1_1simple__memory__output__stream-members.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::simple_memory_output_stream Member List
+
+
+ +

This is the complete list of members for seastar::simple_memory_output_stream, including all inherited members.

+ + + + + + + + + + + +
begin() (defined in seastar::simple_memory_output_stream)seastar::simple_memory_output_streaminline
fill(char c, size_t size) (defined in seastar::simple_memory_output_stream)seastar::simple_memory_output_streaminline
has_with_stream typedef (defined in seastar::simple_memory_output_stream)seastar::simple_memory_output_stream
simple_memory_output_stream() (defined in seastar::simple_memory_output_stream)seastar::simple_memory_output_streaminline
simple_memory_output_stream(char *p, size_t size, size_t start=0) (defined in seastar::simple_memory_output_stream)seastar::simple_memory_output_streaminline
size() const (defined in seastar::simple_memory_output_stream)seastar::simple_memory_output_streaminline
skip(size_t size) (defined in seastar::simple_memory_output_stream)seastar::simple_memory_output_streaminline
to_input_stream() const (defined in seastar::simple_memory_output_stream)seastar::simple_memory_output_streaminline
write(const char *p, size_t size) (defined in seastar::simple_memory_output_stream)seastar::simple_memory_output_streaminline
write_substream(size_t size) (defined in seastar::simple_memory_output_stream)seastar::simple_memory_output_streaminline
+ + + + diff --git a/master/classseastar_1_1simple__memory__output__stream.html b/master/classseastar_1_1simple__memory__output__stream.html new file mode 100644 index 000000000..7c9a2d21c --- /dev/null +++ b/master/classseastar_1_1simple__memory__output__stream.html @@ -0,0 +1,120 @@ + + + + + + + +Seastar: seastar::simple_memory_output_stream Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::simple_memory_output_stream Class Reference
+
+
+ + + + +

+Public Types

+using has_with_stream = std::false_type
 
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

simple_memory_output_stream (char *p, size_t size, size_t start=0)
 
+char * begin ()
 
+void skip (size_t size)
 
+simple_memory_output_stream write_substream (size_t size)
 
+void write (const char *p, size_t size)
 
+void fill (char c, size_t size)
 
+size_t size () const
 
+simple_memory_input_stream to_input_stream () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1skip__bytes-members.html b/master/classseastar_1_1skip__bytes-members.html new file mode 100644 index 000000000..2b6584b40 --- /dev/null +++ b/master/classseastar_1_1skip__bytes-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::skip_bytes Member List
+
+
+ +

This is the complete list of members for seastar::skip_bytes, including all inherited members.

+ + + +
get_value() const (defined in seastar::skip_bytes)seastar::skip_bytesinline
skip_bytes(uint64_t v) (defined in seastar::skip_bytes)seastar::skip_bytesinlineexplicit
+ + + + diff --git a/master/classseastar_1_1skip__bytes.html b/master/classseastar_1_1skip__bytes.html new file mode 100644 index 000000000..49bbed5da --- /dev/null +++ b/master/classseastar_1_1skip__bytes.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: seastar::skip_bytes Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::skip_bytes Class Reference
+
+
+ + + + + + +

+Public Member Functions

skip_bytes (uint64_t v)
 
+uint64_t get_value () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1slab__allocator-members.html b/master/classseastar_1_1slab__allocator-members.html new file mode 100644 index 000000000..c037f09ac --- /dev/null +++ b/master/classseastar_1_1slab__allocator-members.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::slab_allocator< Item > Member List
+
+
+ +

This is the complete list of members for seastar::slab_allocator< Item >, including all inherited members.

+ + + + + + + + + + + +
class_size(const size_t size)seastar::slab_allocator< Item >inline
create(const size_t size, Args &&... args)seastar::slab_allocator< Item >inline
free(Item *item)seastar::slab_allocator< Item >inline
lock_item(Item *item) (defined in seastar::slab_allocator< Item >)seastar::slab_allocator< Item >inline
print_slab_classes()seastar::slab_allocator< Item >inline
slab_allocator(double growth_factor, uint64_t limit, uint64_t max_object_size) (defined in seastar::slab_allocator< Item >)seastar::slab_allocator< Item >inline
slab_allocator(double growth_factor, uint64_t limit, uint64_t max_object_size, std::function< void(Item &item_ref)> erase_func) (defined in seastar::slab_allocator< Item >)seastar::slab_allocator< Item >inline
touch(Item *item)seastar::slab_allocator< Item >inline
unlock_item(Item *item) (defined in seastar::slab_allocator< Item >)seastar::slab_allocator< Item >inline
~slab_allocator() (defined in seastar::slab_allocator< Item >)seastar::slab_allocator< Item >inline
+ + + + diff --git a/master/classseastar_1_1slab__allocator.html b/master/classseastar_1_1slab__allocator.html new file mode 100644 index 000000000..7b790a9f8 --- /dev/null +++ b/master/classseastar_1_1slab__allocator.html @@ -0,0 +1,270 @@ + + + + + + + +Seastar: seastar::slab_allocator< Item > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::slab_allocator< Item > Class Template Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

slab_allocator (double growth_factor, uint64_t limit, uint64_t max_object_size)
 
slab_allocator (double growth_factor, uint64_t limit, uint64_t max_object_size, std::function< void(Item &item_ref)> erase_func)
 
template<typename... Args>
Item * create (const size_t size, Args &&... args)
 
+void lock_item (Item *item)
 
+void unlock_item (Item *item)
 
void free (Item *item)
 
void touch (Item *item)
 
void print_slab_classes ()
 
size_t class_size (const size_t size)
 
+

Member Function Documentation

+ +

◆ class_size()

+ +
+
+
+template<typename Item >
+ + + + + +
+ + + + + + + + +
size_t seastar::slab_allocator< Item >::class_size (const size_t size)
+
+inline
+
+

Helper function: Useful for getting a slab class' chunk size from a size parameter.

+ +
+
+ +

◆ create()

+ +
+
+
+template<typename Item >
+
+template<typename... Args>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Item * seastar::slab_allocator< Item >::create (const size_t size,
Args &&... args 
)
+
+inline
+
+

Create an item from a given slab class based on requested size.

+ +
+
+ +

◆ free()

+ +
+
+
+template<typename Item >
+ + + + + +
+ + + + + + + + +
void seastar::slab_allocator< Item >::free (Item * item)
+
+inline
+
+

Free an item back to its original slab class.

+ +
+
+ +

◆ print_slab_classes()

+ +
+
+
+template<typename Item >
+ + + + + +
+ + + + + + + +
void seastar::slab_allocator< Item >::print_slab_classes ()
+
+inline
+
+

Helper function: Print all available slab classes and their respective properties.

+ +
+
+ +

◆ touch()

+ +
+
+
+template<typename Item >
+ + + + + +
+ + + + + + + + +
void seastar::slab_allocator< Item >::touch (Item * item)
+
+inline
+
+

Update item position in the LRU of its slab class.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1slab__class-members.html b/master/classseastar_1_1slab__class-members.html new file mode 100644 index 000000000..076dedf8a --- /dev/null +++ b/master/classseastar_1_1slab__class-members.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::slab_class< Item > Member List
+
+
+ +

This is the complete list of members for seastar::slab_class< Item >, including all inherited members.

+ + + + + + + + + + + + + + + +
create(Args &&... args) (defined in seastar::slab_class< Item >)seastar::slab_class< Item >inline
create_from_lru(std::function< void(Item &item_ref)> &erase_func, Args &&... args) (defined in seastar::slab_class< Item >)seastar::slab_class< Item >inline
create_from_new_page(uint64_t max_object_size, uint32_t slab_page_index, std::function< void(slab_page_desc &desc)> insert_slab_page_desc, Args &&... args) (defined in seastar::slab_class< Item >)seastar::slab_class< Item >inline
empty() const (defined in seastar::slab_class< Item >)seastar::slab_class< Item >inline
free_item(Item *item, slab_page_desc &desc) (defined in seastar::slab_class< Item >)seastar::slab_class< Item >inline
has_no_slab_pages() const (defined in seastar::slab_class< Item >)seastar::slab_class< Item >inline
insert_item_into_lru(Item *item) (defined in seastar::slab_class< Item >)seastar::slab_class< Item >inline
remove_desc_from_free_list(slab_page_desc &desc) (defined in seastar::slab_class< Item >)seastar::slab_class< Item >inline
remove_item_from_lru(Item *item) (defined in seastar::slab_class< Item >)seastar::slab_class< Item >inline
size() const (defined in seastar::slab_class< Item >)seastar::slab_class< Item >inline
slab_class(size_t size, uint8_t slab_class_id) (defined in seastar::slab_class< Item >)seastar::slab_class< Item >inline
slab_class(slab_class &&)=default (defined in seastar::slab_class< Item >)seastar::slab_class< Item >
touch_item(Item *item) (defined in seastar::slab_class< Item >)seastar::slab_class< Item >inline
~slab_class() (defined in seastar::slab_class< Item >)seastar::slab_class< Item >inline
+ + + + diff --git a/master/classseastar_1_1slab__class.html b/master/classseastar_1_1slab__class.html new file mode 100644 index 000000000..dc2cbad70 --- /dev/null +++ b/master/classseastar_1_1slab__class.html @@ -0,0 +1,131 @@ + + + + + + + +Seastar: seastar::slab_class< Item > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::slab_class< Item > Class Template Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

slab_class (size_t size, uint8_t slab_class_id)
 
slab_class (slab_class &&)=default
 
+size_t size () const
 
+bool empty () const
 
+bool has_no_slab_pages () const
 
+template<typename... Args>
Item * create (Args &&... args)
 
+template<typename... Args>
Item * create_from_new_page (uint64_t max_object_size, uint32_t slab_page_index, std::function< void(slab_page_desc &desc)> insert_slab_page_desc, Args &&... args)
 
+template<typename... Args>
Item * create_from_lru (std::function< void(Item &item_ref)> &erase_func, Args &&... args)
 
+void free_item (Item *item, slab_page_desc &desc)
 
+void touch_item (Item *item)
 
+void remove_item_from_lru (Item *item)
 
+void insert_item_into_lru (Item *item)
 
+void remove_desc_from_free_list (slab_page_desc &desc)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1slab__item__base-members.html b/master/classseastar_1_1slab__item__base-members.html new file mode 100644 index 000000000..49b75478a --- /dev/null +++ b/master/classseastar_1_1slab__item__base-members.html @@ -0,0 +1,81 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::slab_item_base Member List
+
+
+ +

This is the complete list of members for seastar::slab_item_base, including all inherited members.

+
+ + + + diff --git a/master/classseastar_1_1slab__item__base.html b/master/classseastar_1_1slab__item__base.html new file mode 100644 index 000000000..222aa43e8 --- /dev/null +++ b/master/classseastar_1_1slab__item__base.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: seastar::slab_item_base Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::slab_item_base Class Reference
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1sleep__aborted-members.html b/master/classseastar_1_1sleep__aborted-members.html new file mode 100644 index 000000000..2f24531fc --- /dev/null +++ b/master/classseastar_1_1sleep__aborted-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::sleep_aborted Member List
+
+
+ +

This is the complete list of members for seastar::sleep_aborted, including all inherited members.

+ + +
what() const noexceptseastar::sleep_abortedinlinevirtual
+ + + + diff --git a/master/classseastar_1_1sleep__aborted.html b/master/classseastar_1_1sleep__aborted.html new file mode 100644 index 000000000..b3ebf5658 --- /dev/null +++ b/master/classseastar_1_1sleep__aborted.html @@ -0,0 +1,135 @@ + + + + + + + +Seastar: seastar::sleep_aborted Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::sleep_aborted Class Reference
+
+
+

Detailed Description

+

exception that is thrown when application is in process of been stopped

+
+

#include <seastar/core/sleep.hh>

+
+Inheritance diagram for seastar::sleep_aborted:
+
+
+ + +seastar::abort_requested_exception + +
+ + + + + +

+Public Member Functions

virtual const char * what () const noexcept
 Reports the exception reason. More...
 
+

Member Function Documentation

+ +

◆ what()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const char * seastar::sleep_aborted::what () const
+
+inlinevirtualnoexcept
+
+ +

Reports the exception reason.

+ +

Reimplemented from seastar::abort_requested_exception.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1sleep__aborted.png b/master/classseastar_1_1sleep__aborted.png new file mode 100644 index 0000000000000000000000000000000000000000..d4392d2000cadadfc86b4628e5ec688cafdc492c GIT binary patch literal 1006 zcmeAS@N?(olHy`uVBq!ia0vp^mw~v0gBeJAP0+g!q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0Ydu{YLn;{G&V9XUl>v`i_~D+)|K|7Z zWa*2DOwE0hBEK(~BlD8$#v&Fr<#RcHUBEPY{9H`e;k{aY0Ecd)q%vme=%H^ zbn@h`9OuXx$9Jq+_5Nk^*6pdY{$(vY`iZe!pCa%ib9GfG zd3*PFT+GAfed4=QwnVPB4ZZrjG&3kYDD-bfRZ39kUY~PIR%OM53FTl8#V@K2|1a_` zFfKh&vimFhRmIC4S7bx_eeQi{sB=8Wk`PZk{;;VnQNl{Nxx*v8NKH`iH<+ku((LGX zv*P2s6R|E!!d}*=eS2}c;KW{`;2E(_rfar;v^*NAvv}c$`FTOBZrZj+rJcXU zIsa&X{-d@hmDAQ-uH_O7pJc52`TCMfjWgaW4lVv^w{{grY5FbB{l`w1EqoZ5cK1fs zGLaQ4u6^0FcCu0U+sQMp`R|;0wJXS1@A{QrYFD4E`nK#+XR@5Wo%qy`GQsaE{x3`Y zaY)^NL*lB}YK11oX;m+Y}SR}(T_ zUh%DRS9@R0uwNmaX@frTxFS-q<-$x3hS-xc8Qz=*;@8eT?2hxg?|;zpRiF0KC;4@J z-NmlNy}jo(ALY!LdR{{I)10M-teQ#lqMms^|Ekq~Xpe!D#`>Cw{LA0{kL6B~c;vKf zOBYL|P59~D`qtdo(D!m@8E#zV-fAA|Dzlnt^`zs^OWkC$mY<0*Hce-cd70DiQ94;D zH1+bjYm3j?+*uwL(NG&(FmKyC{W;5h`~JVKHjI7~D0*OXZT`RTZ+q7)jJx%n;okM9 zz-Tm)|8FeH`e9DZe2BwAj?ezJmRqr9-52)9>dUXK5lhnrW=;lAS3j3^P6 + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::smp Member List
+
+
+ +

This is the complete list of members for seastar::smp, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
all_cpus() noexcept (defined in seastar::smp)seastar::smpinlinestatic
arrive_at_event_loop_end() (defined in seastar::smp)seastar::smp
cleanup() noexcept (defined in seastar::smp)seastar::smp
cleanup_cpu() (defined in seastar::smp)seastar::smp
configure(const smp_options &smp_opts, const reactor_options &reactor_opts) (defined in seastar::smp)seastar::smp
count (defined in seastar::smp)seastar::smpstatic
invoke_on_all(smp_submit_to_options options, Func &&func) noexceptseastar::smpinlinestatic
invoke_on_all(Func &&func) noexceptseastar::smpinlinestatic
invoke_on_others(unsigned cpu_id, smp_submit_to_options options, Func func) noexceptseastar::smpinlinestatic
invoke_on_others(unsigned cpu_id, Func func) noexceptseastar::smpinlinestatic
invoke_on_others(Func func) noexceptseastar::smpinlinestatic
join_all() (defined in seastar::smp)seastar::smp
main_thread() (defined in seastar::smp)seastar::smpinlinestatic
poll_queues() (defined in seastar::smp)seastar::smpstatic
pure_poll_queues() (defined in seastar::smp)seastar::smpstatic
smp(alien::instance &alien) (defined in seastar::smp)seastar::smpexplicit
submit_to(unsigned t, smp_submit_to_options options, Func &&func) noexceptseastar::smpinlinestatic
submit_to(unsigned t, Func &&func) noexceptseastar::smpinlinestatic
~smp() (defined in seastar::smp)seastar::smp
+ + + + diff --git a/master/classseastar_1_1smp.html b/master/classseastar_1_1smp.html new file mode 100644 index 000000000..3afdb5bda --- /dev/null +++ b/master/classseastar_1_1smp.html @@ -0,0 +1,491 @@ + + + + + + + +Seastar: seastar::smp Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+
+Inheritance diagram for seastar::smp:
+
+
+ +
+ + + + + + + + + + + + + + +

+Public Member Functions

smp (alien::instance &alien)
 
+void configure (const smp_options &smp_opts, const reactor_options &reactor_opts)
 
+void cleanup () noexcept
 
+void cleanup_cpu ()
 
+void arrive_at_event_loop_end ()
 
+void join_all ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

+static bool main_thread ()
 
template<typename Func >
static futurize_t< std::invoke_result_t< Func > > submit_to (unsigned t, smp_submit_to_options options, Func &&func) noexcept
 
template<typename Func >
static futurize_t< std::invoke_result_t< Func > > submit_to (unsigned t, Func &&func) noexcept
 
+static bool poll_queues ()
 
+static bool pure_poll_queues ()
 
+static boost::integer_range< unsigned > all_cpus () noexcept
 
template<typename Func >
+requires std::is_nothrow_move_constructible_v<Func>
static future invoke_on_all (smp_submit_to_options options, Func &&func) noexcept
 
template<typename Func >
static future invoke_on_all (Func &&func) noexcept
 
template<typename Func >
+requires std::is_nothrow_move_constructible_v<Func> && std::is_nothrow_copy_constructible_v<Func>
static future invoke_on_others (unsigned cpu_id, smp_submit_to_options options, Func func) noexcept
 
template<typename Func >
+requires std::is_nothrow_move_constructible_v<Func>
static future invoke_on_others (unsigned cpu_id, Func func) noexcept
 
template<typename Func >
+requires std::is_nothrow_move_constructible_v<Func>
static future invoke_on_others (Func func) noexcept
 
+ + + +

+Static Public Attributes

+static unsigned count
 
+

Member Function Documentation

+ +

◆ invoke_on_all() [1/2]

+ +
+
+
+template<typename Func >
+ + + + + +
+ + + + + + + + +
static future seastar::smp::invoke_on_all (Func && func)
+
+inlinestaticnoexcept
+
+

Invokes func on all shards.

+
Parameters
+ + +
functhe function to be invoked on each shard. May return void or future<>. Each async invocation will work with a separate copy of func.
+
+
+
Returns
a future that resolves when all async invocations finish.
+

Passes the default smp_submit_to_options to the smp::submit_to() called behind the scenes.

+ +
+
+ +

◆ invoke_on_all() [2/2]

+ +
+
+
+template<typename Func >
+requires std::is_nothrow_move_constructible_v<Func>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static future seastar::smp::invoke_on_all (smp_submit_to_options options,
Func && func 
)
+
+inlinestaticnoexcept
+
+

Invokes func on all shards.

+
Parameters
+ + + +
optionsthe options to forward to the smp::submit_to() called behind the scenes.
functhe function to be invoked on each shard. May return void or future<>. Each async invocation will work with a separate copy of func.
+
+
+
Returns
a future that resolves when all async invocations finish.
+ +
+
+ +

◆ invoke_on_others() [1/3]

+ +
+
+
+template<typename Func >
+requires std::is_nothrow_move_constructible_v<Func>
+ + + + + +
+ + + + + + + + +
static future seastar::smp::invoke_on_others (Func func)
+
+inlinestaticnoexcept
+
+

Invokes func on all shards but the current one

+
Parameters
+ + +
functhe function to be invoked on each shard. May return void or future<>. Each async invocation will work with a separate copy of func.
+
+
+
Returns
a future that resolves when all async invocations finish.
+ +
+
+ +

◆ invoke_on_others() [2/3]

+ +
+
+
+template<typename Func >
+requires std::is_nothrow_move_constructible_v<Func>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static future seastar::smp::invoke_on_others (unsigned cpu_id,
Func func 
)
+
+inlinestaticnoexcept
+
+

Invokes func on all other shards.

+
Parameters
+ + + +
cpu_idthe cpu on which not to run the function.
functhe function to be invoked on each shard. May return void or future<>. Each async invocation will work with a separate copy of func.
+
+
+
Returns
a future that resolves when all async invocations finish.
+

Passes the default smp_submit_to_options to the smp::submit_to() called behind the scenes.

+ +
+
+ +

◆ invoke_on_others() [3/3]

+ +
+
+
+template<typename Func >
+requires std::is_nothrow_move_constructible_v<Func> && std::is_nothrow_copy_constructible_v<Func>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static future seastar::smp::invoke_on_others (unsigned cpu_id,
smp_submit_to_options options,
Func func 
)
+
+inlinestaticnoexcept
+
+

Invokes func on all other shards.

+
Parameters
+ + + + +
cpu_idthe cpu on which not to run the function.
optionsthe options to forward to the smp::submit_to() called behind the scenes.
functhe function to be invoked on each shard. May return void or future<>. Each async invocation will work with a separate copy of func.
+
+
+
Returns
a future that resolves when all async invocations finish.
+ +
+
+ +

◆ submit_to() [1/2]

+ +
+
+
+template<typename Func >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static futurize_t< std::invoke_result_t< Func > > seastar::smp::submit_to (unsigned t,
Func && func 
)
+
+inlinestaticnoexcept
+
+

Runs a function on a remote core.

+

Uses default_smp_service_group() to control resource allocation.

+
Parameters
+ + + +
tdesignates the core to run the function on (may be a remote core or the local core).
funca callable to run on core t. If func is a temporary object, its lifetime will be extended by moving. This movement and the eventual destruction of func are both done in the calling core. If func is a reference, the caller must guarantee that it will survive the call.
+
+
+
Returns
whatever func returns, as a future<> (if func does not return a future, submit_to() will wrap it in a future<>).
+ +
+
+ +

◆ submit_to() [2/2]

+ +
+
+
+template<typename Func >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static futurize_t< std::invoke_result_t< Func > > seastar::smp::submit_to (unsigned t,
smp_submit_to_options options,
Func && func 
)
+
+inlinestaticnoexcept
+
+

Runs a function on a remote core.

+
Parameters
+ + + + +
tdesignates the core to run the function on (may be a remote core or the local core).
optionsan smp_submit_to_options that contains options for this call.
funca callable to run on core t. If func is a temporary object, its lifetime will be extended by moving. This movement and the eventual destruction of func are both done in the calling core. If func is a reference, the caller must guarantee that it will survive the call.
+
+
+
Returns
whatever func returns, as a future<> (if func does not return a future, submit_to() will wrap it in a future<>).
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1smp.png b/master/classseastar_1_1smp.png new file mode 100644 index 0000000000000000000000000000000000000000..c9c726ccae822e93d8990ca248fd7afdaee2b949 GIT binary patch literal 695 zcmeAS@N?(olHy`uVBq!ia0vp^_kcKngBeIVGF$5cDTx4|5ZC|z{{xvX-h3_XKQsZz z0^v#Yb^=%MULv&9mB*RL-tCFj-|imyPGARebrJER=t0?w|Lhh&rAHFALq62tkEbsZZYwE#mtkzXEj!H9z5{Pa!u{#qR3Tm&7{qx zJ+q>IFRu;v+$Oq5ZQEn# zIu`ML>{_d<%Y4|3r~UXxCmAPGj%WTK+{_I;x9#nTo0Mhkc`my=zo)$D`#SaKKi-v^ z|NHVT_n_X?%_^?b3wB2AT{q`i*?NWcQ;{EE$;G~WGdXxtW^K{Fb#o>?iAa}!DE*=6 zsf64-m9JIlf6G_bGWbv0xAx>mmCOb35MtF|I%S#Y0rjs8Gs24>+sXxhKHIzf!r3$C zmT@6|4Ewok7=R&3EN-|xCCKY@7mLAaCjJ9pY}fXEZZMBc!|AAfCay7hnZSgx%HE5y-bqWAJqKb6Mw<&;$U- + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::smp_message_queue Member List
+
+
+ +

This is the complete list of members for seastar::smp_message_queue, including all inherited members.

+ + + + + + + + + +
process_completions(shard_id t) (defined in seastar::smp_message_queue)seastar::smp_message_queue
process_incoming() (defined in seastar::smp_message_queue)seastar::smp_message_queue
process_queue(lf_queue &q, Func process) (defined in seastar::smp_message_queue)seastar::smp_message_queue
smp_message_queue(reactor *from, reactor *to) (defined in seastar::smp_message_queue)seastar::smp_message_queue
start(unsigned cpuid) (defined in seastar::smp_message_queue)seastar::smp_message_queue
stop() (defined in seastar::smp_message_queue)seastar::smp_message_queue
submit(shard_id t, smp_submit_to_options options, Func &&func) noexcept (defined in seastar::smp_message_queue)seastar::smp_message_queueinline
~smp_message_queue() (defined in seastar::smp_message_queue)seastar::smp_message_queue
+ + + + diff --git a/master/classseastar_1_1smp__message__queue.html b/master/classseastar_1_1smp__message__queue.html new file mode 100644 index 000000000..651d63666 --- /dev/null +++ b/master/classseastar_1_1smp__message__queue.html @@ -0,0 +1,113 @@ + + + + + + + +Seastar: seastar::smp_message_queue Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::smp_message_queue Class Reference
+
+
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

smp_message_queue (reactor *from, reactor *to)
 
+template<typename Func >
futurize_t< std::invoke_result_t< Func > > submit (shard_id t, smp_submit_to_options options, Func &&func) noexcept
 
+void start (unsigned cpuid)
 
+template<size_t PrefetchCnt, typename Func >
size_t process_queue (lf_queue &q, Func process)
 
+size_t process_incoming ()
 
+size_t process_completions (shard_id t)
 
+void stop ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1smp__service__group-members.html b/master/classseastar_1_1smp__service__group-members.html new file mode 100644 index 000000000..13e8ca036 --- /dev/null +++ b/master/classseastar_1_1smp__service__group-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::smp_service_group Member List
+
+
+ +

This is the complete list of members for seastar::smp_service_group, including all inherited members.

+ + + + + +
create_smp_service_groupseastar::smp_service_groupfriend
default_smp_service_groupseastar::smp_service_groupfriend
destroy_smp_service_groupseastar::smp_service_groupfriend
internal::smp_service_group_id (defined in seastar::smp_service_group)seastar::smp_service_groupfriend
+ + + + diff --git a/master/classseastar_1_1smp__service__group.html b/master/classseastar_1_1smp__service__group.html new file mode 100644 index 000000000..e00d46551 --- /dev/null +++ b/master/classseastar_1_1smp__service__group.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: seastar::smp_service_group Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::smp_service_group Class Reference
+
+
+

Detailed Description

+

A resource controller for cross-shard calls.

+

An smp_service_group allows you to limit the concurrency of smp::submit_to() and similar calls. While it's easy to limit the caller's concurrency (for example, by using a semaphore), the concurrency at the remote end can be multiplied by a factor of smp::count-1, which can be large.

+

The class is called a service group because it can be used to group similar calls that share resource usage characteristics, need not be isolated from each other, but do need to be isolated from other groups. Calls in a group should not nest; doing so can result in ABA deadlocks.

+

Nested submit_to() calls must form a directed acyclic graph when considering their smp_service_groups as nodes. For example, if a call using ssg1 then invokes another call using ssg2, the internal call may not call again via either ssg1 or ssg2, or it may form a cycle (and risking an ABBA deadlock). Create a new smp_service_group_instead.

+
+

#include <seastar/core/smp.hh>

+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1socket-members.html b/master/classseastar_1_1socket-members.html new file mode 100644 index 000000000..7434de036 --- /dev/null +++ b/master/classseastar_1_1socket-members.html @@ -0,0 +1,90 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::socket Member List
+
+
+ +

This is the complete list of members for seastar::socket, including all inherited members.

+ + + + + + + + + +
connect(socket_address sa, socket_address local={}, transport proto=transport::TCP)seastar::socket
get_reuseaddr() constseastar::socket
operator=(socket &&) noexceptseastar::socket
set_reuseaddr(bool reuseaddr)seastar::socket
shutdown()seastar::socket
socket() noexcept=default (defined in seastar::socket)seastar::socket
socket(socket &&) noexceptseastar::socket
~socket() (defined in seastar::socket)seastar::socket
+ + + + diff --git a/master/classseastar_1_1socket.html b/master/classseastar_1_1socket.html new file mode 100644 index 000000000..c621b7ec9 --- /dev/null +++ b/master/classseastar_1_1socket.html @@ -0,0 +1,186 @@ + + + + + + + +Seastar: seastar::socket Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::socket Class Reference
+
+
+

Detailed Description

+

The seastar socket.

+

A socket that allows a connection to be established between two endpoints.

+
+

#include <seastar/net/api.hh>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

socket (socket &&) noexcept
 Moves a seastar::socket object.
 
+socketoperator= (socket &&) noexcept
 Move-assigns a seastar::socket object.
 
future< connected_socketconnect (socket_address sa, socket_address local={}, transport proto=transport::TCP)
 
+void set_reuseaddr (bool reuseaddr)
 Sets SO_REUSEADDR option (enable reuseaddr option on a socket)
 
bool get_reuseaddr () const
 
void shutdown ()
 
+

Member Function Documentation

+ +

◆ connect()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< connected_socket > seastar::socket::connect (socket_address sa,
socket_address local = {},
transport proto = transport::TCP 
)
+
+

Attempts to establish the connection.

+
Returns
a connected_socket representing the connection.
+ +
+
+ +

◆ get_reuseaddr()

+ +
+
+ + + + + + + +
bool seastar::socket::get_reuseaddr () const
+
+

Gets O_REUSEADDR option

Returns
whether the reuseaddr option is enabled or not
+ +
+
+ +

◆ shutdown()

+ +
+
+ + + + + + + +
void seastar::socket::shutdown ()
+
+

Stops any in-flight connection attempt.

+

Cancels the connection attempt if it's still in progress, and terminates the connection if it has already been established.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1socket__address-members.html b/master/classseastar_1_1socket__address-members.html new file mode 100644 index 000000000..94f377b04 --- /dev/null +++ b/master/classseastar_1_1socket__address-members.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::socket_address Member List
+
+
+ +

This is the complete list of members for seastar::socket_address, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addr() const noexcept (defined in seastar::socket_address)seastar::socket_address
addr_length (defined in seastar::socket_address)seastar::socket_address
as_posix_sockaddr() noexcept (defined in seastar::socket_address)seastar::socket_addressinline
as_posix_sockaddr() const noexcept (defined in seastar::socket_address)seastar::socket_addressinline
as_posix_sockaddr_in() noexcept (defined in seastar::socket_address)seastar::socket_addressinline
as_posix_sockaddr_in() const noexcept (defined in seastar::socket_address)seastar::socket_addressinline
as_posix_sockaddr_in6() noexcept (defined in seastar::socket_address)seastar::socket_addressinline
as_posix_sockaddr_in6() const noexcept (defined in seastar::socket_address)seastar::socket_addressinline
family() const noexcept (defined in seastar::socket_address)seastar::socket_addressinline
is_af_unix() const noexcept (defined in seastar::socket_address)seastar::socket_addressinline
is_unspecified() const noexcept (defined in seastar::socket_address)seastar::socket_address
is_wildcard() const noexcept (defined in seastar::socket_address)seastar::socket_address
length() const noexcept (defined in seastar::socket_address)seastar::socket_addressinline
operator!=(const socket_address &a) const noexcept (defined in seastar::socket_address)seastar::socket_addressinline
operator==(const socket_address &) const noexcept (defined in seastar::socket_address)seastar::socket_address
port() const noexcept (defined in seastar::socket_address)seastar::socket_address
socket_address(const sockaddr_in &sa) noexcept (defined in seastar::socket_address)seastar::socket_addressinline
socket_address(const sockaddr_in6 &sa) noexcept (defined in seastar::socket_address)seastar::socket_addressinline
socket_address(uint16_t) noexcept (defined in seastar::socket_address)seastar::socket_address
socket_address(ipv4_addr) noexcept (defined in seastar::socket_address)seastar::socket_address
socket_address(const ipv6_addr &) noexcept (defined in seastar::socket_address)seastar::socket_address
socket_address(const ipv6_addr &, uint32_t scope) noexcept (defined in seastar::socket_address)seastar::socket_address
socket_address(const net::inet_address &, uint16_t p=0) noexcept (defined in seastar::socket_address)seastar::socket_address
socket_address(const unix_domain_addr &) noexcept (defined in seastar::socket_address)seastar::socket_addressexplicit
socket_address() noexceptseastar::socket_address
socket_address(uint32_t, uint16_t p=0) noexcept (defined in seastar::socket_address)seastar::socket_address
useastar::socket_address
+ + + + diff --git a/master/classseastar_1_1socket__address.html b/master/classseastar_1_1socket__address.html new file mode 100644 index 000000000..398e0fd99 --- /dev/null +++ b/master/classseastar_1_1socket__address.html @@ -0,0 +1,217 @@ + + + + + + + +Seastar: seastar::socket_address Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::socket_address Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

socket_address (const sockaddr_in &sa) noexcept
 
socket_address (const sockaddr_in6 &sa) noexcept
 
socket_address (uint16_t) noexcept
 
socket_address (ipv4_addr) noexcept
 
socket_address (const ipv6_addr &) noexcept
 
socket_address (const ipv6_addr &, uint32_t scope) noexcept
 
socket_address (const net::inet_address &, uint16_t p=0) noexcept
 
socket_address (const unix_domain_addr &) noexcept
 
 socket_address () noexcept
 
+::sockaddr & as_posix_sockaddr () noexcept
 
+::sockaddr_in & as_posix_sockaddr_in () noexcept
 
+::sockaddr_in6 & as_posix_sockaddr_in6 () noexcept
 
+const ::sockaddr & as_posix_sockaddr () const noexcept
 
+const ::sockaddr_in & as_posix_sockaddr_in () const noexcept
 
+const ::sockaddr_in6 & as_posix_sockaddr_in6 () const noexcept
 
socket_address (uint32_t, uint16_t p=0) noexcept
 
+socklen_t length () const noexcept
 
+bool is_af_unix () const noexcept
 
+bool is_unspecified () const noexcept
 
+sa_family_t family () const noexcept
 
+net::inet_address addr () const noexcept
 
+::in_port_t port () const noexcept
 
+bool is_wildcard () const noexcept
 
+bool operator== (const socket_address &) const noexcept
 
+bool operator!= (const socket_address &a) const noexcept
 
+ + + + + + + + + + + + + + + + + +

+Public Attributes

+socklen_t addr_length
 
+union {
+::sockaddr_storage sas
 
+::sockaddr sa
 
+::sockaddr_in in
 
+::sockaddr_in6 in6
 
+::sockaddr_un un
 
u
 !< actual size of the relevant 'u' member
 
+

Constructor & Destructor Documentation

+ +

◆ socket_address()

+ +
+
+ + + + + +
+ + + + + + + +
seastar::socket_address::socket_address ()
+
+noexcept
+
+

creates an uninitialized socket_address. this can be written into, or used as "unspecified" for such addresses as bind(addr) or local address in socket::connect (i.e. system picks)

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1sstring__builder-members.html b/master/classseastar_1_1sstring__builder-members.html new file mode 100644 index 000000000..44d8b56e8 --- /dev/null +++ b/master/classseastar_1_1sstring__builder-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::sstring_builder Member List
+
+
+ +

This is the complete list of members for seastar::sstring_builder, including all inherited members.

+ + + +
get() && (defined in seastar::sstring_builder)seastar::sstring_builderinline
reset() (defined in seastar::sstring_builder)seastar::sstring_builderinline
+ + + + diff --git a/master/classseastar_1_1sstring__builder.html b/master/classseastar_1_1sstring__builder.html new file mode 100644 index 000000000..8725d34eb --- /dev/null +++ b/master/classseastar_1_1sstring__builder.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: seastar::sstring_builder Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::sstring_builder Class Reference
+
+
+ + + + +

+Classes

class  guard
 
+ + + + + +

+Public Member Functions

+sstring get () &&
 
+void reset ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1sstring__builder_1_1guard-members.html b/master/classseastar_1_1sstring__builder_1_1guard-members.html new file mode 100644 index 000000000..45ff5e235 --- /dev/null +++ b/master/classseastar_1_1sstring__builder_1_1guard-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::sstring_builder::guard Member List
+
+
+ +

This is the complete list of members for seastar::sstring_builder::guard, including all inherited members.

+ + + + + +
guard(sstring_builder &builder, const char *block_start, const char *block_end) (defined in seastar::sstring_builder::guard)seastar::sstring_builder::guardinline
mark_end(const char *p) (defined in seastar::sstring_builder::guard)seastar::sstring_builder::guardinline
mark_start(const char *p) (defined in seastar::sstring_builder::guard)seastar::sstring_builder::guardinline
~guard() (defined in seastar::sstring_builder::guard)seastar::sstring_builder::guardinline
+ + + + diff --git a/master/classseastar_1_1sstring__builder_1_1guard.html b/master/classseastar_1_1sstring__builder_1_1guard.html new file mode 100644 index 000000000..a17be3fe0 --- /dev/null +++ b/master/classseastar_1_1sstring__builder_1_1guard.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: seastar::sstring_builder::guard Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::sstring_builder::guard Class Reference
+
+
+ + + + + + + + +

+Public Member Functions

guard (sstring_builder &builder, const char *block_start, const char *block_end)
 
+void mark_start (const char *p)
 
+void mark_end (const char *p)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1stop__consuming-members.html b/master/classseastar_1_1stop__consuming-members.html new file mode 100644 index 000000000..f5c56ffe8 --- /dev/null +++ b/master/classseastar_1_1stop__consuming-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::stop_consuming< CharType > Member List
+
+
+ +

This is the complete list of members for seastar::stop_consuming< CharType >, including all inherited members.

+ + + + + +
get_buffer() (defined in seastar::stop_consuming< CharType >)seastar::stop_consuming< CharType >inline
get_buffer() const (defined in seastar::stop_consuming< CharType >)seastar::stop_consuming< CharType >inline
stop_consuming(tmp_buf buf) (defined in seastar::stop_consuming< CharType >)seastar::stop_consuming< CharType >inlineexplicit
tmp_buf typedef (defined in seastar::stop_consuming< CharType >)seastar::stop_consuming< CharType >
+ + + + diff --git a/master/classseastar_1_1stop__consuming.html b/master/classseastar_1_1stop__consuming.html new file mode 100644 index 000000000..baaf8d30b --- /dev/null +++ b/master/classseastar_1_1stop__consuming.html @@ -0,0 +1,105 @@ + + + + + + + +Seastar: seastar::stop_consuming< CharType > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::stop_consuming< CharType > Class Template Reference
+
+
+ + + + +

+Public Types

+using tmp_buf = temporary_buffer< CharType >
 
+ + + + + + + +

+Public Member Functions

stop_consuming (tmp_buf buf)
 
+tmp_bufget_buffer ()
 
+const tmp_bufget_buffer () const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1stream-members.html b/master/classseastar_1_1stream-members.html new file mode 100644 index 000000000..02cab70c8 --- /dev/null +++ b/master/classseastar_1_1stream-members.html @@ -0,0 +1,94 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::stream< T > Member List
+
+
+ +

This is the complete list of members for seastar::stream< T >, including all inherited members.

+ + + + + + + + + + + + + +
close() (defined in seastar::stream< T >)seastar::stream< T >inline
listen() (defined in seastar::stream< T >)seastar::stream< T >inline
listen(next_fn next) (defined in seastar::stream< T >)seastar::stream< T >inline
next_fn typedef (defined in seastar::stream< T >)seastar::stream< T >
operator=(const stream &)=delete (defined in seastar::stream< T >)seastar::stream< T >
operator=(stream &&)=delete (defined in seastar::stream< T >)seastar::stream< T >
produce(T... data) (defined in seastar::stream< T >)seastar::stream< T >inline
set_exception(E ex) (defined in seastar::stream< T >)seastar::stream< T >inline
started() (defined in seastar::stream< T >)seastar::stream< T >inline
stream()=default (defined in seastar::stream< T >)seastar::stream< T >
stream(const stream &)=delete (defined in seastar::stream< T >)seastar::stream< T >
stream(stream &&)=delete (defined in seastar::stream< T >)seastar::stream< T >
+ + + + diff --git a/master/classseastar_1_1stream.html b/master/classseastar_1_1stream.html new file mode 100644 index 000000000..bf64b38a3 --- /dev/null +++ b/master/classseastar_1_1stream.html @@ -0,0 +1,127 @@ + + + + + + + +Seastar: seastar::stream< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::stream< T > Class Template Reference
+
+
+ + + + +

+Public Types

+using next_fn = noncopyable_function< future<>(T...)>
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

stream (const stream &)=delete
 
stream (stream &&)=delete
 
+void operator= (const stream &)=delete
 
+void operator= (stream &&)=delete
 
+subscription< T... > listen ()
 
+subscription< T... > listen (next_fn next)
 
+future started ()
 
+future produce (T... data)
 
+void close ()
 
+template<typename E >
void set_exception (E ex)
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1subscription-members.html b/master/classseastar_1_1subscription-members.html new file mode 100644 index 000000000..73ff3cae3 --- /dev/null +++ b/master/classseastar_1_1subscription-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::subscription< T > Member List
+
+
+ +

This is the complete list of members for seastar::subscription< T >, including all inherited members.

+ + + + + +
done() (defined in seastar::subscription< T >)seastar::subscription< T >inline
next_fn typedef (defined in seastar::subscription< T >)seastar::subscription< T >
start(next_fn next)seastar::subscription< T >inline
subscription(subscription &&x) (defined in seastar::subscription< T >)seastar::subscription< T >inline
+ + + + diff --git a/master/classseastar_1_1subscription.html b/master/classseastar_1_1subscription.html new file mode 100644 index 000000000..0375130f8 --- /dev/null +++ b/master/classseastar_1_1subscription.html @@ -0,0 +1,142 @@ + + + + + + + +Seastar: seastar::subscription< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::subscription< T > Class Template Reference
+
+
+ + + + +

+Public Types

+using next_fn = typename stream< T... >::next_fn
 
+ + + + + + + + +

+Public Member Functions

subscription (subscription &&x)
 
void start (next_fn next)
 Start receiving events from the stream. More...
 
+future done ()
 
+

Member Function Documentation

+ +

◆ start()

+ +
+
+
+template<typename... T>
+ + + + + +
+ + + + + + + + +
void seastar::subscription< T >::start (next_fn next)
+
+inline
+
+ +

Start receiving events from the stream.

+
Parameters
+ + +
nextCallback to call for each event
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1task-members.html b/master/classseastar_1_1task-members.html new file mode 100644 index 000000000..9a3a9fc50 --- /dev/null +++ b/master/classseastar_1_1task-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::task Member List
+
+
+ +

This is the complete list of members for seastar::task, including all inherited members.

+ + + + + + + + + + +
_sg (defined in seastar::task)seastar::taskprotected
get_backtrace() const (defined in seastar::task)seastar::taskinline
group() const (defined in seastar::task)seastar::taskinline
make_backtrace() noexcept (defined in seastar::task)seastar::taskinline
run_and_dispose() noexcept=0 (defined in seastar::task)seastar::taskpure virtual
set_scheduling_group(scheduling_group new_sg) noexcept (defined in seastar::task)seastar::taskinlineprotected
task(scheduling_group sg=current_scheduling_group()) noexcept (defined in seastar::task)seastar::taskinlineexplicit
waiting_task() noexcept=0seastar::taskpure virtual
~task()=default (defined in seastar::task)seastar::taskprotected
+ + + + diff --git a/master/classseastar_1_1task.html b/master/classseastar_1_1task.html new file mode 100644 index 000000000..b56cec3cc --- /dev/null +++ b/master/classseastar_1_1task.html @@ -0,0 +1,163 @@ + + + + + + + +Seastar: seastar::task Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+
+Inheritance diagram for seastar::task:
+
+
+ + +seastar::coroutine::experimental::internal::generator_buffered_promise< T, Container > +seastar::coroutine::experimental::internal::generator_unbuffered_promise< T > +seastar::coroutine::switch_to +seastar::lambda_task< Func > + +
+ + + + + + + + + + + + + + + +

+Public Member Functions

task (scheduling_group sg=current_scheduling_group()) noexcept
 
+virtual void run_and_dispose () noexcept=0
 
virtual taskwaiting_task () noexcept=0
 Returns the next task which is waiting for this task to complete execution, or nullptr. More...
 
+scheduling_group group () const
 
+shared_backtrace get_backtrace () const
 
+void make_backtrace () noexcept
 
+ + + +

+Protected Member Functions

+scheduling_group set_scheduling_group (scheduling_group new_sg) noexcept
 
+ + + +

+Protected Attributes

+scheduling_group _sg
 
+

Member Function Documentation

+ +

◆ waiting_task()

+ +
+
+ + + + + +
+ + + + + + + +
virtual task * seastar::task::waiting_task ()
+
+pure virtualnoexcept
+
+ +

Returns the next task which is waiting for this task to complete execution, or nullptr.

+ +

Implemented in seastar::coroutine::experimental::internal::generator_unbuffered_promise< T >, seastar::lambda_task< Func >, and seastar::coroutine::switch_to.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1task.png b/master/classseastar_1_1task.png new file mode 100644 index 0000000000000000000000000000000000000000..13ef9de66e7c0652ee0a10aa902d7aa9d257d246 GIT binary patch literal 2464 zcmdT`Yfuwe7REwFDS_D)MN!Gj5|`Cd!YYcQB*WmVClWAHFj;nzp=Fow(Px|`$j(k6nuJ4G_c|r0pz_nMNo+f_T z1oAF9I)Sn(KEL~)qSNX;JWumq{LFOEV=XUs$9iF=cIaH))7Jm@C-;0pbX({(Luho{ zS${~zu(X9nm(nbO`GkeQLiv~P=HY?Gz|frQJW6JN%en4=HHvWPmDbc`6BQ7F z2c}OY-(- zvp?#Q!B%~h;O?mM!-oU!O|ScMnmcecj#CA=3T6>}uqpwU{0q!X_B}I|MI+4X8#E}f zbrE}7_O2!>{**WdH?;)iH}=!s_>(zSO_3KI_whp9-+5L{Vj!SDcj>YTuJNXxhxUpn za|FiPa~nDKQj;HYpay5sEgcapfOx%H%jWdlrF8qQdaOL4jyu*ELUqS4G$?G@f{uL> zLLp1RC(w1s$4nA+FD9c0(bvw#)0~#~^O*4g=%r;arJAZ7y=@xzOuPw=q@2a&)3SB_ z)G$_(j2V~rL);RPquby5d{SjI*~!=FD8759Bp2!W!uThnICepnA7ZG1wU_t{Aa3tk z%afbd;YVVYpx8cC24($4`EECoy_#q^x!lKFCkoFjx~84^G16(obsgMAk~gqyT3c{m zSKZhRCQ1I*k-`dT7;MMAei>8-B~t=s(4hXIZ&^E@;P@wa-v#n8Yeh?qaJBdOHf5UO zEA(jT{T%5ZFe&yD>t6GVl`ZcF;Zk=d^$8+w2b(*ESHzBNLVOR5wC<@jfh4%DP5IA6 zkgGAoOTo@n?ObN|E2v*$P>I3a&Uc{;RJN(lpljT%rqr!{p8UZ4^!hW5wV zJN>N#y>F;Dosvuoq}aNQ?KR*2)l+;zL#tvz~hb@pnGS4ANRPRuR1!+o?^Q?hYg>R{4h-z{Z+umgxTABA- z!r^PsgsZ&a-~=S?W()^oO!*L>I|QwvV-H5NYK}|DYV($1bZq_Oyvm~O;EV8xUxu?4 zjn`gY#IGH|-%2S4q4XOd#@f3UvBXLp_q6oez|O4P(1yYOmE5=X{(rUUOCG;qj6FU! zddot&$ulE0EA$tlsJt>HUZIk`idUZ>SQEjsC6qR4E!Ecaz$T;z^Mz>fuL3gL(R96w zCoCP#Jf&zBTnX;NjU|d+wpDl2Oe$?G7{Od&5S|_tICAEc;MK6V+w0>iqfJ14LL1v3J=Ugj!i&_-9?D%h?DFPrVlW4LTUe@aM~u6{;{*odC5 z*%ge0S-_qOLgfa|05RunkbKkk7dZhcUbFoXXn*abbpTWU<*2o z4Coc1Xi;pB;f`T%Vy$?k4p?^M7!P|S)q(=F&deo-<#A@*QU%FN{2>&ei+S4W^_lRA ziH5tMA^S{lF)8ZvDNFt{l#}QPjoylu?SiB#)pgp%)QjabUoSS=#*VknNxiA%N$X|~ S6Vcx(H()(!-Q90?9sV~8OVlL* literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1task__entry-members.html b/master/classseastar_1_1task__entry-members.html new file mode 100644 index 000000000..0cc846c52 --- /dev/null +++ b/master/classseastar_1_1task__entry-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::task_entry Member List
+
+
+ +

This is the complete list of members for seastar::task_entry, including all inherited members.

+ + + + + + +
hash() const noexcept (defined in seastar::task_entry)seastar::task_entryinline
operator!=(const task_entry &o) const noexcept (defined in seastar::task_entry)seastar::task_entryinline
operator<< (defined in seastar::task_entry)seastar::task_entryfriend
operator==(const task_entry &o) const noexcept (defined in seastar::task_entry)seastar::task_entryinline
task_entry(const std::type_info &ti) noexcept (defined in seastar::task_entry)seastar::task_entryinline
+ + + + diff --git a/master/classseastar_1_1task__entry.html b/master/classseastar_1_1task__entry.html new file mode 100644 index 000000000..41c8b5ae8 --- /dev/null +++ b/master/classseastar_1_1task__entry.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: seastar::task_entry Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::task_entry Class Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

task_entry (const std::type_info &ti) noexcept
 
+bool operator== (const task_entry &o) const noexcept
 
+bool operator!= (const task_entry &o) const noexcept
 
+size_t hash () const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1tasktrace-members.html b/master/classseastar_1_1tasktrace-members.html new file mode 100644 index 000000000..24751862d --- /dev/null +++ b/master/classseastar_1_1tasktrace-members.html @@ -0,0 +1,94 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::tasktrace Member List
+
+
+ +

This is the complete list of members for seastar::tasktrace, including all inherited members.

+ + + + + + + + + + + + + +
delimeter() const noexcept (defined in seastar::tasktrace)seastar::tasktraceinline
entry typedef (defined in seastar::tasktrace)seastar::tasktrace
hash() const noexcept (defined in seastar::tasktrace)seastar::tasktraceinline
operator!=(const tasktrace &o) const noexcept (defined in seastar::tasktrace)seastar::tasktraceinline
operator<< (defined in seastar::tasktrace)seastar::tasktracefriend
operator=(const tasktrace &)=default (defined in seastar::tasktrace)seastar::tasktrace
operator==(const tasktrace &o) const noexcept (defined in seastar::tasktrace)seastar::tasktrace
tasktrace()=default (defined in seastar::tasktrace)seastar::tasktrace
tasktrace(simple_backtrace main, vector_type prev, size_t prev_hash, scheduling_group sg) noexcept (defined in seastar::tasktrace)seastar::tasktrace
tasktrace(const tasktrace &)=default (defined in seastar::tasktrace)seastar::tasktrace
vector_type typedef (defined in seastar::tasktrace)seastar::tasktrace
~tasktrace() (defined in seastar::tasktrace)seastar::tasktrace
+ + + + diff --git a/master/classseastar_1_1tasktrace.html b/master/classseastar_1_1tasktrace.html new file mode 100644 index 000000000..c031ad8fc --- /dev/null +++ b/master/classseastar_1_1tasktrace.html @@ -0,0 +1,120 @@ + + + + + + + +Seastar: seastar::tasktrace Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::tasktrace Class Reference
+
+
+ + + + + + +

+Public Types

+using entry = std::variant< shared_backtrace, task_entry >
 
+using vector_type = boost::container::static_vector< entry, 16 >
 
+ + + + + + + + + + + + + + + +

+Public Member Functions

tasktrace (simple_backtrace main, vector_type prev, size_t prev_hash, scheduling_group sg) noexcept
 
tasktrace (const tasktrace &)=default
 
+tasktraceoperator= (const tasktrace &)=default
 
+size_t hash () const noexcept
 
+char delimeter () const noexcept
 
+bool operator== (const tasktrace &o) const noexcept
 
+bool operator!= (const tasktrace &o) const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1temporary__buffer-members.html b/master/classseastar_1_1temporary__buffer-members.html new file mode 100644 index 000000000..8253ebb19 --- /dev/null +++ b/master/classseastar_1_1temporary__buffer-members.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::temporary_buffer< CharType > Member List
+
+
+ +

This is the complete list of members for seastar::temporary_buffer< CharType >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aligned(size_t alignment, size_t size)seastar::temporary_buffer< CharType >inlinestatic
begin() const noexceptseastar::temporary_buffer< CharType >inline
clone() constseastar::temporary_buffer< CharType >inline
copy_of(std::string_view view) (defined in seastar::temporary_buffer< CharType >)seastar::temporary_buffer< CharType >inlinestatic
empty() const noexceptseastar::temporary_buffer< CharType >inline
end() const noexceptseastar::temporary_buffer< CharType >inline
get() const noexceptseastar::temporary_buffer< CharType >inline
get_write() noexceptseastar::temporary_buffer< CharType >inline
operator bool() const noexceptseastar::temporary_buffer< CharType >inlineexplicit
operator!=(const temporary_buffer &o) const noexceptseastar::temporary_buffer< CharType >inline
operator=(const temporary_buffer &)=delete (defined in seastar::temporary_buffer< CharType >)seastar::temporary_buffer< CharType >
operator=(temporary_buffer &&x) noexceptseastar::temporary_buffer< CharType >inline
operator==(const temporary_buffer &o) const noexceptseastar::temporary_buffer< CharType >inline
operator[](size_t pos) const noexceptseastar::temporary_buffer< CharType >inline
prefix(size_t size) &&noexceptseastar::temporary_buffer< CharType >inline
release() noexceptseastar::temporary_buffer< CharType >inline
share()seastar::temporary_buffer< CharType >inline
share(size_t pos, size_t len)seastar::temporary_buffer< CharType >inline
size() const noexceptseastar::temporary_buffer< CharType >inline
temporary_buffer(size_t size)seastar::temporary_buffer< CharType >inlineexplicit
temporary_buffer() noexceptseastar::temporary_buffer< CharType >inline
temporary_buffer(const temporary_buffer &)=delete (defined in seastar::temporary_buffer< CharType >)seastar::temporary_buffer< CharType >
temporary_buffer(temporary_buffer &&x) noexceptseastar::temporary_buffer< CharType >inline
temporary_buffer(CharType *buf, size_t size, deleter d) noexceptseastar::temporary_buffer< CharType >inline
temporary_buffer(const CharType *src, size_t size)seastar::temporary_buffer< CharType >inline
trim(size_t pos) noexceptseastar::temporary_buffer< CharType >inline
trim_front(size_t pos) noexceptseastar::temporary_buffer< CharType >inline
+ + + + diff --git a/master/classseastar_1_1temporary__buffer.html b/master/classseastar_1_1temporary__buffer.html new file mode 100644 index 000000000..7114749f5 --- /dev/null +++ b/master/classseastar_1_1temporary__buffer.html @@ -0,0 +1,749 @@ + + + + + + + +Seastar: seastar::temporary_buffer< CharType > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::temporary_buffer< CharType > Class Template Reference
+
+
+

Detailed Description

+
template<typename CharType>
+class seastar::temporary_buffer< CharType >

Temporary, self-managed byte buffer.

+

A temporary_buffer is similar to an std::string or a std::unique_ptr<char[]>, but provides more flexible memory management. A temporary_buffer can own the memory it points to, or it can be shared with another temporary_buffer, or point at a substring of a buffer. It uses a deleter to manage its memory.

+

A temporary_buffer should not be held indefinitely. It can be held while a request is processed, or for a similar duration, but not longer, as it can tie up more memory that its size indicates.

+

A buffer can be shared: two temporary_buffer objects will point to the same data, or a subset of it. See the temporary_buffer::share() method.

+

Unless you created a temporary_buffer yourself, do not modify its contents, as they may be shared with another user that does not expect the data to change.

+

Use cases for a temporary_buffer include:

    +
  • passing a substring of a tcp packet for the user to consume (zero-copy tcp input)
  • +
  • passing a refcounted blob held in memory to tcp, ensuring that when the TCP ACK is received, the blob is released (by decrementing its reference count) (zero-copy tcp output)
  • +
+
Template Parameters
+ + +
CharTypeunderlying character type (must be a variant of char).
+
+
+
Examples
file_demo.cc.
+
+
+

#include <seastar/core/temporary_buffer.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 temporary_buffer (size_t size)
 
temporary_buffer () noexcept
 Creates an empty temporary_buffer that does not point at anything.
 
temporary_buffer (const temporary_buffer &)=delete
 
temporary_buffer (temporary_buffer &&x) noexcept
 Moves a temporary_buffer.
 
 temporary_buffer (CharType *buf, size_t size, deleter d) noexcept
 
 temporary_buffer (const CharType *src, size_t size)
 
+void operator= (const temporary_buffer &)=delete
 
+temporary_bufferoperator= (temporary_buffer &&x) noexcept
 Moves a temporary_buffer.
 
+const CharType * get () const noexcept
 Gets a pointer to the beginning of the buffer.
 
CharType * get_write () noexcept
 
+size_t size () const noexcept
 Gets the buffer size.
 
+const CharType * begin () const noexcept
 Gets a pointer to the beginning of the buffer.
 
+const CharType * end () const noexcept
 Gets a pointer to the end of the buffer.
 
temporary_buffer prefix (size_t size) &&noexcept
 
CharType operator[] (size_t pos) const noexcept
 
+bool empty () const noexcept
 Checks whether the buffer is empty.
 
operator bool () const noexcept
 Checks whether the buffer is not empty.
 
temporary_buffer share ()
 
temporary_buffer share (size_t pos, size_t len)
 
temporary_buffer clone () const
 
void trim_front (size_t pos) noexcept
 
void trim (size_t pos) noexcept
 
deleter release () noexcept
 
bool operator== (const temporary_buffer &o) const noexcept
 
bool operator!= (const temporary_buffer &o) const noexcept
 
+ + + + + +

+Static Public Member Functions

static temporary_buffer aligned (size_t alignment, size_t size)
 
+static temporary_buffer copy_of (std::string_view view)
 
+

Constructor & Destructor Documentation

+ +

◆ temporary_buffer() [1/3]

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + +
seastar::temporary_buffer< CharType >::temporary_buffer (size_t size)
+
+inlineexplicit
+
+

Creates a temporary_buffer of a specified size. The buffer is not shared with anyone, and is not initialized.

+
Parameters
+ + +
sizebuffer size, in bytes
+
+
+ +
+
+ +

◆ temporary_buffer() [2/3]

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
seastar::temporary_buffer< CharType >::temporary_buffer (CharType * buf,
size_t size,
deleter d 
)
+
+inlinenoexcept
+
+

Creates a temporary_buffer with a specific deleter.

+
Parameters
+ + + + +
bufbeginning of the buffer held by this temporary_buffer
sizesize of the buffer
ddeleter controlling destruction of the buffer. The deleter will be destroyed when there are no longer any users for the buffer.
+
+
+ +
+
+ +

◆ temporary_buffer() [3/3]

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
seastar::temporary_buffer< CharType >::temporary_buffer (const CharType * src,
size_t size 
)
+
+inline
+
+

Creates a temporary_buffer containing a copy of the provided data

+
Parameters
+ + + +
srcdata buffer to be copied
sizesize of data buffer in src
+
+
+ +
+
+

Member Function Documentation

+ +

◆ aligned()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static temporary_buffer seastar::temporary_buffer< CharType >::aligned (size_t alignment,
size_t size 
)
+
+inlinestatic
+
+

Creates a temporary_buffer object with a specified size, with memory aligned to a specific boundary.

+
Parameters
+ + + +
alignmentRequired alignment; must be a power of two and a multiple of sizeof(void *).
sizeRequired size; must be a multiple of alignment.
+
+
+
Returns
a new temporary_buffer object.
+ +
+
+ +

◆ clone()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + +
temporary_buffer seastar::temporary_buffer< CharType >::clone () const
+
+inline
+
+

Clone the current temporary_buffer object into a new one. This creates a temporary buffer with the same length and data but not pointing to the memory of the original object.

+ +
+
+ +

◆ get_write()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + +
CharType * seastar::temporary_buffer< CharType >::get_write ()
+
+inlinenoexcept
+
+

Gets a writable pointer to the beginning of the buffer. Use only when you are certain no user expects the buffer data not to change.

+
Examples
file_demo.cc.
+
+ +
+
+ +

◆ operator!=()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + +
bool seastar::temporary_buffer< CharType >::operator!= (const temporary_buffer< CharType > & o) const
+
+inlinenoexcept
+
+

Compare contents of this buffer with another buffer for inequality

+
Parameters
+ + +
obuffer to compare with
+
+
+
Returns
true if and only if contents are not the same
+ +
+
+ +

◆ operator==()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + +
bool seastar::temporary_buffer< CharType >::operator== (const temporary_buffer< CharType > & o) const
+
+inlinenoexcept
+
+

Compare contents of this buffer with another buffer for equality

+
Parameters
+ + +
obuffer to compare with
+
+
+
Returns
true if and only if contents are the same
+ +
+
+ +

◆ operator[]()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + +
CharType seastar::temporary_buffer< CharType >::operator[] (size_t pos) const
+
+inlinenoexcept
+
+

Reads a character from a specific position in the buffer.

+
Parameters
+ + +
posposition to read character from; must be less than size.
+
+
+ +
+
+ +

◆ prefix()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + +
temporary_buffer seastar::temporary_buffer< CharType >::prefix (size_t size) &&
+
+inlinenoexcept
+
+

Returns the buffer, but with a reduced size. The original buffer is consumed by this call and can no longer be used.

+
Parameters
+ + +
sizeNew size; must be smaller than current size.
+
+
+
Returns
the same buffer, with a prefix removed.
+ +
+
+ +

◆ release()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + +
deleter seastar::temporary_buffer< CharType >::release ()
+
+inlinenoexcept
+
+

Stops automatic memory management. When the temporary_buffer object is destroyed, the underlying deleter will not be called. Instead, it is the caller's responsibility to destroy the deleter object when the data is no longer needed.

+
Returns
deleter object managing the data's lifetime.
+ +
+
+ +

◆ share() [1/2]

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + +
temporary_buffer seastar::temporary_buffer< CharType >::share ()
+
+inline
+
+

Create a new temporary_buffer object referring to the same underlying data. The underlying deleter will not be destroyed until both the original and the clone have been destroyed.

+
Returns
a clone of the buffer object.
+ +
+
+ +

◆ share() [2/2]

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
temporary_buffer seastar::temporary_buffer< CharType >::share (size_t pos,
size_t len 
)
+
+inline
+
+

Create a new temporary_buffer object referring to a substring of the same underlying data. The underlying deleter will not be destroyed until both the original and the clone have been destroyed.

+
Parameters
+ + + +
posPosition of the first character to share.
lenLength of substring to share.
+
+
+
Returns
a clone of the buffer object, referring to a substring.
+ +
+
+ +

◆ trim()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + +
void seastar::temporary_buffer< CharType >::trim (size_t pos)
+
+inlinenoexcept
+
+

Remove a suffix from the buffer. The underlying data is not modified.

+
Parameters
+ + +
posPosition of first character to drop.
+
+
+ +
+
+ +

◆ trim_front()

+ +
+
+
+template<typename CharType >
+ + + + + +
+ + + + + + + + +
void seastar::temporary_buffer< CharType >::trim_front (size_t pos)
+
+inlinenoexcept
+
+

Remove a prefix from the buffer. The underlying data is not modified.

+
Parameters
+ + +
posPosition of first character to retain.
+
+
+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/master/classseastar_1_1testing_1_1exchanger-members.html b/master/classseastar_1_1testing_1_1exchanger-members.html new file mode 100644 index 000000000..c6acc054a --- /dev/null +++ b/master/classseastar_1_1testing_1_1exchanger-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::testing::exchanger< T > Member List
+
+
+ +

This is the complete list of members for seastar::testing::exchanger< T >, including all inherited members.

+ + + + + + + + + + +
_cv (defined in seastar::testing::exchanger_base)seastar::testing::exchanger_baseprotected
_exception (defined in seastar::testing::exchanger_base)seastar::testing::exchanger_baseprotected
_mutex (defined in seastar::testing::exchanger_base)seastar::testing::exchanger_baseprotected
exchanger_base() (defined in seastar::testing::exchanger_base)seastar::testing::exchanger_baseprotected
give(T value) (defined in seastar::testing::exchanger< T >)seastar::testing::exchanger< T >inline
interrupt(Exception e) (defined in seastar::testing::exchanger< T >)seastar::testing::exchanger< T >inline
interrupt_ptr(std::exception_ptr e) (defined in seastar::testing::exchanger_base)seastar::testing::exchanger_baseinlineprotected
take() (defined in seastar::testing::exchanger< T >)seastar::testing::exchanger< T >inline
~exchanger_base() (defined in seastar::testing::exchanger_base)seastar::testing::exchanger_baseprotected
+ + + + diff --git a/master/classseastar_1_1testing_1_1exchanger.html b/master/classseastar_1_1testing_1_1exchanger.html new file mode 100644 index 000000000..f9eabcdbe --- /dev/null +++ b/master/classseastar_1_1testing_1_1exchanger.html @@ -0,0 +1,128 @@ + + + + + + + +Seastar: seastar::testing::exchanger< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::testing::exchanger< T > Class Template Reference
+
+
+
+Inheritance diagram for seastar::testing::exchanger< T >:
+
+
+ + +seastar::testing::exchanger_base + +
+ + + + + + + + + +

+Public Member Functions

+template<typename Exception >
void interrupt (Exception e)
 
+void give (T value)
 
+T take ()
 
+ + + +

+Protected Member Functions

+void interrupt_ptr (std::exception_ptr e)
 
+ + + + + + + +

+Protected Attributes

+std::mutex _mutex
 
+std::condition_variable _cv
 
+std::exception_ptr _exception
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1testing_1_1exchanger.png b/master/classseastar_1_1testing_1_1exchanger.png new file mode 100644 index 0000000000000000000000000000000000000000..42267bb1bbcdec66c15f46a029f5e30e2688df50 GIT binary patch literal 813 zcmeAS@N?(olHy`uVBq!ia0vp^hk-bNgBeIp4mK`xtkNbDXcjuJ$?1e{-&b&Tsy63O*hPsa@$`5Th7s~kd z?J46U67~NdMI84nKK!8Po5Y`}w$)ZY=ZMOmo_TxjF6-DT@5sYfgZA^6zB=~opiaoO zTe5dt^QLW${qUsr#r2@|-(qz`uYYMjJNtKlq0Aos+;}f*!`kC6t8caZj7!^j{>Q!$ zyVMQK^h4RNy<2sCy2{JRRzLM0#P88dELf`G$$q73?e}f3Hcq;7(X`S+AY#&-d!Ki0 zn5Ob_x{0Jp<{q_XmEP-<6M;c=k7-93f5Yt8+!AvAznyCs4+}s1CUF0N!Ed1h{}-HO zFo>JXn6O8U`2a8k8$QnBVR&pR$#5*&h@t0t3WLOYGzHVS6kBF@GZbXQ6qmLv%zhYe z_gvlYac{G?EysaZlX)1}zs7wk-=o#mYq;o{qTRAeBXek|v)n-n_0l?%G&sz&&+qS^JxEJ^thGocB+w z+WJ0g<*sG+Irr|gpG%9s)4olA>D(Fnk{3 + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::testing::exchanger_base Member List
+
+
+ +

This is the complete list of members for seastar::testing::exchanger_base, including all inherited members.

+ + + + + + + +
_cv (defined in seastar::testing::exchanger_base)seastar::testing::exchanger_baseprotected
_exception (defined in seastar::testing::exchanger_base)seastar::testing::exchanger_baseprotected
_mutex (defined in seastar::testing::exchanger_base)seastar::testing::exchanger_baseprotected
exchanger_base() (defined in seastar::testing::exchanger_base)seastar::testing::exchanger_baseprotected
interrupt_ptr(std::exception_ptr e) (defined in seastar::testing::exchanger_base)seastar::testing::exchanger_baseinlineprotected
~exchanger_base() (defined in seastar::testing::exchanger_base)seastar::testing::exchanger_baseprotected
+ + + + diff --git a/master/classseastar_1_1testing_1_1exchanger__base.html b/master/classseastar_1_1testing_1_1exchanger__base.html new file mode 100644 index 000000000..2381ced0f --- /dev/null +++ b/master/classseastar_1_1testing_1_1exchanger__base.html @@ -0,0 +1,115 @@ + + + + + + + +Seastar: seastar::testing::exchanger_base Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::testing::exchanger_base Class Reference
+
+
+
+Inheritance diagram for seastar::testing::exchanger_base:
+
+
+ + +seastar::testing::exchanger< std::function< seastar::future<>()> > +seastar::testing::exchanger< T > + +
+ + + + +

+Protected Member Functions

+void interrupt_ptr (std::exception_ptr e)
 
+ + + + + + + +

+Protected Attributes

+std::mutex _mutex
 
+std::condition_variable _cv
 
+std::exception_ptr _exception
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1testing_1_1exchanger__base.png b/master/classseastar_1_1testing_1_1exchanger__base.png new file mode 100644 index 0000000000000000000000000000000000000000..d8bf9427c613c9779ee53ccdcf12aa17cf891315 GIT binary patch literal 1570 zcmbVMX;4#F6n;r0xUj^9r3i+pAO=u_A|R;{ElWd$U|5wULF)oYBf};jAyf;)Dh45y zb(BQZD40rEWJ#0(6_nHm1Q0Y;gfwia5I_SD`lRE}PG@>&?mgd``OZ1_%=zxk^!9Ss zUT?G>003>$4=z*yK&oKuy%q(ZhcFxGU}NZg#MgCYWd(+RPR_+$d6EyK)h!l_H8O{> zu)8*v>g5B#q%W(l(|0cbXb4CyhkP#}rph8YH}Mz^D|`8;mDHK;POEi~{Q`O%hY$1; z@gH7=*wPTK*RN6c;&`?g0EM}<8Nlm5H8#aq0CelT14L6VKpbcs!y=XfEP=xqkmi5@ zPDZ~#AT!Ctgt7TC%3_+HQ^WP!EkQ{vq7yBNMG&X}^dI^R3h_~QesRym##+uPUwe61 zq=3eVnkZB6uDBGLai8|)QGBF4qN!h-l@O*tAQKaiJ8Ud8vwh-{XOd+Jgroq^dUgM_ z&qQ$h;syLB@z4Vmkd{L_e*>hJXU89FbVL7a%qv{zSe5O={{rZpc#6x<3Y z>>3X(EEy7(lVu7TZW1guB8P=m46322Kxd&&&~%FEE^n*2=}Q9_gOKGx$}>|Sh*~q_ zxh~MdUJOlEsBvSdE5PAZf*-Pc-+qw6GAY{j-y?`d0v+#vMXg~|J$CS}p^b#NlK{!NvH3Uu8 zr2}4i>M;n@dsgY;@a?|RojF~jCw6nX%+UY}k8w9K)ylxqZSx$7hC0sTv&L~O zyfKsY%3&M`b65f@qk9og&VNFlU-z4v!xeONR+)L5c`xEY~(cX5kW4hZ zMeZPN(e5V(m>|UBAh|^yn|XP@M3rmPVvs_^7(LFby@wu;cvMj5gDGxbqVZBMitH^@ z8ha^x6)k_@fro4;xJh1FL$|OSdM&pkge-60>6$pu_uMSX-72N3T2&y#!X4_*T9a=t zhNK1;zAmhNpTt#RD+VIw5uKbuW-&vJ4537xuA=yyF(Aw43POE*zYXlllQV)Ly_Z%M(jded08Zq$V<}R3bBh@{X!yPpjFRvBoMh1*)-;Q*&P> z+AdID4Q1z;&3!%&t6>q=m#q;jw6K5IVGdRi(>?g1bk<@0SFj8$N0*j~cLo)}A38vC L^>V2`O#k_B?*96t literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1testing_1_1scoped__no__abort__on__internal__error-members.html b/master/classseastar_1_1testing_1_1scoped__no__abort__on__internal__error-members.html new file mode 100644 index 000000000..77205e977 --- /dev/null +++ b/master/classseastar_1_1testing_1_1scoped__no__abort__on__internal__error-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::testing::scoped_no_abort_on_internal_error Member List
+
+
+ +

This is the complete list of members for seastar::testing::scoped_no_abort_on_internal_error, including all inherited members.

+ + + +
scoped_no_abort_on_internal_error() noexcept (defined in seastar::testing::scoped_no_abort_on_internal_error)seastar::testing::scoped_no_abort_on_internal_error
~scoped_no_abort_on_internal_error() (defined in seastar::testing::scoped_no_abort_on_internal_error)seastar::testing::scoped_no_abort_on_internal_error
+ + + + diff --git a/master/classseastar_1_1testing_1_1scoped__no__abort__on__internal__error.html b/master/classseastar_1_1testing_1_1scoped__no__abort__on__internal__error.html new file mode 100644 index 000000000..3a7569b71 --- /dev/null +++ b/master/classseastar_1_1testing_1_1scoped__no__abort__on__internal__error.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: seastar::testing::scoped_no_abort_on_internal_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::testing::scoped_no_abort_on_internal_error Class Reference
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1testing_1_1seastar__test-members.html b/master/classseastar_1_1testing_1_1seastar__test-members.html new file mode 100644 index 000000000..7556162c9 --- /dev/null +++ b/master/classseastar_1_1testing_1_1seastar__test-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::testing::seastar_test Member List
+
+
+ +

This is the complete list of members for seastar::testing::seastar_test, including all inherited members.

+ + + + + + + + +
get_name() (defined in seastar::testing::seastar_test)seastar::testing::seastar_teststatic
get_test_file() const (defined in seastar::testing::seastar_test)seastar::testing::seastar_testinline
run() (defined in seastar::testing::seastar_test)seastar::testing::seastar_test
run_test_case() const =0 (defined in seastar::testing::seastar_test)seastar::testing::seastar_testpure virtual
seastar_test(const char *test_name, const char *test_file, int test_line) (defined in seastar::testing::seastar_test)seastar::testing::seastar_test
seastar_test(const char *test_name, const char *test_file, int test_line, boost::unit_test::decorator::collector_t &decorators) (defined in seastar::testing::seastar_test)seastar::testing::seastar_test
~seastar_test() (defined in seastar::testing::seastar_test)seastar::testing::seastar_testinlinevirtual
+ + + + diff --git a/master/classseastar_1_1testing_1_1seastar__test.html b/master/classseastar_1_1testing_1_1seastar__test.html new file mode 100644 index 000000000..f35416d56 --- /dev/null +++ b/master/classseastar_1_1testing_1_1seastar__test.html @@ -0,0 +1,111 @@ + + + + + + + +Seastar: seastar::testing::seastar_test Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::testing::seastar_test Class Referenceabstract
+
+
+ + + + + + + + + + + + +

+Public Member Functions

seastar_test (const char *test_name, const char *test_file, int test_line)
 
seastar_test (const char *test_name, const char *test_file, int test_line, boost::unit_test::decorator::collector_t &decorators)
 
+const std::string & get_test_file () const
 
+virtual future run_test_case () const =0
 
+void run ()
 
+ + + +

+Static Public Member Functions

+static const std::string & get_name ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1testing_1_1test__runner-members.html b/master/classseastar_1_1testing_1_1test__runner-members.html new file mode 100644 index 000000000..a862cf155 --- /dev/null +++ b/master/classseastar_1_1testing_1_1test__runner-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::testing::test_runner Member List
+
+
+ +

This is the complete list of members for seastar::testing::test_runner, including all inherited members.

+ + + + + +
finalize() (defined in seastar::testing::test_runner)seastar::testing::test_runner
run_sync(std::function< future<>()> task) (defined in seastar::testing::test_runner)seastar::testing::test_runner
start(int argc, char **argv) (defined in seastar::testing::test_runner)seastar::testing::test_runner
~test_runner() (defined in seastar::testing::test_runner)seastar::testing::test_runner
+ + + + diff --git a/master/classseastar_1_1testing_1_1test__runner.html b/master/classseastar_1_1testing_1_1test__runner.html new file mode 100644 index 000000000..fc09c3f9e --- /dev/null +++ b/master/classseastar_1_1testing_1_1test__runner.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: seastar::testing::test_runner Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::testing::test_runner Class Reference
+
+
+ + + + + + + + +

+Public Member Functions

+bool start (int argc, char **argv)
 
+void run_sync (std::function< future<>()> task)
 
+int finalize ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1thread-members.html b/master/classseastar_1_1thread-members.html new file mode 100644 index 000000000..dfc0904cd --- /dev/null +++ b/master/classseastar_1_1thread-members.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::thread Member List
+
+
+ +

This is the complete list of members for seastar::thread, including all inherited members.

+ + + + + + + + + + + + +
join()seastar::threadinline
maybe_yield()seastar::threadstatic
operator=(thread &&x) noexcept=defaultseastar::thread
running_in_thread() (defined in seastar::thread)seastar::threadinlinestatic
should_yield()seastar::threadstatic
thread()=defaultseastar::thread
thread(Func func)seastar::threadinline
thread(thread_attributes attr, Func func)seastar::threadinline
thread(thread &&x) noexcept=defaultseastar::thread
yield()seastar::threadstatic
~thread()seastar::threadinline
+ + + + diff --git a/master/classseastar_1_1thread.html b/master/classseastar_1_1thread.html new file mode 100644 index 000000000..f0c4bc0d8 --- /dev/null +++ b/master/classseastar_1_1thread.html @@ -0,0 +1,250 @@ + + + + + + + +Seastar: seastar::thread Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+ +
+

Detailed Description

+

thread - stateful thread of execution

+

Threads allow using seastar APIs in a blocking manner, by calling future::get() on a non-ready future. When this happens, the thread is put to sleep until the future becomes ready.

+
+

#include <seastar/core/thread.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

thread ()=default
 Constructs a thread object that does not represent a thread of execution.
 
template<typename Func >
 thread (Func func)
 Constructs a thread object that represents a thread of execution. More...
 
template<typename Func >
 thread (thread_attributes attr, Func func)
 Constructs a thread object that represents a thread of execution. More...
 
thread (thread &&x) noexcept=default
 Moves a thread object.
 
+threadoperator= (thread &&x) noexcept=default
 Move-assigns a thread object.
 
 ~thread ()
 Destroys a thread object. More...
 
future join ()
 Waits for thread execution to terminate. More...
 
+ + + + + + + + + + + + +

+Static Public Member Functions

static void yield ()
 Voluntarily defer execution of current thread. More...
 
static bool should_yield ()
 Checks whether this thread ought to call yield() now. More...
 
static void maybe_yield ()
 Yield if this thread ought to call yield() now. More...
 
+static bool running_in_thread ()
 
+

Constructor & Destructor Documentation

+ +

◆ ~thread()

+ +
+
+ + + + + +
+ + + + + + + +
seastar::thread::~thread ()
+
+inline
+
+ +

Destroys a thread object.

+

The thread must not represent a running thread of execution (see join()).

+ +
+
+

Member Function Documentation

+ +

◆ maybe_yield()

+ +
+
+ + + + + +
+ + + + + + + +
static void seastar::thread::maybe_yield ()
+
+static
+
+ +

Yield if this thread ought to call yield() now.

+

Useful where a code does long running computation and does not want to hog cpu for more then its share

+ +
+
+ +

◆ should_yield()

+ +
+
+ + + + + +
+ + + + + + + +
static bool seastar::thread::should_yield ()
+
+static
+
+ +

Checks whether this thread ought to call yield() now.

+

Useful where we cannot call yield() immediately because we Need to take some cleanup action first.

+ +
+
+ +

◆ yield()

+ +
+
+ + + + + +
+ + + + + + + +
static void seastar::thread::yield ()
+
+static
+
+ +

Voluntarily defer execution of current thread.

+

Gives other threads/fibers a chance to run on current CPU. The current thread will resume execution promptly.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1thread__cputime__clock-members.html b/master/classseastar_1_1thread__cputime__clock-members.html new file mode 100644 index 000000000..d6c691b5c --- /dev/null +++ b/master/classseastar_1_1thread__cputime__clock-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::thread_cputime_clock Member List
+
+
+ +

This is the complete list of members for seastar::thread_cputime_clock, including all inherited members.

+ + + + + + +
duration typedef (defined in seastar::thread_cputime_clock)seastar::thread_cputime_clock
now() (defined in seastar::thread_cputime_clock)seastar::thread_cputime_clockinlinestatic
period typedef (defined in seastar::thread_cputime_clock)seastar::thread_cputime_clock
rep typedef (defined in seastar::thread_cputime_clock)seastar::thread_cputime_clock
time_point typedef (defined in seastar::thread_cputime_clock)seastar::thread_cputime_clock
+ + + + diff --git a/master/classseastar_1_1thread__cputime__clock.html b/master/classseastar_1_1thread__cputime__clock.html new file mode 100644 index 000000000..82805d051 --- /dev/null +++ b/master/classseastar_1_1thread__cputime__clock.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: seastar::thread_cputime_clock Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::thread_cputime_clock Class Reference
+
+
+ + + + + + + + + + +

+Public Types

+using rep = int64_t
 
+using period = std::chrono::nanoseconds::period
 
+using duration = std::chrono::duration< rep, period >
 
+using time_point = std::chrono::time_point< thread_cputime_clock, duration >
 
+ + + +

+Static Public Member Functions

+static time_point now ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1timed__out__error-members.html b/master/classseastar_1_1timed__out__error-members.html new file mode 100644 index 000000000..8e9f3e9f1 --- /dev/null +++ b/master/classseastar_1_1timed__out__error-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::timed_out_error Member List
+
+
+ +

This is the complete list of members for seastar::timed_out_error, including all inherited members.

+ + +
what() const noexcept (defined in seastar::timed_out_error)seastar::timed_out_errorinlinevirtual
+ + + + diff --git a/master/classseastar_1_1timed__out__error.html b/master/classseastar_1_1timed__out__error.html new file mode 100644 index 000000000..878fada23 --- /dev/null +++ b/master/classseastar_1_1timed__out__error.html @@ -0,0 +1,129 @@ + + + + + + + +Seastar: seastar::timed_out_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::timed_out_error Class Reference
+
+
+
+Inheritance diagram for seastar::timed_out_error:
+
+
+ + +seastar::semaphore_timed_out +seastar::named_semaphore_timed_out + +
+ + + + +

+Public Member Functions

virtual const char * what () const noexcept
 
+

Member Function Documentation

+ +

◆ what()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const char * seastar::timed_out_error::what () const
+
+inlinevirtualnoexcept
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1timed__out__error.png b/master/classseastar_1_1timed__out__error.png new file mode 100644 index 0000000000000000000000000000000000000000..e22e40b2069d9b3638695e1cc7b30ec8f28d2331 GIT binary patch literal 1385 zcmeAS@N?(olHy`uVBq!ia0vp^4}tgq2Q!d7I`_+MASDst6XN>+|9>F!#hb6C{f8z1 zSzvtNzya3IJMus-M@f)hFauB#2wXiCV#L6}^25``F{Fa=?cBGMRx9v0@FyPI^ItkX z+OaWdYwYdY1~S9;Z|ThEx=G7pF!o9k@-!3usNwIV)b`3)`;0F!RJ(#s@O% zrNt&s@4ofws}}Q=@SiGvQro7A^M8t7USg-0y>pxB*Vx0V50)fa-V*0MotksmborN? za^I55z8C23Pp^1qYh$CkGMfJE>9d$yU014p?=(4HR`l}M@(c!x#nn3bGwY*-HW;2z3A1Pcb5fLCg1&iZMDHk zXT8U^!8QglX`aowu2=U+bhkW;nl?9V>($eX-o>n`<6T|-{P^~FQF{#pC+Zz=Enct<}Nm4Q02# zUHSEU`{wrJ-BpimZIUZK$l2|iUT+Oa)t_T#RX>lpwa!R>sp-L|zZ~^+o!{?2dod>d z?xzWPoX>u`xF*l`c6Is3o?n;i>T>R*=izEIjqi>wOP-$ia7MvDxrX1>1(=~>3Gqyu f;V}!N{|uWa+&fTQ=^P6z7a2TV{an^LB{Ts5OVzUS literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1timer-members.html b/master/classseastar_1_1timer-members.html new file mode 100644 index 000000000..e0a7f6e73 --- /dev/null +++ b/master/classseastar_1_1timer-members.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::timer< Clock > Member List
+
+
+ +

This is the complete list of members for seastar::timer< Clock >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
arm(time_point until, std::optional< duration > period={}) noexceptseastar::timer< Clock >
arm(duration delta) noexceptseastar::timer< Clock >inline
arm_periodic(duration delta) noexceptseastar::timer< Clock >inline
armed() const noexceptseastar::timer< Clock >inline
cancel() noexceptseastar::timer< Clock >
clock typedef (defined in seastar::timer< Clock >)seastar::timer< Clock >
duration typedef (defined in seastar::timer< Clock >)seastar::timer< Clock >
get_timeout() const noexceptseastar::timer< Clock >inline
rearm(time_point until, std::optional< duration > period={}) noexceptseastar::timer< Clock >inline
rearm_periodic(duration delta) noexceptseastar::timer< Clock >inline
set_callback(scheduling_group sg, noncopyable_function< void()> &&callback) noexceptseastar::timer< Clock >inline
set_callback(noncopyable_function< void()> &&callback) noexceptseastar::timer< Clock >inline
set_t typedef (defined in seastar::timer< Clock >)seastar::timer< Clock >
time_point typedef (defined in seastar::timer< Clock >)seastar::timer< Clock >
timer() noexceptseastar::timer< Clock >inline
timer(timer &&t) noexceptseastar::timer< Clock >inline
timer(scheduling_group sg, noncopyable_function< void()> &&callback) noexceptseastar::timer< Clock >inline
timer(noncopyable_function< void()> &&callback) noexceptseastar::timer< Clock >inlineexplicit
~timer()seastar::timer< Clock >
+ + + + diff --git a/master/classseastar_1_1timer.html b/master/classseastar_1_1timer.html new file mode 100644 index 000000000..d4599e26f --- /dev/null +++ b/master/classseastar_1_1timer.html @@ -0,0 +1,633 @@ + + + + + + + +Seastar: seastar::timer< Clock > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::timer< Clock > Class Template Reference
+
+
+

Detailed Description

+
template<typename Clock = steady_clock_type>
+class seastar::timer< Clock >

Timer - run a callback at a certain time point in the future.

+

Timer callbacks should execute quickly. If more involved computation is required, the timer should launch it as a fiber (or signal an existing fiber to continue execution). Fibers launched from a timer callback are executed under the scheduling group that was current when the timer was created (see current_scheduling_group()), or the scheduling that was given explicitly by the caller when the callback was specified.

+

Expiration of a timer<std::chrono::steady_clock> is independent of task_quota, so it has relatively high accuracy, but as a result this is a relatively expensive timer. It is recommended to use timer<lowres_clock> instead, which has very coarse resolution (~10ms) but is quite efficient. It is suitable for most user timeouts.

+
Template Parameters
+ + +
Clocktype of clock used to denote time points; can be std::chrono::steady_clock_type (default), lowres_clock (more efficient but with less resolution) and manual_clock_type (fine-grained control for testing.
+
+
+
+

#include <seastar/core/timer.hh>

+ + + + + + + + + + +

+Public Types

+typedef Clock::time_point time_point
 
+typedef Clock::duration duration
 
+typedef Clock clock
 
+using set_t = timer_set< timer, &timer::_link >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

timer () noexcept
 Constructs a timer with no callback set and no expiration time.
 
 timer (timer &&t) noexcept
 
 timer (scheduling_group sg, noncopyable_function< void()> &&callback) noexcept
 
 timer (noncopyable_function< void()> &&callback) noexcept
 
~timer ()
 Destroys the timer. The timer is cancelled if armed.
 
void set_callback (scheduling_group sg, noncopyable_function< void()> &&callback) noexcept
 
void set_callback (noncopyable_function< void()> &&callback) noexcept
 
void arm (time_point until, std::optional< duration > period={}) noexcept
 
void rearm (time_point until, std::optional< duration > period={}) noexcept
 
void arm (duration delta) noexcept
 
void arm_periodic (duration delta) noexcept
 
void rearm_periodic (duration delta) noexcept
 
bool armed () const noexcept
 
bool cancel () noexcept
 
time_point get_timeout () const noexcept
 
+

Constructor & Destructor Documentation

+ +

◆ timer() [1/3]

+ +
+
+
+template<typename Clock = steady_clock_type>
+ + + + + +
+ + + + + + + + +
seastar::timer< Clock >::timer (timer< Clock > && t)
+
+inlinenoexcept
+
+

Constructs a timer from another timer that is moved from.

+
Note
care should be taken when moving a timer whose callback captures this, since the object pointed to by this may have been moved as well.
+ +
+
+ +

◆ timer() [2/3]

+ +
+
+
+template<typename Clock = steady_clock_type>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
seastar::timer< Clock >::timer (scheduling_group sg,
noncopyable_function< void()> && callback 
)
+
+inlinenoexcept
+
+

Constructs a timer with a callback. The timer is not armed.

+
Parameters
+ + + +
sgScheduling group to run the callback under.
callbackfunction (with signature void ()) to execute after the timer is armed and expired.
+
+
+ +
+
+ +

◆ timer() [3/3]

+ +
+
+
+template<typename Clock = steady_clock_type>
+ + + + + +
+ + + + + + + + +
seastar::timer< Clock >::timer (noncopyable_function< void()> && callback)
+
+inlineexplicitnoexcept
+
+

Constructs a timer with a callback. The timer is not armed.

+
Parameters
+ + +
callbackfunction (with signature void ()) to execute after the timer is armed and expired.
+
+
+ +
+
+

Member Function Documentation

+ +

◆ arm() [1/2]

+ +
+
+
+template<typename Clock = steady_clock_type>
+ + + + + +
+ + + + + + + + +
void seastar::timer< Clock >::arm (duration delta)
+
+inlinenoexcept
+
+

Sets the timer expiration time.

+

It is illegal to arm a timer that has already been armed (and not disarmed by expiration or cancel()). In the current implementation, this will result in an assertion failure. See rearm().

+
Parameters
+ + +
deltathe time when the timer expires, relative to now
+
+
+ +
+
+ +

◆ arm() [2/2]

+ +
+
+
+template<typename Clock = steady_clock_type>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::timer< Clock >::arm (time_point until,
std::optional< duration > period = {} 
)
+
+noexcept
+
+

Sets the timer expiration time.

+

It is illegal to arm a timer that has already been armed (and not disarmed by expiration or cancel()). In the current implementation, this will result in an assertion failure. See rearm().

+
Parameters
+ + + +
untilthe time when the timer expires
periodoptional automatic rearm duration; if given the timer will automatically rearm itself when it expires, using the period to calculate the next expiration time.
+
+
+ +
+
+ +

◆ arm_periodic()

+ +
+
+
+template<typename Clock = steady_clock_type>
+ + + + + +
+ + + + + + + + +
void seastar::timer< Clock >::arm_periodic (duration delta)
+
+inlinenoexcept
+
+

Sets the timer expiration time, with automatic rearming

+
Parameters
+ + +
deltathe time when the timer expires, relative to now. The timer will also rearm automatically using the same delta time.
+
+
+ +
+
+ +

◆ armed()

+ +
+
+
+template<typename Clock = steady_clock_type>
+ + + + + +
+ + + + + + + +
bool seastar::timer< Clock >::armed () const
+
+inlinenoexcept
+
+

Returns whether the timer is armed

+
Returns
true if the timer is armed and has not expired yet.
+ +
+
+ +

◆ cancel()

+ +
+
+
+template<typename Clock = steady_clock_type>
+ + + + + +
+ + + + + + + +
bool seastar::timer< Clock >::cancel ()
+
+noexcept
+
+

Cancels an armed timer.

+

If the timer was armed, it is disarmed. If the timer was not armed, does nothing.

+
Returns
true if the timer was armed before the call.
+ +
+
+ +

◆ get_timeout()

+ +
+
+
+template<typename Clock = steady_clock_type>
+ + + + + +
+ + + + + + + +
time_point seastar::timer< Clock >::get_timeout () const
+
+inlinenoexcept
+
+

Gets the expiration time of an armed timer.

+
Returns
the time at which the timer is scheduled to expire (undefined if the timer is not armed).
+ +
+
+ +

◆ rearm()

+ +
+
+
+template<typename Clock = steady_clock_type>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::timer< Clock >::rearm (time_point until,
std::optional< duration > period = {} 
)
+
+inlinenoexcept
+
+

Sets the timer expiration time. If the timer was already armed, it is canceled first.

+
Parameters
+ + + +
untilthe time when the timer expires
periodoptional automatic rearm duration; if given the timer will automatically rearm itself when it expires, using the period to calculate the next expiration time.
+
+
+ +
+
+ +

◆ rearm_periodic()

+ +
+
+
+template<typename Clock = steady_clock_type>
+ + + + + +
+ + + + + + + + +
void seastar::timer< Clock >::rearm_periodic (duration delta)
+
+inlinenoexcept
+
+

Sets the timer expiration time, with automatic rearming. If the timer was already armed, it is canceled first.

+
Parameters
+ + +
deltathe time when the timer expires, relative to now. The timer will also rearm automatically using the same delta time.
+
+
+ +
+
+ +

◆ set_callback() [1/2]

+ +
+
+
+template<typename Clock = steady_clock_type>
+ + + + + +
+ + + + + + + + +
void seastar::timer< Clock >::set_callback (noncopyable_function< void()> && callback)
+
+inlinenoexcept
+
+

Sets the callback function to be called when the timer expires.

+
Parameters
+ + +
callbackthe callback to be executed when the timer expires.
+
+
+ +
+
+ +

◆ set_callback() [2/2]

+ +
+
+
+template<typename Clock = steady_clock_type>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::timer< Clock >::set_callback (scheduling_group sg,
noncopyable_function< void()> && callback 
)
+
+inlinenoexcept
+
+

Sets the callback function to be called when the timer expires.

+
Parameters
+ + + +
sgthe scheduling group under which the callback will be executed.
callbackthe callback to be executed when the timer expires.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1timer__set-members.html b/master/classseastar_1_1timer__set-members.html new file mode 100644 index 000000000..57925d299 --- /dev/null +++ b/master/classseastar_1_1timer__set-members.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::timer_set< Timer, link > Member List
+
+
+ +

This is the complete list of members for seastar::timer_set< Timer, link >, including all inherited members.

+ + + + + + + + + + + + + + + +
clear() noexceptseastar::timer_set< Timer, link >inline
complete(timer_list_t &expired_timers, EnableFunc &&enable_fn) noexcept(noexcept(enable_fn())) (defined in seastar::timer_set< Timer, link >)seastar::timer_set< Timer, link >inline
empty() const noexceptseastar::timer_set< Timer, link >inline
expire(time_point now) noexceptseastar::timer_set< Timer, link >inline
get_next_timeout() const noexceptseastar::timer_set< Timer, link >inline
insert(Timer &timer) noexceptseastar::timer_set< Timer, link >inline
now() noexcept (defined in seastar::timer_set< Timer, link >)seastar::timer_set< Timer, link >inline
remove(Timer &timer) noexceptseastar::timer_set< Timer, link >inline
remove(Timer &timer, timer_list_t &expired) noexceptseastar::timer_set< Timer, link >inline
size() const noexcept (defined in seastar::timer_set< Timer, link >)seastar::timer_set< Timer, link >inline
time_point typedef (defined in seastar::timer_set< Timer, link >)seastar::timer_set< Timer, link >
timer_list_t typedef (defined in seastar::timer_set< Timer, link >)seastar::timer_set< Timer, link >
timer_set() noexcept (defined in seastar::timer_set< Timer, link >)seastar::timer_set< Timer, link >inline
~timer_set() (defined in seastar::timer_set< Timer, link >)seastar::timer_set< Timer, link >inline
+ + + + diff --git a/master/classseastar_1_1timer__set.html b/master/classseastar_1_1timer__set.html new file mode 100644 index 000000000..e16a46ad1 --- /dev/null +++ b/master/classseastar_1_1timer__set.html @@ -0,0 +1,363 @@ + + + + + + + +Seastar: seastar::timer_set< Timer, link > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::timer_set< Timer, link > Class Template Reference
+
+
+

Detailed Description

+
template<typename Timer, boost::intrusive::list_member_hook<> Timer::* link>
+class seastar::timer_set< Timer, link >

A data structure designed for holding and expiring timers. It's optimized for timer non-delivery by deferring sorting cost until expiry time. The optimization is based on the observation that in many workloads timers are cancelled or rescheduled before they expire. That's especially the case for TCP timers.

+

The template type "Timer" should have a method named get_timeout() which returns Timer::time_point which denotes timer's expiration.

+
+

#include <seastar/core/timer-set.hh>

+ + + + + + +

+Public Types

+using time_point = typename Timer::time_point
 
+using timer_list_t = boost::intrusive::list< Timer, boost::intrusive::member_hook< Timer, boost::intrusive::list_member_hook<>, link > >
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool insert (Timer &timer) noexcept
 
void remove (Timer &timer) noexcept
 
void remove (Timer &timer, timer_list_t &expired) noexcept
 
timer_list_t expire (time_point now) noexcept
 
+template<typename EnableFunc >
void complete (timer_list_t &expired_timers, EnableFunc &&enable_fn) noexcept(noexcept(enable_fn()))
 
time_point get_next_timeout () const noexcept
 
void clear () noexcept
 
+size_t size () const noexcept
 
bool empty () const noexcept
 
+time_point now () noexcept
 
+

Member Function Documentation

+ +

◆ clear()

+ +
+
+
+template<typename Timer , boost::intrusive::list_member_hook<> Timer::* link>
+ + + + + +
+ + + + + + + +
void seastar::timer_set< Timer, link >::clear ()
+
+inlinenoexcept
+
+

Clears both active and expired timer sets.

+ +
+
+ +

◆ empty()

+ +
+
+
+template<typename Timer , boost::intrusive::list_member_hook<> Timer::* link>
+ + + + + +
+ + + + + + + +
bool seastar::timer_set< Timer, link >::empty () const
+
+inlinenoexcept
+
+

Returns true if and only if there are no timers in the active set.

+ +
+
+ +

◆ expire()

+ +
+
+
+template<typename Timer , boost::intrusive::list_member_hook<> Timer::* link>
+ + + + + +
+ + + + + + + + +
timer_list_t seastar::timer_set< Timer, link >::expire (time_point now)
+
+inlinenoexcept
+
+

Expires active timers.

+

The time points passed to this function must be monotonically increasing. Use get_next_timeout() to query for the next time point.

+

Preconditions:

    +
  • the time_point passed to this function must not be lesser than the previous one passed to this function.
  • +
+

Postconditons:

    +
  • all timers from the active set with Timer::get_timeout() <= now are moved to the expired set.
  • +
+ +
+
+ +

◆ get_next_timeout()

+ +
+
+
+template<typename Timer , boost::intrusive::list_member_hook<> Timer::* link>
+ + + + + +
+ + + + + + + +
time_point seastar::timer_set< Timer, link >::get_next_timeout () const
+
+inlinenoexcept
+
+

Returns a time point at which expire() should be called in order to ensure timers are expired in a timely manner.

+

Returned values are monotonically increasing.

+ +
+
+ +

◆ insert()

+ +
+
+
+template<typename Timer , boost::intrusive::list_member_hook<> Timer::* link>
+ + + + + +
+ + + + + + + + +
bool seastar::timer_set< Timer, link >::insert (Timer & timer)
+
+inlinenoexcept
+
+

Adds timer to the active set.

+

The value returned by timer.get_timeout() is used as timer's expiry. The result of timer.get_timeout() must not change while the timer is in the active set.

+

Preconditions:

    +
  • this timer must not be currently in the active set or in the expired set.
  • +
+

Postconditions:

    +
  • this timer will be added to the active set until it is expired by a call to expire() or removed by a call to remove().
  • +
+

Returns true if and only if this timer's timeout is less than get_next_timeout(). When this function returns true the caller should reschedule expire() to be called at timer.get_timeout() to ensure timers are expired in a timely manner.

+ +
+
+ +

◆ remove() [1/2]

+ +
+
+
+template<typename Timer , boost::intrusive::list_member_hook<> Timer::* link>
+ + + + + +
+ + + + + + + + +
void seastar::timer_set< Timer, link >::remove (Timer & timer)
+
+inlinenoexcept
+
+

Removes timer from the active set.

+

Preconditions:

    +
  • timer must be currently in the active set. Note: it must not be in the expired set.
  • +
+

Postconditions:

    +
  • timer is no longer in the active set.
  • +
  • this object will no longer hold any references to this timer.
  • +
+ +
+
+ +

◆ remove() [2/2]

+ +
+
+
+template<typename Timer , boost::intrusive::list_member_hook<> Timer::* link>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::timer_set< Timer, link >::remove (Timer & timer,
timer_list_t & expired 
)
+
+inlinenoexcept
+
+

Removes timer from the active set or the expired list, if the timer is expired

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1tls_1_1abstract__credentials-members.html b/master/classseastar_1_1tls_1_1abstract__credentials-members.html new file mode 100644 index 000000000..6954ebfe6 --- /dev/null +++ b/master/classseastar_1_1tls_1_1abstract__credentials-members.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::tls::abstract_credentials Member List
+
+
+ +

This is the complete list of members for seastar::tls::abstract_credentials, including all inherited members.

+ + + + + + + + + + + + + + +
abstract_credentials()=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
abstract_credentials(const abstract_credentials &)=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
operator=(abstract_credentials &)=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
operator=(abstract_credentials &&)=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
set_simple_pkcs12(const blob &, x509_crt_format, const sstring &password)=0 (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialspure virtual
set_simple_pkcs12_file(const sstring &pkcs12file, x509_crt_format, const sstring &password) (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsvirtual
set_x509_crl(const blob &, x509_crt_format)=0 (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialspure virtual
set_x509_crl_file(const sstring &crlfile, x509_crt_format) (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsvirtual
set_x509_key(const blob &cert, const blob &key, x509_crt_format)=0 (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialspure virtual
set_x509_key_file(const sstring &cf, const sstring &kf, x509_crt_format) (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsvirtual
set_x509_trust(const blob &, x509_crt_format)=0 (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialspure virtual
set_x509_trust_file(const sstring &cafile, x509_crt_format) (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsvirtual
~abstract_credentials() (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsinlineprotectedvirtual
+ + + + diff --git a/master/classseastar_1_1tls_1_1abstract__credentials.html b/master/classseastar_1_1tls_1_1abstract__credentials.html new file mode 100644 index 000000000..ff278cf91 --- /dev/null +++ b/master/classseastar_1_1tls_1_1abstract__credentials.html @@ -0,0 +1,137 @@ + + + + + + + +Seastar: seastar::tls::abstract_credentials Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::tls::abstract_credentials Class Referenceabstract
+
+
+
+Inheritance diagram for seastar::tls::abstract_credentials:
+
+
+ + +seastar::tls::certificate_credentials +seastar::tls::credentials_builder +seastar::tls::server_credentials + +
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual void set_x509_trust (const blob &, x509_crt_format)=0
 
+virtual void set_x509_crl (const blob &, x509_crt_format)=0
 
+virtual void set_x509_key (const blob &cert, const blob &key, x509_crt_format)=0
 
+virtual void set_simple_pkcs12 (const blob &, x509_crt_format, const sstring &password)=0
 
+virtual future set_x509_trust_file (const sstring &cafile, x509_crt_format)
 
+virtual future set_x509_crl_file (const sstring &crlfile, x509_crt_format)
 
+virtual future set_x509_key_file (const sstring &cf, const sstring &kf, x509_crt_format)
 
+virtual future set_simple_pkcs12_file (const sstring &pkcs12file, x509_crt_format, const sstring &password)
 
+ + + + + + + +

+Protected Member Functions

abstract_credentials (const abstract_credentials &)=default
 
+abstract_credentialsoperator= (abstract_credentials &)=default
 
+abstract_credentialsoperator= (abstract_credentials &&)=default
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1tls_1_1abstract__credentials.png b/master/classseastar_1_1tls_1_1abstract__credentials.png new file mode 100644 index 0000000000000000000000000000000000000000..788e5d638adfe0e3210add167bdb8ae553488533 GIT binary patch literal 1594 zcmbW1drXs87{!Tm+PhmU44|r9dgr)>0X;Zzh^0Te7&5Jm>wLNaIpC1e#zk8q{5W%7VsY(K|?N~+-UKscK>!@lX4ecQqe&LcBY4lrfRSf*iP_)N8Xg5@1pa}N53ll8&AS-U~ zbH?yuL8yI{>a`KbkFP9J^6T+hV0C!x8l;{KbGeww$M^8R4r&XsR zyzb%msZ7&Vb~5xSQ_q)$9A>#Jy*1qgDL4lCMVuB}n~}R3I>vSRNo6g*rc;5#UltZn z1@5}YltS<18r5)Eto`Dfnw{5E zSV~>Zh-#4f>y$C{%qqT5(WyVCJje>(%f!@S{{f`_jF`^i#>rME2?3a6n5O`ZTMKm? zt$H>k0eNshAL7J%yMbMBa4zdPeRz2ON8or@VmgW8aO9|3Q9I$ZrFL(H;Lx(huf2z| zX^7Q}`wZERm6GaFW#1rwTL-dw=em^6>=u&p*3tsu?LZ+jDH?GXH@>$iD6YiUfpW1e zfV=QV0wb(_YTkw$?u4A)k$J%H;S4(yWgc8@jnggUkz$}K2*N@*DURMD5Y725sNA|| z{DxASj^;Y{JvU*X$L8-C55D@UYPTAfL6viCYGtOGQT|2-%I!RL7-3>&G8;+hizU*k z^#U0~uK-cH!*g#!H3+JZ7BUnudA~k6hYse;8^W?Z42tBDnaV__7z@u?p-r z2&R#rh%0KI^0YY>S_x>;O>(7AjbWV*Zmc|$J&$3ZWRIFd$xQeq&@Yqb4e=?M2KRUU o_r4L|Lp!7z&r?_ej$f=IQY{lDMo}9=;6V>SZg|%_d%r#XCvGF^8vp + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::tls::certificate_credentials Member List
+
+
+ +

This is the complete list of members for seastar::tls::certificate_credentials, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
abstract_credentials()=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
abstract_credentials(const abstract_credentials &)=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
certificate_credentials() (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentials
certificate_credentials(certificate_credentials &&) noexcept (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentials
certificate_credentials(const certificate_credentials &)=delete (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentials
operator=(certificate_credentials &&) noexcept (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentials
operator=(const certificate_credentials &)=delete (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentials
operator=(abstract_credentials &)=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
operator=(abstract_credentials &&)=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
set_dn_verification_callback(dn_callback)seastar::tls::certificate_credentials
set_priority_string(const sstring &)seastar::tls::certificate_credentials
set_simple_pkcs12(const blob &, x509_crt_format, const sstring &password) override (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentialsvirtual
set_simple_pkcs12_file(const sstring &pkcs12file, x509_crt_format, const sstring &password) (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsvirtual
set_system_trust()seastar::tls::certificate_credentials
set_x509_crl(const blob &, x509_crt_format) override (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentialsvirtual
set_x509_crl_file(const sstring &crlfile, x509_crt_format) (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsvirtual
set_x509_key(const blob &cert, const blob &key, x509_crt_format) override (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentialsvirtual
set_x509_key_file(const sstring &cf, const sstring &kf, x509_crt_format) (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsvirtual
set_x509_trust(const blob &, x509_crt_format) override (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentialsvirtual
set_x509_trust_file(const sstring &cafile, x509_crt_format) (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsvirtual
~abstract_credentials() (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsinlineprotectedvirtual
~certificate_credentials() (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentials
+ + + + diff --git a/master/classseastar_1_1tls_1_1certificate__credentials.html b/master/classseastar_1_1tls_1_1certificate__credentials.html new file mode 100644 index 000000000..a43a6c8ce --- /dev/null +++ b/master/classseastar_1_1tls_1_1certificate__credentials.html @@ -0,0 +1,369 @@ + + + + + + + +Seastar: seastar::tls::certificate_credentials Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::tls::certificate_credentials Class Reference
+
+
+

Detailed Description

+

Holds certificates and keys.

+

Typically, credentials are shared for multiple client/server sessions. Changes to the credentials object will affect all sessions instantiated with it. You should probably set it up once, before starting client/server connections.

+
+

#include <seastar/net/tls.hh>

+
+Inheritance diagram for seastar::tls::certificate_credentials:
+
+
+ + +seastar::tls::abstract_credentials +seastar::tls::server_credentials + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

certificate_credentials (certificate_credentials &&) noexcept
 
+certificate_credentialsoperator= (certificate_credentials &&) noexcept
 
certificate_credentials (const certificate_credentials &)=delete
 
+certificate_credentialsoperator= (const certificate_credentials &)=delete
 
void set_x509_trust (const blob &, x509_crt_format) override
 
void set_x509_crl (const blob &, x509_crt_format) override
 
void set_x509_key (const blob &cert, const blob &key, x509_crt_format) override
 
void set_simple_pkcs12 (const blob &, x509_crt_format, const sstring &password) override
 
future set_system_trust ()
 
void set_priority_string (const sstring &)
 
void set_dn_verification_callback (dn_callback)
 
+virtual future set_x509_trust_file (const sstring &cafile, x509_crt_format)
 
+virtual future set_x509_crl_file (const sstring &crlfile, x509_crt_format)
 
+virtual future set_x509_key_file (const sstring &cf, const sstring &kf, x509_crt_format)
 
+virtual future set_simple_pkcs12_file (const sstring &pkcs12file, x509_crt_format, const sstring &password)
 
+

Member Function Documentation

+ +

◆ set_dn_verification_callback()

+ +
+
+ + + + + + + + +
void seastar::tls::certificate_credentials::set_dn_verification_callback (dn_callback )
+
+

Register a callback for receiving Distinguished Name (DN) information during the TLS handshake, extracted from the certificate as sent by the peer.

+

The callback is not invoked in case the peer did not send a certificate. (This could e.g. happen when we are the server, and a client connects while client_auth is not set to REQUIRE.)

+

If, based upon the extracted DN information, you want to abort the handshake, then simply throw an exception (e.g., from the callback) like verification_error.

+

Registering this callback does not bypass the 'standard' certificate verification procedure; instead it merely extracts the DN information from the peer certificate (i.e., the 'leaf' certificate from the chain of certificates sent by the peer) and allows for extra checks.

+

To keep the API simple, you can unregister the callback by means of registering an empty callback, i.e. dn_callback{}

+

The callback prototype is documented in the dn_callback typedef.

+ +
+
+ +

◆ set_priority_string()

+ +
+
+ + + + + + + + +
void seastar::tls::certificate_credentials::set_priority_string (const sstring & )
+
+

TLS handshake priority string. See gnutls docs and syntax at https://gnutls.org/manual/html_node/Priority-Strings.html

+

Allows specifying order and allowance for handshake alg.

+ +
+
+ +

◆ set_simple_pkcs12()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void seastar::tls::certificate_credentials::set_simple_pkcs12 (const blob & ,
x509_crt_format ,
const sstring & password 
)
+
+overridevirtual
+
+
+ +

◆ set_system_trust()

+ +
+
+ + + + + + + +
future seastar::tls::certificate_credentials::set_system_trust ()
+
+

Loads default system cert trust file into this object.

+ +
+
+ +

◆ set_x509_crl()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::tls::certificate_credentials::set_x509_crl (const blob & ,
x509_crt_format  
)
+
+overridevirtual
+
+
+ +

◆ set_x509_key()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void seastar::tls::certificate_credentials::set_x509_key (const blob & cert,
const blob & key,
x509_crt_format  
)
+
+overridevirtual
+
+
+ +

◆ set_x509_trust()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::tls::certificate_credentials::set_x509_trust (const blob & ,
x509_crt_format  
)
+
+overridevirtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1tls_1_1certificate__credentials.png b/master/classseastar_1_1tls_1_1certificate__credentials.png new file mode 100644 index 0000000000000000000000000000000000000000..ebf8a9ce9b46d0bf38a7d5861983538325002fdb GIT binary patch literal 1158 zcmeAS@N?(olHy`uVBq!ia0vp^r+~PFgBeIp)Nc6;q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IYLL_J*`Ln;{G&VAkY+JK|QzJKYy|H|{X z?3CDWxoq{?CzD;jUTIADAmQ^bD0}U7hR{jt8kQ(|ZdP3BaVe)_y4S=d9j=yFs^3bh zO%k~%xg(?b>3{L5%TF^;{bZn-cuTIl@_X_0_x-DPy_8c+eA&FMaJTJj(}QWB@9f!{ zvHINcw=32h-!pUD$(7;zgDfRqw=GFJwvOZ8ZN~3rVOo=9wXz;_iax%5EN9dGBMXi_ zDtkLC?cVgijxTG9c6SxJvu<1RVFv%)iMxG&GjVg~gxuO)td&AuvXY>tS3c!YX+s?XD(u`jJ}JiGEuK>Xaa zi}&K?_AhRhot^d1sZ>VxOzGJRYv-(cKd1h4w!Y{7p5sgT)U`e5D{Y4P-$QGXiL{v3 z)@xOq3^nrR4cQN@Lh`nsF4)O8we@7^j+hRwGJ}Sn6G9l$oP!u=@OrW)n5l?1+$1O< zzhFwxI!3MoqHvY@0g_TWr>>`OknF8Gy_?-4>PE@Cx7%0RMDl+SI)DB_%c-KW*Wt%} zZ$H+1f2~?P{;F^Kvg7R8bH6>=^8H$7#6OFr$~Dmy-&2^^TWxOLwlj>stmxHM$tjZy zv#Oq1UFnM4ep_N?gRID{j*uSbXs2TbT=`7J&g{~?{bz0f=j-`%4<>LgJn+tSYS4vz~oci@|l=k0G%CmgiC%*g@aFLnHOv5EfNjHSDHtFAaaNXKqL(+<=_p(Z+J+4^KmE-x;P~J-U`0h)h zHy$pSIwhEQ#hUf~B^D>$>USTw6Ph>C`R12xiiTyApY38fJwtT9jQUTXz0nEzcc$L^ z6VR(;?sS;x_2~`!t|J!kQHx=uzopr E0K|tR5dZ)H literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1tls_1_1credentials__builder-members.html b/master/classseastar_1_1tls_1_1credentials__builder-members.html new file mode 100644 index 000000000..9fe50cf1a --- /dev/null +++ b/master/classseastar_1_1tls_1_1credentials__builder-members.html @@ -0,0 +1,105 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::tls::credentials_builder Member List
+
+
+ +

This is the complete list of members for seastar::tls::credentials_builder, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + +
abstract_credentials()=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
abstract_credentials(const abstract_credentials &)=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
apply_to(certificate_credentials &) const (defined in seastar::tls::credentials_builder)seastar::tls::credentials_builder
build_certificate_credentials() const (defined in seastar::tls::credentials_builder)seastar::tls::credentials_builder
build_reloadable_certificate_credentials(reload_callback={}, std::optional< std::chrono::milliseconds > tolerance={}) const (defined in seastar::tls::credentials_builder)seastar::tls::credentials_builder
build_reloadable_server_credentials(reload_callback={}, std::optional< std::chrono::milliseconds > tolerance={}) const (defined in seastar::tls::credentials_builder)seastar::tls::credentials_builder
build_server_credentials() const (defined in seastar::tls::credentials_builder)seastar::tls::credentials_builder
operator=(abstract_credentials &)=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
operator=(abstract_credentials &&)=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
set_client_auth(client_auth) (defined in seastar::tls::credentials_builder)seastar::tls::credentials_builder
set_dh_level(dh_params::level=dh_params::level::LEGACY) (defined in seastar::tls::credentials_builder)seastar::tls::credentials_builder
set_priority_string(const sstring &) (defined in seastar::tls::credentials_builder)seastar::tls::credentials_builder
set_session_resume_mode(session_resume_mode) (defined in seastar::tls::credentials_builder)seastar::tls::credentials_builder
set_simple_pkcs12(const blob &, x509_crt_format, const sstring &password) override (defined in seastar::tls::credentials_builder)seastar::tls::credentials_buildervirtual
set_simple_pkcs12_file(const sstring &pkcs12file, x509_crt_format, const sstring &password) override (defined in seastar::tls::credentials_builder)seastar::tls::credentials_buildervirtual
set_system_trust() (defined in seastar::tls::credentials_builder)seastar::tls::credentials_builder
set_x509_crl(const blob &, x509_crt_format) override (defined in seastar::tls::credentials_builder)seastar::tls::credentials_buildervirtual
set_x509_crl_file(const sstring &crlfile, x509_crt_format) override (defined in seastar::tls::credentials_builder)seastar::tls::credentials_buildervirtual
set_x509_key(const blob &cert, const blob &key, x509_crt_format) override (defined in seastar::tls::credentials_builder)seastar::tls::credentials_buildervirtual
set_x509_key_file(const sstring &cf, const sstring &kf, x509_crt_format) override (defined in seastar::tls::credentials_builder)seastar::tls::credentials_buildervirtual
set_x509_trust(const blob &, x509_crt_format) override (defined in seastar::tls::credentials_builder)seastar::tls::credentials_buildervirtual
set_x509_trust_file(const sstring &cafile, x509_crt_format) override (defined in seastar::tls::credentials_builder)seastar::tls::credentials_buildervirtual
~abstract_credentials() (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsinlineprotectedvirtual
+ + + + diff --git a/master/classseastar_1_1tls_1_1credentials__builder.html b/master/classseastar_1_1tls_1_1credentials__builder.html new file mode 100644 index 000000000..5d669bfb7 --- /dev/null +++ b/master/classseastar_1_1tls_1_1credentials__builder.html @@ -0,0 +1,478 @@ + + + + + + + +Seastar: seastar::tls::credentials_builder Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::tls::credentials_builder Class Reference
+
+
+

Detailed Description

+

Intentionally "primitive", and more importantly, copyable container for certificate credentials options. The intendend use case is to be able to use across shards, at, say, initialization of tls objects

+

Note that loading invalid objects (malformed certs etc) will not generate exceptions until, earliest, the build functions are called.

+
+

#include <seastar/net/tls.hh>

+
+Inheritance diagram for seastar::tls::credentials_builder:
+
+
+ + +seastar::tls::abstract_credentials + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+void set_dh_level (dh_params::level=dh_params::level::LEGACY)
 
void set_x509_trust (const blob &, x509_crt_format) override
 
void set_x509_crl (const blob &, x509_crt_format) override
 
void set_x509_key (const blob &cert, const blob &key, x509_crt_format) override
 
void set_simple_pkcs12 (const blob &, x509_crt_format, const sstring &password) override
 
future set_x509_trust_file (const sstring &cafile, x509_crt_format) override
 
future set_x509_crl_file (const sstring &crlfile, x509_crt_format) override
 
future set_x509_key_file (const sstring &cf, const sstring &kf, x509_crt_format) override
 
future set_simple_pkcs12_file (const sstring &pkcs12file, x509_crt_format, const sstring &password) override
 
+future set_system_trust ()
 
+void set_client_auth (client_auth)
 
+void set_priority_string (const sstring &)
 
+void set_session_resume_mode (session_resume_mode)
 
+void apply_to (certificate_credentials &) const
 
+shared_ptr< certificate_credentialsbuild_certificate_credentials () const
 
+shared_ptr< server_credentialsbuild_server_credentials () const
 
+future< shared_ptr< certificate_credentials > > build_reloadable_certificate_credentials (reload_callback={}, std::optional< std::chrono::milliseconds > tolerance={}) const
 
+future< shared_ptr< server_credentials > > build_reloadable_server_credentials (reload_callback={}, std::optional< std::chrono::milliseconds > tolerance={}) const
 
+

Member Function Documentation

+ +

◆ set_simple_pkcs12()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void seastar::tls::credentials_builder::set_simple_pkcs12 (const blob & ,
x509_crt_format ,
const sstring & password 
)
+
+overridevirtual
+
+
+ +

◆ set_simple_pkcs12_file()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future seastar::tls::credentials_builder::set_simple_pkcs12_file (const sstring & pkcs12file,
x509_crt_format ,
const sstring & password 
)
+
+overridevirtual
+
+ +

Reimplemented from seastar::tls::abstract_credentials.

+ +
+
+ +

◆ set_x509_crl()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::tls::credentials_builder::set_x509_crl (const blob & ,
x509_crt_format  
)
+
+overridevirtual
+
+
+ +

◆ set_x509_crl_file()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::tls::credentials_builder::set_x509_crl_file (const sstring & crlfile,
x509_crt_format  
)
+
+overridevirtual
+
+ +

Reimplemented from seastar::tls::abstract_credentials.

+ +
+
+ +

◆ set_x509_key()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void seastar::tls::credentials_builder::set_x509_key (const blob & cert,
const blob & key,
x509_crt_format  
)
+
+overridevirtual
+
+
+ +

◆ set_x509_key_file()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future seastar::tls::credentials_builder::set_x509_key_file (const sstring & cf,
const sstring & kf,
x509_crt_format  
)
+
+overridevirtual
+
+ +

Reimplemented from seastar::tls::abstract_credentials.

+ +
+
+ +

◆ set_x509_trust()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::tls::credentials_builder::set_x509_trust (const blob & ,
x509_crt_format  
)
+
+overridevirtual
+
+
+ +

◆ set_x509_trust_file()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::tls::credentials_builder::set_x509_trust_file (const sstring & cafile,
x509_crt_format  
)
+
+overridevirtual
+
+ +

Reimplemented from seastar::tls::abstract_credentials.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1tls_1_1credentials__builder.png b/master/classseastar_1_1tls_1_1credentials__builder.png new file mode 100644 index 0000000000000000000000000000000000000000..7353e4ade41745f2cc1677ef4749d480b4d02512 GIT binary patch literal 771 zcmeAS@N?(olHy`uVBq!ia0vp^`++!sgBeKHtA!*3DTx4|5ZC|z{{xvX-h3_XKQsZz z0^j8|y^|7-vG{oVfedECh|hVAWZCoQ**sbBhE zWYVrUja`@OW6pE$J@(V-{%_X%@t(iV@4Dyr`ZvSuo13tNR4VAb4Fnr$flM$$m`OM{K>@$|1 zDq-7!(D20=+bKb%YK8Ll~mzrSZSKGcW(VdE+}}w&eS&-EH5#&pK+q z&${bh!~ZwSel|bQ`+oko-s`)2&3CVU-?{R0@s+Rpb<%4SdvosYn*1a!BI9)ap~HW& z(iuFO6O-lEZxp)WxQK7^k$e9V|Jv2t?pQ7GnWOr6Z~wjL`BSF+lUn>|=bt^R=l=;k zcm0uZ*_!(4Jk1jxdq0|+8lLky{mgxXBj2y@f2aEM?&jmmFF(6~`N*QO?KML8p4jg> zb$|VTvpXNzTYtTG=6!X4zwZ2N{cr8R+uSylnXYSaT|VYN7ce-jY}X|0d1=4@&2R1x wmv_ba{Z?T3w`y)ZA_QK3-RhyaH1#X{8*vSJ|1_2^V2Wk%boFyt=akR{0A*H`1^@s6 literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1tls_1_1dh__params-members.html b/master/classseastar_1_1tls_1_1dh__params-members.html new file mode 100644 index 000000000..62315e727 --- /dev/null +++ b/master/classseastar_1_1tls_1_1dh__params-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::tls::dh_params Member List
+
+
+ +

This is the complete list of members for seastar::tls::dh_params, including all inherited members.

+ + + + + + + + + + +
dh_params(level=level::LEGACY) (defined in seastar::tls::dh_params)seastar::tls::dh_params
dh_params(const blob &, x509_crt_format) (defined in seastar::tls::dh_params)seastar::tls::dh_params
dh_params(dh_params &&) noexcept (defined in seastar::tls::dh_params)seastar::tls::dh_params
dh_params(const dh_params &)=delete (defined in seastar::tls::dh_params)seastar::tls::dh_params
from_file(const sstring &, x509_crt_format)seastar::tls::dh_paramsstatic
level enum name (defined in seastar::tls::dh_params)seastar::tls::dh_params
operator=(dh_params &&) noexcept (defined in seastar::tls::dh_params)seastar::tls::dh_params
operator=(const dh_params &)=delete (defined in seastar::tls::dh_params)seastar::tls::dh_params
~dh_params() (defined in seastar::tls::dh_params)seastar::tls::dh_params
+ + + + diff --git a/master/classseastar_1_1tls_1_1dh__params.html b/master/classseastar_1_1tls_1_1dh__params.html new file mode 100644 index 000000000..09160bf52 --- /dev/null +++ b/master/classseastar_1_1tls_1_1dh__params.html @@ -0,0 +1,165 @@ + + + + + + + +Seastar: seastar::tls::dh_params Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::tls::dh_params Class Reference
+
+
+

Detailed Description

+

Diffie-Hellman parameters for wire encryption.

+
+

#include <seastar/net/tls.hh>

+ + + + +

+Public Types

enum class  level { LEGACY = 2 +, MEDIUM = 3 +, HIGH = 4 +, ULTRA = 5 + }
 
+ + + + + + + + + + + + + +

+Public Member Functions

dh_params (level=level::LEGACY)
 
dh_params (const blob &, x509_crt_format)
 
dh_params (dh_params &&) noexcept
 
+dh_paramsoperator= (dh_params &&) noexcept
 
dh_params (const dh_params &)=delete
 
+dh_paramsoperator= (const dh_params &)=delete
 
+ + + +

+Static Public Member Functions

static future< dh_paramsfrom_file (const sstring &, x509_crt_format)
 
+

Member Function Documentation

+ +

◆ from_file()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static future< dh_params > seastar::tls::dh_params::from_file (const sstring & ,
x509_crt_format  
)
+
+static
+
+

loads a key from file

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1tls_1_1server__credentials-members.html b/master/classseastar_1_1tls_1_1server__credentials-members.html new file mode 100644 index 000000000..4a7325c03 --- /dev/null +++ b/master/classseastar_1_1tls_1_1server__credentials-members.html @@ -0,0 +1,113 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::tls::server_credentials Member List
+
+
+ +

This is the complete list of members for seastar::tls::server_credentials, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
abstract_credentials()=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
abstract_credentials(const abstract_credentials &)=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
certificate_credentials() (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentials
certificate_credentials(certificate_credentials &&) noexcept (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentials
certificate_credentials(const certificate_credentials &)=delete (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentials
operator=(server_credentials &&) noexcept (defined in seastar::tls::server_credentials)seastar::tls::server_credentials
operator=(const server_credentials &)=delete (defined in seastar::tls::server_credentials)seastar::tls::server_credentials
operator=(certificate_credentials &&) noexcept (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentials
operator=(const certificate_credentials &)=delete (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentials
operator=(abstract_credentials &)=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
operator=(abstract_credentials &&)=default (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsprotected
server_credentials() (defined in seastar::tls::server_credentials)seastar::tls::server_credentials
server_credentials(shared_ptr< dh_params >) (defined in seastar::tls::server_credentials)seastar::tls::server_credentials
server_credentials(const dh_params &) (defined in seastar::tls::server_credentials)seastar::tls::server_credentials
server_credentials(server_credentials &&) noexcept (defined in seastar::tls::server_credentials)seastar::tls::server_credentials
server_credentials(const server_credentials &)=delete (defined in seastar::tls::server_credentials)seastar::tls::server_credentials
set_client_auth(client_auth) (defined in seastar::tls::server_credentials)seastar::tls::server_credentials
set_dn_verification_callback(dn_callback)seastar::tls::certificate_credentials
set_priority_string(const sstring &)seastar::tls::certificate_credentials
set_session_resume_mode(session_resume_mode)seastar::tls::server_credentials
set_simple_pkcs12(const blob &, x509_crt_format, const sstring &password) override (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentialsvirtual
set_simple_pkcs12_file(const sstring &pkcs12file, x509_crt_format, const sstring &password) (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsvirtual
set_system_trust()seastar::tls::certificate_credentials
set_x509_crl(const blob &, x509_crt_format) override (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentialsvirtual
set_x509_crl_file(const sstring &crlfile, x509_crt_format) (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsvirtual
set_x509_key(const blob &cert, const blob &key, x509_crt_format) override (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentialsvirtual
set_x509_key_file(const sstring &cf, const sstring &kf, x509_crt_format) (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsvirtual
set_x509_trust(const blob &, x509_crt_format) override (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentialsvirtual
set_x509_trust_file(const sstring &cafile, x509_crt_format) (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsvirtual
~abstract_credentials() (defined in seastar::tls::abstract_credentials)seastar::tls::abstract_credentialsinlineprotectedvirtual
~certificate_credentials() (defined in seastar::tls::certificate_credentials)seastar::tls::certificate_credentials
+ + + + diff --git a/master/classseastar_1_1tls_1_1server__credentials.html b/master/classseastar_1_1tls_1_1server__credentials.html new file mode 100644 index 000000000..409a1bce0 --- /dev/null +++ b/master/classseastar_1_1tls_1_1server__credentials.html @@ -0,0 +1,422 @@ + + + + + + + +Seastar: seastar::tls::server_credentials Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::tls::server_credentials Class Reference
+
+
+

Detailed Description

+

Extending certificates and keys for server usage. More probably goes in here...

+
+

#include <seastar/net/tls.hh>

+
+Inheritance diagram for seastar::tls::server_credentials:
+
+
+ + +seastar::tls::certificate_credentials +seastar::tls::abstract_credentials + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

server_credentials (shared_ptr< dh_params >)
 
server_credentials (const dh_params &)
 
server_credentials (server_credentials &&) noexcept
 
+server_credentialsoperator= (server_credentials &&) noexcept
 
server_credentials (const server_credentials &)=delete
 
+server_credentialsoperator= (const server_credentials &)=delete
 
+void set_client_auth (client_auth)
 
void set_session_resume_mode (session_resume_mode)
 
void set_x509_trust (const blob &, x509_crt_format) override
 
void set_x509_crl (const blob &, x509_crt_format) override
 
void set_x509_key (const blob &cert, const blob &key, x509_crt_format) override
 
void set_simple_pkcs12 (const blob &, x509_crt_format, const sstring &password) override
 
future set_system_trust ()
 
void set_priority_string (const sstring &)
 
void set_dn_verification_callback (dn_callback)
 
+virtual future set_x509_trust_file (const sstring &cafile, x509_crt_format)
 
+virtual future set_x509_crl_file (const sstring &crlfile, x509_crt_format)
 
+virtual future set_x509_key_file (const sstring &cf, const sstring &kf, x509_crt_format)
 
+virtual future set_simple_pkcs12_file (const sstring &pkcs12file, x509_crt_format, const sstring &password)
 
+

Member Function Documentation

+ +

◆ set_dn_verification_callback()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::tls::certificate_credentials::set_dn_verification_callback (dn_callback )
+
+inherited
+
+

Register a callback for receiving Distinguished Name (DN) information during the TLS handshake, extracted from the certificate as sent by the peer.

+

The callback is not invoked in case the peer did not send a certificate. (This could e.g. happen when we are the server, and a client connects while client_auth is not set to REQUIRE.)

+

If, based upon the extracted DN information, you want to abort the handshake, then simply throw an exception (e.g., from the callback) like verification_error.

+

Registering this callback does not bypass the 'standard' certificate verification procedure; instead it merely extracts the DN information from the peer certificate (i.e., the 'leaf' certificate from the chain of certificates sent by the peer) and allows for extra checks.

+

To keep the API simple, you can unregister the callback by means of registering an empty callback, i.e. dn_callback{}

+

The callback prototype is documented in the dn_callback typedef.

+ +
+
+ +

◆ set_priority_string()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::tls::certificate_credentials::set_priority_string (const sstring & )
+
+inherited
+
+

TLS handshake priority string. See gnutls docs and syntax at https://gnutls.org/manual/html_node/Priority-Strings.html

+

Allows specifying order and allowance for handshake alg.

+ +
+
+ +

◆ set_session_resume_mode()

+ +
+
+ + + + + + + + +
void seastar::tls::server_credentials::set_session_resume_mode (session_resume_mode )
+
+

Sets session resume mode. If session resumption is set to TLS13 session tickets, calling this also functions as key rotation, i.e. creates a new window of TLS session keys.

+ +
+
+ +

◆ set_simple_pkcs12()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void seastar::tls::certificate_credentials::set_simple_pkcs12 (const blob & ,
x509_crt_format ,
const sstring & password 
)
+
+overridevirtualinherited
+
+
+ +

◆ set_system_trust()

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::tls::certificate_credentials::set_system_trust ()
+
+inherited
+
+

Loads default system cert trust file into this object.

+ +
+
+ +

◆ set_x509_crl()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::tls::certificate_credentials::set_x509_crl (const blob & ,
x509_crt_format  
)
+
+overridevirtualinherited
+
+
+ +

◆ set_x509_key()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void seastar::tls::certificate_credentials::set_x509_key (const blob & cert,
const blob & key,
x509_crt_format  
)
+
+overridevirtualinherited
+
+
+ +

◆ set_x509_trust()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void seastar::tls::certificate_credentials::set_x509_trust (const blob & ,
x509_crt_format  
)
+
+overridevirtualinherited
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1tls_1_1server__credentials.png b/master/classseastar_1_1tls_1_1server__credentials.png new file mode 100644 index 0000000000000000000000000000000000000000..f9cc3e5df9c5ef537f46194adae84c39ceb4ef71 GIT binary patch literal 1154 zcmeAS@N?(olHy`uVBq!ia0vp^r+~PFgBeIp)Nc6;q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IYL1U+3GLn;{G&VAkY+JK|Q-hauy|H|{X z?3CDWxoq{?Cy!lU-()#-G}++q=}kJPWfCSXk(>~sl4+tM>M6zhK1g$t$VRQ*RqJaH zyG&A&VxGSC@xS`O%2#qLrnGx<_W%7lq2HqX=f7PmSHDXXijm*qd*kojA1t$Ni+aO0 z=UUC*zHpQ5=e#I+zr9DNo;rHVOht4vpKC`P|BkI2gC@QS3XJt%G2@0=`qaN_R<>f> zvujsX-u|Y(^mY5~&@;EQH*9Tr{`rdJ&YN5EHv}B;T3WYz*`q(rDditG9h_Bceg5jZ z^;>O2|HGh(@S;uzm(5}@w|K7{`;I{>3Z97V~ z_4fVz^ut>H#?F;e`X$FL58k=LbNSTETPJ^-*S}SLIsM~~D-TmtUk0ay!u;>)I?3&@ zS8C+6R4#@ZdGiKK1OBPEbEWh?2Sm<1b0}3w%km(@G3Ovg30_au1YnRgT$~WX;6_lO zt^sJIHvfJ+<=mI6ALUM}-787sR-dYS z|KDD_IaSU-wzFmD`cEx1Rg}^? z`!Fu#sJOb-F8{e~)sNS0v3<0H<#PYKuJ3#AP40SCWq9zLM_IuRnQhFETQ=EiEc48M zp)P!e_kzLNIeI)7_kYdS_q>1janSBh9+%Wltbzr^q%M`-wyCFpiBW{%hg}{+ae|!I z_S+^g&lYYnn%R2VC8Vf{v8R0rlY!JEt^>fZV_2-XlA))KkiZ{?rBjU9H5hU3*G_q{zF8C?o)9*@>ttf|ic|Xvonzz=9OzmY z9<};js<0!q%7_ogm8c#greJGgX3&iwO57AMo{cOSeHx^AZP?Je6D8k9|b zwu|L-glN2s`cJRDw-fU3OuhCepKHx$M^-&EI_T z&-PUY2k&eFr{&I{+w0#l)^YZG-?fZv@Shlplr}d6X)c|j`GNl?W1xw|2AOlf0)xTR L)z4*}Q$iB}npY@k literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1tls_1_1verification__error.html b/master/classseastar_1_1tls_1_1verification__error.html new file mode 100644 index 000000000..6efd03286 --- /dev/null +++ b/master/classseastar_1_1tls_1_1verification__error.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::tls::verification_error Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::tls::verification_error Class Reference
+
+
+

Detailed Description

+

Exception thrown on certificate validation error

+
+

#include <seastar/net/tls.hh>

+
+Inheritance diagram for seastar::tls::verification_error:
+
+
+ +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1tls_1_1verification__error.png b/master/classseastar_1_1tls_1_1verification__error.png new file mode 100644 index 0000000000000000000000000000000000000000..fcbb42650460e20ef518544d913b423ebb0e81b1 GIT binary patch literal 908 zcmeAS@N?(olHy`uVBq!ia0vp^8-TcjgBeH`I80mvq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0r9E97Ln;{G&b?c-+JJ{G-2CUg|GoT2 z8d9BqdiLG=*b|h`aNMYS!rkaIXWW=3FDdj$^z2e;Rn?rN-!lCG`^U={)?fa7`_QB> zqVqX#&sqKHsgBqAS*Ly`+4?M=w(k4X*OQmH*Qn$K<^FS8cI(eUmHRRCRcs#yKRmYl z+ccJKUyJ_fO#0Gt-aAR(roQUorSH!V-QD}!H6s3--o<)lpsrX?o$hyTy#MPwb9Nu8 z`rRFybT|0gzIa_u&t2#1_qcO;U+R0@D^Cq@E>vx2wc{blD;HqOs9_#*^D03r=29@|pGs*_qyMH zyQb=CKT&ep5|5yWNkE@@cBKfJ8B23C2*fcc8_xRh+H}Upj6;*(M;trM`CN}tz?+NN zWzr#riAxL|R5W=6Jn?Y%)PbU%S)v^pY&#WeED~Prsk>BpbL zs41Enp2v6kW!2ukxbKHA#a@2tbo##aj@jGUrc0Q6Rxkf__1-S6oXBiG-||X^4f3}> zUYK0jJ;8q`|NXj8D?c8}+f)BC&%wAbTy*b;b6fh~Fj+nPm!#dYP34sR{-Qg-?v%zK z{+FBgey7{pmec*|hyM9JKUDX~YLRy5--!EH{c03yB7}DH2|ied+zF8v@7L}-xuTlFPrU0&-bKkvy=vAqr>nJ hIk~5M_RQYH_RWbG*bl^ZY6G(lgQu&X%Q~loCIF+rp>_ZO literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1tls_1_1x509__cert-members.html b/master/classseastar_1_1tls_1_1x509__cert-members.html new file mode 100644 index 000000000..5ae32b247 --- /dev/null +++ b/master/classseastar_1_1tls_1_1x509__cert-members.html @@ -0,0 +1,81 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::tls::x509_cert Member List
+
+
+ +

This is the complete list of members for seastar::tls::x509_cert, including all inherited members.

+
+ + + + diff --git a/master/classseastar_1_1tls_1_1x509__cert.html b/master/classseastar_1_1tls_1_1x509__cert.html new file mode 100644 index 000000000..46990ef53 --- /dev/null +++ b/master/classseastar_1_1tls_1_1x509__cert.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: seastar::tls::x509_cert Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::tls::x509_cert Class Reference
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1tmp__dir-members.html b/master/classseastar_1_1tmp__dir-members.html new file mode 100644 index 000000000..d9284c623 --- /dev/null +++ b/master/classseastar_1_1tmp__dir-members.html @@ -0,0 +1,94 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::tmp_dir Member List
+
+
+ +

This is the complete list of members for seastar::tmp_dir, including all inherited members.

+ + + + + + + + + + + + + +
create(std::filesystem::path path_template=default_tmpdir(), file_permissions create_permissions=file_permissions::default_dir_permissions) noexcept (defined in seastar::tmp_dir)seastar::tmp_dir
do_with(std::filesystem::path path_template, Func &&func, file_permissions create_permissions=file_permissions::default_dir_permissions) noexcept (defined in seastar::tmp_dir)seastar::tmp_dirinlinestatic
do_with(Func &&func) noexcept (defined in seastar::tmp_dir)seastar::tmp_dirinlinestatic
do_with_thread(Func &&func) noexcept (defined in seastar::tmp_dir)seastar::tmp_dirinlinestatic
get_path() const (defined in seastar::tmp_dir)seastar::tmp_dirinline
has_path() const (defined in seastar::tmp_dir)seastar::tmp_dirinline
operator=(tmp_dir &&) noexcept=default (defined in seastar::tmp_dir)seastar::tmp_dir
remove() noexcept (defined in seastar::tmp_dir)seastar::tmp_dir
tmp_dir()=default (defined in seastar::tmp_dir)seastar::tmp_dir
tmp_dir(const tmp_dir &)=delete (defined in seastar::tmp_dir)seastar::tmp_dir
tmp_dir(tmp_dir &&x)=default (defined in seastar::tmp_dir)seastar::tmp_dir
~tmp_dir() (defined in seastar::tmp_dir)seastar::tmp_dir
+ + + + diff --git a/master/classseastar_1_1tmp__dir.html b/master/classseastar_1_1tmp__dir.html new file mode 100644 index 000000000..03b8cc51f --- /dev/null +++ b/master/classseastar_1_1tmp__dir.html @@ -0,0 +1,131 @@ + + + + + + + +Seastar: seastar::tmp_dir Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::tmp_dir Class Reference
+
+
+

Detailed Description

+
Examples
file_demo.cc.
+
+
+ + + + + + + + + + + + + + + +

+Public Member Functions

tmp_dir (const tmp_dir &)=delete
 
tmp_dir (tmp_dir &&x)=default
 
+tmp_diroperator= (tmp_dir &&) noexcept=default
 
+future create (std::filesystem::path path_template=default_tmpdir(), file_permissions create_permissions=file_permissions::default_dir_permissions) noexcept
 
+future remove () noexcept
 
+bool has_path () const
 
+const std::filesystem::path & get_path () const
 
+ + + + + + + + + + +

+Static Public Member Functions

+template<typename Func >
+requires std::is_nothrow_move_constructible_v<Func>
static future do_with (std::filesystem::path path_template, Func &&func, file_permissions create_permissions=file_permissions::default_dir_permissions) noexcept
 
+template<typename Func >
static future do_with (Func &&func) noexcept
 
+template<typename Func >
+requires std::is_nothrow_move_constructible_v<Func>
static future do_with_thread (Func &&func) noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1tmp__file-members.html b/master/classseastar_1_1tmp__file-members.html new file mode 100644 index 000000000..9bf1389a5 --- /dev/null +++ b/master/classseastar_1_1tmp__file-members.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::tmp_file Member List
+
+
+ +

This is the complete list of members for seastar::tmp_file, including all inherited members.

+ + + + + + + + + + + + + + + +
close() noexcept (defined in seastar::tmp_file)seastar::tmp_file
do_with(std::filesystem::path path_template, Func &&func, open_flags oflags=open_flags::rw, file_open_options options={}) noexcept (defined in seastar::tmp_file)seastar::tmp_fileinlinestatic
do_with(Func &&func) noexcept (defined in seastar::tmp_file)seastar::tmp_fileinlinestatic
get_file() (defined in seastar::tmp_file)seastar::tmp_fileinline
get_path() const (defined in seastar::tmp_file)seastar::tmp_fileinline
has_path() const (defined in seastar::tmp_file)seastar::tmp_fileinline
is_open() const (defined in seastar::tmp_file)seastar::tmp_fileinline
open(std::filesystem::path path_template=default_tmpdir(), open_flags oflags=open_flags::rw, file_open_options options={}) noexcept (defined in seastar::tmp_file)seastar::tmp_file
operator=(tmp_file &&) noexcept=default (defined in seastar::tmp_file)seastar::tmp_file
remove() noexcept (defined in seastar::tmp_file)seastar::tmp_file
tmp_file() noexcept=default (defined in seastar::tmp_file)seastar::tmp_file
tmp_file(const tmp_file &)=delete (defined in seastar::tmp_file)seastar::tmp_file
tmp_file(tmp_file &&x) noexcept (defined in seastar::tmp_file)seastar::tmp_file
~tmp_file() (defined in seastar::tmp_file)seastar::tmp_file
+ + + + diff --git a/master/classseastar_1_1tmp__file.html b/master/classseastar_1_1tmp__file.html new file mode 100644 index 000000000..4291cd840 --- /dev/null +++ b/master/classseastar_1_1tmp__file.html @@ -0,0 +1,131 @@ + + + + + + + +Seastar: seastar::tmp_file Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::tmp_file Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

tmp_file (const tmp_file &)=delete
 
tmp_file (tmp_file &&x) noexcept
 
+tmp_fileoperator= (tmp_file &&) noexcept=default
 
+future open (std::filesystem::path path_template=default_tmpdir(), open_flags oflags=open_flags::rw, file_open_options options={}) noexcept
 
+future close () noexcept
 
+future remove () noexcept
 
+bool has_path () const
 
+bool is_open () const
 
+const std::filesystem::path & get_path () const
 
+fileget_file ()
 
+ + + + + + + +

+Static Public Member Functions

+template<typename Func >
static future do_with (std::filesystem::path path_template, Func &&func, open_flags oflags=open_flags::rw, file_open_options options={}) noexcept
 
+template<typename Func >
static future do_with (Func &&func) noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1transform__iterator-members.html b/master/classseastar_1_1transform__iterator-members.html new file mode 100644 index 000000000..bd370f5cc --- /dev/null +++ b/master/classseastar_1_1transform__iterator-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::transform_iterator< Iterator, Func > Member List
+
+ + + + + diff --git a/master/classseastar_1_1transform__iterator.html b/master/classseastar_1_1transform__iterator.html new file mode 100644 index 000000000..235768e7f --- /dev/null +++ b/master/classseastar_1_1transform__iterator.html @@ -0,0 +1,107 @@ + + + + + + + +Seastar: seastar::transform_iterator< Iterator, Func > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::transform_iterator< Iterator, Func > Class Template Reference
+
+
+ + + + + + + + + + + + + + +

+Public Member Functions

transform_iterator (Iterator i, Func f)
 
+auto operator* ()
 
+transform_iteratoroperator++ ()
 
+transform_iterator operator++ (int)
 
+bool operator== (const transform_iterator &x) const
 
+bool operator!= (const transform_iterator &x) const
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1unread__overflow__exception-members.html b/master/classseastar_1_1unread__overflow__exception-members.html new file mode 100644 index 000000000..2c287d34f --- /dev/null +++ b/master/classseastar_1_1unread__overflow__exception-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::unread_overflow_exception Member List
+
+
+ +

This is the complete list of members for seastar::unread_overflow_exception, including all inherited members.

+ + +
what() const noexcept (defined in seastar::unread_overflow_exception)seastar::unread_overflow_exceptioninlinevirtual
+ + + + diff --git a/master/classseastar_1_1unread__overflow__exception.html b/master/classseastar_1_1unread__overflow__exception.html new file mode 100644 index 000000000..ead718c93 --- /dev/null +++ b/master/classseastar_1_1unread__overflow__exception.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: seastar::unread_overflow_exception Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::unread_overflow_exception Class Reference
+
+
+
+Inheritance diagram for seastar::unread_overflow_exception:
+
+
+ +
+ + + + +

+Public Member Functions

+virtual const char * what () const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1unread__overflow__exception.png b/master/classseastar_1_1unread__overflow__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..1557f08a75d435abe1b122b1f4e16bd2cd5f49b1 GIT binary patch literal 688 zcmeAS@N?(olHy`uVBq!ia0vp^H-I>RgBeKr$a-f1DTx4|5ZC|z{{xvX-h3_XKQsZz z0^QQ&dSuY2{j{`lgx z9u8h}FV51lc==fS_5=sLwjbRyZ+09~$+Tgeq4ISJ!{jCNz8KuFx*31Qa%Wvi_I^g6 zNpjbV6U^TK{q%TKtj^1;XZT;5Rjyq&Up;;DlG{~0XO`6bWS{xzX};Re(>GOKuA9fA z{psAbr>#>;tIp_nmVeFBe0T8KeyN;|rOaVZBg`kqr0f>|em6nw>1wT`TPtHMlJ7@% zMTh%j&MP^3#d-2uZSTNI>s}vz%{D{Dc2(j*m6y$22A;1x8Pz;(GntHyr2`oL`|39c znrhv6ZK`o|MS}4487YUGT*Fyjcr&tHn9RhpK%G^>!Jo^ZVV+0=gRSNPhN_?j#xF}4 zm|u9JDcEgfEFCCupaQ1$CDV=lljFPg+}ywHM%s_{&1db*4>FXUO1OMZH-77*ZU1J^ z+gyH2$9zL~X}8`n-{>nw)kc-_;@hpJbL)67=byHHYJ&HlY5EbBYaecXJS|N7+SBm< zt&7VNN|k;uo&7Q-;pv*${lyj2Gv`i}wq(if6=^?~?>O}YWAS2<=a)Rn?c=NLShSO7 zzk9iK$4kEhuUt00HJUNs$U0UE1O`>=W4jA@$Lzi*ZE zJm4;!^u7IH9p5f(&j#&X0^fHhFvwrpkiftW3x~{qXJ*dqU2g9&wdwZ{=C2=s$&10$ L)z4*}Q$iB}w{ksO literal 0 HcmV?d00001 diff --git a/master/classseastar_1_1util_1_1spinlock-members.html b/master/classseastar_1_1util_1_1spinlock-members.html new file mode 100644 index 000000000..3dd984dd2 --- /dev/null +++ b/master/classseastar_1_1util_1_1spinlock-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::util::spinlock Member List
+
+
+ +

This is the complete list of members for seastar::util::spinlock, including all inherited members.

+ + + + + + + +
lock() noexcept (defined in seastar::util::spinlock)seastar::util::spinlockinline
spinlock()=default (defined in seastar::util::spinlock)seastar::util::spinlock
spinlock(const spinlock &)=delete (defined in seastar::util::spinlock)seastar::util::spinlock
try_lock() noexcept (defined in seastar::util::spinlock)seastar::util::spinlockinline
unlock() noexcept (defined in seastar::util::spinlock)seastar::util::spinlockinline
~spinlock() (defined in seastar::util::spinlock)seastar::util::spinlockinline
+ + + + diff --git a/master/classseastar_1_1util_1_1spinlock.html b/master/classseastar_1_1util_1_1spinlock.html new file mode 100644 index 000000000..0622c7fbc --- /dev/null +++ b/master/classseastar_1_1util_1_1spinlock.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: seastar::util::spinlock Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::util::spinlock Class Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

spinlock (const spinlock &)=delete
 
+bool try_lock () noexcept
 
+void lock () noexcept
 
+void unlock () noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1vector__data__sink-members.html b/master/classseastar_1_1vector__data__sink-members.html new file mode 100644 index 000000000..04fdfba94 --- /dev/null +++ b/master/classseastar_1_1vector__data__sink-members.html @@ -0,0 +1,94 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::vector_data_sink Member List
+
+
+ +

This is the complete list of members for seastar::vector_data_sink, including all inherited members.

+ + + + + + + + + + + + + +
allocate_buffer(size_t size) (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
buffer_size() const noexcept (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
can_batch_flushes() const noexcept (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
close() override (defined in seastar::vector_data_sink)seastar::vector_data_sinkinlinevirtual
flush() (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
on_batch_flush_error() noexcept (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
put(net::packet p) override (defined in seastar::vector_data_sink)seastar::vector_data_sinkinlinevirtual
put(std::vector< temporary_buffer< char > > data) (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
put(temporary_buffer< char > buf) (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
vector_data_sink(vector_type &v) (defined in seastar::vector_data_sink)seastar::vector_data_sinkinline
vector_type typedef (defined in seastar::vector_data_sink)seastar::vector_data_sink
~data_sink_impl() (defined in seastar::data_sink_impl)seastar::data_sink_implinlinevirtual
+ + + + diff --git a/master/classseastar_1_1vector__data__sink.html b/master/classseastar_1_1vector__data__sink.html new file mode 100644 index 000000000..1d982013e --- /dev/null +++ b/master/classseastar_1_1vector__data__sink.html @@ -0,0 +1,189 @@ + + + + + + + +Seastar: seastar::vector_data_sink Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::vector_data_sink Class Referencefinal
+
+
+
+Inheritance diagram for seastar::vector_data_sink:
+
+
+ + +seastar::data_sink_impl + +
+ + + + +

+Public Types

+using vector_type = std::vector< net::packet >
 
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

vector_data_sink (vector_type &v)
 
virtual future put (net::packet p) override
 
virtual future close () override
 
+virtual temporary_buffer< char > allocate_buffer (size_t size)
 
+virtual future put (std::vector< temporary_buffer< char > > data)
 
+virtual future put (temporary_buffer< char > buf)
 
+virtual future flush ()
 
+virtual size_t buffer_size () const noexcept
 
+virtual bool can_batch_flushes () const noexcept
 
+virtual void on_batch_flush_error () noexcept
 
+

Member Function Documentation

+ +

◆ close()

+ +
+
+ + + + + +
+ + + + + + + +
virtual future seastar::vector_data_sink::close ()
+
+inlineoverridevirtual
+
+ +

Implements seastar::data_sink_impl.

+ +
+
+ +

◆ put()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual future seastar::vector_data_sink::put (net::packet p)
+
+inlineoverridevirtual
+
+ +

Implements seastar::data_sink_impl.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1vector__data__sink.png b/master/classseastar_1_1vector__data__sink.png new file mode 100644 index 0000000000000000000000000000000000000000..21241502ecebb81d2e6272350cafe6187b107ff0 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^vw=8(gBeI#PWXNjNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~>3O<1hEy=VoqMtGwE~X|zwpZc|4(ku zRFDvg+H-4n_m*`=T#YL&6XxvMlzV&IiW@4Ko~*M~ev0NydUD++deRc>tBsAR2|Eh6 z$J!q>6HM;Y-Fqy!{PfvRG0isC-^ygqib?0bH`QhS^y{->z_I%qWaEU@J-?k&*|ypI z+hys=ks&Yb#KM*LrE4>o)qK8_y3sstQqF_fwo@nVwA=i2@7?;Jc}B%{@i+PylXpJ( zVtwNm?*?ys&#G;Ke(T$poLXEU+RKZtZAzUG z>^)DV*!RjxmA_4S@iqV3--ddhJ^0_?M>EjzmrmtODhb@+IVt|2nrEHu&2722uZbM^ z{*rOS3bC|mn`^DnGv0P?)46jhCvZ7KeBcJgAEG%7b*$12@dw!+gyZJccjzviA|}e2 z;0aZGo#nR8pBs_xZ1b!SYvp{ucByWkU*GoFVo(^}bv;)9zQ)yZ?X_g}d)2}NM zNnome`oZ~e?`A#a|LZ@O2+u$G`j__Xn|!D9d2+L&wk#W4 zE8>@@)_bRx9@l=q`fqgba^Fi{bLF + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::weak_ptr< T > Member List
+
+
+ +

This is the complete list of members for seastar::weak_ptr< T >, including all inherited members.

+ + + + + + + + + + + + + + +
get() const noexcept (defined in seastar::weak_ptr< T >)seastar::weak_ptr< T >inline
operator bool() const noexcept (defined in seastar::weak_ptr< T >)seastar::weak_ptr< T >inlineexplicit
operator!=(const weak_ptr &o) const noexcept (defined in seastar::weak_ptr< T >)seastar::weak_ptr< T >inline
operator*() const noexcept (defined in seastar::weak_ptr< T >)seastar::weak_ptr< T >inline
operator->() const noexcept (defined in seastar::weak_ptr< T >)seastar::weak_ptr< T >inline
operator=(weak_ptr &&o) noexcept (defined in seastar::weak_ptr< T >)seastar::weak_ptr< T >inline
operator=(const weak_ptr &o) noexcept (defined in seastar::weak_ptr< T >)seastar::weak_ptr< T >inline
operator==(const weak_ptr &o) const noexcept (defined in seastar::weak_ptr< T >)seastar::weak_ptr< T >inline
weak_ptr(weak_ptr< U > &&o) (defined in seastar::weak_ptr< T >)seastar::weak_ptr< T >inline
weak_ptr() noexcept (defined in seastar::weak_ptr< T >)seastar::weak_ptr< T >inline
weak_ptr(std::nullptr_t) noexcept (defined in seastar::weak_ptr< T >)seastar::weak_ptr< T >inline
weak_ptr(weak_ptr &&o) noexcept (defined in seastar::weak_ptr< T >)seastar::weak_ptr< T >inline
weak_ptr(const weak_ptr &o) noexcept (defined in seastar::weak_ptr< T >)seastar::weak_ptr< T >inline
+ + + + diff --git a/master/classseastar_1_1weak__ptr.html b/master/classseastar_1_1weak__ptr.html new file mode 100644 index 000000000..cd81cb155 --- /dev/null +++ b/master/classseastar_1_1weak__ptr.html @@ -0,0 +1,135 @@ + + + + + + + +Seastar: seastar::weak_ptr< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::weak_ptr< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename T>
+class seastar::weak_ptr< T >

A non-owning reference to an object.

+

weak_ptr allows one to keep a non-owning reference to an object. When the object is destroyed, it notifies all weak_ptr instances pointing to it. A weak_ptr instance pointing to a destroyed object is equivalent to a nullptr.

+

The referenced object must inherit from weakly_referencable. weak_ptr instances can only be obtained by calling weak_from_this() on the to-be-referenced object.

+
See also
weakly_referencable
+
+

#include <seastar/core/weak_ptr.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+template<typename U >
+requires std::convertible_to<U*, T*>
 weak_ptr (weak_ptr< U > &&o)
 
weak_ptr (std::nullptr_t) noexcept
 
weak_ptr (weak_ptr &&o) noexcept
 
weak_ptr (const weak_ptr &o) noexcept
 
+weak_ptroperator= (weak_ptr &&o) noexcept
 
+weak_ptroperator= (const weak_ptr &o) noexcept
 
operator bool () const noexcept
 
+T * operator-> () const noexcept
 
+T & operator* () const noexcept
 
+T * get () const noexcept
 
+bool operator== (const weak_ptr &o) const noexcept
 
+bool operator!= (const weak_ptr &o) const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1weakly__referencable-members.html b/master/classseastar_1_1weakly__referencable-members.html new file mode 100644 index 000000000..50d2b259d --- /dev/null +++ b/master/classseastar_1_1weakly__referencable-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::weakly_referencable< T > Member List
+
+
+ +

This is the complete list of members for seastar::weakly_referencable< T >, including all inherited members.

+ + + + + + + +
weak_from_this() noexcept (defined in seastar::weakly_referencable< T >)seastar::weakly_referencable< T >inline
weak_from_this() const noexcept (defined in seastar::weakly_referencable< T >)seastar::weakly_referencable< T >inline
weakly_referencable() noexcept (defined in seastar::weakly_referencable< T >)seastar::weakly_referencable< T >inline
weakly_referencable(weakly_referencable &&)=delete (defined in seastar::weakly_referencable< T >)seastar::weakly_referencable< T >
weakly_referencable(const weakly_referencable &)=delete (defined in seastar::weakly_referencable< T >)seastar::weakly_referencable< T >
~weakly_referencable() noexcept (defined in seastar::weakly_referencable< T >)seastar::weakly_referencable< T >inline
+ + + + diff --git a/master/classseastar_1_1weakly__referencable.html b/master/classseastar_1_1weakly__referencable.html new file mode 100644 index 000000000..c30966b28 --- /dev/null +++ b/master/classseastar_1_1weakly__referencable.html @@ -0,0 +1,112 @@ + + + + + + + +Seastar: seastar::weakly_referencable< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::weakly_referencable< T > Class Template Reference
+
+
+

Detailed Description

+
template<typename T>
+class seastar::weakly_referencable< T >

Allows obtaining a non-owning reference (weak_ptr) to the object.

+

A live weak_ptr object doesn't prevent the referenced object form being destroyed.

+

The underlying pointer held by weak_ptr is valid as long as the referenced object is alive. When the object dies, all weak_ptr objects associated with it are emptied.

+

A weak reference is obtained like this:

class X : public weakly_referencable<X> {};
+auto x = std::make_unique<X>();
+weak_ptr<X> ptr = x->weak_from_this();
+

The user of weak_ptr can check if it still holds a valid pointer like this:

if (ptr) ptr->do_something();
+
+

#include <seastar/core/weak_ptr.hh>

+ + + + + + + + + + +

+Public Member Functions

weakly_referencable (weakly_referencable &&)=delete
 
weakly_referencable (const weakly_referencable &)=delete
 
+weak_ptr< T > weak_from_this () noexcept
 
+weak_ptr< const T > weak_from_this () const noexcept
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classseastar_1_1writeable__eventfd-members.html b/master/classseastar_1_1writeable__eventfd-members.html new file mode 100644 index 000000000..013c9fef8 --- /dev/null +++ b/master/classseastar_1_1writeable__eventfd-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar::writeable_eventfd Member List
+
+
+ +

This is the complete list of members for seastar::writeable_eventfd, including all inherited members.

+ + + + + + +
get_read_fd() (defined in seastar::writeable_eventfd)seastar::writeable_eventfdinline
read_side() (defined in seastar::writeable_eventfd)seastar::writeable_eventfd
signal(size_t nr) (defined in seastar::writeable_eventfd)seastar::writeable_eventfd
writeable_eventfd(size_t initial=0) (defined in seastar::writeable_eventfd)seastar::writeable_eventfdinlineexplicit
writeable_eventfd(writeable_eventfd &&)=default (defined in seastar::writeable_eventfd)seastar::writeable_eventfd
+ + + + diff --git a/master/classseastar_1_1writeable__eventfd.html b/master/classseastar_1_1writeable__eventfd.html new file mode 100644 index 000000000..5f42a2667 --- /dev/null +++ b/master/classseastar_1_1writeable__eventfd.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: seastar::writeable_eventfd Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
seastar::writeable_eventfd Class Reference
+
+
+ + + + + + + + + + + + +

+Public Member Functions

writeable_eventfd (size_t initial=0)
 
writeable_eventfd (writeable_eventfd &&)=default
 
+readable_eventfd read_side ()
 
+void signal (size_t nr)
 
+int get_read_fd ()
 
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classstd_1_1coroutine__traits_3_01seastar_1_1future_3_01T_01_4_00_01Args_8_8_8_01_4.html b/master/classstd_1_1coroutine__traits_3_01seastar_1_1future_3_01T_01_4_00_01Args_8_8_8_01_4.html new file mode 100644 index 000000000..7fef26e91 --- /dev/null +++ b/master/classstd_1_1coroutine__traits_3_01seastar_1_1future_3_01T_01_4_00_01Args_8_8_8_01_4.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: std::coroutine_traits< seastar::future< T >, Args... > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
std::coroutine_traits< seastar::future< T >, Args... > Class Template Reference
+
+
+
+Inheritance diagram for std::coroutine_traits< seastar::future< T >, Args... >:
+
+
+ +
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/master/classstd_1_1coroutine__traits_3_01seastar_1_1future_3_01T_01_4_00_01Args_8_8_8_01_4.png b/master/classstd_1_1coroutine__traits_3_01seastar_1_1future_3_01T_01_4_00_01Args_8_8_8_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..cbffdb187809baa73017f852c61cf4865f7f1d94 GIT binary patch literal 1081 zcmeAS@N?(olHy`uVBq!ia0y~yU^D=-12~w0+_7srqa#{mjAr(yruE|RnG<_y9 z?a|GNTwA{qMz-`H$IKWIOB5EwI1y z{BXeUwcW?t!g#N*u)Jh`BmJfJmlgYNbT=3uIwk+fdD6NH-8H(~?X`aGp5G!puj`2f z-|U5ghqI<}CqCY_>tqb??p1MVH?&iuqc_d#dV8@-wtU9ym73p7?}7L71sXce>p1mvH{dmuq{`_rq0l?mauJd$X(V z$FwO+p8VH+Q<-x=Z|-%$Nng}vCQcGjX!Q(g5K;4F44R?B>H!mI-w@>G>7|*<-4K6L z+<|F>I~Vhf=dZPU8FMBdV)$11!z-C#_Y#8!ftB0}4qVI}6Am#j0l5sCJk;bKST7pp zrRk};^o=8<2Sb@hA_HTPghPV}n}9+qBa1}KT>ald@)N@k9{xVtqk;AHhvT-T(eIr4 zt9cWSTJQYCn8*N(bAJwF`SMx2yDPKHzk1!*{utB8zIS19SKCqVl=WB@7==t z<$mO&bF2MRZtQ8Qt6E(+^Ne)S-EA8uCvKj4n&Gv;QM_ + + + + + + +Seastar: seastar/http/client.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
client.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2022 Scylladb, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <boost/intrusive/list.hpp>
+
26#endif
+
27#include <seastar/net/api.hh>
+
28#include <seastar/http/reply.hh>
+
29#include <seastar/core/condition-variable.hh>
+
30#include <seastar/core/iostream.hh>
+
31#include <seastar/util/modules.hh>
+
32
+
33namespace bi = boost::intrusive;
+
34
+
35namespace seastar {
+
36
+
37SEASTAR_MODULE_EXPORT_BEGIN
+
38
+
39namespace tls { class certificate_credentials; }
+
40
+
41namespace http {
+
42
+
43namespace experimental { class client; }
+
44struct request;
+
45struct reply;
+
46
+
47namespace internal {
+
48
+ + +
51public:
+ + +
54 client_ref(client_ref&& o) noexcept : _c(std::exchange(o._c, nullptr)) {}
+
55 client_ref(const client_ref&) = delete;
+
56};
+
57
+
58}
+
59
+
60namespace experimental {
+
61
+
68class connection : public enable_shared_from_this<connection> {
+
69 friend class client;
+
70 using hook_t = bi::list_member_hook<bi::link_mode<bi::auto_unlink>>;
+
71 using reply_ptr = std::unique_ptr<reply>;
+
72
+ +
74 input_stream<char> _read_buf;
+
75 output_stream<char> _write_buf;
+
76 hook_t _hook;
+
77 future<> _closed;
+ +
79 // Client sends HTTP-1.1 version and assumes the server is 1.1-compatible
+
80 // too and thus the connection will be persistent by default. If the server
+
81 // responds with older version, this flag will be dropped (see recv_reply())
+
82 bool _persistent = true;
+
83
+
84public:
+ +
92
+ +
109
+ +
119
+ +
127
+
128private:
+
129 future<reply_ptr> do_make_request(request& rq);
+
130 void setup_request(request& rq);
+
131 future<> send_request_head(const request& rq);
+
132 future<reply_ptr> maybe_wait_for_continue(const request& req);
+
133 future<> write_body(const request& rq);
+
134 future<reply_ptr> recv_reply();
+
135};
+
136
+ +
146public:
+ +
154 virtual ~connection_factory() {}
+
155};
+
156
+
168class client {
+
169public:
+ + +
172
+
173private:
+
174 friend class http::internal::client_ref;
+
175 using connections_list_t = bi::list<connection, bi::member_hook<connection, typename connection::hook_t, &connection::_hook>, bi::constant_time_size<false>>;
+
176 static constexpr unsigned default_max_connections = 100;
+
177
+
178 std::unique_ptr<connection_factory> _new_connections;
+
179 unsigned _nr_connections = 0;
+
180 unsigned _max_connections;
+
181 unsigned long _total_new_connections = 0;
+
182 const retry_requests _retry;
+
183 condition_variable _wait_con;
+
184 connections_list_t _pool;
+
185
+ +
187
+
188 future<connection_ptr> get_connection();
+
189 future<connection_ptr> make_connection();
+
190 future<> put_connection(connection_ptr con);
+
191 future<> shrink_connections();
+
192
+
193 template <std::invocable<connection&> Fn>
+
194 auto with_connection(Fn&& fn);
+
195
+
196 template <typename Fn>
+
197 requires std::invocable<Fn, connection&>
+
198 auto with_new_connection(Fn&& fn);
+
199
+
200 future<> do_make_request(connection& con, request& req, reply_handler& handle, std::optional<reply::status_type> expected);
+
201
+
202public:
+
212 explicit client(socket_address addr);
+
213
+ +
226
+
265 explicit client(std::unique_ptr<connection_factory> f, unsigned max_connections = default_max_connections, retry_requests retry = retry_requests::no);
+
266
+
283 future<> make_request(request req, reply_handler handle, std::optional<reply::status_type> expected = std::nullopt);
+
284
+ +
294
+ +
301
+
306 unsigned connections_nr() const noexcept {
+
307 return _nr_connections;
+
308 }
+
309
+
314 unsigned idle_connections_nr() const noexcept {
+
315 return _pool.size();
+
316 }
+
317
+
325 unsigned long total_new_connections_nr() const noexcept {
+
326 return _total_new_connections;
+
327 }
+
328};
+
329
+
330} // experimental namespace
+
331
+
332} // http namespace
+
333
+
334SEASTAR_MODULE_EXPORT_END
+
335} // seastar namespace
+
Type-safe boolean.
Definition: bool_class.hh:58
+
Conditional variable.
Definition: condition-variable.hh:72
+
Definition: api.hh:183
+
Definition: shared_ptr.hh:499
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Class client wraps communications using HTTP protocol.
Definition: client.hh:168
+
client(std::unique_ptr< connection_factory > f, unsigned max_connections=default_max_connections, retry_requests retry=retry_requests::no)
Construct a client with connection factory.
+
unsigned idle_connections_nr() const noexcept
Returns the number of idle connections.
Definition: client.hh:314
+
future make_request(request req, reply_handler handle, std::optional< reply::status_type > expected=std::nullopt)
Send the request and handle the response.
+
unsigned long total_new_connections_nr() const noexcept
Returns the total number of connection factory invocations made so far.
Definition: client.hh:325
+
unsigned connections_nr() const noexcept
Returns the total number of connections.
Definition: client.hh:306
+
future close()
Closes the client.
+
future set_maximum_connections(unsigned nr)
Updates the maximum number of connections a client may have.
+
client(socket_address addr, shared_ptr< tls::certificate_credentials > creds, sstring host={})
Construct a secure client.
+
client(socket_address addr)
Construct a simple client.
+
Factory that provides transport for client.
Definition: client.hh:145
+
virtual future< connected_socket > make()=0
Make a connected_socket.
+
Class connection represents an HTTP connection over a given transport.
Definition: client.hh:68
+
input_stream< char > in(reply &rep)
Get a reference on the connection input stream.
+
future close()
Closes the connection.
+
connection(connected_socket &&fd, internal::client_ref cr)
Create an http connection.
+
future< reply > make_request(request rq)
Send the request and wait for response.
+
Definition: client.hh:49
+ + +
Definition: shared_ptr.hh:513
+
Definition: socket_defs.hh:47
+ +
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: noncopyable_function.hh:37
+
Definition: reply.hh:60
+
Definition: request.hh:51
+
+ + + + diff --git a/master/closeable_8hh.html b/master/closeable_8hh.html new file mode 100644 index 000000000..b1bd6afb5 --- /dev/null +++ b/master/closeable_8hh.html @@ -0,0 +1,116 @@ + + + + + + + +Seastar: seastar/util/closeable.hh File Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
closeable.hh File Reference
+
+
+
#include <concepts>
+#include <functional>
+#include <seastar/core/future.hh>
+#include <seastar/util/defer.hh>
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  seastar::deferred_close< Object >
 
class  seastar::deferred_stop< Object >
 
+ + + + +

+Namespaces

namespace  seastar
 Seastar API namespace.
 
+ + + + + + + +

+Functions

+template<closeable Closeable, std::invocable< Closeable & > Func>
+requires std::is_nothrow_move_constructible_v<Closeable> && std::is_nothrow_move_constructible_v<Func>
futurize_t< std::invoke_result_t< Func, Closeable & > > seastar::with_closeable (Closeable &&obj, Func func) noexcept
 
+template<stoppable Stoppable, std::invocable< Stoppable & > Func>
+requires std::is_nothrow_move_constructible_v<Stoppable> && std::is_nothrow_move_constructible_v<Func>
futurize_t< std::invoke_result_t< Func, Stoppable & > > seastar::with_stoppable (Stoppable &&obj, Func func) noexcept
 
+
+ + + + diff --git a/master/closeable_8hh_source.html b/master/closeable_8hh_source.html new file mode 100644 index 000000000..000613b3a --- /dev/null +++ b/master/closeable_8hh_source.html @@ -0,0 +1,230 @@ + + + + + + + +Seastar: seastar/util/closeable.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
closeable.hh
+
+
+Go to the documentation of this file.
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2021 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <concepts>
+
25#include <functional>
+
26#include <seastar/core/future.hh>
+
27#include <seastar/util/defer.hh>
+
28
+
30
+
32
+
33namespace seastar {
+
34
+
35template <typename Object>
+
36concept closeable = requires (Object o) {
+
37 { o.close() } SEASTAR_DEFERRED_ACTION_NOEXCEPT -> std::same_as<future<>>;
+
38};
+
39
+
47template <typename Object>
+
48requires closeable<Object>
+
49class [[nodiscard]] deferred_close {
+
50 std::reference_wrapper<Object> _obj;
+
51 bool _closed = false;
+
52
+
53 void do_close() noexcept {
+
54 if (!_closed) {
+
55 _closed = true;
+
56 _obj.get().close().get();
+
57 }
+
58 }
+
59public:
+
62 deferred_close(Object& obj) noexcept : _obj(obj) {}
+
65 deferred_close(deferred_close&& x) noexcept : _obj(x._obj), _closed(std::exchange(x._closed, true)) {}
+
66 deferred_close(const deferred_close&) = delete;
+ +
71 do_close();
+
72 _obj = x._obj;
+
73 _closed = std::exchange(x._closed, true);
+
74 return *this;
+
75 }
+ +
78 do_close();
+
79 }
+
81 void close_now() noexcept {
+
82 assert(!_closed);
+
83 do_close();
+
84 }
+
85
+
88 void cancel() noexcept {
+
89 _closed = true;
+
90 }
+
91};
+
92
+
93template <closeable Closeable, std::invocable<Closeable&> Func>
+
94requires std::is_nothrow_move_constructible_v<Closeable> && std::is_nothrow_move_constructible_v<Func>
+
95inline futurize_t<std::invoke_result_t<Func, Closeable&>>
+
96with_closeable(Closeable&& obj, Func func) noexcept {
+
97 return do_with(std::move(obj), [func = std::move(func)] (Closeable& obj) mutable {
+
98 return futurize_invoke(func, obj).finally([&obj] {
+
99 return obj.close();
+
100 });
+
101 });
+
102}
+
103
+
104template <typename Object>
+
105concept stoppable = requires (Object o) {
+
106 { o.stop() } SEASTAR_DEFERRED_ACTION_NOEXCEPT -> std::same_as<future<>>;
+
107};
+
108
+
116template <typename Object>
+
117requires stoppable<Object>
+
118class [[nodiscard]] deferred_stop {
+
119 std::reference_wrapper<Object> _obj;
+
120 bool _stopped = false;
+
121
+
122 void do_stop() noexcept {
+
123 if (!_stopped) {
+
124 _stopped = true;
+
125 _obj.get().stop().get();
+
126 }
+
127 }
+
128public:
+
131 deferred_stop(Object& obj) noexcept : _obj(obj) {}
+
134 deferred_stop(deferred_stop&& x) noexcept : _obj(x._obj), _stopped(std::exchange(x._stopped, true)) {}
+
135 deferred_stop(const deferred_stop&) = delete;
+ +
140 do_stop();
+
141 _obj = x._obj;
+
142 _stopped = std::exchange(x._stopped, true);
+
143 return *this;
+
144 }
+ +
147 do_stop();
+
148 }
+
150 void stop_now() noexcept {
+
151 assert(!_stopped);
+
152 do_stop();
+
153 }
+
154
+
157 void cancel() noexcept {
+
158 _stopped = true;
+
159 }
+
160};
+
161
+
162template <stoppable Stoppable, std::invocable<Stoppable&> Func>
+
163requires std::is_nothrow_move_constructible_v<Stoppable> && std::is_nothrow_move_constructible_v<Func>
+
164inline futurize_t<std::invoke_result_t<Func, Stoppable&>>
+
165with_stoppable(Stoppable&& obj, Func func) noexcept {
+
166 return do_with(std::move(obj), [func = std::move(func)] (Stoppable& obj) mutable {
+
167 return futurize_invoke(func, obj).finally([&obj] {
+
168 return obj.stop();
+
169 });
+
170 });
+
171}
+
172
+
173} // namespace seastar
+
Definition: closeable.hh:49
+
void close_now() noexcept
Close obj once now.
Definition: closeable.hh:81
+
deferred_close & operator=(deferred_close &&x) noexcept
Definition: closeable.hh:70
+
void cancel() noexcept
Definition: closeable.hh:88
+
deferred_close(deferred_close &&x) noexcept
Definition: closeable.hh:65
+
~deferred_close()
Destruct the deferred_close object and auto-close obj.
Definition: closeable.hh:77
+
deferred_close(Object &obj) noexcept
Definition: closeable.hh:62
+
Definition: closeable.hh:118
+
deferred_stop(Object &obj) noexcept
Definition: closeable.hh:131
+
void stop_now() noexcept
Stop obj once now.
Definition: closeable.hh:150
+
deferred_stop(deferred_stop &&x) noexcept
Definition: closeable.hh:134
+
~deferred_stop()
Destruct the deferred_stop object and auto-stop obj.
Definition: closeable.hh:146
+
void cancel() noexcept
Definition: closeable.hh:157
+
deferred_stop & operator=(deferred_stop &&x) noexcept
Definition: closeable.hh:139
+
auto do_with(T1 &&rv1, T2 &&rv2, More &&... more) noexcept
Definition: do_with.hh:135
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/closeable_test_8cc-example.html b/master/closeable_test_8cc-example.html new file mode 100644 index 000000000..0f0a96c64 --- /dev/null +++ b/master/closeable_test_8cc-example.html @@ -0,0 +1,493 @@ + + + + + + + +Seastar: closeable_test.cc + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
closeable_test.cc
+
+
+
/*
+
* This file is open source software, licensed to you under the terms
+
* of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
* distributed with this work for additional information regarding copyright
+
* ownership. 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.
+
*/
+
/*
+
* Copyright 2021 ScyllaDB
+
*/
+
+
#include <exception>
+
+
#include <boost/range/irange.hpp>
+
+
#include <seastar/testing/test_case.hh>
+
#include <seastar/testing/thread_test_case.hh>
+
+
#include <seastar/core/gate.hh>
+ +
#include <seastar/core/loop.hh>
+
+
using namespace seastar;
+
+
class expected_exception : public std::runtime_error {
+
public:
+
expected_exception() : runtime_error("expected") {}
+
};
+
+
SEASTAR_TEST_CASE(deferred_close_test) {
+
return do_with(gate(), 0, 42, [] (gate& g, int& count, int& expected) {
+
return async([&] {
+
auto close_gate = deferred_close(g);
+
+
for (auto i = 0; i < expected; i++) {
+
(void)with_gate(g, [&count] {
+
++count;
+
});
+
}
+
}).then([&] {
+
// destroying close_gate should invoke g.close()
+
// and wait for all background continuations to complete
+
BOOST_REQUIRE(g.is_closed());
+
BOOST_REQUIRE_EQUAL(count, expected);
+
});
+
});
+
}
+
+
SEASTAR_TEST_CASE(move_deferred_close_test) {
+
return do_with(gate(), [] (gate& g) {
+
return async([&] {
+
auto close_gate = make_shared(deferred_close(g));
+
// g.close() should not be called when deferred_close is moved away
+
BOOST_REQUIRE(!g.is_closed());
+
}).then([&] {
+
// Before this test is exercised, gate::close() would run into a
+
// assert failure when leaving previous continuation, if gate::close()
+
// is called twice, so this test only verifies the behavior with the
+
// release build.
+
BOOST_REQUIRE(g.is_closed());
+
});
+
});
+
}
+
+
SEASTAR_TEST_CASE(close_now_test) {
+
return do_with(gate(), 0, 42, [] (gate& g, int& count, int& expected) {
+
return async([&] {
+
auto close_gate = deferred_close(g);
+
+
for (auto i = 0; i < expected; i++) {
+
(void)with_gate(g, [&count] {
+
++count;
+
});
+
}
+
+
close_gate.close_now();
+
BOOST_REQUIRE(g.is_closed());
+
BOOST_REQUIRE_EQUAL(count, expected);
+
// gate must not be double-closed.
+
});
+
});
+
}
+
+
SEASTAR_TEST_CASE(cancel_deferred_close_test) {
+
gate g;
+
{
+
auto close_gate = deferred_close(g);
+
close_gate.cancel();
+
}
+
g.check(); // should not throw
+
return make_ready_future<>();
+
}
+
+
SEASTAR_TEST_CASE(with_closeable_test) {
+
return do_with(0, 42, [] (int& count, int& expected) {
+
return with_closeable(gate(), [&] (gate& g) {
+
for (auto i = 0; i < expected; i++) {
+
(void)with_gate(g, [&count] {
+
++count;
+
});
+
}
+
return 17;
+
}).then([&] (int res) {
+
// res should be returned by the function called
+
// by with_closeable.
+
BOOST_REQUIRE_EQUAL(res, 17);
+
// closing the gate should wait for
+
// all background continuations to complete
+
BOOST_REQUIRE_EQUAL(count, expected);
+
});
+
});
+
}
+
+
SEASTAR_TEST_CASE(with_closeable_exception_test) {
+
return do_with(0, 42, [] (int& count, int& expected) {
+
return with_closeable(gate(), [&] (gate& g) {
+
for (auto i = 0; i < expected; i++) {
+
(void)with_gate(g, [&count] {
+
++count;
+
});
+
}
+
throw expected_exception();
+
}).handle_exception_type([&] (const expected_exception&) {
+
// closing the gate should also happen when func throws,
+
// waiting for all background continuations to complete
+
BOOST_REQUIRE_EQUAL(count, expected);
+
});
+
});
+
}
+
+
namespace {
+
+
class count_stops {
+
int _count = -1;
+
int* _ptr = nullptr;
+
public:
+
count_stops(int* ptr = nullptr) noexcept
+
: _ptr(ptr ? ptr : &_count)
+
{
+
*_ptr = 0;
+
}
+
+
count_stops(count_stops&& o) noexcept {
+
std::exchange(_count, o._count);
+
if (o._ptr == &o._count) {
+
_ptr = &_count;
+
} else {
+
std::exchange(_ptr, o._ptr);
+
}
+
}
+
+
future<> stop() noexcept {
+
++*_ptr;
+
return make_ready_future<>();
+
}
+
+
int stopped() const noexcept {
+
return *_ptr;
+
}
+
};
+
+
} // anonymous namespace
+
+
SEASTAR_TEST_CASE(cancel_deferred_stop_test) {
+
count_stops cs;
+
{
+
auto stop = deferred_stop(cs);
+
stop.cancel();
+
}
+
BOOST_REQUIRE_EQUAL(cs.stopped(), 0);
+
return make_ready_future<>();
+
}
+
+
SEASTAR_TEST_CASE(deferred_stop_test) {
+
return do_with(count_stops(), [] (count_stops& cs) {
+
return async([&] {
+
auto stop_counting = deferred_stop(cs);
+
}).then([&] {
+
// cs.stop() should be called when stop_counting is destroyed
+
BOOST_REQUIRE_EQUAL(cs.stopped(), 1);
+
});
+
});
+
}
+
+
SEASTAR_TEST_CASE(move_deferred_stop_test) {
+
return do_with(count_stops(), [] (count_stops& cs) {
+
return async([&] {
+
auto stop = make_shared(deferred_stop(cs));
+
}).then([&] {
+
// cs.stop() should be called once and only once
+
// when stop is destroyed
+
BOOST_REQUIRE_EQUAL(cs.stopped(), 1);
+
});
+
});
+
}
+
+
SEASTAR_TEST_CASE(stop_now_test) {
+
return do_with(count_stops(), [] (count_stops& cs) {
+
return async([&] {
+
auto stop_counting = deferred_stop(cs);
+
+
stop_counting.stop_now();
+
// cs.stop() should not be called again
+
// when stop_counting is destroyed
+
BOOST_REQUIRE_EQUAL(cs.stopped(), 1);
+
}).then([&] {
+
// cs.stop() should be called exactly once
+
BOOST_REQUIRE_EQUAL(cs.stopped(), 1);
+
});
+
});
+
}
+
+
SEASTAR_TEST_CASE(with_stoppable_test) {
+
return do_with(0, [] (int& stopped) {
+
return with_stoppable(count_stops(&stopped), [] (count_stops& cs) {
+
return 17;
+
}).then([&] (int res) {
+
// res should be returned by the function called
+
// by with_closeable.
+
BOOST_REQUIRE_EQUAL(res, 17);
+
// cs.stop() should be called before count_stops is destroyed
+
BOOST_REQUIRE_EQUAL(stopped, 1);
+
});
+
});
+
}
+
+
SEASTAR_TEST_CASE(with_stoppable_exception_test) {
+
return do_with(0, [] (int& stopped) {
+
return with_stoppable(count_stops(&stopped), [] (count_stops& cs) {
+
throw expected_exception();
+
}).handle_exception_type([&] (const expected_exception&) {
+
// cs.stop() should be called before count_stops is destroyed
+
// also when func throws
+
BOOST_REQUIRE_EQUAL(stopped, 1);
+
});
+
});
+
}
+
+
SEASTAR_THREAD_TEST_CASE(move_open_gate_test) {
+
gate g1;
+
g1.enter();
+
// move an open gate
+
gate g2 = std::move(g1);
+
// the state in g1 should be moved into g2
+
BOOST_CHECK_EQUAL(g1.get_count(), 0);
+
BOOST_REQUIRE_EQUAL(g2.get_count(), 1);
+
g2.leave();
+
g2.close().get();
+
BOOST_CHECK(!g1.is_closed());
+
BOOST_CHECK(g2.is_closed());
+
}
+
+
SEASTAR_THREAD_TEST_CASE(move_closing_gate_test) {
+
gate g1;
+
g1.enter();
+
auto fut = g1.close();
+
// move a closing gate
+
gate g2 = std::move(g1);
+
BOOST_CHECK_EQUAL(g1.get_count(), 0);
+
BOOST_REQUIRE_EQUAL(g2.get_count(), 1);
+
g2.leave();
+
fut.get();
+
BOOST_CHECK(!g1.is_closed());
+
BOOST_CHECK(g2.is_closed());
+
}
+
+
SEASTAR_THREAD_TEST_CASE(move_closed_gate_test) {
+
gate g1;
+
g1.close().get();
+
// move a closed gate
+
gate g2 = std::move(g1);
+
BOOST_CHECK_EQUAL(g1.get_count(), 0);
+
BOOST_CHECK_EQUAL(g2.get_count(), 0);
+
BOOST_CHECK(!g1.is_closed());
+
BOOST_CHECK(g2.is_closed());
+
}
+
+
SEASTAR_THREAD_TEST_CASE(gate_holder_basic_test) {
+
gate g;
+
auto gh = g.hold();
+
auto fut = g.close();
+
BOOST_CHECK(!fut.available());
+
gh.release();
+
fut.get();
+
}
+
+
SEASTAR_THREAD_TEST_CASE(gate_holder_closed_test) {
+
gate g;
+
g.close().get();
+
BOOST_REQUIRE_THROW(g.hold(), gate_closed_exception);
+
}
+
+
SEASTAR_THREAD_TEST_CASE(gate_holder_move_test) {
+
gate g;
+
auto gh0 = g.hold();
+
auto fut = g.close();
+
BOOST_CHECK(!fut.available());
+
auto gh1 = std::move(gh0);
+
BOOST_CHECK(!fut.available());
+
gh1.release();
+
fut.get();
+
}
+
+
SEASTAR_THREAD_TEST_CASE(gate_holder_copy_test) {
+
gate g;
+
auto gh0 = g.hold();
+
auto gh1 = gh0;
+
auto fut = g.close();
+
BOOST_CHECK(!fut.available());
+
gh0.release();
+
BOOST_CHECK(!fut.available());
+
gh1.release();
+
fut.get();
+
}
+
+
SEASTAR_THREAD_TEST_CASE(gate_holder_copy_and_move_test) {
+
gate g0;
+
auto gh00 = g0.hold();
+
auto gh01 = gh00;
+
auto fut0 = g0.close();
+
BOOST_CHECK(!fut0.available());
+
gate g1;
+
auto gh1 = g1.hold();
+
auto fut1 = g1.close();
+
BOOST_CHECK(!fut1.available());
+
gh01.release();
+
BOOST_CHECK(!fut0.available());
+
BOOST_CHECK(!fut1.available());
+
gh00 = std::move(gh1);
+
fut0.get();
+
BOOST_CHECK(!fut1.available());
+
gh00.release();
+
fut1.get();
+
}
+
+
SEASTAR_THREAD_TEST_CASE(gate_holder_copy_after_close_test) {
+
gate g;
+
auto gh0 = g.hold();
+
auto fut = g.close();
+
BOOST_CHECK(g.is_closed());
+
gate::holder gh1 = gh0;
+
BOOST_CHECK(!fut.available());
+
gh0.release();
+
BOOST_CHECK(!fut.available());
+
gh1.release();
+
fut.get();
+
}
+
+
SEASTAR_TEST_CASE(gate_holder_parallel_copy_test) {
+
constexpr int expected = 42;
+
return do_with(0, [expected] (int& count) {
+
return with_closeable(gate(), [&] (gate& g) {
+
auto gh = g.hold();
+
// Copying the gate::holder in the lambda below should keep it open
+
// until all instances complete
+
(void)parallel_for_each(boost::irange(0, expected), [&count, gh = gh] (int) {
+
count++;
+
return make_ready_future<>();
+
});
+
return 17;
+
}).then([&, expected] (int res) {
+
// res should be returned by the function called
+
// by with_closeable.
+
BOOST_REQUIRE_EQUAL(res, 17);
+
// closing the gate should wait for
+
// all background continuations to complete
+
BOOST_REQUIRE_EQUAL(count, expected);
+
});
+
});
+
}
+
+
SEASTAR_THREAD_TEST_CASE(gate_holder_try_close_test) {
+
gate g;
+
auto gh0 = g.try_hold();
+
BOOST_CHECK(gh0.has_value());
+
auto fut = g.close();
+
BOOST_CHECK(g.is_closed());
+
auto failed_gh = g.try_hold();
+
BOOST_CHECK(!failed_gh.has_value());
+
auto gh1 = std::move(gh0);
+
BOOST_CHECK(!fut.available());
+
gh0.reset();
+
BOOST_CHECK(!fut.available());
+
gh1.reset();
+
fut.get();
+
}
+
Definition: closeable.hh:49
+
Definition: closeable.hh:118
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
value_type && get()
gets the value returned by the computation
Definition: future.hh:1342
+
Definition: gate.hh:171
+
void release() noexcept
Leave the held gate.
Definition: gate.hh:270
+
Definition: gate.hh:48
+
Definition: gate.hh:61
+
bool is_closed() const noexcept
Returns whether the gate is closed.
Definition: gate.hh:158
+
future close() noexcept
Definition: gate.hh:143
+
size_t get_count() const noexcept
Returns a current number of registered in-progress requests.
Definition: gate.hh:153
+
void check()
Definition: gate.hh:133
+
std::optional< holder > try_hold() noexcept
Definition: gate.hh:286
+
holder hold()
Definition: gate.hh:279
+
void enter()
Definition: gate.hh:109
+
void leave() noexcept
Definition: gate.hh:118
+ +
auto with_gate(gate &g, Func &&func)
Definition: gate.hh:333
+
auto do_with(T1 &&rv1, T2 &&rv2, More &&... more) noexcept
Definition: do_with.hh:135
+
future parallel_for_each(Iterator begin, Sentinel end, Func &&func) noexcept
Run tasks in parallel (iterator version).
Definition: loop.hh:565
+
futurize_t< std::invoke_result_t< Func, Args... > > async(thread_attributes attr, Func &&func, Args &&... args) noexcept
Definition: thread.hh:245
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/closed.png b/master/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/master/common_8hh_source.html b/master/common_8hh_source.html new file mode 100644 index 000000000..a3aa2f81f --- /dev/null +++ b/master/common_8hh_source.html @@ -0,0 +1,186 @@ + + + + + + + +Seastar: seastar/http/common.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
common.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2015 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <unordered_map>
+
26#endif
+
27
+
28#include <seastar/core/sstring.hh>
+
29#include <seastar/core/iostream.hh>
+
30#include <seastar/http/url.hh>
+
31
+
32namespace seastar {
+
33
+
34namespace http {
+
35namespace internal {
+
36output_stream<char> make_http_chunked_output_stream(output_stream<char>& out);
+
37// @param total_len defines the maximum number of bytes to be written.
+
38// @param bytes_written after the stream is closed, it is updated with the
+
39// actual number of bytes written.
+
40output_stream<char> make_http_content_length_output_stream(output_stream<char>& out, size_t total_len, size_t& bytes_written);
+
41} // internal namespace
+
42} // http namespace
+
43
+
44namespace httpd {
+
45
+
46SEASTAR_MODULE_EXPORT_BEGIN
+
47
+ +
49 // Note: the path matcher adds parameters with the '/' prefix into the params map (eg. "/param1"), and some getters
+
50 // remove this '/' to return just the path parameter value
+
51 std::unordered_map<sstring, sstring> params;
+
52public:
+
53 const sstring& path(const sstring& key) const {
+
54 return params.at(key);
+
55 }
+
56
+
57 [[deprecated("Use request::get_path_param() instead.")]]
+
58 sstring operator[](const sstring& key) const {
+
59 return params.at(key).substr(1);
+
60 }
+
61
+
62 const sstring& at(const sstring& key) const {
+
63 return path(key);
+
64 }
+
65
+
66 sstring get_decoded_param(const sstring& key) const {
+
67 auto res = params.find(key);
+
68 if (res == params.end()) {
+
69 return "";
+
70 }
+
71 auto raw_path_param = res->second.substr(1);
+
72 auto decoded_path_param = sstring{};
+
73 auto ok = seastar::http::internal::path_decode(raw_path_param, decoded_path_param);
+
74 if (!ok) {
+
75 return "";
+
76 }
+
77 return decoded_path_param;
+
78 }
+
79
+
80 bool exists(const sstring& key) const {
+
81 return params.find(key) != params.end();
+
82 }
+
83
+
84 void set(const sstring& key, const sstring& value) {
+
85 params[key] = value;
+
86 }
+
87
+
88 void clear() {
+
89 params.clear();
+
90 }
+
91
+
92};
+
93
+
94enum operation_type {
+
95 GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE, CONNECT, PATCH, NUM_OPERATION
+
96};
+
97
+
103operation_type str2type(const sstring& type);
+
104
+
110sstring type2str(operation_type type);
+
111
+
112}
+
113
+
114SEASTAR_MODULE_EXPORT_END
+
115}
+
Definition: common.hh:48
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/concepts_8hh_source.html b/master/concepts_8hh_source.html new file mode 100644 index 000000000..b6f4024e8 --- /dev/null +++ b/master/concepts_8hh_source.html @@ -0,0 +1,113 @@ + + + + + + + +Seastar: seastar/util/concepts.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
concepts.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2020 ScyllaDB
+
20 */
+
21#pragma once
+
22
+
23#include <concepts>
+
24
+
25#if defined(__cpp_concepts) && __cpp_concepts >= 201907 && \
+
26 defined(__cpp_lib_concepts) && __cpp_lib_concepts >= 201907
+
27 // good
+
28#else
+
29#error the language support and/or library support for concepts is missing
+
30#endif
+
31
+
32// provided for backward compatibility
+
33#define SEASTAR_CONCEPT(x...) x
+
34#define SEASTAR_NO_CONCEPT(x...)
+
+ + + + diff --git a/master/condition-variable_8hh_source.html b/master/condition-variable_8hh_source.html new file mode 100644 index 000000000..a0e9aa9a8 --- /dev/null +++ b/master/condition-variable_8hh_source.html @@ -0,0 +1,387 @@ + + + + + + + +Seastar: seastar/core/condition-variable.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
condition-variable.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2016 ScyllaDB, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <boost/intrusive/list.hpp>
+
26#include <chrono>
+
27#include <exception>
+
28#include <functional>
+
29#endif
+
30
+
31#include <seastar/core/coroutine.hh>
+
32#include <seastar/core/timer.hh>
+
33#include <seastar/core/loop.hh>
+
34#include <seastar/util/modules.hh>
+
35
+
36namespace seastar {
+
37
+
38SEASTAR_MODULE_EXPORT_BEGIN
+
39
+
42
+
45class broken_condition_variable : public std::exception {
+
46public:
+
48 virtual const char* what() const noexcept;
+
49};
+
50
+
53class condition_variable_timed_out : public std::exception {
+
54public:
+
56 virtual const char* what() const noexcept;
+
57};
+
58
+
71
+ +
73private:
+
74 // the base for queue waiters. looks complicated, but this is
+
75 // to make it transparent once we add non-promise based nodes
+
76 struct waiter : public boost::intrusive::list_base_hook<boost::intrusive::link_mode<boost::intrusive::auto_unlink>> {
+
77 waiter() = default;
+
78 waiter(waiter&&) = default;
+
79 waiter(const waiter&) = delete;
+
80 waiter& operator=(const waiter&) = delete;
+
81 virtual ~waiter() = default;
+
82 void timeout() noexcept;
+
83
+
84 virtual void signal() noexcept = 0;
+
85 virtual void set_exception(std::exception_ptr) noexcept = 0;
+
86 };
+
87
+
88 struct promise_waiter : public waiter, public promise<> {
+
89 void signal() noexcept override {
+
90 set_value();
+
91 // note: we self-delete in either case we are woken
+
92 // up. See usage below: only the resulting future
+
93 // state is required once we've left the wait queue
+
94 delete this;
+
95 }
+
96 void set_exception(std::exception_ptr ep) noexcept override {
+
97 promise<>::set_exception(std::move(ep));
+
98 // see comment above
+
99 delete this;
+
100 }
+
101 };
+
102
+
103 struct [[nodiscard("must co_await a when() call")]] awaiter : public waiter {
+ +
105 promise<> _p;
+
106
+
107 awaiter(condition_variable* cv)
+
108 : _cv(cv)
+
109 {}
+
110
+
111 void signal() noexcept override {
+
112 _p.set_value();
+
113 }
+
114 void set_exception(std::exception_ptr ep) noexcept override {
+
115 _p.set_exception(std::move(ep));
+
116 }
+
117 auto operator co_await() {
+
118 if (_cv->check_and_consume_signal()) {
+
119 return ::seastar::internal::awaiter<false, void>(make_ready_future<>());
+
120 }
+
121 _cv->add_waiter(*this);
+
122 return ::seastar::internal::awaiter<false, void>(_p.get_future());
+
123 }
+
124 };
+
125
+
126 template<typename Clock, typename Duration>
+
127 struct [[nodiscard("must co_await a when() call")]] timeout_awaiter : public awaiter, public timer<Clock> {
+
128 using my_type = timeout_awaiter<Clock, Duration>;
+
129 using time_point = std::chrono::time_point<Clock, Duration>;
+
130
+
131 time_point _timeout;
+
132
+
133 timeout_awaiter(condition_variable* cv, time_point timeout)
+
134 : awaiter(cv)
+
135 , _timeout(timeout)
+
136 {}
+
137 void signal() noexcept override {
+
138 this->cancel();
+
139 awaiter::signal();
+
140 }
+
141 void set_exception(std::exception_ptr ep) noexcept override {
+
142 this->cancel();
+
143 awaiter::set_exception(std::move(ep));
+
144 }
+
145 auto operator co_await() {
+
146 if (_cv->check_and_consume_signal()) {
+
147 return ::seastar::internal::awaiter<false, void>(make_ready_future<>());
+
148 }
+
149 this->set_callback(std::bind(&waiter::timeout, this));
+
150 this->arm(_timeout);
+
151 return awaiter::operator co_await();
+
152 }
+
153 };
+
154
+
155 template<typename Func, typename Base>
+
156 struct [[nodiscard("must co_await a when() call")]] predicate_awaiter : public Base {
+
157 Func _func;
+
158 template<typename... Args>
+
159 predicate_awaiter(Func func, Args&& ...args)
+
160 : Base(std::forward<Args>(args)...)
+
161 , _func(std::move(func))
+
162 {}
+
163 void signal() noexcept override {
+
164 if (_func()) {
+
165 Base::signal();
+
166 } else {
+
167 // must re-enter waiter queue
+
168 // this maintains "wait" version
+
169 // semantics of moving to back of queue
+
170 // if predicate fails
+
171 Base::_cv->add_waiter(*this);
+
172 }
+
173 }
+
174 auto operator co_await() {
+
175 if (_func()) {
+
176 return ::seastar::internal::awaiter<false, void>(make_ready_future<>());
+
177 } else {
+
178 Base::_cv->check_and_consume_signal(); // clear out any signal state
+
179 return Base::operator co_await();
+
180 }
+
181 }
+
182 };
+
183
+
184 boost::intrusive::list<waiter, boost::intrusive::constant_time_size<false>> _waiters;
+
185 std::exception_ptr _ex; //"broken" exception
+
186 bool _signalled = false; // set to true if signalled while no waiters
+
187
+
188 void add_waiter(waiter&) noexcept;
+
189 void timeout(waiter&) noexcept;
+
190 bool wakeup_first() noexcept;
+
191 bool check_and_consume_signal() noexcept;
+
192public:
+
196 condition_variable() noexcept = default;
+
197 condition_variable(condition_variable&& rhs) noexcept = default;
+ +
199
+
205 future<> wait() noexcept {
+
206 if (check_and_consume_signal()) {
+
207 return make_ready_future();
+
208 }
+
209 auto* w = new promise_waiter;
+
210 auto f = w->get_future();
+
211 add_waiter(*w);
+
212 return f;
+
213 }
+
214
+
222 template<typename Clock = typename timer<>::clock, typename Duration = typename Clock::duration>
+
223 future<> wait(std::chrono::time_point<Clock, Duration> timeout) noexcept {
+
224 if (check_and_consume_signal()) {
+
225 return make_ready_future();
+
226 }
+
227 struct timeout_waiter : public promise_waiter, public timer<Clock> {};
+
228
+
229 auto w = std::make_unique<timeout_waiter>();
+
230 auto f = w->get_future();
+
231
+
232 w->set_callback(std::bind(&waiter::timeout, w.get()));
+
233 w->arm(timeout);
+
234 add_waiter(*w.release());
+
235 return f;
+
236 }
+
237
+
245 template<typename Rep, typename Period>
+
246 future<> wait(std::chrono::duration<Rep, Period> timeout) noexcept {
+
247 return wait(timer<>::clock::now() + timeout);
+
248 }
+
249
+
257 template<typename Pred>
+
258 requires std::is_invocable_r_v<bool, Pred>
+
259 future<> wait(Pred&& pred) noexcept {
+
260 return do_until(std::forward<Pred>(pred), [this] {
+
261 return wait();
+
262 });
+
263 }
+
264
+
274 template<typename Clock = typename timer<>::clock, typename Duration = typename Clock::duration, typename Pred>
+
275 requires std::is_invocable_r_v<bool, Pred>
+
276 future<> wait(std::chrono::time_point<Clock, Duration> timeout, Pred&& pred) noexcept {
+
277 return do_until(std::forward<Pred>(pred), [this, timeout] {
+
278 return wait(timeout);
+
279 });
+
280 }
+
281
+
291 template<typename Rep, typename Period, typename Pred>
+
292 requires std::is_invocable_r_v<bool, Pred>
+
293 future<> wait(std::chrono::duration<Rep, Period> timeout, Pred&& pred) noexcept {
+
294 return wait(timer<>::clock::now() + timeout, std::forward<Pred>(pred));
+
295 }
+
296
+
303 awaiter when() noexcept {
+
304 return awaiter{this};
+
305 }
+
306
+
315 template<typename Clock = typename timer<>::clock, typename Duration = typename Clock::duration>
+
316 timeout_awaiter<Clock, Duration> when(std::chrono::time_point<Clock, Duration> timeout) noexcept {
+
317 return timeout_awaiter<Clock, Duration>{this, timeout};
+
318 }
+
319
+
328 template<typename Rep, typename Period>
+
329 auto when(std::chrono::duration<Rep, Period> timeout) noexcept {
+
330 return when(timer<>::clock::now() + timeout);
+
331 }
+
332
+
341 template<typename Pred>
+
342 requires std::is_invocable_r_v<bool, Pred>
+
343 auto when(Pred&& pred) noexcept {
+
344 return predicate_awaiter<Pred, awaiter>{std::forward<Pred>(pred), when()};
+
345 }
+
346
+
357 template<typename Clock = typename timer<>::clock, typename Duration = typename Clock::duration, typename Pred>
+
358 requires std::is_invocable_r_v<bool, Pred>
+
359 auto when(std::chrono::time_point<Clock, Duration> timeout, Pred&& pred) noexcept {
+
360 return predicate_awaiter<Pred, timeout_awaiter<Clock, Duration>>{std::forward<Pred>(pred), when(timeout)};
+
361 }
+
362
+
373 template<typename Rep, typename Period, typename Pred>
+
374 requires std::is_invocable_r_v<bool, Pred>
+
375 auto when(std::chrono::duration<Rep, Period> timeout, Pred&& pred) noexcept {
+
376 return when(timer<>::clock::now() + timeout, std::forward<Pred>(pred));
+
377 }
+
378
+
381 bool has_waiters() const noexcept {
+
382 return !_waiters.empty();
+
383 }
+
384
+
386 void signal() noexcept;
+
387
+
389 void broadcast() noexcept;
+
390
+
394 void broken() noexcept;
+
395
+
396 void broken(std::exception_ptr) noexcept;
+
397};
+
398
+
400
+
401SEASTAR_MODULE_EXPORT_END
+
402
+
403}
+
Definition: condition-variable.hh:45
+
virtual const char * what() const noexcept
Reports the exception reason.
+
Definition: condition-variable.hh:53
+
virtual const char * what() const noexcept
Reports the exception reason.
+
Conditional variable.
Definition: condition-variable.hh:72
+
timeout_awaiter< Clock, Duration > when(std::chrono::time_point< Clock, Duration > timeout) noexcept
Definition: condition-variable.hh:316
+
auto when(std::chrono::duration< Rep, Period > timeout, Pred &&pred) noexcept
Definition: condition-variable.hh:375
+
future wait(Pred &&pred) noexcept
Definition: condition-variable.hh:259
+
bool has_waiters() const noexcept
Definition: condition-variable.hh:381
+
awaiter when() noexcept
Definition: condition-variable.hh:303
+
future wait(std::chrono::time_point< Clock, Duration > timeout) noexcept
Definition: condition-variable.hh:223
+
auto when(Pred &&pred) noexcept
Definition: condition-variable.hh:343
+
void signal() noexcept
Notify variable and wake up a waiter if there is one.
+
auto when(std::chrono::duration< Rep, Period > timeout) noexcept
Definition: condition-variable.hh:329
+
future wait(std::chrono::duration< Rep, Period > timeout, Pred &&pred) noexcept
Definition: condition-variable.hh:293
+
auto when(std::chrono::time_point< Clock, Duration > timeout, Pred &&pred) noexcept
Definition: condition-variable.hh:359
+
future wait(std::chrono::time_point< Clock, Duration > timeout, Pred &&pred) noexcept
Definition: condition-variable.hh:276
+
future wait(std::chrono::duration< Rep, Period > timeout) noexcept
Definition: condition-variable.hh:246
+
condition_variable() noexcept=default
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
promise - allows a future value to be made available at a later time.
Definition: future.hh:934
+
void set_value(A &&... a) noexcept
Sets the promises value.
Definition: future.hh:990
+
void set_exception(std::exception_ptr &&ex) noexcept
Marks the promise as failed.
Definition: future.hh:998
+
Definition: timer.hh:83
+
future< T > make_ready_future(A &&... value) noexcept
Creates a future in an available, value state.
Definition: future.hh:1943
+
future< T > get_future() noexcept
Gets the promise's associated future.
Definition: future.hh:1926
+
future do_until(StopCondition stop_cond, AsyncAction action) noexcept
Definition: loop.hh:339
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
STL namespace.
+ +
+ + + + diff --git a/master/config_8hh_source.html b/master/config_8hh_source.html new file mode 100644 index 000000000..8cd883f06 --- /dev/null +++ b/master/config_8hh_source.html @@ -0,0 +1,150 @@ + + + + + + + +Seastar: seastar/net/config.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
config.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2017 Marek Waszkiewicz ( marek.waszkiewicz77@gmail.com )
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <optional>
+
25#include <istream>
+
26#include <string>
+
27#include <unordered_map>
+
28
+
29namespace seastar {
+
30namespace net {
+
31
+
32 struct ipv4_config {
+
33 std::string ip;
+
34 std::string netmask;
+
35 std::string gateway;
+
36 bool dhcp{ false };
+
37 };
+
38
+
39 struct hw_config {
+
40 std::string pci_address;
+
41 std::optional<unsigned> port_index;
+
42 bool lro{ true };
+
43 bool tso{ true };
+
44 bool ufo{ true };
+
45 bool hw_fc{ true };
+
46 bool event_index{ true };
+
47 bool csum_offload{ true };
+
48 std::optional<unsigned> ring_size;
+
49 };
+
50
+ +
52 ipv4_config ip_cfg;
+
53 hw_config hw_cfg;
+
54 };
+
55
+
56 std::unordered_map<std::string, device_config> parse_config(std::istream& input);
+
57
+
58 class config_exception : public std::runtime_error {
+
59 public:
+
60 config_exception(const std::string& msg)
+
61 : std::runtime_error(msg) {
+
62 }
+
63 };
+
64}
+
65}
+
Definition: config.hh:58
+
Definition: dhcp.hh:37
+
Definition: config.hh:51
+
Definition: config.hh:39
+
Definition: config.hh:32
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/const_8hh_source.html b/master/const_8hh_source.html new file mode 100644 index 000000000..50e5f998c --- /dev/null +++ b/master/const_8hh_source.html @@ -0,0 +1,126 @@ + + + + + + + +Seastar: seastar/net/const.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
const.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <cstdint>
+
25
+
26namespace seastar {
+
27
+
28namespace net {
+
29
+
30enum class ip_protocol_num : uint8_t {
+
31 icmp = 1, tcp = 6, udp = 17, unused = 255
+
32};
+
33
+
34enum class eth_protocol_num : uint16_t {
+
35 ipv4 = 0x0800, arp = 0x0806, ipv6 = 0x86dd
+
36};
+
37
+
38const uint8_t eth_hdr_len = 14;
+
39const uint8_t tcp_hdr_len_min = 20;
+
40const uint8_t ipv4_hdr_len_min = 20;
+
41const uint8_t ipv6_hdr_len_min = 40;
+
42const uint16_t ip_packet_len_max = 65535;
+
43
+
44}
+
45
+
46}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/content__source_8hh_source.html b/master/content__source_8hh_source.html new file mode 100644 index 000000000..7a2228a34 --- /dev/null +++ b/master/content__source_8hh_source.html @@ -0,0 +1,327 @@ + + + + + + + +Seastar: seastar/http/internal/content_source.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
content_source.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2020 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/http/chunk_parsers.hh>
+
25#include <seastar/core/iostream.hh>
+
26#include <seastar/core/temporary_buffer.hh>
+
27#include <seastar/http/common.hh>
+
28#include <seastar/util/log.hh>
+
29#include <seastar/http/exception.hh>
+
30
+
31namespace seastar {
+
32
+
33namespace httpd {
+
34
+
35namespace internal {
+
36
+
37/*
+
38 * An input_stream wrapper that allows to read only "length" bytes
+
39 * from it, used to handle requests with large bodies.
+
40 * */
+ + +
43 size_t _remaining_bytes = 0;
+
44public:
+ +
46 : _inp(inp), _remaining_bytes(length) {
+
47 }
+
48
+
49 virtual future<temporary_buffer<char>> get() override {
+
50 if (_remaining_bytes == 0) {
+
51 return make_ready_future<temporary_buffer<char>>();
+
52 }
+
53 return _inp.read_up_to(_remaining_bytes).then([this] (temporary_buffer<char> tmp_buf) {
+
54 _remaining_bytes -= tmp_buf.size();
+
55 return tmp_buf;
+
56 });
+
57 }
+
58
+
59 virtual future<temporary_buffer<char>> skip(uint64_t n) override {
+
60 uint64_t skip_bytes = std::min(n, _remaining_bytes);
+
61 _remaining_bytes -= skip_bytes;
+
62 return _inp.skip(skip_bytes).then([] {
+ +
64 });
+
65 }
+
66
+
67 virtual future<> close() override {
+
68 return make_ready_future<>();
+
69 }
+
70};
+
71
+
72/*
+
73 * An input_stream wrapper that decodes a request body
+
74 * with "chunked" encoding.
+
75 * */
+ +
77 class chunk_parser {
+
78 enum class parsing_state
+
79 : uint8_t {
+
80 size_and_ext,
+
81 body,
+
82 trailer_part
+
83 };
+
84 http_chunk_size_and_ext_parser _size_and_ext_parser;
+
85 http_chunk_trailer_parser _trailer_parser;
+
86
+ +
88 size_t _current_chunk_bytes_read = 0;
+
89 size_t _current_chunk_length;
+
90 parsing_state _ps = parsing_state::size_and_ext;
+
91 bool _end_of_request = false;
+
92 // references to fields in the request structure
+
93 std::unordered_map<sstring, sstring>& _chunk_extensions;
+
94 std::unordered_map<sstring, sstring>& _trailing_headers;
+
95 using consumption_result_type = consumption_result<char>;
+
96 public:
+
97 chunk_parser(std::unordered_map<sstring, sstring>& chunk_extensions, std::unordered_map<sstring, sstring>& trailing_headers)
+
98 : _chunk_extensions(chunk_extensions), _trailing_headers(trailing_headers) {
+
99 _size_and_ext_parser.init();
+
100 }
+ +
102 _current_chunk_bytes_read += _buf.size();
+
103 return std::move(_buf);
+
104 }
+
105
+ +
107 if (_buf.size() || _end_of_request || data.empty()) {
+
108 // return if we have already read some content (_buf.size()), we have already reached the end of the chunked request (_end_of_request),
+
109 // or the underlying stream reached eof (data.empty())
+
110 return make_ready_future<consumption_result_type>(stop_consuming(std::move(data)));
+
111 }
+
112 switch (_ps) {
+
113 // "data" buffer is non-empty
+
114 case parsing_state::size_and_ext:
+
115 return _size_and_ext_parser(std::move(data)).then([this] (std::optional<temporary_buffer<char>> res) {
+
116 if (res.has_value()) {
+
117 if (_size_and_ext_parser.failed()) {
+
118 return make_exception_future<consumption_result_type>(bad_request_exception("Can't parse chunk size and extensions"));
+
119 }
+
120 // save extensions
+
121 auto parsed_extensions = _size_and_ext_parser.get_parsed_extensions();
+
122 _chunk_extensions.merge(parsed_extensions);
+
123 for (auto& key_val : parsed_extensions) {
+
124 _chunk_extensions[key_val.first] += sstring(",") + key_val.second;
+
125 }
+
126
+
127 // save size
+
128 auto size_string = _size_and_ext_parser.get_size();
+
129 if (size_string.size() > 16) {
+
130 return make_exception_future<consumption_result_type>(bad_chunk_exception("Chunk length too big"));
+
131 }
+
132 _current_chunk_bytes_read = 0;
+
133 _current_chunk_length = strtol(size_string.c_str(), nullptr, 16);
+
134
+
135 if (_current_chunk_length == 0) {
+
136 _ps = parsing_state::trailer_part;
+
137 _trailer_parser.init();
+
138 } else {
+
139 _ps = parsing_state::body;
+
140 }
+
141 if (res->empty()) {
+
142 return make_ready_future<consumption_result_type>(continue_consuming{});
+
143 }
+
144 return this->operator()(std::move(res.value()));
+
145 } else {
+
146 return make_ready_future<consumption_result_type>(continue_consuming{});
+
147 }
+
148 });
+
149 case parsing_state::body:
+
150 // read the new data into _buf
+
151 if (_current_chunk_bytes_read < _current_chunk_length) {
+
152 size_t to_read = std::min(_current_chunk_length - _current_chunk_bytes_read, data.size());
+
153 if (_buf.empty()) {
+
154 _buf = data.share(0, to_read);
+
155 }
+
156 data.trim_front(to_read);
+
157 return make_ready_future<consumption_result_type>(stop_consuming(std::move(data)));
+
158 }
+
159
+
160 // chunk body is finished, we haven't entered the previous if, so "data" is still non-empty
+
161 if (_current_chunk_bytes_read == _current_chunk_length) {
+
162 // we haven't read \r yet
+
163 if (data.get()[0] != '\r') {
+
164 return make_exception_future<consumption_result_type>(bad_chunk_exception("The actual chunk length exceeds the specified length"));
+
165 } else {
+
166 _current_chunk_bytes_read++;
+
167 data.trim_front(1);
+
168 if (data.empty()) {
+
169 return make_ready_future<consumption_result_type>(continue_consuming{});
+
170 }
+
171 }
+
172 }
+
173 if (_current_chunk_bytes_read == _current_chunk_length + 1) {
+
174 // we haven't read \n but have \r
+
175 if (data.get()[0] != '\n') {
+
176 return make_exception_future<consumption_result_type>(bad_chunk_exception("The actual chunk length exceeds the specified length"));
+
177 } else {
+
178 _ps = parsing_state::size_and_ext;
+
179 _size_and_ext_parser.init();
+
180 data.trim_front(1);
+
181 if (data.empty()) {
+
182 return make_ready_future<consumption_result_type>(continue_consuming{});
+
183 }
+
184 }
+
185 }
+
186 return this->operator()(std::move(data));
+
187 case parsing_state::trailer_part:
+
188 return _trailer_parser(std::move(data)).then([this] (std::optional<temporary_buffer<char>> res) {
+
189 if (res.has_value()) {
+
190 if (_trailer_parser.failed()) {
+
191 return make_exception_future<consumption_result_type>(bad_request_exception("Can't parse chunked request trailer"));
+
192 }
+
193 // save trailing headers
+
194 _trailing_headers = _trailer_parser.get_parsed_headers();
+
195 _end_of_request = true;
+
196 return make_ready_future<consumption_result_type>(stop_consuming(std::move(*res)));
+
197 } else {
+
198 return make_ready_future<consumption_result_type>(continue_consuming{});
+
199 }
+
200 });
+
201 }
+
202 __builtin_unreachable();
+
203 }
+
204 };
+
205 input_stream<char>& _inp;
+
206 chunk_parser _chunk;
+
207
+
208public:
+
209 chunked_source_impl(input_stream<char>& inp, std::unordered_map<sstring, sstring>& chunk_extensions, std::unordered_map<sstring, sstring>& trailing_headers)
+
210 : _inp(inp), _chunk(chunk_extensions, trailing_headers) {
+
211 }
+
212
+
213 virtual future<temporary_buffer<char>> get() override {
+
214 return _inp.consume(_chunk).then([this] () mutable {
+
215 return _chunk.buf();
+
216 });
+
217 }
+
218
+
219 virtual future<> close() override {
+
220 return make_ready_future<>();
+
221 }
+
222};
+
223
+
224} // namespace internal
+
225
+
226} // namespace httpd
+
227
+
228}
+
Definition: iostream.hh:222
+
Definition: iostream.hh:60
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Result then(Func &&func) noexcept
Schedule a block of code to run when the future is ready.
Definition: future.hh:1425
+
Definition: exception.hh:110
+
Definition: content_source.hh:76
+ + +
future skip(uint64_t n) noexcept
Ignores n next bytes from the stream.
Definition: iostream-impl.hh:301
+
future< tmp_buf > read_up_to(size_t n) noexcept
Definition: iostream-impl.hh:255
+
Definition: iostream.hh:213
+
Definition: iostream.hh:202
+ +
bool empty() const noexcept
Checks whether the buffer is empty.
Definition: temporary_buffer.hh:152
+
temporary_buffer share()
Definition: temporary_buffer.hh:160
+
void trim_front(size_t pos) noexcept
Definition: temporary_buffer.hh:186
+
size_t size() const noexcept
Gets the buffer size.
Definition: temporary_buffer.hh:130
+
const CharType * get() const noexcept
Gets a pointer to the beginning of the buffer.
Definition: temporary_buffer.hh:125
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: iostream.hh:199
+
+ + + + diff --git a/master/conversions_8hh_source.html b/master/conversions_8hh_source.html new file mode 100644 index 000000000..db46ebb8d --- /dev/null +++ b/master/conversions_8hh_source.html @@ -0,0 +1,138 @@ + + + + + + + +Seastar: seastar/util/conversions.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
conversions.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <cstdlib>
+
26#include <string_view>
+
27#include <vector>
+
28#endif
+
29#include <seastar/util/modules.hh>
+
30
+
31namespace seastar {
+
32
+
33// Convert a string to a memory size, allowing binary SI
+
34// suffixes (intentionally, even though SI suffixes are
+
35// decimal, to follow existing usage). A string matched
+
36// by following BNF is accetped:
+
37//
+
38// memory_size ::= <digit>+ <suffix>? "i"? "B"?
+
39// suffix ::= ("k" | "K" | "M" | "G" | "T")
+
40//
+
41// for instance:
+
42//
+
43// "5" -> 5
+
44// "4k" -> (4 << 10)
+
45// "8Mi" -> (8 << 20)
+
46// "7GB" -> (7 << 30)
+
47// "1TiB" -> (1 << 40)
+
48// anything else: exception
+
49SEASTAR_MODULE_EXPORT
+
50size_t parse_memory_size(std::string_view s);
+
51
+
52static inline std::vector<char> string2vector(std::string_view str) {
+
53 auto v = std::vector<char>(str.begin(), str.end());
+
54 v.push_back('\0');
+
55 return v;
+
56}
+
57
+
58}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/core_2byteorder_8hh_source.html b/master/core_2byteorder_8hh_source.html new file mode 100644 index 000000000..a1f095c3d --- /dev/null +++ b/master/core_2byteorder_8hh_source.html @@ -0,0 +1,196 @@ + + + + + + + +Seastar: seastar/core/byteorder.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
byteorder.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2015 Scylladb, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <algorithm>
+
26#include <boost/endian/conversion.hpp>
+
27#include <seastar/core/unaligned.hh>
+
28#include <seastar/util/modules.hh>
+
29#endif
+
30
+
31namespace seastar {
+
32
+
33SEASTAR_MODULE_EXPORT_BEGIN
+
34
+
35template <typename T>
+
36inline T cpu_to_le(T x) noexcept {
+
37 return boost::endian::native_to_little(x);
+
38}
+
39template <typename T>
+
40inline T le_to_cpu(T x) noexcept {
+
41 return boost::endian::little_to_native(x);
+
42}
+
43
+
44template <typename T>
+
45inline T cpu_to_be(T x) noexcept {
+
46 return boost::endian::native_to_big(x);
+
47}
+
48template <typename T>
+
49inline T be_to_cpu(T x) noexcept {
+
50 return boost::endian::big_to_native(x);
+
51}
+
52
+
53template <typename T>
+
54inline T cpu_to_le(const unaligned<T>& v) noexcept {
+
55 return cpu_to_le(T(v));
+
56}
+
57
+
58template <typename T>
+
59inline T le_to_cpu(const unaligned<T>& v) noexcept {
+
60 return le_to_cpu(T(v));
+
61}
+
62
+
63template <typename T>
+
64inline
+
65T
+
66read_le(const char* p) noexcept {
+
67 T datum;
+
68 std::copy_n(p, sizeof(T), reinterpret_cast<char*>(&datum));
+
69 return le_to_cpu(datum);
+
70}
+
71
+
72template <typename T>
+
73inline
+
74void
+
75write_le(char* p, T datum) noexcept {
+
76 datum = cpu_to_le(datum);
+
77 std::copy_n(reinterpret_cast<const char*>(&datum), sizeof(T), p);
+
78}
+
79
+
80template <typename T>
+
81inline
+
82T
+
83read_be(const char* p) noexcept {
+
84 T datum;
+
85 std::copy_n(p, sizeof(T), reinterpret_cast<char*>(&datum));
+
86 return be_to_cpu(datum);
+
87}
+
88
+
89template <typename T>
+
90inline
+
91void
+
92write_be(char* p, T datum) noexcept {
+
93 datum = cpu_to_be(datum);
+
94 std::copy_n(reinterpret_cast<const char*>(&datum), sizeof(T), p);
+
95}
+
96
+
97template <typename T>
+
98inline
+
99T
+
100consume_be(const char*& p) noexcept {
+
101 auto ret = read_be<T>(p);
+
102 p += sizeof(T);
+
103 return ret;
+
104}
+
105
+
106template <typename T>
+
107inline
+
108void
+
109produce_be(char*& p, T datum) noexcept {
+
110 write_be<T>(p, datum);
+
111 p += sizeof(T);
+
112}
+
113
+
114SEASTAR_MODULE_EXPORT_END
+
115
+
116}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/core_2file_8hh_source.html b/master/core_2file_8hh_source.html new file mode 100644 index 000000000..5050e19ad --- /dev/null +++ b/master/core_2file_8hh_source.html @@ -0,0 +1,606 @@ + + + + + + + +Seastar: seastar/core/file.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
file.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2015 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/util/std-compat.hh>
+
25#include <seastar/core/coroutine.hh>
+
26#include <seastar/coroutine/generator.hh>
+
27#include <seastar/core/do_with.hh>
+
28#include <seastar/core/stream.hh>
+
29#include <seastar/core/sstring.hh>
+
30#include <seastar/core/shared_ptr.hh>
+
31#include <seastar/core/align.hh>
+
32#include <seastar/core/io_priority_class.hh>
+
33#include <seastar/core/file-types.hh>
+
34#include <seastar/core/circular_buffer.hh>
+
35#include <seastar/util/modules.hh>
+
36#ifndef SEASTAR_MODULE
+
37#include <sys/statvfs.h>
+
38#include <sys/ioctl.h>
+
39#include <linux/fs.h>
+
40#include <sys/uio.h>
+
41#include <unistd.h>
+
42#include <chrono>
+
43#include <concepts>
+
44#include <cstdint>
+
45#include <functional>
+
46#include <optional>
+
47#endif
+
48
+
49namespace seastar {
+
50
+
51SEASTAR_MODULE_EXPORT_BEGIN
+
52
+
55
+ +
59 sstring name;
+
61 std::optional<directory_entry_type> type;
+
62};
+
63
+
65struct stat_data {
+
66 uint64_t device_id; // ID of device containing file
+
67 uint64_t inode_number; // Inode number
+
68 uint64_t mode; // File type and mode
+ +
70 uint64_t number_of_links;// Number of hard links
+
71 uint64_t uid; // User ID of owner
+
72 uint64_t gid; // Group ID of owner
+
73 uint64_t rdev; // Device ID (if special file)
+
74 uint64_t size; // Total size, in bytes
+
75 uint64_t block_size; // Block size for filesystem I/O
+
76 uint64_t allocated_size; // Total size of allocated storage, in bytes
+
77
+
78 std::chrono::system_clock::time_point time_accessed; // Time of last content access
+
79 std::chrono::system_clock::time_point time_modified; // Time of last content modification
+
80 std::chrono::system_clock::time_point time_changed; // Time of last status change (either content or attributes)
+
81};
+
82
+ +
89 uint64_t extent_allocation_size_hint = 1 << 20;
+
90 bool sloppy_size = false;
+
91 uint64_t sloppy_size_hint = 1 << 20;
+
92 file_permissions create_permissions = file_permissions::default_file_permissions;
+
93 bool append_is_unlikely = false;
+
94
+
95 // The fsxattr.fsx_extsize is 32-bit
+
96 static constexpr uint64_t max_extent_allocation_size_hint = 1 << 31;
+
97
+
98 // XFS ignores hints that are not aligned to the logical block size.
+
99 // To fulfill the requirement, we ensure that hint is aligned to 128KB (best guess).
+
100 static constexpr uint32_t min_extent_size_hint_alignment{128u << 10}; // 128KB
+
101};
+
102
+
103class file;
+
104class file_impl;
+
105class io_intent;
+
106class file_handle;
+
107class file_data_sink_impl;
+
108class file_data_source_impl;
+
109
+
110// A handle that can be transported across shards and used to
+
111// create a dup(2)-like `file` object referring to the same underlying file
+ +
113public:
+
114 virtual ~file_handle_impl() = default;
+
115 virtual std::unique_ptr<file_handle_impl> clone() const = 0;
+
116 virtual shared_ptr<file_impl> to_file() && = 0;
+
117};
+
118
+ +
120 friend class file;
+
121protected:
+
122 static file_impl* get_file_impl(file& f);
+
123 unsigned _memory_dma_alignment = 4096;
+
124 unsigned _disk_read_dma_alignment = 4096;
+
125 unsigned _disk_write_dma_alignment = 4096;
+
126 unsigned _disk_overwrite_dma_alignment = 4096;
+
127 unsigned _read_max_length = 1u << 30;
+
128 unsigned _write_max_length = 1u << 30;
+
129public:
+
130 virtual ~file_impl() {}
+
131
+
132#if SEASTAR_API_LEVEL >= 7
+
133 virtual future<size_t> write_dma(uint64_t pos, const void* buffer, size_t len, io_intent*) = 0;
+
134 virtual future<size_t> write_dma(uint64_t pos, std::vector<iovec> iov, io_intent*) = 0;
+
135 virtual future<size_t> read_dma(uint64_t pos, void* buffer, size_t len, io_intent*) = 0;
+
136 virtual future<size_t> read_dma(uint64_t pos, std::vector<iovec> iov, io_intent*) = 0;
+
137 virtual future<temporary_buffer<uint8_t>> dma_read_bulk(uint64_t offset, size_t range_size, io_intent*) = 0;
+
138#else
+
139 virtual future<size_t> write_dma(uint64_t pos, const void* buffer, size_t len, const io_priority_class& pc) = 0;
+
140 virtual future<size_t> write_dma(uint64_t pos, std::vector<iovec> iov, const io_priority_class& pc) = 0;
+
141 virtual future<size_t> read_dma(uint64_t pos, void* buffer, size_t len, const io_priority_class& pc) = 0;
+
142 virtual future<size_t> read_dma(uint64_t pos, std::vector<iovec> iov, const io_priority_class& pc) = 0;
+
143 virtual future<temporary_buffer<uint8_t>> dma_read_bulk(uint64_t offset, size_t range_size, const io_priority_class& pc) = 0;
+
144
+
145 virtual future<size_t> write_dma(uint64_t pos, const void* buffer, size_t len, const io_priority_class& pc, io_intent*) {
+
146 return write_dma(pos, buffer, len, pc);
+
147 }
+
148 virtual future<size_t> write_dma(uint64_t pos, std::vector<iovec> iov, const io_priority_class& pc, io_intent*) {
+
149 return write_dma(pos, std::move(iov), pc);
+
150 }
+
151 virtual future<size_t> read_dma(uint64_t pos, void* buffer, size_t len, const io_priority_class& pc, io_intent*) {
+
152 return read_dma(pos, buffer, len, pc);
+
153 }
+
154 virtual future<size_t> read_dma(uint64_t pos, std::vector<iovec> iov, const io_priority_class& pc, io_intent*) {
+
155 return read_dma(pos, std::move(iov), pc);
+
156 }
+
157 virtual future<temporary_buffer<uint8_t>> dma_read_bulk(uint64_t offset, size_t range_size, const io_priority_class& pc, io_intent*) {
+
158 return dma_read_bulk(offset, range_size, pc);
+
159 }
+
160#endif
+
161
+
162 virtual future<> flush() = 0;
+
163 virtual future<struct stat> stat() = 0;
+
164 virtual future<> truncate(uint64_t length) = 0;
+
165 virtual future<> discard(uint64_t offset, uint64_t length) = 0;
+
166 virtual future<int> ioctl(uint64_t cmd, void* argp) noexcept;
+
167 virtual future<int> ioctl_short(uint64_t cmd, void* argp) noexcept;
+
168 virtual future<int> fcntl(int op, uintptr_t arg) noexcept;
+
169 virtual future<int> fcntl_short(int op, uintptr_t arg) noexcept;
+
170 virtual future<> allocate(uint64_t position, uint64_t length) = 0;
+
171 virtual future<uint64_t> size() = 0;
+
172 virtual future<> close() = 0;
+
173 virtual std::unique_ptr<file_handle_impl> dup();
+
174 virtual subscription<directory_entry> list_directory(std::function<future<> (directory_entry de)> next) = 0;
+
175 // due to https://github.com/scylladb/seastar/issues/1913, we cannot use
+
176 // buffered generator yet.
+
177 virtual coroutine::experimental::generator<directory_entry> experimental_list_directory();
+
178};
+
179
+
180future<shared_ptr<file_impl>> make_file_impl(int fd, file_open_options options, int oflags, struct stat st) noexcept;
+
181
+
183
+
193class file {
+
194 shared_ptr<file_impl> _file_impl;
+
195public:
+
206 file() noexcept : _file_impl(nullptr) {}
+
207
+ +
209 : _file_impl(std::move(impl)) {}
+
210
+
212 explicit file(file_handle&& handle) noexcept;
+
213
+
218 explicit operator bool() const noexcept { return bool(_file_impl); }
+
219
+
224 file(const file& x) = default;
+
226 file(file&& x) noexcept : _file_impl(std::move(x._file_impl)) {}
+
231 file& operator=(const file& x) noexcept = default;
+
233 file& operator=(file&& x) noexcept = default;
+
234
+
235 // O_DIRECT reading requires that buffer, offset, and read length, are
+
236 // all aligned. Alignment of 4096 was necessary in the past, but no longer
+
237 // is - 512 is usually enough; But we'll need to use BLKSSZGET ioctl to
+
238 // be sure it is really enough on this filesystem. 4096 is always safe.
+
239 // In addition, if we start reading in things outside page boundaries,
+
240 // we will end up with various pages around, some of them with
+
241 // overlapping ranges. Those would be very challenging to cache.
+
242
+
244 uint64_t disk_read_dma_alignment() const noexcept {
+
245 return _file_impl->_disk_read_dma_alignment;
+
246 }
+
247
+
249 uint64_t disk_write_dma_alignment() const noexcept {
+
250 return _file_impl->_disk_write_dma_alignment;
+
251 }
+
252
+
259 uint64_t disk_overwrite_dma_alignment() const noexcept {
+
260 return _file_impl->_disk_overwrite_dma_alignment;
+
261 }
+
262
+
264 uint64_t memory_dma_alignment() const noexcept {
+
265 return _file_impl->_memory_dma_alignment;
+
266 }
+
267
+
272 size_t disk_read_max_length() const noexcept {
+
273 return _file_impl->_read_max_length;
+
274 }
+
275
+
280 size_t disk_write_max_length() const noexcept {
+
281 return _file_impl->_write_max_length;
+
282 }
+
283
+
284#if SEASTAR_API_LEVEL < 7
+
302 template <typename CharType>
+
303 [[deprecated("Use scheduling_groups and API level >= 7")]]
+ +
305 dma_read(uint64_t aligned_pos, CharType* aligned_buffer, size_t aligned_len, const io_priority_class& pc, io_intent* intent = nullptr) noexcept {
+
306 return dma_read_impl(aligned_pos, reinterpret_cast<uint8_t*>(aligned_buffer), aligned_len, internal::maybe_priority_class_ref(pc), intent);
+
307 }
+
308#endif
+
309
+
324 template <typename CharType>
+
325 future<size_t>
+
326 dma_read(uint64_t aligned_pos, CharType* aligned_buffer, size_t aligned_len, io_intent* intent = nullptr) noexcept {
+
327 return dma_read_impl(aligned_pos, reinterpret_cast<uint8_t*>(aligned_buffer), aligned_len, internal::maybe_priority_class_ref(), intent);
+
328 }
+
329
+
330#if SEASTAR_API_LEVEL < 7
+
349 template <typename CharType>
+
350 [[deprecated("Use scheduling_groups and API level >= 7")]]
+
351 future<temporary_buffer<CharType>> dma_read(uint64_t pos, size_t len, const io_priority_class& pc, io_intent* intent = nullptr) noexcept {
+
352 return dma_read_impl(pos, len, internal::maybe_priority_class_ref(pc), intent).then([] (temporary_buffer<uint8_t> t) {
+
353 return temporary_buffer<CharType>(reinterpret_cast<CharType*>(t.get_write()), t.size(), t.release());
+
354 });
+
355 }
+
356#endif
+
357
+
373 template <typename CharType>
+
374 future<temporary_buffer<CharType>> dma_read(uint64_t pos, size_t len, io_intent* intent = nullptr) noexcept {
+
375 return dma_read_impl(pos, len, internal::maybe_priority_class_ref(), intent).then([] (temporary_buffer<uint8_t> t) {
+
376 return temporary_buffer<CharType>(reinterpret_cast<CharType*>(t.get_write()), t.size(), t.release());
+
377 });
+
378 }
+
379
+
382 class eof_error : public std::exception {};
+
383
+
384#if SEASTAR_API_LEVEL < 7
+
400 template <typename CharType>
+
401 [[deprecated("Use scheduling_groups and API level >= 7")]]
+ +
403 dma_read_exactly(uint64_t pos, size_t len, const io_priority_class& pc, io_intent* intent = nullptr) noexcept {
+
404 return dma_read_exactly_impl(pos, len, internal::maybe_priority_class_ref(pc), intent).then([] (temporary_buffer<uint8_t> t) {
+
405 return temporary_buffer<CharType>(reinterpret_cast<CharType*>(t.get_write()), t.size(), t.release());
+
406 });
+
407 }
+
408#endif
+
409
+
422 template <typename CharType>
+
423 future<temporary_buffer<CharType>>
+
424 dma_read_exactly(uint64_t pos, size_t len, io_intent* intent = nullptr) noexcept {
+
425 return dma_read_exactly_impl(pos, len, internal::maybe_priority_class_ref(), intent).then([] (temporary_buffer<uint8_t> t) {
+
426 return temporary_buffer<CharType>(reinterpret_cast<CharType*>(t.get_write()), t.size(), t.release());
+
427 });
+
428 }
+
429
+
430#if SEASTAR_API_LEVEL < 7
+
443 [[deprecated("Use scheduling_groups and API level >= 7")]]
+
444 future<size_t> dma_read(uint64_t pos, std::vector<iovec> iov, const io_priority_class& pc, io_intent* intent = nullptr) noexcept {
+
445 return dma_read_impl(pos, std::move(iov), internal::maybe_priority_class_ref(pc), intent);
+
446 }
+
447#endif
+
448
+
458 future<size_t> dma_read(uint64_t pos, std::vector<iovec> iov, io_intent* intent = nullptr) noexcept {
+
459 return dma_read_impl(pos, std::move(iov), internal::maybe_priority_class_ref(), intent);
+
460 }
+
461
+
462#if SEASTAR_API_LEVEL < 7
+
476 template <typename CharType>
+
477 [[deprecated("Use scheduling_groups and API level >= 7")]]
+
478 future<size_t> dma_write(uint64_t pos, const CharType* buffer, size_t len, const io_priority_class& pc, io_intent* intent = nullptr) noexcept {
+
479 return dma_write_impl(pos, reinterpret_cast<const uint8_t*>(buffer), len, internal::maybe_priority_class_ref(pc), intent);
+
480 }
+
481#endif
+
482
+
493 template <typename CharType>
+
494 future<size_t> dma_write(uint64_t pos, const CharType* buffer, size_t len, io_intent* intent = nullptr) noexcept {
+
495 return dma_write_impl(pos, reinterpret_cast<const uint8_t*>(buffer), len, internal::maybe_priority_class_ref(), intent);
+
496 }
+
497
+
498#if SEASTAR_API_LEVEL < 7
+
511 [[deprecated("Use scheduling_groups and API level >= 7")]]
+
512 future<size_t> dma_write(uint64_t pos, std::vector<iovec> iov, const io_priority_class& pc, io_intent* intent = nullptr) noexcept {
+
513 return dma_write_impl(pos, std::move(iov), internal::maybe_priority_class_ref(pc), intent);
+
514 }
+
515#endif
+
516
+
526 future<size_t> dma_write(uint64_t pos, std::vector<iovec> iov, io_intent* intent = nullptr) noexcept {
+
527 return dma_write_impl(pos, std::move(iov), internal::maybe_priority_class_ref(), intent);
+
528 }
+
529
+
534 future<> flush() noexcept;
+
535
+
537 future<struct stat> stat() noexcept;
+
538
+
540 future<> truncate(uint64_t length) noexcept;
+
541
+
554 future<> allocate(uint64_t position, uint64_t length) noexcept;
+
555
+
560 future<> discard(uint64_t offset, uint64_t length) noexcept;
+
561
+
574 future<int> ioctl(uint64_t cmd, void* argp) noexcept;
+
575
+
590 future<int> ioctl_short(uint64_t cmd, void* argp) noexcept;
+
591
+
603 future<int> fcntl(int op, uintptr_t arg = 0UL) noexcept;
+
604
+
618 future<int> fcntl_short(int op, uintptr_t arg = 0UL) noexcept;
+
619
+
631 [[deprecated("This API was removed from the kernel")]]
+
632 future<> set_file_lifetime_hint(uint64_t hint) noexcept;
+
633
+
645 future<> set_inode_lifetime_hint(uint64_t hint) noexcept;
+
646
+
658 [[deprecated("This API was removed from the kernel")]]
+
659 future<uint64_t> get_file_lifetime_hint() noexcept;
+
660
+
672 future<uint64_t> get_inode_lifetime_hint() noexcept;
+
673
+
675 future<uint64_t> size() const noexcept;
+
676
+
687 future<> close() noexcept;
+
688
+ +
691
+
693 // due to https://github.com/scylladb/seastar/issues/1913, we cannot use
+
694 // buffered generator yet.
+
695 coroutine::experimental::generator<directory_entry> experimental_list_directory();
+
696
+
697#if SEASTAR_API_LEVEL < 7
+
715 template <typename CharType>
+
716 [[deprecated("Use scheduling_groups and API level >= 7")]]
+ +
718 dma_read_bulk(uint64_t offset, size_t range_size, const io_priority_class& pc, io_intent* intent = nullptr) noexcept {
+
719 return dma_read_bulk_impl(offset, range_size, internal::maybe_priority_class_ref(pc), intent).then([] (temporary_buffer<uint8_t> t) {
+
720 return temporary_buffer<CharType>(reinterpret_cast<CharType*>(t.get_write()), t.size(), t.release());
+
721 });
+
722 }
+
723#endif
+
724
+
739 template <typename CharType>
+ +
741 dma_read_bulk(uint64_t offset, size_t range_size, io_intent* intent = nullptr) noexcept {
+
742 return dma_read_bulk_impl(offset, range_size, internal::maybe_priority_class_ref(), intent).then([] (temporary_buffer<uint8_t> t) {
+
743 return temporary_buffer<CharType>(reinterpret_cast<CharType*>(t.get_write()), t.size(), t.release());
+
744 });
+
745 }
+
746
+ +
756private:
+ +
758 dma_read_bulk_impl(uint64_t offset, size_t range_size, internal::maybe_priority_class_ref pc, io_intent* intent) noexcept;
+
759
+ +
761 dma_write_impl(uint64_t pos, const uint8_t* buffer, size_t len, internal::maybe_priority_class_ref pc, io_intent* intent) noexcept;
+
762
+ +
764 dma_write_impl(uint64_t pos, std::vector<iovec> iov, internal::maybe_priority_class_ref pc, io_intent* intent) noexcept;
+
765
+ +
767 dma_read_impl(uint64_t pos, size_t len, internal::maybe_priority_class_ref pc, io_intent* intent) noexcept;
+
768
+ +
770 dma_read_impl(uint64_t aligned_pos, uint8_t* aligned_buffer, size_t aligned_len, internal::maybe_priority_class_ref pc, io_intent* intent) noexcept;
+
771
+ +
773 dma_read_impl(uint64_t pos, std::vector<iovec> iov, internal::maybe_priority_class_ref pc, io_intent* intent) noexcept;
+
774
+ +
776 dma_read_exactly_impl(uint64_t pos, size_t len, internal::maybe_priority_class_ref pc, io_intent* intent) noexcept;
+
777
+
778 future<uint64_t> get_lifetime_hint_impl(int op) noexcept;
+
779 future<> set_lifetime_hint_impl(int op, uint64_t hint) noexcept;
+
780
+
781 friend class file_impl;
+
782 friend class file_data_sink_impl;
+
783 friend class file_data_source_impl;
+
784};
+
785
+
793template <std::invocable<file&> Func>
+
794requires std::is_nothrow_move_constructible_v<Func>
+
795auto with_file(future<file> file_fut, Func func) noexcept {
+
796 static_assert(std::is_nothrow_move_constructible_v<Func>, "Func's move constructor must not throw");
+
797 return file_fut.then([func = std::move(func)] (file f) mutable {
+
798 return do_with(std::move(f), [func = std::move(func)] (file& f) mutable {
+
799 return futurize_invoke(func, f).finally([&f] {
+
800 return f.close();
+
801 });
+
802 });
+
803 });
+
804}
+
805
+
820template <std::invocable<file&> Func>
+
821requires std::is_nothrow_move_constructible_v<Func>
+
822auto with_file_close_on_failure(future<file> file_fut, Func func) noexcept {
+
823 static_assert(std::is_nothrow_move_constructible_v<Func>, "Func's move constructor must not throw");
+
824 return file_fut.then([func = std::move(func)] (file f) mutable {
+
825 return do_with(std::move(f), [func = std::move(func)] (file& f) mutable {
+
826 return futurize_invoke(std::move(func), f).then_wrapped([&f] (auto ret) mutable {
+
827 if (!ret.failed()) {
+
828 return ret;
+
829 }
+
830 return ret.finally([&f] {
+
831 // If f.close() fails, return that as nested exception.
+
832 return f.close();
+
833 });
+
834 });
+
835 });
+
836 });
+
837}
+
838
+
842
+ +
851 std::unique_ptr<file_handle_impl> _impl;
+
852private:
+
853 explicit file_handle(std::unique_ptr<file_handle_impl> impl) : _impl(std::move(impl)) {}
+
854public:
+ + +
860 file_handle& operator=(const file_handle&);
+
862 file_handle& operator=(file_handle&&) noexcept;
+
864 file to_file() const &;
+ +
867
+
868 friend class file;
+
869};
+
870
+
872
+
874class cancelled_error : public std::exception {
+
875public:
+
876 virtual const char* what() const noexcept {
+
877 return "cancelled";
+
878 }
+
879};
+
880
+
881SEASTAR_MODULE_EXPORT_END
+
882
+
883}
+
An exception Cancelled IOs resolve their future into (see io_intent)
Definition: file.hh:874
+ +
Definition: file.hh:382
+
Definition: file.hh:112
+
A shard-transportable handle to a file.
Definition: file.hh:850
+
file_handle(file_handle &&) noexcept
Moves a file handle object.
+
file_handle(const file_handle &)
Copies a file handle object.
+
file to_file() const &
Converts the file handle object to a file.
+
Definition: file.hh:119
+
Definition: file.hh:193
+
future close() noexcept
+
future< int > ioctl(uint64_t cmd, void *argp) noexcept
+
future< temporary_buffer< CharType > > dma_read(uint64_t pos, size_t len, io_intent *intent=nullptr) noexcept
Definition: file.hh:374
+
file & operator=(file &&x) noexcept=default
Moves assigns a file object.
+
future< temporary_buffer< CharType > > dma_read_bulk(uint64_t offset, size_t range_size, io_intent *intent=nullptr) noexcept
Definition: file.hh:741
+
subscription< directory_entry > list_directory(std::function< future<>(directory_entry de)> next)
Returns a directory listing, given that this file object is a directory.
+
file & operator=(const file &x) noexcept=default
+
future< size_t > dma_write(uint64_t pos, std::vector< iovec > iov, io_intent *intent=nullptr) noexcept
Definition: file.hh:526
+
future allocate(uint64_t position, uint64_t length) noexcept
+
future set_inode_lifetime_hint(uint64_t hint) noexcept
+
uint64_t memory_dma_alignment() const noexcept
Alignment requirement for data buffers.
Definition: file.hh:264
+
file(file_handle &&handle) noexcept
Constructs a file object from a file_handle obtained from another shard.
+
future< size_t > dma_write(uint64_t pos, const CharType *buffer, size_t len, io_intent *intent=nullptr) noexcept
Definition: file.hh:494
+
future< int > fcntl_short(int op, uintptr_t arg=0UL) noexcept
+
size_t disk_read_max_length() const noexcept
Definition: file.hh:272
+
future< size_t > dma_read(uint64_t pos, std::vector< iovec > iov, io_intent *intent=nullptr) noexcept
Definition: file.hh:458
+
future set_file_lifetime_hint(uint64_t hint) noexcept
+
future flush() noexcept
+
file_handle dup()
Creates a handle that can be transported across shards.
+
future< uint64_t > get_inode_lifetime_hint() noexcept
+
file(file &&x) noexcept
Moves a file object.
Definition: file.hh:226
+
uint64_t disk_read_dma_alignment() const noexcept
Alignment requirement for file offsets (for reads)
Definition: file.hh:244
+
future< uint64_t > size() const noexcept
Gets the file size.
+
future discard(uint64_t offset, uint64_t length) noexcept
+
future< struct stat > stat() noexcept
Returns stat information about the file.
+
uint64_t disk_overwrite_dma_alignment() const noexcept
Definition: file.hh:259
+
future< size_t > dma_read(uint64_t aligned_pos, CharType *aligned_buffer, size_t aligned_len, io_intent *intent=nullptr) noexcept
Definition: file.hh:326
+
future truncate(uint64_t length) noexcept
Truncates the file to a specified length.
+
future< int > ioctl_short(uint64_t cmd, void *argp) noexcept
+
coroutine::experimental::generator< directory_entry > experimental_list_directory()
Returns a directory listing, given that this file object is a directory.
+
size_t disk_write_max_length() const noexcept
Definition: file.hh:280
+
uint64_t disk_write_dma_alignment() const noexcept
Alignment requirement for file offsets (for writes)
Definition: file.hh:249
+
future< int > fcntl(int op, uintptr_t arg=0UL) noexcept
+
future< uint64_t > get_file_lifetime_hint() noexcept
+
file() noexcept
Definition: file.hh:206
+
file(const file &x)=default
+
future< temporary_buffer< CharType > > dma_read_exactly(uint64_t pos, size_t len, io_intent *intent=nullptr) noexcept
Definition: file.hh:424
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Definition: io_intent.hh:44
+
Definition: shared_ptr.hh:513
+
Definition: stream.hh:127
+
Definition: temporary_buffer.hh:67
+
deleter release() noexcept
Definition: temporary_buffer.hh:203
+
size_t size() const noexcept
Gets the buffer size.
Definition: temporary_buffer.hh:130
+
CharType * get_write() noexcept
Definition: temporary_buffer.hh:128
+
std::optional< directory_entry_type > type
Type of the directory entry, if known.
Definition: file.hh:61
+
sstring name
Name of the file in a directory entry. Will never be "." or "..". Only the last component is included...
Definition: file.hh:59
+
directory_entry_type
Definition: file-types.hh:70
+
auto with_file_close_on_failure(future< file > file_fut, Func func) noexcept
Helper for ensuring a file is closed if func fails.
Definition: file.hh:822
+
auto with_file(future< file > file_fut, Func func) noexcept
Helper for ensuring a file is closed after func is called.
Definition: file.hh:795
+
A directory entry being listed.
Definition: file.hh:57
+
Filesystem object stat information.
Definition: file.hh:65
+
auto do_with(T1 &&rv1, T2 &&rv2, More &&... more) noexcept
Definition: do_with.hh:135
+
holds the implementation parts of the metrics layer, do not use directly.
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
STL namespace.
+
Definition: file.hh:88
+
bool sloppy_size
Allow the file size not to track the amount of data written until a flush.
Definition: file.hh:90
+
uint64_t sloppy_size_hint
Hint as to what the eventual file size will be.
Definition: file.hh:91
+
bool append_is_unlikely
Hint that user promises (or at least tries hard) not to write behind file size.
Definition: file.hh:93
+
file_permissions create_permissions
File permissions to use when creating a file.
Definition: file.hh:92
+
uint64_t extent_allocation_size_hint
Allocate this much disk space when extending the file.
Definition: file.hh:89
+
+ + + + diff --git a/master/core_2on__internal__error_8hh_source.html b/master/core_2on__internal__error_8hh_source.html new file mode 100644 index 000000000..ad43aa2cb --- /dev/null +++ b/master/core_2on__internal__error_8hh_source.html @@ -0,0 +1,133 @@ + + + + + + + +Seastar: seastar/core/on_internal_error.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
on_internal_error.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2020 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24
+
25#include <seastar/util/std-compat.hh>
+
26#include <seastar/util/modules.hh>
+
27#ifndef SEASTAR_MODULE
+
28#include <exception>
+
29#include <string_view>
+
30#endif
+
31
+
32namespace seastar {
+
33
+
34SEASTAR_MODULE_EXPORT_BEGIN
+
35
+
36class logger;
+
37
+
41bool set_abort_on_internal_error(bool do_abort) noexcept;
+
42
+
49[[noreturn]] void on_internal_error(logger& logger, std::string_view reason);
+
50
+
59[[noreturn]] void on_internal_error(logger& logger, std::exception_ptr ex);
+
60
+
66void on_internal_error_noexcept(logger& logger, std::string_view reason) noexcept;
+
67
+
73[[noreturn]] void on_fatal_internal_error(logger& logger, std::string_view reason) noexcept;
+
74
+
75SEASTAR_MODULE_EXPORT_END
+
76}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
void on_internal_error_noexcept(logger &logger, std::string_view reason) noexcept
+
void on_fatal_internal_error(logger &logger, std::string_view reason) noexcept
+
bool set_abort_on_internal_error(bool do_abort) noexcept
+
void on_internal_error(logger &logger, std::string_view reason)
+
+ + + + diff --git a/master/coroutine_2exception_8hh_source.html b/master/coroutine_2exception_8hh_source.html new file mode 100644 index 000000000..c9c9fb078 --- /dev/null +++ b/master/coroutine_2exception_8hh_source.html @@ -0,0 +1,183 @@ + + + + + + + +Seastar: seastar/coroutine/exception.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
exception.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2021-present ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/future.hh>
+
25#include <coroutine>
+
26#include <exception>
+
27
+
28namespace seastar {
+
29
+
30namespace internal {
+
31
+
32struct exception_awaiter {
+
33 std::exception_ptr eptr;
+
34
+
35 explicit exception_awaiter(std::exception_ptr&& eptr) noexcept : eptr(std::move(eptr)) {}
+
36
+
37 exception_awaiter(const exception_awaiter&) = delete;
+
38 exception_awaiter(exception_awaiter&&) = delete;
+
39
+
40 bool await_ready() const noexcept {
+
41 return false;
+
42 }
+
43
+
44 template<typename U>
+
45 void await_suspend(std::coroutine_handle<U> hndl) noexcept {
+
46 hndl.promise().set_exception(std::move(eptr));
+
47 hndl.destroy();
+
48 }
+
49
+
50 void await_resume() noexcept {}
+
51};
+
52
+
53} // internal
+
54
+
55namespace coroutine {
+
56
+
71struct exception {
+
72 std::exception_ptr eptr;
+
73 explicit exception(std::exception_ptr eptr) noexcept : eptr(std::move(eptr)) {}
+
74};
+
75
+
91[[deprecated("Use co_await coroutine::return_exception_ptr or co_return coroutine::exception instead")]]
+
92[[nodiscard]]
+
93inline exception make_exception(std::exception_ptr ex) noexcept {
+
94 return exception(std::move(ex));
+
95}
+
96
+
97template<typename T>
+
98[[deprecated("Use co_await coroutine::return_exception_ptr or co_return coroutine::exception instead")]]
+
99[[nodiscard]]
+
100exception make_exception(T&& t) noexcept {
+
101 log_exception_trace();
+
102 return exception(std::make_exception_ptr(std::forward<T>(t)));
+
103}
+
104
+
125[[nodiscard]]
+
126inline exception return_exception_ptr(std::exception_ptr ex) noexcept {
+
127 return exception(std::move(ex));
+
128}
+
129
+
142[[deprecated("Use co_await coroutine::return_exception_ptr instead")]]
+
143[[nodiscard]]
+
144inline exception return_exception(std::exception_ptr ex) noexcept {
+
145 return exception(std::move(ex));
+
146}
+
147
+
148template<typename T>
+
149[[nodiscard]]
+
150exception return_exception(T&& t) noexcept {
+
151 log_exception_trace();
+
152 return exception(std::make_exception_ptr(std::forward<T>(t)));
+
153}
+
154
+
155} // coroutine
+
156
+
157inline auto operator co_await(coroutine::exception ex) noexcept {
+
158 return internal::exception_awaiter(std::move(ex.eptr));
+
159}
+
160
+
161} // seastar
+
promise - allows a future value to be made available at a later time.
Definition: future.hh:934
+
void set_exception(std::exception_ptr &&ex) noexcept
Marks the promise as failed.
Definition: future.hh:998
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: exception.hh:71
+
+ + + + diff --git a/master/coroutine_8hh_source.html b/master/coroutine_8hh_source.html new file mode 100644 index 000000000..2da1a7805 --- /dev/null +++ b/master/coroutine_8hh_source.html @@ -0,0 +1,318 @@ + + + + + + + +Seastar: seastar/core/coroutine.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
coroutine.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2019 ScyllaDB Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24
+
25#include <seastar/core/future.hh>
+
26#include <seastar/coroutine/exception.hh>
+
27#include <seastar/util/modules.hh>
+
28#include <seastar/util/std-compat.hh>
+
29
+
30
+
31#ifndef SEASTAR_MODULE
+
32#include <coroutine>
+
33#endif
+
34
+
35namespace seastar {
+
36
+
37namespace internal {
+
38
+
39template <typename T = void>
+
40class coroutine_traits_base {
+
41public:
+
42 class promise_type final : public seastar::task {
+
43 seastar::promise<T> _promise;
+
44 public:
+
45 promise_type() = default;
+
46 promise_type(promise_type&&) = delete;
+
47 promise_type(const promise_type&) = delete;
+
48
+
49 template<typename... U>
+
50 void return_value(U&&... value) {
+
51 _promise.set_value(std::forward<U>(value)...);
+
52 }
+
53
+
54 void return_value(coroutine::exception ce) noexcept {
+
55 _promise.set_exception(std::move(ce.eptr));
+
56 }
+
57
+
58 void set_exception(std::exception_ptr&& eptr) noexcept {
+
59 _promise.set_exception(std::move(eptr));
+
60 }
+
61
+
62 [[deprecated("Forwarding coroutine returns are deprecated as too dangerous. Use 'co_return co_await ...' until explicit syntax is available.")]]
+
63 void return_value(future<T>&& fut) noexcept {
+
64 fut.forward_to(std::move(_promise));
+
65 }
+
66
+
67 void unhandled_exception() noexcept {
+
68 _promise.set_exception(std::current_exception());
+
69 }
+
70
+
71 seastar::future<T> get_return_object() noexcept {
+
72 return _promise.get_future();
+
73 }
+
74
+
75 std::suspend_never initial_suspend() noexcept { return { }; }
+
76 std::suspend_never final_suspend() noexcept { return { }; }
+
77
+
78 virtual void run_and_dispose() noexcept override {
+
79 auto handle = std::coroutine_handle<promise_type>::from_promise(*this);
+
80 handle.resume();
+
81 }
+
82
+
83 task* waiting_task() noexcept override { return _promise.waiting_task(); }
+
84
+
85 scheduling_group set_scheduling_group(scheduling_group sg) noexcept {
+
86 return std::exchange(this->_sg, sg);
+
87 }
+
88 };
+
89};
+
90
+
91template <>
+
92class coroutine_traits_base<> {
+
93public:
+
94 class promise_type final : public seastar::task {
+
95 seastar::promise<> _promise;
+
96 public:
+
97 promise_type() = default;
+
98 promise_type(promise_type&&) = delete;
+
99 promise_type(const promise_type&) = delete;
+
100
+
101 void return_void() noexcept {
+
102 _promise.set_value();
+
103 }
+
104
+
105 void set_exception(std::exception_ptr&& eptr) noexcept {
+
106 _promise.set_exception(std::move(eptr));
+
107 }
+
108
+
109 void unhandled_exception() noexcept {
+
110 _promise.set_exception(std::current_exception());
+
111 }
+
112
+
113 seastar::future<> get_return_object() noexcept {
+
114 return _promise.get_future();
+
115 }
+
116
+
117 std::suspend_never initial_suspend() noexcept { return { }; }
+
118 std::suspend_never final_suspend() noexcept { return { }; }
+
119
+
120 virtual void run_and_dispose() noexcept override {
+
121 auto handle = std::coroutine_handle<promise_type>::from_promise(*this);
+
122 handle.resume();
+
123 }
+
124
+
125 task* waiting_task() noexcept override { return _promise.waiting_task(); }
+
126
+
127 scheduling_group set_scheduling_group(scheduling_group new_sg) noexcept {
+
128 return task::set_scheduling_group(new_sg);
+
129 }
+
130 };
+
131};
+
132
+
133template<bool CheckPreempt, typename T>
+
134struct awaiter {
+
135 seastar::future<T> _future;
+
136public:
+
137 explicit awaiter(seastar::future<T>&& f) noexcept : _future(std::move(f)) { }
+
138
+
139 awaiter(const awaiter&) = delete;
+
140 awaiter(awaiter&&) = delete;
+
141
+
142 bool await_ready() const noexcept {
+
143 return _future.available() && (!CheckPreempt || !need_preempt());
+
144 }
+
145
+
146 template<typename U>
+
147 void await_suspend(std::coroutine_handle<U> hndl) noexcept {
+
148 if (!CheckPreempt || !_future.available()) {
+
149 _future.set_coroutine(hndl.promise());
+
150 } else {
+
151 schedule(&hndl.promise());
+
152 }
+
153 }
+
154
+
155 T await_resume() { return _future.get(); }
+
156};
+
157
+
158template<bool CheckPreempt>
+
159struct awaiter<CheckPreempt, void> {
+
160 seastar::future<> _future;
+
161public:
+
162 explicit awaiter(seastar::future<>&& f) noexcept : _future(std::move(f)) { }
+
163
+
164 awaiter(const awaiter&) = delete;
+
165 awaiter(awaiter&&) = delete;
+
166
+
167 bool await_ready() const noexcept {
+
168 return _future.available() && (!CheckPreempt || !need_preempt());
+
169 }
+
170
+
171 template<typename U>
+
172 void await_suspend(std::coroutine_handle<U> hndl) noexcept {
+
173 if (!CheckPreempt || !_future.available()) {
+
174 _future.set_coroutine(hndl.promise());
+
175 } else {
+
176 schedule(&hndl.promise());
+
177 }
+
178 }
+
179
+
180 void await_resume() { _future.get(); }
+
181};
+
182
+
183} // seastar::internal
+
184
+
185SEASTAR_MODULE_EXPORT_BEGIN
+
186
+
187template<typename T>
+
188auto operator co_await(future<T> f) noexcept {
+
189 return internal::awaiter<true, T>(std::move(f));
+
190}
+
191
+
192namespace coroutine {
+
198template<typename T> struct [[nodiscard]] without_preemption_check : public seastar::future<T> {
+
199 explicit without_preemption_check(seastar::future<T>&& f) noexcept : seastar::future<T>(std::move(f)) {}
+
200};
+
201
+
222template <typename Func>
+
223class lambda {
+
224 Func* _func;
+
225public:
+
228 explicit lambda(Func&& func) : _func(&func) {}
+
230 template <typename... Args>
+
231 decltype(auto) operator()(Args&&... args) const {
+
232 return std::invoke(*_func, std::forward<Args>(args)...);
+
233 }
+
234};
+
235
+
236}
+
237
+
241template<typename T>
+
242auto operator co_await(coroutine::without_preemption_check<T> f) noexcept {
+
243 return internal::awaiter<false, T>(std::move(f));
+
244}
+
245
+
246SEASTAR_MODULE_EXPORT_END
+
247
+
248} // seastar
+
249
+
250
+
251namespace std {
+
252
+
253SEASTAR_MODULE_EXPORT
+
254template<typename T, typename... Args>
+
255class coroutine_traits<seastar::future<T>, Args...> : public seastar::internal::coroutine_traits_base<T> {
+
256};
+
257
+
258} // std
+
259
+
Definition: coroutine.hh:223
+
lambda(Func &&func)
Definition: coroutine.hh:228
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
bool available() const noexcept
Checks whether the future is available.
Definition: future.hh:1394
+
promise - allows a future value to be made available at a later time.
Definition: future.hh:934
+
void set_value(A &&... a) noexcept
Sets the promises value.
Definition: future.hh:990
+
Definition: task.hh:34
+
virtual task * waiting_task() noexcept=0
Returns the next task which is waiting for this task to complete execution, or nullptr.
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
STL namespace.
+ +
+ + + + diff --git a/master/critical__alloc__section_8hh_source.html b/master/critical__alloc__section_8hh_source.html new file mode 100644 index 000000000..245c2f4ee --- /dev/null +++ b/master/critical__alloc__section_8hh_source.html @@ -0,0 +1,153 @@ + + + + + + + +Seastar: seastar/util/critical_alloc_section.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
critical_alloc_section.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2020 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24namespace seastar {
+
25namespace memory {
+
26
+
27#ifdef SEASTAR_ENABLE_ALLOC_FAILURE_INJECTION
+
28
+
30namespace internal {
+
31
+
32// This variable is used in hot paths so we want to avoid the compiler
+
33// generating TLS init guards for it. In C++20 we have constinit to tell the
+
34// compiler that it can be initialized compile time (although gcc still doesn't
+
35// completely drops the init guards - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97848).
+
36// In < c++20 we use `__thread` which results in no TLS init guards generated.
+
37#ifdef __cpp_constinit
+
38extern thread_local constinit volatile int critical_alloc_section;
+
39#else
+
40extern __thread volatile int critical_alloc_section;
+
41#endif
+
42
+
43} // namespace internal
+
45
+
57class scoped_critical_alloc_section {
+
58public:
+
59 scoped_critical_alloc_section() {
+
60 // we assume the critical_alloc_section is thread local
+
61 // and there's seastar threads are non-preemptive.
+
62 // Otherwise, this would require an atomic variable
+
63 internal::critical_alloc_section = internal::critical_alloc_section + 1;
+
64 }
+
65 ~scoped_critical_alloc_section() {
+
66 internal::critical_alloc_section = internal::critical_alloc_section - 1;
+
67 }
+
68};
+
69
+
74inline bool is_critical_alloc_section() {
+
75 return bool(internal::critical_alloc_section);
+
76}
+
77
+
78#else // SEASTAR_ENABLE_ALLOC_FAILURE_INJECTION
+
79
+
80struct [[maybe_unused]] scoped_critical_alloc_section {};
+
81
+
82inline bool is_critical_alloc_section() {
+
83 return false;
+
84}
+
85
+
86#endif // SEASTAR_ENABLE_ALLOC_FAILURE_INJECTION
+
87
+
88} // namespace seastar
+
89} // namespace memory
+
Definition: critical_alloc_section.hh:80
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/defer_8hh_source.html b/master/defer_8hh_source.html new file mode 100644 index 000000000..253e13522 --- /dev/null +++ b/master/defer_8hh_source.html @@ -0,0 +1,159 @@ + + + + + + + +Seastar: seastar/util/defer.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
defer.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include "modules.hh"
+
25#ifndef SEASTAR_MODULE
+
26#include <concepts>
+
27#include <type_traits>
+
28#include <utility>
+
29#endif
+
30#include <seastar/util/modules.hh>
+
31
+
32
+
33#ifdef SEASTAR_DEFERRED_ACTION_REQUIRE_NOEXCEPT
+
34#define SEASTAR_DEFERRED_ACTION_NOEXCEPT noexcept
+
35#else
+
36#define SEASTAR_DEFERRED_ACTION_NOEXCEPT
+
37#endif
+
38
+
39template <typename Func>
+
40concept deferrable_action = requires (Func func) {
+
41 { func() } SEASTAR_DEFERRED_ACTION_NOEXCEPT -> std::same_as<void>;
+
42};
+
43
+
44namespace seastar {
+
45
+
46template <typename Func>
+
47requires deferrable_action<Func>
+
48class [[nodiscard]] deferred_action {
+
49 Func _func;
+
50 bool _cancelled = false;
+
51public:
+
52 static_assert(std::is_nothrow_move_constructible_v<Func>, "Func(Func&&) must be noexcept");
+
53 deferred_action(Func&& func) noexcept : _func(std::move(func)) {}
+
54 deferred_action(deferred_action&& o) noexcept : _func(std::move(o._func)), _cancelled(o._cancelled) {
+
55 o._cancelled = true;
+
56 }
+
57 deferred_action& operator=(deferred_action&& o) noexcept {
+
58 if (this != &o) {
+
59 this->~deferred_action();
+
60 new (this) deferred_action(std::move(o));
+
61 }
+
62 return *this;
+
63 }
+
64 deferred_action(const deferred_action&) = delete;
+
65 ~deferred_action() { if (!_cancelled) { _func(); }; }
+
66 void cancel() { _cancelled = true; }
+
67};
+
68
+
69SEASTAR_MODULE_EXPORT
+
70template <typename Func>
+
71requires deferrable_action<Func>
+
72inline
+ +
74defer(Func&& func) {
+
75 return deferred_action<Func>(std::forward<Func>(func));
+
76}
+
77
+
78}
+
Definition: defer.hh:48
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/deleter_8hh_source.html b/master/deleter_8hh_source.html new file mode 100644 index 000000000..ef875385b --- /dev/null +++ b/master/deleter_8hh_source.html @@ -0,0 +1,321 @@ + + + + + + + +Seastar: seastar/core/deleter.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
deleter.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <cassert>
+
26#include <cstdint>
+
27#include <cstdlib>
+
28#include <new>
+
29#include <utility>
+
30#include <seastar/util/modules.hh>
+
31#endif
+
32
+
33namespace seastar {
+
34
+
37
+
51SEASTAR_MODULE_EXPORT
+
52class deleter final {
+
53public:
+
55 struct impl;
+
56 struct raw_object_tag {};
+
58private:
+
59 // if bit 0 set, point to object to be freed directly.
+
60 impl* _impl = nullptr;
+
61public:
+
63 deleter() noexcept = default;
+
64 deleter(const deleter&) = delete;
+
66 deleter(deleter&& x) noexcept : _impl(x._impl) { x._impl = nullptr; }
+
68 explicit deleter(impl* i) noexcept : _impl(i) {}
+
69 deleter(raw_object_tag, void* object) noexcept
+
70 : _impl(from_raw_object(object)) {}
+
73 ~deleter();
+
74 deleter& operator=(deleter&& x) noexcept;
+
75 deleter& operator=(deleter&) = delete;
+
81 deleter share();
+
83 explicit operator bool() const noexcept { return bool(_impl); }
+
85 void reset(impl* i) {
+
86 this->~deleter();
+
87 new (this) deleter(i);
+
88 }
+
92 void append(deleter d);
+
93private:
+
94 static bool is_raw_object(impl* i) noexcept {
+
95 auto x = reinterpret_cast<uintptr_t>(i);
+
96 return x & 1;
+
97 }
+
98 bool is_raw_object() const noexcept {
+
99 return is_raw_object(_impl);
+
100 }
+
101 static void* to_raw_object(impl* i) noexcept {
+
102 auto x = reinterpret_cast<uintptr_t>(i);
+
103 return reinterpret_cast<void*>(x & ~uintptr_t(1));
+
104 }
+
105 void* to_raw_object() const noexcept {
+
106 return to_raw_object(_impl);
+
107 }
+
108 impl* from_raw_object(void* object) noexcept {
+
109 auto x = reinterpret_cast<uintptr_t>(object);
+
110 return reinterpret_cast<impl*>(x | 1);
+
111 }
+
112};
+
113
+
115struct deleter::impl {
+
116 unsigned refs = 1;
+
117 deleter next;
+
118 impl(deleter next) : next(std::move(next)) {}
+
119 virtual ~impl() {}
+
120};
+
122
+
123inline
+ +
125 if (is_raw_object()) {
+
126 std::free(to_raw_object());
+
127 return;
+
128 }
+
129 if (_impl && --_impl->refs == 0) {
+
130 delete _impl;
+
131 }
+
132}
+
133
+
134inline
+
135deleter& deleter::operator=(deleter&& x) noexcept {
+
136 if (this != &x) {
+
137 this->~deleter();
+
138 new (this) deleter(std::move(x));
+
139 }
+
140 return *this;
+
141}
+
142
+
144template <typename Deleter>
+
145struct lambda_deleter_impl final : deleter::impl {
+
146 Deleter del;
+
147 lambda_deleter_impl(deleter next, Deleter&& del)
+
148 : impl(std::move(next)), del(std::move(del)) {}
+
149 virtual ~lambda_deleter_impl() override { del(); }
+
150};
+
151
+
152template <typename Object>
+
153struct object_deleter_impl final : deleter::impl {
+
154 Object obj;
+
155 object_deleter_impl(deleter next, Object&& obj)
+
156 : impl(std::move(next)), obj(std::move(obj)) {}
+
157};
+
158
+
159template <typename Object>
+
160inline
+
161object_deleter_impl<Object>* make_object_deleter_impl(deleter next, Object obj) {
+
162 return new object_deleter_impl<Object>(std::move(next), std::move(obj));
+
163}
+
165
+
166
+
167SEASTAR_MODULE_EXPORT_BEGIN
+
175template <typename Object>
+
176deleter
+
177make_deleter(deleter next, Object o) {
+
178 return deleter(new lambda_deleter_impl<Object>(std::move(next), std::move(o)));
+
179}
+
180
+
186template <typename Object>
+ +
188make_deleter(Object o) {
+
189 return make_deleter(deleter(), std::move(o));
+
190}
+
191SEASTAR_MODULE_EXPORT_END
+
192
+
194struct free_deleter_impl final : deleter::impl {
+
195 void* obj;
+
196 free_deleter_impl(void* obj) : impl(deleter()), obj(obj) {}
+
197 free_deleter_impl(const free_deleter_impl&) = delete;
+
198 free_deleter_impl(free_deleter_impl&&) = delete;
+
199 virtual ~free_deleter_impl() override { std::free(obj); }
+
200};
+
202
+
203inline
+
204deleter
+ +
206 if (!_impl) {
+
207 return deleter();
+
208 }
+
209 if (is_raw_object()) {
+
210 _impl = new free_deleter_impl(to_raw_object());
+
211 }
+
212 ++_impl->refs;
+
213 return deleter(_impl);
+
214}
+
215
+
216// Appends 'd' to the chain of deleters. Avoids allocation if possible. For
+
217// performance reasons the current chain should be shorter and 'd' should be
+
218// longer.
+
219inline
+ +
221 if (!d._impl) {
+
222 return;
+
223 }
+
224 impl* next_impl = _impl;
+
225 deleter* next_d = this;
+
226 while (next_impl) {
+
227 if (next_impl == d._impl) {
+
228 return; // Already appended
+
229 }
+
230 if (is_raw_object(next_impl)) {
+
231 next_d->_impl = next_impl = new free_deleter_impl(to_raw_object(next_impl));
+
232 }
+
233
+
234 if (next_impl->refs != 1) {
+
235 next_d->_impl = next_impl = make_object_deleter_impl(deleter(next_impl), std::move(d));
+
236 return;
+
237 }
+
238
+
239 next_d = &next_impl->next;
+
240 next_impl = next_d->_impl;
+
241 }
+
242 next_d->_impl = d._impl;
+
243 d._impl = nullptr;
+
244}
+
245
+
246SEASTAR_MODULE_EXPORT_BEGIN
+
251inline
+ + +
254 if (!obj) {
+
255 return deleter();
+
256 }
+
257 return deleter(deleter::raw_object_tag(), obj);
+
258}
+
259
+
266inline
+ +
268make_free_deleter(deleter next, void* obj) {
+
269 return make_deleter(std::move(next), [obj] () mutable { std::free(obj); });
+
270}
+
271
+
274template <typename T>
+
275inline
+ + +
278 return deleter{make_object_deleter_impl(deleter(), std::move(obj))};
+
279}
+
280
+
283template <typename T>
+
284inline
+ + +
287 return deleter{make_object_deleter_impl(std::move(d), std::move(obj))};
+
288}
+
289SEASTAR_MODULE_EXPORT_END
+
290
+
292
+
293}
+
Definition: deleter.hh:52
+
deleter() noexcept=default
Constructs an empty deleter that does nothing in its destructor.
+
deleter make_free_deleter(deleter next, void *obj)
Definition: deleter.hh:268
+
deleter make_object_deleter(T &&obj)
Definition: deleter.hh:277
+
void append(deleter d)
Definition: deleter.hh:220
+
deleter make_object_deleter(deleter d, T &&obj)
Definition: deleter.hh:286
+
deleter make_deleter(Object o)
Definition: deleter.hh:188
+
~deleter()
Destroys the deleter and carries out the encapsulated action.
Definition: deleter.hh:124
+
deleter share()
Definition: deleter.hh:205
+
deleter make_free_deleter(void *obj)
Definition: deleter.hh:253
+
deleter make_deleter(deleter next, Object o)
Definition: deleter.hh:177
+
holds the implementation parts of the metrics layer, do not use directly.
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
STL namespace.
+
+ + + + diff --git a/master/deprecated.html b/master/deprecated.html new file mode 100644 index 000000000..de5dc175a --- /dev/null +++ b/master/deprecated.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: Deprecated List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
Deprecated List
+
+
+
+
Member seastar::json::formatter::to_json (const char *str)
+
A more robust overload should be preferred: to_json(const char*, size_t)
+
Member seastar::later () noexcept
+
Use yield() instead, or check_for_io_immediately() if your really need it.
+
Member seastar::rpc::protocol< Serializer, MsgType >::set_logger (std::function< void(const sstring &)> logger)
+
use the logger overload set_logger(::seastar::logger*) instead.
+
Member seastar::scollectd::add_disabled_polled_metric (const type_instance_id &id, description d, Args &&arg)
+
metrics registration should be done using the metrics layer
+
Member seastar::scollectd::add_polled_metric (const plugin_id &plugin, const plugin_instance_id &plugin_instance, const type_id &type, const scollectd::type_instance &type_instance, _Args &&... args)
+
metrics registration should be done using the metrics layer
+
Member seastar::scollectd::add_polled_metric (const plugin_id &plugin, const plugin_instance_id &plugin_instance, const type_id &type, const scollectd::type_instance &type_instance, description d, _Args &&... args)
+
metrics registration should be done using the metrics layer
+
Member seastar::scollectd::add_polled_metric (const type_instance_id &id, description d, Arg &&arg, bool enabled=true)
+
metrics registration should be done using the metrics layer
+
Member seastar::scollectd::add_polled_metric (const type_instance_id &id, Arg &&arg)
+
metrics registration should be done using the metrics layer
+
Member seastar::scollectd::options::collectd_hostname
+
use metrics::options::metrics_hostname instead
+
Member seastar::scollectd::total_bytes
+
metrics registration should be done using the metrics layer
+
+
+
+ + + + diff --git a/master/dhcp_8hh_source.html b/master/dhcp_8hh_source.html new file mode 100644 index 000000000..74611e8cc --- /dev/null +++ b/master/dhcp_8hh_source.html @@ -0,0 +1,162 @@ + + + + + + + +Seastar: seastar/net/dhcp.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
dhcp.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2014 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/net/ip.hh>
+
25#include <seastar/util/std-compat.hh>
+
26
+
27namespace seastar {
+
28
+
29namespace net {
+
30
+
31/*
+
32 * Simplistic DHCP query class.
+
33 * Due to the nature of the native stack,
+
34 * it operates on an "ipv4" object instead of,
+
35 * for example, an interface.
+
36 */
+
37class dhcp {
+
38public:
+
39 dhcp(ipv4 &);
+
40 dhcp(dhcp &&) noexcept;
+
41 ~dhcp();
+
42
+
43 static const steady_clock_type::duration default_timeout;
+
44
+
45 struct lease {
+
46 ipv4_address ip;
+
47 ipv4_address netmask;
+
48 ipv4_address broadcast;
+
49
+
50 ipv4_address gateway;
+
51 ipv4_address dhcp_server;
+
52
+
53 std::vector<ipv4_address> name_servers;
+
54
+
55 std::chrono::seconds lease_time;
+
56 std::chrono::seconds renew_time;
+
57 std::chrono::seconds rebind_time;
+
58
+
59 uint16_t mtu = 0;
+
60 };
+
61
+ +
63
+
74 result_type discover(const steady_clock_type::duration & = default_timeout);
+
75 result_type renew(const lease &, const steady_clock_type::duration & = default_timeout);
+
76 ip_packet_filter* get_ipv4_filter();
+
77private:
+
78 class impl;
+
79 std::unique_ptr<impl> _impl;
+
80};
+
81
+
82}
+
83
+
84}
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Definition: dhcp.hh:37
+
result_type discover(const steady_clock_type::duration &=default_timeout)
+
Definition: dhcp.hh:45
+
Definition: ip.hh:276
+
holds the implementation parts of the metrics layer, do not use directly.
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: ip.hh:241
+
Definition: ipv4_address.hh:35
+
+ + + + diff --git a/master/dir_0112a43248d46c258c74cc5fdb32b693.html b/master/dir_0112a43248d46c258c74cc5fdb32b693.html new file mode 100644 index 000000000..8565266be --- /dev/null +++ b/master/dir_0112a43248d46c258c74cc5fdb32b693.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: seastar/http/internal Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
internal Directory Reference
+
+
+ + + + +

+Files

file  content_source.hh [code]
 
+
+ + + + diff --git a/master/dir_164ee225dfef9a7fafe751cb228c28ba.html b/master/dir_164ee225dfef9a7fafe751cb228c28ba.html new file mode 100644 index 000000000..f1da08237 --- /dev/null +++ b/master/dir_164ee225dfef9a7fafe751cb228c28ba.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: seastar/websocket Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
websocket Directory Reference
+
+
+ + + + +

+Files

file  server.hh [code]
 
+
+ + + + diff --git a/master/dir_272c7f7d64135493a6307240ed26c98d.html b/master/dir_272c7f7d64135493a6307240ed26c98d.html new file mode 100644 index 000000000..4df1687bb --- /dev/null +++ b/master/dir_272c7f7d64135493a6307240ed26c98d.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: seastar Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
seastar Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + +

+Directories

directory  core
 
directory  coroutine
 
directory  http
 
directory  json
 
directory  net
 
directory  rpc
 
directory  testing
 
directory  util
 
directory  websocket
 
+
+ + + + diff --git a/master/dir_36d1ac35f335d2859b08ab8b966fee25.html b/master/dir_36d1ac35f335d2859b08ab8b966fee25.html new file mode 100644 index 000000000..aa5d44a73 --- /dev/null +++ b/master/dir_36d1ac35f335d2859b08ab8b966fee25.html @@ -0,0 +1,103 @@ + + + + + + + +Seastar: seastar/testing Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
testing Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + +

+Files

file  entry_point.hh [code]
 
file  exchanger.hh [code]
 
file  linux_perf_event.hh [code]
 
file  on_internal_error.hh [code]
 
file  perf_tests.hh [code]
 
file  random.hh [code]
 
file  seastar_test.hh [code]
 
file  test_case.hh [code]
 
file  test_runner.hh [code]
 
file  thread_test_case.hh [code]
 
+
+ + + + diff --git a/master/dir_398ded82155629db4a0c5348c563f5d9.html b/master/dir_398ded82155629db4a0c5348c563f5d9.html new file mode 100644 index 000000000..863316e96 --- /dev/null +++ b/master/dir_398ded82155629db4a0c5348c563f5d9.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: seastar/core/internal Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
internal Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  api-level.hh [code]
 
file  buffer_allocator.hh [code]
 
file  estimated_histogram.hh [code]
 
file  io_desc.hh [code]
 
file  io_intent.hh [code]
 
file  io_request.hh [code]
 
file  io_sink.hh [code]
 
file  poll.hh [code]
 
file  pollable_fd.hh [code]
 
file  read_state.hh [code]
 
file  run_in_background.hh [code]
 
file  stall_detector.hh [code]
 
file  uname.hh [code]
 
+
+ + + + diff --git a/master/dir_3e0e6f106ec3db3973138aad205077f5.html b/master/dir_3e0e6f106ec3db3973138aad205077f5.html new file mode 100644 index 000000000..50d8555ff --- /dev/null +++ b/master/dir_3e0e6f106ec3db3973138aad205077f5.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: seastar/util/internal Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
internal Directory Reference
+
+
+ + + + + + +

+Files

file  iovec_utils.hh [code]
 
file  magic.hh [code]
 
+
+ + + + diff --git a/master/dir_78874ac4b611a4298933195a38c0f70b.html b/master/dir_78874ac4b611a4298933195a38c0f70b.html new file mode 100644 index 000000000..7f6931c8a --- /dev/null +++ b/master/dir_78874ac4b611a4298933195a38c0f70b.html @@ -0,0 +1,97 @@ + + + + + + + +Seastar: seastar/coroutine Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
coroutine Directory Reference
+
+
+ + + + + + + + + + + + + + + + +

+Files

file  all.hh [code]
 
file  as_future.hh [code]
 
file  exception.hh [code]
 
file  generator.hh [code]
 
file  maybe_yield.hh [code]
 
file  parallel_for_each.hh [code]
 
file  switch_to.hh [code]
 
+
+ + + + diff --git a/master/dir_a703f5559ec24a637bac0bcd04b5b765.html b/master/dir_a703f5559ec24a637bac0bcd04b5b765.html new file mode 100644 index 000000000..37caa82f5 --- /dev/null +++ b/master/dir_a703f5559ec24a637bac0bcd04b5b765.html @@ -0,0 +1,145 @@ + + + + + + + +Seastar: seastar/net Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
net Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  api.hh [code]
 
file  arp.hh [code]
 
file  byteorder.hh [code]
 
file  config.hh [code]
 
file  const.hh [code]
 
file  dhcp.hh [code]
 
file  dns.hh [code]
 
file  dpdk.hh [code]
 
file  ethernet.hh [code]
 
file  inet_address.hh [code]
 
file  ip.hh [code]
 
file  ip_checksum.hh [code]
 
file  ipv4_address.hh [code]
 
file  ipv6_address.hh [code]
 
file  native-stack.hh [code]
 
file  net.hh [code]
 
file  packet-data-source.hh [code]
 
file  packet-util.hh [code]
 
file  packet.hh [code]
 
file  posix-stack.hh [code]
 
file  proxy.hh [code]
 
file  socket_defs.hh [code]
 
file  stack.hh [code]
 
file  tcp-stack.hh [code]
 
file  tcp.hh [code]
 
file  tls.hh [code]
 
file  toeplitz.hh [code]
 
file  udp.hh [code]
 
file  unix_address.hh [code]
 
file  virtio-interface.hh [code]
 
file  virtio.hh [code]
 
+
+ + + + diff --git a/master/dir_aa653bcfa53187f42b1e3eea894166ac.html b/master/dir_aa653bcfa53187f42b1e3eea894166ac.html new file mode 100644 index 000000000..0f5c977cc --- /dev/null +++ b/master/dir_aa653bcfa53187f42b1e3eea894166ac.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: seastar/json Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
json Directory Reference
+
+
+ + + + + + +

+Files

file  formatter.hh [code]
 
file  json_elements.hh [code]
 
+
+ + + + diff --git a/master/dir_b3f3d534021e1f465e5a169b2f0511ee.html b/master/dir_b3f3d534021e1f465e5a169b2f0511ee.html new file mode 100644 index 000000000..a11e57ce1 --- /dev/null +++ b/master/dir_b3f3d534021e1f465e5a169b2f0511ee.html @@ -0,0 +1,124 @@ + + + + + + + +Seastar: seastar/http Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
http Directory Reference
+
+
+ + + + +

+Directories

directory  internal
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  api_docs.hh [code]
 
file  client.hh [code]
 
file  common.hh [code]
 
file  exception.hh [code]
 
file  file_handler.hh [code]
 
file  function_handlers.hh [code]
 
file  handlers.hh [code]
 
file  httpd.hh [code]
 
file  json_path.hh [code]
 
file  matcher.hh [code]
 
file  matchrules.hh [code]
 
file  mime_types.hh [code]
 
file  reply.hh [code]
 
file  request.hh [code]
 
file  routes.hh [code]
 
file  short_streams.hh [code]
 
file  transformers.hh [code]
 
file  url.hh [code]
 
+
+ + + + diff --git a/master/dir_f47292a6f7dd7d478f3d6b4dba693acc.html b/master/dir_f47292a6f7dd7d478f3d6b4dba693acc.html new file mode 100644 index 000000000..e87831627 --- /dev/null +++ b/master/dir_f47292a6f7dd7d478f3d6b4dba693acc.html @@ -0,0 +1,168 @@ + + + + + + + +Seastar: seastar/util Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
util Directory Reference
+
+
+ + + + +

+Directories

directory  internal
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  alloc_failure_injector.hh [code]
 
file  backtrace.hh [code]
 
file  bool_class.hh [code]
 
file  closeable.hh [code]
 
file  concepts.hh [code]
 
file  conversions.hh [code]
 
file  critical_alloc_section.hh [code]
 
file  defer.hh [code]
 
file  eclipse.hh [code]
 
file  exceptions.hh [code]
 
file  file.hh [code]
 
file  function_input_iterator.hh [code]
 
file  indirect.hh [code]
 
file  is_smart_ptr.hh [code]
 
file  later.hh [code]
 
file  lazy.hh [code]
 
file  log-cli.hh [code]
 
file  log-impl.hh [code]
 
file  log.hh [code]
 
file  memory_diagnostics.hh [code]
 
file  modules.hh [code]
 
file  noncopyable_function.hh [code]
 
file  optimized_optional.hh [code]
 
file  print_safe.hh [code]
 
file  process.hh [code]
 
file  program-options.hh [code]
 
file  read_first_line.hh [code]
 
file  reference_wrapper.hh [code]
 
file  sampler.hh [code]
 
file  shared_token_bucket.hh [code]
 
file  short_streams.hh [code]
 
file  source_location-compat.hh [code]
 
file  spinlock.hh [code]
 
file  std-compat.hh [code]
 
file  string_utils.hh [code]
 
file  tmp_file.hh [code]
 
file  transform_iterator.hh [code]
 
file  tuple_utils.hh [code]
 
file  used_size.hh [code]
 
file  variant_utils.hh [code]
 
+
+ + + + diff --git a/master/dir_faaebf1f4e541fd72bba26c3060bcb10.html b/master/dir_faaebf1f4e541fd72bba26c3060bcb10.html new file mode 100644 index 000000000..be63c7f91 --- /dev/null +++ b/master/dir_faaebf1f4e541fd72bba26c3060bcb10.html @@ -0,0 +1,315 @@ + + + + + + + +Seastar: seastar/core Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
core Directory Reference
+
+
+ + + + +

+Directories

directory  internal
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  abort_on_ebadf.hh [code]
 
file  abort_on_expiry.hh [code]
 
file  abort_source.hh [code]
 
file  abortable_fifo.hh [code]
 
file  alien.hh [code]
 
file  align.hh [code]
 
file  aligned_buffer.hh [code]
 
file  app-template.hh [code]
 
file  array_map.hh [code]
 
file  bitops.hh [code]
 
file  bitset-iter.hh [code]
 
file  byteorder.hh [code]
 
file  cacheline.hh [code]
 
file  checked_ptr.hh [code]
 Contains a seastar::checked_ptr class implementation.
 
file  chunked_fifo.hh [code]
 
file  circular_buffer.hh [code]
 
file  circular_buffer_fixed_capacity.hh [code]
 
file  condition-variable.hh [code]
 
file  coroutine.hh [code]
 
file  deleter.hh [code]
 
file  distributed.hh [code]
 
file  do_with.hh [code]
 
file  dpdk_rte.hh [code]
 
file  enum.hh [code]
 
file  exception_hacks.hh [code]
 
file  execution_stage.hh [code]
 
file  expiring_fifo.hh [code]
 
file  fair_queue.hh [code]
 
file  file-types.hh [code]
 
file  file.hh [code]
 
file  fsnotify.hh [code]
 
file  fsqual.hh [code]
 
file  fstream.hh [code]
 
file  function_traits.hh [code]
 
file  future-util.hh [code]
 
file  future.hh [code]
 
file  gate.hh [code]
 
file  idle_cpu_handler.hh [code]
 
file  io_intent.hh [code]
 
file  io_priority_class.hh [code]
 
file  io_queue.hh [code]
 
file  iostream-impl.hh [code]
 
file  iostream.hh [code]
 
file  layered_file.hh [code]
 
file  linux-aio.hh [code]
 
file  loop.hh [code]
 
file  lowres_clock.hh [code]
 
file  make_task.hh [code]
 
file  manual_clock.hh [code]
 
file  map_reduce.hh [code]
 
file  memory.hh [code]
 
file  metrics.hh [code]
 header for metrics creation.
 
file  metrics_api.hh [code]
 header file for metric API layer (like prometheus or collectd)
 
file  metrics_registration.hh [code]
 holds the metric_groups definition needed by class that reports metrics
 
file  metrics_types.hh [code]
 
file  on_internal_error.hh [code]
 
file  pipe.hh [code]
 
file  polymorphic_temporary_buffer.hh [code]
 
file  posix.hh [code]
 
file  preempt.hh [code]
 
file  prefetch.hh [code]
 
file  print.hh [code]
 
file  prometheus.hh [code]
 
file  queue.hh [code]
 
file  ragel.hh [code]
 
file  reactor.hh [code]
 
file  reactor_config.hh [code]
 
file  relabel_config.hh [code]
 
file  report_exception.hh [code]
 
file  resource.hh [code]
 
file  rwlock.hh [code]
 
file  scattered_message.hh [code]
 
file  scheduling.hh [code]
 
file  scheduling_specific.hh [code]
 
file  scollectd.hh [code]
 
file  scollectd_api.hh [code]
 
file  seastar.hh [code]
 
file  semaphore.hh [code]
 
file  shard_id.hh [code]
 
file  sharded.hh [code]
 
file  shared_future.hh [code]
 
file  shared_mutex.hh [code]
 
file  shared_ptr.hh [code]
 
file  shared_ptr_debug_helper.hh [code]
 
file  shared_ptr_incomplete.hh [code]
 Include this header files when using lw_shared_ptr<some_incomplete_type>, at the point where some_incomplete_type is defined.
 
file  simple-stream.hh [code]
 
file  slab.hh [code]
 
file  sleep.hh [code]
 
file  smp.hh [code]
 
file  smp_options.hh [code]
 
file  sstring.hh [code]
 
file  stall_sampler.hh [code]
 
file  stream.hh [code]
 
file  systemwide_memory_barrier.hh [code]
 
file  task.hh [code]
 
file  temporary_buffer.hh [code]
 
file  thread.hh [code]
 
file  thread_cputime_clock.hh [code]
 
file  thread_impl.hh [code]
 
file  timed_out_error.hh [code]
 
file  timer-set.hh [code]
 
file  timer.hh [code]
 
file  transfer.hh [code]
 
file  unaligned.hh [code]
 
file  units.hh [code]
 
file  vector-data-sink.hh [code]
 
file  weak_ptr.hh [code]
 
file  when_all.hh [code]
 
file  when_any.hh [code]
 
file  with_scheduling_group.hh [code]
 
file  with_timeout.hh [code]
 
+
+ + + + diff --git a/master/dir_feb40e1fc3cbd17defe0210055d0e0b7.html b/master/dir_feb40e1fc3cbd17defe0210055d0e0b7.html new file mode 100644 index 000000000..c7c7a0d3f --- /dev/null +++ b/master/dir_feb40e1fc3cbd17defe0210055d0e0b7.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: seastar/rpc Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
rpc Directory Reference
+
+
+ + + + + + + + + + + + + + +

+Files

file  lz4_compressor.hh [code]
 
file  lz4_fragmented_compressor.hh [code]
 
file  multi_algo_compressor_factory.hh [code]
 
file  rpc.hh [code]
 
file  rpc_impl.hh [code]
 
file  rpc_types.hh [code]
 
+
+ + + + diff --git a/master/distributed_8hh_source.html b/master/distributed_8hh_source.html new file mode 100644 index 000000000..0da7d84ff --- /dev/null +++ b/master/distributed_8hh_source.html @@ -0,0 +1,118 @@ + + + + + + + +Seastar: seastar/core/distributed.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
distributed.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2015 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <seastar/core/sharded.hh>
+
26#include <seastar/util/modules.hh>
+
27#endif
+
28
+
29namespace seastar {
+
30
+
31SEASTAR_MODULE_EXPORT_BEGIN
+
32
+
33template <typename Service>
+
34using distributed = sharded<Service>;
+
35
+
36SEASTAR_MODULE_EXPORT_END
+
37
+
38}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/dns_8hh_source.html b/master/dns_8hh_source.html new file mode 100644 index 000000000..269aed823 --- /dev/null +++ b/master/dns_8hh_source.html @@ -0,0 +1,220 @@ + + + + + + + +Seastar: seastar/net/dns.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
dns.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2016 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <system_error>
+
25#include <vector>
+
26#include <unordered_map>
+
27#include <memory>
+
28#include <seastar/util/std-compat.hh>
+
29
+
30#include <seastar/core/future.hh>
+
31#include <seastar/core/sstring.hh>
+
32#include <seastar/core/shared_ptr.hh>
+
33#include <seastar/net/inet_address.hh>
+
34
+
35namespace seastar {
+
36
+
37struct ipv4_addr;
+
38
+
39class socket_address;
+
40class network_stack;
+
41
+
48namespace net {
+
49
+
53struct hostent {
+
54 // Primary name is always first
+
55 std::vector<sstring> names;
+
56 // Primary address is also always first.
+
57 std::vector<inet_address> addr_list;
+
58};
+
59
+
60typedef std::optional<inet_address::family> opt_family;
+
61
+
62struct srv_record {
+
63 unsigned short priority;
+
64 unsigned short weight;
+
65 unsigned short port;
+
66 sstring target;
+
67};
+
68
+ +
78public:
+
79 struct options {
+
80 std::optional<bool>
+
81 use_tcp_query;
+
82 std::optional<std::vector<inet_address>>
+
83 servers;
+
84 std::optional<std::chrono::milliseconds>
+
85 timeout;
+
86 std::optional<uint16_t>
+
87 tcp_port, udp_port;
+
88 std::optional<std::vector<sstring>>
+
89 domains;
+
90 };
+
91
+
92 enum class srv_proto {
+
93 tcp, udp
+
94 };
+
95 using srv_records = std::vector<srv_record>;
+
96
+ +
98 dns_resolver(dns_resolver&&) noexcept;
+
99 explicit dns_resolver(const options&);
+
100 explicit dns_resolver(network_stack&, const options& = {});
+
101 ~dns_resolver();
+
102
+
103 dns_resolver& operator=(dns_resolver&&) noexcept;
+
104
+
108 future<hostent> get_host_by_name(const sstring&, opt_family = {});
+ +
113
+
117 future<inet_address> resolve_name(const sstring&, opt_family = {});
+ +
122
+ +
127 const sstring& service,
+
128 const sstring& domain);
+
129
+ +
134private:
+
135 class impl;
+
136 shared_ptr<impl> _impl;
+
137};
+
138
+
139namespace dns {
+
140
+
141// See above. These functions simply queries using a shard-local
+
142// default-stack, default-opts resolver
+
143future<hostent> get_host_by_name(const sstring&, opt_family = {});
+
144future<hostent> get_host_by_addr(const inet_address&);
+
145
+
146future<inet_address> resolve_name(const sstring&, opt_family = {});
+
147future<sstring> resolve_addr(const inet_address&);
+
148
+
149future<std::vector<srv_record>> get_srv_records(dns_resolver::srv_proto proto,
+
150 const sstring& service,
+
151 const sstring& domain);
+
152
+
158 const std::error_category& error_category();
+
159
+
160}
+
161
+
162}
+
163
+
164}
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Definition: dns.hh:77
+
future< inet_address > resolve_name(const sstring &, opt_family={})
+
future< srv_records > get_srv_records(srv_proto proto, const sstring &service, const sstring &domain)
+
future< hostent > get_host_by_addr(const inet_address &)
+
future< hostent > get_host_by_name(const sstring &, opt_family={})
+ +
future< sstring > resolve_addr(const inet_address &)
+ +
Definition: inet_address.hh:50
+
Definition: tcp.hh:291
+
Definition: api.hh:429
+ +
holds the implementation parts of the metrics layer, do not use directly.
+
Definition: dns.hh:53
+
Definition: dns.hh:62
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/do__with_8hh_source.html b/master/do__with_8hh_source.html new file mode 100644 index 000000000..40c51525f --- /dev/null +++ b/master/do__with_8hh_source.html @@ -0,0 +1,215 @@ + + + + + + + +Seastar: seastar/core/do_with.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
do_with.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2015 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <seastar/core/future.hh>
+
26#include <seastar/util/modules.hh>
+
27#include <utility>
+
28#include <memory>
+
29#include <tuple>
+
30#endif
+
31
+
32namespace seastar {
+
33
+
34
+
36
+
37namespace internal {
+
38
+
39template <typename HeldState, typename Future>
+
40class do_with_state final : public continuation_base_from_future<Future>::type {
+
41 HeldState _held;
+
42 typename Future::promise_type _pr;
+
43public:
+
44 template<typename... T>
+
45 explicit do_with_state(T&&... args) : _held(std::forward<T>(args)...) {}
+
46 virtual void run_and_dispose() noexcept override {
+
47 _pr.set_urgent_state(std::move(this->_state));
+
48 delete this;
+
49 }
+
50 task* waiting_task() noexcept override {
+
51 return _pr.waiting_task();
+
52 }
+
53 HeldState& data() {
+
54 return _held;
+
55 }
+
56 Future get_future() {
+
57 return _pr.get_future();
+
58 }
+
59};
+
60
+
61}
+
63
+
64namespace internal {
+
65template <typename Tuple, size_t... Idx>
+
66inline
+
67auto
+
68cherry_pick_tuple(std::index_sequence<Idx...>, Tuple&& tuple) {
+
69 return std::forward_as_tuple(std::get<Idx>(std::forward<Tuple>(tuple))...);
+
70}
+
71
+
72template <typename Tuple, typename Seq>
+
73struct subtuple;
+
74
+
75template <typename Tuple, size_t... Idx>
+
76struct subtuple<Tuple, std::index_sequence<Idx...>> {
+
77 using type = std::tuple<std::decay_t<std::tuple_element_t<Idx, Tuple>>...>;
+
78};
+
79
+
80template <typename T1, typename T2, typename... More>
+
81inline
+
82auto
+
83do_with_impl(T1&& rv1, T2&& rv2, More&&... more) {
+
84 auto all = std::forward_as_tuple(
+
85 std::forward<T1>(rv1),
+
86 std::forward<T2>(rv2),
+
87 std::forward<More>(more)...);
+
88 constexpr size_t nr = std::tuple_size<decltype(all)>::value - 1;
+
89 using idx = std::make_index_sequence<nr>;
+
90 auto&& just_values = cherry_pick_tuple(idx(), std::move(all));
+
91 auto&& just_func = std::move(std::get<nr>(std::move(all)));
+
92 using value_tuple = typename subtuple<decltype(all), idx>::type;
+
93 using ret_type = decltype(std::apply(just_func, std::declval<value_tuple&>()));
+
94 auto task = std::apply(
+
95 [](auto&&... x) {
+
96 return std::make_unique<internal::do_with_state<value_tuple, ret_type>>(std::forward<decltype(x)>(x)...);
+
97 },
+
98 std::move(just_values));
+
99 auto fut = std::apply(just_func, task->data());
+
100 if (fut.available()) {
+
101 return fut;
+
102 }
+
103 auto ret = task->get_future();
+
104 internal::set_callback(std::move(fut), task.release());
+
105 return ret;
+
106}
+
107}
+
108
+
109
+
110SEASTAR_MODULE_EXPORT_BEGIN
+
111
+
114
+
132template <typename T1, typename T2, typename... More>
+
133inline
+
134auto
+
135do_with(T1&& rv1, T2&& rv2, More&&... more) noexcept {
+
136 auto func = internal::do_with_impl<T1, T2, More...>;
+
137 return futurize_invoke(func, std::forward<T1>(rv1), std::forward<T2>(rv2), std::forward<More>(more)...);
+
138}
+
139
+
147template<typename Lock, typename Func>
+
148inline
+
149auto with_lock(Lock& lock, Func&& func) {
+
150 return lock.lock().then([&lock, func = std::forward<Func>(func)] () mutable {
+
151 return futurize_invoke(func).finally([&lock] {
+
152 lock.unlock();
+
153 });
+
154 });
+
155}
+
156
+
158
+
159SEASTAR_MODULE_EXPORT_END
+
160
+
161}
+
auto do_with(T1 &&rv1, T2 &&rv2, More &&... more) noexcept
Definition: do_with.hh:135
+
auto with_lock(Lock &lock, Func &&func)
Definition: do_with.hh:149
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
STL namespace.
+
+ + + + diff --git a/master/doc.png b/master/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/master/doxygen.css b/master/doxygen.css new file mode 100644 index 000000000..2010785cd --- /dev/null +++ b/master/doxygen.css @@ -0,0 +1,1841 @@ +/* The standard CSS for doxygen 1.9.4 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + border-right: 1px solid #A3B4D7; + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +.compoundTemplParams { + color: #4665A2; + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font: 200% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 90% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +code.JavaDocCode { + direction:ltr; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/master/doxygen.svg b/master/doxygen.svg new file mode 100644 index 000000000..d42dad52d --- /dev/null +++ b/master/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/master/dpdk_8hh_source.html b/master/dpdk_8hh_source.html new file mode 100644 index 000000000..b130f2f36 --- /dev/null +++ b/master/dpdk_8hh_source.html @@ -0,0 +1,148 @@ + + + + + + + +Seastar: seastar/net/dpdk.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
dpdk.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <memory>
+
25#include <seastar/net/config.hh>
+
26#include <seastar/net/net.hh>
+
27#include <seastar/core/sstring.hh>
+
28#include <seastar/util/program-options.hh>
+
29
+
30namespace seastar {
+
31
+
32namespace net {
+
33
+ + + +
44
+ +
48};
+
49
+
50}
+
51
+
53
+
54#ifdef SEASTAR_HAVE_DPDK
+
55
+
56std::unique_ptr<net::device> create_dpdk_net_device(
+
57 uint16_t port_idx = 0,
+
58 uint16_t num_queues = 1,
+
59 bool use_lro = true,
+
60 bool enable_fc = true);
+
61
+
62std::unique_ptr<net::device> create_dpdk_net_device(
+
63 const net::hw_config& hw_cfg);
+
64
+
65namespace dpdk {
+
69uint32_t qp_mempool_obj_size(bool hugetlbfs_membackend);
+
70}
+
71
+
73
+
74#endif // SEASTAR_HAVE_DPDK
+
75
+
76}
+
Definition: program-options.hh:292
+ +
Definition: config.hh:39
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
DPDK configuration.
Definition: dpdk.hh:35
+
program_options::value< unsigned > dpdk_port_index
Definition: dpdk.hh:39
+
program_options::value< std::string > hw_fc
Enable HW Flow Control (on / off).
Definition: dpdk.hh:43
+
+ + + + diff --git a/master/dpdk__rte_8hh_source.html b/master/dpdk__rte_8hh_source.html new file mode 100644 index 000000000..b58a0cbd4 --- /dev/null +++ b/master/dpdk__rte_8hh_source.html @@ -0,0 +1,137 @@ + + + + + + + +Seastar: seastar/core/dpdk_rte.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
dpdk_rte.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18#pragma once
+
19
+
20#ifdef SEASTAR_HAVE_DPDK
+
21
+
22#include <bitset>
+
23#include <rte_config.h>
+
24#include <rte_ethdev.h>
+
25#include <rte_version.h>
+
26
+
27/*********************** Compat section ***************************************/
+
28// We currently support only versions 2.0 and above.
+
29#if (RTE_VERSION < RTE_VERSION_NUM(2,0,0,0))
+
30#error "DPDK version above 2.0.0 is required"
+
31#endif
+
32
+
33#if defined(RTE_MBUF_REFCNT_ATOMIC)
+
34#warning "CONFIG_RTE_MBUF_REFCNT_ATOMIC should be disabled in DPDK's " \
+
35 "config/common_linuxapp"
+
36#endif
+
37/******************************************************************************/
+
38
+
39namespace seastar {
+
40
+
41namespace dpdk {
+
42
+
43// DPDK Environment Abstraction Layer
+
44class eal {
+
45public:
+
46 using cpuset = std::bitset<RTE_MAX_LCORE>;
+
47
+
48 static void init(cpuset cpus, const std::string& argv0, const std::optional<std::string>& hugepages_path, bool dpdk_pmd);
+
55 static size_t mem_size(int num_cpus, bool hugetlbfs_membackend = true);
+
56 static bool initialized;
+
57};
+
58
+
59} // namespace dpdk
+
60
+
61}
+
62
+
63#endif // SEASTAR_HAVE_DPDK
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/dynsections.js b/master/dynsections.js new file mode 100644 index 000000000..3174bd7be --- /dev/null +++ b/master/dynsections.js @@ -0,0 +1,121 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +Seastar: seastar/util/eclipse.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
eclipse.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 *
+
21 */
+
22
+
23#pragma once
+
24
+
25// Workarounds for deficiencies in Eclipse's C++ parser
+
26//
+
27// Tell Eclipse that IN_ECLIPSE is defined so it will ignore all the unknown syntax.
+
28
+
29#ifndef IN_ECLIPSE
+
30
+
31#else
+
32
+
33// Eclipse doesn't grok alignof
+
34#define alignof sizeof
+
35
+
36#endif
+
+ + + + diff --git a/master/entry__point_8hh_source.html b/master/entry__point_8hh_source.html new file mode 100644 index 000000000..38c5a34c0 --- /dev/null +++ b/master/entry__point_8hh_source.html @@ -0,0 +1,113 @@ + + + + + + + +Seastar: seastar/testing/entry_point.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
entry_point.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18
+
19/*
+
20 * Copyright (C) 2018 ScyllaDB Ltd.
+
21 */
+
22
+
23#pragma once
+
24
+
25namespace seastar {
+
26
+
27namespace testing {
+
28
+
29int entry_point(int argc, char **argv);
+
30
+
31}
+
32
+
33}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/enum_8hh_source.html b/master/enum_8hh_source.html new file mode 100644 index 000000000..082d56845 --- /dev/null +++ b/master/enum_8hh_source.html @@ -0,0 +1,131 @@ + + + + + + + +Seastar: seastar/core/enum.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
enum.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2015 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24/*
+
25 * This header file defines a hash function for enum types, using the
+
26 * standard hash function of the underlying type (such as int). This makes
+
27 * it possible to inherit from this type to
+
28 */
+
29
+
30#ifndef SEASTAR_MODULE
+
31#include <type_traits>
+
32#include <functional>
+
33#include <cstddef>
+
34#include <seastar/util/modules.hh>
+
35#endif
+
36
+
37namespace seastar {
+
38
+
39SEASTAR_MODULE_EXPORT
+
40template <typename T>
+
41class enum_hash {
+
42 static_assert(std::is_enum_v<T>, "must be an enum");
+
43public:
+
44 std::size_t operator()(const T& e) const {
+
45 using utype = std::underlying_type_t<T>;
+
46 return std::hash<utype>()(static_cast<utype>(e));
+
47 }
+
48};
+
49
+
50}
+
Definition: enum.hh:41
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/estimated__histogram_8hh_source.html b/master/estimated__histogram_8hh_source.html new file mode 100644 index 000000000..9bcb8251b --- /dev/null +++ b/master/estimated__histogram_8hh_source.html @@ -0,0 +1,326 @@ + + + + + + + +Seastar: seastar/core/internal/estimated_histogram.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
estimated_histogram.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2023 ScyllaDB.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <cmath>
+
25#include <algorithm>
+
26#include <vector>
+
27#include <chrono>
+
28#include <seastar/core/metrics_types.hh>
+
29#include <seastar/core/print.hh>
+
30#include <seastar/core/bitops.hh>
+
31#include <limits>
+
32#include <array>
+
33
+
34namespace seastar::metrics::internal {
+
123template<uint64_t Min, uint64_t Max, size_t Precision>
+ +
125 static constexpr unsigned NUM_EXP_RANGES = log2floor(Max/Min);
+
126 static constexpr size_t NUM_BUCKETS = NUM_EXP_RANGES * Precision + 1;
+
127 static constexpr unsigned PRECISION_BITS = log2floor(Precision);
+
128 static constexpr unsigned BASESHIFT = log2floor(Min);
+
129 static constexpr uint64_t LOWER_BITS_MASK = Precision - 1;
+
130 static constexpr size_t MIN_ID = log2ceil(Min) * Precision + 1; // id0 (x,1]
+
131 std::array<uint64_t, NUM_BUCKETS> _buckets;
+
132public:
+ +
134 clear();
+
135 }
+
136
+
142 uint64_t get_bucket_lower_limit(uint16_t bucket_id) const {
+
143 if (bucket_id == NUM_BUCKETS - 1) {
+
144 return Max;
+
145 }
+
146 int16_t exp_rang = (bucket_id >> PRECISION_BITS);
+
147 return (Min << exp_rang) + ((bucket_id & LOWER_BITS_MASK) << (exp_rang + BASESHIFT - PRECISION_BITS));
+
148 }
+
149
+
155 uint64_t get_bucket_upper_limit(uint16_t bucket_id) const {
+
156 if (bucket_id == NUM_BUCKETS - 1) {
+
157 return std::numeric_limits<uint64_t>::max();
+
158 }
+
159 return get_bucket_lower_limit(bucket_id + 1);
+
160 }
+
161
+
167 uint16_t find_bucket_index(uint64_t val) const {
+
168 if (val >= Max) {
+
169 return NUM_BUCKETS - 1;
+
170 }
+
171 if (val <= Min) {
+
172 return 0;
+
173 }
+
174 uint16_t range = log2floor(val);
+
175 val >>= range - PRECISION_BITS; // leave the top most N+1 bits where N is the resolution.
+
176 return ((range - BASESHIFT) << PRECISION_BITS) + (val & LOWER_BITS_MASK);
+
177 }
+
178
+
182 void clear() {
+
183 std::fill(_buckets.begin(), _buckets.end(), 0);
+
184 }
+
185
+
190 void add(uint64_t n) {
+
191 _buckets.at(find_bucket_index(n))++;
+
192 }
+
193
+
201 uint64_t min() const {
+
202 for (size_t i = 0; i < NUM_BUCKETS; i ++) {
+
203 if (_buckets[i] > 0) {
+
204 return get_bucket_lower_limit(i);
+
205 }
+
206 }
+
207 return 0;
+
208 }
+
209
+
217 uint64_t max() const {
+
218 for (int i = NUM_BUCKETS - 1; i >= 0; i--) {
+
219 if (_buckets[i] > 0) {
+
220 return get_bucket_upper_limit(i);
+
221 }
+
222 }
+
223 return 0;
+
224 }
+
225
+ +
230 for (size_t i = 0; i < NUM_BUCKETS; i++) {
+
231 _buckets[i] += b.get(i);
+
232 }
+
233 return *this;
+
234 }
+
235
+
236 template<uint64_t A, uint64_t B, size_t C>
+ +
238
+
239 /*
+
240 * \brief returns the count in the given bucket
+
241 */
+
242 uint64_t get(size_t bucket) const {
+
243 return _buckets[bucket];
+
244 }
+
245
+
261 uint64_t quantile(float quantile) const {
+
262 if (quantile < 0 || quantile > 1.0) {
+
263 throw std::runtime_error("Invalid quantile value " + std::to_string(quantile) + ". Value should be between 0 and 1");
+
264 }
+
265 auto c = count();
+
266
+
267 if (!c) {
+
268 return 0; // no data
+
269 }
+
270
+
271 auto pcount = uint64_t(std::floor(c * quantile));
+
272 uint64_t elements = 0;
+
273 for (size_t i = 0; i < NUM_BUCKETS - 2; i++) {
+
274 if (_buckets[i]) {
+
275 elements += _buckets[i];
+
276 if (elements >= pcount) {
+
277 return get_bucket_lower_limit(i);
+
278 }
+
279 }
+
280 }
+
281 return Max; // overflowed value is in the requested quantile
+
282 }
+
283
+
288 uint64_t mean() const {
+
289 uint64_t elements = 0;
+
290 double sum = 0;
+
291 for (size_t i = 0; i < NUM_BUCKETS - 1; i++) {
+
292 elements += _buckets[i];
+
293 sum += _buckets[i] * get_bucket_lower_limit(i);
+
294 }
+
295 return (elements) ? sum / elements : 0;
+
296 }
+
297
+
301 size_t size() const {
+
302 return NUM_BUCKETS;
+
303 }
+
304
+
308 uint64_t count() const {
+
309 uint64_t sum = 0L;
+
310 for (size_t i = 0; i < NUM_BUCKETS; i++) {
+
311 sum += _buckets[i];
+
312 }
+
313 return sum;
+
314 }
+
315
+ +
320 for (size_t i = 0; i < NUM_BUCKETS; i++) {
+
321 _buckets[i] *= v;
+
322 }
+
323 return *this;
+
324 }
+
325
+
326 uint64_t& operator[](size_t b) noexcept {
+
327 return _buckets[b];
+
328 }
+
339 int32_t get_schema() const noexcept {
+
340 return PRECISION_BITS;
+
341 }
+
342
+
351 int32_t min_as_native_histogram_id() const noexcept {
+
352 return MIN_ID;
+
353 }
+
354
+
355 seastar::metrics::histogram to_metrics_histogram() const noexcept {
+ +
357 res.buckets.resize(size() - 1);
+
358 uint64_t cummulative_count = 0;
+
359 res.sample_sum = 0;
+ +
361
+
362 for (size_t i = 0; i < NUM_BUCKETS - 1; i++) {
+
363 auto& v = res.buckets[i];
+
364 v.upper_bound = get_bucket_lower_limit(i + 1);
+
365 cummulative_count += get(i);
+
366 v.count = cummulative_count;
+
367 res.sample_sum += get(i) * v.upper_bound;
+
368 }
+
369 // The count serves as the infinite bucket
+
370 res.sample_count = cummulative_count + get(NUM_BUCKETS - 1);
+
371 res.sample_sum += get(NUM_BUCKETS - 1) * get_bucket_lower_limit(NUM_BUCKETS - 1);
+
372 return res;
+
373 }
+
374};
+
375
+
376template<uint64_t Min, uint64_t Max, size_t NumBuckets>
+
377inline approximate_exponential_histogram<Min, Max, NumBuckets> base_estimated_histogram_merge(approximate_exponential_histogram<Min, Max, NumBuckets> a, const approximate_exponential_histogram<Min, Max, NumBuckets>& b) {
+
378 return a.merge(b);
+
379}
+
380
+ +
389public:
+ + +
392 return *this;
+
393 }
+
394
+
395 void add_micro(uint64_t n) {
+ +
397 }
+
398
+
399 template<typename T>
+
400 void add(const T& latency) {
+
401 add_micro(std::chrono::duration_cast<std::chrono::microseconds>(latency).count());
+
402 }
+
403};
+
404
+
405inline time_estimated_histogram time_estimated_histogram_merge(time_estimated_histogram a, const time_estimated_histogram& b) {
+
406 return a.merge(b);
+
407}
+
408}
+ +
uint64_t mean() const
returns the mean histogram value (average of bucket offsets, weighted by count) It will return 0 if t...
Definition: estimated_histogram.hh:288
+
void clear()
clear the current values.
Definition: estimated_histogram.hh:182
+
uint64_t get_bucket_upper_limit(uint16_t bucket_id) const
Returns the bucket upper limit given the bucket id. The last bucket (Infinity bucket) will return UMA...
Definition: estimated_histogram.hh:155
+
int32_t get_schema() const noexcept
get_schema the schema of a native histogram
Definition: estimated_histogram.hh:339
+
uint64_t max() const
returns the largest value that could have been added to this histogram. This method looks for the fir...
Definition: estimated_histogram.hh:217
+
uint64_t get_bucket_lower_limit(uint16_t bucket_id) const
Returns the bucket lower limit given the bucket id. The first and last bucket will always return the ...
Definition: estimated_histogram.hh:142
+
int32_t min_as_native_histogram_id() const noexcept
return the histogram min as a native histogram ID
Definition: estimated_histogram.hh:351
+
uint64_t count() const
returns the total number of values inserted
Definition: estimated_histogram.hh:308
+
approximate_exponential_histogram & merge(const approximate_exponential_histogram &b)
merge a histogram to the current one.
Definition: estimated_histogram.hh:229
+
approximate_exponential_histogram & operator*=(double v)
multiple all the buckets content in the histogram by a constant
Definition: estimated_histogram.hh:319
+
uint64_t min() const
returns the smallest value that could have been added to this histogram This method looks for the fir...
Definition: estimated_histogram.hh:201
+
size_t size() const
returns the number of buckets;
Definition: estimated_histogram.hh:301
+
uint64_t quantile(float quantile) const
get a histogram quantile
Definition: estimated_histogram.hh:261
+
void add(uint64_t n)
Add an item to the histogram Increments the count of the bucket holding that value.
Definition: estimated_histogram.hh:190
+
uint16_t find_bucket_index(uint64_t val) const
Find the bucket index for a given value The position of a value that is lower or equal to Min will al...
Definition: estimated_histogram.hh:167
+
estimated histogram for duration values time_estimated_histogram is used for short task timing....
Definition: estimated_histogram.hh:388
+
native histogram specific information
Definition: metrics_types.hh:51
+
Histogram data type.
Definition: metrics_types.hh:69
+
+ + + + diff --git a/master/ethernet_8hh_source.html b/master/ethernet_8hh_source.html new file mode 100644 index 000000000..c00a21446 --- /dev/null +++ b/master/ethernet_8hh_source.html @@ -0,0 +1,188 @@ + + + + + + + +Seastar: seastar/net/ethernet.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
ethernet.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#if FMT_VERSION >= 90000
+
25#include <fmt/ostream.h>
+
26#endif
+
27
+
28#include <array>
+
29#include <assert.h>
+
30#include <algorithm>
+
31#include <seastar/net/byteorder.hh>
+
32
+
33namespace seastar {
+
34
+
35namespace net {
+
36
+ +
38 ethernet_address() noexcept
+
39 : mac{} {}
+
40
+
41 ethernet_address(const uint8_t *eaddr) noexcept {
+
42 std::copy(eaddr, eaddr + 6, mac.begin());
+
43 }
+
44
+
45 ethernet_address(std::initializer_list<uint8_t> eaddr) noexcept {
+
46 assert(eaddr.size() == mac.size());
+
47 std::copy(eaddr.begin(), eaddr.end(), mac.begin());
+
48 }
+
49
+
50 std::array<uint8_t, 6> mac;
+
51
+
52 template <typename Adjuster>
+
53 void adjust_endianness(Adjuster) noexcept {}
+
54
+
55 static ethernet_address read(const char* p) noexcept {
+ +
57 std::copy_n(p, size(), reinterpret_cast<char*>(ea.mac.data()));\
+
58 return ea;
+
59 }
+
60 static ethernet_address consume(const char*& p) noexcept {
+
61 auto ea = read(p);
+
62 p += size();
+
63 return ea;
+
64 }
+
65 void write(char* p) const noexcept {
+
66 std::copy_n(reinterpret_cast<const char*>(mac.data()), size(), p);
+
67 }
+
68 void produce(char*& p) const noexcept {
+
69 write(p);
+
70 p += size();
+
71 }
+
72 static constexpr size_t size() noexcept {
+
73 return 6;
+
74 }
+
75} __attribute__((packed));
+
76
+
77std::ostream& operator<<(std::ostream& os, ethernet_address ea);
+
78
+
79struct ethernet {
+ +
81 static address broadcast_address() {
+
82 return {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+
83 }
+
84 static constexpr uint16_t arp_hardware_type() { return 1; }
+
85};
+
86
+
87struct eth_hdr {
+
88 ethernet_address dst_mac;
+
89 ethernet_address src_mac;
+
90 packed<uint16_t> eth_proto;
+
91 template <typename Adjuster>
+
92 auto adjust_endianness(Adjuster a) {
+
93 return a(eth_proto);
+
94 }
+
95} __attribute__((packed));
+
96
+
97ethernet_address parse_ethernet_address(std::string addr);
+
98}
+
99
+
100}
+
101
+
102#if FMT_VERSION >= 90000
+
103template <> struct fmt::formatter<seastar::net::ethernet_address> : fmt::ostream_formatter {};
+
104#endif
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: ethernet.hh:87
+
Definition: ethernet.hh:37
+
Definition: ethernet.hh:79
+
Definition: unaligned.hh:58
+
+ + + + diff --git a/master/examples.html b/master/examples.html new file mode 100644 index 000000000..f8a5467ab --- /dev/null +++ b/master/examples.html @@ -0,0 +1,80 @@ + + + + + + + +Seastar: Examples + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Examples
+
+
+
Here is a list of all examples:
+
+ + + + diff --git a/master/exception__hacks_8hh_source.html b/master/exception__hacks_8hh_source.html new file mode 100644 index 000000000..a06ae8dfa --- /dev/null +++ b/master/exception__hacks_8hh_source.html @@ -0,0 +1,106 @@ + + + + + + + +Seastar: seastar/core/exception_hacks.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
exception_hacks.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2017 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24namespace seastar {
+
25void init_phdr_cache();
+
26}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/exceptions_8hh_source.html b/master/exceptions_8hh_source.html new file mode 100644 index 000000000..94b15017b --- /dev/null +++ b/master/exceptions_8hh_source.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar/util/exceptions.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
exceptions.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18
+
19/*
+
20 * Copyright 2020 ScyllaDB
+
21 */
+
22
+
23#pragma once
+
24
+
25#include <filesystem>
+
26
+
27namespace seastar {
+
28
+
35std::filesystem::filesystem_error make_filesystem_error(const std::string& what, std::filesystem::path path, int error);
+
36
+
43std::filesystem::filesystem_error make_filesystem_error(const std::string& what, std::filesystem::path path1, std::filesystem::path path2, int error);
+
44
+
45} // namespace seastar
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
std::filesystem::filesystem_error make_filesystem_error(const std::string &what, std::filesystem::path path, int error)
make a filesystem_error for system calls with a single file operand.
+
+ + + + diff --git a/master/exchanger_8hh_source.html b/master/exchanger_8hh_source.html new file mode 100644 index 000000000..e775d3767 --- /dev/null +++ b/master/exchanger_8hh_source.html @@ -0,0 +1,170 @@ + + + + + + + +Seastar: seastar/testing/exchanger.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
exchanger.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2015 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <mutex>
+
25#include <condition_variable>
+
26#include <optional>
+
27
+
28namespace seastar {
+
29
+
30namespace testing {
+
31
+ +
33protected:
+ + +
36 std::mutex _mutex;
+
37 std::condition_variable _cv;
+
38 std::exception_ptr _exception;
+
39 void interrupt_ptr(std::exception_ptr e) {
+
40 std::unique_lock<std::mutex> lock(_mutex);
+
41 if (!_exception) {
+
42 _exception = e;
+
43 _cv.notify_all();
+
44 }
+
45 // FIXME: log if already interrupted
+
46 }
+
47};
+
48
+
49// Single-element blocking queue
+
50template <typename T>
+
51class exchanger : public exchanger_base {
+
52private:
+
53 std::optional<T> _element;
+
54
+
55public:
+
56 template <typename Exception>
+
57 void interrupt(Exception e) {
+
58 try {
+
59 throw e;
+
60 } catch (...) {
+
61 interrupt_ptr(std::current_exception());
+
62 }
+
63 }
+
64 void give(T value) {
+
65 std::unique_lock<std::mutex> lock(_mutex);
+
66 _cv.wait(lock, [this] { return !_element || _exception; });
+
67 if (_exception) {
+
68 std::rethrow_exception(_exception);
+
69 }
+
70 _element = value;
+
71 _cv.notify_one();
+
72 }
+
73 T take() {
+
74 std::unique_lock<std::mutex> lock(_mutex);
+
75 _cv.wait(lock, [this] { return bool(_element) || _exception; });
+
76 if (_exception) {
+
77 std::rethrow_exception(_exception);
+
78 }
+
79 auto v = *_element;
+
80 _element = {};
+
81 _cv.notify_one();
+
82 return v;
+
83 }
+
84};
+
85
+
86}
+
87
+
88}
+
Definition: exchanger.hh:32
+
Definition: exchanger.hh:51
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/execution__stage_8hh_source.html b/master/execution__stage_8hh_source.html new file mode 100644 index 000000000..cdfc7e5bf --- /dev/null +++ b/master/execution__stage_8hh_source.html @@ -0,0 +1,445 @@ + + + + + + + +Seastar: seastar/core/execution_stage.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
execution_stage.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2017 ScyllaDB Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/future.hh>
+
25#include <seastar/core/chunked_fifo.hh>
+
26#include <seastar/core/function_traits.hh>
+
27#include <seastar/core/sstring.hh>
+ + +
30#include <seastar/util/reference_wrapper.hh>
+
31#include <seastar/util/noncopyable_function.hh>
+
32#include <seastar/util/tuple_utils.hh>
+
33#include <seastar/util/std-compat.hh>
+
34#include <seastar/util/modules.hh>
+
35#ifndef SEASTAR_MODULE
+
36#include <fmt/format.h>
+
37#include <vector>
+
38#include <boost/range/irange.hpp>
+
39#include <boost/range/adaptor/transformed.hpp>
+
40#include <boost/container/static_vector.hpp>
+
41#endif
+
42
+
43namespace seastar {
+
44
+
73
+
76
+
78namespace internal {
+
79
+
80// Execution wraps lreferences in reference_wrapper so that the caller is forced
+
81// to use seastar::ref(). Then when the function is actually called the
+
82// reference is unwrapped. However, we need to distinguish between functions
+
83// which argument is lvalue reference and functions that take
+
84// reference_wrapper<> as an argument and not unwrap the latter. To solve this
+
85// issue reference_wrapper_for_es type is used for wrappings done automatically
+
86// by execution stage.
+
87template<typename T>
+
88struct reference_wrapper_for_es : reference_wrapper<T> {
+
89 reference_wrapper_for_es(reference_wrapper <T> rw) noexcept
+
90 : reference_wrapper<T>(std::move(rw)) {}
+
91};
+
92
+
93template<typename T>
+
94struct wrap_for_es {
+
95 using type = T;
+
96};
+
97
+
98template<typename T>
+
99struct wrap_for_es<T&> {
+
100 using type = reference_wrapper_for_es<T>;
+
101};
+
102
+
103template<typename T>
+
104struct wrap_for_es<T&&> {
+
105 using type = T;
+
106};
+
107
+
108template<typename T>
+
109decltype(auto) unwrap_for_es(T&& object) {
+
110 return std::forward<T>(object);
+
111}
+
112
+
113template<typename T>
+
114std::reference_wrapper<T> unwrap_for_es(reference_wrapper_for_es<T> ref) {
+
115 return std::reference_wrapper<T>(ref.get());
+
116}
+
117
+
118}
+
120
+
122SEASTAR_MODULE_EXPORT
+ +
124public:
+
125 struct stats {
+
126 uint64_t tasks_scheduled = 0;
+
127 uint64_t tasks_preempted = 0;
+
128 uint64_t function_calls_enqueued = 0;
+
129 uint64_t function_calls_executed = 0;
+
130 };
+
131protected:
+
132 bool _empty = true;
+
133 bool _flush_scheduled = false;
+ +
135 stats _stats;
+
136 sstring _name;
+
137 metrics::metric_group _metric_group;
+
138protected:
+
139 virtual void do_flush() noexcept = 0;
+
140public:
+
141 explicit execution_stage(const sstring& name, scheduling_group sg = {});
+
142 virtual ~execution_stage();
+
143
+
144 execution_stage(const execution_stage&) = delete;
+
145
+ +
153
+
155 const sstring& name() const noexcept { return _name; }
+
156
+
158 const stats& get_stats() const noexcept { return _stats; }
+
159
+
167 bool flush() noexcept;
+
168
+
172 bool poll() const noexcept {
+
173 return !_empty;
+
174 }
+
175};
+
176
+
178namespace internal {
+
179
+
180class execution_stage_manager {
+
181 std::vector<execution_stage*> _execution_stages;
+
182 std::unordered_map<sstring, execution_stage*> _stages_by_name;
+
183private:
+
184 execution_stage_manager() = default;
+
185 execution_stage_manager(const execution_stage_manager&) = delete;
+
186 execution_stage_manager(execution_stage_manager&&) = delete;
+
187public:
+
188 void register_execution_stage(execution_stage& stage);
+
189 void unregister_execution_stage(execution_stage& stage) noexcept;
+
190 void update_execution_stage_registration(execution_stage& old_es, execution_stage& new_es) noexcept;
+
191 execution_stage* get_stage(const sstring& name);
+
192 bool flush() noexcept;
+
193 bool poll() const noexcept;
+
194public:
+
195 static execution_stage_manager& get() noexcept;
+
196};
+
197
+
198}
+
200
+
209template<typename ReturnType, typename... Args>
+
210requires std::is_nothrow_move_constructible_v<std::tuple<Args...>>
+ +
212 using args_tuple = std::tuple<Args...>;
+
213 static_assert(std::is_nothrow_move_constructible_v<args_tuple>,
+
214 "Function arguments need to be nothrow move constructible");
+
215
+
216 static constexpr size_t flush_threshold = 128;
+
217 static constexpr size_t max_queue_length = 1024;
+
218
+
219 using return_type = futurize_t<ReturnType>;
+
220 using promise_type = typename return_type::promise_type;
+ +
222
+
223 struct work_item {
+
224 input_type _in;
+
225 promise_type _ready;
+
226
+
227 work_item(typename internal::wrap_for_es<Args>::type... args) : _in(std::move(args)...) { }
+
228
+
229 work_item(work_item&& other) = delete;
+
230 work_item(const work_item&) = delete;
+
231 work_item(work_item&) = delete;
+
232 };
+ +
234
+
235 noncopyable_function<ReturnType (Args...)> _function;
+
236private:
+
237 auto unwrap(input_type&& in) {
+
238 return tuple_map(std::move(in), [] (auto&& obj) {
+
239 return internal::unwrap_for_es(std::forward<decltype(obj)>(obj));
+
240 });
+
241 }
+
242
+
243 virtual void do_flush() noexcept override {
+
244 while (!_queue.empty()) {
+
245 auto& wi = _queue.front();
+
246 auto wi_in = std::move(wi._in);
+
247 auto wi_ready = std::move(wi._ready);
+
248 _queue.pop_front();
+
249 futurize<ReturnType>::apply(_function, unwrap(std::move(wi_in))).forward_to(std::move(wi_ready));
+
250 _stats.function_calls_executed++;
+
251
+
252 if (internal::scheduler_need_preempt()) {
+
253 _stats.tasks_preempted++;
+
254 break;
+
255 }
+
256 }
+
257 _empty = _queue.empty();
+
258 }
+
259public:
+
260 explicit concrete_execution_stage(const sstring& name, scheduling_group sg, noncopyable_function<ReturnType (Args...)> f)
+
261 : execution_stage(name, sg)
+
262 , _function(std::move(f))
+
263 {
+
264 _queue.reserve(flush_threshold);
+
265 }
+
266 explicit concrete_execution_stage(const sstring& name, noncopyable_function<ReturnType (Args...)> f)
+
267 : concrete_execution_stage(name, scheduling_group(), std::move(f)) {
+
268 }
+
269
+
291 return_type operator()(typename internal::wrap_for_es<Args>::type... args) {
+
292 if (_queue.size() >= max_queue_length) {
+
293 do_flush();
+
294 }
+
295 _queue.emplace_back(std::move(args)...);
+
296 _empty = false;
+
297 _stats.function_calls_enqueued++;
+
298 auto f = _queue.back()._ready.get_future();
+
299 flush();
+
300 return f;
+
301 }
+
302};
+
303
+ +
306public:
+ + + +
310 };
+
311 using stats = boost::container::static_vector<per_scheduling_group_stats, max_scheduling_groups()>;
+
312};
+
313
+
322template<typename ReturnType, typename... Args>
+
323requires std::is_nothrow_move_constructible_v<std::tuple<Args...>>
+ +
325 using return_type = futurize_t<ReturnType>;
+
326 using args_tuple = std::tuple<Args...>;
+
327 using per_group_stage_type = concrete_execution_stage<ReturnType, Args...>;
+
328
+
329 static_assert(std::is_nothrow_move_constructible_v<args_tuple>,
+
330 "Function arguments need to be nothrow move constructible");
+
331
+
332 sstring _name;
+
333 noncopyable_function<ReturnType (Args...)> _function;
+
334 std::vector<std::optional<per_group_stage_type>> _stage_for_group{max_scheduling_groups()};
+
335private:
+
336 per_group_stage_type make_stage_for_group(scheduling_group sg) {
+
337 // We can't use std::ref(function), because reference_wrapper decays to noncopyable_function& and
+
338 // that selects the noncopyable_function copy constructor. Use a lambda instead.
+
339 auto wrapped_function = [&_function = _function] (Args... args) {
+
340 return _function(std::forward<Args>(args)...);
+
341 };
+
342 auto name = fmt::format("{}.{}", _name, sg.name());
+
343 return per_group_stage_type(name, sg, wrapped_function);
+
344 }
+
345public:
+
352 inheriting_concrete_execution_stage(const sstring& name, noncopyable_function<ReturnType (Args...)> f)
+
353 : _name(std::move(name)),_function(std::move(f)) {
+
354 }
+
355
+
376 return_type operator()(typename internal::wrap_for_es<Args>::type... args) {
+
377 auto sg = current_scheduling_group();
+
378 auto sg_id = internal::scheduling_group_index(sg);
+
379 auto& slot = _stage_for_group[sg_id];
+
380 if (!slot) {
+
381 slot.emplace(make_stage_for_group(sg));
+
382 }
+
383 return (*slot)(std::move(args)...);
+
384 }
+
385
+
393 inheriting_execution_stage::stats get_stats() const noexcept {
+
394 inheriting_execution_stage::stats summary;
+
395 for (unsigned sg_id = 0; sg_id != _stage_for_group.size(); ++sg_id) {
+
396 auto sg = internal::scheduling_group_from_index(sg_id);
+
397 if (_stage_for_group[sg_id]) {
+
398 summary.push_back({sg, _stage_for_group[sg_id]->get_stats()});
+
399 }
+
400 }
+
401 return summary;
+
402 }
+
403};
+
404
+
405
+
407namespace internal {
+
408
+
409template <typename Ret, typename ArgsTuple>
+
410struct concrete_execution_stage_helper;
+
411
+
412template <typename Ret, typename... Args>
+
413struct concrete_execution_stage_helper<Ret, std::tuple<Args...>> {
+
414 using type = concrete_execution_stage<Ret, Args...>;
+
415};
+
416
+
417}
+
419
+
451SEASTAR_MODULE_EXPORT
+
452template<typename Function>
+
453auto make_execution_stage(const sstring& name, scheduling_group sg, Function&& fn) {
+
454 using traits = function_traits<Function>;
+
455 using ret_type = typename traits::return_type;
+
456 using args_as_tuple = typename traits::args_as_tuple;
+
457 using concrete_execution_stage = typename internal::concrete_execution_stage_helper<ret_type, args_as_tuple>::type;
+
458 return concrete_execution_stage(name, sg, std::forward<Function>(fn));
+
459}
+
460
+
491SEASTAR_MODULE_EXPORT
+
492template<typename Function>
+
493auto make_execution_stage(const sstring& name, Function&& fn) {
+
494 return make_execution_stage(name, scheduling_group(), std::forward<Function>(fn));
+
495}
+
496
+
520SEASTAR_MODULE_EXPORT
+
521template<typename Ret, typename Object, typename... Args>
+
522concrete_execution_stage<Ret, Object*, Args...>
+
523make_execution_stage(const sstring& name, scheduling_group sg, Ret (Object::*fn)(Args...)) {
+
524 return concrete_execution_stage<Ret, Object*, Args...>(name, sg, std::mem_fn(fn));
+
525}
+
526
+
527template<typename Ret, typename Object, typename... Args>
+
528concrete_execution_stage<Ret, const Object*, Args...>
+
529make_execution_stage(const sstring& name, scheduling_group sg, Ret (Object::*fn)(Args...) const) {
+
530 return concrete_execution_stage<Ret, const Object*, Args...>(name, sg, std::mem_fn(fn));
+
531}
+
532
+
533template<typename Ret, typename Object, typename... Args>
+
534concrete_execution_stage<Ret, Object*, Args...>
+
535make_execution_stage(const sstring& name, Ret (Object::*fn)(Args...)) {
+
536 return make_execution_stage(name, scheduling_group(), fn);
+
537}
+
538
+
539template<typename Ret, typename Object, typename... Args>
+
540concrete_execution_stage<Ret, const Object*, Args...>
+
541make_execution_stage(const sstring& name, Ret (Object::*fn)(Args...) const) {
+
542 return make_execution_stage(name, scheduling_group(), fn);
+
543}
+
544
+
546
+
547}
+ +
Concrete execution stage class.
Definition: execution_stage.hh:211
+
return_type operator()(typename internal::wrap_for_es< Args >::type... args)
Definition: execution_stage.hh:291
+
Base execution stage class.
Definition: execution_stage.hh:123
+
const sstring & name() const noexcept
Returns execution stage name.
Definition: execution_stage.hh:155
+
const stats & get_stats() const noexcept
Returns execution stage usage statistics.
Definition: execution_stage.hh:158
+
execution_stage(execution_stage &&)
+
bool flush() noexcept
+
bool poll() const noexcept
Definition: execution_stage.hh:172
+
Definition: execution_stage.hh:125
+
Concrete execution stage class, with support for automatic scheduling_group inheritance.
Definition: execution_stage.hh:324
+
inheriting_concrete_execution_stage(const sstring &name, noncopyable_function< ReturnType(Args...)> f)
Definition: execution_stage.hh:352
+
inheriting_execution_stage::stats get_stats() const noexcept
Definition: execution_stage.hh:393
+
return_type operator()(typename internal::wrap_for_es< Args >::type... args)
Definition: execution_stage.hh:376
+
Base class for execution stages with support for automatic scheduling_group inheritance.
Definition: execution_stage.hh:305
+ +
hold a single metric group Initialization is done in the constructor or with a call to add_group
Definition: metrics_registration.hh:160
+
Identifies function calls that are accounted as a group.
Definition: scheduling.hh:285
+
auto make_execution_stage(const sstring &name, scheduling_group sg, Function &&fn)
Definition: execution_stage.hh:453
+
auto tuple_map(const std::tuple< Elements... > &t, Function &&f)
Definition: tuple_utils.hh:139
+
reference_wrapper< T > ref(T &object) noexcept
Wraps reference in a reference_wrapper.
Definition: reference_wrapper.hh:62
+
Definition: tuple_utils.hh:96
+
header for metrics creation.
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
scheduling_group current_scheduling_group() noexcept
Returns the current scheduling group.
Definition: scheduling.hh:399
+
Definition: noncopyable_function.hh:37
+
Definition: function_traits.hh:62
+
STL namespace.
+ +
static type apply(Func &&func, std::tuple< FuncArgs... > &&args) noexcept
+
+ + + + diff --git a/master/expiring__fifo_8hh_source.html b/master/expiring__fifo_8hh_source.html new file mode 100644 index 000000000..5d160994e --- /dev/null +++ b/master/expiring__fifo_8hh_source.html @@ -0,0 +1,285 @@ + + + + + + + +Seastar: seastar/core/expiring_fifo.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
expiring_fifo.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2016 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <seastar/core/future.hh>
+
26#include <seastar/core/chunked_fifo.hh>
+
27#include <exception>
+
28#include <memory>
+
29#include <seastar/core/timer.hh>
+
30#include <seastar/core/lowres_clock.hh>
+
31#include <seastar/core/timed_out_error.hh>
+
32#include <seastar/util/modules.hh>
+
33#endif
+
34
+
35namespace seastar {
+
36
+
37template<typename T>
+ +
39 void operator()(T&) noexcept {};
+
40};
+
41
+
42template<typename... T>
+ +
44 void operator()(promise<T...>& pr) noexcept {
+
45 pr.set_exception(std::make_exception_ptr(timed_out_error()));
+
46 };
+
47};
+
48
+
57SEASTAR_MODULE_EXPORT
+
58template <typename T, typename OnExpiry = dummy_expiry<T>, typename Clock = lowres_clock>
+ +
60public:
+
61 using clock = Clock;
+
62 using time_point = typename Clock::time_point;
+
63private:
+
64 struct entry {
+
65 std::optional<T> payload; // disengaged means that it's expired
+
66 timer<Clock> tr;
+
67 entry(T&& payload_) : payload(std::move(payload_)) {}
+
68 entry(const T& payload_) : payload(payload_) {}
+
69 entry(T payload_, expiring_fifo& ef, time_point timeout)
+
70 : payload(std::move(payload_))
+
71 , tr([this, &ef] {
+
72 ef._on_expiry(*payload);
+
73 payload = std::nullopt;
+
74 --ef._size;
+
75 ef.drop_expired_front();
+
76 })
+
77 {
+
78 tr.arm(timeout);
+
79 }
+
80 entry(entry&& x) = delete;
+
81 entry(const entry& x) = delete;
+
82 };
+
83
+
84 // If engaged, represents the first element.
+
85 // This is to avoid large allocations done by chunked_fifo for single-element cases.
+
86 // expiring_fifo is used to implement wait lists in synchronization primitives
+
87 // and in some uses it's common to have at most one waiter.
+
88 std::unique_ptr<entry> _front;
+
89
+
90 // There is an invariant that the front element is never expired.
+ +
92 OnExpiry _on_expiry;
+
93 size_t _size = 0;
+
94
+
95 // Ensures that front() is not expired by dropping expired elements from the front.
+
96 void drop_expired_front() noexcept {
+
97 while (!_list.empty() && !_list.front().payload) {
+
98 _list.pop_front();
+
99 }
+
100 if (_front && !_front->payload) {
+
101 _front.reset();
+
102 }
+
103 }
+
104public:
+
105 expiring_fifo() noexcept = default;
+
106 expiring_fifo(OnExpiry on_expiry) noexcept(std::is_nothrow_move_constructible_v<OnExpiry>) : _on_expiry(std::move(on_expiry)) {}
+
107
+
108 expiring_fifo(expiring_fifo&& o) noexcept
+
109 : expiring_fifo(std::move(o._on_expiry)) {
+
110 // entry objects hold a reference to this so non-empty containers cannot be moved.
+
111 assert(o._size == 0);
+
112 }
+
113
+
114 expiring_fifo& operator=(expiring_fifo&& o) noexcept {
+
115 if (this != &o) {
+
116 this->~expiring_fifo();
+
117 new (this) expiring_fifo(std::move(o));
+
118 }
+
119 return *this;
+
120 }
+
121
+
127 bool empty() const noexcept {
+
128 return _size == 0;
+
129 }
+
130
+
132 explicit operator bool() const noexcept {
+
133 return !empty();
+
134 }
+
135
+
138 T& front() noexcept {
+
139 if (_front) {
+
140 return *_front->payload;
+
141 }
+
142 return *_list.front().payload;
+
143 }
+
144
+
147 const T& front() const noexcept {
+
148 if (_front) {
+
149 return *_front->payload;
+
150 }
+
151 return *_list.front().payload;
+
152 }
+
153
+
157 size_t size() const noexcept {
+
158 return _size;
+
159 }
+
160
+
165 void reserve(size_t size) {
+
166 return _list.reserve(size);
+
167 }
+
168
+
171 void push_back(const T& payload) {
+
172 if (_size == 0) {
+
173 _front = std::make_unique<entry>(payload);
+
174 } else {
+
175 _list.emplace_back(payload);
+
176 }
+
177 ++_size;
+
178 }
+
179
+
182 void push_back(T&& payload) {
+
183 if (_size == 0) {
+
184 _front = std::make_unique<entry>(std::move(payload));
+
185 } else {
+
186 _list.emplace_back(std::move(payload));
+
187 }
+
188 ++_size;
+
189 }
+
190
+
194 void push_back(T&& payload, time_point timeout) {
+
195 if (timeout == time_point::max()) {
+
196 push_back(std::move(payload));
+
197 return;
+
198 }
+
199 if (_size == 0) {
+
200 _front = std::make_unique<entry>(std::move(payload), *this, timeout);
+
201 } else {
+
202 _list.emplace_back(std::move(payload), *this, timeout);
+
203 }
+
204 ++_size;
+
205 }
+
206
+
209 void pop_front() noexcept {
+
210 if (_front) {
+
211 _front.reset();
+
212 } else {
+
213 _list.pop_front();
+
214 }
+
215 --_size;
+
216 drop_expired_front();
+
217 }
+
218};
+
219
+
220}
+ +
Definition: expiring_fifo.hh:59
+
bool empty() const noexcept
Definition: expiring_fifo.hh:127
+
size_t size() const noexcept
Definition: expiring_fifo.hh:157
+
void pop_front() noexcept
Definition: expiring_fifo.hh:209
+
void push_back(const T &payload)
Definition: expiring_fifo.hh:171
+
const T & front() const noexcept
Definition: expiring_fifo.hh:147
+
void reserve(size_t size)
Definition: expiring_fifo.hh:165
+
T & front() noexcept
Definition: expiring_fifo.hh:138
+
void push_back(T &&payload)
Definition: expiring_fifo.hh:182
+
void push_back(T &&payload, time_point timeout)
Definition: expiring_fifo.hh:194
+ +
void set_exception(std::exception_ptr &&ex) noexcept
Marks the promise as failed.
Definition: future.hh:998
+
Definition: timed_out_error.hh:34
+ +
void arm(time_point until, std::optional< duration > period={}) noexcept
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: expiring_fifo.hh:38
+
Definition: expiring_fifo.hh:43
+ +
+ + + + diff --git a/master/fair__queue_8hh_source.html b/master/fair__queue_8hh_source.html new file mode 100644 index 000000000..9039f047d --- /dev/null +++ b/master/fair__queue_8hh_source.html @@ -0,0 +1,441 @@ + + + + + + + +Seastar: seastar/core/fair_queue.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
fair_queue.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18
+
19/*
+
20 * Copyright (C) 2016 ScyllaDB
+
21 */
+
22#pragma once
+
23
+
24#include <boost/intrusive/slist.hpp>
+
25#include <seastar/core/sstring.hh>
+
26#include <seastar/core/shared_ptr.hh>
+
27#include <seastar/core/circular_buffer.hh>
+ +
29#include <seastar/util/shared_token_bucket.hh>
+
30
+
31#include <chrono>
+
32#include <cstdint>
+
33#include <functional>
+
34#include <optional>
+
35#include <queue>
+
36#include <fmt/ostream.h>
+
37
+
38namespace bi = boost::intrusive;
+
39
+
40namespace seastar {
+
41
+ +
50 uint32_t _weight = 0;
+
51 uint32_t _size = 0;
+
52public:
+
57 fair_queue_ticket(uint32_t weight, uint32_t size) noexcept;
+
58 fair_queue_ticket() noexcept {}
+
59 fair_queue_ticket operator+(fair_queue_ticket desc) const noexcept;
+
60 fair_queue_ticket operator-(fair_queue_ticket desc) const noexcept;
+ + +
69 bool operator==(const fair_queue_ticket& desc) const noexcept;
+
70
+
75 explicit operator bool() const noexcept;
+
76 bool is_non_zero() const noexcept;
+
77
+
78 friend std::ostream& operator<<(std::ostream& os, fair_queue_ticket t);
+
79
+
93 float normalize(fair_queue_ticket axis) const noexcept;
+
94
+
95 /*
+
96 * For both dimentions checks if the first rover is ahead of the
+
97 * second and returns the difference. If behind returns zero.
+
98 */
+
99 friend fair_queue_ticket wrapping_difference(const fair_queue_ticket& a, const fair_queue_ticket& b) noexcept;
+
100};
+
101
+
104
+ +
106public:
+
107 // The capacity_t represents tokens each entry needs to get dispatched, in
+
108 // a 'normalized' form -- converted from floating-point to fixed-point number
+
109 // and scaled accrding to fair-group's token-bucket duration
+
110 using capacity_t = uint64_t;
+
111 friend class fair_queue;
+
112
+
113private:
+
114 capacity_t _capacity;
+
115 bi::slist_member_hook<> _hook;
+
116
+
117public:
+
118 fair_queue_entry(capacity_t c) noexcept
+
119 : _capacity(c) {}
+
120 using container_list_t = bi::slist<fair_queue_entry,
+
121 bi::constant_time_size<false>,
+
122 bi::cache_last<true>,
+
123 bi::member_hook<fair_queue_entry, bi::slist_member_hook<>, &fair_queue_entry::_hook>>;
+
124
+
125 capacity_t capacity() const noexcept { return _capacity; }
+
126};
+
127
+ +
139public:
+
140 using capacity_t = fair_queue_entry::capacity_t;
+
141 using clock_type = std::chrono::steady_clock;
+
142
+
143 /*
+
144 * tldr; The math
+
145 *
+
146 * Bw, Br -- write/read bandwidth (bytes per second)
+
147 * Ow, Or -- write/read iops (ops per second)
+
148 *
+
149 * xx_max -- their maximum values (configured)
+
150 *
+
151 * Throttling formula:
+
152 *
+
153 * Bw/Bw_max + Br/Br_max + Ow/Ow_max + Or/Or_max <= K
+
154 *
+
155 * where K is the scalar value <= 1.0 (also configured)
+
156 *
+
157 * Bandwidth is bytes time derivatite, iops is ops time derivative, i.e.
+
158 * Bx = d(bx)/dt, Ox = d(ox)/dt. Then the formula turns into
+
159 *
+
160 * d(bw/Bw_max + br/Br_max + ow/Ow_max + or/Or_max)/dt <= K
+
161 *
+
162 * Fair queue tickets are {w, s} weight-size pairs that are
+
163 *
+
164 * s = read_base_count * br, for reads
+
165 * Br_max/Bw_max * read_base_count * bw, for writes
+
166 *
+
167 * w = read_base_count, for reads
+
168 * Or_max/Ow_max * read_base_count, for writes
+
169 *
+
170 * Thus the formula turns into
+
171 *
+
172 * d(sum(w/W + s/S))/dr <= K
+
173 *
+
174 * where {w, s} is the ticket value if a request and sum summarizes the
+
175 * ticket values from all the requests seen so far, {W, S} is the ticket
+
176 * value that corresonds to a virtual summary of Or_max requests of
+
177 * Br_max size total.
+
178 */
+
179
+
180 /*
+
181 * The normalization results in a float of the 2^-30 seconds order of
+
182 * magnitude. Not to invent float point atomic arithmetics, the result
+
183 * is converted to an integer by multiplying by a factor that's large
+
184 * enough to turn these values into a non-zero integer.
+
185 *
+
186 * Also, the rates in bytes/sec when adjusted by io-queue according to
+
187 * multipliers become too large to be stored in 32-bit ticket value.
+
188 * Thus the rate resolution is applied. The t.bucket is configured with a
+
189 * time period for which the speeds from F (in above formula) are taken.
+
190 */
+
191
+
192 static constexpr float fixed_point_factor = float(1 << 24);
+
193 using rate_resolution = std::milli;
+
194 using token_bucket_t = internal::shared_token_bucket<capacity_t, rate_resolution, internal::capped_release::no>;
+
195
+
196private:
+
197
+
198 /*
+
199 * The dF/dt <= K limitation is managed by the modified token bucket
+
200 * algo where tokens are ticket.normalize(cost_capacity), the refill
+
201 * rate is K.
+
202 *
+
203 * The token bucket algo must have the limit on the number of tokens
+
204 * accumulated. Here it's configured so that it accumulates for the
+
205 * latency_goal duration.
+
206 *
+
207 * The replenish threshold is the minimal number of tokens to put back.
+
208 * It's reserved for future use to reduce the load on the replenish
+
209 * timestamp.
+
210 *
+
211 * The timestamp, in turn, is the time when the bucket was replenished
+
212 * last. Every time a shard tries to get tokens from bucket it first
+
213 * tries to convert the time that had passed since this timestamp
+
214 * into more tokens in the bucket.
+
215 */
+
216
+
217 token_bucket_t _token_bucket;
+
218 const capacity_t _per_tick_threshold;
+
219
+
220public:
+
221
+
222 // Convert internal capacity value back into the real token
+
223 static double capacity_tokens(capacity_t cap) noexcept {
+
224 return (double)cap / fixed_point_factor / token_bucket_t::rate_cast(std::chrono::seconds(1)).count();
+
225 }
+
226
+
227 // Convert floating-point tokens into the token bucket capacity
+
228 static capacity_t tokens_capacity(double tokens) noexcept {
+
229 return tokens * token_bucket_t::rate_cast(std::chrono::seconds(1)).count() * fixed_point_factor;
+
230 }
+
231
+
232 auto capacity_duration(capacity_t cap) const noexcept {
+
233 return _token_bucket.duration_for(cap);
+
234 }
+
235
+
236 struct config {
+
237 sstring label = "";
+
238 /*
+
239 * There are two "min" values that can be configured. The former one
+
240 * is the minimal weight:size pair that the upper layer is going to
+
241 * submit. However, it can submit _larger_ values, and the fair queue
+
242 * must accept those as large as the latter pair (but it can accept
+
243 * even larger values, of course)
+
244 */
+
245 double min_tokens = 0.0;
+
246 double limit_min_tokens = 0.0;
+
247 std::chrono::duration<double> rate_limit_duration = std::chrono::milliseconds(1);
+
248 };
+
249
+
250 explicit fair_group(config cfg, unsigned nr_queues);
+
251 fair_group(fair_group&&) = delete;
+
252
+
253 capacity_t maximum_capacity() const noexcept { return _token_bucket.limit(); }
+
254 capacity_t per_tick_grab_threshold() const noexcept { return _per_tick_threshold; }
+
255 capacity_t grab_capacity(capacity_t cap) noexcept;
+
256 clock_type::time_point replenished_ts() const noexcept { return _token_bucket.replenished_ts(); }
+
257 void replenish_capacity(clock_type::time_point now) noexcept;
+
258 void maybe_replenish_capacity(clock_type::time_point& local_ts) noexcept;
+
259
+
260 capacity_t capacity_deficiency(capacity_t from) const noexcept;
+
261
+
262 std::chrono::duration<double> rate_limit_duration() const noexcept {
+
263 std::chrono::duration<double, rate_resolution> dur((double)_token_bucket.limit() / _token_bucket.rate());
+
264 return std::chrono::duration_cast<std::chrono::duration<double>>(dur);
+
265 }
+
266
+
267 const token_bucket_t& token_bucket() const noexcept { return _token_bucket; }
+
268};
+
269
+ +
290public:
+
295 struct config {
+
296 sstring label = "";
+
297 std::chrono::microseconds tau = std::chrono::milliseconds(5);
+
298 };
+
299
+
300 using class_id = unsigned int;
+
301 class priority_class_data;
+
302 using capacity_t = fair_group::capacity_t;
+
303 using signed_capacity_t = std::make_signed_t<capacity_t>;
+
304
+
305private:
+
306 using clock_type = std::chrono::steady_clock;
+
307 using priority_class_ptr = priority_class_data*;
+
308 struct class_compare {
+
309 bool operator() (const priority_class_ptr& lhs, const priority_class_ptr & rhs) const noexcept;
+
310 };
+
311
+
312 class priority_queue : public std::priority_queue<priority_class_ptr, std::vector<priority_class_ptr>, class_compare> {
+
313 using super = std::priority_queue<priority_class_ptr, std::vector<priority_class_ptr>, class_compare>;
+
314 public:
+
315 void reserve(size_t len) {
+
316 c.reserve(len);
+
317 }
+
318
+
319 void assert_enough_capacity() const noexcept {
+
320 assert(c.size() < c.capacity());
+
321 }
+
322 };
+
323
+
324 config _config;
+
325 fair_group& _group;
+
326 clock_type::time_point _group_replenish;
+
327 fair_queue_ticket _resources_executing;
+
328 fair_queue_ticket _resources_queued;
+
329 priority_queue _handles;
+
330 std::vector<std::unique_ptr<priority_class_data>> _priority_classes;
+
331 size_t _nr_classes = 0;
+
332 capacity_t _last_accumulated = 0;
+
333
+
334 /*
+
335 * When the shared capacity os over the local queue delays
+
336 * further dispatching untill better times
+
337 *
+
338 * \head -- the value group head rover is expected to cross
+
339 * \cap -- the capacity that's accounted on the group
+
340 *
+
341 * The last field is needed to "rearm" the wait in case
+
342 * queue decides that it wants to dispatch another capacity
+
343 * in the middle of the waiting
+
344 */
+
345 struct pending {
+
346 capacity_t head;
+
347 capacity_t cap;
+
348
+
349 pending(capacity_t t, capacity_t c) noexcept : head(t), cap(c) {}
+
350 };
+
351
+
352 std::optional<pending> _pending;
+
353
+
354 void push_priority_class(priority_class_data& pc) noexcept;
+
355 void push_priority_class_from_idle(priority_class_data& pc) noexcept;
+
356 void pop_priority_class(priority_class_data& pc) noexcept;
+
357 void plug_priority_class(priority_class_data& pc) noexcept;
+
358 void unplug_priority_class(priority_class_data& pc) noexcept;
+
359
+
360 enum class grab_result { grabbed, cant_preempt, pending };
+
361 grab_result grab_capacity(const fair_queue_entry& ent) noexcept;
+
362 grab_result grab_pending_capacity(const fair_queue_entry& ent) noexcept;
+
363public:
+
367 explicit fair_queue(fair_group& shared, config cfg);
+
368 fair_queue(fair_queue&&) = delete;
+
369 ~fair_queue();
+
370
+
371 sstring label() const noexcept { return _config.label; }
+
372
+
376 void register_priority_class(class_id c, uint32_t shares);
+
377
+ +
382
+
383 void update_shares_for_class(class_id c, uint32_t new_shares);
+
384
+ +
387
+ +
390
+
391 capacity_t tokens_capacity(double tokens) const noexcept {
+
392 return _group.tokens_capacity(tokens);
+
393 }
+
394
+
395 capacity_t maximum_capacity() const noexcept {
+
396 return _group.maximum_capacity();
+
397 }
+
398
+
403 void queue(class_id c, fair_queue_entry& ent) noexcept;
+
404
+
405 void plug_class(class_id c) noexcept;
+
406 void unplug_class(class_id c) noexcept;
+
407
+
410 void notify_request_finished(fair_queue_entry::capacity_t cap) noexcept;
+
411 void notify_request_cancelled(fair_queue_entry& ent) noexcept;
+
412
+
414 void dispatch_requests(std::function<void(fair_queue_entry&)> cb);
+
415
+
416 clock_type::time_point next_pending_aio() const noexcept;
+
417
+
418 std::vector<seastar::metrics::impl::metric_definition_impl> metrics(class_id c);
+
419};
+
421
+
422}
+
423
+
424#if FMT_VERSION >= 90000
+
425template <> struct fmt::formatter<seastar::fair_queue_ticket> : fmt::ostream_formatter {};
+
426#endif
+
Group of queues class.
Definition: fair_queue.hh:138
+
Definition: fair_queue.hh:236
+
Definition: fair_queue.hh:105
+
describes a request that passes through the fair_queue.
Definition: fair_queue.hh:49
+
fair_queue_ticket(uint32_t weight, uint32_t size) noexcept
+
bool operator==(const fair_queue_ticket &desc) const noexcept
+
fair_queue_ticket & operator-=(fair_queue_ticket desc) noexcept
+
float normalize(fair_queue_ticket axis) const noexcept
+
fair_queue_ticket & operator+=(fair_queue_ticket desc) noexcept
+
Fair queuing class.
Definition: fair_queue.hh:289
+
void queue(class_id c, fair_queue_entry &ent) noexcept
+
void unregister_priority_class(class_id c)
+
fair_queue_ticket resources_currently_executing() const
+
fair_queue(fair_group &shared, config cfg)
+
void notify_request_finished(fair_queue_entry::capacity_t cap) noexcept
+
void dispatch_requests(std::function< void(fair_queue_entry &)> cb)
Try to execute new requests if there is capacity left in the queue.
+
fair_queue_ticket resources_currently_waiting() const
+
void register_priority_class(class_id c, uint32_t shares)
+
Fair Queue configuration structure.
Definition: fair_queue.hh:295
+
future now()
Returns a ready future.
Definition: later.hh:35
+
holds the metric_groups definition needed by class that reports metrics
+
holds the implementation parts of the metrics layer, do not use directly.
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
STL namespace.
+
+ + + + diff --git a/master/file-types_8hh_source.html b/master/file-types_8hh_source.html new file mode 100644 index 000000000..f95f0eacb --- /dev/null +++ b/master/file-types_8hh_source.html @@ -0,0 +1,239 @@ + + + + + + + +Seastar: seastar/core/file-types.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
file-types.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2015 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <fcntl.h>
+
26#include <sys/stat.h>
+
27#include <type_traits>
+
28#include <seastar/util/modules.hh>
+
29#endif
+
30
+
31namespace seastar {
+
32
+
33SEASTAR_MODULE_EXPORT_BEGIN
+
34
+
37
+
41enum class open_flags {
+
42 rw = O_RDWR,
+
43 ro = O_RDONLY,
+
44 wo = O_WRONLY,
+
45 create = O_CREAT,
+
46 truncate = O_TRUNC,
+
47 exclusive = O_EXCL,
+
48 dsync = O_DSYNC,
+
49};
+
50
+
51inline open_flags operator|(open_flags a, open_flags b) {
+
52 return open_flags(std::underlying_type_t<open_flags>(a) | std::underlying_type_t<open_flags>(b));
+
53}
+
54
+
55inline void operator|=(open_flags& a, open_flags b) {
+
56 a = (a | b);
+
57}
+
58
+
59inline open_flags operator&(open_flags a, open_flags b) {
+
60 return open_flags(std::underlying_type_t<open_flags>(a) & std::underlying_type_t<open_flags>(b));
+
61}
+
62
+
63inline void operator&=(open_flags& a, open_flags b) {
+
64 a = (a & b);
+
65}
+
66
+ +
71 unknown,
+
72 block_device,
+
73 char_device,
+
74 directory,
+
75 fifo,
+
76 link,
+
77 regular,
+
78 socket,
+
79};
+
80
+
81namespace internal::linux_abi {
+
82
+
83// From getdents(2):
+
84// check for 64-bit inode number
+
85static_assert(sizeof(ino_t) == 8, "large file support not enabled");
+
86static_assert(sizeof(off_t) == 8, "large file support not enabled");
+
87
+
88// From getdents(2):
+
89struct linux_dirent64 {
+
90 ino_t d_ino; /* 64-bit inode number */
+
91 off_t d_off; /* 64-bit offset to next structure */
+
92 unsigned short d_reclen; /* Size of this dirent */
+
93 unsigned char d_type; /* File type */
+
94 char d_name[]; /* Filename (null-terminated) */
+
95};
+
96
+
97} // internal::linux_abi namespace
+
98
+
100enum class fs_type {
+
101 other,
+
102 xfs,
+
103 ext2,
+
104 ext3,
+
105 ext4,
+
106 btrfs,
+
107 hfs,
+
108 tmpfs,
+
109};
+
110
+
111// Access flags for files/directories
+
112enum class access_flags {
+
113 exists = F_OK,
+
114 read = R_OK,
+
115 write = W_OK,
+
116 execute = X_OK,
+
117
+
118 // alias for directory access
+
119 lookup = execute,
+
120};
+
121
+
122inline access_flags operator|(access_flags a, access_flags b) {
+
123 return access_flags(std::underlying_type_t<access_flags>(a) | std::underlying_type_t<access_flags>(b));
+
124}
+
125
+
126inline access_flags operator&(access_flags a, access_flags b) {
+
127 return access_flags(std::underlying_type_t<access_flags>(a) & std::underlying_type_t<access_flags>(b));
+
128}
+
129
+
130// Permissions for files/directories
+
131enum class file_permissions {
+
132 user_read = S_IRUSR, // Read by owner
+
133 user_write = S_IWUSR, // Write by owner
+
134 user_execute = S_IXUSR, // Execute by owner
+
135
+
136 group_read = S_IRGRP, // Read by group
+
137 group_write = S_IWGRP, // Write by group
+
138 group_execute = S_IXGRP, // Execute by group
+
139
+
140 others_read = S_IROTH, // Read by others
+
141 others_write = S_IWOTH, // Write by others
+
142 others_execute = S_IXOTH, // Execute by others
+
143
+
144 user_permissions = user_read | user_write | user_execute,
+
145 group_permissions = group_read | group_write | group_execute,
+
146 others_permissions = others_read | others_write | others_execute,
+
147 all_permissions = user_permissions | group_permissions | others_permissions,
+
148
+
149 default_file_permissions = user_read | user_write | group_read | group_write | others_read | others_write, // 0666
+
150 default_dir_permissions = all_permissions, // 0777
+
151};
+
152
+
153inline constexpr file_permissions operator|(file_permissions a, file_permissions b) {
+
154 return file_permissions(std::underlying_type_t<file_permissions>(a) | std::underlying_type_t<file_permissions>(b));
+
155}
+
156
+
157inline constexpr file_permissions operator&(file_permissions a, file_permissions b) {
+
158 return file_permissions(std::underlying_type_t<file_permissions>(a) & std::underlying_type_t<file_permissions>(b));
+
159}
+
160
+
162
+
163SEASTAR_MODULE_EXPORT_END
+
164
+
165} // namespace seastar
+
Definition: api.hh:283
+
directory_entry_type
Definition: file-types.hh:70
+
fs_type
Enumeration describing the type of a particular filesystem.
Definition: file-types.hh:100
+
open_flags
Definition: file-types.hh:41
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/file__handler_8hh_source.html b/master/file__handler_8hh_source.html new file mode 100644 index 000000000..93401f718 --- /dev/null +++ b/master/file__handler_8hh_source.html @@ -0,0 +1,202 @@ + + + + + + + +Seastar: seastar/http/file_handler.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
file_handler.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2015 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/http/handlers.hh>
+
25#include <seastar/core/iostream.hh>
+
26#include <seastar/util/modules.hh>
+
27
+
28namespace seastar {
+
29
+
30namespace httpd {
+
31
+
32SEASTAR_MODULE_EXPORT_BEGIN
+ +
45public:
+
52 virtual output_stream<char> transform(std::unique_ptr<http::request> req,
+
53 const sstring& extension, output_stream<char>&& s) = 0;
+
54 file_transformer() = default;
+ +
56 virtual ~file_transformer() = default;
+
57};
+
58
+ +
67public:
+ +
69 : transformer(p) {
+
70
+
71 }
+
72
+ +
74
+ +
81 transformer = t;
+
82 return this;
+
83 }
+
84
+
91 bool redirect_if_needed(const http::request& req, http::reply& rep) const;
+
92
+
98 static sstring get_extension(const sstring& file);
+
99
+
100protected:
+
101
+ +
109 std::unique_ptr<http::request> req, std::unique_ptr<http::reply> rep);
+
110 file_transformer* transformer;
+
111
+
112 output_stream<char> get_stream(std::unique_ptr<http::request> req,
+
113 const sstring& extension, output_stream<char>&& s);
+
114};
+
115
+ +
126public:
+
127
+
135 explicit directory_handler(const sstring& doc_root,
+
136 file_transformer* transformer = nullptr);
+
137
+ +
139 std::unique_ptr<http::request> req, std::unique_ptr<http::reply> rep) override;
+
140
+
141private:
+
142 sstring doc_root;
+
143};
+
144
+ +
151public:
+
152
+
159 explicit file_handler(const sstring& file, file_transformer* transformer =
+
160 nullptr, bool force_path = true)
+
161 : file_interaction_handler(transformer), file(file), force_path(
+
162 force_path) {
+
163 }
+
164
+ +
166 std::unique_ptr<http::request> req, std::unique_ptr<http::reply> rep) override;
+
167
+
168private:
+
169 sstring file;
+
170 bool force_path;
+
171};
+
172
+
173SEASTAR_MODULE_EXPORT_END
+
174}
+
175
+
176}
+
Definition: file.hh:193
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Definition: file_handler.hh:125
+
future< std::unique_ptr< http::reply > > handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep) override
+
directory_handler(const sstring &doc_root, file_transformer *transformer=nullptr)
+
Definition: file_handler.hh:150
+
future< std::unique_ptr< http::reply > > handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep) override
+
file_handler(const sstring &file, file_transformer *transformer=nullptr, bool force_path=true)
Definition: file_handler.hh:159
+
Definition: file_handler.hh:66
+
static sstring get_extension(const sstring &file)
+
file_interaction_handler * set_transformer(file_transformer *t)
Definition: file_handler.hh:80
+
future< std::unique_ptr< http::reply > > read(sstring file, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)
+
bool redirect_if_needed(const http::request &req, http::reply &rep) const
+
Definition: file_handler.hh:44
+
virtual output_stream< char > transform(std::unique_ptr< http::request > req, const sstring &extension, output_stream< char > &&s)=0
+
Definition: handlers.hh:42
+ +
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: reply.hh:60
+
Definition: request.hh:51
+
+ + + + diff --git a/master/file_demo_8cc-example.html b/master/file_demo_8cc-example.html new file mode 100644 index 000000000..ea0e0d507 --- /dev/null +++ b/master/file_demo_8cc-example.html @@ -0,0 +1,333 @@ + + + + + + + +Seastar: file_demo.cc + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
file_demo.cc
+
+
+

A program demonstrating the use of seastar::with_file and seastar::with_file_close_on_failure

+
/*
+
* This file is open source software, licensed to you under the terms
+
* of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
* distributed with this work for additional information regarding copyright
+
* ownership. 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.
+
*/
+
/*
+
* Copyright 2020 ScyllaDB
+
*/
+
+
+
// Demonstration of seastar::with_file
+
+
#include <cstring>
+
#include <limits>
+
#include <random>
+
+
#include <seastar/core/app-template.hh>
+
+
#include <seastar/core/aligned_buffer.hh>
+
#include <seastar/core/file.hh>
+ +
#include <seastar/core/seastar.hh>
+
#include <seastar/core/sstring.hh>
+
#include <seastar/core/temporary_buffer.hh>
+
#include <seastar/core/loop.hh>
+
#include <seastar/core/io_intent.hh>
+
#include <seastar/util/log.hh>
+
#include <seastar/util/tmp_file.hh>
+
+
using namespace seastar;
+
+
constexpr size_t aligned_size = 4096;
+
+
future<> verify_data_file(file& f, temporary_buffer<char>& rbuf, const temporary_buffer<char>& wbuf) {
+
return f.dma_read(0, rbuf.get_write(), aligned_size).then([&rbuf, &wbuf] (size_t count) {
+
assert(count == aligned_size);
+
fmt::print(" verifying {} bytes\n", count);
+
assert(!memcmp(rbuf.get(), wbuf.get(), aligned_size));
+
});
+
}
+
+
future<file> open_data_file(sstring meta_filename, temporary_buffer<char>& rbuf) {
+
fmt::print(" retrieving data filename from {}\n", meta_filename);
+
return with_file(open_file_dma(meta_filename, open_flags::ro), [&rbuf] (file& f) {
+
return f.dma_read(0, rbuf.get_write(), aligned_size).then([&rbuf] (size_t count) {
+
assert(count == aligned_size);
+
auto data_filename = sstring(rbuf.get());
+
fmt::print(" opening {}\n", data_filename);
+
return open_file_dma(data_filename, open_flags::ro);
+
});
+
});
+
}
+
+
future<> demo_with_file() {
+
fmt::print("Demonstrating with_file():\n");
+
return tmp_dir::do_with_thread([] (tmp_dir& t) {
+
auto rnd = std::mt19937(std::random_device()());
+
auto dist = std::uniform_int_distribution<int>(0, std::numeric_limits<char>::max());
+
auto wbuf = temporary_buffer<char>::aligned(aligned_size, aligned_size);
+
sstring meta_filename = (t.get_path() / "meta_file").native();
+
sstring data_filename = (t.get_path() / "data_file").native();
+
+
// `with_file` is used to create/open `filename` just around the call to `dma_write`
+
auto write_to_file = [] (const sstring filename, temporary_buffer<char>& wbuf) {
+
auto count = with_file(open_file_dma(filename, open_flags::rw | open_flags::create), [&wbuf] (file& f) {
+
return f.dma_write(0, wbuf.get(), aligned_size);
+
}).get();
+
assert(count == aligned_size);
+
};
+
+
// print the data_filename into the write buffer
+
std::fill(wbuf.get_write(), wbuf.get_write() + aligned_size, 0);
+
std::copy(data_filename.cbegin(), data_filename.cend(), wbuf.get_write());
+
+
// and write it to `meta_filename`
+
fmt::print(" writing \"{}\" into {}\n", data_filename, meta_filename);
+
+
write_to_file(meta_filename, wbuf);
+
+
// now write some random data into data_filename
+
fmt::print(" writing random data into {}\n", data_filename);
+
std::generate(wbuf.get_write(), wbuf.get_write() + aligned_size, [&dist, &rnd] { return dist(rnd); });
+
+
write_to_file(data_filename, wbuf);
+
+
// verify the data via meta_filename
+
fmt::print(" verifying data...\n");
+
auto rbuf = temporary_buffer<char>::aligned(aligned_size, aligned_size);
+
+
with_file(open_data_file(meta_filename, rbuf), [&rbuf, &wbuf] (file& f) {
+
return verify_data_file(f, rbuf, wbuf);
+
}).get();
+
});
+
}
+
+
future<> demo_with_file_close_on_failure() {
+
fmt::print("\nDemonstrating with_file_close_on_failure():\n");
+
return tmp_dir::do_with_thread([] (tmp_dir& t) {
+
auto rnd = std::mt19937(std::random_device()());
+
auto dist = std::uniform_int_distribution<int>(0, std::numeric_limits<char>::max());
+
auto wbuf = temporary_buffer<char>::aligned(aligned_size, aligned_size);
+
sstring meta_filename = (t.get_path() / "meta_file").native();
+
sstring data_filename = (t.get_path() / "data_file").native();
+
+
// with_file_close_on_failure will close the opened file only if
+
// `make_file_output_stream` returns an error. Otherwise, in the error-free path,
+
// the opened file is moved to `file_output_stream` that in-turn closes it
+
// when the stream is closed.
+
auto make_output_stream = [] (std::string_view filename) {
+
return with_file_close_on_failure(open_file_dma(filename, open_flags::rw | open_flags::create), [] (file f) {
+
return make_file_output_stream(std::move(f), aligned_size);
+
});
+
};
+
+
// writes the buffer one byte at a time, to demonstrate output stream
+
auto write_to_stream = [] (output_stream<char>& o, const temporary_buffer<char>& wbuf) {
+
return seastar::do_for_each(wbuf, [&o] (char c) {
+
return o.write(&c, 1);
+
}).finally([&o] {
+
return o.close();
+
});
+
};
+
+
// print the data_filename into the write buffer
+
std::fill(wbuf.get_write(), wbuf.get_write() + aligned_size, 0);
+
std::copy(data_filename.cbegin(), data_filename.cend(), wbuf.get_write());
+
+
// and write it to `meta_filename`
+
fmt::print(" writing \"{}\" into {}\n", data_filename, meta_filename);
+
+
// with_file_close_on_failure will close the opened file only if
+
// `make_file_output_stream` returns an error. Otherwise, in the error-free path,
+
// the opened file is moved to `file_output_stream` that in-turn closes it
+
// when the stream is closed.
+
output_stream<char> o = make_output_stream(meta_filename).get();
+
+
write_to_stream(o, wbuf).get();
+
+
// now write some random data into data_filename
+
fmt::print(" writing random data into {}\n", data_filename);
+
std::generate(wbuf.get_write(), wbuf.get_write() + aligned_size, [&dist, &rnd] { return dist(rnd); });
+
+
o = make_output_stream(data_filename).get();
+
+
write_to_stream(o, wbuf).get();
+
+
// verify the data via meta_filename
+
fmt::print(" verifying data...\n");
+
auto rbuf = temporary_buffer<char>::aligned(aligned_size, aligned_size);
+
+
with_file(open_data_file(meta_filename, rbuf), [&rbuf, &wbuf] (file& f) {
+
return verify_data_file(f, rbuf, wbuf);
+
}).get();
+
});
+
}
+
+
static constexpr size_t half_aligned_size = aligned_size / 2;
+
+
future<> demo_with_io_intent() {
+
fmt::print("\nDemonstrating demo_with_io_intent():\n");
+
return tmp_dir::do_with_thread([] (tmp_dir& t) {
+
sstring filename = (t.get_path() / "testfile.tmp").native();
+
auto f = open_file_dma(filename, open_flags::rw | open_flags::create).get();
+
+
auto rnd = std::mt19937(std::random_device()());
+
auto dist = std::uniform_int_distribution<int>(0, std::numeric_limits<char>::max());
+
+
auto wbuf = temporary_buffer<char>::aligned(aligned_size, aligned_size);
+
fmt::print(" writing random data into {}\n", filename);
+
std::generate(wbuf.get_write(), wbuf.get_write() + aligned_size, [&dist, &rnd] { return dist(rnd); });
+
+
f.dma_write(0, wbuf.get(), aligned_size).get();
+
+
auto wbuf_n = temporary_buffer<char>::aligned(aligned_size, aligned_size);
+
fmt::print(" starting to overwrite {} with other random data in two steps\n", filename);
+
std::generate(wbuf_n.get_write(), wbuf_n.get_write() + aligned_size, [&dist, &rnd] { return dist(rnd); });
+
+
io_intent intent;
+
auto f1 = f.dma_write(0, wbuf_n.get(), half_aligned_size);
+
auto f2 = f.dma_write(half_aligned_size, wbuf_n.get() + half_aligned_size, half_aligned_size, &intent);
+
+
fmt::print(" cancel the 2nd overwriting\n");
+
intent.cancel();
+
+
fmt::print(" wait for overwriting IOs to complete\n");
+
f1.get();
+
+
bool cancelled = false;
+
try {
+
f2.get();
+
// The file::dma_write doesn't preemt, but if it
+
// suddenly will, the 2nd write will pass before
+
// the intent would be cancelled
+
fmt::print(" 2nd write won the race with cancellation\n");
+
} catch (cancelled_error& ex) {
+
cancelled = true;
+
}
+
+
fmt::print(" verifying data...\n");
+
auto rbuf = allocate_aligned_buffer<unsigned char>(aligned_size, aligned_size);
+
f.dma_read(0, rbuf.get(), aligned_size).get();
+
+
// First part of the buffer must coincide with the overwritten data
+
assert(!memcmp(rbuf.get(), wbuf_n.get(), half_aligned_size));
+
+
if (cancelled) {
+
// Second part -- with the old data ...
+
assert(!memcmp(rbuf.get() + half_aligned_size, wbuf.get() + half_aligned_size, half_aligned_size));
+
} else {
+
// ... or with new if the cancellation didn't happen
+
assert(!memcmp(rbuf.get() + half_aligned_size, wbuf.get() + half_aligned_size, half_aligned_size));
+
}
+
});
+
}
+
+
int main(int ac, char** av) {
+
app_template app;
+
return app.run(ac, av, [] {
+
return demo_with_file().then([] {
+
return demo_with_file_close_on_failure().then([] {
+
return demo_with_io_intent();
+
});
+
});
+
});
+
}
+
An exception Cancelled IOs resolve their future into (see io_intent)
Definition: file.hh:874
+
Definition: file.hh:193
+
future< size_t > dma_write(uint64_t pos, const CharType *buffer, size_t len, io_intent *intent=nullptr) noexcept
Definition: file.hh:494
+
future< size_t > dma_read(uint64_t aligned_pos, CharType *aligned_buffer, size_t aligned_len, io_intent *intent=nullptr) noexcept
Definition: file.hh:326
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Definition: io_intent.hh:44
+
void cancel() noexcept
Definition: io_intent.hh:93
+ +
future close() noexcept
Definition: iostream-impl.hh:496
+ +
const CharType * get() const noexcept
Gets a pointer to the beginning of the buffer.
Definition: temporary_buffer.hh:125
+
CharType * get_write() noexcept
Definition: temporary_buffer.hh:128
+
Definition: tmp_file.hh:119
+ +
auto with_file_close_on_failure(future< file > file_fut, Func func) noexcept
Helper for ensuring a file is closed if func fails.
Definition: file.hh:822
+
future< file > open_file_dma(std::string_view name, open_flags flags) noexcept
+
auto with_file(future< file > file_fut, Func func) noexcept
Helper for ensuring a file is closed after func is called.
Definition: file.hh:795
+
future do_for_each(Iterator begin, Iterator end, AsyncAction action) noexcept
Call a function for each item in a range, sequentially (iterator version).
Definition: loop.hh:462
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
future< output_stream< char > > make_file_output_stream(file file, uint64_t buffer_size=8192) noexcept
+
+ + + + diff --git a/master/files.html b/master/files.html new file mode 100644 index 000000000..80fccf89b --- /dev/null +++ b/master/files.html @@ -0,0 +1,334 @@ + + + + + + + +Seastar: File List + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  seastar
  core
  coroutine
  http
  json
  net
  rpc
  testing
  util
  websocket
+
+
+ + + + diff --git a/master/folderclosed.png b/master/folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/master/formatter_8hh_source.html b/master/formatter_8hh_source.html new file mode 100644 index 000000000..ace6bdad2 --- /dev/null +++ b/master/formatter_8hh_source.html @@ -0,0 +1,343 @@ + + + + + + + +Seastar: seastar/json/formatter.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
formatter.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2015 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <string>
+
26#include <vector>
+
27#include <unordered_map>
+
28#include <map>
+
29#include <time.h>
+
30#include <sstream>
+
31#endif
+
32
+
33#include <seastar/core/loop.hh>
+
34#include <seastar/core/sstring.hh>
+
35#include <seastar/core/iostream.hh>
+
36#include <seastar/util/modules.hh>
+
37
+
38namespace seastar {
+
39
+
40namespace json {
+
41
+
42SEASTAR_MODULE_EXPORT
+
43class jsonable;
+
44
+
45typedef struct tm date_time;
+
46
+
52SEASTAR_MODULE_EXPORT
+
53class formatter {
+
54 enum class state {
+
55 none, array, map
+
56 };
+
57 static sstring begin(state);
+
58 static sstring end(state);
+
59
+
60 template<typename K, typename V>
+
61 static sstring to_json(state s, const std::pair<K, V>& p) {
+
62 return s == state::array ?
+
63 "{" + to_json(state::none, p) + "}" :
+
64 to_json(p.first) + ":" + to_json(p.second);
+
65 }
+
66
+
67 template<typename Iter>
+
68 static sstring to_json(state s, Iter i, Iter e) {
+
69 std::stringstream res;
+
70 res << begin(s);
+
71 size_t n = 0;
+
72 while (i != e) {
+
73 if (n++ != 0) {
+
74 res << ",";
+
75 }
+
76 res << to_json(s, *i++);
+
77 }
+
78 res << end(s);
+
79 return res.str();
+
80 }
+
81
+
82 // fallback template
+
83 template<typename T>
+
84 static sstring to_json(state, const T& t) {
+
85 return to_json(t);
+
86 }
+
87
+
88 template<typename K, typename V>
+
89 static future<> write(output_stream<char>& stream, state s, const std::pair<K, V>& p) {
+
90 if (s == state::array) {
+
91 return stream.write("{").then([&stream, &p] {
+
92 return write(stream, state::none, p).then([&stream] {
+
93 return stream.write("}");
+
94 });
+
95 });
+
96 } else {
+
97 return stream.write(to_json(p.first) + ":").then([&p, &stream] {
+
98 return write(stream, p.second);
+
99 });
+
100 }
+
101 }
+
102
+
103 template<typename Iter>
+
104 static future<> write(output_stream<char>& stream, state s, Iter i, Iter e) {
+
105 return do_with(true, [&stream, s, i, e] (bool& first) {
+
106 return stream.write(begin(s)).then([&first, &stream, s, i, e] {
+
107 return do_for_each(i, e, [&first, &stream] (auto& m) {
+
108 auto f = (first) ? make_ready_future<>() : stream.write(",");
+
109 first = false;
+
110 return f.then([&m, &stream] {
+
111 return write(stream, m);
+
112 });
+
113 }).then([&stream, s] {
+
114 return stream.write(end(s));
+
115 });
+
116 });
+
117 });
+
118 }
+
119
+
120 // fallback template
+
121 template<typename T>
+
122 static future<> write(output_stream<char>& stream, state, const T& t) {
+
123 return stream.write(to_json(t));
+
124 }
+
125
+
126public:
+
127
+
133 static sstring to_json(const sstring& str);
+
134
+
140 static sstring to_json(int n);
+
141
+
147 static sstring to_json(unsigned n);
+
148
+
154 static sstring to_json(long n);
+
155
+
161 static sstring to_json(float f);
+
162
+
168 static sstring to_json(double d);
+
169
+
176 static sstring to_json(const char* str, size_t len);
+
177
+
184 static sstring to_json(const char* str);
+
185
+
191 static sstring to_json(bool d);
+
192
+
198 template<typename... Args>
+
199 static sstring to_json(const std::vector<Args...>& vec) {
+
200 return to_json(state::array, vec.begin(), vec.end());
+
201 }
+
202
+
203 template<typename... Args>
+
204 static sstring to_json(const std::map<Args...>& map) {
+
205 return to_json(state::map, map.begin(), map.end());
+
206 }
+
207
+
208 template<typename... Args>
+
209 static sstring to_json(const std::unordered_map<Args...>& map) {
+
210 return to_json(state::map, map.begin(), map.end());
+
211 }
+
212
+
218 static sstring to_json(const date_time& d);
+
219
+
225 static sstring to_json(const jsonable& obj);
+
226
+
232 static sstring to_json(unsigned long l);
+
233
+
234
+
235
+
241 static future<> write(output_stream<char>& s, const sstring& str) {
+
242 return s.write(to_json(str));
+
243 }
+
244
+ +
251 return s.write(to_json(n));
+
252 }
+
253
+
259 static future<> write(output_stream<char>& s, long n) {
+
260 return s.write(to_json(n));
+
261 }
+
262
+
268 static future<> write(output_stream<char>& s, float f) {
+
269 return s.write(to_json(f));
+
270 }
+
271
+
277 static future<> write(output_stream<char>& s, double d) {
+
278 return s.write(to_json(d));
+
279 }
+
280
+
286 static future<> write(output_stream<char>& s, const char* str) {
+
287 return s.write(to_json(str));
+
288 }
+
289
+
295 static future<> write(output_stream<char>& s, bool d) {
+
296 return s.write(to_json(d));
+
297 }
+
298
+
304 template<typename... Args>
+
305 static future<> write(output_stream<char>& s, std::vector<Args...> vec) {
+
306 return do_with(std::move(vec), [&s] (const auto& vec) {
+
307 return write(s, state::array, vec.begin(), vec.end());
+
308 });
+
309 }
+
310
+
311 template<typename... Args>
+
312 static future<> write(output_stream<char>& s, std::map<Args...> map) {
+
313 return do_with(std::move(map), [&s] (const auto& map) {
+
314 return write(s, state::map, map.begin(), map.end());
+
315 });
+
316 }
+
317
+
318 template<typename... Args>
+
319 static future<> write(output_stream<char>& s, std::unordered_map<Args...> map) {
+
320 return do_with(std::move(map), [&s] (const auto& map) {
+
321 return write(s, state::map, map.begin(), map.end());
+
322 });
+
323 }
+
324
+
330 static future<> write(output_stream<char>& s, const date_time& d) {
+
331 return s.write(to_json(d));
+
332 }
+
333
+
339 template <std::derived_from<jsonable> Jsonable>
+
340 static future<> write(output_stream<char>& s, Jsonable obj) {
+
341 return do_with(std::move(obj), [&s] (const auto& obj) {
+
342 return obj.write(s);
+
343 });
+
344 }
+
345
+
351 static future<> write(output_stream<char>& s, unsigned long l) {
+
352 return s.write(to_json(l));
+
353 }
+
354};
+
355
+
356}
+
357
+
358}
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Result then(Func &&func) noexcept
Schedule a block of code to run when the future is ready.
Definition: future.hh:1425
+
Definition: formatter.hh:53
+
static sstring to_json(double d)
+
static future write(output_stream< char > &s, const date_time &d)
Definition: formatter.hh:330
+
static future write(output_stream< char > &s, double d)
Definition: formatter.hh:277
+
static future write(output_stream< char > &s, long n)
Definition: formatter.hh:259
+
static future write(output_stream< char > &s, unsigned long l)
Definition: formatter.hh:351
+
static sstring to_json(const sstring &str)
+
static future write(output_stream< char > &s, float f)
Definition: formatter.hh:268
+
static future write(output_stream< char > &s, Jsonable obj)
Definition: formatter.hh:340
+
static sstring to_json(long n)
+
static sstring to_json(const date_time &d)
+
static sstring to_json(const std::vector< Args... > &vec)
Definition: formatter.hh:199
+
static sstring to_json(int n)
+
static future write(output_stream< char > &s, const sstring &str)
Definition: formatter.hh:241
+
static future write(output_stream< char > &s, bool d)
Definition: formatter.hh:295
+
static sstring to_json(unsigned long l)
+
static future write(output_stream< char > &s, const char *str)
Definition: formatter.hh:286
+
static future write(output_stream< char > &s, int n)
Definition: formatter.hh:250
+
static sstring to_json(const jsonable &obj)
+
static sstring to_json(bool d)
+
static sstring to_json(unsigned n)
+
static future write(output_stream< char > &s, std::vector< Args... > vec)
Definition: formatter.hh:305
+
static sstring to_json(const char *str)
+
static sstring to_json(float f)
+
static sstring to_json(const char *str, size_t len)
+
Definition: json_elements.hh:195
+ +
Definition: stream.hh:60
+
auto do_with(T1 &&rv1, T2 &&rv2, More &&... more) noexcept
Definition: do_with.hh:135
+
future do_for_each(Iterator begin, Iterator end, AsyncAction action) noexcept
Call a function for each item in a range, sequentially (iterator version).
Definition: loop.hh:462
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/fsnotify_8hh_source.html b/master/fsnotify_8hh_source.html new file mode 100644 index 000000000..d06931774 --- /dev/null +++ b/master/fsnotify_8hh_source.html @@ -0,0 +1,239 @@ + + + + + + + +Seastar: seastar/core/fsnotify.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
fsnotify.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2020 ScyllaDB Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <sys/inotify.h>
+
26
+
27#include <seastar/core/future.hh>
+
28#include <seastar/core/sstring.hh>
+
29#include <seastar/core/shared_ptr.hh>
+
30#include <seastar/util/modules.hh>
+
31#endif
+
32
+
33namespace seastar::experimental {
+
34
+
35SEASTAR_MODULE_EXPORT_BEGIN
+
36
+
43
+ +
58 class impl;
+
59 shared_ptr<impl> _impl;
+
60public:
+
61 class watch;
+
62 friend class watch;
+
63
+
70 enum class flags : uint32_t {
+
71 access = IN_ACCESS, // File was accessed (e.g., read(2), execve(2)).
+
72 attrib = IN_ATTRIB, // Metadata changed—for example, permissions, timestamps, extended attributes
+
73 close_write = IN_CLOSE_WRITE, // File opened for writing was closed.
+
74 close_nowrite = IN_CLOSE_NOWRITE,// File or directory not opened for writing was closed.
+
75 create_child = IN_CREATE, // File/directory created in watched directory
+
76 delete_child = IN_DELETE, // File/directory deleted from watched directory.
+
77 delete_self = IN_DELETE_SELF, // Watched file/directory was itself deleted. (This event
+
78 // also occurs if an object is moved to another filesystem)
+
79 modify = IN_MODIFY, // File was modified (e.g., write(2), truncate(2)).
+
80 move_self = IN_MOVE_SELF, // Watched file/directory was itself moved.
+
81 move_from = IN_MOVED_FROM, // Generated for the directory containing the old filename
+
82 // when a file is renamed.
+
83 move_to = IN_MOVED_TO, // Generated for the directory containing the new filename
+
84 // when a file is renamed.
+
85 open = IN_OPEN, // File was opened
+
86 close = IN_CLOSE, // close_write|close_nowrite
+
87 move = IN_MOVE, // move_from|move_to
+
88 oneshot = IN_ONESHOT, // listen for only a single notification, after which the
+
89 // token will be invalid
+
90 ignored = IN_IGNORED, // generated when a token or the file being watched is deleted
+
91 onlydir = IN_ONLYDIR, // Watch pathname only if it is a directory; the error ENOT‐
+
92 // DIR results if pathname is not a directory. Using this
+
93 // flag provides an application with a race-free way of
+
94 // ensuring that the monitored object is a directory.
+
95 };
+
96
+
98 using watch_token = int32_t;
+
104 using sequence_no = uint32_t;
+
105
+
110 class watch {
+
111 public:
+
112 ~watch();
+
113 watch(watch&&) noexcept;
+
114 watch& operator=(watch&&) noexcept;
+
115
+ +
121
+
123 operator watch_token() const {
+
124 return _token;
+
125 }
+
126
+ +
129 return _token;
+
130 }
+
131
+
132 private:
+
133 friend class fsnotifier;
+ +
135 watch_token _token;
+
136 shared_ptr<impl> _impl;
+
137 };
+
138
+
139 fsnotifier();
+
140 ~fsnotifier();
+
141
+ +
143 fsnotifier& operator=(fsnotifier&&);
+
144
+
151 future<watch> create_watch(const sstring& path, flags mask);
+
152
+
154 struct event {
+
155 // matches source watch
+
156 watch_token id;
+
157 // event(s) generated
+
158 flags mask;
+
159 sequence_no seq; // event correlation -> move_from+move_to
+
160 sstring name; // optional file name, in case of move_from/to
+
161 };
+
162
+ +
167
+
172 void shutdown();
+
173
+
175 bool active() const;
+
176
+
178 operator bool() const {
+
179 return active();
+
180 }
+
181};
+
182
+ +
185 return fsnotifier::flags(std::underlying_type_t<fsnotifier::flags>(a) | std::underlying_type_t<fsnotifier::flags>(b));
+
186}
+
187
+
189inline void operator|=(fsnotifier::flags& a, fsnotifier::flags b) {
+
190 a = (a | b);
+
191}
+
192
+ +
195 return fsnotifier::flags(std::underlying_type_t<fsnotifier::flags>(a) & std::underlying_type_t<fsnotifier::flags>(b));
+
196}
+
197
+
199inline void operator&=(fsnotifier::flags& a, fsnotifier::flags b) {
+
200 a = (a & b);
+
201}
+
202
+
204
+
205SEASTAR_MODULE_EXPORT_END
+
206
+
207}
+
Simple RAII wrapper around a fsnotifier::watch_token.
Definition: fsnotify.hh:110
+
watch_token token() const
Get the token of this watch point.
Definition: fsnotify.hh:128
+ +
Filesystem modification notifier.
Definition: fsnotify.hh:57
+
bool active() const
Check if the notifier is activated.
+
int32_t watch_token
Token of a watch point.
Definition: fsnotify.hh:98
+
uint32_t sequence_no
Unique sequence number of associating related events.
Definition: fsnotify.hh:104
+
future< watch > create_watch(const sstring &path, flags mask)
Monitor events specified in mask for the give path.
+
flags
Flags of events supported by FileSystem Notifier.
Definition: fsnotify.hh:70
+ +
future< std::vector< event > > wait() const
+
A wrapper around inotify_event.
Definition: fsnotify.hh:154
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+ +
holds the implementation parts of the metrics layer, do not use directly.
+
+ + + + diff --git a/master/fsqual_8hh_source.html b/master/fsqual_8hh_source.html new file mode 100644 index 000000000..72f8dfdd4 --- /dev/null +++ b/master/fsqual_8hh_source.html @@ -0,0 +1,110 @@ + + + + + + + +Seastar: seastar/core/fsqual.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
fsqual.hh
+
+
+
1/*
+
2 * Copyright 2017 ScyllaDB
+
3 */
+
4/*
+
5 * This file is open source software, licensed to you under the terms
+
6 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
7 * distributed with this work for additional information regarding copyright
+
8 * ownership. You may not use this file except in compliance with the License.
+
9 *
+
10 * You may obtain a copy of the License at
+
11 *
+
12 * http://www.apache.org/licenses/LICENSE-2.0
+
13 *
+
14 * Unless required by applicable law or agreed to in writing,
+
15 * software distributed under the License is distributed on an
+
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
17 * KIND, either express or implied. See the License for the
+
18 * specific language governing permissions and limitations
+
19 * under the License.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/sstring.hh>
+
25
+
26namespace seastar {
+
27
+
28bool filesystem_has_good_aio_support(sstring directory, bool verbose = false);
+
29
+
30}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/fstream_8hh.html b/master/fstream_8hh.html new file mode 100644 index 000000000..635e0ce71 --- /dev/null +++ b/master/fstream_8hh.html @@ -0,0 +1,196 @@ + + + + + + + +Seastar: seastar/core/fstream.hh File Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
fstream.hh File Reference
+
+
+
#include <seastar/core/file.hh>
+#include <seastar/core/iostream.hh>
+#include <seastar/core/shared_ptr.hh>
+#include <seastar/core/internal/api-level.hh>
+#include <seastar/util/modules.hh>
+#include <cstdint>
+
+

Go to the source code of this file.

+ + + + + + + + + +

+Classes

class  seastar::file_input_stream_history
 
struct  seastar::file_input_stream_options
 Data structure describing options for opening a file input stream. More...
 
struct  seastar::file_output_stream_options
 
+ + + + +

+Namespaces

namespace  seastar
 Seastar API namespace.
 
+ + + + + + + + + + + + + + + +

+Functions

input_stream< char > seastar::make_file_input_stream (file file, uint64_t offset, uint64_t len, file_input_stream_options options={})
 Creates an input_stream to read a portion of a file. More...
 
input_stream< char > seastar::make_file_input_stream (file file, uint64_t offset, file_input_stream_options={})
 Create an input_stream for a given file, reading starting at a given position of the given file, with the specified options. More...
 
input_stream< char > seastar::make_file_input_stream (file file, file_input_stream_options={})
 
future< output_stream< char > > seastar::make_file_output_stream (file file, uint64_t buffer_size=8192) noexcept
 
future< output_stream< char > > seastar::make_file_output_stream (file file, file_output_stream_options options) noexcept
 
future< data_sink > seastar::make_file_data_sink (file, file_output_stream_options) noexcept
 
+

Class Documentation

+ +

◆ seastar::file_input_stream_options

+ +
+
+ + + + +
struct seastar::file_input_stream_options
+
+ + + + + + + + + + + +
Class Members
+size_t +buffer_size +I/O buffer size.
+lw_shared_ptr< file_input_stream_history > +dynamic_adjustments +Input stream history, if null dynamic adjustments are disabled.
+unsigned +read_ahead +Maximum number of extra read-ahead operations.
+ +
+
+ +

◆ seastar::file_output_stream_options

+ +
+
+ + + + +
struct seastar::file_output_stream_options
+
+ + + + + + + + + + + +
Class Members
+unsigned +buffer_size +
+unsigned +preallocation_size +Preallocate extents. For large files, set to a large number (a few megabytes) to reduce fragmentation.
+unsigned +write_behind +Number of buffers to write in parallel.
+ +
+
+
+ + + + diff --git a/master/fstream_8hh_source.html b/master/fstream_8hh_source.html new file mode 100644 index 000000000..f026a9b10 --- /dev/null +++ b/master/fstream_8hh_source.html @@ -0,0 +1,201 @@ + + + + + + + +Seastar: seastar/core/fstream.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
fstream.hh
+
+
+Go to the documentation of this file.
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2015 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
25
+
26// File <-> streams adapters
+
27//
+
28// Seastar files are block-based due to the reliance on DMA - you must read
+
29// on sector boundaries. The adapters in this file provide a byte stream
+
30// interface to files, while retaining the zero-copy characteristics of
+
31// seastar files.
+
32#include <seastar/core/file.hh>
+
33#include <seastar/core/iostream.hh>
+
34#include <seastar/core/shared_ptr.hh>
+
35#include <seastar/core/internal/api-level.hh>
+
36#include <seastar/util/modules.hh>
+
37
+
38#ifndef SEASTAR_MODULE
+
39#include <cstdint>
+
40#endif
+
41
+
42namespace seastar {
+
43
+
44SEASTAR_MODULE_EXPORT_BEGIN
+
45
+ +
47 static constexpr uint64_t window_size = 4 * 1024 * 1024;
+
48 struct window {
+
49 uint64_t total_read = 0;
+
50 uint64_t unused_read = 0;
+
51 };
+
52 window current_window;
+
53 window previous_window;
+
54 unsigned read_ahead = 1;
+
55
+
56 friend class file_data_source_impl;
+
57};
+
58
+ +
61 size_t buffer_size = 8192;
+
62 unsigned read_ahead = 0;
+
63#if SEASTAR_API_LEVEL < 7
+
64 ::seastar::io_priority_class io_priority_class = default_priority_class();
+
65#endif
+ +
67};
+
68
+ +
79 file file, uint64_t offset, uint64_t len, file_input_stream_options options = {});
+
80
+ +
89 file file, uint64_t offset, file_input_stream_options = {});
+
90
+ + +
98
+ +
100 // For small files, setting preallocation_size can make it impossible for XFS to find
+
101 // an aligned extent. On the other hand, without it, XFS will divide the file into
+
102 // file_size/buffer_size extents. To avoid fragmentation, we set the default buffer_size
+
103 // to 64k (so each extent will be a minimum of 64k) and preallocation_size to 0 (to avoid
+
104 // extent allocation problems).
+
105 //
+
106 // Large files should increase both buffer_size and preallocation_size.
+
107 unsigned buffer_size = 65536;
+
108 unsigned preallocation_size = 0;
+
109 unsigned write_behind = 1;
+
110#if SEASTAR_API_LEVEL < 7
+
111 ::seastar::io_priority_class io_priority_class = default_priority_class();
+
112#endif
+
113};
+
114
+ +
120 file file,
+
121 uint64_t buffer_size = 8192) noexcept;
+
122
+ +
128 file file,
+
129 file_output_stream_options options) noexcept;
+
130
+ +
135
+
136SEASTAR_MODULE_EXPORT_END
+
137
+
138}
+
Definition: iostream.hh:148
+
Definition: fstream.hh:46
+
Definition: file.hh:193
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+ +
Definition: shared_ptr.hh:268
+
Definition: iostream.hh:378
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
future< output_stream< char > > make_file_output_stream(file file, uint64_t buffer_size=8192) noexcept
+
future< data_sink > make_file_data_sink(file, file_output_stream_options) noexcept
+
unsigned write_behind
Number of buffers to write in parallel.
Definition: fstream.hh:109
+
size_t buffer_size
I/O buffer size.
Definition: fstream.hh:61
+
unsigned preallocation_size
Preallocate extents. For large files, set to a large number (a few megabytes) to reduce fragmentation...
Definition: fstream.hh:108
+
unsigned read_ahead
Maximum number of extra read-ahead operations.
Definition: fstream.hh:62
+
input_stream< char > make_file_input_stream(file file, uint64_t offset, uint64_t len, file_input_stream_options options={})
Creates an input_stream to read a portion of a file.
+
lw_shared_ptr< file_input_stream_history > dynamic_adjustments
Input stream history, if null dynamic adjustments are disabled.
Definition: fstream.hh:66
+
Data structure describing options for opening a file input stream.
Definition: fstream.hh:60
+
Definition: fstream.hh:99
+
+ + + + diff --git a/master/function__handlers_8hh_source.html b/master/function__handlers_8hh_source.html new file mode 100644 index 000000000..cbc7416ca --- /dev/null +++ b/master/function__handlers_8hh_source.html @@ -0,0 +1,195 @@ + + + + + + + +Seastar: seastar/http/function_handlers.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
function_handlers.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2015 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/http/handlers.hh>
+
25#include <functional>
+
26#include <seastar/json/json_elements.hh>
+
27
+
28namespace seastar {
+
29
+
30namespace httpd {
+
31
+
36typedef std::function<sstring(const_req req)> request_function;
+
37
+
41typedef std::function<sstring(const_req req, http::reply&)> handle_function;
+
42
+
48typedef std::function<json::json_return_type(const_req req)> json_request_function;
+
49
+
55typedef std::function<
+
56 future<json::json_return_type>(std::unique_ptr<http::request> req)> future_json_function;
+
57
+
58typedef std::function<
+
59 future<std::unique_ptr<http::reply>>(std::unique_ptr<http::request> req,
+
60 std::unique_ptr<http::reply> rep)> future_handler_function;
+ +
68public:
+
69
+
70 function_handler(const handle_function & f_handle, const sstring& type)
+
71 : _f_handle(
+
72 [f_handle](std::unique_ptr<http::request> req, std::unique_ptr<http::reply> rep) {
+
73 rep->_content += f_handle(*req.get(), *rep.get());
+
74 return make_ready_future<std::unique_ptr<http::reply>>(std::move(rep));
+
75 }), _type(type) {
+
76 }
+
77
+
78 function_handler(const future_handler_function& f_handle, const sstring& type)
+
79 : _f_handle(f_handle), _type(type) {
+
80 }
+
81
+
82 function_handler(const request_function & _handle, const sstring& type)
+
83 : _f_handle(
+
84 [_handle](std::unique_ptr<http::request> req, std::unique_ptr<http::reply> rep) {
+
85 rep->_content += _handle(*req.get());
+
86 return make_ready_future<std::unique_ptr<http::reply>>(std::move(rep));
+
87 }), _type(type) {
+
88 }
+
89
+
90 function_handler(const json_request_function& _handle)
+
91 : _f_handle(
+
92 [_handle](std::unique_ptr<http::request> req, std::unique_ptr<http::reply> rep) {
+
93 json::json_return_type res = _handle(*req.get());
+
94 rep->_content += res._res;
+
95 return make_ready_future<std::unique_ptr<http::reply>>(std::move(rep));
+
96 }), _type("json") {
+
97 }
+
98
+
99 function_handler(const future_json_function& _handle)
+
100 : _f_handle(
+
101 [_handle](std::unique_ptr<http::request> req, std::unique_ptr<http::reply> rep) {
+
102 return _handle(std::move(req)).then([rep = std::move(rep)](json::json_return_type&& res) mutable {
+
103 if (res._body_writer) {
+
104 rep->write_body("json", std::move(res._body_writer));
+
105 } else {
+
106 rep->_content += res._res;
+
107
+
108 }
+
109 return make_ready_future<std::unique_ptr<http::reply>>(std::move(rep));
+
110 });
+
111 }), _type("json") {
+
112 }
+
113
+
114 function_handler(const function_handler&) = default;
+
115
+ +
117 std::unique_ptr<http::request> req, std::unique_ptr<http::reply> rep) override {
+
118 return _f_handle(std::move(req), std::move(rep)).then(
+
119 [this](std::unique_ptr<http::reply> rep) {
+
120 rep->done(_type);
+
121 return make_ready_future<std::unique_ptr<http::reply>>(std::move(rep));
+
122 });
+
123 }
+
124
+
125protected:
+
126 future_handler_function _f_handle;
+
127 sstring _type;
+
128};
+
129
+
130}
+
131
+
132}
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Definition: function_handlers.hh:67
+
future< std::unique_ptr< http::reply > > handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep) override
Definition: function_handlers.hh:116
+
Definition: handlers.hh:42
+
future< T > make_ready_future(A &&... value) noexcept
Creates a future in an available, value state.
Definition: future.hh:1943
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: json_elements.hh:299
+
+ + + + diff --git a/master/function__input__iterator_8hh_source.html b/master/function__input__iterator_8hh_source.html new file mode 100644 index 000000000..09c5a9065 --- /dev/null +++ b/master/function__input__iterator_8hh_source.html @@ -0,0 +1,153 @@ + + + + + + + +Seastar: seastar/util/function_input_iterator.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
function_input_iterator.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24namespace seastar {
+
25
+
26template <typename Function, typename State>
+ +
28 Function _func;
+
29 State _state;
+
30public:
+
31 function_input_iterator(Function func, State state)
+
32 : _func(func), _state(state) {
+
33 }
+ + +
36 function_input_iterator& operator=(const function_input_iterator&) = default;
+ +
38 auto operator*() const {
+
39 return _func();
+
40 }
+
41 function_input_iterator& operator++() {
+
42 ++_state;
+
43 return *this;
+
44 }
+
45 function_input_iterator operator++(int) {
+
46 function_input_iterator ret{*this};
+
47 ++_state;
+
48 return ret;
+
49 }
+
50 bool operator==(const function_input_iterator& x) const {
+
51 return _state == x._state;
+
52 }
+
53 bool operator!=(const function_input_iterator& x) const {
+
54 return !operator==(x);
+
55 }
+
56};
+
57
+
58template <typename Function, typename State>
+
59inline
+ +
61make_function_input_iterator(Function func, State state) {
+ +
63}
+
64
+
65template <typename Function, typename State>
+
66inline
+
67function_input_iterator<Function, State>
+
68make_function_input_iterator(Function&& func) {
+
69 return function_input_iterator<Function, State>(func, State{});
+
70}
+
71
+
72}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: function_input_iterator.hh:27
+
+ + + + diff --git a/master/function__traits_8hh_source.html b/master/function__traits_8hh_source.html new file mode 100644 index 000000000..a23507d3f --- /dev/null +++ b/master/function__traits_8hh_source.html @@ -0,0 +1,149 @@ + + + + + + + +Seastar: seastar/core/function_traits.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
function_traits.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2015 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <tuple>
+
25
+
26namespace seastar {
+
27
+
28template<typename T>
+
29struct function_traits;
+
30
+
31template<typename Ret, typename... Args>
+
32struct function_traits<Ret(Args...)>
+
33{
+
34 using return_type = Ret;
+
35 using args_as_tuple = std::tuple<Args...>;
+
36 using signature = Ret (Args...);
+
37
+
38 static constexpr std::size_t arity = sizeof...(Args);
+
39
+
40 template <std::size_t N>
+
41 struct arg
+
42 {
+
43 static_assert(N < arity, "no such parameter index.");
+
44 using type = typename std::tuple_element<N, std::tuple<Args...>>::type;
+
45 };
+
46};
+
47
+
48template<typename Ret, typename... Args>
+
49struct function_traits<Ret(*)(Args...)> : public function_traits<Ret(Args...)>
+
50{};
+
51
+
52template <typename T, typename Ret, typename... Args>
+
53struct function_traits<Ret(T::*)(Args...)> : public function_traits<Ret(Args...)>
+
54{};
+
55
+
56template <typename T, typename Ret, typename... Args>
+
57struct function_traits<Ret(T::*)(Args...) const> : public function_traits<Ret(Args...)>
+
58{};
+
59
+
60template <typename T>
+
61struct function_traits : public function_traits<decltype(&T::operator())>
+
62{};
+
63
+
64template<typename T>
+ +
66{};
+
67
+
68}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: function_traits.hh:62
+
+ + + + diff --git a/master/functions.html b/master/functions.html new file mode 100644 index 000000000..7a4b3056c --- /dev/null +++ b/master/functions.html @@ -0,0 +1,78 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- _ -

+
+ + + + diff --git a/master/functions_a.html b/master/functions_a.html new file mode 100644 index 000000000..35e2581e4 --- /dev/null +++ b/master/functions_a.html @@ -0,0 +1,115 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+
+ + + + diff --git a/master/functions_b.html b/master/functions_b.html new file mode 100644 index 000000000..a229650f0 --- /dev/null +++ b/master/functions_b.html @@ -0,0 +1,90 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- b -

+
+ + + + diff --git a/master/functions_c.html b/master/functions_c.html new file mode 100644 index 000000000..5d1298d46 --- /dev/null +++ b/master/functions_c.html @@ -0,0 +1,111 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
+ + + + diff --git a/master/functions_d.html b/master/functions_d.html new file mode 100644 index 000000000..4163712a1 --- /dev/null +++ b/master/functions_d.html @@ -0,0 +1,113 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
+ + + + diff --git a/master/functions_e.html b/master/functions_e.html new file mode 100644 index 000000000..48460c80f --- /dev/null +++ b/master/functions_e.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
+ + + + diff --git a/master/functions_enum.html b/master/functions_enum.html new file mode 100644 index 000000000..b3722219a --- /dev/null +++ b/master/functions_enum.html @@ -0,0 +1,76 @@ + + + + + + + +Seastar: Class Members - Enumerations + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/master/functions_f.html b/master/functions_f.html new file mode 100644 index 000000000..6b4dd9059 --- /dev/null +++ b/master/functions_f.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- f -

+
+ + + + diff --git a/master/functions_func.html b/master/functions_func.html new file mode 100644 index 000000000..d4eb9ad3d --- /dev/null +++ b/master/functions_func.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+
+ + + + diff --git a/master/functions_func_b.html b/master/functions_func_b.html new file mode 100644 index 000000000..1ab79b3cd --- /dev/null +++ b/master/functions_func_b.html @@ -0,0 +1,82 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/master/functions_func_c.html b/master/functions_func_c.html new file mode 100644 index 000000000..6037b0571 --- /dev/null +++ b/master/functions_func_c.html @@ -0,0 +1,100 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- c -

+
+ + + + diff --git a/master/functions_func_d.html b/master/functions_func_d.html new file mode 100644 index 000000000..575405b62 --- /dev/null +++ b/master/functions_func_d.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- d -

+
+ + + + diff --git a/master/functions_func_e.html b/master/functions_func_e.html new file mode 100644 index 000000000..b2c02e2ab --- /dev/null +++ b/master/functions_func_e.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/master/functions_func_f.html b/master/functions_func_f.html new file mode 100644 index 000000000..68b7a76e5 --- /dev/null +++ b/master/functions_func_f.html @@ -0,0 +1,106 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- f -

+
+ + + + diff --git a/master/functions_func_g.html b/master/functions_func_g.html new file mode 100644 index 000000000..c8bfc35f2 --- /dev/null +++ b/master/functions_func_g.html @@ -0,0 +1,115 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- g -

+
+ + + + diff --git a/master/functions_func_h.html b/master/functions_func_h.html new file mode 100644 index 000000000..cee109f7b --- /dev/null +++ b/master/functions_func_h.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/master/functions_func_i.html b/master/functions_func_i.html new file mode 100644 index 000000000..3466be24e --- /dev/null +++ b/master/functions_func_i.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/master/functions_func_j.html b/master/functions_func_j.html new file mode 100644 index 000000000..9745ebf20 --- /dev/null +++ b/master/functions_func_j.html @@ -0,0 +1,79 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- j -

+
+ + + + diff --git a/master/functions_func_k.html b/master/functions_func_k.html new file mode 100644 index 000000000..aaac15a12 --- /dev/null +++ b/master/functions_func_k.html @@ -0,0 +1,78 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- k -

+
+ + + + diff --git a/master/functions_func_l.html b/master/functions_func_l.html new file mode 100644 index 000000000..038a42380 --- /dev/null +++ b/master/functions_func_l.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- l -

+
+ + + + diff --git a/master/functions_func_m.html b/master/functions_func_m.html new file mode 100644 index 000000000..bf525df4f --- /dev/null +++ b/master/functions_func_m.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- m -

+
+ + + + diff --git a/master/functions_func_n.html b/master/functions_func_n.html new file mode 100644 index 000000000..6911d89ae --- /dev/null +++ b/master/functions_func_n.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- n -

+
+ + + + diff --git a/master/functions_func_o.html b/master/functions_func_o.html new file mode 100644 index 000000000..8473c537a --- /dev/null +++ b/master/functions_func_o.html @@ -0,0 +1,97 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- o -

+
+ + + + diff --git a/master/functions_func_p.html b/master/functions_func_p.html new file mode 100644 index 000000000..73c6d74bf --- /dev/null +++ b/master/functions_func_p.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- p -

+
+ + + + diff --git a/master/functions_func_q.html b/master/functions_func_q.html new file mode 100644 index 000000000..2c02a882d --- /dev/null +++ b/master/functions_func_q.html @@ -0,0 +1,78 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/master/functions_func_r.html b/master/functions_func_r.html new file mode 100644 index 000000000..0b65fd93a --- /dev/null +++ b/master/functions_func_r.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- r -

+
+ + + + diff --git a/master/functions_func_s.html b/master/functions_func_s.html new file mode 100644 index 000000000..00ba1c3c8 --- /dev/null +++ b/master/functions_func_s.html @@ -0,0 +1,136 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- s -

+
+ + + + diff --git a/master/functions_func_t.html b/master/functions_func_t.html new file mode 100644 index 000000000..2aefb1e75 --- /dev/null +++ b/master/functions_func_t.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/master/functions_func_u.html b/master/functions_func_u.html new file mode 100644 index 000000000..bbbcfa2c9 --- /dev/null +++ b/master/functions_func_u.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- u -

+
+ + + + diff --git a/master/functions_func_v.html b/master/functions_func_v.html new file mode 100644 index 000000000..9dfb449c2 --- /dev/null +++ b/master/functions_func_v.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/master/functions_func_w.html b/master/functions_func_w.html new file mode 100644 index 000000000..d9f3753d7 --- /dev/null +++ b/master/functions_func_w.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/master/functions_func_y.html b/master/functions_func_y.html new file mode 100644 index 000000000..28c43b978 --- /dev/null +++ b/master/functions_func_y.html @@ -0,0 +1,77 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- y -

+
+ + + + diff --git a/master/functions_func_~.html b/master/functions_func_~.html new file mode 100644 index 000000000..5fc1bc9a6 --- /dev/null +++ b/master/functions_func_~.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- ~ -

+
+ + + + diff --git a/master/functions_g.html b/master/functions_g.html new file mode 100644 index 000000000..ee587bdb8 --- /dev/null +++ b/master/functions_g.html @@ -0,0 +1,118 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- g -

+
+ + + + diff --git a/master/functions_h.html b/master/functions_h.html new file mode 100644 index 000000000..06d55dfa0 --- /dev/null +++ b/master/functions_h.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- h -

+
+ + + + diff --git a/master/functions_i.html b/master/functions_i.html new file mode 100644 index 000000000..e5b50fae0 --- /dev/null +++ b/master/functions_i.html @@ -0,0 +1,97 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
+ + + + diff --git a/master/functions_j.html b/master/functions_j.html new file mode 100644 index 000000000..9b080c9cf --- /dev/null +++ b/master/functions_j.html @@ -0,0 +1,79 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- j -

+
+ + + + diff --git a/master/functions_k.html b/master/functions_k.html new file mode 100644 index 000000000..49ca5d255 --- /dev/null +++ b/master/functions_k.html @@ -0,0 +1,79 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- k -

+
+ + + + diff --git a/master/functions_l.html b/master/functions_l.html new file mode 100644 index 000000000..c893ebf74 --- /dev/null +++ b/master/functions_l.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
+ + + + diff --git a/master/functions_m.html b/master/functions_m.html new file mode 100644 index 000000000..e65e6fa26 --- /dev/null +++ b/master/functions_m.html @@ -0,0 +1,116 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- m -

+
+ + + + diff --git a/master/functions_n.html b/master/functions_n.html new file mode 100644 index 000000000..d7698ddf4 --- /dev/null +++ b/master/functions_n.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- n -

+
+ + + + diff --git a/master/functions_o.html b/master/functions_o.html new file mode 100644 index 000000000..a5eedaa82 --- /dev/null +++ b/master/functions_o.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- o -

+
+ + + + diff --git a/master/functions_p.html b/master/functions_p.html new file mode 100644 index 000000000..737b3bb6b --- /dev/null +++ b/master/functions_p.html @@ -0,0 +1,100 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
+ + + + diff --git a/master/functions_q.html b/master/functions_q.html new file mode 100644 index 000000000..11ee8a1eb --- /dev/null +++ b/master/functions_q.html @@ -0,0 +1,78 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- q -

+
+ + + + diff --git a/master/functions_r.html b/master/functions_r.html new file mode 100644 index 000000000..41228a6b5 --- /dev/null +++ b/master/functions_r.html @@ -0,0 +1,116 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- r -

+
+ + + + diff --git a/master/functions_rela.html b/master/functions_rela.html new file mode 100644 index 000000000..6beebd30c --- /dev/null +++ b/master/functions_rela.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: Class Members - Related Functions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/master/functions_s.html b/master/functions_s.html new file mode 100644 index 000000000..861471249 --- /dev/null +++ b/master/functions_s.html @@ -0,0 +1,150 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
+ + + + diff --git a/master/functions_t.html b/master/functions_t.html new file mode 100644 index 000000000..4fe2eb020 --- /dev/null +++ b/master/functions_t.html @@ -0,0 +1,113 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- t -

+
+ + + + diff --git a/master/functions_type.html b/master/functions_type.html new file mode 100644 index 000000000..456152c1b --- /dev/null +++ b/master/functions_type.html @@ -0,0 +1,82 @@ + + + + + + + +Seastar: Class Members - Typedefs + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/master/functions_u.html b/master/functions_u.html new file mode 100644 index 000000000..e79fdb9bd --- /dev/null +++ b/master/functions_u.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- u -

+
+ + + + diff --git a/master/functions_v.html b/master/functions_v.html new file mode 100644 index 000000000..47bce8e9a --- /dev/null +++ b/master/functions_v.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ + + + + + diff --git a/master/functions_vars.html b/master/functions_vars.html new file mode 100644 index 000000000..c650708dc --- /dev/null +++ b/master/functions_vars.html @@ -0,0 +1,277 @@ + + + + + + + +Seastar: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- _ -

+ + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- k -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+ + +

- w -

+
+ + + + diff --git a/master/functions_w.html b/master/functions_w.html new file mode 100644 index 000000000..2691c352b --- /dev/null +++ b/master/functions_w.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- w -

+
+ + + + diff --git a/master/functions_y.html b/master/functions_y.html new file mode 100644 index 000000000..5875c702e --- /dev/null +++ b/master/functions_y.html @@ -0,0 +1,77 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- y -

+
+ + + + diff --git a/master/functions_~.html b/master/functions_~.html new file mode 100644 index 000000000..31d0afbb8 --- /dev/null +++ b/master/functions_~.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- ~ -

+
+ + + + diff --git a/master/future-util_8hh_source.html b/master/future-util_8hh_source.html new file mode 100644 index 000000000..c5ba5a84f --- /dev/null +++ b/master/future-util_8hh_source.html @@ -0,0 +1,110 @@ + + + + + + + +Seastar: seastar/core/future-util.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
future-util.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/future.hh>
+
25#include <seastar/core/do_with.hh>
+
26#include <seastar/core/with_scheduling_group.hh>
+
27#include <seastar/core/loop.hh>
+
28#include <seastar/core/when_all.hh>
+
29#include <seastar/core/map_reduce.hh>
+
30#include <seastar/core/with_timeout.hh>
+
31#include <seastar/util/later.hh>
+
+ + + + diff --git a/master/future_8hh_source.html b/master/future_8hh_source.html new file mode 100644 index 000000000..865135233 --- /dev/null +++ b/master/future_8hh_source.html @@ -0,0 +1,1812 @@ + + + + + + + +Seastar: seastar/core/future.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
future.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2015 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <cassert>
+
26#include <concepts>
+
27#include <cstdlib>
+
28#include <cstring>
+
29#include <functional>
+
30#include <memory>
+
31#include <stdexcept>
+
32#include <type_traits>
+
33#include <utility>
+
34#endif
+
35
+
36#include <seastar/core/task.hh>
+
37#include <seastar/core/thread_impl.hh>
+
38#include <seastar/core/function_traits.hh>
+ +
40#include <seastar/util/critical_alloc_section.hh>
+
41#include <seastar/util/noncopyable_function.hh>
+
42#include <seastar/util/backtrace.hh>
+
43#include <seastar/util/std-compat.hh>
+
44#include <seastar/util/modules.hh>
+
45
+
46namespace seastar {
+
47
+
48struct nested_exception : public std::exception {
+
49 std::exception_ptr inner;
+
50 std::exception_ptr outer;
+
51 nested_exception(std::exception_ptr inner, std::exception_ptr outer) noexcept;
+ +
53 nested_exception(const nested_exception&) noexcept;
+
54 [[noreturn]] void rethrow_nested() const;
+
55 virtual const char* what() const noexcept override;
+
56};
+
57
+
81
+
138
+
144
+
145
+
148SEASTAR_MODULE_EXPORT_BEGIN
+
149template <class T = void>
+
150class promise;
+
151
+
152template <class T>
+
153class future;
+
154
+
155template <typename... T>
+
156class shared_future;
+
157
+
158struct future_state_base;
+
159
+
166template <typename T = void, typename... A>
+
167future<T> make_ready_future(A&&... value) noexcept;
+
168
+
169
+
171template<typename T>
+
172inline
+ +
174 return make_ready_future<std::remove_cv_t<std::remove_reference_t<T>>>(
+
175 std::forward<T>(v));
+
176}
+
177
+
184template <typename T = void>
+
185future<T> make_exception_future(std::exception_ptr&& value) noexcept;
+
186
+
187template <typename T = void, typename Exception>
+
188future<T> make_exception_future(Exception&& ex) noexcept;
+
189
+
190template <typename T = void>
+
191future<T> make_exception_future(const std::exception_ptr& ex) noexcept {
+
192 return make_exception_future<T>(std::exception_ptr(ex));
+
193}
+
194
+
195template <typename T = void>
+
196future<T> make_exception_future(std::exception_ptr& ex) noexcept {
+
197 return make_exception_future<T>(static_cast<const std::exception_ptr&>(ex));
+
198}
+
199
+
200template <typename T = void>
+
201future<T> make_exception_future(const std::exception_ptr&& ex) noexcept {
+
202 // as ex is const, we cannot move it, but can copy it.
+
203 return make_exception_future<T>(std::exception_ptr(ex));
+
204}
+
205SEASTAR_MODULE_EXPORT_END
+
207void engine_exit(std::exception_ptr eptr = {});
+
208
+
209void report_failed_future(const std::exception_ptr& ex) noexcept;
+
210
+
211void report_failed_future(const future_state_base& state) noexcept;
+
212
+
214
+
221SEASTAR_MODULE_EXPORT
+
222struct broken_promise : std::logic_error {
+ +
224};
+
225
+
231SEASTAR_MODULE_EXPORT
+
232template <typename T = void>
+ +
234
+
235SEASTAR_MODULE_EXPORT
+
236extern template
+
237future<void> current_exception_as_future() noexcept;
+
238
+
239namespace internal {
+
240template <class T = void>
+
241class promise_base_with_type;
+
242class promise_base;
+
243
+
244struct monostate {};
+
245
+
246template <typename... T>
+
247struct future_stored_type;
+
248
+
249template <>
+
250struct future_stored_type<> {
+
251 using type = monostate;
+
252};
+
253
+
254template <typename T>
+
255struct future_stored_type<T> {
+
256 using type = std::conditional_t<std::is_void_v<T>, internal::monostate, T>;
+
257};
+
258
+
259template <typename... T>
+
260using future_stored_type_t = typename future_stored_type<T...>::type;
+
261
+
262template<typename T>
+
263using future_tuple_type_t = std::conditional_t<std::is_same_v<T, monostate>, std::tuple<>, std::tuple<T>>;
+
264
+
265// It doesn't seem to be possible to use std::tuple_element_t with an empty tuple. There is an static_assert in it that
+
266// fails the build even if it is in the non enabled side of std::conditional.
+
267template <typename T>
+
268struct get0_return_type;
+
269
+
270template <>
+
271struct get0_return_type<internal::monostate> {
+
272 using type = void;
+
273 static type get0(internal::monostate) { }
+
274};
+
275
+
276template <typename T>
+
277struct get0_return_type {
+
278 using type = T;
+
279 static T get0(T&& v) { return std::move(v); }
+
280};
+
281
+
282template<typename T>
+
283using maybe_wrap_ref = std::conditional_t<std::is_reference_v<T>, std::reference_wrapper<std::remove_reference_t<T>>, T>;
+
284
+
292template <typename T, bool is_trivial_class>
+
293struct uninitialized_wrapper_base;
+
294
+
295template <typename T>
+
296struct uninitialized_wrapper_base<T, false> {
+
297 using tuple_type = future_tuple_type_t<T>;
+
298 union any {
+
299 any() noexcept {}
+
300 ~any() {}
+
301 // T can be a reference, so wrap it.
+
302 maybe_wrap_ref<T> value;
+
303 } _v;
+
304
+
305public:
+
306 uninitialized_wrapper_base() noexcept = default;
+
307 template<typename... U>
+
308 std::enable_if_t<!std::is_same_v<std::tuple<std::remove_cv_t<U>...>, std::tuple<tuple_type>>, void>
+
309 uninitialized_set(U&&... vs) {
+
310 new (&_v.value) maybe_wrap_ref<T>(T(std::forward<U>(vs)...));
+
311 }
+
312 void uninitialized_set(tuple_type&& v) {
+
313 uninitialized_set(std::move(std::get<0>(v)));
+
314 }
+
315 void uninitialized_set(const tuple_type& v) {
+
316 uninitialized_set(std::get<0>(v));
+
317 }
+
318 maybe_wrap_ref<T>& uninitialized_get() {
+
319 return _v.value;
+
320 }
+
321 const maybe_wrap_ref<T>& uninitialized_get() const {
+
322 return _v.value;
+
323 }
+
324};
+
325
+
326template <typename T> struct uninitialized_wrapper_base<T, true> : private T {
+
327 using tuple_type = future_tuple_type_t<T>;
+
328 uninitialized_wrapper_base() noexcept = default;
+
329 template<typename... U>
+
330 std::enable_if_t<!std::is_same_v<std::tuple<std::remove_cv_t<U>...>, std::tuple<tuple_type>>, void>
+
331 uninitialized_set(U&&... vs) {
+
332 new (this) T(std::forward<U>(vs)...);
+
333 }
+
334 void uninitialized_set(tuple_type&& v) {
+
335 if constexpr (std::tuple_size_v<tuple_type> != 0) {
+
336 uninitialized_set(std::move(std::get<0>(v)));
+
337 }
+
338 }
+
339 void uninitialized_set(const tuple_type& v) {
+
340 if constexpr (std::tuple_size_v<tuple_type> != 0) {
+
341 uninitialized_set(std::get<0>(v));
+
342 }
+
343 }
+
344 T& uninitialized_get() {
+
345 return *this;
+
346 }
+
347 const T& uninitialized_get() const {
+
348 return *this;
+
349 }
+
350};
+
351
+
352template <typename T>
+
353constexpr bool can_inherit =
+
354 (std::is_trivially_destructible_v<T> && std::is_trivially_constructible_v<T> &&
+
355 std::is_class_v<T> && !std::is_final_v<T>);
+
356
+
357// The objective is to avoid extra space for empty types like std::tuple<>. We could use std::is_empty_v, but it is
+
358// better to check that both the constructor and destructor can be skipped.
+
359template <typename T>
+
360struct uninitialized_wrapper
+
361 : public uninitialized_wrapper_base<T, can_inherit<T>> {};
+
362
+
363template <typename T>
+
364struct is_trivially_move_constructible_and_destructible {
+
365 static constexpr bool value = std::is_trivially_move_constructible_v<T> && std::is_trivially_destructible_v<T>;
+
366};
+
367
+
368template <bool... v>
+
369struct all_true : std::false_type {};
+
370
+
371template <>
+
372struct all_true<> : std::true_type {};
+
373
+
374template <bool... v>
+
375struct all_true<true, v...> : public all_true<v...> {};
+
376
+
377template<typename T>
+
378struct is_tuple_effectively_trivially_move_constructible_and_destructible_helper;
+
379
+
380template <typename... T>
+
381struct is_tuple_effectively_trivially_move_constructible_and_destructible_helper<std::tuple<T...>> {
+
382 static constexpr bool value = all_true<is_trivially_move_constructible_and_destructible<T>::value...>::value;
+
383};
+
384
+
385template <typename T>
+
386static constexpr bool is_tuple_effectively_trivially_move_constructible_and_destructible =
+
387 is_tuple_effectively_trivially_move_constructible_and_destructible_helper<T>::value;
+
388
+
389}
+
390
+
391//
+
392// A future/promise pair maintain one logical value (a future_state).
+
393// There are up to three places that can store it, but only one is
+
394// active at any time.
+
395//
+
396// - in the promise _local_state member variable
+
397//
+
398// This is necessary because a promise is created first and there
+
399// would be nowhere else to put the value.
+
400//
+
401// - in the future _state variable
+
402//
+
403// This is used anytime a future exists and then has not been called
+
404// yet. This guarantees a simple access to the value for any code
+
405// that already has a future.
+
406//
+
407// - in the task associated with the .then() clause (after .then() is called,
+
408// if a value was not set)
+
409//
+
410//
+
411// The promise maintains a pointer to the state, which is modified as
+
412// the state moves to a new location due to events (such as .then() or
+
413// get_future being called) or due to the promise or future being
+
414// moved around.
+
415//
+
416
+
417// non templated base class to reduce code duplication
+
418SEASTAR_MODULE_EXPORT
+ +
420 static_assert(sizeof(std::exception_ptr) == sizeof(void*), "exception_ptr not a pointer");
+
421 enum class state : uintptr_t {
+
422 invalid = 0,
+
423 future = 1,
+
424 // the substate is intended to decouple the run-time prevention
+
425 // for duplicative result extraction (calling e.g. then() twice
+
426 // ends up in abandoned()) from the wrapped object's destruction
+
427 // handling which is orchestrated by future_state. Instead of
+
428 // creating a temporary future_state just for the sake of setting
+
429 // the "invalid" in the source instance, result_unavailable can
+
430 // be set to ensure future_state_base::available() returns false.
+
431 result_unavailable = 2,
+
432 result = 3,
+
433 exception_min = 4, // or anything greater
+
434 };
+
435 union any {
+
436 any() noexcept { st = state::future; }
+
437 any(state s) noexcept { st = s; }
+
438 void set_exception(std::exception_ptr&& e) noexcept {
+
439 new (&ex) std::exception_ptr(std::move(e));
+
440 assert(st >= state::exception_min);
+
441 }
+
442 any(std::exception_ptr&& e) noexcept {
+
443 set_exception(std::move(e));
+
444 }
+
445 // From a users' perspective, a result_unavailable is not valid
+
446 bool valid() const noexcept { return st != state::invalid && st != state::result_unavailable; }
+
447 bool available() const noexcept { return st == state::result || st >= state::exception_min; }
+
448 bool failed() const noexcept { return __builtin_expect(st >= state::exception_min, false); }
+
449 void check_failure() noexcept;
+
450 ~any() noexcept { }
+
451 std::exception_ptr take_exception() noexcept {
+
452 std::exception_ptr ret(std::move(ex));
+
453 // Unfortunately in libstdc++ ~exception_ptr is defined out of line. We know that it does nothing for
+
454 // moved out values, so we omit calling it. This is critical for the code quality produced for this
+
455 // function. Without the out of line call, gcc can figure out that both sides of the if produce
+
456 // identical code and merges them.if
+
457 // We don't make any assumptions about other c++ libraries.
+
458 // There is request with gcc to define it inline: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90295
+
459#ifndef __GLIBCXX__
+
460 ex.~exception_ptr();
+
461#endif
+
462 st = state::invalid;
+
463 return ret;
+
464 }
+
465 void move_it(any&& x) noexcept {
+
466#ifdef __GLIBCXX__
+
467 // Unfortunally gcc cannot fully optimize the regular
+
468 // implementation:
+
469 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95014
+
470 // Given what we know about the libstdc++ implementation
+
471 // (see the comment in take_exception), we can just
+
472 // memmove and zero x. We use memmove to guarantee
+
473 // vaild results if &x == this.
+
474 memmove(static_cast<void*>(this), &x, sizeof(any));
+
475 x.st = state::invalid;
+
476#else
+
477 if (x.st < state::exception_min) {
+
478 st = x.st;
+
479 x.st = state::invalid;
+
480 } else {
+
481 new (&ex) std::exception_ptr(x.take_exception());
+
482 }
+
483#endif
+
484 }
+
485 any(any&& x) noexcept {
+
486 move_it(std::move(x));
+
487 }
+
488 any& operator=(any&& x) noexcept {
+
489 check_failure();
+
490 // If this is a self move assignment, check_failure
+
491 // guarantees that we don't have an exception and calling
+
492 // move_it is safe.
+
493 move_it(std::move(x));
+
494 return *this;
+
495 }
+
496 bool has_result() const noexcept {
+
497 return st == state::result || st == state::result_unavailable;
+
498 }
+
499 state st;
+
500 std::exception_ptr ex;
+
501 } _u;
+
502
+
503 future_state_base() noexcept = default;
+
504 future_state_base(state st) noexcept : _u(st) { }
+
505 future_state_base(std::exception_ptr&& ex) noexcept : _u(std::move(ex)) { }
+
506 future_state_base(future_state_base&& x) noexcept : _u(std::move(x._u)) { }
+
507
+
508 // We never need to destruct this polymorphicly, so we can make it
+
509 // protected instead of virtual.
+
510protected:
+ + + + + +
516 ~future_state_base() noexcept = default;
+
517
+
518 void rethrow_exception() &&;
+
519 void rethrow_exception() const&;
+
520
+
521public:
+
522
+
523 bool valid() const noexcept { return _u.valid(); }
+
524 bool available() const noexcept { return _u.available(); }
+
525 bool failed() const noexcept { return _u.failed(); }
+
526
+
527 void ignore() noexcept;
+
528
+
529 void set_exception(std::exception_ptr&& ex) noexcept {
+
530 assert(_u.st == state::future);
+
531 _u.set_exception(std::move(ex));
+
532 }
+
533 future_state_base& operator=(future_state_base&& x) noexcept = default;
+
534 void set_exception(future_state_base&& state) noexcept {
+
535 assert(_u.st == state::future);
+
536 *this = std::move(state);
+
537 }
+
538 std::exception_ptr get_exception() && noexcept {
+
539 assert(_u.st >= state::exception_min);
+
540 // Move ex out so future::~future() knows we've handled it
+
541 return _u.take_exception();
+
542 }
+
543 const std::exception_ptr& get_exception() const& noexcept {
+
544 assert(_u.st >= state::exception_min);
+
545 return _u.ex;
+
546 }
+
547 template <typename U>
+
548 friend struct future_state;
+
549 template <typename U>
+ +
551 template <typename U>
+
552 friend class future;
+
553 template <typename T>
+
554 friend struct futurize;
+
555};
+
556
+
557void report_failed_future(future_state_base::any&& state) noexcept;
+
558
+
559inline void future_state_base::any::check_failure() noexcept {
+
560 if (failed()) {
+
561 report_failed_future(std::move(*this));
+
562 }
+
563}
+
564
+ + + +
568
+
570template <typename T>
+
571struct future_state : public future_state_base, private internal::uninitialized_wrapper<T> {
+
572 static constexpr bool copy_noexcept = std::is_nothrow_copy_constructible_v<T>;
+
573 static constexpr bool has_trivial_move_and_destroy = internal::is_trivially_move_constructible_and_destructible<T>::value;
+
574 static_assert(std::is_nothrow_move_constructible_v<T>,
+
575 "Types must be no-throw move constructible");
+
576 static_assert(std::is_nothrow_destructible_v<T>,
+
577 "Types must be no-throw destructible");
+
578 future_state() noexcept = default;
+
579 void move_it(future_state&& x) noexcept {
+
580 if constexpr (has_trivial_move_and_destroy) {
+
581#pragma GCC diagnostic push
+
582 // This function may copy uninitialized memory, such as when
+
583 // creating an uninitialized promise and calling get_future()
+
584 // on it. Gcc 12 started to catch some simple cases of this
+
585 // at compile time, so we need to tell it that it's fine.
+
586#pragma GCC diagnostic ignored "-Wuninitialized"
+
587 memmove(reinterpret_cast<char*>(&this->uninitialized_get()),
+
588 &x.uninitialized_get(),
+
589 internal::used_size<internal::maybe_wrap_ref<T>>::value);
+
590#pragma GCC diagnostic pop
+
591 } else if (_u.has_result()) {
+
592 this->uninitialized_set(std::move(x.uninitialized_get()));
+
593 std::destroy_at(&x.uninitialized_get());
+
594 }
+
595 }
+
596
+
597 [[gnu::always_inline]]
+
598 future_state(future_state&& x) noexcept : future_state_base(std::move(x)) {
+
599 move_it(std::move(x));
+
600 }
+
601
+
602 void clear() noexcept {
+
603 if (_u.has_result()) {
+
604 std::destroy_at(&this->uninitialized_get());
+
605 } else {
+
606 _u.check_failure();
+
607 }
+
608 }
+
609 __attribute__((always_inline))
+
610 ~future_state() noexcept {
+
611 clear();
+
612 }
+
613 future_state& operator=(future_state&& x) noexcept {
+
614 clear();
+
615 future_state_base::operator=(std::move(x));
+
616 // If &x == this, _u.st is now state::invalid and so it is
+
617 // safe to call move_it.
+
618 move_it(std::move(x));
+
619 return *this;
+
620 }
+
621 template <typename... A>
+
622 future_state(ready_future_marker, A&&... a) noexcept : future_state_base(state::result) {
+
623 try {
+
624 this->uninitialized_set(std::forward<A>(a)...);
+
625 } catch (...) {
+
626 new (this) future_state(current_exception_future_marker());
+
627 }
+
628 }
+
629 template <typename... A>
+
630 void set(A&&... a) noexcept {
+
631 assert(_u.st == state::future);
+
632 new (this) future_state(ready_future_marker(), std::forward<A>(a)...);
+
633 }
+
634 future_state(exception_future_marker, std::exception_ptr&& ex) noexcept : future_state_base(std::move(ex)) { }
+
635 future_state(exception_future_marker, future_state_base&& state) noexcept : future_state_base(std::move(state)) { }
+
636 future_state(current_exception_future_marker m) noexcept : future_state_base(m) { }
+
637 future_state(nested_exception_marker m, future_state_base&& old) noexcept : future_state_base(m, std::move(old)) { }
+
638 future_state(nested_exception_marker m, future_state_base&& n, future_state_base&& old) noexcept : future_state_base(m, std::move(n), std::move(old)) { }
+
639 T&& get_value() && noexcept {
+
640 assert(_u.st == state::result);
+
641 return static_cast<T&&>(this->uninitialized_get());
+
642 }
+
643 T&& take_value() && noexcept {
+
644 assert(_u.st == state::result);
+
645 _u.st = state::result_unavailable;
+
646 return static_cast<T&&>(this->uninitialized_get());
+
647 }
+
648 template<typename U = T>
+
649 const std::enable_if_t<std::is_copy_constructible_v<U>, U>& get_value() const& noexcept(copy_noexcept) {
+
650 assert(_u.st == state::result);
+
651 return this->uninitialized_get();
+
652 }
+
653 T&& take() && {
+
654 assert(available());
+
655 if (_u.st >= state::exception_min) {
+
656 std::move(*this).rethrow_exception();
+
657 }
+
658 _u.st = state::result_unavailable;
+
659 return static_cast<T&&>(this->uninitialized_get());
+
660 }
+
661 T&& get() && {
+
662 assert(available());
+
663 if (_u.st >= state::exception_min) {
+
664 std::move(*this).rethrow_exception();
+
665 }
+
666 return static_cast<T&&>(this->uninitialized_get());
+
667 }
+
668 const T& get() const& {
+
669 assert(available());
+
670 if (_u.st >= state::exception_min) {
+
671 rethrow_exception();
+
672 }
+
673 return this->uninitialized_get();
+
674 }
+
675 using get0_return_type = typename internal::get0_return_type<T>::type;
+
676 static get0_return_type get0(T&& x) {
+
677 return internal::get0_return_type<T>::get0(std::move(x));
+
678 }
+
679
+
680 get0_return_type get0() {
+
681 return std::move(*this).get();
+
682 }
+
683};
+
684
+
685template <typename T = void>
+
686class continuation_base : public task {
+
687protected:
+
688 using future_state = seastar::future_state<internal::future_stored_type_t<T>>;
+
689 future_state _state;
+
690 using future_type = future<T>;
+
691 using promise_type = promise<T>;
+
692public:
+
693 continuation_base() noexcept = default;
+
694 void set_state(future_state&& state) noexcept {
+
695 _state = std::move(state);
+
696 }
+
697 // This override of waiting_task() is needed here because there are cases
+
698 // when backtrace is obtained from the destructor of this class and objects
+
699 // of derived classes are already destroyed at that time. If we didn't
+
700 // have this override we would get a "pure virtual function call" exception.
+
701 virtual task* waiting_task() noexcept override { return nullptr; }
+
702 friend class internal::promise_base_with_type<T>;
+
703 friend class promise<T>;
+
704 friend class future<T>;
+
705};
+
706
+
707// Given a future type, find the corresponding continuation_base.
+
708template <typename Future>
+
709struct continuation_base_from_future;
+
710
+
711template <typename... T>
+
712struct continuation_base_from_future<future<T...>> {
+
713 using type = continuation_base<T...>;
+
714};
+
715
+
716template <typename Future>
+
717using continuation_base_from_future_t = typename continuation_base_from_future<Future>::type;
+
718
+
719template <typename Promise, typename T = void>
+
720class continuation_base_with_promise : public continuation_base<T> {
+
721 friend class internal::promise_base_with_type<T>;
+
722protected:
+
723 continuation_base_with_promise(Promise&& pr) noexcept : _pr(std::move(pr)) {
+
724 task::make_backtrace();
+
725 }
+
726 virtual task* waiting_task() noexcept override;
+
727 Promise _pr;
+
728};
+
729
+
730template <typename Promise, typename Func, typename Wrapper, typename T = void>
+
731struct continuation final : continuation_base_with_promise<Promise, T> {
+
732 // Func is the original function passed to then/then_wrapped. The
+
733 // Wrapper is a helper function that implements the specific logic
+
734 // needed by then/then_wrapped. We call the wrapper passing it the
+
735 // original function, promise and state.
+
736 // Note that if Func's move constructor throws, this will call
+
737 // std::unexpected. We could try to require Func to be nothrow
+
738 // move constructible, but that will cause a lot of churn. Since
+
739 // we can't support a failure to create a continuation, calling
+
740 // std::unexpected as close to the failure as possible is the best
+
741 // we can do.
+
742 continuation(Promise&& pr, Func&& func, Wrapper&& wrapper) noexcept
+
743 : continuation_base_with_promise<Promise, T>(std::move(pr))
+
744 , _func(std::move(func))
+
745 , _wrapper(std::move(wrapper)) {}
+
746 virtual void run_and_dispose() noexcept override {
+
747 try {
+
748 _wrapper(std::move(this->_pr), _func, std::move(this->_state));
+
749 } catch (...) {
+
750 this->_pr.set_to_current_exception();
+
751 }
+
752 delete this;
+
753 }
+
754 Func _func;
+
755 [[no_unique_address]] Wrapper _wrapper;
+
756};
+
757
+
758namespace internal {
+
759
+
760template <typename T = void>
+
761future<T> make_exception_future(future_state_base&& state) noexcept;
+
762
+
763template <typename T = void>
+
764void set_callback(future<T>&& fut, continuation_base<T>* callback) noexcept;
+
765
+
766class future_base;
+
767
+
768class promise_base {
+
769protected:
+
770 enum class urgent { no, yes };
+
771 future_base* _future = nullptr;
+
772
+
773 // This points to the future_state that is currently being
+
774 // used. See comment above the future_state struct definition for
+
775 // details.
+
776 future_state_base* _state;
+
777
+
778 task* _task = nullptr;
+
779#ifdef SEASTAR_DEBUG_PROMISE
+
780 int _task_shard = -1;
+
781
+
782 void set_task(task* task) noexcept {
+
783 _task = task;
+
784 _task_shard = this_shard_id();
+
785 }
+
786 void assert_task_shard() const noexcept;
+
787#else
+
788 void set_task(task* task) noexcept {
+
789 _task = task;
+
790 }
+
791 void assert_task_shard() const noexcept { }
+
792#endif
+
793
+
794 promise_base(const promise_base&) = delete;
+
795 promise_base(future_state_base* state) noexcept : _state(state) {}
+
796 promise_base(future_base* future, future_state_base* state) noexcept;
+
797 void move_it(promise_base&& x) noexcept;
+
798 promise_base(promise_base&& x) noexcept;
+
799
+
800 void clear() noexcept;
+
801
+
802 // We never need to destruct this polymorphicly, so we can make it
+
803 // protected instead of virtual
+
804 ~promise_base() noexcept {
+
805 clear();
+
806 }
+
807
+
808 void operator=(const promise_base&) = delete;
+
809 promise_base& operator=(promise_base&& x) noexcept;
+
810
+
811 template<urgent Urgent>
+
812 void make_ready() noexcept;
+
813
+
814 template<typename T>
+
815 void set_exception_impl(T&& val) noexcept {
+
816 if (_state) {
+
817 _state->set_exception(std::move(val));
+
818 make_ready<urgent::no>();
+
819 } else {
+
820 // We get here if promise::get_future is called and the
+
821 // returned future is destroyed without creating a
+
822 // continuation.
+
823 // In older versions of seastar we would store a local
+
824 // copy of ex and warn in the promise destructor.
+
825 // Since there isn't any way for the user to clear
+
826 // the exception, we issue the warning from here.
+
827 report_failed_future(val);
+
828 }
+
829 }
+
830
+
831 void set_exception(future_state_base&& state) noexcept {
+
832 set_exception_impl(std::move(state));
+
833 }
+
834
+
835 void set_exception(std::exception_ptr&& ex) noexcept {
+
836 set_exception_impl(std::move(ex));
+
837 }
+
838
+
839 void set_exception(const std::exception_ptr& ex) noexcept {
+
840 set_exception(std::exception_ptr(ex));
+
841 }
+
842
+
843 template<typename Exception>
+
844 std::enable_if_t<!std::is_same_v<std::remove_reference_t<Exception>, std::exception_ptr>, void> set_exception(Exception&& e) noexcept {
+
845 set_exception(std::make_exception_ptr(std::forward<Exception>(e)));
+
846 }
+
847
+
848 friend class future_base;
+
849 template <typename U> friend class seastar::future;
+
850
+
851public:
+
856 void set_to_current_exception() noexcept;
+
857
+
859 task* waiting_task() const noexcept { return _task; }
+
860};
+
861
+
868template <typename T>
+
869class promise_base_with_type : protected internal::promise_base {
+
870protected:
+
871 using future_state = seastar::future_state<future_stored_type_t<T>>;
+
872 future_state* get_state() noexcept {
+
873 return static_cast<future_state*>(_state);
+
874 }
+
875 static constexpr bool copy_noexcept = future_state::copy_noexcept;
+
876public:
+
877 promise_base_with_type(future_state_base* state) noexcept : promise_base(state) { }
+
878 promise_base_with_type(future<T>* future) noexcept : promise_base(future, &future->_state) { }
+
879 promise_base_with_type(promise_base_with_type&& x) noexcept = default;
+
880 promise_base_with_type(const promise_base_with_type&) = delete;
+
881 promise_base_with_type& operator=(promise_base_with_type&& x) noexcept = default;
+
882 void operator=(const promise_base_with_type&) = delete;
+
883
+
884 void set_urgent_state(future_state&& state) noexcept {
+
885 auto* ptr = get_state();
+
886 // The state can be null if the corresponding future has been
+
887 // destroyed without producing a continuation.
+
888 if (ptr) {
+
889 // FIXME: This is a fairly expensive assert. It would be a
+
890 // good candidate for being disabled in release builds if
+
891 // we had such an assert.
+
892 assert(ptr->_u.st == future_state_base::state::future);
+
893 new (ptr) future_state(std::move(state));
+
894 make_ready<urgent::yes>();
+
895 }
+
896 }
+
897
+
898 template <typename... A>
+
899 void set_value(A&&... a) noexcept {
+
900 if (auto *s = get_state()) {
+
901 s->set(std::forward<A>(a)...);
+
902 make_ready<urgent::no>();
+
903 }
+
904 }
+
905
+
910 void set_to_current_exception() noexcept {
+
911 internal::promise_base::set_to_current_exception();
+
912 }
+
913
+
915 using internal::promise_base::waiting_task;
+
916
+
917private:
+
918
+
919 template <typename U>
+
920 friend class seastar::future;
+
921
+
922 friend future_state;
+
923};
+
924}
+
926
+
932SEASTAR_MODULE_EXPORT
+
933template <typename T>
+
934class promise : private internal::promise_base_with_type<T> {
+
935 using future_state = typename internal::promise_base_with_type<T>::future_state;
+
936 future_state _local_state;
+
937
+
938public:
+
942 promise() noexcept : internal::promise_base_with_type<T>(&_local_state) {}
+
943
+
945 void move_it(promise&& x) noexcept;
+
946 promise(promise&& x) noexcept : internal::promise_base_with_type<T>(std::move(x)) {
+
947 move_it(std::move(x));
+
948 }
+
949 promise(const promise&) = delete;
+
950 promise& operator=(promise&& x) noexcept {
+
951 internal::promise_base_with_type<T>::operator=(std::move(x));
+
952 // If this is a self-move, _state is now nullptr and it is
+
953 // safe to call move_it.
+
954 move_it(std::move(x));
+
955 return *this;
+
956 }
+
957 void operator=(const promise&) = delete;
+
958
+
963 void set_to_current_exception() noexcept {
+
964 internal::promise_base::set_to_current_exception();
+
965 }
+
966
+
968 using internal::promise_base::waiting_task;
+
969
+ +
977
+
989 template <typename... A>
+
990 void set_value(A&&... a) noexcept {
+
991 internal::promise_base_with_type<T>::set_value(std::forward<A>(a)...);
+
992 }
+
993
+
998 void set_exception(std::exception_ptr&& ex) noexcept {
+
999 internal::promise_base::set_exception(std::move(ex));
+
1000 }
+
1001
+
1002 void set_exception(const std::exception_ptr& ex) noexcept {
+
1003 internal::promise_base::set_exception(ex);
+
1004 }
+
1005
+
1010 template<typename Exception>
+
1011 std::enable_if_t<!std::is_same_v<std::remove_reference_t<Exception>, std::exception_ptr>, void> set_exception(Exception&& e) noexcept {
+
1012 internal::promise_base::set_exception(std::forward<Exception>(e));
+
1013 }
+
1014
+
1015 using internal::promise_base_with_type<T>::set_urgent_state;
+
1016
+
1017 template <typename U>
+
1018 friend class future;
+
1019};
+
1020
+
1022
+
1025
+
1026
+
1032template <typename... T> struct is_future : std::false_type {};
+
1033
+
1036template <typename... T> struct is_future<future<T...>> : std::true_type {};
+
1037
+
1039
+
1040
+
1044SEASTAR_MODULE_EXPORT
+
1045template <typename T>
+
1046struct futurize;
+
1047
+
1048template <typename T>
+
1049concept Future = is_future<T>::value;
+
1050
+
1051template <typename Func, typename... T>
+
1052concept CanInvoke = std::invocable<Func, T...>;
+
1053
+
1054// Deprecated alias
+
1055template <typename Func, typename... T>
+
1056concept CanApply = CanInvoke<Func, T...>;
+
1057
+
1058template <typename Func, typename... T>
+
1059concept CanApplyTuple
+
1060 = sizeof...(T) == 1
+
1061 && requires (Func func, std::tuple<T...> wrapped_val) {
+
1062 { std::apply(func, std::get<0>(std::move(wrapped_val))) };
+
1063 };
+
1064
+
1065// Deprecated, use std::is_invocable_r_v
+
1066template <typename Func, typename Return, typename... T>
+
1067concept InvokeReturns = requires (Func f, T... args) {
+
1068 { f(std::forward<T>(args)...) } -> std::same_as<Return>;
+
1069};
+
1070
+
1071// Deprecated alias
+
1072template <typename Func, typename Return, typename... T>
+
1073concept ApplyReturns = InvokeReturns<Func, Return, T...>;
+
1074
+
1075template <typename Func, typename... T>
+
1076concept InvokeReturnsAnyFuture = Future<std::invoke_result_t<Func, T...>>;
+
1077
+
1078// Deprecated alias
+
1079template <typename Func, typename... T>
+
1080concept ApplyReturnsAnyFuture = InvokeReturnsAnyFuture<Func, T...>;
+
1081
+
1083
+
1084// Converts a type to a future type, if it isn't already.
+
1085template <typename T>
+
1086using futurize_t = typename futurize<T>::type;
+
1087
+
1089
+
1090template<typename Func, typename... Args>
+
1091auto futurize_invoke(Func&& func, Args&&... args) noexcept;
+
1092
+
1093template<typename Func, typename... Args>
+
1094auto futurize_apply(Func&& func, std::tuple<Args...>&& args) noexcept;
+
1095
+
1098namespace internal {
+
1099class future_base {
+
1100protected:
+
1101 promise_base* _promise;
+
1102 future_base() noexcept : _promise(nullptr) {}
+
1103 future_base(promise_base* promise, future_state_base* state) noexcept : _promise(promise) {
+
1104 _promise->_future = this;
+
1105 _promise->_state = state;
+
1106 }
+
1107
+
1108 void move_it(future_base&& x, future_state_base* state) noexcept {
+
1109 _promise = x._promise;
+
1110 if (auto* p = _promise) {
+
1111 x.detach_promise();
+
1112 p->_future = this;
+
1113 p->_state = state;
+
1114 }
+
1115 }
+
1116
+
1117 future_base(future_base&& x, future_state_base* state) noexcept {
+
1118 move_it(std::move(x), state);
+
1119 }
+
1120
+
1121 void clear() noexcept {
+
1122 if (_promise) {
+
1123 detach_promise();
+
1124 }
+
1125 }
+
1126
+
1127 ~future_base() noexcept {
+
1128 clear();
+
1129 }
+
1130
+
1131 promise_base* detach_promise() noexcept {
+
1132 _promise->_state = nullptr;
+
1133 _promise->_future = nullptr;
+
1134 return std::exchange(_promise, nullptr);
+
1135 }
+
1136
+
1137 void schedule(task* tws, future_state_base* state) noexcept {
+
1138 promise_base* p = detach_promise();
+
1139 p->_state = state;
+
1140 p->set_task(tws);
+
1141 }
+
1142
+
1143 void do_wait() noexcept;
+
1144
+
1145 void set_coroutine(task& coroutine) noexcept;
+
1146
+
1147 friend class promise_base;
+
1148};
+
1149
+
1150template <typename Func, typename... T>
+
1151struct future_result {
+
1152 using type = std::invoke_result_t<Func, T...>;
+
1153 using future_type = futurize_t<type>;
+
1154 using func_type = future_type (T&&...);
+
1155};
+
1156
+
1157template <typename Func>
+
1158struct future_result<Func, void> {
+
1159 using type = std::invoke_result_t<Func>;
+
1160 using future_type = futurize_t<type>;
+
1161 using func_type = future_type ();
+
1162};
+
1163
+
1164template <typename Func, typename T>
+
1165using future_result_t = typename future_result<Func, T>::type;
+
1166
+
1167template <typename Func, typename T>
+
1168auto future_invoke(Func&& func, T&& v) {
+
1169 if constexpr (std::is_same_v<T, monostate>) {
+
1170 return std::invoke(std::forward<Func>(func));
+
1171 } else {
+
1172 return std::invoke(std::forward<Func>(func), std::forward<T>(v));
+
1173 }
+
1174}
+
1175
+
1176template <typename Func, typename... T>
+
1177struct result_of_apply {
+
1178 // no "type" member if not a function call signature or not a tuple
+
1179};
+
1180
+
1181template <typename Func, typename... T>
+
1182struct result_of_apply<Func, std::tuple<T...>> : std::invoke_result<Func, T...> {
+
1183 // Let std::invoke_result_t determine the result if the input is a tuple
+
1184};
+
1185
+
1186template <typename Func, typename... T>
+
1187using result_of_apply_t = typename result_of_apply<Func, T...>::type;
+
1188
+
1189}
+
1190
+
1191template <typename Promise, typename T>
+
1192task* continuation_base_with_promise<Promise, T>::waiting_task() noexcept {
+
1193 return _pr.waiting_task();
+
1194}
+
1195
+
1238SEASTAR_MODULE_EXPORT
+
1239template <typename T>
+
1240class [[nodiscard]] future : private internal::future_base {
+
1241 using future_state = seastar::future_state<internal::future_stored_type_t<T>>;
+
1242 future_state _state;
+
1243 static constexpr bool copy_noexcept = future_state::copy_noexcept;
+
1244
+
1245private:
+
1246 // This constructor creates a future that is not ready but has no
+
1247 // associated promise yet. The use case is to have a less flexible
+
1248 // but more efficient future/promise pair where we know that
+
1249 // promise::set_value cannot possibly be called without a matching
+
1250 // future and so that promise doesn't need to store a
+
1251 // future_state.
+ +
1253
+
1254 future(promise<T>* pr) noexcept : future_base(pr, &_state), _state(std::move(pr->_local_state)) { }
+
1255 template <typename... A>
+
1256 future(ready_future_marker m, A&&... a) noexcept : _state(m, std::forward<A>(a)...) { }
+ +
1258 future(future_state_base::nested_exception_marker m, future_state_base&& old) noexcept : _state(m, std::move(old)) {}
+
1259 future(future_state_base::nested_exception_marker m, future_state_base&& n, future_state_base&& old) noexcept : _state(m, std::move(n), std::move(old)) {}
+
1260 future(exception_future_marker m, std::exception_ptr&& ex) noexcept : _state(m, std::move(ex)) { }
+
1261 future(exception_future_marker m, future_state_base&& state) noexcept : _state(m, std::move(state)) { }
+
1262 [[gnu::always_inline]]
+
1263 explicit future(future_state&& state) noexcept
+
1264 : _state(std::move(state)) {
+
1265 }
+
1266 internal::promise_base_with_type<T> get_promise() noexcept {
+
1267 assert(!_promise);
+
1268 return internal::promise_base_with_type<T>(this);
+
1269 }
+
1270 internal::promise_base_with_type<T>* detach_promise() noexcept {
+
1271 return static_cast<internal::promise_base_with_type<T>*>(future_base::detach_promise());
+
1272 }
+
1273 void schedule(continuation_base<T>* tws) noexcept {
+
1274 future_base::schedule(tws, &tws->_state);
+
1275 }
+
1276 template <typename Pr, typename Func, typename Wrapper>
+
1277 void schedule(Pr&& pr, Func&& func, Wrapper&& wrapper) noexcept {
+
1278 // If this new throws a std::bad_alloc there is nothing that
+
1279 // can be done about it. The corresponding future is not ready
+
1280 // and we cannot break the chain. Since this function is
+
1281 // noexcept, it will call std::terminate if new throws.
+ +
1283 auto tws = new continuation<Pr, Func, Wrapper, T>(std::move(pr), std::move(func), std::move(wrapper));
+
1284 // In a debug build we schedule ready futures, but not in
+
1285 // other build modes.
+
1286#ifdef SEASTAR_DEBUG
+
1287 if (_state.available()) {
+
1288 tws->set_state(get_available_state_ref());
+
1289 ::seastar::schedule(tws);
+
1290 return;
+
1291 }
+
1292#endif
+
1293 schedule(tws);
+
1294 _state._u.st = future_state_base::state::invalid;
+
1295 }
+
1296
+
1297 [[gnu::always_inline]]
+
1298 future_state&& get_available_state_ref() noexcept {
+
1299 if (_promise) {
+
1300 detach_promise();
+
1301 }
+
1302 return std::move(_state);
+
1303 }
+
1304
+
1305 future<T> rethrow_with_nested(future_state_base&& n) noexcept {
+
1306 return future<T>(future_state_base::nested_exception_marker(), std::move(n), std::move(_state));
+
1307 }
+
1308
+
1309 future<T> rethrow_with_nested() noexcept {
+
1310 return future<T>(future_state_base::nested_exception_marker(), std::move(_state));
+
1311 }
+
1312
+
1313 template<typename... U>
+
1314 friend class shared_future;
+
1315public:
+
1317 using value_type = internal::future_stored_type_t<T>;
+
1318 using tuple_type = internal::future_tuple_type_t<value_type>;
+ +
1322 [[gnu::always_inline]]
+
1323 future(future&& x) noexcept : future_base(std::move(x), &_state), _state(std::move(x._state)) { }
+
1324 future(const future&) = delete;
+
1325 future& operator=(future&& x) noexcept {
+
1326 clear();
+
1327 move_it(std::move(x), &_state);
+
1328 _state = std::move(x._state);
+
1329 return *this;
+
1330 }
+
1331 void operator=(const future&) = delete;
+
1341 [[gnu::always_inline]]
+ +
1343 wait();
+
1344 return get_available_state_ref().take();
+
1345 }
+
1346
+
1347 [[gnu::always_inline]]
+
1348 std::exception_ptr get_exception() noexcept {
+
1349 return get_available_state_ref().get_exception();
+
1350 }
+
1351
+
1372 using get0_return_type = typename future_state::get0_return_type;
+
1373 [[deprecated("Use get() instead")]]
+
1374 get0_return_type get0() {
+
1375 return (get0_return_type)get();
+
1376 }
+
1377
+
1383 void wait() noexcept {
+
1384 if (_state.available()) {
+
1385 return;
+
1386 }
+
1387 do_wait();
+
1388 }
+
1389
+
1393 [[gnu::always_inline]]
+
1394 bool available() const noexcept {
+
1395 return _state.available();
+
1396 }
+
1397
+
1401 [[gnu::always_inline]]
+
1402 bool failed() const noexcept {
+
1403 return _state.failed();
+
1404 }
+
1405
+
1421 template <typename Func, typename Result = typename internal::future_result<Func, T>::future_type>
+
1422 requires std::invocable<Func, T>
+
1423 || (std::same_as<void, T> && std::invocable<Func>)
+
1424 Result
+
1425 then(Func&& func) noexcept {
+
1426#ifndef SEASTAR_TYPE_ERASE_MORE
+
1427 return then_impl(std::move(func));
+
1428#else
+
1429 using func_type = typename internal::future_result<Func, T>::func_type;
+ +
1431 {
+ +
1433 ncf = noncopyable_function<func_type>([func = std::forward<Func>(func)](auto&&... args) mutable {
+
1434 return futurize_invoke(func, std::forward<decltype(args)>(args)...);
+
1435 });
+
1436 }
+
1437 return then_impl(std::move(ncf));
+
1438#endif
+
1439 }
+
1440
+
1460 template <typename Func, typename Result = futurize_t<internal::result_of_apply_t<Func, T>>>
+
1461 requires ::seastar::CanApplyTuple<Func, T>
+
1462 Result
+
1463 then_unpack(Func&& func) noexcept {
+
1464 return then([func = std::forward<Func>(func)] (T&& tuple) mutable {
+
1465 // sizeof...(tuple) is required to be 1
+
1466 return std::apply(func, std::move(tuple));
+
1467 });
+
1468 }
+
1469
+
1470private:
+
1471
+
1472 // Keep this simple so that Named Return Value Optimization is used.
+
1473 template <typename Func, typename Result>
+
1474 Result then_impl_nrvo(Func&& func) noexcept {
+ +
1476 typename futurator::type fut(future_for_get_promise_marker{});
+
1477 using pr_type = decltype(fut.get_promise());
+
1478 schedule(fut.get_promise(), std::move(func), [](pr_type&& pr, Func& func, future_state&& state) {
+
1479 if (state.failed()) {
+
1480 pr.set_exception(static_cast<future_state_base&&>(std::move(state)));
+
1481 } else {
+
1482 futurator::satisfy_with_result_of(std::move(pr), [&func, &state] {
+
1483 // clang thinks that "state" is not used, below, for future<>.
+
1484 // Make it think it is used to avoid an unused-lambda-capture warning.
+
1485 (void)state;
+
1486 return internal::future_invoke(func, std::move(state).get_value());
+
1487 });
+
1488 }
+
1489 });
+
1490 return fut;
+
1491 }
+
1492
+
1493 template <typename Func, typename Result = futurize_t<internal::future_result_t<Func, T>>>
+
1494 Result
+
1495 then_impl(Func&& func) noexcept {
+
1496#ifndef SEASTAR_DEBUG
+
1497 using futurator = futurize<internal::future_result_t<Func, T>>;
+
1498 if (failed()) {
+
1499 return futurator::make_exception_future(static_cast<future_state_base&&>(get_available_state_ref()));
+
1500 } else if (available()) {
+
1501 return futurator::invoke(std::forward<Func>(func), get_available_state_ref().take_value());
+
1502 }
+
1503#endif
+
1504 return then_impl_nrvo<Func, Result>(std::forward<Func>(func));
+
1505 }
+
1506
+
1507public:
+
1523 template <std::invocable<future> Func, typename FuncResult = std::invoke_result_t<Func, future>>
+
1524 futurize_t<FuncResult>
+
1525 then_wrapped(Func&& func) & noexcept {
+
1526 return then_wrapped_maybe_erase<false, FuncResult>(std::forward<Func>(func));
+
1527 }
+
1528
+
1529 template <std::invocable<future&&> Func, typename FuncResult = std::invoke_result_t<Func, future&&>>
+
1530 futurize_t<FuncResult>
+
1531 then_wrapped(Func&& func) && noexcept {
+
1532 return then_wrapped_maybe_erase<true, FuncResult>(std::forward<Func>(func));
+
1533 }
+
1534
+
1535private:
+
1536
+
1537 template <bool AsSelf, typename FuncResult, typename Func>
+
1538 futurize_t<FuncResult>
+
1539 then_wrapped_maybe_erase(Func&& func) noexcept {
+
1540#ifndef SEASTAR_TYPE_ERASE_MORE
+
1541 return then_wrapped_common<AsSelf, FuncResult>(std::forward<Func>(func));
+
1542#else
+
1543 using futurator = futurize<FuncResult>;
+
1544 using WrapFuncResult = typename futurator::type;
+
1545 noncopyable_function<WrapFuncResult (future&&)> ncf;
+
1546 {
+
1547 memory::scoped_critical_alloc_section _;
+
1548 ncf = noncopyable_function<WrapFuncResult(future &&)>([func = std::forward<Func>(func)](future&& f) mutable {
+
1549 return futurator::invoke(func, std::move(f));
+
1550 });
+
1551 }
+
1552 return then_wrapped_common<AsSelf, WrapFuncResult>(std::move(ncf));
+
1553#endif
+
1554 }
+
1555
+
1556 // Keep this simple so that Named Return Value Optimization is used.
+
1557 template <typename FuncResult, typename Func>
+
1558 futurize_t<FuncResult>
+
1559 then_wrapped_nrvo(Func&& func) noexcept {
+
1560 using futurator = futurize<FuncResult>;
+
1561 typename futurator::type fut(future_for_get_promise_marker{});
+
1562 using pr_type = decltype(fut.get_promise());
+
1563 schedule(fut.get_promise(), std::move(func), [](pr_type&& pr, Func& func, future_state&& state) {
+
1564 futurator::satisfy_with_result_of(std::move(pr), [&func, &state] {
+
1565 return func(future(std::move(state)));
+
1566 });
+
1567 });
+
1568 return fut;
+
1569 }
+
1570
+
1571
+
1572 template <bool AsSelf, typename FuncResult, typename Func>
+
1573 futurize_t<FuncResult>
+
1574 then_wrapped_common(Func&& func) noexcept {
+
1575#ifndef SEASTAR_DEBUG
+
1576 using futurator = futurize<FuncResult>;
+
1577 if (available()) {
+
1578 if constexpr (AsSelf) {
+
1579 if (_promise) {
+
1580 detach_promise();
+
1581 }
+
1582 return futurator::invoke(std::forward<Func>(func), std::move(*this));
+
1583 } else {
+
1584 return futurator::invoke(std::forward<Func>(func), future(get_available_state_ref()));
+
1585 }
+
1586 }
+
1587#endif
+
1588 return then_wrapped_nrvo<FuncResult, Func>(std::forward<Func>(func));
+
1589 }
+
1590
+
1591 void forward_to(internal::promise_base_with_type<T>&& pr) noexcept {
+
1592 if (_state.available()) {
+
1593 pr.set_urgent_state(std::move(_state));
+
1594 } else {
+
1595 *detach_promise() = std::move(pr);
+
1596 }
+
1597 }
+
1598
+
1599public:
+
1610 void forward_to(promise<T>&& pr) noexcept {
+
1611 if (_state.available()) {
+
1612 pr.set_urgent_state(std::move(_state));
+
1613 } else if (&pr._local_state != pr._state) {
+
1614 // The only case when _state points to _local_state is
+
1615 // when get_future was never called. Given that pr will
+
1616 // soon be destroyed, we know get_future will never be
+
1617 // called and we can just ignore this request.
+
1618 *detach_promise() = std::move(pr);
+
1619 }
+
1620 }
+
1621
+
1622
+
1623
+
1639 template <std::invocable Func>
+
1640 future<T> finally(Func&& func) noexcept {
+
1641 return then_wrapped(finally_body<Func, is_future<std::invoke_result_t<Func>>::value>(std::forward<Func>(func)));
+
1642 }
+
1643
+
1644
+
1645 template <typename Func, bool FuncReturnsFuture>
+ +
1647
+
1648 template <typename Func>
+
1649 struct finally_body<Func, true> {
+
1650 Func _func;
+
1651
+
1652 finally_body(Func&& func) noexcept : _func(std::forward<Func>(func))
+
1653 { }
+
1654
+
1655 future<T> operator()(future<T>&& result) noexcept {
+
1656 return futurize_invoke(_func).then_wrapped([result = std::move(result)](auto&& f_res) mutable {
+
1657 if (!f_res.failed()) {
+
1658 return std::move(result);
+
1659 } else {
+
1660 return result.rethrow_with_nested(std::move(f_res._state));
+
1661 }
+
1662 });
+
1663 }
+
1664 };
+
1665
+
1666 template <typename Func>
+
1667 struct finally_body<Func, false> {
+
1668 Func _func;
+
1669
+
1670 finally_body(Func&& func) noexcept : _func(std::forward<Func>(func))
+
1671 { }
+
1672
+
1673 future<T> operator()(future<T>&& result) noexcept {
+
1674 try {
+
1675 _func();
+
1676 return std::move(result);
+
1677 } catch (...) {
+
1678 return result.rethrow_with_nested();
+
1679 }
+
1680 };
+
1681 };
+
1682
+ +
1688 return then_wrapped([] (auto&& f) {
+
1689 try {
+
1690 f.get();
+
1691 } catch (...) {
+
1692 engine_exit(std::current_exception());
+
1693 }
+
1694 });
+
1695 }
+
1696
+ +
1702 // We need the generic variadic lambda, below, because then() behaves differently
+
1703 // when value_type is when_all_succeed_tuple
+
1704 return then([] (auto&&...) {});
+
1705 }
+
1706
+
1720 template <typename Func>
+
1721 requires std::is_invocable_r_v<future<T> ,Func, std::exception_ptr>
+
1722 || (std::tuple_size_v<tuple_type> == 0 && std::is_invocable_r_v<void, Func, std::exception_ptr>)
+
1723 || (std::tuple_size_v<tuple_type> == 1 && std::is_invocable_r_v<T, Func, std::exception_ptr>)
+
1724 || (std::tuple_size_v<tuple_type> > 1 && std::is_invocable_r_v<tuple_type ,Func, std::exception_ptr>)
+
1725 future<T> handle_exception(Func&& func) noexcept {
+
1726 return then_wrapped([func = std::forward<Func>(func)]
+
1727 (auto&& fut) mutable -> future<T> {
+
1728 if (!fut.failed()) {
+
1729 return make_ready_future<T>(fut.get());
+
1730 } else {
+
1731 return futurize_invoke(func, fut.get_exception());
+
1732 }
+
1733 });
+
1734 }
+
1735
+
1746 template <typename Func>
+
1747 future<T> handle_exception_type(Func&& func) noexcept {
+
1748 using trait = function_traits<Func>;
+
1749 static_assert(trait::arity == 1, "func can take only one parameter");
+
1750 using ex_type = typename trait::template arg<0>::type;
+
1751 return then_wrapped([func = std::forward<Func>(func)]
+
1752 (auto&& fut) mutable -> future<T> {
+
1753 try {
+
1754 return make_ready_future<T>(fut.get());
+
1755 } catch(ex_type& ex) {
+
1756 return futurize_invoke(func, ex);
+
1757 }
+
1758 });
+
1759 }
+
1760
+
1766 void ignore_ready_future() noexcept {
+
1767 _state.ignore();
+
1768 }
+
1769
+
1770 using future_base::set_coroutine;
+
1771
+
1772private:
+
1773 void set_task(task& t) noexcept {
+
1774 assert(_promise);
+
1775 _promise->set_task(&t);
+
1776 }
+
1777
+
1778 void set_callback(continuation_base<T>* callback) noexcept {
+
1779 if (_state.available()) {
+
1780 callback->set_state(get_available_state_ref());
+
1781 ::seastar::schedule(callback);
+
1782 } else {
+
1783 assert(_promise);
+
1784 schedule(callback);
+
1785 }
+
1786
+
1787 }
+
1788
+
1790 template <typename U>
+
1791 friend class future;
+
1792 template <typename U>
+
1793 friend class promise;
+
1794 template <typename U>
+
1795 friend struct futurize;
+
1796 template <typename U>
+
1797 friend class internal::promise_base_with_type;
+
1798 template <typename U, typename... A>
+
1799 friend future<U> make_ready_future(A&&... value) noexcept;
+
1800 template <typename U>
+
1801 friend future<U> make_exception_future(std::exception_ptr&& ex) noexcept;
+
1802 template <typename U, typename Exception>
+
1803 friend future<U> make_exception_future(Exception&& ex) noexcept;
+
1804 template <typename U>
+
1805 friend future<U> internal::make_exception_future(future_state_base&& state) noexcept;
+
1806 template <typename U>
+
1807 friend future<U> current_exception_as_future() noexcept;
+
1808 template <typename U>
+
1809 friend void internal::set_callback(future<U>&&, continuation_base<U>*) noexcept;
+
1811};
+
1812
+
1813
+
1814namespace internal {
+
1815template <typename T>
+
1816struct futurize_base {
+
1818 using type = future<T>;
+
1820 using promise_type = promise<T>;
+
1821 using promise_base_with_type = internal::promise_base_with_type<T>;
+
1822
+
1824 static inline type convert(T&& value) { return make_ready_future<T>(std::move(value)); }
+
1825 static inline type convert(type&& value) { return std::move(value); }
+
1826
+
1828 template <typename Arg>
+
1829 static inline type make_exception_future(Arg&& arg) noexcept;
+
1830};
+
1831
+
1832template <>
+
1833struct futurize_base<void> {
+
1834 using type = future<>;
+
1835 using promise_type = promise<>;
+
1836 using promise_base_with_type = internal::promise_base_with_type<>;
+
1837
+
1838 static inline type convert(type&& value) {
+
1839 return std::move(value);
+
1840 }
+
1841 template <typename Arg>
+
1842 static inline type make_exception_future(Arg&& arg) noexcept;
+
1843};
+
1844
+
1845template <typename T>
+
1846struct futurize_base<future<T>> : public futurize_base<T> {};
+
1847
+
1848template <>
+
1849struct futurize_base<future<>> : public futurize_base<void> {};
+
1850}
+
1851
+
1852template <typename T>
+
1853struct futurize : public internal::futurize_base<T> {
+
1854 using base = internal::futurize_base<T>;
+
1855 using type = typename base::type;
+
1856 using promise_type = typename base::promise_type;
+
1857 using promise_base_with_type = typename base::promise_base_with_type;
+ +
1860 using tuple_type = typename type::tuple_type;
+
1861 using base::convert;
+
1862 using base::make_exception_future;
+
1863
+
1866 template<typename Func, typename... FuncArgs>
+
1867 static inline type apply(Func&& func, std::tuple<FuncArgs...>&& args) noexcept;
+
1868
+
1871 template<typename Func, typename... FuncArgs>
+
1872 static inline type invoke(Func&& func, FuncArgs&&... args) noexcept;
+
1873
+
1874 template<typename Func>
+
1875 static inline type invoke(Func&& func, internal::monostate) noexcept {
+
1876 return invoke(std::forward<Func>(func));
+
1877 }
+
1878
+
1880 template<typename Func, typename... FuncArgs>
+
1881 [[deprecated("Use invoke for varargs")]]
+
1882 static inline type apply(Func&& func, FuncArgs&&... args) noexcept {
+
1883 return invoke(std::forward<Func>(func), std::forward<FuncArgs>(args)...);
+
1884 }
+
1885
+
1886 static type current_exception_as_future() noexcept {
+ +
1888 }
+
1889
+
1891 static type from_tuple(tuple_type&& value) {
+
1892 return type(ready_future_marker(), std::move(value));
+
1893 }
+
1895 static type from_tuple(const tuple_type& value) {
+
1896 return type(ready_future_marker(), value);
+
1897 }
+
1898
+
1900 static type from_tuple(value_type&& value) {
+
1901 return type(ready_future_marker(), std::move(value));
+
1902 }
+
1904 static type from_tuple(const value_type& value) {
+
1905 return type(ready_future_marker(), value);
+
1906 }
+
1907private:
+
1911 template<std::invocable Func>
+
1912 static void satisfy_with_result_of(promise_base_with_type&&, Func&& func);
+
1913
+
1914 template <typename U>
+
1915 friend class future;
+
1916};
+
1917
+
1918inline internal::promise_base::promise_base(future_base* future, future_state_base* state) noexcept
+
1919 : _future(future), _state(state) {
+
1920 _future->_promise = this;
+
1921}
+
1922
+
1923template <typename T>
+
1924inline
+
1925future<T>
+ +
1927 assert(!this->_future && this->_state && !this->_task);
+
1928 return future<T>(this);
+
1929}
+
1930
+
1931template <typename T>
+
1932inline
+
1933void promise<T>::move_it(promise&& x) noexcept {
+
1934 if (this->_state == &x._local_state) {
+
1935 this->_state = &_local_state;
+
1936 new (&_local_state) future_state(std::move(x._local_state));
+
1937 }
+
1938}
+
1939
+
1940SEASTAR_MODULE_EXPORT_BEGIN
+
1941template <typename T, typename... A>
+
1942inline
+
1943future<T> make_ready_future(A&&... value) noexcept {
+
1944 return future<T>(ready_future_marker(), std::forward<A>(value)...);
+
1945}
+
1946
+
1947template <typename T>
+
1948inline
+
1949future<T> make_exception_future(std::exception_ptr&& ex) noexcept {
+
1950 return future<T>(exception_future_marker(), std::move(ex));
+
1951}
+
1952SEASTAR_MODULE_EXPORT_END
+
1953
+
1954template <typename T>
+
1955inline
+
1956future<T> internal::make_exception_future(future_state_base&& state) noexcept {
+
1957 return future<T>(exception_future_marker(), std::move(state));
+
1958}
+
1959
+
1960SEASTAR_MODULE_EXPORT_BEGIN
+
1961template <typename T>
+ + +
1964}
+
1965
+
1966void log_exception_trace() noexcept;
+
1967
+
1974template <typename T, typename Exception>
+
1975inline
+
1976future<T> make_exception_future(Exception&& ex) noexcept {
+
1977 log_exception_trace();
+
1978 return make_exception_future<T>(std::make_exception_ptr(std::forward<Exception>(ex)));
+
1979}
+
1980
+
1981template <typename T, typename Exception>
+
1982future<T> make_exception_future_with_backtrace(Exception&& ex) noexcept {
+
1983 return make_exception_future<T>(make_backtraced_exception_ptr<Exception>(std::forward<Exception>(ex)));
+
1984}
+
1985SEASTAR_MODULE_EXPORT_END
+
1986
+
1988
+
1990
+
1991template<typename T>
+
1992template<typename Func, typename... FuncArgs>
+
1993typename futurize<T>::type futurize<T>::apply(Func&& func, std::tuple<FuncArgs...>&& args) noexcept {
+
1994 try {
+
1995 using ret_t = decltype(std::apply(std::forward<Func>(func), std::move(args)));
+
1996 if constexpr (std::is_void_v<ret_t>) {
+
1997 std::apply(std::forward<Func>(func), std::move(args));
+
1998 return make_ready_future<>();
+
1999 } else if constexpr (is_future<ret_t>::value){
+
2000 return std::apply(std::forward<Func>(func), std::move(args));
+
2001 } else {
+
2002 return convert(std::apply(std::forward<Func>(func), std::move(args)));
+
2003 }
+
2004 } catch (...) {
+ +
2006 }
+
2007}
+
2008
+
2009template<typename T>
+
2010template<std::invocable Func>
+
2011void futurize<T>::satisfy_with_result_of(promise_base_with_type&& pr, Func&& func) {
+
2012 using ret_t = decltype(func());
+
2013 if constexpr (std::is_void_v<ret_t>) {
+
2014 func();
+
2015 pr.set_value();
+
2016 } else if constexpr (is_future<ret_t>::value) {
+
2017 func().forward_to(std::move(pr));
+
2018 } else {
+
2019 pr.set_value(func());
+
2020 }
+
2021}
+
2022
+
2023template<typename T>
+
2024template<typename Func, typename... FuncArgs>
+
2025typename futurize<T>::type futurize<T>::invoke(Func&& func, FuncArgs&&... args) noexcept {
+
2026 try {
+
2027 using ret_t = decltype(func(std::forward<FuncArgs>(args)...));
+
2028 if constexpr (std::is_void_v<ret_t>) {
+
2029 func(std::forward<FuncArgs>(args)...);
+
2030 return make_ready_future<>();
+
2031 } else if constexpr (is_future<ret_t>::value) {
+
2032 return func(std::forward<FuncArgs>(args)...);
+
2033 } else {
+
2034 return convert(func(std::forward<FuncArgs>(args)...));
+
2035 }
+
2036 } catch (...) {
+ +
2038 }
+
2039}
+
2040
+
2041template <typename T>
+
2042template <typename Arg>
+
2043inline
+
2044future<T>
+
2045internal::futurize_base<T>::make_exception_future(Arg&& arg) noexcept {
+
2046 using ::seastar::make_exception_future;
+
2047 using ::seastar::internal::make_exception_future;
+
2048 return make_exception_future<T>(std::forward<Arg>(arg));
+
2049}
+
2050
+
2051template <typename Arg>
+
2052inline
+
2053future<>
+
2054internal::futurize_base<void>::make_exception_future(Arg&& arg) noexcept {
+
2055 using ::seastar::make_exception_future;
+
2056 using ::seastar::internal::make_exception_future;
+
2057 return make_exception_future<>(std::forward<Arg>(arg));
+
2058}
+
2059
+
2060template<typename Func, typename... Args>
+
2061auto futurize_invoke(Func&& func, Args&&... args) noexcept {
+
2062 using futurator = futurize<std::invoke_result_t<Func, Args&&...>>;
+
2063 return futurator::invoke(std::forward<Func>(func), std::forward<Args>(args)...);
+
2064}
+
2065
+
2066template<typename Func, typename... Args>
+
2067[[deprecated("Use futurize_invoke for varargs")]]
+
2068auto futurize_apply(Func&& func, Args&&... args) noexcept {
+
2069 return futurize_invoke(std::forward<Func>(func), std::forward<Args>(args)...);
+
2070}
+
2071
+
2072template<typename Func, typename... Args>
+
2073auto futurize_apply(Func&& func, std::tuple<Args...>&& args) noexcept {
+
2074 using futurator = futurize<std::invoke_result_t<Func, Args&&...>>;
+
2075 return futurator::apply(std::forward<Func>(func), std::move(args));
+
2076}
+
2077
+
2078namespace internal {
+
2079
+
2080template <typename T>
+
2081inline
+
2082void set_callback(future<T>&& fut, continuation_base<T>* callback) noexcept {
+
2083 return std::move(fut).set_callback(callback);
+
2084}
+
2085
+
2086}
+
2087
+
2088
+
2090
+
2091}
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
futurize_t< FuncResult > then_wrapped(Func &&func) &noexcept
Schedule a block of code to run when the future is ready, allowing for exception handling.
Definition: future.hh:1525
+
future< T > handle_exception_type(Func &&func) noexcept
Handle the exception of a certain type carried by this future.
Definition: future.hh:1747
+
void wait() noexcept
Definition: future.hh:1383
+
internal::future_stored_type_t< T > value_type
The data type carried by the future.
Definition: future.hh:1317
+
future< T > handle_exception(Func &&func) noexcept
Handle the exception carried by this future.
Definition: future.hh:1725
+
Result then(Func &&func) noexcept
Schedule a block of code to run when the future is ready.
Definition: future.hh:1425
+
value_type && get()
gets the value returned by the computation
Definition: future.hh:1342
+
bool failed() const noexcept
Checks whether the future has failed.
Definition: future.hh:1402
+
requires ::seastar::CanApplyTuple< Func, T > Result then_unpack(Func &&func) noexcept
Schedule a block of code to run when the future is ready, unpacking tuples.
Definition: future.hh:1463
+
bool available() const noexcept
Checks whether the future is available.
Definition: future.hh:1394
+
typename future_state::get0_return_type get0_return_type
Definition: future.hh:1372
+
void forward_to(promise< T > &&pr) noexcept
Satisfy some promise object with this future as a result.
Definition: future.hh:1610
+
future(future &&x) noexcept
Moves the future into a new object.
Definition: future.hh:1323
+
future discard_result() noexcept
Discards the value carried by this future.
Definition: future.hh:1701
+
future or_terminate() noexcept
Terminate the program if this future fails.
Definition: future.hh:1687
+
void ignore_ready_future() noexcept
Ignore any result hold by this future.
Definition: future.hh:1766
+
Definition: future.hh:1646
+
promise - allows a future value to be made available at a later time.
Definition: future.hh:934
+
void set_to_current_exception() noexcept
Definition: future.hh:963
+
std::enable_if_t<!std::is_same_v< std::remove_reference_t< Exception >, std::exception_ptr >, void > set_exception(Exception &&e) noexcept
Marks the promise as failed.
Definition: future.hh:1011
+
void set_value(A &&... a) noexcept
Sets the promises value.
Definition: future.hh:990
+
void set_exception(std::exception_ptr &&ex) noexcept
Marks the promise as failed.
Definition: future.hh:998
+
promise() noexcept
Constructs an empty promise.
Definition: future.hh:942
+
Like future except the result can be waited for by many fibers.
Definition: shared_future.hh:108
+
Definition: task.hh:34
+
future< T > make_ready_future(A &&... value) noexcept
Creates a future in an available, value state.
Definition: future.hh:1943
+
future< T > get_future() noexcept
Gets the promise's associated future.
Definition: future.hh:1926
+
future< std::remove_cv_t< std::remove_reference_t< T > > > as_ready_future(T &&v) noexcept
Returns a ready future that is already resolved.
Definition: future.hh:173
+
future< T > make_exception_future(std::exception_ptr &&value) noexcept
Creates a future in an available, failed state.
Definition: future.hh:1949
+
future< T > current_exception_as_future() noexcept
Returns std::current_exception() wrapped in a future.
Definition: future.hh:1962
+
void move_it(promise &&x) noexcept
Moves a promise object.
Definition: future.hh:1933
+
Definition: future.hh:566
+ +
Definition: future.hh:565
+
Definition: critical_alloc_section.hh:80
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
shard_id this_shard_id() noexcept
Returns shard_id of the of the current shard.
Definition: shard_id.hh:52
+
Definition: noncopyable_function.hh:37
+
Definition: function_traits.hh:62
+
STL namespace.
+ +
Exception type for broken promises.
Definition: future.hh:222
+
Definition: future.hh:419
+
friend future< U > current_exception_as_future() noexcept
Returns std::current_exception() wrapped in a future.
Definition: future.hh:1962
+ + +
Converts a type to a future type, if it isn't already.
Definition: future.hh:1853
+
static type apply(Func &&func, FuncArgs &&... args) noexcept
Deprecated alias of invoke.
Definition: future.hh:1882
+
static type from_tuple(tuple_type &&value)
Convert the tuple representation into a future.
Definition: future.hh:1891
+
static type from_tuple(value_type &&value)
Convert the tuple representation into a future.
Definition: future.hh:1900
+
static type apply(Func &&func, std::tuple< FuncArgs... > &&args) noexcept
+
static type from_tuple(const value_type &value)
Convert the tuple representation into a future.
Definition: future.hh:1904
+
static type from_tuple(const tuple_type &value)
Convert the tuple representation into a future.
Definition: future.hh:1895
+
typename type::value_type value_type
The value tuple type associated with type.
Definition: future.hh:1859
+
static type invoke(Func &&func, FuncArgs &&... args) noexcept
+
Check whether a type is a future.
Definition: future.hh:1032
+
Definition: future.hh:48
+
Definition: future.hh:435
+
+ + + + diff --git a/master/gate_8hh_source.html b/master/gate_8hh_source.html new file mode 100644 index 000000000..8c6e97da4 --- /dev/null +++ b/master/gate_8hh_source.html @@ -0,0 +1,373 @@ + + + + + + + +Seastar: seastar/core/gate.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
gate.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2014 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <boost/intrusive/list.hpp>
+
26
+
27#include <seastar/core/future.hh>
+
28#include <seastar/util/std-compat.hh>
+
29#include <seastar/util/modules.hh>
+
30#include <cassert>
+
31#include <exception>
+
32#include <optional>
+
33#include <utility>
+
34#endif
+
35
+
36#ifdef SEASTAR_DEBUG
+
37#define SEASTAR_GATE_HOLDER_DEBUG
+
38#endif
+
39
+
40namespace seastar {
+
41
+
44
+
47SEASTAR_MODULE_EXPORT
+
48class gate_closed_exception : public std::exception {
+
49public:
+
50 virtual const char* what() const noexcept override {
+
51 return "gate closed";
+
52 }
+
53};
+
54
+
60SEASTAR_MODULE_EXPORT
+
61class gate {
+
62 size_t _count = 0;
+
63 std::optional<promise<>> _stopped;
+
64
+
65#ifdef SEASTAR_GATE_HOLDER_DEBUG
+
66 void assert_not_held_when_moved() const noexcept;
+
67 void assert_not_held_when_destroyed() const noexcept;
+
68#else // SEASTAR_GATE_HOLDER_DEBUG
+
69 void assert_not_held_when_moved() const noexcept {}
+
70 void assert_not_held_when_destroyed() const noexcept {}
+
71#endif // SEASTAR_GATE_HOLDER_DEBUG
+
72
+
73public:
+
74 // Implemented to force noexcept due to boost:intrusive::list
+
75 gate() noexcept {};
+
76 gate(const gate&) = delete;
+
77 gate(gate&& x) noexcept
+
78 : _count(std::exchange(x._count, 0)), _stopped(std::exchange(x._stopped, std::nullopt)) {
+
79 x.assert_not_held_when_moved();
+
80 }
+
81 gate& operator=(gate&& x) noexcept {
+
82 if (this != &x) {
+
83 assert(!_count && "gate reassigned with outstanding requests");
+
84 x.assert_not_held_when_moved();
+
85 _count = std::exchange(x._count, 0);
+
86 _stopped = std::exchange(x._stopped, std::nullopt);
+
87 }
+
88 return *this;
+
89 }
+
90 ~gate() {
+
91 assert(!_count && "gate destroyed with outstanding requests");
+
92 assert_not_held_when_destroyed();
+
93 }
+
98 bool try_enter() noexcept {
+
99 bool opened = !_stopped;
+
100 if (opened) {
+
101 ++_count;
+
102 }
+
103 return opened;
+
104 }
+
109 void enter() {
+
110 if (!try_enter()) {
+
111 throw gate_closed_exception();
+
112 }
+
113 }
+
118 void leave() noexcept {
+
119 --_count;
+
120 if (!_count && _stopped) {
+
121 _stopped->set_value();
+
122 }
+
123 }
+
133 void check() {
+
134 if (_stopped) {
+
135 throw gate_closed_exception();
+
136 }
+
137 }
+
143 future<> close() noexcept {
+
144 assert(!_stopped && "seastar::gate::close() cannot be called more than once");
+
145 _stopped = std::make_optional(promise<>());
+
146 if (!_count) {
+
147 _stopped->set_value();
+
148 }
+
149 return _stopped->get_future();
+
150 }
+
151
+
153 size_t get_count() const noexcept {
+
154 return _count;
+
155 }
+
156
+
158 bool is_closed() const noexcept {
+
159 return bool(_stopped);
+
160 }
+
161
+
171 class holder {
+
172 gate* _g;
+
173#ifdef SEASTAR_GATE_HOLDER_DEBUG
+
174 using member_hook_t = boost::intrusive::list_member_hook<boost::intrusive::link_mode<boost::intrusive::auto_unlink>>;
+
175 member_hook_t _link;
+
176
+
177 void debug_hold_gate() noexcept {
+
178 if (_g) {
+
179 _g->_holders.push_back(*this);
+
180 }
+
181 }
+
182
+
183 void debug_release_gate() noexcept {
+
184 _link.unlink();
+
185 }
+
186#else // SEASTAR_GATE_HOLDER_DEBUG
+
187 void debug_hold_gate() noexcept {}
+
188 void debug_release_gate() noexcept {}
+
189#endif // SEASTAR_GATE_HOLDER_DEBUG
+
190
+
191 // release the holder from the gate without leaving it.
+
192 // used for release and move.
+
193 gate* release_gate() noexcept {
+
194 auto* g = std::exchange(_g, nullptr);
+
195 if (g) {
+
196 debug_release_gate();
+
197 }
+
198 return g;
+
199 }
+
200
+
201 friend class gate;
+
202 public:
+
205 holder() noexcept : _g(nullptr) { }
+
206
+
209 explicit holder(gate& g) : _g(&g) {
+
210 _g->enter();
+
211 debug_hold_gate();
+
212 }
+
213
+
219 holder(const holder& x) noexcept : _g(x._g) {
+
220 if (_g) {
+
221 _g->_count++;
+
222 debug_hold_gate();
+
223 }
+
224 }
+
225
+
229 holder(holder&& x) noexcept : _g(std::move(x).release_gate()) {
+
230 debug_hold_gate();
+
231 }
+
232
+ +
235 release();
+
236 }
+
237
+
244 holder& operator=(const holder& x) noexcept {
+
245 if (x._g != _g) {
+
246 release();
+
247 _g = x._g;
+
248 if (_g) {
+
249 _g->_count++;
+
250 debug_hold_gate();
+
251 }
+
252 }
+
253 return *this;
+
254 }
+
255
+
260 holder& operator=(holder&& x) noexcept {
+
261 if (&x != this) {
+
262 release();
+
263 _g = std::move(x).release_gate();
+
264 debug_hold_gate();
+
265 }
+
266 return *this;
+
267 }
+
268
+
270 void release() noexcept {
+
271 if (auto g = release_gate()) {
+
272 g->leave();
+
273 }
+
274 }
+
275 };
+
276
+ +
280 return holder(*this);
+
281 }
+
282
+
286 std::optional<holder> try_hold() noexcept {
+
287 return is_closed() ? std::nullopt : std::make_optional<holder>(*this);
+
288 }
+
289
+
290private:
+
291#ifdef SEASTAR_GATE_HOLDER_DEBUG
+
292 using holders_list_t = boost::intrusive::list<holder,
+
293 boost::intrusive::member_hook<holder, holder::member_hook_t, &holder::_link>,
+
294 boost::intrusive::constant_time_size<false>>;
+
295
+
296 holders_list_t _holders;
+
297#endif // SEASTAR_GATE_HOLDER_DEBUG
+
298};
+
299
+
300#ifdef SEASTAR_GATE_HOLDER_DEBUG
+
301SEASTAR_MODULE_EXPORT
+
302inline void gate::assert_not_held_when_moved() const noexcept {
+
303 assert(_holders.empty() && "gate moved with outstanding holders");
+
304}
+
305inline void gate::assert_not_held_when_destroyed() const noexcept {
+
306 assert(_holders.empty() && "gate destroyed with outstanding holders");
+
307}
+
308#endif // SEASTAR_GATE_HOLDER_DEBUG
+
309
+
310namespace internal {
+
311
+
312template <typename Func>
+
313inline
+
314auto
+
315invoke_func_with_gate(gate::holder&& gh, Func&& func) noexcept {
+
316 return futurize_invoke(std::forward<Func>(func)).finally([gh = std::forward<gate::holder>(gh)] {});
+
317}
+
318
+
319} // namespace internal
+
320
+
329SEASTAR_MODULE_EXPORT
+
330template <typename Func>
+
331inline
+
332auto
+
333with_gate(gate& g, Func&& func) {
+
334 return internal::invoke_func_with_gate(g.hold(), std::forward<Func>(func));
+
335}
+
336
+
348SEASTAR_MODULE_EXPORT
+
349template <typename Func>
+
350inline
+
351auto
+
352try_with_gate(gate& g, Func&& func) noexcept {
+
353 if (g.is_closed()) {
+
354 using futurator = futurize<std::invoke_result_t<Func>>;
+ +
356 }
+
357 return internal::invoke_func_with_gate(g.hold(), std::forward<Func>(func));
+
358}
+
360
+
361
+
362}
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Definition: gate.hh:171
+
holder(gate &g)
Definition: gate.hh:209
+
~holder()
Destroy a holder and leave the referenced gate.
Definition: gate.hh:234
+
holder & operator=(const holder &x) noexcept
Definition: gate.hh:244
+
holder(holder &&x) noexcept
Definition: gate.hh:229
+
holder(const holder &x) noexcept
Definition: gate.hh:219
+
void release() noexcept
Leave the held gate.
Definition: gate.hh:270
+
holder() noexcept
Definition: gate.hh:205
+
holder & operator=(holder &&x) noexcept
Definition: gate.hh:260
+
Definition: gate.hh:48
+
Definition: gate.hh:61
+
bool try_enter() noexcept
Definition: gate.hh:98
+
bool is_closed() const noexcept
Returns whether the gate is closed.
Definition: gate.hh:158
+
future close() noexcept
Definition: gate.hh:143
+
size_t get_count() const noexcept
Returns a current number of registered in-progress requests.
Definition: gate.hh:153
+
void check()
Definition: gate.hh:133
+
std::optional< holder > try_hold() noexcept
Definition: gate.hh:286
+
holder hold()
Definition: gate.hh:279
+
void enter()
Definition: gate.hh:109
+
void leave() noexcept
Definition: gate.hh:118
+ +
auto with_gate(gate &g, Func &&func)
Definition: gate.hh:333
+
auto try_with_gate(gate &g, Func &&func) noexcept
Definition: gate.hh:352
+
future< T > make_exception_future(std::exception_ptr &&value) noexcept
Creates a future in an available, failed state.
Definition: future.hh:1949
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Converts a type to a future type, if it isn't already.
Definition: future.hh:1853
+
+ + + + diff --git a/master/generator_8hh_source.html b/master/generator_8hh_source.html new file mode 100644 index 000000000..54bbda595 --- /dev/null +++ b/master/generator_8hh_source.html @@ -0,0 +1,599 @@ + + + + + + + +Seastar: seastar/coroutine/generator.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
generator.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2022 Kefu Chai ( tchaikov@gmail.com )
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <cassert>
+
25#include <coroutine>
+
26#include <optional>
+
27#include <utility>
+
28#include <seastar/core/future.hh>
+
29
+
30namespace seastar::coroutine::experimental {
+
31
+
32template<typename T, template <typename> class Container = std::optional>
+ +
34
+
45enum class buffer_size_t : size_t;
+
46
+
47namespace internal {
+
48
+
49using std::coroutine_handle;
+
50using std::suspend_never;
+
51using std::suspend_always;
+
52using std::suspend_never;
+
53using std::noop_coroutine;
+
54
+
55template<typename T>
+
56using next_value_t = std::optional<T>;
+
57
+
58template <template <typename> class Container, typename T>
+
59concept Fifo = requires(Container<T>&& c, T&& value) {
+
60 // better off returning a reference though, so we can move away from it
+
61 { c.front() } -> std::same_as<T&>;
+
62 c.pop_front();
+
63 c.push_back(value);
+
64 bool(c.empty());
+
65 { c.size() } -> std::convertible_to<size_t>;
+
66};
+
67
+
68template<typename T>
+
69concept NothrowMoveConstructible = std::is_nothrow_move_constructible_v<T>;
+
70
+
71template<NothrowMoveConstructible T>
+ + +
74 std::optional<seastar::promise<>> _wait_for_next_value;
+
75 generator_type* _generator = nullptr;
+
76
+
77public:
+ + + +
81
+
82 void return_void() noexcept;
+
83 void unhandled_exception() noexcept;
+
84
+
85 template<std::convertible_to<T> U>
+
86 suspend_always yield_value(U&& value) noexcept {
+
87 assert(_generator);
+
88 _generator->put_next_value(std::forward<U>(value));
+
89 assert(_wait_for_next_value);
+
90 _wait_for_next_value->set_value();
+
91 _wait_for_next_value = {};
+
92 return {};
+
93 }
+
94
+
95 generator_type get_return_object() noexcept;
+
96 void set_generator(generator_type* g) noexcept {
+
97 assert(!_generator);
+
98 _generator = g;
+
99 }
+
100
+
101 suspend_always initial_suspend() const noexcept { return {}; }
+
102 suspend_never final_suspend() const noexcept {
+
103 assert(_generator);
+
104 _generator->on_finished();
+
105 return {};
+
106 }
+
107
+
108 seastar::future<> wait_for_next_value() noexcept {
+
109 assert(!_wait_for_next_value);
+
110 return _wait_for_next_value.emplace().get_future();
+
111 }
+
112
+
113 void run_and_dispose() noexcept final {
+
114 using handle_type = coroutine_handle<generator_unbuffered_promise>;
+
115 handle_type::from_promise(*this).resume();
+
116 }
+
117
+
118 seastar::task* waiting_task() noexcept final {
+
119 if (_wait_for_next_value) {
+
120 return _wait_for_next_value->waiting_task();
+
121 } else {
+
122 return nullptr;
+
123 }
+
124 }
+
125};
+
126
+
127template <NothrowMoveConstructible T, template <typename> class Container>
+
128requires Fifo<Container, T>
+
129class generator_buffered_promise;
+
130
+
131template<typename T, template <typename> class Container>
+
132struct yield_awaiter final {
+ +
134 seastar::future<> _future;
+
135
+
136public:
+
137 yield_awaiter(seastar::future<>&& f) noexcept
+
138 : _future{std::move(f)} {}
+
139
+
140 bool await_ready() noexcept {
+
141 return _future.available();
+
142 }
+
143
+
144 coroutine_handle<> await_suspend(coroutine_handle<promise_type> coro) noexcept;
+
145 void await_resume() noexcept { }
+
146};
+
147
+
148
+
149template<NothrowMoveConstructible T, template <typename> class Container>
+
150requires Fifo<Container, T>
+ + +
153
+
154 std::optional<seastar::promise<>> _wait_for_next_value;
+
155 std::optional<seastar::promise<>> _wait_for_free_space;
+
156 generator_type* _generator = nullptr;
+
157 const size_t _buffer_capacity;
+
158
+
159public:
+
160 template<typename... Args>
+
161 generator_buffered_promise(buffer_size_t buffer_capacity, Args&&... args)
+
162 : _buffer_capacity{static_cast<size_t>(buffer_capacity)} {}
+ + +
165 ~generator_buffered_promise() = default;
+
166 void return_void() noexcept {
+
167 if (_wait_for_next_value) {
+
168 _wait_for_next_value->set_value();
+
169 _wait_for_next_value = {};
+
170 }
+
171 }
+
172 void unhandled_exception() noexcept;
+
173
+
174 template<std::convertible_to<T> U>
+
175 yield_awaiter<T, Container> yield_value(U&& value) noexcept {
+
176 bool ready = _generator->put_next_value(std::forward<U>(value));
+
177
+
178 if (_wait_for_next_value) {
+
179 _wait_for_next_value->set_value();
+
180 _wait_for_next_value = {};
+
181 return {make_ready_future()};
+
182 }
+
183 if (ready) {
+
184 return {make_ready_future()};
+
185 } else {
+
186 assert(!_wait_for_free_space);
+
187 return {_wait_for_free_space.emplace().get_future()};
+
188 }
+
189 }
+
190
+
191 auto get_return_object() noexcept -> generator_type;
+
192 void set_generator(generator_type* g) noexcept {
+
193 assert(!_generator);
+
194 _generator = g;
+
195 }
+
196
+
197 suspend_always initial_suspend() const noexcept { return {}; }
+
198 suspend_never final_suspend() const noexcept {
+
199 assert(_generator);
+
200 _generator->on_finished();
+
201 return {};
+
202 }
+
203
+
204 bool is_awaiting() const noexcept {
+
205 return _wait_for_next_value.has_value();
+
206 }
+
207
+
208 coroutine_handle<> coroutine() const noexcept {
+
209 return coroutine_handle<>::from_address(_wait_for_next_value->waiting_task());
+
210 }
+
211
+
212 seastar::future<> wait_for_next_value() noexcept {
+
213 assert(!_wait_for_next_value);
+
214 return _wait_for_next_value.emplace().get_future();
+
215 }
+
216
+
217 void on_reclaim_free_space() noexcept {
+
218 assert(_wait_for_free_space);
+
219 _wait_for_free_space->set_value();
+
220 _wait_for_free_space = {};
+
221 }
+
222
+
223private:
+
224 void run_and_dispose() noexcept final {
+
225 using handle_type = coroutine_handle<generator_buffered_promise>;
+
226 handle_type::from_promise(*this).resume();
+
227 }
+
228
+
229 seastar::task* waiting_task() noexcept final {
+
230 if (_wait_for_next_value) {
+
231 return _wait_for_next_value->waiting_task();
+
232 } else if (_wait_for_free_space) {
+
233 return _wait_for_free_space->waiting_task();
+
234 } else {
+
235 return nullptr;
+
236 }
+
237 }
+
238};
+
239
+
240template<typename T, typename Generator>
+
241struct next_awaiter final {
+
242 using next_value_type = next_value_t<T>;
+
243 Generator* const _generator;
+
244 seastar::task* const _task;
+
245 seastar::future<> _next_value_future;
+
246
+
247public:
+
248 next_awaiter(Generator* generator,
+ +
250 seastar::future<>&& f) noexcept
+
251 : _generator{generator}
+
252 , _task(task)
+
253 , _next_value_future(std::move(f)) {}
+
254
+
255 next_awaiter(const next_awaiter&) = delete;
+
256 next_awaiter(next_awaiter&&) = delete;
+
257
+
258 constexpr bool await_ready() const noexcept {
+
259 return _next_value_future.available() && !seastar::need_preempt();
+
260 }
+
261
+
262 template<typename Promise>
+
263 void await_suspend(coroutine_handle<Promise> coro) noexcept {
+
264 auto& current_task = coro.promise();
+
265 if (_next_value_future.available()) {
+
266 seastar::schedule(&current_task);
+
267 } else {
+
268 _next_value_future.set_coroutine(current_task);
+
269 seastar::schedule(_task);
+
270 }
+
271 }
+
272
+
273 next_value_type await_resume() {
+
274 assert(_next_value_future.available());
+
275 assert(_generator);
+
276 return _generator->take_next_value();
+
277 }
+
278};
+
279
+
280} // namespace internal
+
281
+
312template <typename T, template <typename> class Container>
+
313class generator {
+
314public:
+ +
316
+
317private:
+
318 using handle_type = internal::coroutine_handle<promise_type>;
+
319 handle_type _coro;
+
320 promise_type* _promise;
+
321 Container<T> _values;
+
322 const size_t _buffer_capacity;
+
323 std::exception_ptr _exception;
+
324
+
325public:
+
326 generator(size_t buffer_capacity,
+
327 handle_type coro,
+
328 promise_type* promise) noexcept
+
329 : _coro{coro}
+
330 , _promise{promise}
+
331 , _buffer_capacity{buffer_capacity} {
+
332 assert(_promise);
+
333 _promise->set_generator(this);
+
334 }
+
335 generator(const generator&) = delete;
+
336 generator(generator&& other) noexcept
+
337 : _coro{std::exchange(other._coro, {})}
+
338 , _buffer_capacity{other._buffer_capacity} {}
+
339 generator& operator=(generator&& other) noexcept {
+
340 if (std::addressof(other) != this) {
+
341 auto old_coro = std::exchange(_coro, std::exchange(other._coro, {}));
+
342 if (old_coro) {
+
343 old_coro.destroy();
+
344 }
+
345 }
+
346 return *this;
+
347 }
+
348 ~generator() {
+
349 if (_coro) {
+
350 _coro.destroy();
+
351 }
+
352 }
+
353
+
354 void swap(generator& other) noexcept {
+
355 std::swap(_coro, other._coro);
+
356 }
+
357
+
358 internal::next_awaiter<T, generator> operator()() noexcept {
+
359 if (!_values.empty()) {
+
360 return {this, nullptr, make_ready_future<>()};
+
361 } else if (_exception) [[unlikely]] {
+
362 return {this, nullptr, make_ready_future<>()};
+
363 } else if (_promise) {
+
364 return {this, _promise, _promise->wait_for_next_value()};
+
365 } else {
+
366 return {this, nullptr, make_ready_future<>()};
+
367 }
+
368 }
+
369
+
370 template<typename U>
+
371 bool put_next_value(U&& value) {
+
372 _values.push_back(std::forward<U>(value));
+
373 return _values.size() < _buffer_capacity;
+
374 }
+
375
+
376 internal::next_value_t<T> take_next_value() {
+
377 if (!_values.empty()) [[likely]] {
+
378 auto value = std::move(_values.front());
+
379 bool maybe_reclaim = _values.size() == _buffer_capacity;
+
380 _values.pop_front();
+
381 if (maybe_reclaim) {
+
382 if (_promise) [[likely]] {
+
383 _promise->on_reclaim_free_space();
+
384 }
+
385 }
+
386 return internal::next_value_t<T>(std::move(value));
+
387 } else if (_exception) [[unlikely]] {
+
388 std::rethrow_exception(std::exchange(_exception, nullptr));
+
389 } else {
+
390 return std::nullopt;
+
391 }
+
392 }
+
393
+
394 void on_finished() {
+
395 _promise = nullptr;
+
396 _coro = nullptr;
+
397 }
+
398
+
399 void unhandled_exception() noexcept {
+
400 // called by promise's unhandled_exception()
+
401 assert(!_exception);
+
402 _exception = std::current_exception();
+
403 }
+
404};
+
405
+
406template <typename T>
+
407class generator<T, std::optional> {
+
408public:
+
409 using promise_type = internal::generator_unbuffered_promise<T>;
+
410
+
411private:
+
412 using handle_type = internal::coroutine_handle<promise_type>;
+
413 handle_type _coro;
+
414 promise_type* _promise;
+
415 std::optional<T> _maybe_value;
+
416 std::exception_ptr _exception;
+
417
+
418public:
+
419 generator(handle_type coro,
+
420 promise_type* promise) noexcept
+
421 : _coro{coro}
+
422 , _promise{promise} {
+
423 assert(_promise);
+
424 _promise->set_generator(this);
+
425 }
+
426 generator(const generator&) = delete;
+
427 generator(generator&& other) noexcept
+
428 : _coro{std::exchange(other._coro, {})} {}
+
429 generator& operator=(generator&& other) noexcept {
+
430 if (std::addressof(other) != this) {
+
431 auto old_coro = std::exchange(_coro, std::exchange(other._coro, {}));
+
432 if (old_coro) {
+
433 old_coro.destroy();
+
434 }
+
435 }
+
436 return *this;
+
437 }
+
438 ~generator() {
+
439 if (_coro) {
+
440 _coro.destroy();
+
441 }
+
442 }
+
443
+
444 void swap(generator& other) noexcept {
+
445 std::swap(_coro, other._coro);
+
446 }
+
447
+
448 internal::next_awaiter<T, generator> operator()() noexcept {
+
449 if (_promise) [[likely]] {
+
450 return {this, _promise, _promise->wait_for_next_value()};
+
451 } else {
+
452 return {this, nullptr, make_ready_future<>()};
+
453 }
+
454 }
+
455
+
456 template<typename U>
+
457 void put_next_value(U&& value) noexcept {
+
458 _maybe_value.emplace(std::forward<U>(value));
+
459 }
+
460
+
461 internal::next_value_t<T> take_next_value() {
+
462 if (_maybe_value.has_value()) [[likely]] {
+
463 return std::exchange(_maybe_value, std::nullopt);
+
464 } else if (_exception) [[unlikely]] {
+
465 std::rethrow_exception(std::exchange(_exception, nullptr));
+
466 } else {
+
467 return std::nullopt;
+
468 }
+
469 }
+
470
+
471 void on_finished() {
+
472 _promise = nullptr;
+
473 _coro = nullptr;
+
474 }
+
475
+
476 void unhandled_exception() noexcept {
+
477 assert(!_exception);
+
478 _exception = std::current_exception();
+
479 }
+
480};
+
481
+
482namespace internal {
+
483
+
484template<NothrowMoveConstructible T>
+
485void generator_unbuffered_promise<T>::return_void() noexcept {
+
486 assert(_wait_for_next_value);
+
487 _wait_for_next_value->set_value();
+
488 _wait_for_next_value = {};
+
489}
+
490
+
491template<NothrowMoveConstructible T>
+
492void generator_unbuffered_promise<T>::unhandled_exception() noexcept {
+
493 // instead of storing the current exception into promise, in order to be
+
494 // more consistent, we let generator preserve all the output of produced
+
495 // value, including the values and the exception if any. so we just signal
+
496 // _wait_for_next_value, and delegate generator's unhandled_exception() to
+
497 // store the exception.
+
498 _generator->unhandled_exception();
+
499 if (_wait_for_next_value.has_value()) {
+
500 _wait_for_next_value->set_value();
+
501 _wait_for_next_value = {};
+
502 }
+
503}
+
504
+
505template<NothrowMoveConstructible T>
+
506auto generator_unbuffered_promise<T>::get_return_object() noexcept -> generator_type {
+
507 using handle_type = coroutine_handle<generator_unbuffered_promise<T>>;
+
508 return generator_type{handle_type::from_promise(*this), this};
+
509}
+
510
+
511template<NothrowMoveConstructible T, template <typename> class Container>
+
512requires Fifo<Container, T>
+
513void generator_buffered_promise<T, Container>::unhandled_exception() noexcept {
+
514 _generator->unhandled_exception();
+
515 if (_wait_for_next_value.has_value()) {
+
516 _wait_for_next_value->set_value();
+
517 _wait_for_next_value = {};
+
518 }
+
519}
+
520
+
521template<NothrowMoveConstructible T, template <typename> class Container>
+
522requires Fifo<Container, T>
+
523auto generator_buffered_promise<T, Container>::get_return_object() noexcept -> generator_type {
+
524 using handle_type = coroutine_handle<generator_buffered_promise<T, Container>>;
+
525 return generator_type{_buffer_capacity, handle_type::from_promise(*this), this};
+
526}
+
527
+
528template<typename T, template <typename> class Container>
+
529coroutine_handle<> yield_awaiter<T, Container>::await_suspend(
+
530 coroutine_handle<generator_buffered_promise<T, Container>> coro) noexcept {
+
531 if (_future.available()) {
+
532 auto& current_task = coro.promise();
+
533 seastar::schedule(&current_task);
+
534 return coro;
+
535 } else {
+
536 // we cannot do something like `task.set_coroutine(consumer_task)`.
+
537 // because, instead of waiting for a subcoroutine, we are pending on
+
538 // the caller of current coroutine to consume the produced values to
+
539 // free up at least a free slot in the buffer, if we set the `_task`
+
540 // of the of the awaiting task, we would have an infinite loop of
+
541 // "promise->_task".
+
542 return noop_coroutine();
+
543 }
+
544}
+
545
+
546} // namespace internal
+
547} // namespace seastar::coroutine::experimental
+ + + +
seastar::task * waiting_task() noexcept final
Returns the next task which is waiting for this task to complete execution, or nullptr.
Definition: generator.hh:118
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
bool available() const noexcept
Checks whether the future is available.
Definition: future.hh:1394
+
promise - allows a future value to be made available at a later time.
Definition: future.hh:934
+
Definition: task.hh:34
+
virtual task * waiting_task() noexcept=0
Returns the next task which is waiting for this task to complete execution, or nullptr.
+
future< T > make_ready_future(A &&... value) noexcept
Creates a future in an available, value state.
Definition: future.hh:1943
+
STL namespace.
+ + +
+ + + + diff --git a/master/group__add__prometheus__routes.html b/master/group__add__prometheus__routes.html new file mode 100644 index 000000000..180d04a29 --- /dev/null +++ b/master/group__add__prometheus__routes.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: adds a /metrics endpoint that returns prometheus metrics + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
adds a /metrics endpoint that returns prometheus metrics
+
+
+

Detailed Description

+

both in txt format and in protobuf according to the prometheus spec

+ + + + + + +

+Functions

+future seastar::prometheus::add_prometheus_routes (distributed< httpd::http_server > &server, config ctx)
 
+future seastar::prometheus::add_prometheus_routes (httpd::http_server &server, config ctx)
 
+
+ + + + diff --git a/master/group__execution-stages.html b/master/group__execution-stages.html new file mode 100644 index 000000000..3bb4baaec --- /dev/null +++ b/master/group__execution-stages.html @@ -0,0 +1,289 @@ + + + + + + + +Seastar: Execution Stages + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
Execution Stages
+
+
+

Detailed Description

+

Execution stages provide an infrastructure for processing function calls in batches in order to improve instruction cache locality.

+

When the application logic becomes more and more complex and the length of the data processing pipeline grows it may happen that the most significant bottleneck are instruction cache misses. The solution for that problem may be processing similar operations in batches so that instruction cache locality is improved at the cost of potentially higher latencies and worse data cache locality.

+

Execution stages allow batching calls to the specified function object. Every time concrete_execution_stage::operator()() is used the function call is added to the queue and a future is returned. Once the number of queued calls reaches certain threshold the stage is flushed and a task is which would execute these function calls is scheduled. Execution stages are also flushed when the reactor polls for events.

+

When calling a function that is wrapped inside execution stage it is important to remember that the actual function call will happen at some later time and it has to be guaranteed the objects passed by lvalue reference are still alive. In order to avoid accidental passing of a temporary object by lvalue reference the interface of execution stages accepts only lvalue references wrapped in reference_wrapper. It is safe to pass rvalue references, they are decayed and the objects are moved. See concrete_execution_stage::operator()() for more details.

+ + + + + + + + + + + + + + +

+Classes

class  seastar::execution_stage
 Base execution stage class. More...
 
class  seastar::concrete_execution_stage< ReturnType, Args >
 Concrete execution stage class. More...
 
class  seastar::inheriting_execution_stage
 Base class for execution stages with support for automatic scheduling_group inheritance. More...
 
class  seastar::inheriting_concrete_execution_stage< ReturnType, Args >
 Concrete execution stage class, with support for automatic scheduling_group inheritance. More...
 
+ + + + + + + + + + + + + +

+Functions

template<typename Function >
auto seastar::make_execution_stage (const sstring &name, scheduling_group sg, Function &&fn)
 
template<typename Function >
auto seastar::make_execution_stage (const sstring &name, Function &&fn)
 
template<typename Ret , typename Object , typename... Args>
concrete_execution_stage< Ret, Object *, Args... > seastar::make_execution_stage (const sstring &name, scheduling_group sg, Ret(Object::*fn)(Args...))
 
+template<typename Ret , typename Object , typename... Args>
concrete_execution_stage< Ret, Object *, Args... > seastar::make_execution_stage (const sstring &name, Ret(Object::*fn)(Args...))
 
+

Function Documentation

+ +

◆ make_execution_stage() [1/3]

+ +
+
+
+template<typename Function >
+ + + + + + + + + + + + + + + + + + +
auto seastar::make_execution_stage (const sstring & name,
Function && fn 
)
+
+

Creates a new execution stage (variant taking scheduling_group)

+

Wraps given function object in a concrete_execution_stage. All arguments of the function object are required to have move constructors that do not throw. Function object may return a future or an immediate object or void.

+

Moving execution stages is discouraged and illegal after first function call is enqueued.

+

Usage example:

double do_something(int);
+
thread_local auto stage1 = seastar::make_execution_stage("execution-stage1", do_something);
+
+
future<double> func1(int val) {
+
return stage1(val);
+
}
+
+
future<double> do_some_io(int);
+
thread_local auto stage2 = seastar::make_execution_stage("execution-stage2", do_some_io);
+
+
future<double> func2(int val) {
+
return stage2(val);
+
}
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
auto make_execution_stage(const sstring &name, scheduling_group sg, Function &&fn)
Definition: execution_stage.hh:453
+
Parameters
+ + + +
nameunique name of the execution stage (variant not taking scheduling_group)
fnfunction to be executed by the stage
+
+
+
Returns
concrete_execution_stage
+ +
+
+ +

◆ make_execution_stage() [2/3]

+ +
+
+
+template<typename Function >
+ + + + + + + + + + + + + + + + + + + + + + + + +
auto seastar::make_execution_stage (const sstring & name,
scheduling_group sg,
Function && fn 
)
+
+

Creates a new execution stage

+

Wraps given function object in a concrete_execution_stage. All arguments of the function object are required to have move constructors that do not throw. Function object may return a future or an immediate object or void.

+

Moving execution stages is discouraged and illegal after first function call is enqueued.

+

Usage example:

double do_something(int);
+
thread_local auto stage1 = seastar::make_execution_stage("execution-stage1", do_something);
+
+
future<double> func1(int val) {
+
return stage1(val);
+
}
+
+
future<double> do_some_io(int);
+
thread_local auto stage2 = seastar::make_execution_stage("execution-stage2", do_some_io);
+
+
future<double> func2(int val) {
+
return stage2(val);
+
}
+
Parameters
+ + + + +
nameunique name of the execution stage
sgscheduling group to run under
fnfunction to be executed by the stage
+
+
+
Returns
concrete_execution_stage
+ +
+
+ +

◆ make_execution_stage() [3/3]

+ +
+
+
+template<typename Ret , typename Object , typename... Args>
+ + + + + + + + + + + + + + + + + + + + + + + + +
concrete_execution_stage< Ret, Object *, Args... > seastar::make_execution_stage (const sstring & name,
scheduling_group sg,
Ret(Object::*)(Args...) fn 
)
+
+

Creates a new execution stage from a member function

+

Wraps a pointer to member function in a concrete_execution_stage. When a function call is pushed to the stage the first argument should be a pointer to the object the function is a member of.

+

Usage example:

struct foo {
+
void do_something(int);
+
};
+
+
thread_local auto stage = seastar::make_execution_stage("execution-stage", &foo::do_something);
+
+
future<> func(foo& obj, int val) {
+
return stage(&obj, val);
+
}
+
See also
make_execution_stage(const sstring&, Function&&)
+
Parameters
+ + + +
nameunique name of the execution stage
fnmember function to be executed by the stage
+
+
+
Returns
concrete_execution_stage
+ +
+
+
+ + + + diff --git a/master/group__fiber-module.html b/master/group__fiber-module.html new file mode 100644 index 000000000..89a802bfb --- /dev/null +++ b/master/group__fiber-module.html @@ -0,0 +1,546 @@ + + + + + + + +Seastar: Fibers + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
Fibers
+
+
+

Detailed Description

+

Fibers of execution.

+

Seastar continuations are normally short, but often chained to one another, so that one continuation does a bit of work and then schedules another continuation for later. Such chains can be long, and often even involve loopings - see for example repeat. We call such chains "fibers" of execution.

+

These fibers are not threads - each is just a string of continuations - but they share some common requirements with traditional threads. For example, we want to avoid one fiber getting starved while a second fiber continuously runs its continuations one after another. As another example, fibers may want to communicate - e.g., one fiber produces data that a second fiber consumes, and we wish to ensure that both fibers get a chance to run, and that if one stops prematurely, the other doesn't hang forever.

+

Consult the following table to see which APIs are useful for fiber tasks:

+ + + + + + + + + + + + + + + +
Task APIs
Repeat a blocking task indefinitely keep_doing()
Repeat a blocking task, then exit repeat(), do_until()
Provide mutual exclusion between two tasks semaphore, shared_mutex
Pass a stream of data between two fibers seastar::pipe
Safely shut down a resource seastar::gate
Hold on to an object while a fiber is running do_with()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  seastar::abort_on_expiry< Clock >
 
class  seastar::abort_requested_exception
 
class  seastar::abort_source
 
class  seastar::broken_condition_variable
 
class  seastar::condition_variable_timed_out
 
class  seastar::condition_variable
 Conditional variable. More...
 
class  seastar::gate_closed_exception
 
class  seastar::gate
 
class  seastar::broken_pipe_exception
 
class  seastar::unread_overflow_exception
 
class  seastar::pipe< T >
 A fixed-size pipe for communicating between two fibers. More...
 
class  seastar::pipe_reader< T >
 Read side of a seastar::pipe. More...
 
class  seastar::pipe_writer< T >
 Write side of a seastar::pipe. More...
 
class  seastar::basic_rwlock< Clock >
 
class  seastar::broken_semaphore
 
class  seastar::semaphore_timed_out
 
class  seastar::semaphore_aborted
 
struct  seastar::semaphore_default_exception_factory
 
class  seastar::named_semaphore_timed_out
 
class  seastar::broken_named_semaphore
 
class  seastar::named_semaphore_aborted
 
struct  seastar::named_semaphore_exception_factory
 
class  seastar::basic_semaphore< ExceptionFactory, Clock >
 Counted resource guard. More...
 
class  seastar::semaphore_units< ExceptionFactory, Clock >
 
class  seastar::shared_mutex
 Shared/exclusive mutual exclusion. More...
 
+ + + + + + + +

+Typedefs

+using seastar::rwlock = basic_rwlock<>
 
using seastar::semaphore = basic_semaphore< semaphore_default_exception_factory >
 
+using seastar::named_semaphore = basic_semaphore< named_semaphore_exception_factory >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
semaphore_units< ExceptionFactory, Clock > seastar::consume_units (basic_semaphore< ExceptionFactory, Clock > &sem, size_t units) noexcept
 Consume units from semaphore temporarily. More...
 
+template<std::invocable Func>
+requires (!std::is_nothrow_move_constructible_v<Func>)
futurize_t< std::invoke_result_t< Func > > seastar::with_shared (shared_mutex &sm, Func &&func) noexcept
 
+template<std::invocable Func>
+requires (!std::is_nothrow_move_constructible_v<Func>)
futurize_t< std::invoke_result_t< Func > > seastar::with_lock (shared_mutex &sm, Func &&func) noexcept
 
template<internal::FutureBasicSharedLockable T>
future< std::shared_lock< T > > seastar::get_shared_lock (T &t)
 Construct a RAII-based shared lock corresponding to a given object. More...
 
template<internal::FutureBasicLockable T>
future< std::unique_lock< T > > seastar::get_unique_lock (T &t)
 Construct a RAII-based unique lock corresponding to a given object. More...
 
template<typename Func >
auto with_gate (gate &g, Func &&func)
 
template<typename Func >
auto try_with_gate (gate &g, Func &&func) noexcept
 
void seastar::basic_semaphore< ExceptionFactory, Clock >::broken (std::exception_ptr ex) noexcept
 
template<std::invocable Func>
futurize_t< std::invoke_result_t< Func > > with_shared (shared_mutex &sm, Func &&func) noexcept
 
template<std::invocable Func>
futurize_t< std::invoke_result_t< Func > > with_lock (shared_mutex &sm, Func &&func) noexcept
 
+

Typedef Documentation

+ +

◆ semaphore

+ +
+
+

default basic_semaphore specialization that throws semaphore specific exceptions on error conditions.

+ +
+
+

Function Documentation

+ +

◆ broken()

+ +
+
+
+template<typename ExceptionFactory , typename Clock >
+ + + + + +
+ + + + + + + + +
void seastar::basic_semaphore< ExceptionFactory, Clock >::broken (std::exception_ptr ex)
+
+inlinenoexcept
+
+

Signal to waiters that an error occurred. wait() will see an exceptional future<> containing the provided exception parameter. The future is made available immediately.

+ +
+
+ +

◆ consume_units()

+ +
+
+
+template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
semaphore_units< ExceptionFactory, Clock > seastar::consume_units (basic_semaphore< ExceptionFactory, Clock > & sem,
size_t units 
)
+
+noexcept
+
+ +

Consume units from semaphore temporarily.

+

Consume units from the semaphore and returns them when the semaphore_units object goes out of scope. This provides a safe way to temporarily take units from a semaphore and ensure that they are eventually returned under all circumstances (exceptions, premature scope exits, etc).

+

Unlike get_units(), this calls the non-blocking consume() API.

+

Unlike with_semaphore(), the scope of unit holding is not limited to the scope of a single async lambda.

+
Parameters
+ + + +
semThe semaphore to take units from
unitsNumber of units to consume
+
+
+ +
+
+ +

◆ get_shared_lock()

+ +
+
+
+template<internal::FutureBasicSharedLockable T>
+ + + + + + + + +
future< std::shared_lock< T > > seastar::get_shared_lock (T & t)
+
+ +

Construct a RAII-based shared lock corresponding to a given object.

+

Since constructors cannot be exectued asynchronously, use this function to shared lock the passed object and construct an std::shared_lock that will unlock it when the lock is being destroyed.

+

The caller is responsible for keeping the passed object alive at least until the returned lock is destroyed.

+ +
+
+ +

◆ get_unique_lock()

+ +
+
+
+template<internal::FutureBasicLockable T>
+ + + + + + + + +
future< std::unique_lock< T > > seastar::get_unique_lock (T & t)
+
+ +

Construct a RAII-based unique lock corresponding to a given object.

+

Since constructors cannot be exectued asynchronously, use this function to lock the passed object and construct an std::unique_lock that will unlock it when the lock is being destroyed.

+

The caller is responsible for keeping the passed object alive at least until the returned lock is destroyed.

+ +
+
+ +

◆ try_with_gate()

+ +
+
+
+template<typename Func >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
auto try_with_gate (gateg,
Func && func 
)
+
+related
+
+

Executes the function func if the gate g can be entered and later on, properly left.

+
Parameters
+ + + +
funcfunction to be executed
gthe gate. Caller must make sure that it outlives this function.
+
+
+

If the gate is already closed, an exception future holding gate_closed_exception is returned, otherwise

Returns
whatever func returns.
+ +
+
+ +

◆ with_gate()

+ +
+
+
+template<typename Func >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
auto with_gate (gateg,
Func && func 
)
+
+related
+
+

Executes the function func making sure the gate g is properly entered and later on, properly left.

+
Parameters
+ + + +
funcfunction to be executed
gthe gate. Caller must make sure that it outlives this function.
+
+
+
Returns
whatever func returns
+
Examples
closeable_test.cc.
+
+ +
+
+ +

◆ with_lock()

+ +
+
+
+template<std::invocable Func>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
futurize_t< std::invoke_result_t< Func > > with_lock (shared_mutexsm,
Func && func 
)
+
+related
+
+

Executes a function while holding exclusive access to a resource.

+

Executes a function while holding exclusive access to a resource. When the function returns, the mutex is automatically unlocked.

+
Parameters
+ + + +
sma shared_mutex guarding access to the shared resource
funccallable object to invoke while the mutex is held for shared access
+
+
+
Returns
whatever func returns, as a future
+ +
+
+ +

◆ with_shared()

+ +
+
+
+template<std::invocable Func>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
futurize_t< std::invoke_result_t< Func > > with_shared (shared_mutexsm,
Func && func 
)
+
+related
+
+

Executes a function while holding shared access to a resource.

+

Executes a function while holding shared access to a resource. When the function returns, the mutex is automatically unlocked.

+
Parameters
+ + + +
sma shared_mutex guarding access to the shared resource
funccallable object to invoke while the mutex is held for shared access
+
+
+
Returns
whatever func returns, as a future
+ +
+
+
+ + + + diff --git a/master/group__fileio-module.html b/master/group__fileio-module.html new file mode 100644 index 000000000..8ff928fb1 --- /dev/null +++ b/master/group__fileio-module.html @@ -0,0 +1,1388 @@ + + + + + + + +Seastar: File Input/Output + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
File Input/Output
+
+
+

Detailed Description

+

Seastar provides a file API to deal with persistent storage. Unlike most file APIs, seastar offers unbuffered file I/O (similar to, and based on, O_DIRECT). Unbuffered I/O means that the application is required to do its own caching, but delivers better performance if this caching is done correctly.

+

For random I/O or sequential unbuffered I/O, the file class provides a set of methods for reading, writing, discarding, or otherwise manipulating a file. For buffered sequential I/O, see make_file_input_stream() and make_file_output_stream().

+ + + + + +

+Modules

 File and Stream Utilities
 These utilities are provided to help perform operations on files and I/O streams.
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Classes

struct  seastar::directory_entry
 A directory entry being listed. More...
 
struct  seastar::stat_data
 Filesystem object stat information. More...
 
struct  seastar::file_open_options
 
class  seastar::file_handle_impl
 
class  seastar::file_impl
 
class  seastar::file
 
class  seastar::file_handle
 A shard-transportable handle to a file. More...
 
class  seastar::layered_file_impl
 
+ + + +

+Typedefs

+using seastar::follow_symlink = bool_class< follow_symlink_tag >
 
+ + + + + + + + + + + + +

+Enumerations

enum class  seastar::open_flags {
+  rw = O_RDWR +, ro = O_RDONLY +, wo = O_WRONLY +, create = O_CREAT +,
+  truncate = O_TRUNC +, exclusive = O_EXCL +, dsync = O_DSYNC +
+ }
 
enum class  seastar::directory_entry_type {
+  unknown +, block_device +, char_device +, directory +,
+  fifo +, link +, regular +, socket +
+ }
 
enum class  seastar::fs_type {
+  other +, xfs +, ext2 +, ext3 +,
+  ext4 +, btrfs +, hfs +, tmpfs +
+ }
 Enumeration describing the type of a particular filesystem.
 
enum class  access_flags {
+  exists = F_OK +, read = R_OK +, write = W_OK +, execute = X_OK +,
+  lookup = execute +
+ }
 
enum class  file_permissions {
+  user_read = S_IRUSR +, user_write = S_IWUSR +, user_execute = S_IXUSR +, group_read = S_IRGRP +,
+  group_write = S_IWGRP +, group_execute = S_IXGRP +, others_read = S_IROTH +, others_write = S_IWOTH +,
+  others_execute = S_IXOTH +, user_permissions = user_read | user_write | user_execute +, group_permissions = group_read | group_write | group_execute +, others_permissions = others_read | others_write | others_execute +,
+  all_permissions = user_permissions | group_permissions | others_permissions +, default_file_permissions = user_read | user_write | group_read | group_write | others_read | others_write +, default_dir_permissions = all_permissions +
+ }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+open_flags seastar::operator| (open_flags a, open_flags b)
 
+void seastar::operator|= (open_flags &a, open_flags b)
 
+open_flags seastar::operator& (open_flags a, open_flags b)
 
+void seastar::operator&= (open_flags &a, open_flags b)
 
+access_flags seastar::operator| (access_flags a, access_flags b)
 
+access_flags seastar::operator& (access_flags a, access_flags b)
 
+constexpr file_permissions seastar::operator| (file_permissions a, file_permissions b)
 
+constexpr file_permissions seastar::operator& (file_permissions a, file_permissions b)
 
+future< shared_ptr< file_impl > > seastar::make_file_impl (int fd, file_open_options options, int oflags, struct stat st) noexcept
 
template<std::invocable< file & > Func>
+requires std::is_nothrow_move_constructible_v<Func>
auto seastar::with_file (future< file > file_fut, Func func) noexcept
 Helper for ensuring a file is closed after func is called. More...
 
template<std::invocable< file & > Func>
+requires std::is_nothrow_move_constructible_v<Func>
auto seastar::with_file_close_on_failure (future< file > file_fut, Func func) noexcept
 Helper for ensuring a file is closed if func fails. More...
 
future seastar::check_direct_io_support (std::string_view path) noexcept
 
future seastar::make_directory (std::string_view name, file_permissions permissions=file_permissions::default_dir_permissions) noexcept
 
future seastar::touch_directory (std::string_view name, file_permissions permissions=file_permissions::default_dir_permissions) noexcept
 
future seastar::recursive_touch_directory (std::string_view name, file_permissions permissions=file_permissions::default_dir_permissions) noexcept
 
future seastar::sync_directory (std::string_view name) noexcept
 
future seastar::remove_file (std::string_view name) noexcept
 
future seastar::rename_file (std::string_view old_name, std::string_view new_name) noexcept
 
future< stat_dataseastar::file_stat (std::string_view name, follow_symlink fs=follow_symlink::yes) noexcept
 
future< uint64_t > seastar::file_size (std::string_view name) noexcept
 
future< bool > seastar::file_accessible (std::string_view name, access_flags flags) noexcept
 
future< bool > seastar::file_exists (std::string_view name) noexcept
 
future< std::optional< directory_entry_type > > seastar::file_type (std::string_view name, follow_symlink follow=follow_symlink::yes) noexcept
 
future seastar::link_file (std::string_view oldpath, std::string_view newpath) noexcept
 
future seastar::chmod (std::string_view name, file_permissions permissions) noexcept
 
future< fs_typeseastar::file_system_at (std::string_view name) noexcept
 
future< uint64_t > seastar::fs_avail (std::string_view name) noexcept
 
future< uint64_t > seastar::fs_free (std::string_view name) noexcept
 
future< fileopen_file_dma (std::string_view name, open_flags flags) noexcept
 
future< fileopen_file_dma (std::string_view name, open_flags flags, file_open_options options) noexcept
 
future< fileopen_directory (std::string_view name) noexcept
 
+

Class Documentation

+ +

◆ seastar::directory_entry

+ +
+
+ + + + +
struct seastar::directory_entry
+
+ + + + + + + + +
Class Members
+sstring +name +Name of the file in a directory entry. Will never be "." or "..". Only the last component is included.
+optional< directory_entry_type > +type +Type of the directory entry, if known.
+ +
+
+ +

◆ seastar::stat_data

+ +
+
+ + + + +
struct seastar::stat_data
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class Members
+uint64_t +allocated_size +
+uint64_t +block_size +
+uint64_t +device_id +
+uint64_t +gid +
+uint64_t +inode_number +
+uint64_t +mode +
+uint64_t +number_of_links +
+uint64_t +rdev +
+uint64_t +size +
+time_point +time_accessed +
+time_point +time_changed +
+time_point +time_modified +
+directory_entry_type +type +
+uint64_t +uid +
+ +
+
+ +

◆ seastar::follow_symlink_tag

+ +
+
+ + + + +
struct seastar::follow_symlink_tag
+
+ +
+
+

Enumeration Type Documentation

+ +

◆ directory_entry_type

+ +
+
+ + + + + +
+ + + + +
enum class seastar::directory_entry_type
+
+strong
+
+

Enumeration describing the type of a directory entry being listed.

+
See also
file::list_directory()
+ +
+
+ +

◆ open_flags

+ +
+
+ + + + + +
+ + + + +
enum class seastar::open_flags
+
+strong
+
+

Enumeration describing how a file is to be opened.

+
See also
file::open_file_dma()
+ +
+
+

Function Documentation

+ +

◆ check_direct_io_support()

+ +
+
+ + + + + +
+ + + + + + + + +
future seastar::check_direct_io_support (std::string_view path)
+
+noexcept
+
+

Checks if a given directory supports direct io

+

Seastar bypasses the Operating System caches and issues direct io to the underlying block devices. Projects using seastar should check if the directory lies in a filesystem that support such operations. This function can be used to do that.

+

It will return if direct io can be used, or throw an std::system_error exception, with the EINVAL error code.

+

A std::system_error with the respective error code is also thrown if path is not a directory.

+
Parameters
+ + +
paththe directory we need to verify.
+
+
+ +
+
+ +

◆ chmod()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::chmod (std::string_view name,
file_permissions permissions 
)
+
+noexcept
+
+

Changes the permissions mode of a file or directory

+
Parameters
+ + + +
namename of the file ot directory to change
permissionspermissions to set
+
+
+ +
+
+ +

◆ file_accessible()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future< bool > seastar::file_accessible (std::string_view name,
access_flags flags 
)
+
+noexcept
+
+

Check file access.

+
Parameters
+ + + +
namename of the file to check
flagsbit pattern containing type of access to check (read/write/execute or exists).
+
+
+

If only access_flags::exists is queried, returns true if the file exists, or false otherwise. Throws a std::filesystem::filesystem_error exception if any error other than ENOENT is encountered.

+

If any of the access_flags (read/write/execute) is set, returns true if the file exists and is accessible with the requested flags, or false if the file exists and is not accessible as queried. Throws a std::filesystem::filesystem_error exception if any error other than EACCES is encountered. Note that if any path component leading to the file is not searchable, the file is considered inaccessible with the requested mode and false will be returned.

+ +
+
+ +

◆ file_exists()

+ +
+
+ + + + + +
+ + + + + + + + +
future< bool > seastar::file_exists (std::string_view name)
+
+noexcept
+
+

check if a file exists.

+
Parameters
+ + +
namename of the file to check
+
+
+ +
+
+ +

◆ file_size()

+ +
+
+ + + + + +
+ + + + + + + + +
future< uint64_t > seastar::file_size (std::string_view name)
+
+noexcept
+
+

Return the size of a file.

+
Parameters
+ + +
namename of the file to return the size
+
+
+

Note that file_size of a symlink is NOT the size of the symlink - which is the length of the pathname it contains - but rather the size of the file to which it points.

+ +
+
+ +

◆ file_stat()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future< stat_data > seastar::file_stat (std::string_view name,
follow_symlink fs = follow_symlink::yes 
)
+
+noexcept
+
+

Return stat information about a file.

+
Parameters
+ + + +
namename of the file to return its stat information
fsa follow_symlink flag to follow symbolic links.
+
+
+
Returns
stat_data of the file identified by name. If name identifies a symbolic link then stat_data is returned either for the target of the link, with follow_symlink::yes, or for the link itself, with follow_symlink::no.
+ +
+
+ +

◆ file_system_at()

+ +
+
+ + + + + +
+ + + + + + + + +
future< fs_type > seastar::file_system_at (std::string_view name)
+
+noexcept
+
+

Return information about the filesystem where a file is located.

+
Parameters
+ + +
namename of the file to inspect
+
+
+ +
+
+ +

◆ file_type()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future< std::optional< directory_entry_type > > seastar::file_type (std::string_view name,
follow_symlink follow = follow_symlink::yes 
)
+
+noexcept
+
+

Determine the type of a file (regular file, directory, etc.)

+
Parameters
+ + + +
namename of the file for which type information is requested
followa follow_symlink flag that determines whether a trailing symbolic link should be followed or not
+
+
+
Returns
a engaged optional with the file type if lookup was successful; a disengaged optional if the file (or one of its parent directories) does not exist; an exceptional future on other errors.
+ +
+
+ +

◆ fs_avail()

+ +
+
+ + + + + +
+ + + + + + + + +
future< uint64_t > seastar::fs_avail (std::string_view name)
+
+noexcept
+
+

Return space available to unprivileged users in filesystem where a file is located, in bytes.

+
Parameters
+ + +
namename of the file to inspect
+
+
+ +
+
+ +

◆ fs_free()

+ +
+
+ + + + + +
+ + + + + + + + +
future< uint64_t > seastar::fs_free (std::string_view name)
+
+noexcept
+
+

Return free space in filesystem where a file is located, in bytes.

+
Parameters
+ + +
namename of the file to inspect
+
+
+ +
+
+ +

◆ link_file()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::link_file (std::string_view oldpath,
std::string_view newpath 
)
+
+noexcept
+
+

Creates a hard link for a file

+
Parameters
+ + + +
oldpathexisting file name
newpathname of link
+
+
+ +
+
+ +

◆ make_directory()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::make_directory (std::string_view name,
file_permissions permissions = file_permissions::default_dir_permissions 
)
+
+noexcept
+
+

Creates a new directory.

+
Parameters
+ + + +
namename of the directory to create
permissionsoptional file permissions of the directory to create.
+
+
+
Note
The directory is not guaranteed to be stable on disk, unless the containing directory is sync'ed.
+ +
+
+ +

◆ open_directory()

+ +
+
+ + + + + +
+ + + + + + + + +
future< file > open_directory (std::string_view name)
+
+related
+
+

Opens a directory.

+
Parameters
+ + +
namename of the directory to open
+
+
+
Returns
a file object representing a directory. The only legal operations are file::list_directory(), file::flush(), and file::close().
+ +
+
+ +

◆ open_file_dma() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future< file > open_file_dma (std::string_view name,
open_flags flags 
)
+
+related
+
+

Opens or creates a file. The "dma" in the name refers to the fact that data transfers are unbuffered and uncached.

+
Parameters
+ + + +
namethe name of the file to open or create
flagsvarious flags controlling the open process
+
+
+
Returns
a file object, as a future
+
Note
The file name is not guaranteed to be stable on disk, unless the containing directory is sync'ed.
+
Examples
file_demo.cc.
+
+ +
+
+ +

◆ open_file_dma() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< file > open_file_dma (std::string_view name,
open_flags flags,
file_open_options options 
)
+
+related
+
+

Opens or creates a file. The "dma" in the name refers to the fact that data transfers are unbuffered and uncached.

+
Parameters
+ + + + +
namethe name of the file to open or create
flagsvarious flags controlling the open process
optionsoptions for opening the file
+
+
+
Returns
a file object, as a future
+
Note
The file name is not guaranteed to be stable on disk, unless the containing directory is sync'ed.
+ +
+
+ +

◆ recursive_touch_directory()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::recursive_touch_directory (std::string_view name,
file_permissions permissions = file_permissions::default_dir_permissions 
)
+
+noexcept
+
+

Recursively ensures a directory exists

+

Checks whether each component of a directory exists, and if not, creates it.

+
Parameters
+ + + +
namename of the directory to potentially create
permissionsoptional file permissions of the directory to create.
+
+
+
Note
This function fsyncs each component created, and is therefore guaranteed to be stable on disk. The provided permissions are applied only on the last component in the path, if it needs to be created, if intermediate directories do not exist, they are created with the default_dir_permissions. If any directory exists, the provided permissions are not applied.
+ +
+
+ +

◆ remove_file()

+ +
+
+ + + + + +
+ + + + + + + + +
future seastar::remove_file (std::string_view name)
+
+noexcept
+
+

Removes (unlinks) a file or an empty directory

+
Parameters
+ + +
namename of the file or the directory to remove
+
+
+
Note
The removal is not guaranteed to be stable on disk, unless the containing directory is sync'ed.
+ +
+
+ +

◆ rename_file()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::rename_file (std::string_view old_name,
std::string_view new_name 
)
+
+noexcept
+
+

Renames (moves) a file.

+
Parameters
+ + + +
old_nameexisting file name
new_namenew file name
+
+
+
Note
The rename is not guaranteed to be stable on disk, unless the both containing directories are sync'ed.
+ +
+
+ +

◆ sync_directory()

+ +
+
+ + + + + +
+ + + + + + + + +
future seastar::sync_directory (std::string_view name)
+
+noexcept
+
+

Synchronizes a directory to disk

+

Makes sure the modifications in a directory are synchronized in disk. This is useful, for instance, after creating or removing a file inside the directory.

+
Parameters
+ + +
namename of the directory to potentially create
+
+
+ +
+
+ +

◆ touch_directory()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::touch_directory (std::string_view name,
file_permissions permissions = file_permissions::default_dir_permissions 
)
+
+noexcept
+
+

Ensures a directory exists

+

Checks whether a directory exists, and if not, creates it. Only the last component of the directory name is created.

+
Parameters
+ + + +
namename of the directory to potentially create
permissionsoptional file permissions of the directory to create.
+
+
+
Note
The directory is not guaranteed to be stable on disk, unless the containing directory is sync'ed. If the directory exists, the provided permissions are not applied.
+ +
+
+ +

◆ with_file()

+ +
+
+
+template<std::invocable< file & > Func>
+requires std::is_nothrow_move_constructible_v<Func>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
auto seastar::with_file (future< filefile_fut,
Func func 
)
+
+noexcept
+
+ +

Helper for ensuring a file is closed after func is called.

+

The file provided by the file_fut future is passed to func.

+
Parameters
+ + + +
file_futA future that produces a file
funcA function that uses a file
+
+
+
Returns
the future returned by func, or an exceptional future if either file_fut or closing the file failed.
+
Examples
file_demo.cc.
+
+ +
+
+ +

◆ with_file_close_on_failure()

+ +
+
+
+template<std::invocable< file & > Func>
+requires std::is_nothrow_move_constructible_v<Func>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
auto seastar::with_file_close_on_failure (future< filefile_fut,
Func func 
)
+
+noexcept
+
+ +

Helper for ensuring a file is closed if func fails.

+

The file provided by the file_fut future is passed to func.

    +
  • If func throws an exception E, the file is closed and we return a failed future with E.
  • +
  • If func returns a value V, the file is not closed and we return a future with V. Note that when an exception is not thrown, it is the responsibility of func to make sure the file will be closed. It can close the file itself, return it, or store it somewhere.
  • +
+
Parameters
+ + + +
file_futA future that produces a file
funcA function that uses a file
+
+
+
Returns
the future returned by func, or an exceptional future if file_fut failed or a nested exception if closing the file failed.
+
Examples
file_demo.cc.
+
+ +
+
+
+ + + + diff --git a/master/group__fileio-util.html b/master/group__fileio-util.html new file mode 100644 index 000000000..d9fc9115d --- /dev/null +++ b/master/group__fileio-util.html @@ -0,0 +1,145 @@ + + + + + + + +Seastar: File and Stream Utilities + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
File and Stream Utilities
+
+
+

Detailed Description

+

These utilities are provided to help perform operations on files and I/O streams.

+ + + + + + + + + +

+Functions

+template<typename Func >
+requires std::invocable<Func, input_stream<char>&>
futurize< typenamestd::invoke_result_t< Func, input_stream< char > & > >::type seastar::util::with_file_input_stream (const std::filesystem::path &path, Func func, file_open_options file_opts={}, file_input_stream_options input_stream_opts={})
 
future< std::vector< temporary_buffer< char > > > seastar::util::read_entire_file (std::filesystem::path path)
 
future< sstring > seastar::util::read_entire_file_contiguous (std::filesystem::path path)
 
+

Function Documentation

+ +

◆ read_entire_file()

+ +
+
+ + + + + + + + +
future< std::vector< temporary_buffer< char > > > seastar::util::read_entire_file (std::filesystem::path path)
+
+

Returns all bytes from the file until eof, accessible in chunks.

+
Note
use only on short files to avoid running out of memory.
+
Parameters
+ + +
pathpath of the file to be read.
+
+
+ +
+
+ +

◆ read_entire_file_contiguous()

+ +
+
+ + + + + + + + +
future< sstring > seastar::util::read_entire_file_contiguous (std::filesystem::path path)
+
+

Returns all bytes from the file until eof as a single buffer.

+
Note
use only on short files to avoid running out of memory.
+
Parameters
+ + +
pathpath of the file to be read.
+
+
+ +
+
+
+ + + + diff --git a/master/group__fsnotifier.html b/master/group__fsnotifier.html new file mode 100644 index 000000000..d05fd5f22 --- /dev/null +++ b/master/group__fsnotifier.html @@ -0,0 +1,106 @@ + + + + + + + +Seastar: FileSystem Notifier + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
FileSystem Notifier
+
+
+

Detailed Description

+

Seastar provides an API which can be used to monitor filesystem modifications.

+ + + + + +

+Classes

class  seastar::experimental::fsnotifier
 Filesystem modification notifier. More...
 
+ + + + + + + + + + + + + +

+Functions

+fsnotifier::flags seastar::experimental::operator| (fsnotifier::flags a, fsnotifier::flags b)
 Take the union of two events.
 
+void seastar::experimental::operator|= (fsnotifier::flags &a, fsnotifier::flags b)
 Take the union of two events, assignment form.
 
+fsnotifier::flags seastar::experimental::operator& (fsnotifier::flags a, fsnotifier::flags b)
 Take the intersection of two events.
 
+void seastar::experimental::operator&= (fsnotifier::flags &a, fsnotifier::flags b)
 Take the intersection of two events, assignment form.
 
+
+ + + + diff --git a/master/group__future-module-impl.html b/master/group__future-module-impl.html new file mode 100644 index 000000000..2a9a1c2e4 --- /dev/null +++ b/master/group__future-module-impl.html @@ -0,0 +1,101 @@ + + + + + + + +Seastar: Implementation overview + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Implementation overview
+
+
+

A future has a stored value. Semantically, the value is a std::optional<std::variant<T, std::exception_ptr>>. The actual type of the value in the implementation is future_state<T>.

+

A future without an initial value can be created by first creating a promise and then calling promise::get_future. The promise also stores a future_state<T> in case promise::set_value is called before get_future.

+

In addition to the future_state<T>, the promise and the future point to each other and the pointers are updated when either is moved.

+

If a future is consumed by future::then before the future is ready, a continuation is dynamically allocated. The continuation also has a future_state<T>, but unlinke a future it is never moved.

+

After a future creates a continuation, the corresponding promise points to the newly allocated continuation. When promise::set_value is called, the continuation is ready and is scheduled.

+

A promise then consists of

    +
  • A future_state<T> for use when there is no corresponding future or continuation (_local_state).
  • +
  • A pointer to a future to allow updates when the promise is moved (_future).
  • +
  • A pointer to the continuation (_task).
  • +
  • A pointer to future_state<T> (_state) that can point to
      +
    1. The future_state<T> in the promise itself
    2. +
    3. The future_state<T> in the future
    4. +
    +
      +
    1. The future_state<T> in the continuation
    2. +
    +
  • +
+

A special case is when a future blocks inside a thread. In that case we still need a continuation, but that continuation doesn't need a future_state<T> since the original future still exists on the stack.

+

So the valid states for a promise are:

+
    +
  1. A newly created promise. _state points to _local_state and _task and _future are null.
  2. +
  3. After get_future is called. _state points to the state in the future, _future points to the future and _task is null.
  4. +
  5. The future has been consumed by future::then. Now the _state points to the state in the continuation, _future is null and _task points to the continuation.
  6. +
  7. A call to future::get is blocked in a thread. This is a mix of cases 2 and 3. Like 2, there is a valid future and _future and _state point to the future and its state. Like 3, there is a valid continuation and _task points to it, but that continuation has no state of its own.
  8. +
+
+ + + + diff --git a/master/group__future-module.html b/master/group__future-module.html new file mode 100644 index 000000000..bddb702a7 --- /dev/null +++ b/master/group__future-module.html @@ -0,0 +1,416 @@ + + + + + + + +Seastar: Futures and Promises + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
Futures and Promises
+
+
+

Detailed Description

+

Futures and promises are the basic tools for asynchronous programming in seastar. A future represents a result that may not have been computed yet, for example a buffer that is being read from the disk, or the result of a function that is executed on another cpu. A promise object allows the future to be eventually resolved by assigning it a value.

+

Another way to look at futures and promises are as the reader and writer sides, respectively, of a single-item, single use queue. You read from the future, and write to the promise, and the system takes care that it works no matter what the order of operations is.

+

The normal way of working with futures is to chain continuations to them. A continuation is a block of code (usually a lamdba) that is called when the future is assigned a value (the future is resolved); the continuation can then access the actual value.

+ + + + + + + +

+Modules

 Implementation overview
 
 Future Utilities
 These utilities are provided to help perform operations on futures.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  seastar::promise< T >
 promise - allows a future value to be made available at a later time. More...
 
class  seastar::future< T >
 A representation of a possibly not-yet-computed value. More...
 
class  seastar::shared_future< T >
 Like future except the result can be waited for by many fibers. More...
 
struct  seastar::broken_promise
 Exception type for broken promises. More...
 
struct  seastar::future_state_base
 
struct  seastar::ready_future_marker
 
struct  seastar::exception_future_marker
 
struct  seastar::future_for_get_promise_marker
 
struct  seastar::futurize< T >
 Converts a type to a future type, if it isn't already. More...
 
struct  seastar::with_clock< Clock >
 Changes the clock used by shared_future<> and shared_promise<> when passed as the first template parameter. More...
 
class  seastar::shared_promise< T >
 Like promise except that its counterpart is shared_future instead of future. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<typename T = void, typename... A>
future< T > seastar::make_ready_future (A &&... value) noexcept
 Creates a future in an available, value state. More...
 
+template<typename T >
future< std::remove_cv_t< std::remove_reference_t< T > > > seastar::as_ready_future (T &&v) noexcept
 Returns a ready future that is already resolved.
 
template<typename T = void>
future< T > seastar::make_exception_future (std::exception_ptr &&value) noexcept
 Creates a future in an available, failed state. More...
 
template<typename T = void, typename Exception >
future< T > seastar::make_exception_future (Exception &&ex) noexcept
 Creates a future in an available, failed state. More...
 
+template<typename T = void>
future< T > seastar::make_exception_future (const std::exception_ptr &ex) noexcept
 
+template<typename T = void>
future< T > seastar::make_exception_future (std::exception_ptr &ex) noexcept
 
+template<typename T = void>
future< T > seastar::make_exception_future (const std::exception_ptr &&ex) noexcept
 
template<typename T = void>
future< T > seastar::current_exception_as_future () noexcept
 Returns std::current_exception() wrapped in a future. More...
 
template future< void > seastar::current_exception_as_future () noexcept
 
+void seastar::report_failed_future (future_state_base::any &&state) noexcept
 
+void seastar::log_exception_trace () noexcept
 
+template<typename T , typename Exception >
future< T > seastar::make_exception_future_with_backtrace (Exception &&ex) noexcept
 
+void seastar::future_state_base::any::check_failure () noexcept
 
future< T > seastar::promise< T >::get_future () noexcept
 Gets the promise's associated future. More...
 
+void seastar::promise< T >::move_it (promise &&x) noexcept
 Moves a promise object.
 
+

Class Documentation

+ +

◆ seastar::ready_future_marker

+ +
+
+ + + + +
struct seastar::ready_future_marker
+
+ +
+
+ +

◆ seastar::exception_future_marker

+ +
+
+ + + + +
struct seastar::exception_future_marker
+
+ +
+
+ +

◆ seastar::future_for_get_promise_marker

+ +
+
+ + + + +
struct seastar::future_for_get_promise_marker
+
+ +
+
+ +

◆ seastar::with_clock

+ +
+
+ + + + +
struct seastar::with_clock
+
+ +
+
+

Function Documentation

+ +

◆ current_exception_as_future() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
template future< void > seastar::current_exception_as_future ()
+
+noexcept
+
+

This is equivalent to make_exception_future(std::current_exception()), but expands to less code.

+ +
+
+ +

◆ current_exception_as_future() [2/2]

+ +
+
+
+template<typename T = void>
+ + + + + +
+ + + + + + + +
future< T > seastar::current_exception_as_future ()
+
+noexcept
+
+ +

Returns std::current_exception() wrapped in a future.

+

This is equivalent to make_exception_future(std::current_exception()), but expands to less code.

+ +
+
+ +

◆ get_future()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
future< T > seastar::promise< T >::get_future
+
+inlinenoexcept
+
+ +

Gets the promise's associated future.

+

The future and promise will be remember each other, even if either or both are moved. When set_value() or set_exception() are called on the promise, the future will be become ready, and if a continuation was attached to the future, it will run.

+ +
+
+ +

◆ make_exception_future() [1/2]

+ +
+
+
+template<typename T = void, typename Exception >
+ + + + + +
+ + + + + + + + +
future< T > seastar::make_exception_future (Exception && ex)
+
+inlinenoexcept
+
+ +

Creates a future in an available, failed state.

+

Creates a future object that is already resolved in a failed state. This no I/O needs to be performed to perform a computation (for example, because the connection is closed and we cannot read from it).

+ +
+
+ +

◆ make_exception_future() [2/2]

+ +
+
+
+template<typename T = void>
+ + + + + +
+ + + + + + + + +
future< T > seastar::make_exception_future (std::exception_ptr && value)
+
+inlinenoexcept
+
+ +

Creates a future in an available, failed state.

+

Creates a future object that is already resolved in a failed state. This is useful when no I/O needs to be performed to perform a computation (for example, because the connection is closed and we cannot read from it).

+ +
+
+ +

◆ make_ready_future()

+ +
+
+
+template<typename T = void, typename... A>
+ + + + + +
+ + + + + + + + +
future< T > seastar::make_ready_future (A &&... value)
+
+inlinenoexcept
+
+ +

Creates a future in an available, value state.

+

Creates a future object that is already resolved. This is useful when it is determined that no I/O needs to be performed to perform a computation (for example, because the data is cached in some buffer).

+ +
+
+
+ + + + diff --git a/master/group__future-util.html b/master/group__future-util.html new file mode 100644 index 000000000..60e997783 --- /dev/null +++ b/master/group__future-util.html @@ -0,0 +1,1438 @@ + + + + + + + +Seastar: Future Utilities + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
Future Utilities
+
+
+

Detailed Description

+

These utilities are provided to help perform operations on futures.

+ + + + + + + + + + + + +

+Classes

struct  seastar::is_future< T >
 Check whether a type is a future. More...
 
struct  seastar::futurize< T >
 Converts a type to a future type, if it isn't already. More...
 
struct  seastar::stop_iteration_tag
 
class  seastar::adder< Result, Addend >
 
+ + + + + + +

+Typedefs

+template<typename T >
using seastar::futurize_t = typename futurize< T >::type
 
+using seastar::stop_iteration = bool_class< stop_iteration_tag >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<typename T1 , typename T2 , typename... More>
auto seastar::do_with (T1 &&rv1, T2 &&rv2, More &&... more) noexcept
 
template<typename Lock , typename Func >
auto seastar::with_lock (Lock &lock, Func &&func)
 
+template<typename AsyncAction >
future seastar::repeat (const AsyncAction &action) noexcept=delete
 
+template<typename AsyncAction >
future seastar::repeat (AsyncAction &action) noexcept=delete
 
template<typename AsyncAction >
+requires std::is_invocable_r_v<stop_iteration, AsyncAction> || std::is_invocable_r_v<future<stop_iteration>, AsyncAction>
future seastar::repeat (AsyncAction &&action) noexcept
 
template<typename AsyncAction >
+requires requires (AsyncAction aa) { bool(futurize_invoke(aa).get()); futurize_invoke(aa).get().value(); }
repeat_until_value_return_type< AsyncAction > seastar::repeat_until_value (AsyncAction action) noexcept
 
template<typename AsyncAction , typename StopCondition >
+requires std::is_invocable_r_v<bool, StopCondition> && std::is_invocable_r_v<future<>, AsyncAction>
future seastar::do_until (StopCondition stop_cond, AsyncAction action) noexcept
 
template<typename AsyncAction >
+requires std::is_invocable_r_v<future<>, AsyncAction>
future seastar::keep_doing (AsyncAction action) noexcept
 
template<typename Iterator , typename AsyncAction >
+requires requires (Iterator i, AsyncAction aa) { { futurize_invoke(aa, *i) } -> std::same_as<future<>>; }
future seastar::do_for_each (Iterator begin, Iterator end, AsyncAction action) noexcept
 Call a function for each item in a range, sequentially (iterator version). More...
 
template<typename Container , typename AsyncAction >
+requires requires (Container c, AsyncAction aa) { { futurize_invoke(aa, *std::begin(c)) } -> std::same_as<future<>>; std::end(c); }
future seastar::do_for_each (Container &c, AsyncAction action) noexcept
 Call a function for each item in a range, sequentially (range version). More...
 
template<typename Iterator , typename Sentinel , typename Func >
+requires (requires (Func f, Iterator i) { { f(*i) } -> std::same_as<future<>>; { i++ }; } && (std::same_as<Sentinel, Iterator> || std::sentinel_for<Sentinel, Iterator>))
future seastar::parallel_for_each (Iterator begin, Sentinel end, Func &&func) noexcept
 Run tasks in parallel (iterator version). More...
 
+template<typename Range , typename Func >
+requires requires (Func f, Range r) { { f(*std::begin(r)) } -> std::same_as<future<>>; std::end(r); }
future seastar::parallel_for_each (Range &&range, Func &&func) noexcept
 
template<typename Iterator , typename Sentinel , typename Func >
+requires (requires (Func f, Iterator i) { { f(*i) } -> std::same_as<future<>>; { ++i }; } && (std::same_as<Sentinel, Iterator> || std::sentinel_for<Sentinel, Iterator>) )
future seastar::max_concurrent_for_each (Iterator begin, Sentinel end, size_t max_concurrent, Func &&func) noexcept
 
template<typename Range , typename Func >
+requires requires (Func f, Range r) { { f(*std::begin(r)) } -> std::same_as<future<>>; std::end(r); }
future seastar::max_concurrent_for_each (Range &&range, size_t max_concurrent, Func &&func) noexcept
 
template<typename Iterator , typename Mapper , typename Reducer >
+requires requires (Iterator i, Mapper mapper, Reducer reduce) { *i++; { i != i } -> std::convertible_to<bool>; mapper(*i); reduce(futurize_invoke(mapper, *i).get()); }
auto seastar::map_reduce (Iterator begin, Iterator end, Mapper &&mapper, Reducer &&r) -> typename reducer_traits< Reducer >::future_type
 
template<typename Iterator , typename Mapper , typename Initial , typename Reduce >
+requires requires (Iterator i, Mapper mapper, Initial initial, Reduce reduce) { *i++; { i != i} -> std::convertible_to<bool>; mapper(*i); requires is_future<decltype(mapper(*i))>::value; { reduce(std::move(initial), mapper(*i).get()) } -> std::convertible_to<Initial>; }
future< Initial > seastar::map_reduce (Iterator begin, Iterator end, Mapper &&mapper, Initial initial, Reduce reduce)
 
template<typename Range , typename Mapper , typename Initial , typename Reduce >
+requires requires (Range range, Mapper mapper, Initial initial, Reduce reduce) { std::begin(range); std::end(range); mapper(*std::begin(range)); requires is_future<std::remove_reference_t<decltype(mapper(*std::begin(range)))>>::value; { reduce(std::move(initial), mapper(*std::begin(range)).get()) } -> std::convertible_to<Initial>; }
future< Initial > seastar::map_reduce (Range &&range, Mapper &&mapper, Initial initial, Reduce reduce)
 
template<typename... FutOrFuncs>
auto seastar::when_all (FutOrFuncs &&... fut_or_funcs) noexcept
 
template<typename FutureIterator >
+requires requires (FutureIterator i) { { *i++ }; requires is_future<std::remove_reference_t<decltype(*i)>>::value; }
future< std::vector< typename std::iterator_traits< FutureIterator >::value_type > > seastar::when_all (FutureIterator begin, FutureIterator end) noexcept
 
template<typename... FutOrFuncs>
auto seastar::when_all_succeed (FutOrFuncs &&... fut_or_funcs) noexcept
 
template<typename FutureIterator , typename = typename std::iterator_traits<FutureIterator>::value_type>
+requires requires (FutureIterator i) { *i++; { i != i } -> std::convertible_to<bool>; requires is_future<std::remove_reference_t<decltype(*i)>>::value; }
auto seastar::when_all_succeed (FutureIterator begin, FutureIterator end) noexcept
 
template<typename T >
auto seastar::when_all_succeed (std::vector< future< T > > &&futures) noexcept
 
template<typename Func , typename... Args>
+requires std::is_nothrow_move_constructible_v<Func>
auto seastar::with_scheduling_group (scheduling_group sg, Func func, Args &&... args) noexcept
 run a callable (with some arbitrary arguments) in a scheduling group More...
 
template<typename ExceptionFactory = default_timeout_exception_factory, typename Clock , typename Duration , typename... T>
future< T... > seastar::with_timeout (std::chrono::time_point< Clock, Duration > timeout, future< T... > f)
 Wait for either a future, or a timeout, whichever comes first. More...
 
+future seastar::now ()
 Returns a ready future.
 
future seastar::yield () noexcept
 Returns a future which is not ready but is scheduled to resolve soon. More...
 
future seastar::maybe_yield () noexcept
 
future seastar::check_for_io_immediately () noexcept
 
future seastar::later () noexcept
 Returns a future which is not ready but is scheduled to resolve soon. More...
 
+

Class Documentation

+ +

◆ seastar::stop_iteration_tag

+ +
+
+ + + + +
struct seastar::stop_iteration_tag
+
+ +
+
+

Function Documentation

+ +

◆ check_for_io_immediately()

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::check_for_io_immediately ()
+
+noexcept
+
+

Force the reactor to check for pending I/O

+

Schedules a check for new I/O completions (disk operations completions or network packet arrival) immediately and return a future that is ready when the I/O has been polled for.

+
Note
It is very rare to need to call this function. It is better to let the reactor schedule I/O polls itself.
+
+This has no effect on I/O polling on other shards.
+ +
+
+ +

◆ do_for_each() [1/2]

+ +
+
+
+template<typename Container , typename AsyncAction >
+requires requires (Container c, AsyncAction aa) { { futurize_invoke(aa, *std::begin(c)) } -> std::same_as<future<>>; std::end(c); }
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::do_for_each (Container & c,
AsyncAction action 
)
+
+inlinenoexcept
+
+ +

Call a function for each item in a range, sequentially (range version).

+

For each item in a range, call a function, waiting for the previous invocation to complete before calling the next one.

+
Parameters
+ + + +
can Container object designating input range
actiona callable, taking a reference to objects from the range as a parameter, and returning a future<> that resolves when it is acceptable to process the next item.
+
+
+
Returns
a ready future on success, or the first failed future if action failed.
+ +
+
+ +

◆ do_for_each() [2/2]

+ +
+
+
+template<typename Iterator , typename AsyncAction >
+requires requires (Iterator i, AsyncAction aa) { { futurize_invoke(aa, *i) } -> std::same_as<future<>>; }
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future seastar::do_for_each (Iterator begin,
Iterator end,
AsyncAction action 
)
+
+inlinenoexcept
+
+ +

Call a function for each item in a range, sequentially (iterator version).

+

For each item in a range, call a function, waiting for the previous invocation to complete before calling the next one.

+
Parameters
+ + + + +
beginan InputIterator designating the beginning of the range
endan InputIterator designating the endof the range
actiona callable, taking a reference to objects from the range as a parameter, and returning a future<> that resolves when it is acceptable to process the next item.
+
+
+
Returns
a ready future on success, or the first failed future if action failed.
+
Examples
file_demo.cc.
+
+ +
+
+ +

◆ do_until()

+ +
+
+
+template<typename AsyncAction , typename StopCondition >
+requires std::is_invocable_r_v<bool, StopCondition> && std::is_invocable_r_v<future<>, AsyncAction>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future seastar::do_until (StopCondition stop_cond,
AsyncAction action 
)
+
+inlinenoexcept
+
+

Invokes given action until it fails or given condition evaluates to true or fails.

+
Parameters
+ + + +
stop_conda callable taking no arguments, returning a boolean that evalutes to true when you don't want to call action any longer. If stop_cond fails, the exception is propagated
actiona callable taking no arguments, returning a future<>. Will be called again as soon as the future resolves, unless the future fails, or stop_cond returns true or fails.
+
+
+
Returns
a ready future if we stopped successfully, or a failed future if a call to to action or a call to stop_cond failed.
+ +
+
+ +

◆ do_with()

+ +
+
+
+template<typename T1 , typename T2 , typename... More>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
auto seastar::do_with (T1 && rv1,
T2 && rv2,
More &&... more 
)
+
+inlinenoexcept
+
+

do_with() holds a objects alive until a future completes, and allow the code involved in making the future complete to have easy access to this object.

+

do_with() takes multiple arguments: The last is a function returning a future. The other are temporary objects (rvalue). The function is given (a moved copy of) these temporary object, by reference, and it is ensured that the objects will not be destructed until the completion of the future returned by the function.

+

do_with() returns a future which resolves to whatever value the given future (returned by the given function) resolves to. This returned value must not contain references to the temporary object, as at that point the temporary is destructed.

+
Returns
whatever the function returns
+
Examples
closeable_test.cc.
+
+ +
+
+ +

◆ keep_doing()

+ +
+
+
+template<typename AsyncAction >
+requires std::is_invocable_r_v<future<>, AsyncAction>
+ + + + + +
+ + + + + + + + +
future seastar::keep_doing (AsyncAction action)
+
+inlinenoexcept
+
+

Invoke given action until it fails.

+

Calls action repeatedly until it returns a failed future.

+
Parameters
+ + +
actiona callable taking no arguments, returning a future<> that becomes ready when you wish it to be called again.
+
+
+
Returns
a future<> that will resolve to the first failure of action
+ +
+
+ +

◆ later()

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::later ()
+
+noexcept
+
+ +

Returns a future which is not ready but is scheduled to resolve soon.

+
Deprecated:
Use yield() instead, or check_for_io_immediately() if your really need it.
+ +
+
+ +

◆ map_reduce() [1/3]

+ +
+
+
+template<typename Iterator , typename Mapper , typename Initial , typename Reduce >
+requires requires (Iterator i, Mapper mapper, Initial initial, Reduce reduce) { *i++; { i != i} -> std::convertible_to<bool>; mapper(*i); requires is_future<decltype(mapper(*i))>::value; { reduce(std::move(initial), mapper(*i).get()) } -> std::convertible_to<Initial>; }
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
future< Initial > seastar::map_reduce (Iterator begin,
Iterator end,
Mapper && mapper,
Initial initial,
Reduce reduce 
)
+
+inline
+
+

Asynchronous map/reduce transformation.

+

Given a range of objects, an asynchronous unary function operating on these objects, an initial value, and a binary function for reducing, map_reduce() will transform each object in the range, then invoke the the reducing function with the result.

+

Example:

+

Calculate the total size of several files:

+
map_reduce(files.begin(), files.end(),
+
std::mem_fn(file::size),
+
size_t(0),
+
std::plus<size_t>())
+
future< uint64_t > size() const noexcept
Gets the file size.
+
auto map_reduce(Iterator begin, Iterator end, Mapper &&mapper, Reducer &&r) -> typename reducer_traits< Reducer >::future_type
Definition: map_reduce.hh:107
+

Requirements:

    +
  • Iterator: an InputIterator.
  • +
  • Mapper: unary function taking Iterator::value_type and producing a future<...>.
  • +
  • Initial: any value type
  • +
  • Reduce: a binary function taking two Initial values and returning an Initial
  • +
+

Return type:

    +
  • future<Initial>
  • +
+
Parameters
+ + + + + + +
beginbeginning of object range to operate on
endend of object range to operate on
mappermap function to call on each object, returning a future
initialinitial input value to reduce function
reducebinary function for merging two result values from mapper
+
+
+
Returns
equivalent to reduce(reduce(initial, mapper(obj0)), mapper(obj1)) ...
+
Note
map-reduce() schedules all invocations of both mapper and reduce on the current shard. If you want to run a function on all shards in parallel, have a look at smp::invoke_on_all() instead, or combine map_reduce() with smp::submit_to(). Sharded services have their own sharded::map_reduce() which map-reduces across all shards.
+ +
+
+ +

◆ map_reduce() [2/3]

+ +
+
+
+template<typename Iterator , typename Mapper , typename Reducer >
+requires requires (Iterator i, Mapper mapper, Reducer reduce) { *i++; { i != i } -> std::convertible_to<bool>; mapper(*i); reduce(futurize_invoke(mapper, *i).get()); }
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
auto seastar::map_reduce (Iterator begin,
Iterator end,
Mapper && mapper,
Reducer && r 
) -> typename reducer_traits<Reducer>::future_type +
+
+inline
+
+

Map a function over a range and reduce the result.

+
Parameters
+ + + + + +
beginan InputIterator designating the beginning of the range
endan InputIterator designating the end of the range
mapperis a callable which transforms values from the iterator range into a future<T>
ris an object which can be called with T as parameter and yields a future<> It may have a get() method which returns a value of type U which holds the result of reduction.
+
+
+
Returns
Th reduced value wrapped in a future. If the reducer has no get() method then this function returns future<>.
+
Note
map-reduce() schedules all invocations of both mapper and reduce on the current shard. If you want to run a function on all shards in parallel, have a look at smp::invoke_on_all() instead, or combine map_reduce() with smp::submit_to(). Sharded services have their own sharded::map_reduce() which map-reduces across all shards.
+ +
+
+ +

◆ map_reduce() [3/3]

+ +
+
+
+template<typename Range , typename Mapper , typename Initial , typename Reduce >
+requires requires (Range range, Mapper mapper, Initial initial, Reduce reduce) { std::begin(range); std::end(range); mapper(*std::begin(range)); requires is_future<std::remove_reference_t<decltype(mapper(*std::begin(range)))>>::value; { reduce(std::move(initial), mapper(*std::begin(range)).get()) } -> std::convertible_to<Initial>; }
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
future< Initial > seastar::map_reduce (Range && range,
Mapper && mapper,
Initial initial,
Reduce reduce 
)
+
+inline
+
+

Asynchronous map/reduce transformation (range version).

+

Given a range of objects, an asynchronous unary function operating on these objects, an initial value, and a binary function for reducing, map_reduce() will transform each object in the range, then invoke the the reducing function with the result.

+

Example:

+

Calculate the total size of several files:

+
std::vector<file> files = ...;
+
map_reduce(files,
+
std::mem_fn(file::size),
+
size_t(0),
+
std::plus<size_t>())
+

Requirements:

    +
  • Iterator: an InputIterator.
  • +
  • Mapper: unary function taking Iterator::value_type and producing a future<...>.
  • +
  • Initial: any value type
  • +
  • Reduce: a binary function taking two Initial values and returning an Initial
  • +
+

Return type:

    +
  • future<Initial>
  • +
+
Parameters
+ + + + + +
rangeobject range to operate on
mappermap function to call on each object, returning a future
initialinitial input value to reduce function
reducebinary function for merging two result values from mapper
+
+
+
Returns
equivalent to reduce(reduce(initial, mapper(obj0)), mapper(obj1)) ...
+
Note
map-reduce() schedules all invocations of both mapper and reduce on the current shard. If you want to run a function on all shards in parallel, have a look at smp::invoke_on_all() instead, or combine map_reduce() with smp::submit_to(). Sharded services have their own sharded::map_reduce() which map-reduces across all shards.
+ +
+
+ +

◆ max_concurrent_for_each() [1/2]

+ +
+
+
+template<typename Iterator , typename Sentinel , typename Func >
+requires (requires (Func f, Iterator i) { { f(*i) } -> std::same_as<future<>>; { ++i }; } && (std::same_as<Sentinel, Iterator> || std::sentinel_for<Sentinel, Iterator>) )
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
future seastar::max_concurrent_for_each (Iterator begin,
Sentinel end,
size_t max_concurrent,
Func && func 
)
+
+inlinenoexcept
+
+

Run a maximum of max_concurrent tasks in parallel (iterator version).

+

Given a range [begin, end) of objects, run func on each *i in the range, and return a future<> that resolves when all the functions complete. func should return a future<> that indicates when it is complete. Up to max_concurrent invocations are performed in parallel. This does not allow the range to refer to stack objects. The caller must ensure that the range outlives the call to max_concurrent_for_each so it can be iterated in the background.

+
Parameters
+ + + + + +
beginan InputIterator designating the beginning of the range
endan InputIterator designating the end of the range
max_concurrentmaximum number of concurrent invocations of func, must be greater than zero.
funcFunction to invoke with each element in the range (returning a future<>)
+
+
+
Returns
a future<> that resolves when all the function invocations complete. If one or more return an exception, the return value contains one of the exceptions.
+
Note
max_concurrent_for_each() schedules all invocations of func on the current shard. If you want to run a function on all shards in parallel, have a look at smp::invoke_on_all() instead.
+ +
+
+ +

◆ max_concurrent_for_each() [2/2]

+ +
+
+
+template<typename Range , typename Func >
+requires requires (Func f, Range r) { { f(*std::begin(r)) } -> std::same_as<future<>>; std::end(r); }
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future seastar::max_concurrent_for_each (Range && range,
size_t max_concurrent,
Func && func 
)
+
+inlinenoexcept
+
+

Run a maximum of max_concurrent tasks in parallel (range version).

+

Given a range of objects, run func on each *i in the range, and return a future<> that resolves when all the functions complete. func should return a future<> that indicates when it is complete. Up to max_concurrent invocations are performed in parallel. This does not allow the range to refer to stack objects. The caller must ensure that the range outlives the call to max_concurrent_for_each so it can be iterated in the background.

+
Parameters
+ + + + +
rangea Range to be processed
max_concurrentmaximum number of concurrent invocations of func, must be greater than zero.
funcFunction to invoke with each element in the range (returning a future<>)
+
+
+
Returns
a future<> that resolves when all the function invocations complete. If one or more return an exception, the return value contains one of the exceptions.
+
Note
max_concurrent_for_each() schedules all invocations of func on the current shard. If you want to run a function on all shards in parallel, have a look at smp::invoke_on_all() instead.
+ +
+
+ +

◆ maybe_yield()

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::maybe_yield ()
+
+inlinenoexcept
+
+

Yield the cpu if the task quota is exhausted.

+

Check if the current continuation is preempted and yield if so. Otherwise return a ready future.

+
Note
Threads and coroutines (see seastar::thread::maybe_yield() and seastar::coroutine::maybe_yield() have their own custom variants, and the various continuation-based loops (do_for_each() and similar) do this automatically.
+ +
+
+ +

◆ parallel_for_each()

+ +
+
+
+template<typename Iterator , typename Sentinel , typename Func >
+requires (requires (Func f, Iterator i) { { f(*i) } -> std::same_as<future<>>; { i++ }; } && (std::same_as<Sentinel, Iterator> || std::sentinel_for<Sentinel, Iterator>))
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
future seastar::parallel_for_each (Iterator begin,
Sentinel end,
Func && func 
)
+
+inlinenoexcept
+
+ +

Run tasks in parallel (iterator version).

+

Given a range [begin, end) of objects, run func on each *i in the range, and return a future<> that resolves when all the functions complete. func should return a future<> that indicates when it is complete. All invocations are performed in parallel. This allows the range to refer to stack objects, but means that unlike other loops this cannot check need_preempt and can only be used with small ranges.

+
Parameters
+ + + + +
beginan InputIterator designating the beginning of the range
endan InputIterator designating the end of the range
funcFunction to invoke with each element in the range (returning a future<>)
+
+
+
Returns
a future<> that resolves when all the function invocations complete. If one or more return an exception, the return value contains one of the exceptions.
+
Note
parallel_for_each() schedules all invocations of func on the current shard. If you want to run a function on all shards in parallel, have a look at smp::invoke_on_all() instead.
+
Examples
closeable_test.cc.
+
+ +
+
+ +

◆ repeat()

+ +
+
+
+template<typename AsyncAction >
+requires std::is_invocable_r_v<stop_iteration, AsyncAction> || std::is_invocable_r_v<future<stop_iteration>, AsyncAction>
+ + + + + +
+ + + + + + + + +
future seastar::repeat (AsyncAction && action)
+
+inlinenoexcept
+
+

Invokes given action until it fails or the function requests iteration to stop by returning stop_iteration::yes.

+
Parameters
+ + +
actiona callable taking no arguments, returning a future<stop_iteration>. Will be called again as soon as the future resolves, unless the future fails, action throws, or it resolves with stop_iteration::yes. If action is an r-value it can be moved in the middle of iteration.
+
+
+
Returns
a ready future if we stopped successfully, or a failed future if a call to to action failed.
+ +
+
+ +

◆ repeat_until_value()

+ +
+
+
+template<typename AsyncAction >
+requires requires (AsyncAction aa) { bool(futurize_invoke(aa).get()); futurize_invoke(aa).get().value(); }
+ + + + + +
+ + + + + + + + +
repeat_until_value_return_type< AsyncAction > seastar::repeat_until_value (AsyncAction action)
+
+noexcept
+
+

Invokes given action until it fails or the function requests iteration to stop by returning an engaged future<std::optional<T>> or std::optional<T>. The value is extracted from the optional, and returned, as a future, from repeat_until_value().

+
Parameters
+ + +
actiona callable taking no arguments, returning a future<std::optional<T>> or std::optional<T>. Will be called again as soon as the future resolves, unless the future fails, action throws, or it resolves with an engaged optional. If action is an r-value it can be moved in the middle of iteration.
+
+
+
Returns
a ready future if we stopped successfully, or a failed future if a call to to action failed. The optional's value is returned.
+ +
+
+ +

◆ when_all() [1/2]

+ +
+
+
+template<typename... FutOrFuncs>
+ + + + + +
+ + + + + + + + +
auto seastar::when_all (FutOrFuncs &&... fut_or_funcs)
+
+inlinenoexcept
+
+

Wait for many futures to complete, capturing possible errors (variadic version).

+

Each future can be passed directly, or a function that returns a future can be given instead.

+

If any function throws, an exceptional future is created for it.

+

Returns a tuple of futures so individual values or exceptions can be examined.

+
Parameters
+ + +
fut_or_funcsfutures or functions that return futures
+
+
+
Returns
an std::tuple<> of all futures returned; when ready, all contained futures will be ready as well.
+ +
+
+ +

◆ when_all() [2/2]

+ +
+
+
+template<typename FutureIterator >
+requires requires (FutureIterator i) { { *i++ }; requires is_future<std::remove_reference_t<decltype(*i)>>::value; }
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
future< std::vector< typename std::iterator_traits< FutureIterator >::value_type > > seastar::when_all (FutureIterator begin,
FutureIterator end 
)
+
+inlinenoexcept
+
+

Wait for many futures to complete, capturing possible errors (iterator version).

+

Given a range of futures as input, wait for all of them to resolve (either successfully or with an exception), and return them as a std::vector so individual values or exceptions can be examined.

+
Parameters
+ + + +
beginan InputIterator designating the beginning of the range of futures
endan InputIterator designating the end of the range of futures
+
+
+
Returns
an std::vector<> of all the futures in the input; when ready, all contained futures will be ready as well.
+ +
+
+ +

◆ when_all_succeed() [1/3]

+ +
+
+
+template<typename... FutOrFuncs>
+ + + + + +
+ + + + + + + + +
auto seastar::when_all_succeed (FutOrFuncs &&... fut_or_funcs)
+
+inlinenoexcept
+
+

Wait for many futures to complete (variadic version).

+

Each future can be passed directly, or a function that returns a future can be given instead.

+

If any function throws, or if the returned future fails, one of the exceptions is returned by this function as a failed future.

+
Parameters
+ + +
fut_or_funcsfutures or functions that return futures
+
+
+
Returns
future containing values of futures returned by funcs
+ +
+
+ +

◆ when_all_succeed() [2/3]

+ +
+
+
+template<typename FutureIterator , typename = typename std::iterator_traits<FutureIterator>::value_type>
+requires requires (FutureIterator i) { *i++; { i != i } -> std::convertible_to<bool>; requires is_future<std::remove_reference_t<decltype(*i)>>::value; }
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
auto seastar::when_all_succeed (FutureIterator begin,
FutureIterator end 
)
+
+inlinenoexcept
+
+

Wait for many futures to complete (iterator version).

+

Given a range of futures as input, wait for all of them to resolve, and return a future containing a vector of values of the original futures. In case any of the given futures fails one of the exceptions is returned by this function as a failed future.

Parameters
+ + + +
beginan InputIterator designating the beginning of the range of futures
endan InputIterator designating the end of the range of futures
+
+
+
Returns
an std::vector<> of all the valus in the input
+ +
+
+ +

◆ when_all_succeed() [3/3]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
auto seastar::when_all_succeed (std::vector< future< T > > && futures)
+
+inlinenoexcept
+
+

Wait for many futures to complete (vector version).

+

Given a vector of futures as input, wait for all of them to resolve, and return a future containing a vector of values of the original futures.

+

In case any of the given futures fails one of the exceptions is returned by this function as a failed future.

+
Parameters
+ + +
futuresa std::vector containing the futures to wait for.
+
+
+
Returns
an std::vector<> of all the values in the input
+ +
+
+ +

◆ with_lock()

+ +
+
+
+template<typename Lock , typename Func >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
auto seastar::with_lock (Lock & lock,
Func && func 
)
+
+inline
+
+

Executes the function func making sure the lock lock is taken, and later on properly released.

+
Parameters
+ + + +
lockthe lock, which is any object having providing a lock() / unlock() semantics. Caller must make sure that it outlives func.
funcfunction to be executed
+
+
+
Returns
whatever func returns
+ +
+
+ +

◆ with_scheduling_group()

+ +
+
+
+template<typename Func , typename... Args>
+requires std::is_nothrow_move_constructible_v<Func>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
auto seastar::with_scheduling_group (scheduling_group sg,
Func func,
Args &&... args 
)
+
+inlinenoexcept
+
+ +

run a callable (with some arbitrary arguments) in a scheduling group

+

If the conditions are suitable (see scheduling_group::may_run_immediately()), then the function is run immediately. Otherwise, the function is queued to run when its scheduling group next runs.

+
Parameters
+ + + + +
sgscheduling group that controls execution time for the function
funcfunction to run; must be movable or copyable
argsarguments to the function; may be copied or moved, so use std::ref() to force passing references
+
+
+ +
+
+ +

◆ with_timeout()

+ +
+
+
+template<typename ExceptionFactory = default_timeout_exception_factory, typename Clock , typename Duration , typename... T>
+ + + + + + + + + + + + + + + + + + +
future< T... > seastar::with_timeout (std::chrono::time_point< Clock, Duration > timeout,
future< T... > f 
)
+
+ +

Wait for either a future, or a timeout, whichever comes first.

+

When timeout is reached the returned future resolves with an exception produced by ExceptionFactory::timeout(). By default it is timed_out_error exception.

+

Note that timing out doesn't cancel any tasks associated with the original future. It also doesn't cancel the callback registerred on it.

+
Parameters
+ + + +
ffuture to wait for
timeouttime point after which the returned future should be failed
+
+
+
Returns
a future which will be either resolved with f or a timeout exception
+ +
+
+ +

◆ yield()

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::yield ()
+
+noexcept
+
+ +

Returns a future which is not ready but is scheduled to resolve soon.

+

Schedules a future to run "soon". yield() can be used to break long-but-finite loops into pieces. Note that if nothing else is runnable, It will not check for I/O, and so an infinite loop with yield() will just burn CPU.
+

+ +
+
+
+ + + + diff --git a/master/group__interprocess-module.html b/master/group__interprocess-module.html new file mode 100644 index 000000000..fc8957bb1 --- /dev/null +++ b/master/group__interprocess-module.html @@ -0,0 +1,174 @@ + + + + + + + +Seastar: Interprocess Communication + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
Interprocess Communication
+
+
+

Detailed Description

+

Seastar provides a set of APIs for interprocess communicate

+ + + + + + + + +

+Functions

future< std::tuple< file_desc, file_desc > > seastar::experimental::make_pipe ()
 
future< processseastar::experimental::spawn_process (const std::filesystem::path &pathname, spawn_parameters params)
 
future< processseastar::experimental::spawn_process (const std::filesystem::path &pathname)
 
+

Function Documentation

+ +

◆ make_pipe()

+ +
+
+ + + + + + + +
future< std::tuple< file_desc, file_desc > > seastar::experimental::make_pipe ()
+
+

Create a pipe using pipe2

+
Returns
a tuple of file_desc, the first one for reading from the pipe, the second for writing to it.
+ +
+
+ +

◆ spawn_process() [1/2]

+ +
+
+ + + + + + + + +
future< process > seastar::experimental::spawn_process (const std::filesystem::path & pathname)
+
+

Spawn a subprocess

+
Parameters
+ + +
pathnamethe path to the executable
+
+
+
Returns
a process representing the spawned subprocess
+
Note
the this overload does not specify a params parameters for spawning the subprocess. Instead, it uses the pathname for the argv[0] in the params.
+ +
+
+ +

◆ spawn_process() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
future< process > seastar::experimental::spawn_process (const std::filesystem::path & pathname,
spawn_parameters params 
)
+
+

Spawn a subprocess

+
Parameters
+ + + +
pathnamethe path to the executable
paramsparameters for spawning the subprocess
+
+
+
Returns
a process representing the spawned subprocess
+
Note
the subprocess is spawned with posix_spawn() system call, so the pathname should be relative or absolute path of the executable.
+ +
+
+
+ + + + diff --git a/master/group__io-module.html b/master/group__io-module.html new file mode 100644 index 000000000..4ef60237f --- /dev/null +++ b/master/group__io-module.html @@ -0,0 +1,90 @@ + + + + + + + +Seastar: Io-module + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
Io-module
+
+
+

Detailed Description

+ + + + + + + + + + +

+Classes

class  seastar::fair_queue_entry
 
class  seastar::fair_group
 Group of queues class. More...
 
class  seastar::fair_queue
 Fair queuing class. More...
 
+
+ + + + diff --git a/master/group__logging.html b/master/group__logging.html new file mode 100644 index 000000000..add1c20f6 --- /dev/null +++ b/master/group__logging.html @@ -0,0 +1,159 @@ + + + + + + + +Seastar: Logging + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
Logging
+
+
+

Detailed Description

+ + + + + + + + +

+Namespaces

namespace  seastar
 Seastar API namespace.
 
namespace  std
 STL namespace.
 
+ + + + + + + +

+Classes

struct  fmt::formatter< seastar::lazy_eval< Func > >
 
struct  fmt::formatter< seastar::lazy_deref_wrapper< T > >
 
struct  fmt::formatter< seastar::log_level >
 
+ + + + +

+Enumerations

enum class  seastar::log_level {
+  error +, warn +, info +, debug +,
+  trace +
+ }
 log level used with More...
 
+ + + + + + + + + + + + +

+Functions

+std::ostream & seastar::operator<< (std::ostream &out, log_level level)
 
+std::istream & seastar::operator>> (std::istream &in, log_level &level)
 
+constexpr auto fmt::formatter< seastar::log_level >::parse (format_parse_context &ctx)
 
+auto fmt::formatter< seastar::log_level >::format (seastar::log_level level, fmt::format_context &ctx) const -> decltype(ctx.out())
 
+template<>
seastar::log_level boost::lexical_cast (const std::string &source)
 
+

Enumeration Type Documentation

+ +

◆ log_level

+ +
+
+ + + + + +
+ + + + +
enum class seastar::log_level
+
+strong
+
+ +

log level used with

+
See also
{logger} used with the logger.do_log method. Levels are in increasing order. That is if you want to see debug(3) logs you will also see error(0), warn(1), info(2).
+ +
+
+
+ + + + diff --git a/master/group__memory-module.html b/master/group__memory-module.html new file mode 100644 index 000000000..7f5b20818 --- /dev/null +++ b/master/group__memory-module.html @@ -0,0 +1,405 @@ + + + + + + + +Seastar: Memory management + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
Memory management
+
+
+

Detailed Description

+

Functions and classes for managing memory.

+

Memory management in seastar consists of the following:

+ + + + + + + +

+Classes

class  seastar::deleter
 
class  seastar::temporary_buffer< CharType >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

seastar::deleter::~deleter ()
 Destroys the deleter and carries out the encapsulated action.
 
+deleterseastar::deleter::operator= (deleter &&x) noexcept
 
template<typename Object >
deleter make_deleter (deleter next, Object o)
 
template<typename Object >
deleter make_deleter (Object o)
 
deleter seastar::deleter::share ()
 
void seastar::deleter::append (deleter d)
 
deleter make_free_deleter (void *obj)
 
deleter make_free_deleter (deleter next, void *obj)
 
template<typename T >
deleter make_object_deleter (T &&obj)
 
template<typename T >
deleter make_object_deleter (deleter d, T &&obj)
 
+

Function Documentation

+ +

◆ append()

+ +
+
+ + + + + +
+ + + + + + + + +
void seastar::deleter::append (deleter d)
+
+inline
+
+

Appends another deleter to this deleter. When this deleter is destroyed, both encapsulated actions will be carried out.

+ +
+
+ +

◆ make_deleter() [1/2]

+ +
+
+
+template<typename Object >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
deleter make_deleter (deleter next,
Object o 
)
+
+related
+
+

Makes a deleter that encapsulates the action of destroying an object, as well as running another deleter. The input object is moved to the deleter, and destroyed when the deleter is destroyed.

+
Parameters
+ + + +
nextdeleter that will become part of the new deleter's encapsulated action
oobject whose destructor becomes part of the new deleter's encapsulated action
+
+
+ +
+
+ +

◆ make_deleter() [2/2]

+ +
+
+
+template<typename Object >
+ + + + + +
+ + + + + + + + +
deleter make_deleter (Object o)
+
+related
+
+

Makes a deleter that encapsulates the action of destroying an object. The input object is moved to the deleter, and destroyed when the deleter is destroyed.

+
Parameters
+ + +
oobject whose destructor becomes the new deleter's encapsulated action
+
+
+ +
+
+ +

◆ make_free_deleter() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
deleter make_free_deleter (deleter next,
void * obj 
)
+
+related
+
+

Makes a deleter that calls std::free() when it is destroyed, as well as invoking the encapsulated action of another deleter.

+
Parameters
+ + + +
nextdeleter to invoke.
objobject to free.
+
+
+ +
+
+ +

◆ make_free_deleter() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
deleter make_free_deleter (void * obj)
+
+related
+
+

Makes a deleter that calls std::free() when it is destroyed.

+
Parameters
+ + +
objobject to free.
+
+
+ +
+
+ +

◆ make_object_deleter() [1/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
deleter make_object_deleter (deleter d,
T && obj 
)
+
+related
+
+
+ +

◆ make_object_deleter() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
deleter make_object_deleter (T && obj)
+
+related
+
+
See also
make_deleter(Object)
+ +
+
+ +

◆ share()

+ +
+
+ + + + + +
+ + + + + + + +
deleter seastar::deleter::share ()
+
+inline
+
+

Performs a sharing operation. The encapsulated action will only be carried out after both the original deleter and the returned deleter are both destroyed.

+
Returns
a deleter with the same encapsulated action as this one.
+ +
+
+
+ + + + diff --git a/master/group__metrics.html b/master/group__metrics.html new file mode 100644 index 000000000..26f450139 --- /dev/null +++ b/master/group__metrics.html @@ -0,0 +1,1065 @@ + + + + + + + +Seastar: Metrics + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
Metrics
+
+
+

Detailed Description

+ + + + +

+Modules

 metrics type definitions
 
+ + + + + + + +

+Namespaces

namespace  seastar::metrics
 metrics creation and registration
 
namespace  impl
 holds the implementation parts of the metrics layer, do not use directly.
 
+ + + + + + + + + + + + +

+Classes

class  seastar::metrics::double_registration
 
class  seastar::metrics::description
 Human-readable description of a metric/group. More...
 
class  seastar::metrics::label_instance
 Label a metrics. More...
 
class  seastar::metrics::label
 Class that creates label instances. More...
 
+ + + + + + + + + +

+Typedefs

using seastar::metrics::metric_type_def = sstring
 
using seastar::metrics::metric_name_type = sstring
 
using seastar::metrics::instance_id_type = sstring
 
+using seastar::metrics::skip_when_empty = bool_class< class skip_when_empty_tag >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<typename T >
impl::metric_definition_impl seastar::metrics::make_gauge (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
 Gauge are a general purpose metric. More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_gauge (metric_name_type name, description d, T &&val)
 Gauge are a general purpose metric. More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_gauge (metric_name_type name, description d, std::vector< label_instance > labels, T &&val)
 Gauge are a general purpose metric. More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_derive (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
 Derive are used when a rate is more interesting than the value. More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_derive (metric_name_type name, description d, T &&val)
 Derive are used when a rate is more interesting than the value. More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_derive (metric_name_type name, description d, std::vector< label_instance > labels, T &&val)
 Derive are used when a rate is more interesting than the value. More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_counter (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
 create a counter metric More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_counter (metric_name_type name, description d, T &&val)
 create a counter metric More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_counter (metric_name_type name, description d, std::vector< label_instance > labels, T &&val)
 create a counter metric More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_absolute (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
 create an absolute metric. More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_histogram (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
 create a histogram metric. More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_histogram (metric_name_type name, description d, std::vector< label_instance > labels, T &&val)
 create a histogram metric. More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_histogram (metric_name_type name, description d, T &&val)
 create a histogram metric. More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_summary (metric_name_type name, description d, T &&val)
 create a summary metric. More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_total_bytes (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
 create a total_bytes metric. More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_current_bytes (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
 create a current_bytes metric. More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_queue_length (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
 create a queue_length metric. More...
 
template<typename T >
impl::metric_definition_impl seastar::metrics::make_total_operations (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
 create a total operation metric. More...
 
+ + + + + +

+Variables

+const bool seastar::metrics::metric_disabled
 
+label seastar::metrics::shard_label
 
+

Typedef Documentation

+ +

◆ instance_id_type

+ +
+
+ + + + +
using seastar::metrics::instance_id_type = typedef sstring
+
+

typically used for the shard id

+ +
+
+ +

◆ metric_name_type

+ +
+
+ + + + +
using seastar::metrics::metric_name_type = typedef sstring
+
+

The metric name'

+ +
+
+ +

◆ metric_type_def

+ +
+
+ + + + +
using seastar::metrics::metric_type_def = typedef sstring
+
+

Used to hold an inherit type (like bytes)

+ +
+
+

Function Documentation

+ +

◆ make_absolute()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_absolute (metric_name_type name,
T && val,
description d = description(),
std::vector< label_instancelabels = {} 
)
+
+ +

create an absolute metric.

+

Absolute are used for metric that are being erased after each time they are read. They are here for compatibility reasons and should general be avoided in most applications.

+ +
+
+ +

◆ make_counter() [1/3]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_counter (metric_name_type name,
description d,
std::vector< label_instancelabels,
T && val 
)
+
+ +

create a counter metric

+

Counters are used when a rate is more interesting than the value, monitoring systems take derivation from it to display.

+

It's an integer or floating point value that can increase or decrease.

+ +
+
+ +

◆ make_counter() [2/3]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_counter (metric_name_type name,
description d,
T && val 
)
+
+ +

create a counter metric

+

Counters are used when a rate is more interesting than the value, monitoring systems take derivation from it to display.

+

It's an integer or floating point value that can increase or decrease.

+ +
+
+ +

◆ make_counter() [3/3]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_counter (metric_name_type name,
T && val,
description d = description(),
std::vector< label_instancelabels = {} 
)
+
+ +

create a counter metric

+

Counters are used when a rate is more interesting than the value, monitoring systems take derivation from it to display.

+

It's an integer or floating point value that can increase or decrease.

+ +
+
+ +

◆ make_current_bytes()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_current_bytes (metric_name_type name,
T && val,
description d = description(),
std::vector< label_instancelabels = {},
instance_id_type  = impl::shard() 
)
+
+ +

create a current_bytes metric.

+

current_bytes are used to report on current status in bytes. For example the current free memory.

+ +
+
+ +

◆ make_derive() [1/3]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_derive (metric_name_type name,
description d,
std::vector< label_instancelabels,
T && val 
)
+
+ +

Derive are used when a rate is more interesting than the value.

+

Derive is an integer value that can increase or decrease, typically it is used when looking at the derivation of the value.

+

It is OK to use it when counting things and if no wrap-around is expected (it shouldn't) it's prefer over counter metric.

+ +
+
+ +

◆ make_derive() [2/3]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_derive (metric_name_type name,
description d,
T && val 
)
+
+ +

Derive are used when a rate is more interesting than the value.

+

Derive is an integer value that can increase or decrease, typically it is used when looking at the derivation of the value.

+

It is OK to use it when counting things and if no wrap-around is expected (it shouldn't) it's prefer over counter metric.

+ +
+
+ +

◆ make_derive() [3/3]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_derive (metric_name_type name,
T && val,
description d = description(),
std::vector< label_instancelabels = {} 
)
+
+ +

Derive are used when a rate is more interesting than the value.

+

Derive is an integer value that can increase or decrease, typically it is used when looking at the derivation of the value.

+

It is OK to use it when counting things and if no wrap-around is expected (it shouldn't) it's prefer over counter metric.

+ +
+
+ +

◆ make_gauge() [1/3]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_gauge (metric_name_type name,
description d,
std::vector< label_instancelabels,
T && val 
)
+
+ +

Gauge are a general purpose metric.

+

They can support floating point and can increase or decrease

+ +
+
+ +

◆ make_gauge() [2/3]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_gauge (metric_name_type name,
description d,
T && val 
)
+
+ +

Gauge are a general purpose metric.

+

They can support floating point and can increase or decrease

+ +
+
+ +

◆ make_gauge() [3/3]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_gauge (metric_name_type name,
T && val,
description d = description(),
std::vector< label_instancelabels = {} 
)
+
+ +

Gauge are a general purpose metric.

+

They can support floating point and can increase or decrease

+ +
+
+ +

◆ make_histogram() [1/3]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_histogram (metric_name_type name,
description d,
std::vector< label_instancelabels,
T && val 
)
+
+ +

create a histogram metric.

+

Histograms are a list o buckets with upper values and counter for the number of entries in each bucket.

+ +
+
+ +

◆ make_histogram() [2/3]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_histogram (metric_name_type name,
description d,
T && val 
)
+
+ +

create a histogram metric.

+

Histograms are a list o buckets with upper values and counter for the number of entries in each bucket.

+ +
+
+ +

◆ make_histogram() [3/3]

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_histogram (metric_name_type name,
T && val,
description d = description(),
std::vector< label_instancelabels = {} 
)
+
+ +

create a histogram metric.

+

Histograms are a list o buckets with upper values and counter for the number of entries in each bucket.

+ +
+
+ +

◆ make_queue_length()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_queue_length (metric_name_type name,
T && val,
description d = description(),
std::vector< label_instancelabels = {},
instance_id_type  = impl::shard() 
)
+
+ +

create a queue_length metric.

+

queue_length are used to report on queue length

+ +
+
+ +

◆ make_summary()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_summary (metric_name_type name,
description d,
T && val 
)
+
+ +

create a summary metric.

+

Summaries are a different kind of histograms. It reports in quantiles. For example, the p99 and p95 latencies.

+ +
+
+ +

◆ make_total_bytes()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_total_bytes (metric_name_type name,
T && val,
description d = description(),
std::vector< label_instancelabels = {},
instance_id_type  = impl::shard() 
)
+
+ +

create a total_bytes metric.

+

total_bytes are used for an ever growing counters, like the total bytes passed on a network.

+ +
+
+ +

◆ make_total_operations()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
impl::metric_definition_impl seastar::metrics::make_total_operations (metric_name_type name,
T && val,
description d = description(),
std::vector< label_instancelabels = {},
instance_id_type  = impl::shard() 
)
+
+ +

create a total operation metric.

+

total_operations are used for ever growing operation counter.

+ +
+
+
+ + + + diff --git a/master/group__metrics__types.html b/master/group__metrics__types.html new file mode 100644 index 000000000..19f21d3d9 --- /dev/null +++ b/master/group__metrics__types.html @@ -0,0 +1,76 @@ + + + + + + + +Seastar: metrics type definitions + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
metrics type definitions
+
+
+

The following are for the metric layer use, do not use them directly Instead use the make_counter, make_gauge

+
+ + + + diff --git a/master/group__networking-module.html b/master/group__networking-module.html new file mode 100644 index 000000000..ccdbaf910 --- /dev/null +++ b/master/group__networking-module.html @@ -0,0 +1,475 @@ + + + + + + + +Seastar: Networking + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
Networking
+
+
+

Detailed Description

+

Seastar provides a simple networking API, backed by two TCP/IP stacks: the POSIX stack, utilizing the kernel's BSD socket APIs, and the native stack, implement fully within seastar and able to drive network cards directly. The native stack supports zero-copy on both transmit and receive, and is implemented using seastar's high performance, lockless sharded design. The network stack can be selected with the --network-stack command-line parameter.

+ + + + + + + + + + + + + + + + + +

+Classes

struct  seastar::connected_socket_input_stream_config
 
struct  seastar::session_dn
 Distinguished name. More...
 
class  seastar::connected_socket
 
class  seastar::socket
 
struct  seastar::accept_result
 The result of an server_socket::accept() call. More...
 
class  seastar::server_socket
 A listening socket, waiting to accept incoming network connections. More...
 
+ + + + + + + + + + + + + + + + + + + +

+Functions

server_socket seastar::listen (socket_address sa)
 
server_socket seastar::listen (socket_address sa, listen_options opts)
 
future< connected_socketseastar::connect (socket_address sa)
 
future< connected_socketseastar::connect (socket_address sa, socket_address local, transport proto)
 
socket seastar::make_socket ()
 
net::udp_channel seastar::make_udp_channel ()
 
net::udp_channel seastar::make_udp_channel (const socket_address &local)
 
net::datagram_channel seastar::make_unbound_datagram_channel (sa_family_t family)
 
net::datagram_channel seastar::make_bound_datagram_channel (const socket_address &local)
 
+

Class Documentation

+ +

◆ seastar::connected_socket_input_stream_config

+ +
+
+ + + + +
struct seastar::connected_socket_input_stream_config
+
+ + + + + + + + + + + +
Class Members
+unsigned +buffer_size +Initial buffer size to use for input buffering.
+unsigned +max_buffer_size +

Maximum buffer size to use for input buffering. The system will increase buffer sizes if it sees a tendency towards large requests, but will not go above this buffer size.

+
+unsigned +min_buffer_size +

Minimum buffer size to use for input buffering. The system will decrease buffer sizes if it sees a tendency towards small requests, but will not go below this buffer size.

+
+ +
+
+ +

◆ seastar::session_dn

+ +
+
+ + + + +
struct seastar::session_dn
+
+ + + + + + + + +
Class Members
+sstring +issuer +
+sstring +subject +
+ +
+
+ +

◆ seastar::accept_result

+ +
+
+ + + + +
struct seastar::accept_result
+
+ + + + + + + + +
Class Members
+connected_socket +connection +The newly-accepted connection.
+socket_address +remote_address +The address of the peer that connected to us.
+ +
+
+

Function Documentation

+ +

◆ connect() [1/2]

+ +
+
+ + + + + + + + +
future< connected_socket > seastar::connect (socket_address sa)
+
+

Establishes a connection to a given address

+

Attempts to connect to the given address.

+
Parameters
+ + +
sasocket address to connect to
+
+
+
Returns
a connected_socket object, or an exception
+ +
+
+ +

◆ connect() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
future< connected_socket > seastar::connect (socket_address sa,
socket_address local,
transport proto 
)
+
+

Establishes a connection to a given address

+

Attempts to connect to the given address with a defined local endpoint

+
Parameters
+ + + + +
sasocket address to connect to
localsocket address for local endpoint
prototransport protocol (TCP or SCTP)
+
+
+
Returns
a connected_socket object, or an exception
+ +
+
+ +

◆ listen() [1/2]

+ +
+
+ + + + + + + + +
server_socket seastar::listen (socket_address sa)
+
+

Listen for connections on a given port

+

Starts listening on a given address for incoming connections.

+
Parameters
+ + +
sasocket address to listen on
+
+
+
Returns
server_socket object ready to accept connections.
+
See also
listen(socket_address sa, listen_options opts)
+ +
+
+ +

◆ listen() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
server_socket seastar::listen (socket_address sa,
listen_options opts 
)
+
+

Listen for connections on a given port

+

Starts listening on a given address for incoming connections.

+
Parameters
+ + + +
sasocket address to listen on
optsoptions controlling the listen operation
+
+
+
Returns
server_socket object ready to accept connections.
+
See also
listen(socket_address sa)
+ +
+
+ +

◆ make_bound_datagram_channel()

+ +
+
+ + + + + + + + +
net::datagram_channel seastar::make_bound_datagram_channel (const socket_addresslocal)
+
+

Creates a datagram_channel object suitable for sending and receiving datagrams to/from destinations that belong to the provided address family. Supported address families: AF_INET, AF_INET6 and AF_UNIX.

+
Parameters
+ + +
locallocal address to bind to
+
+
+
Returns
a net::datagram_channel object for sending/receiving datagrams in a specified address family.
+ +
+
+ +

◆ make_socket()

+ +
+
+ + + + + + + +
socket seastar::make_socket ()
+
+

Creates a socket object suitable for establishing stream-oriented connections

+
Returns
a socket object that can be used for establishing connections
+ +
+
+ +

◆ make_udp_channel() [1/2]

+ +
+
+ + + + + + + +
net::udp_channel seastar::make_udp_channel ()
+
+

Creates a udp_channel object suitable for sending UDP packets

+

The channel is not bound to a local address, and thus can only be used for sending.

+
Returns
a net::udp_channel object that can be used for UDP transfers.
+ +
+
+ +

◆ make_udp_channel() [2/2]

+ +
+
+ + + + + + + + +
net::udp_channel seastar::make_udp_channel (const socket_addresslocal)
+
+

Creates a udp_channel object suitable for sending and receiving UDP packets

+
Parameters
+ + +
locallocal address to bind to
+
+
+
Returns
a net::udp_channel object that can be used for UDP transfers.
+ +
+
+ +

◆ make_unbound_datagram_channel()

+ +
+
+ + + + + + + + +
net::datagram_channel seastar::make_unbound_datagram_channel (sa_family_t family)
+
+

Creates a datagram_channel object suitable for sending datagrams to destinations that belong to the provided address family. Supported address families: AF_INET, AF_INET6 and AF_UNIX.

+

Setting family to AF_INET or AF_INET6 creates a datagram_channel that uses UDP protocol. AF_UNIX creates a datagram_channel that uses UNIX domain sockets.

+

The channel is not bound to a local address, and thus can only be used for sending.

+
Parameters
+ + +
familyaddress family in which the datagram_channel will operate
+
+
+
Returns
a net::datagram_channel object for sending datagrams in a specified address family.
+ +
+
+
+ + + + diff --git a/master/group__posix-support.html b/master/group__posix-support.html new file mode 100644 index 000000000..89c8106e3 --- /dev/null +++ b/master/group__posix-support.html @@ -0,0 +1,129 @@ + + + + + + + +Seastar: POSIX Support + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
POSIX Support
+
+
+

Detailed Description

+

Mostly-internal APIs to provide C++ glue for the underlying POSIX platform; but can be used by the application when they don't block.

+ + + + + + + + +

+Classes

struct  seastar::mmap_deleter
 
class  seastar::file_desc
 
class  seastar::posix_thread
 
+ + + +

+Typedefs

+using seastar::mmap_area = std::unique_ptr< char[], mmap_deleter >
 
+ + + + + + + + + + + + + + + + + + + + + +

+Functions

+void seastar::throw_system_error_on (bool condition, const char *what_arg="")
 
+template<typename T >
void seastar::throw_kernel_error (T r)
 
+template<typename T >
void seastar::throw_pthread_error (T r)
 
+mmap_area seastar::mmap_anonymous (void *addr, size_t length, int prot, int flags)
 
+sigset_t seastar::make_sigset_mask (int signo)
 
+sigset_t seastar::make_full_sigset_mask ()
 
+sigset_t seastar::make_empty_sigset_mask ()
 
+void seastar::pin_this_thread (unsigned cpu_id)
 
+std::set< unsigned > seastar::get_current_cpuset ()
 
+
+ + + + diff --git a/master/group__program-options.html b/master/group__program-options.html new file mode 100644 index 000000000..cd87e5eb3 --- /dev/null +++ b/master/group__program-options.html @@ -0,0 +1,116 @@ + + + + + + + +Seastar: Program Options + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
Program Options
+
+
+

Detailed Description

+

Infrastructure for configuring a seastar application.

+

The program-options infrastructure allows configuring seastar both by C++ code and by command-line and/or config files. This is achieved by providing a set of self-describing and self-validating value types as well as option groups to allow grouping them into arbitrary tree structures. Seastar modules expose statically declared option structs, which derive from option_group and contain various concrete basic_value members comprising the required configuration. These structs are self-describing, and self-validating, the name of the option group as well as the list of its basic_value member can be queried run-time.

+ + + + + + + + + + + + + + + + + + + +

+Classes

class  seastar::program_options::options_descriptor
 
class  seastar::program_options::options_mutator
 
struct  seastar::program_options::unused
 A tag type used to construct unused option_group and basic_value objects. More...
 
class  seastar::program_options::option_group
 
class  seastar::program_options::basic_value
 
class  seastar::program_options::value< T >
 
class  seastar::program_options::value< std::monostate >
 
class  seastar::program_options::selection_value< T >
 
+

Class Documentation

+ +

◆ seastar::program_options::unused

+ +
+
+ + + + +
struct seastar::program_options::unused
+
+ +
+
+
+ + + + diff --git a/master/group__rpc.html b/master/group__rpc.html new file mode 100644 index 000000000..904a4cb75 --- /dev/null +++ b/master/group__rpc.html @@ -0,0 +1,342 @@ + + + + + + + +Seastar: rpc - remote procedure call framework + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
rpc - remote procedure call framework
+
+
+

Detailed Description

+

rpc is a framework that can be used to define client-server communication protocols. For a high-level description of the RPC features see doc/rpc.md, doc/rpc-streaming.md and doc/rpc-compression.md

+

The entry point for setting up an rpc protocol is seastar::rpc::protocol.

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

struct  seastar::rpc::isolation_config
 Specifies resource isolation for a connection. More...
 
struct  seastar::rpc::resource_limits
 Resource limits for an RPC server. More...
 
struct  seastar::rpc::client_options
 
struct  seastar::rpc::server_options
 
class  seastar::rpc::protocol< Serializer, MsgType >
 
class  seastar::rpc::optional< T >
 
class  seastar::rpc::opt_time_point
 
class  seastar::rpc::sink< Out >
 
class  seastar::rpc::source< In >
 
class  seastar::rpc::tuple< T >
 
+ + + +

+Functions

isolation_config seastar::rpc::default_isolate_connection (sstring isolation_cookie)
 
+

Class Documentation

+ +

◆ seastar::rpc::isolation_config

+ +
+
+ + + + +
struct seastar::rpc::isolation_config
+
+ + + + + +
Class Members
+scheduling_group +sched_group +

Specifies a scheduling group under which the connection (and all its verb handlers) will execute.

+
+ +
+
+ +

◆ seastar::rpc::resource_limits

+ +
+
+ + + + +
struct seastar::rpc::resource_limits
+
+ + + + + + + + + + + +
Class Members
+typedef function< future< isolation_config >(sstring isolation_cookie)> +asyncronous_isolation_function +
+typedef variant< syncronous_isolation_function, asyncronous_isolation_function > +isolation_function_alternatives +
+typedef function< isolation_config(sstring isolation_cookie)> +syncronous_isolation_function +

Configures isolation for a connection based on its isolation cookie. May throw, in which case the connection will be terminated.

+
+ + + + + + + + + + + + + + +
Class Members
+size_t +basic_request_size +Minimum request footprint in memory.
+unsigned +bloat_factor +Serialized size multiplied by this to estimate memory used by request.
+isolation_function_alternatives +isolate_connection +
+size_t +max_memory +

Maximum amount of memory that may be consumed by all requests

+
+ +
+
+ +

◆ seastar::rpc::client_options

+ +
+
+ + + + +
struct seastar::rpc::client_options
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class Members
+factory * +compressor_factory +
+sstring +isolation_cookie +

Configures how this connection is isolated from other connection on the same server.

+
See also
resource_limits::isolate_connection
+
+optional< tcp_keepalive_params > +keepalive +
+sstring +metrics_domain +
+bool +reuseaddr +
+bool +send_handler_duration +
+bool +send_timeout_data +
+connection_id +stream_parent +
+bool +tcp_nodelay +
+ +
+
+ +

◆ seastar::rpc::server_options

+ +
+
+ + + + +
struct seastar::rpc::server_options
+
+ + + + + + + + + + + + + + + + + +
Class Members
+factory * +compressor_factory +
+function< bool(const socket_address &)> +filter_connection +
+load_balancing_algorithm +load_balancing_algorithm +
+optional< streaming_domain_type > +streaming_domain +
+bool +tcp_nodelay +
+ +
+
+

Function Documentation

+ +

◆ default_isolate_connection()

+ +
+
+ + + + + + + + +
isolation_config seastar::rpc::default_isolate_connection (sstring isolation_cookie)
+
+

Default isolation configuration - run everything in the default scheduling group.

+

In the scheduling_group that the protocol::server was created in.

+ +
+
+
+ + + + diff --git a/master/group__smp-module.html b/master/group__smp-module.html new file mode 100644 index 000000000..597f741da --- /dev/null +++ b/master/group__smp-module.html @@ -0,0 +1,141 @@ + + + + + + + +Seastar: Multicore + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
Multicore
+
+
+

Detailed Description

+

Support for exploiting multiple cores on a server.

+

Seastar supports multicore servers by using sharding. Each logical core (lcore) runs a separate event loop, with its own memory allocator, TCP/IP stack, and other services. Shards communicate by explicit message passing, rather than using locks and condition variables as with traditional threaded programming.

+

Smart pointer wrapper which makes it safe to move across CPUs.

+

foreign_ptr<> is a smart pointer wrapper which, unlike shared_ptr and lw_shared_ptr, is safe to move to a different core.

+

As seastar avoids locking, any but the most trivial objects must be destroyed on the same core they were created on, so that, for example, their destructors can unlink references to the object from various containers. In addition, for performance reasons, the shared pointer types do not use atomic operations to manage their reference counts. As a result they cannot be used on multiple cores in parallel.

+

foreign_ptr<> provides a solution to that problem. foreign_ptr<> wraps smart pointers – seastar::shared_ptr<>, or similar, and remembers on what core this happened. When the foreign_ptr<> object is destroyed, it sends a message to the original core so that the wrapped object can be safely destroyed.

+

foreign_ptr<> is a move-only object; it cannot be copied.

+ + + + + + + + + + + + + + + + + +

+Classes

class  seastar::sharded< Service >
 
class  seastar::async_sharded_service< T >
 
class  seastar::peering_sharded_service< Service >
 Provide a sharded service with access to its peers. More...
 
class  seastar::no_sharded_instance_exception
 Exception thrown when a sharded object does not exist. More...
 
class  seastar::sharded_parameter< Func, Params >
 Helper to pass a parameter to a sharded<> object that depends on the shard. It is evaluated on the shard, just before being passed to the local instance. It is useful when passing parameters to sharded::start(). More...
 
class  seastar::foreign_ptr< PtrType >
 
+ + + + +

+Functions

template<typename T >
foreign_ptr< T > make_foreign (T ptr)
 
+

Function Documentation

+ +

◆ make_foreign()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
foreign_ptr< T > make_foreign (ptr)
+
+related
+
+

Wraps a raw or smart pointer object in a foreign_ptr<>.

+ +
+
+
+ + + + diff --git a/master/group__thread-module.html b/master/group__thread-module.html new file mode 100644 index 000000000..3cc3a23c7 --- /dev/null +++ b/master/group__thread-module.html @@ -0,0 +1,382 @@ + + + + + + + +Seastar: Seastar threads + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
Seastar threads
+
+
+

Detailed Description

+

Seastar threads provide an execution environment where blocking is tolerated; you can issue I/O, and wait for it in the same function, rather then establishing a callback to be called with future<>::then().

+

Seastar threads are not the same as operating system threads:

    +
  • seastar threads are cooperative; they are never preempted except at blocking points (see below)
  • +
  • seastar threads always run on the same core they were launched on
  • +
+

Like other seastar code, seastar threads may not issue blocking system calls.

+

A seastar thread blocking point is any function that returns a future. you block by calling future<>::get(); this waits for the future to become available, and in the meanwhile, other seastar threads and seastar non-threaded code may execute.

+

Example:

+
sleep(5s).get(); // blocking point
+
});
+
value_type && get()
gets the value returned by the computation
Definition: future.hh:1342
+
thread - stateful thread of execution
Definition: thread.hh:144
+
future sleep(std::chrono::duration< Rep, Period > dur)
Definition: sleep.hh:48
+

An easy way to launch a thread and carry out some computation, and return a result from this execution is by using the seastar::async() function. The result is returned as a future, so that non-threaded code can wait for the thread to terminate and yield a result.

+ + + + + + + + +

+Classes

class  seastar::thread_attributes
 Class that holds attributes controling the behavior of a thread. More...
 
class  seastar::thread
 thread - stateful thread of execution More...
 
+ + + + + + + + + + + + + + + + + + +

+Functions

template<typename Func , typename... Args>
futurize_t< std::invoke_result_t< Func, Args... > > seastar::async (thread_attributes attr, Func &&func, Args &&... args) noexcept
 
template<typename Func , typename... Args>
futurize_t< std::invoke_result_t< Func, Args... > > seastar::async (Func &&func, Args &&... args) noexcept
 
template<typename Func >
 seastar::thread::thread (thread_attributes attr, Func func)
 Constructs a thread object that represents a thread of execution. More...
 
template<typename Func >
 seastar::thread::thread (Func func)
 Constructs a thread object that represents a thread of execution. More...
 
future seastar::thread::join ()
 Waits for thread execution to terminate. More...
 
+

Class Documentation

+ +

◆ seastar::thread_attributes

+ +
+
+ + + + +
class seastar::thread_attributes
+
+ + + + + + + + +
Class Members
+optional< scheduling_group > +sched_group +
+size_t +stack_size +
+ +
+
+

Function Documentation

+ +

◆ async() [1/2]

+ +
+
+
+template<typename Func , typename... Args>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
futurize_t< std::invoke_result_t< Func, Args... > > seastar::async (Func && func,
Args &&... args 
)
+
+inlinenoexcept
+
+

Executes a callable in a seastar thread.

+

Runs a block of code in a threaded context, which allows it to block (using future::get()). The result of the callable is returned as a future.

+
Parameters
+ + + +
funca callable to be executed in a thread
argsa parameter pack to be forwarded to func.
+
+
+
Returns
whatever func returns, as a future.
+ +
+
+ +

◆ async() [2/2]

+ +
+
+
+template<typename Func , typename... Args>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
futurize_t< std::invoke_result_t< Func, Args... > > seastar::async (thread_attributes attr,
Func && func,
Args &&... args 
)
+
+inlinenoexcept
+
+

Executes a callable in a seastar thread.

+

Runs a block of code in a threaded context, which allows it to block (using future::get()). The result of the callable is returned as a future.

+
Parameters
+ + + + +
attra thread_attributes instance
funca callable to be executed in a thread
argsa parameter pack to be forwarded to func.
+
+
+
Returns
whatever func returns, as a future.
+

Example:

future<int> compute_sum(int a, int b) {
+
thread_attributes attr = {};
+
attr.sched_group = some_scheduling_group_ptr;
+
return seastar::async(attr, [a, b] {
+
// some blocking code:
+
sleep(1s).get();
+
return a + b;
+
});
+
}
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Class that holds attributes controling the behavior of a thread.
Definition: thread.hh:79
+
futurize_t< std::invoke_result_t< Func, Args... > > async(thread_attributes attr, Func &&func, Args &&... args) noexcept
Definition: thread.hh:245
+
Examples
closeable_test.cc, and sharded_parameter_demo.cc.
+
+ +
+
+ +

◆ join()

+ +
+
+ + + + + +
+ + + + + + + +
future seastar::thread::join ()
+
+inline
+
+ +

Waits for thread execution to terminate.

+

Waits for thread execution to terminate, and marks the thread object as not representing a running thread of execution.

+ +
+
+ +

◆ thread() [1/2]

+ +
+
+
+template<typename Func >
+ + + + + +
+ + + + + + + + +
seastar::thread::thread (Func func)
+
+inline
+
+ +

Constructs a thread object that represents a thread of execution.

+
Parameters
+ + +
funcCallable object to execute in thread. The callable is called immediately.
+
+
+ +
+
+ +

◆ thread() [2/2]

+ +
+
+
+template<typename Func >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
seastar::thread::thread (thread_attributes attr,
Func func 
)
+
+inline
+
+ +

Constructs a thread object that represents a thread of execution.

+
Parameters
+ + + +
attrAttributes describing the new thread.
funcCallable object to execute in thread. The callable is called immediately.
+
+
+ +
+
+
+ + + + diff --git a/master/group__timers.html b/master/group__timers.html new file mode 100644 index 000000000..e5801a898 --- /dev/null +++ b/master/group__timers.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Timers + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
Timers
+
+
+

Detailed Description

+

Seastar provides timers that can be defined to run a callback at a certain time point in the future; timers are provided for lowres_clock (10ms resolution, efficient), for std::chrono::steady_clock (accurate but less efficient) and for manual_clock (for testing purposes).

+

Timers are optimized for cancellation; that is, adding a timer and cancelling it is very efficient. This means that attaching a timer per object for a timeout that rarely happens is reasonable; one does not have to maintain a single timer and a sorted list for this use case.

+

Timer callbacks should be short and execute quickly. If involved processing is required, a timer can launch a continuation.

+ + + + +

+Classes

class  seastar::timer< Clock >
 
+
+ + + + diff --git a/master/group__utilities.html b/master/group__utilities.html new file mode 100644 index 000000000..60374621a --- /dev/null +++ b/master/group__utilities.html @@ -0,0 +1,365 @@ + + + + + + + +Seastar: Utilities + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
Utilities
+
+
+

Detailed Description

+ + + + + + + + + +

+Classes

class  seastar::bool_class< Tag >
 Type-safe boolean. More...
 
class  seastar::reference_wrapper< T >
 
struct  seastar::tuple_map_types< MapClass, Tuple >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+template<typename T >
reference_wrapper< T > seastar::ref (T &object) noexcept
 Wraps reference in a reference_wrapper.
 
+template<typename T >
reference_wrapper< const T > seastar::cref (const T &object) noexcept
 Wraps constant reference in a reference_wrapper.
 
template<template< typename > class FilterClass, typename... Elements>
auto seastar::tuple_filter_by_type (const std::tuple< Elements... > &t)
 
+template<template< typename > class FilterClass, typename... Elements>
auto seastar::tuple_filter_by_type (std::tuple< Elements... > &&t)
 
template<typename Function , typename... Elements>
auto seastar::tuple_map (const std::tuple< Elements... > &t, Function &&f)
 
+template<typename Function , typename... Elements>
auto seastar::tuple_map (std::tuple< Elements... > &&t, Function &&f)
 
template<typename Function , typename... Elements>
void seastar::tuple_for_each (const std::tuple< Elements... > &t, Function &&f)
 
+template<typename Function , typename... Elements>
void seastar::tuple_for_each (std::tuple< Elements... > &t, Function &&f)
 
+template<typename Function , typename... Elements>
void seastar::tuple_for_each (std::tuple< Elements... > &&t, Function &&f)
 
template<typename... Args>
auto seastar::make_visitor (Args &&... args)
 
template<typename Variant , typename... Args>
auto seastar::visit (Variant &&variant, Args &&... args)
 
+template<typename... Args>
internal::castable_variant< Args... > seastar::variant_cast (std::variant< Args... > &&var)
 
+template<typename... Args>
internal::castable_variant< Args... > seastar::variant_cast (const std::variant< Args... > &var)
 
+ + + + + +

+Variables

+static const bool_class seastar::bool_class< Tag >::yes { true }
 
+static const bool_class seastar::bool_class< Tag >::no { false }
 
+

Class Documentation

+ +

◆ seastar::tuple_map_types

+ +
+
+ + + + +
struct seastar::tuple_map_types
+
+ +
+
+

Function Documentation

+ +

◆ make_visitor()

+ +
+
+
+template<typename... Args>
+ + + + + + + + +
auto seastar::make_visitor (Args &&... args)
+
+

Creates a visitor from function objects.

+

Returns a visitor object comprised of the provided function objects. Can be used with std::variant or any other custom variant implementation.

+
Parameters
+ + +
argsfunction objects each accepting one or some types stored in the variant as input
+
+
+ +
+
+ +

◆ tuple_filter_by_type()

+ +
+
+
+template<template< typename > class FilterClass, typename... Elements>
+ + + + + + + + +
auto seastar::tuple_filter_by_type (const std::tuple< Elements... > & t)
+
+

Filters elements in tuple by their type

+

Returns a tuple containing only those elements which type T caused expression FilterClass<T>::value to be true.

+
Template Parameters
+ + +
FilterClassclass template having an element value set to true for elements that should be present in the result
+
+
+
Parameters
+ + +
ttuple to filter
+
+
+
Returns
a tuple contaning elements which type passed the test
+ +
+
+ +

◆ tuple_for_each()

+ +
+
+
+template<typename Function , typename... Elements>
+ + + + + + + + + + + + + + + + + + +
void seastar::tuple_for_each (const std::tuple< Elements... > & t,
Function && f 
)
+
+

Iterate over all elements in tuple

+

Iterates over given tuple and calls the specified function for each of it elements.

+
Parameters
+ + + +
ta tuple to iterate over
ffunction to call for each tuple element
+
+
+ +
+
+ +

◆ tuple_map()

+ +
+
+
+template<typename Function , typename... Elements>
+ + + + + + + + + + + + + + + + + + +
auto seastar::tuple_map (const std::tuple< Elements... > & t,
Function && f 
)
+
+

Applies function to all elements in tuple

+

Applies given function to all elements in the tuple and returns a tuple of results.

+
Parameters
+ + + +
toriginal tuple
ffunction to apply
+
+
+
Returns
tuple of results returned by f for each element in t
+ +
+
+ +

◆ visit()

+ +
+
+
+template<typename Variant , typename... Args>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
auto seastar::visit (Variant && variant,
Args &&... args 
)
+
+inline
+
+

Applies a static visitor comprised of supplied lambdas to a variant. Note that the lambdas should cover all the types that the variant can possibly hold.

+

Returns the common type of return types of all lambdas.

+
Template Parameters
+ + + +
Variantthe type of a variant
Argstypes of lambda objects
+
+
+
Parameters
+ + + +
variantthe variant object
argslambda objects each accepting one or some types stored in the variant as input
+
+
+
Returns
+ +
+
+
+ + + + diff --git a/master/group__websocket.html b/master/group__websocket.html new file mode 100644 index 000000000..98526548b --- /dev/null +++ b/master/group__websocket.html @@ -0,0 +1,406 @@ + + + + + + + +Seastar: WebSocket + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
WebSocket
+
+
+

Detailed Description

+ + + + + + + + + + + + + + + +

+Classes

class  seastar::experimental::websocket::exception
 an error in handling a WebSocket connection More...
 
struct  seastar::experimental::websocket::frame_header
 
class  seastar::experimental::websocket::websocket_parser
 
class  seastar::experimental::websocket::connection
 a WebSocket connection More...
 
class  seastar::experimental::websocket::server
 a WebSocket server More...
 
+ + + + +

+Enumerations

enum  seastar::experimental::websocket::opcodes {
+  CONTINUATION = 0x0 +, TEXT = 0x1 +, BINARY = 0x2 +, CLOSE = 0x8 +,
+  PING = 0x9 +, PONG = 0xA +, INVALID = 0xFF +
+ }
 Possible type of a websocket frame.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

seastar::experimental::websocket::exception::exception (std::string_view msg)
 
+virtual const char * seastar::experimental::websocket::exception::what () const noexcept
 
seastar::experimental::websocket::frame_header::frame_header (const char *input)
 
+uint64_t seastar::experimental::websocket::frame_header::get_rest_of_header_length ()
 
+uint8_t seastar::experimental::websocket::frame_header::get_fin ()
 
+uint8_t seastar::experimental::websocket::frame_header::get_rsv1 ()
 
+uint8_t seastar::experimental::websocket::frame_header::get_rsv2 ()
 
+uint8_t seastar::experimental::websocket::frame_header::get_rsv3 ()
 
+uint8_t seastar::experimental::websocket::frame_header::get_opcode ()
 
+uint8_t seastar::experimental::websocket::frame_header::get_masked ()
 
+uint8_t seastar::experimental::websocket::frame_header::get_length ()
 
+bool seastar::experimental::websocket::frame_header::is_opcode_known ()
 
+future< consumption_result_tseastar::experimental::websocket::websocket_parser::operator() (temporary_buffer< char > data)
 
+bool seastar::experimental::websocket::websocket_parser::is_valid ()
 
+bool seastar::experimental::websocket::websocket_parser::eof ()
 
+opcodes seastar::experimental::websocket::websocket_parser::opcode () const
 
+buff_t seastar::experimental::websocket::websocket_parser::result ()
 
seastar::experimental::websocket::connection::connection_source_impl::connection_source_impl (queue< buff_t > *data)
 
+virtual future< buff_tseastar::experimental::websocket::connection::connection_source_impl::get () override
 
+virtual future seastar::experimental::websocket::connection::connection_source_impl::close () override
 
seastar::experimental::websocket::connection::connection_sink_impl::connection_sink_impl (queue< buff_t > *data)
 
+virtual future seastar::experimental::websocket::connection::connection_sink_impl::put (net::packet d) override
 
+size_t seastar::experimental::websocket::connection::connection_sink_impl::buffer_size () const noexcept override
 
+virtual future seastar::experimental::websocket::connection::connection_sink_impl::close () override
 
 seastar::experimental::websocket::connection::connection (server &server, connected_socket &&fd)
 
+future seastar::experimental::websocket::connection::process ()
 serve WebSocket protocol on a connection
 
+void seastar::experimental::websocket::connection::shutdown_input ()
 close the socket
 
+future seastar::experimental::websocket::connection::close (bool send_close=true)
 
+future seastar::experimental::websocket::connection::read_loop ()
 
+future seastar::experimental::websocket::connection::read_one ()
 
+future seastar::experimental::websocket::connection::read_http_upgrade_request ()
 
+future seastar::experimental::websocket::connection::response_loop ()
 
+void seastar::experimental::websocket::connection::on_new_connection ()
 
+future seastar::experimental::websocket::connection::send_data (opcodes opcode, temporary_buffer< char > &&buff)
 Packs buff in websocket frame and sends it to the client.
 
void seastar::experimental::websocket::server::listen (socket_address addr)
 listen for a WebSocket connection on given address More...
 
void seastar::experimental::websocket::server::listen (socket_address addr, listen_options lo)
 listen for a WebSocket connection on given address with custom options More...
 
future seastar::experimental::websocket::server::stop ()
 
+bool seastar::experimental::websocket::server::is_handler_registered (std::string const &name)
 
+void seastar::experimental::websocket::server::register_handler (std::string &&name, handler_t handler)
 
+void seastar::experimental::websocket::server::accept (server_socket &listener)
 
+future< stop_iterationseastar::experimental::websocket::server::accept_one (server_socket &listener)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Variables

+static constexpr uint8_t seastar::experimental::websocket::frame_header::FIN = 7
 
+static constexpr uint8_t seastar::experimental::websocket::frame_header::RSV1 = 6
 
+static constexpr uint8_t seastar::experimental::websocket::frame_header::RSV2 = 5
 
+static constexpr uint8_t seastar::experimental::websocket::frame_header::RSV3 = 4
 
+static constexpr uint8_t seastar::experimental::websocket::frame_header::MASKED = 7
 
+uint8_t seastar::experimental::websocket::frame_header::fin: 1
 
+uint8_t seastar::experimental::websocket::frame_header::rsv1: 1
 
+uint8_t seastar::experimental::websocket::frame_header::rsv2: 1
 
+uint8_t seastar::experimental::websocket::frame_header::rsv3: 1
 
+uint8_t seastar::experimental::websocket::frame_header::opcode: 4
 
+uint8_t seastar::experimental::websocket::frame_header::masked: 1
 
+uint8_t seastar::experimental::websocket::frame_header::length: 7
 
+

Function Documentation

+ +

◆ connection()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
seastar::experimental::websocket::connection::connection (serverserver,
connected_socket && fd 
)
+
+inline
+
+
Parameters
+ + + +
serverowning server
fdestablished socket used for communication
+
+
+ +
+
+ +

◆ listen() [1/2]

+ +
+
+ + + + + + + + +
void seastar::experimental::websocket::server::listen (socket_address addr)
+
+ +

listen for a WebSocket connection on given address

+
Parameters
+ + +
addraddress to listen on
+
+
+ +
+
+ +

◆ listen() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
void seastar::experimental::websocket::server::listen (socket_address addr,
listen_options lo 
)
+
+ +

listen for a WebSocket connection on given address with custom options

+
Parameters
+ + + +
addraddress to listen on
locustom listen options (listen_options)
+
+
+ +
+
+ +

◆ stop()

+ +
+
+ + + + + + + +
future seastar::experimental::websocket::server::stop ()
+
+

Stops the server and shuts down all active connections

+ +
+
+
+ + + + diff --git a/master/handlers_8hh_source.html b/master/handlers_8hh_source.html new file mode 100644 index 000000000..e48c7239f --- /dev/null +++ b/master/handlers_8hh_source.html @@ -0,0 +1,152 @@ + + + + + + + +Seastar: seastar/http/handlers.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
handlers.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2015 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/http/request.hh>
+
25#include <seastar/http/common.hh>
+
26#include <seastar/http/exception.hh>
+
27#include <seastar/http/reply.hh>
+
28
+
29
+
30namespace seastar {
+
31
+
32namespace httpd {
+
33
+
34typedef const http::request& const_req;
+
35
+ +
43 std::vector<sstring> _mandatory_param;
+
44protected:
+
45 handler_base() = default;
+
46 handler_base(const handler_base&) = default;
+
47public:
+
48 virtual ~handler_base() = default;
+
56 virtual future<std::unique_ptr<http::reply> > handle(const sstring& path,
+
57 std::unique_ptr<http::request> req, std::unique_ptr<http::reply> rep) = 0;
+
58
+
59
+
65 handler_base& mandatory(const sstring& param) {
+
66 _mandatory_param.push_back(param);
+
67 return *this;
+
68 }
+
69
+
75 void verify_mandatory_params(const http::request& req) const {
+
76 for (auto& param : _mandatory_param) {
+
77 if (req.get_query_param(param) == "") {
+
78 throw missing_param_exception(param);
+
79 }
+
80 }
+
81 }
+
82};
+
83
+
84}
+
85
+
86}
+
87
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Definition: handlers.hh:42
+
void verify_mandatory_params(const http::request &req) const
Definition: handlers.hh:75
+
handler_base & mandatory(const sstring &param)
Definition: handlers.hh:65
+
virtual future< std::unique_ptr< http::reply > > handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)=0
+
Definition: exception.hh:102
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: request.hh:51
+
sstring get_query_param(const sstring &key) const
Definition: request.hh:114
+
+ + + + diff --git a/master/hierarchy.html b/master/hierarchy.html new file mode 100644 index 000000000..f2369b9d7 --- /dev/null +++ b/master/hierarchy.html @@ -0,0 +1,890 @@ + + + + + + + +Seastar: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Cseastar::smp_message_queue::tx_side::aa
 Cseastar::abort_on_expiry< Clock >
 Cseastar::abort_source
 Cseastar::tls::abstract_credentials
 Cseastar::accept_resultThe result of an server_socket::accept() call
 Cseastar::adder< Result, Addend >
 Cseastar::coroutine::all< Futures >
 Cseastar::memory::alloc_failure_injector
 Cseastar::memory::allocation_siteDescribes an allocation location in the code
 Cseastar::future_state_base::any
 Cseastar::httpd::api_docs_20An api doc that support swagger version 2.0
 Cseastar::httpd::api_registry_builder_base
 Cseastar::metrics::internal::approximate_exponential_histogram< Min, Max, Precision >
 Cseastar::metrics::internal::approximate_exponential_histogram< 512, 33554432, 4 >
 Cseastar::function_traits< Ret(Args...)>::arg< N >
 Cseastar::net::arp
 Cseastar::net::arp_for_protocol
 Cseastar::array_map< Value, Max >
 Cseastar::array_map< seastar::net::ip_protocol *, 256 >
 Cseastar::internal::as_future_awaiter< false, void >
 Cseastar::internal::as_future_awaiter< true, void >
 Cseastar::posix_thread::attr
 Cseastar::basic_sstring< char_type, Size, max_size, NulTerminate >
 Cseastar::bool_class< Tag >Type-safe boolean
 Cseastar::bool_class< class skip_when_empty_tag >
 Cseastar::internal::buffer_allocator
 Cseastar::rpc::cancellable
 Cseastar::program_options::selection_value< T >::candidate
 Cseastar::circular_buffer_fixed_capacity< T, Capacity >::cbiterator< ValueType >
 Cseastar::checked_ptr< Ptr, NullDerefAction >Seastar::checked_ptr class is a wrapper class that may be used with any pointer type (smart like std::unique_ptr or raw pointers like int*)
 Cseastar::net::checksummer
 Cseastar::chunked_fifo< T, items_per_chunk >
 Cseastar::chunked_fifo< entry >
 Cseastar::chunked_fifo< waiter >
 Cseastar::chunked_fifo< work_item, flush_threshold >
 Cseastar::circular_buffer< T, Alloc >
 Cseastar::circular_buffer< double >
 Cseastar::circular_buffer< seastar::foreign_ptr< std::unique_ptr< seastar::rpc::rcv_buf > > >
 Cseastar::circular_buffer< seastar::net::ipv4_traits::l4packet >
 Cseastar::circular_buffer< seastar::net::l3_protocol::l3packet >
 Cseastar::circular_buffer< seastar::net::packet >
 Cseastar::circular_buffer< seastar::task * >
 Cseastar::circular_buffer< std::pair< seastar::lw_shared_ptr< tcb >, seastar::net::ethernet_address > >
 Cseastar::circular_buffer< typename InetTraits::l4packet >
 Cseastar::circular_buffer_fixed_capacity< T, Capacity >
 Cseastar::http::experimental::clientClass client wraps communications using HTTP protocol
 Cseastar::rpc::client_function_type< Ret, In >
 Cseastar::rpc::client_info
 Cseastar::rpc::client_options
 Cseastar::http::internal::client_ref
 Cseastar::rpc::compressor
 Cseastar::condition_variableConditional variable
 Cseastar::fair_group::config
 Cseastar::fair_queue::configFair Queue configuration structure
 Cseastar::io_queue::config
 Cseastar::metrics::impl::config
 Cseastar::prometheus::config
 Cseastar::resource::configuration
 Cseastar::connected_socket
 Cseastar::connected_socket_input_stream_config
 Cseastar::net::tcp< InetTraits >::connection
 Cseastar::rpc::connection
 Cseastar::http::experimental::connection_factoryFactory that provides transport for client
 Cseastar::rpc::connection_id
 Cseastar::net::conntrack
 Cseastar::consumption_result< CharType >
 Ccontinuation_base
 Cseastar::continue_consuming
 Cseastar::internal::coroutine_traits_base< T >
 Cseastar::metrics::impl::counter_type_traits< T >
 Cseastar::resource::cpu
 Cseastar::future_state_base::current_exception_future_marker
 Cseastar::data_sink
 Cseastar::data_sink_impl
 Cseastar::data_source
 Cseastar::data_source_impl
 Cseastar::scollectd::data_type_for< T, En >
 Cseastar::scollectd::data_type_for< std::invoke_result_t< T > >
 Cseastar::net::datagram
 Cseastar::net::datagram_channel
 Cseastar::net::datagram_impl
 Cseastar::default_null_deref_actionDefault not engaged seastar::checked_ptr dereferencing action (functor)
 Cseastar::default_timeout_exception_factory
 Cseastar::deferred_action< Func >
 Cseastar::deferred_close< Object >
 Cseastar::rpc::deferred_snd_buf
 Cseastar::deferred_stop< Object >
 Cseastar::deleter
 Cseastar::metrics::descriptionHuman-readable description of a metric/group
 Cseastar::net::device
 Cseastar::net::device_config
 Cseastar::tls::dh_params
 Cseastar::net::dhcp
 Cseastar::directory_entryA directory entry being listed
 Cseastar::memory::disable_failure_guard
 Csampler::disable_sampling_temporarilyRAII class to temporarily pause sampling
 Cseastar::lw_shared_ptr< T >::disposer
 Cseastar::net::dns_resolver
 Cseastar::rpc::do_want_client_info
 Cseastar::rpc::do_want_time_point
 Cseastar::rpc::dont_want_client_info
 Cseastar::rpc::dont_want_time_point
 Cseastar::dummy_expiry< T >
 Cstd::enable_shared_from_this
 Cseastar::enum_hash< T >
 Cseastar::net::tcp_option::eol
 Cseastar::net::eth_hdr
 Cseastar::net::ethernet
 Cseastar::net::ethernet_address
 Cseastar::experimental::fsnotifier::eventA wrapper around inotify_event
 Cseastar::coroutine::exception
 Cstd::exceptionSTL class
 Cseastar::exception_future_marker
 CExceptionFactory
 Cseastar::testing::exchanger_base
 Cseastar::execution_stageBase execution stage class
 Cseastar::expiring_fifo< T, OnExpiry, Clock >
 Cseastar::basic_sstring< char_type, Size, max_size, NulTerminate >::contents::external_type
 Cseastar::rpc::compressor::factory
 Cseastar::fair_groupGroup of queues class
 Cseastar::fair_queueFair queuing class
 Cseastar::fair_queue_entry
 Cseastar::fair_queue_ticketDescribes a request that passes through the fair_queue
 Cstd::false_type
 Cseastar::file
 Cseastar::file_desc
 Cseastar::file_handleA shard-transportable handle to a file
 Cseastar::file_handle_impl
 Cseastar::file_impl
 Cseastar::file_input_stream_history
 Cseastar::file_input_stream_optionsData structure describing options for opening a file input stream
 Cseastar::file_open_options
 Cseastar::file_output_stream_options
 Cseastar::httpd::file_transformer
 Cseastar::future< T >::finally_body< Func, FuncReturnsFuture >
 Cseastar::future< T >::finally_body< Func, false >
 Cseastar::future< T >::finally_body< Func, true >
 Cseastar::follow_symlink_tag
 Cseastar::foreign_ptr< PtrType >
 Cseastar::foreign_ptr< seastar::lw_shared_ptr< load_balancer > >
 Cfmt::formatter
 Cseastar::json::formatter
 Cfmt::formatter< seastar::bool_class< Tag > >
 Cfmt::formatter< seastar::httpd::base_exception >
 Cfmt::formatter< seastar::log_level >
 Cfmt::formatter< seastar::lw_shared_ptr< T > >
 Cfmt::formatter< seastar::rpc::optional< T > >
 Cfmt::formatter< seastar::shared_ptr< T > >
 Cseastar::net::forward_hash
 Cseastar::net::fragment
 Cseastar::fragmented_memory_input_stream< Iterator >
 Cseastar::fragmented_memory_output_stream< Iterator >
 Cseastar::frame
 Cseastar::experimental::websocket::frame_header
 Cseastar::free_deleter
 Cseastar::experimental::fsnotifierFilesystem modification notifier
 Cseastar::function_input_iterator< Function, State >
 Cseastar::function_traits< T >
 Cseastar::function_traits< Ret(Args...)>
 Cseastar::function_traits< std::remove_reference_t< T > >
 Cseastar::internal::future_base
 Cseastar::future_for_get_promise_marker
 Cseastar::future_state_base
 Cseastar::internal::futurize_base< T >
 Cseastar::gate
 Cseastar::coroutine::experimental::generator< T, Container >
 Cseastar::sstring_builder::guard
 Cseastar::net::conntrack::handle
 Cseastar::httpd::handler_base
 Cseastar::httpd::handler_registration
 Cseastar::rpc::protocol_base::handler_with_holder
 Cstd::hash
 Cstd::hash< seastar::basic_sstring< char_type, size_type, max_size, NulTerminate > >
 Cstd::hash< seastar::checked_ptr< T > >Std::hash specialization for seastar::checked_ptr class
 Cstd::hash< seastar::ipv4_addr >
 Cstd::hash< seastar::memory::allocation_site >
 Cstd::hash< seastar::metrics::impl::labels_type >
 Cstd::hash< seastar::metrics::impl::metric_id >
 Cstd::hash< seastar::net::inet_address >
 Cstd::hash< seastar::net::ipv4_address >
 Cstd::hash< seastar::net::ipv6_address >
 Cstd::hash< seastar::rpc::connection_id >
 Cstd::hash< seastar::rpc::streaming_domain_type >
 Cstd::hash< seastar::scheduling_group >
 Cstd::hash< seastar::simple_backtrace >
 Cstd::hash< seastar::socket_address >
 Cstd::hash< seastar::tasktrace >
 Cstd::hash< seastar::transport >
 Cstd::hash< seastar::unix_domain_addr >
 Cstd::hash<::sockaddr_in >
 Cstd::hash<::sockaddr_un >
 Cseastar::rpc::marshall_one< Serializer, Output >::helper< T >
 Cseastar::rpc::unmarshal_one< Serializer, Input >::helper< T >
 Cseastar::rpc::unmarshal_one< Serializer, Input >::helper< optional< T > >
 Cseastar::rpc::marshall_one< Serializer, Output >::helper< sink< T... > >
 Cseastar::rpc::unmarshal_one< Serializer, Input >::helper< sink< T... > >
 Cseastar::rpc::marshall_one< Serializer, Output >::helper< source< T... > >
 Cseastar::rpc::unmarshal_one< Serializer, Input >::helper< source< T... > >
 Cseastar::rpc::marshall_one< Serializer, Output >::helper< std::reference_wrapper< const T > >
 Cseastar::rpc::unmarshal_one< Serializer, Input >::helper< std::reference_wrapper< const T > >
 Cseastar::rpc::marshall_one< Serializer, Output >::helper< tuple< T... > >
 Cseastar::rpc::unmarshal_one< Serializer, Input >::helper< tuple< T... > >
 Cseastar::metrics::histogramHistogram data type
 Cseastar::metrics::histogram_bucketHistogram bucket type
 Cseastar::gate::holder
 Cseastar::net::hostent
 Cseastar::httpd::http_server
 Cseastar::httpd::http_server_control
 Cseastar::httpd::http_server_tester
 Cseastar::httpd::http_stats
 Cseastar::net::hw_config
 Cseastar::net::hw_features
 Cseastar::net::icmp
 Cseastar::net::icmp_hdr
 Cseastar::metrics::impl::impl
 Cseastar::rpc::sink< Out >::impl
 Cseastar::rpc::source< In >::impl
 Cseastar::indirect_equal_to< Pointer, Equal >
 Cseastar::indirect_hash< Pointer, Hash >
 Cseastar::indirect_less< Pointer, Less >
 Cseastar::net::inet_address
 Cseastar::inheriting_execution_stageBase class for execution stages with support for automatic scheduling_group inheritance
 Cseastar::basic_sstring< char_type, Size, max_size, NulTerminate >::initialized_later
 Cseastar::input_stream< CharType >
 Cseastar::input_stream< char >
 Cseastar::alien::instance
 Cstd::integral_constant
 Cseastar::net::interface
 Cseastar::basic_sstring< char_type, Size, max_size, NulTerminate >::contents::internal_type
 Cseastar::io_group
 Cseastar::io_intent
 Cseastar::io_queue
 Cseastar::resource::io_queue_topology
 Cseastar::reactor::io_stats
 Cseastar::net::ip_hdr
 Cseastar::net::ip_packet_filter
 Cseastar::net::ip_protocol
 Cseastar::net::ipv4
 Cseastar::ipv4_addr
 Cseastar::net::ipv4_address
 Cseastar::net::ipv4_config
 Cseastar::net::ipv4_frag_id
 Cseastar::net::ipv4_l4< ProtoNum >
 Cseastar::net::ipv4_l4< ip_protocol_num::icmp >
 Cseastar::net::ipv4_l4< ip_protocol_num::tcp >
 Cseastar::net::ipv4_tag
 Cseastar::net::ipv4_traits
 Cseastar::ipv6_addr
 Cseastar::net::ipv6_address
 Cseastar::scollectd::is_callable< T, En >
 Cseastar::rpc::isolation_configSpecifies resource isolation for a connection
 Cseastar::json::json_base_element
 Cseastar::httpd::json_operation
 Cseastar::json::json_return_type
 Cseastar::json::jsonable
 Cseastar::kernel_completion
 Cseastar::net::l3_protocol
 Cseastar::net::l3_protocol::l3packet
 Cseastar::net::l4connid< InetTraits >
 Cseastar::net::ipv4_traits::l4packet
 Cseastar::metrics::labelClass that creates label instances
 Cseastar::metrics::label_instanceLabel a metrics
 Cseastar::coroutine::lambda< Func >
 Cseastar::lazy_deref_wrapper< T >This struct is a wrapper for lazy dereferencing a pointer
 Cseastar::lazy_eval< Func >This class is a wrapper for a lazy evaluation of a value
 Cseastar::net::dhcp::lease
 Clinux_perf_event
 Cboost::intrusive::list_base_hook
 Clist_base_hook
 Cseastar::listen_options
 Cseastar::net::tcp< InetTraits >::listener
 Cseastar::rpc::logger
 Cseastar::lowres_clockLow-resolution and efficient steady clock
 Cseastar::lowres_system_clockLow-resolution and efficient system clock
 Cseastar::lw_shared_ptr< T >
 Cseastar::lw_shared_ptr< foreign_ptr< shared_ptr< connection > > >
 Cseastar::lw_shared_ptr< load_balancer >
 Cseastar::lw_shared_ptr< seastar::file_input_stream_history >
 Cseastar::lw_shared_ptr< seastar::net::udp_channel_state >
 Cseastar::lw_shared_ptr< shared_state >
 Cseastar::lw_shared_ptr< tcb >
 Cseastar::lw_shared_ptr_counter_base
 Cseastar::lw_shared_ptr_deleter< T >
 Cseastar::shared_ptr< T >::make_helper< esft >
 Cseastar::manual_clock
 Cseastar::rpc::marshall_one< Serializer, Output >
 Cseastar::httpd::match_rule
 Cseastar::httpd::matcher
 Cseastar::coroutine::maybe_yield
 Cseastar::measuring_output_stream
 Cseastar::resource::memory
 Cseastar::memory_input_stream< Iterator >
 Cseastar::memory::memory_layout
 Cseastar::memory_output_stream< Iterator >
 Cseastar::alien::message_queue
 Cseastar::metrics::metric_definition
 Cseastar::metrics::impl::metric_definition_impl
 Cseastar::metrics::impl::metric_family
 Cseastar::metrics::metric_family_configMetric_family_config allow changing metrics family configuration
 Cseastar::metrics::impl::metric_family_infoHolds metadata information of a metric family
 Cseastar::metrics::impl::metric_family_metadataHolds a metric family metadata
 Cseastar::metrics::metric_group_definition
 Cseastar::metrics::metric_groupsHolds the metric definition
 Cseastar::metrics::impl::metric_groups_def
 Cseastar::metrics::impl::metric_id
 Cseastar::metrics::impl::metric_infoHolds metric metadata
 Cseastar::metrics::metric_relabeling_resultResult of metric relabeling
 Cseastar::metrics::impl::metric_type
 Cseastar::metrics::impl::metric_valueA helper class that used to return metrics value
 Cseastar::mmap_deleter
 Cseastar::net::tcp_option::mss
 Cseastar::named_semaphore_exception_factory
 Cseastar::metrics::native_histogram_infoNative histogram specific information
 Cseastar::rpc::negotiation_frame
 Cseastar::future_state_base::nested_exception_marker
 Cseastar::network_interface
 Cseastar::network_stack
 Cseastar::network_stack_entry
 Cseastar::coroutine::experimental::internal::next_awaiter< T, Generator >
 Cseastar::rpc::no_wait_type
 Cseastar::noncopyable_function< Signature >
 Cseastar::noncopyable_function< future< std::unique_ptr< network_stack > >(const program_options::option_group &)>
 Cseastar::noncopyable_function< future<>(T...)>
 Cseastar::noncopyable_function< ReturnType(Args...)>
 Cseastar::noncopyable_function< seastar::future<>()>
 Cseastar::noncopyable_function< seastar::future<>(seastar::output_stream< char > &&)>
 Cseastar::noncopyable_function< void()>
 Cseastar::noncopyable_function< void(const std::optional< std::exception_ptr > &) noexcept >
 Cseastar::internal::noncopyable_function_base
 Cseastar::net::tcp_option::nop
 Cseastar::net::offload_info
 Cseastar::optimized_optional< T >
 Cstd::optional
 Cseastar::net::dns_resolver::options
 Cseastar::program_options::options_descriptor
 Cseastar::program_options::options_mutator
 Cseastar::output_stream< CharType >
 Cseastar::output_stream< char >
 Cseastar::output_stream_options
 Cseastar::net::packet
 Cseastar::net::packet_merger< Offset, Tag >
 Cseastar::net::packet_merger< tcp_seq, tcp_tag >
 Cseastar::net::packet_merger< uint32_t, ipv4_tag >
 Cseastar::httpd::parameters
 Cseastar::httpd::path_description
 Cseastar::httpd::path_description::path_part
 Cseastar::peering_sharded_service< Service >Provide a sharded service with access to its peers
 Cseastar::inheriting_execution_stage::per_scheduling_group_stats
 Cperf_tests::internal::perf_stats
 Cperf_tests::internal::performance_test
 Cseastar::pipe< T >A fixed-size pipe for communicating between two fibers
 Cseastar::pipe_reader< T >Read side of a seastar::pipe
 Cseastar::pipe_writer< T >Write side of a seastar::pipe
 Cseastar::scollectd::plugin_instance_metrics
 Cseastar::pollable_fd
 Cseastar::pollable_fd_state
 Cseastar::pollfn
 Cseastar::posix_thread
 Cseastar::prefetcher< N, RW, LOC >
 Cseastar::prefetcher< 0, RW, LOC >
 Cseastar::experimental::process
 Cseastar::internal::promise_base_with_type< seastar::net::ethernet_address >
 Cseastar::internal::promise_base_with_type< T >
 Cseastar::internal::promise_base_with_type< T... >
 Cseastar::promise_expiry< T >
 Cseastar::rpc::protocol_base
 Cseastar::net::qp
 Cseastar::net::qp_stats
 Cseastar::net::qp_stats.rx
 Cseastar::net::qp_stats.rx.bad
 Cseastar::net::qp_stats.tx
 Cseastar::net::qp_stats_good
 Cseastar::alien::internal::qs_deleter
 Cseastar::queue< T >
 Cseastar::queue< seastar::net::datagram >
 Cseastar::queue< seastar::net::tcp::connection >
 Cseastar::queue< seastar::rpc::rcv_buf >
 Cseastar::queue< seastar::temporary_buffer< char > >
 Cseastar::queue< std::unique_ptr< seastar::http::reply > >
 Cseastar::queue< temporary_buffer< char > >
 Cseastar::ragel_parser_base< ConcreteParser >
 Cseastar::rpc::rcv_buf
 Cseastar::rpc::rcv_reply_base< Payload, T >
 Cseastar::rpc::rcv_reply_base< std::tuple< T... >, T... >
 Cseastar::rpc::rcv_reply_base< T, T >
 Cseastar::rpc::rcv_reply_base< void, void >
 Cseastar::reactor
 Cseastar::readable_eventfd
 Cseastar::ready_future_marker
 Cseastar::metrics::impl::real_counter_type_traits< callable, T >
 Cseastar::metrics::impl::real_counter_type_traits< true, T >
 Cseastar::reference_wrapper< T >
 Cseastar::metrics::impl::registered_metric
 Cseastar::net::ipv4_udp::registration
 Cseastar::scollectd::registration
 Cseastar::metrics::relabel_configRelabel_config allows changing metrics labels dynamically
 Cseastar::metrics::relabel_config_regexWrapper class around regex with the original expr
 Cseastar::tls::reloadable_credentials< Base >
 Cseastar::rpc::remove_optional< T >
 Cseastar::rpc::remove_optional< optional< T > >
 Cseastar::http::reply
 Cseastar::rpc::client::reply_handler< Reply, Func >
 Cseastar::http::request
 Cseastar::io_queue::request_limits
 Cseastar::rpc::resource_limitsResource limits for an RPC server
 Cseastar::resource::resources
 Cseastar::alien::internal::return_type_of< Func, bool >
 Cseastar::alien::internal::return_type_of< Func, false >
 Cseastar::httpd::routes
 Cseastar::rpc::rpc_handler
 Cseastar::httpd::rule_registration
 Cperf_tests::internal::performance_test::run_result
 Crwlock_for_read
 Crwlock_for_write
 Cseastar::net::tcp_option::sack
 Csampler
 Cseastar::scattered_message< CharType >
 Cseastar::reactor::sched_statsScheduling statistics
 Cseastar::scheduling_groupIdentifies function calls that are accounted as a group
 Cseastar::scheduling_group_key
 Cseastar::scheduling_group_key_config
 Cseastar::memory::scoped_critical_alloc_section
 Cseastar::memory::scoped_heap_profilingEnable heap profiling for the duration of the scope
 Cseastar::memory::scoped_large_allocation_warning_disableDisable large allocation warnings for a scope
 Cseastar::memory::scoped_large_allocation_warning_thresholdSet a different large allocation warning threshold for a scope
 Cseastar::testing::scoped_no_abort_on_internal_error
 Cseastar::net::sctp_keepalive_params
 Cseastar::testing::seastar_test
 Cseastar::semaphore_default_exception_factory
 Cseastar::semaphore_units< ExceptionFactory, Clock >
 Cseastar::rpc::serialize_helper< IsSmartPtr >
 Cseastar::rpc::serialize_helper< false >
 Cseastar::rpc::serialize_helper< true >
 Cseastar::experimental::websocket::serverWebSocket server
 Cseastar::rpc::server
 Cseastar::rpc::server_options
 Cseastar::server_socketA listening socket, waiting to accept incoming network connections
 Cserver_socket_impl
 Cseastar::session_dnDistinguished name
 Cseastar::bitsets::set_iterator< N >
 Cseastar::bitsets::set_range< N >
 Cseastar::sharded< Service >
 Cseastar::sharded< seastar::httpd::http_server >
 Cseastar::sharded_parameter< Func, Params >Helper to pass a parameter to a sharded<> object that depends on the shard. It is evaluated on the shard, just before being passed to the local instance. It is useful when passing parameters to sharded::start()
 Cseastar::shared_future< T >Like future except the result can be waited for by many fibers
 Cseastar::shared_future< T... >
 Cseastar::shared_mutexShared/exclusive mutual exclusion
 Cseastar::shared_object
 Cseastar::shared_promise< T >Like promise except that its counterpart is shared_future instead of future
 Cseastar::shared_ptr< T >
 Cseastar::shared_ptr< impl >
 Cseastar::shared_ptr< metric_metadata >
 Cseastar::shared_ptr< net::network_interface_impl >
 Cseastar::shared_ptr< seastar::file_impl >
 Cseastar::shared_ptr< seastar::metrics::impl::impl >
 Cseastar::shared_ptr< seastar::rpc::server::connection >
 Cseastar::shared_ptr< seastar::rpc::sink::impl >
 Cseastar::shared_ptr< seastar::rpc::source::impl >
 Cseastar::shared_ptr< seastar::scollectd::value_list >
 Cseastar::shared_ptr< seastar::tls::server_credentials >
 Cseastar::shared_ptr< Service >
 Cseastar::shared_ptr_count_base
 Cseastar::shared_ptr_make_helper< U, esft >
 Cseastar::shared_ptr_make_helper< T, false >
 Cseastar::shared_ptr_make_helper< T, true >
 Cseastar::rpc::signature< Function >
 Cseastar::rpc::signature< Ret(client_info &, In...)>
 Cseastar::rpc::signature< Ret(client_info &, opt_time_point, In...)>
 Cseastar::rpc::signature< Ret(const client_info &, In...)>
 Cseastar::rpc::signature< Ret(const client_info &, opt_time_point, In...)>
 Cseastar::rpc::signature< Ret(In...)>
 Cseastar::rpc::signature< Ret(opt_time_point, In...)>
 Cseastar::simple_backtrace
 Cseastar::simple_memory_input_stream
 Cseastar::simple_memory_output_stream
 Cseastar::rpc::sink< Out >
 Cseastar::skip_bytes
 Cseastar::slab_allocator< Item >
 Cseastar::slab_class< Item >
 Cseastar::slab_item_base
 Cseastar::slab_page_desc
 Cseastar::smp_message_queue
 Cseastar::smp_service_group
 Cseastar::smp_service_group_config
 Cseastar::smp_submit_to_optionsOptions controlling the behaviour of smp::submit_to()
 Cseastar::rpc::snd_buf
 Cseastar::socket
 Cseastar::socket_address
 Cseastar::socket_address.u!< actual size of the relevant 'u' member
 Cseastar::rpc::source< In >
 Cseastar::experimental::spawn_parameters
 Cseastar::pollable_fd_state::speculation
 Cseastar::util::spinlock
 Cseastar::net::srv_record
 Cseastar::sstring_builder
 Cseastar::posix_thread::attr::stack_size
 Cseastar::stat_dataFilesystem object stat information
 Cseastar::memory::statisticsMemory allocation statistics
 Cseastar::execution_stage::stats
 Cseastar::rpc::stats
 Cseastar::stop_consuming< CharType >
 Cseastar::stop_iteration_tag
 Cseastar::stream< T >
 Cseastar::stream< seastar::net::packet >
 Cseastar::stream< seastar::net::packet, seastar::net::ethernet_address >
 Cseastar::stream< T... >
 Cseastar::rpc::streaming_domain_type
 Cseastar::tls::subject_alt_name
 Cseastar::subscription< T >
 Cseastar::task
 Cseastar::task_entry
 Cseastar::tasktrace
 Cseastar::net::tcp< InetTraits >
 Cseastar::net::tcp< seastar::net::ipv4_traits >
 Cseastar::net::tcp_hdr
 Cseastar::net::tcp_keepalive_params
 Cseastar::net::tcp_option
 Cseastar::net::tcp_seq
 Cseastar::net::tcp_tag
 Cseastar::temporary_buffer< CharType >
 Cseastar::temporary_buffer< char >
 Cseastar::reactor::test
 Cperf_tests::internal::test_registrar< Test >
 Cseastar::testing::test_runner
 Cseastar::threadThread - stateful thread of execution
 Cseastar::thread_attributesClass that holds attributes controling the behavior of a thread
 Cseastar::thread_cputime_clock
 Cperf_tests::internal::time_measurement
 Cseastar::timer< Clock >
 Cseastar::timer< Clock >
 Cseastar::timer< lowres_clock >
 Cseastar::timer< seastar::lowres_clock >
 Cseastar::timer< seastar::manual_clock >
 Cseastar::timer_set< Timer, link >
 Cseastar::net::tcp_option::timestamps
 Cseastar::tls::tls_optionsTLS configuration options
 Cseastar::tmp_dir
 Cseastar::tmp_file
 Cseastar::resource::hwloc::internal::topology_holder
 Cseastar::transform_iterator< Iterator, Func >
 Cstd::true_type
 Cstd::tuple
 Ctuple_element
 Cseastar::tuple_map_types< MapClass, Tuple >
 Cseastar::tuple_map_types< internal::wrap_for_es, args_tuple >
 Cseastar::tuple_map_types< MapClass, std::tuple< Elements... > >
 Ctuple_size
 Cseastar::scollectd::type_instance_id
 Cseastar::scollectd::typed< T >
 Cseastar::scollectd::typed_value
 Cseastar::net::udp_channel_state
 Cseastar::net::udp_hdr
 Cseastar::unaligned< T >
 Cseastar::unaligned< uint16_t >
 Cseastar::unaligned< uint32_t >
 Cseastar::unix_domain_addr
 Cseastar::rpc::unmarshal_one< Serializer, Input >
 Cstd::unordered_map< K, T >STL class
 Cseastar::program_options::unusedA tag type used to construct unused option_group and basic_value objects
 Cseastar::httpd::url
 Cseastar::usecfmt_wrapper< TimePoint >
 Cseastar::scollectd::value< T >
 Cseastar::scollectd::value_list
 Cseastar::metrics::impl::values_copy
 Cstd::vector< T >STL class
 Cseastar::experimental::process::wait_exited
 Cseastar::experimental::process::wait_signaled
 Cseastar::rpc::wait_signature< T >
 Cseastar::rpc::wait_signature< future< no_wait_type > >
 Cseastar::rpc::wait_signature< future< T... > >
 Cseastar::rpc::wait_signature< no_wait_type >
 Cseastar::rpc::wait_type
 Cseastar::experimental::fsnotifier::watchSimple RAII wrapper around a fsnotifier::watch_token
 Cseastar::weak_ptr< T >
 Cseastar::weak_ptr< seastar::rpc::client >
 Cseastar::weakly_referencable< T >
 Cseastar::weakly_referencable< client >
 Cseastar::experimental::websocket::websocket_parser
 Cseastar::when_any_result< Sequence >
 Cseastar::net::tcp_option::win_scale
 Cseastar::with_clock< Clock >Changes the clock used by shared_future<> and shared_promise<> when passed as the first template parameter
 Cseastar::scollectd::value< T >::wrap< W >
 Cseastar::writeable_eventfd
 Cseastar::tls::x509_cert
 Cseastar::coroutine::experimental::internal::yield_awaiter< T, Container >
+
+
+ + + + diff --git a/master/http_2exception_8hh_source.html b/master/http_2exception_8hh_source.html new file mode 100644 index 000000000..609f0f903 --- /dev/null +++ b/master/http_2exception_8hh_source.html @@ -0,0 +1,254 @@ + + + + + + + +Seastar: seastar/http/exception.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
exception.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2015 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/util/log.hh>
+
25#include <seastar/util/modules.hh>
+
26#include <seastar/http/reply.hh>
+
27#include <seastar/json/json_elements.hh>
+
28
+
29namespace seastar {
+
30
+
31namespace httpd {
+
32
+
33SEASTAR_MODULE_EXPORT_BEGIN
+
34
+
40class base_exception : public std::exception {
+
41public:
+
42 base_exception(const std::string& msg, http::reply::status_type status)
+
43 : _msg(msg), _status(status) {
+
44 }
+
45
+
46 virtual const char* what() const noexcept {
+
47 return _msg.c_str();
+
48 }
+
49
+
50 http::reply::status_type status() const {
+
51 return _status;
+
52 }
+
53
+
54 virtual const std::string& str() const {
+
55 return _msg;
+
56 }
+
57private:
+
58 std::string _msg;
+ +
60
+
61};
+
62
+ +
67public:
+ +
69 : base_exception("", status), url(url) {
+
70 }
+
71 std::string url;
+
72};
+
73
+ +
78public:
+
79 not_found_exception(const std::string& msg = "Not found")
+ +
81 }
+
82};
+
83
+ +
89public:
+
90 bad_request_exception(const std::string& msg)
+ +
92 }
+
93};
+
94
+ +
96public:
+
97 bad_param_exception(const std::string& msg)
+ +
99 }
+
100};
+
101
+ +
103public:
+
104 missing_param_exception(const std::string& param)
+ +
106 std::string("Missing mandatory parameter '") + param + "'") {
+
107 }
+
108};
+
109
+ +
111public:
+
112 bad_chunk_exception(const std::string& msg)
+ +
114 std::string("Can't read body chunk in a 'chunked' request '") + msg + "'") {
+
115 }
+
116};
+
117
+ +
119public:
+
120 server_error_exception(const std::string& msg)
+ +
122 }
+
123};
+
124
+ +
126public:
+ + +
129 void register_params() {
+
130 add(&_msg, "message");
+
131 add(&_code, "code");
+
132 }
+
133
+
134 json_exception(const base_exception & e) {
+
135 set(e.str(), e.status());
+
136 }
+
137
+
138 json_exception(std::exception_ptr e) {
+
139 std::ostringstream exception_description;
+
140 exception_description << e;
+
141 set(exception_description.str(), http::reply::status_type::internal_server_error);
+
142 }
+
143private:
+
144 void set(const std::string& msg, http::reply::status_type code) {
+
145 register_params();
+
146 _msg = msg;
+
147 _code = (int) code;
+
148 }
+
149};
+
150
+ +
155public:
+ +
157 : base_exception(fmt::to_string(st), st)
+
158 {}
+
159};
+
160
+
161SEASTAR_MODULE_EXPORT_END
+
162}
+
163
+
164}
+
165
+
166SEASTAR_MODULE_EXPORT
+
167template <>
+
168struct fmt::formatter<seastar::httpd::base_exception> {
+
169 constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); }
+
170 auto format(const seastar::httpd::base_exception& e, fmt::format_context& ctx) const {
+
171 return fmt::format_to(ctx.out(), "{} ({})", e.what(), e.status());
+
172 }
+
173};
+
Definition: exception.hh:110
+
Definition: exception.hh:95
+
Definition: exception.hh:88
+
Definition: exception.hh:40
+
Definition: exception.hh:125
+
Definition: exception.hh:102
+
Definition: exception.hh:77
+
Definition: exception.hh:66
+
Definition: exception.hh:118
+
Definition: exception.hh:154
+
Definition: routes.hh:43
+ +
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
status_type
Definition: reply.hh:64
+ +
@ moved_permanently
moved_permanently
+ +
@ internal_server_error
internal_server_error
+
Definition: json_elements.hh:228
+
virtual void add(json_base_element *element, std::string name, bool mandatory=false)
+
+ + + + diff --git a/master/http_2short__streams_8hh_source.html b/master/http_2short__streams_8hh_source.html new file mode 100644 index 000000000..7b57b6639 --- /dev/null +++ b/master/http_2short__streams_8hh_source.html @@ -0,0 +1,133 @@ + + + + + + + +Seastar: seastar/http/short_streams.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
short_streams.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2021 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/future.hh>
+
25#include <seastar/core/iostream.hh>
+
26#include <seastar/core/temporary_buffer.hh>
+
27#include <seastar/util/short_streams.hh>
+
28
+
29namespace seastar {
+
30
+
31namespace httpd {
+
32
+
34[[deprecated("seastar::httpd::read_entire_stream was moved to seastar::util, #include <seastar/util/short_streams.hh> instead")]]
+
35inline
+
36future<std::vector<temporary_buffer<char>>> read_entire_stream(input_stream<char>& inp) {
+
37 return util::read_entire_stream(inp);
+
38}
+
39
+
41[[deprecated("seastar::httpd::read_entire_stream_contiguous was moved to seastar::util, #include <seastar/util/short_streams.hh> instead")]]
+
42inline
+
43future<sstring> read_entire_stream_contiguous(input_stream<char>& inp) {
+
44 return util::read_entire_stream_contiguous(inp);
+
45}
+
46
+
48[[deprecated("seastar::httpd::skip_entire_stream was moved to seastar::util, #include <seastar/util/short_streams.hh> instead")]]
+
49inline
+
50future<> skip_entire_stream(input_stream<char>& inp) {
+
51 return util::skip_entire_stream(inp);
+
52}
+
53
+
54}
+
55
+
56}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/httpd_8hh_source.html b/master/httpd_8hh_source.html new file mode 100644 index 000000000..ca192cb5b --- /dev/null +++ b/master/httpd_8hh_source.html @@ -0,0 +1,339 @@ + + + + + + + +Seastar: seastar/http/httpd.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
httpd.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2015 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <limits>
+
26#include <cctype>
+
27#include <vector>
+
28#include <boost/intrusive/list.hpp>
+
29#endif
+
30#include <seastar/http/request_parser.hh>
+
31#include <seastar/http/request.hh>
+
32#include <seastar/core/seastar.hh>
+
33#include <seastar/core/sstring.hh>
+
34#include <seastar/core/app-template.hh>
+
35#include <seastar/core/circular_buffer.hh>
+
36#include <seastar/core/distributed.hh>
+
37#include <seastar/core/queue.hh>
+
38#include <seastar/core/gate.hh>
+ +
40#include <seastar/util/std-compat.hh>
+
41#include <seastar/util/modules.hh>
+
42#include <seastar/http/routes.hh>
+
43#include <seastar/net/tls.hh>
+
44#include <seastar/core/shared_ptr.hh>
+
45
+
46namespace seastar {
+
47
+
48namespace http {
+
49SEASTAR_MODULE_EXPORT
+
50struct reply;
+
51}
+
52
+
53namespace httpd {
+
54
+
55SEASTAR_MODULE_EXPORT
+
56class http_server;
+
57SEASTAR_MODULE_EXPORT
+
58class http_stats;
+
59
+
60using namespace std::chrono_literals;
+
61
+
62SEASTAR_MODULE_EXPORT_BEGIN
+ +
64 metrics::metric_groups _metric_groups;
+
65public:
+
66 http_stats(http_server& server, const sstring& name);
+
67};
+
68
+
69class connection : public boost::intrusive::list_base_hook<> {
+
70 http_server& _server;
+ +
72 input_stream<char> _read_buf;
+
73 output_stream<char> _write_buf;
+
74 socket_address _client_addr;
+
75 socket_address _server_addr;
+
76 static constexpr size_t limit = 4096;
+ +
78 http_request_parser _parser;
+
79 std::unique_ptr<http::request> _req;
+
80 std::unique_ptr<http::reply> _resp;
+
81 // null element marks eof
+ +
83 bool _done = false;
+
84 const bool _tls;
+
85public:
+
86 [[deprecated("use connection(http_server&, connected_socket&&, bool tls)")]]
+
87 connection(http_server& server, connected_socket&& fd, socket_address, bool tls)
+
88 : connection(server, std::move(fd), tls) {}
+
89 connection(http_server& server, connected_socket&& fd, bool tls)
+
90 : _server(server)
+
91 , _fd(std::move(fd))
+
92 , _read_buf(_fd.input())
+
93 , _write_buf(_fd.output())
+
94 , _client_addr(_fd.remote_address())
+
95 , _server_addr(_fd.local_address())
+
96 , _tls(tls) {
+
97 on_new_connection();
+
98 }
+ +
100 socket_address client_addr, socket_address server_addr, bool tls)
+
101 : _server(server)
+
102 , _fd(std::move(fd))
+
103 , _read_buf(_fd.input())
+
104 , _write_buf(_fd.output())
+
105 , _client_addr(std::move(client_addr))
+
106 , _server_addr(std::move(server_addr))
+
107 , _tls(tls) {
+
108 on_new_connection();
+
109 }
+
110 ~connection();
+
111 void on_new_connection();
+
112
+
113 future<> process();
+
114 void shutdown();
+
115 future<> read();
+
116 future<> read_one();
+
117 future<> respond();
+
118 future<> do_response_loop();
+
119
+
120 void set_headers(http::reply& resp);
+
121
+
122 future<> start_response();
+
123
+
124 future<bool> generate_reply(std::unique_ptr<http::request> req);
+
125 void generate_error_reply_and_close(std::unique_ptr<http::request> req, http::reply::status_type status, const sstring& msg);
+
126
+
127 future<> write_body();
+
128
+
129 output_stream<char>& out();
+
130};
+
131
+ +
133
+ +
135 std::vector<server_socket> _listeners;
+
136 http_stats _stats;
+
137 uint64_t _total_connections = 0;
+
138 uint64_t _current_connections = 0;
+
139 uint64_t _requests_served = 0;
+
140 uint64_t _read_errors = 0;
+
141 uint64_t _respond_errors = 0;
+ +
143 sstring _date = http_date();
+
144 timer<> _date_format_timer { [this] {_date = http_date();} };
+
145 size_t _content_length_limit = std::numeric_limits<size_t>::max();
+
146 bool _content_streaming = false;
+
147 gate _task_gate;
+
148public:
+
149 routes _routes;
+ + +
152 explicit http_server(const sstring& name) : _stats(*this, name) {
+
153 _date_format_timer.arm_periodic(1s);
+
154 }
+
181 [[deprecated("use listen(socket_address addr, server_credentials_ptr credentials)")]]
+ +
183
+
184 size_t get_content_length_limit() const;
+
185
+
186 void set_content_length_limit(size_t limit);
+
187
+
188 bool get_content_streaming() const;
+
189
+
190 void set_content_streaming(bool b);
+
191
+
192 future<> listen(socket_address addr, server_credentials_ptr credentials);
+
193 future<> listen(socket_address addr, listen_options lo, server_credentials_ptr credentials);
+
194 future<> listen(socket_address addr, listen_options lo);
+
195 future<> listen(socket_address addr);
+
196 future<> stop();
+
197
+
198 future<> do_accepts(int which);
+
199 future<> do_accepts(int which, bool with_tls);
+
200
+
201 uint64_t total_connections() const;
+
202 uint64_t current_connections() const;
+
203 uint64_t requests_served() const;
+
204 uint64_t read_errors() const;
+
205 uint64_t reply_errors() const;
+
206 // Write the current date in the specific "preferred format" defined in
+
207 // RFC 7231, Section 7.1.1.1.
+
208 static sstring http_date();
+
209private:
+
210 future<> do_accept_one(int which, bool with_tls);
+
211 boost::intrusive::list<connection> _connections;
+
212 friend class seastar::httpd::connection;
+
213 friend class http_server_tester;
+
214};
+
215
+ +
217public:
+
218 static std::vector<server_socket>& listeners(http_server& server) {
+
219 return server._listeners;
+
220 }
+
221};
+
222
+
223/*
+
224 * A helper class to start, set and listen an http server
+
225 * typical use would be:
+
226 *
+
227 * auto server = new http_server_control();
+
228 * server->start().then([server] {
+
229 * server->set_routes(set_routes);
+
230 * }).then([server, port] {
+
231 * server->listen(port);
+
232 * }).then([port] {
+
233 * std::cout << "Seastar HTTP server listening on port " << port << " ...\n";
+
234 * });
+
235 */
+ +
237 std::unique_ptr<distributed<http_server>> _server_dist;
+
238private:
+
239 static sstring generate_server_name();
+
240public:
+
241 http_server_control() : _server_dist(new distributed<http_server>) {
+
242 }
+
243
+
244 future<> start(const sstring& name = generate_server_name());
+
245 future<> stop() noexcept;
+
246 future<> set_routes(std::function<void(routes& r)> fun);
+
247 future<> listen(socket_address addr);
+ + + +
251 distributed<http_server>& server();
+
252};
+
253SEASTAR_MODULE_EXPORT_END
+
254}
+
255
+
256}
+
Definition: api.hh:183
+
output_stream< char > output(size_t buffer_size=8192)
+
input_stream< char > input(connected_socket_input_stream_config csisc={})
+
socket_address local_address() const noexcept
Local address of the socket.
+
socket_address remote_address() const noexcept
Remote address of the socket.
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Definition: gate.hh:61
+
Definition: httpd.hh:69
+
Definition: httpd.hh:236
+
Definition: httpd.hh:216
+
Definition: httpd.hh:134
+
void set_tls_credentials(server_credentials_ptr credentials)
set tls credentials for the server Setting the tls credentials will set the http-server to work in ht...
+
Definition: httpd.hh:63
+
Definition: routes.hh:81
+ +
holds the metric definition.
Definition: metrics_registration.hh:94
+ +
Definition: queue.hh:44
+
Definition: sharded.hh:177
+ +
Definition: socket_defs.hh:47
+ +
Definition: timer.hh:83
+
void arm_periodic(duration delta) noexcept
Definition: timer.hh:188
+
server_socket listen(socket_address sa)
+
holds the metric_groups definition needed by class that reports metrics
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: reply.hh:60
+
status_type
Definition: reply.hh:64
+
Definition: api.hh:392
+
+ + + + diff --git a/master/idle__cpu__handler_8hh.html b/master/idle__cpu__handler_8hh.html new file mode 100644 index 000000000..5525338f6 --- /dev/null +++ b/master/idle__cpu__handler_8hh.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar/core/idle_cpu_handler.hh File Reference + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
idle_cpu_handler.hh File Reference
+
+
+
#include <seastar/util/noncopyable_function.hh>
+#include <seastar/util/modules.hh>
+
+

Go to the source code of this file.

+ + + + + +

+Namespaces

namespace  seastar
 Seastar API namespace.
 
+ + + + + +

+Typedefs

using seastar::work_waiting_on_reactor = const noncopyable_function< bool()> &
 
using seastar::idle_cpu_handler = noncopyable_function< idle_cpu_handler_result(work_waiting_on_reactor poll)>
 
+ + + +

+Enumerations

enum class  seastar::idle_cpu_handler_result { seastar::no_more_work +, seastar::interrupted_by_higher_priority_task + }
 
+ + + +

+Functions

void seastar::set_idle_cpu_handler (idle_cpu_handler &&handler)
 
+
+ + + + diff --git a/master/idle__cpu__handler_8hh_source.html b/master/idle__cpu__handler_8hh_source.html new file mode 100644 index 000000000..67bca1932 --- /dev/null +++ b/master/idle__cpu__handler_8hh_source.html @@ -0,0 +1,132 @@ + + + + + + + +Seastar: seastar/core/idle_cpu_handler.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
idle_cpu_handler.hh
+
+
+Go to the documentation of this file.
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2020 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <seastar/util/noncopyable_function.hh>
+
26#include <seastar/util/modules.hh>
+
27#endif
+
28
+
30
+
31namespace seastar {
+
32
+
33SEASTAR_MODULE_EXPORT_BEGIN
+
34
+ + + +
40};
+
41
+ +
47
+ +
53
+ +
63
+
64SEASTAR_MODULE_EXPORT_END
+
65
+
66}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
void set_idle_cpu_handler(idle_cpu_handler &&handler)
+
idle_cpu_handler_result
Definition: idle_cpu_handler.hh:37
+
@ interrupted_by_higher_priority_task
A call to the work_waiting_on_reactor parameter to idle_cpu_handler returned true
+
@ no_more_work
The user callback has no more work to perform.
+
Definition: noncopyable_function.hh:37
+
+ + + + diff --git a/master/index.html b/master/index.html new file mode 100644 index 000000000..cd502e540 --- /dev/null +++ b/master/index.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: Seastar + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Seastar
+
+
+

Seastar is a high performance C++ application framework for high concurrency server applications.

+

A good place to start is the Tutorial or Multi-page version.

+

Please see:

+

View the Seastar compatibility statement for information about library evolution.

+
+
+ + + + diff --git a/master/indirect_8hh_source.html b/master/indirect_8hh_source.html new file mode 100644 index 000000000..fa19cd625 --- /dev/null +++ b/master/indirect_8hh_source.html @@ -0,0 +1,157 @@ + + + + + + + +Seastar: seastar/util/indirect.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
indirect.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2016 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <memory>
+
25
+
26namespace seastar {
+
27
+
28// This header defines functors for comparing and hashing pointers by pointed-to values instead of pointer addresses.
+
29//
+
30// Examples:
+
31//
+
32// std::multiset<shared_ptr<sstring>, indirect_less<shared_ptr<sstring>>> _multiset;
+
33//
+
34// std::unordered_map<shared_ptr<sstring>, bool,
+
35// indirect_hash<shared_ptr<sstring>>, indirect_equal_to<shared_ptr<sstring>>> _unordered_map;
+
36//
+
37
+
38template<typename Pointer, typename Equal = std::equal_to<typename std::pointer_traits<Pointer>::element_type>>
+ +
40 Equal _eq;
+
41 indirect_equal_to(Equal eq = Equal()) : _eq(std::move(eq)) {}
+
42 bool operator()(const Pointer& i1, const Pointer& i2) const {
+
43 if (bool(i1) ^ bool(i2)) {
+
44 return false;
+
45 }
+
46 return !i1 || _eq(*i1, *i2);
+
47 }
+
48};
+
49
+
50template<typename Pointer, typename Less = std::less<typename std::pointer_traits<Pointer>::element_type>>
+ +
52 Less _cmp;
+
53 indirect_less(Less cmp = Less()) : _cmp(std::move(cmp)) {}
+
54 bool operator()(const Pointer& i1, const Pointer& i2) const {
+
55 if (i1 && i2) {
+
56 return _cmp(*i1, *i2);
+
57 }
+
58 return !i1 && i2;
+
59 }
+
60};
+
61
+
62template<typename Pointer, typename Hash = std::hash<typename std::pointer_traits<Pointer>::element_type>>
+ +
64 Hash _h;
+
65 indirect_hash(Hash h = Hash()) : _h(std::move(h)) {}
+
66 size_t operator()(const Pointer& p) const {
+
67 if (p) {
+
68 return _h(*p);
+
69 }
+
70 return 0;
+
71 }
+
72};
+
73
+
74}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: indirect.hh:39
+
Definition: indirect.hh:63
+
Definition: indirect.hh:51
+
+ + + + diff --git a/master/inet__address_8hh_source.html b/master/inet__address_8hh_source.html new file mode 100644 index 000000000..bc7548fbb --- /dev/null +++ b/master/inet__address_8hh_source.html @@ -0,0 +1,230 @@ + + + + + + + +Seastar: seastar/net/inet_address.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
inet_address.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2016 ScyllaDB.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <iosfwd>
+
26#include <sys/types.h>
+
27#include <netinet/in.h>
+
28#include <optional>
+
29#include <stdexcept>
+
30#include <vector>
+
31#endif
+
32
+
33#include <seastar/core/future.hh>
+
34#include <seastar/core/sstring.hh>
+
35#include <seastar/util/modules.hh>
+
36
+
37namespace seastar {
+
38namespace net {
+
39
+
40SEASTAR_MODULE_EXPORT_BEGIN
+
41
+
42struct ipv4_address;
+
43struct ipv6_address;
+
44
+
45class unknown_host : public std::invalid_argument {
+
46public:
+
47 using invalid_argument::invalid_argument;
+
48};
+
49
+ +
51public:
+
52 enum class family : sa_family_t {
+
53 INET = AF_INET, INET6 = AF_INET6
+
54 };
+
55private:
+
56 family _in_family;
+
57
+
58 union {
+
59 ::in_addr _in;
+
60 ::in6_addr _in6;
+
61 };
+
62
+
63 uint32_t _scope = invalid_scope;
+
64public:
+
65 static constexpr uint32_t invalid_scope = std::numeric_limits<uint32_t>::max();
+
66
+
67 inet_address() noexcept;
+
68 inet_address(family) noexcept;
+
69 inet_address(::in_addr i) noexcept;
+
70 inet_address(::in6_addr i, uint32_t scope = invalid_scope) noexcept;
+
71 // NOTE: does _not_ resolve the address. Only parses
+
72 // ipv4/ipv6 numerical address
+
73 // throws std::invalid_argument if sstring is invalid
+
74 inet_address(const sstring&);
+
75 inet_address(inet_address&&) noexcept = default;
+
76 inet_address(const inet_address&) noexcept = default;
+
77
+
78 inet_address(const ipv4_address&) noexcept;
+
79 inet_address(const ipv6_address&, uint32_t scope = invalid_scope) noexcept;
+
80
+
81 // throws iff ipv6
+
82 ipv4_address as_ipv4_address() const;
+
83 ipv6_address as_ipv6_address() const noexcept;
+
84
+
85 inet_address& operator=(const inet_address&) noexcept = default;
+
86 bool operator==(const inet_address&) const noexcept;
+
87
+
88 family in_family() const noexcept {
+
89 return _in_family;
+
90 }
+
91
+
92 bool is_ipv6() const noexcept {
+
93 return _in_family == family::INET6;
+
94 }
+
95 bool is_ipv4() const noexcept {
+
96 return _in_family == family::INET;
+
97 }
+
98
+
99 size_t size() const noexcept;
+
100 const void * data() const noexcept;
+
101
+
102 uint32_t scope() const noexcept {
+
103 return _scope;
+
104 }
+
105
+
106 // throws iff ipv6
+
107 operator ::in_addr() const;
+
108 operator ::in6_addr() const noexcept;
+
109
+
110 operator ipv6_address() const noexcept;
+
111
+
112 future<sstring> hostname() const;
+
113 future<std::vector<sstring>> aliases() const;
+
114
+
115 static future<inet_address> find(const sstring&);
+
116 static future<inet_address> find(const sstring&, family);
+
117 static future<std::vector<inet_address>> find_all(const sstring&);
+
118 static future<std::vector<inet_address>> find_all(const sstring&, family);
+
119
+
120 static std::optional<inet_address> parse_numerical(const sstring&);
+
121
+
122 bool is_loopback() const noexcept;
+
123 bool is_addr_any() const noexcept;
+
124};
+
125
+
126std::ostream& operator<<(std::ostream&, const inet_address&);
+
127std::ostream& operator<<(std::ostream&, const inet_address::family&);
+
128
+
129SEASTAR_MODULE_EXPORT_END
+
130}
+
131}
+
132
+
133namespace std {
+
134SEASTAR_MODULE_EXPORT
+
135template<>
+
136struct hash<seastar::net::inet_address> {
+
137 size_t operator()(const seastar::net::inet_address&) const;
+
138};
+
139}
+
140
+
141#if FMT_VERSION >= 90000
+
142template <> struct fmt::formatter<seastar::net::inet_address> : fmt::ostream_formatter {};
+
143template <> struct fmt::formatter<seastar::net::inet_address::family> : fmt::ostream_formatter {};
+
144#endif
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Definition: inet_address.hh:50
+
Definition: inet_address.hh:45
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
STL namespace.
+
Definition: ipv4_address.hh:35
+
Definition: ipv6_address.hh:34
+
+ + + + diff --git a/master/internal_2io__intent_8hh_source.html b/master/internal_2io__intent_8hh_source.html new file mode 100644 index 000000000..45611717c --- /dev/null +++ b/master/internal_2io__intent_8hh_source.html @@ -0,0 +1,214 @@ + + + + + + + +Seastar: seastar/core/internal/io_intent.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
io_intent.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2021 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/util/modules.hh>
+
25#ifndef SEASTAR_MODULE
+
26#include <utility>
+
27#include <boost/intrusive/list.hpp>
+
28#include <boost/intrusive/slist.hpp>
+
29#endif
+
30
+
31namespace bi = boost::intrusive;
+
32
+
33namespace seastar {
+
34
+
35SEASTAR_MODULE_EXPORT
+
36class io_intent;
+
37
+
38namespace internal {
+
39
+
40/*
+
41 * The tracker of cancellable sub-queue of requests.
+
42 *
+
43 * This queue is stuffed with requests that sit in the
+
44 * same IO queue for dispatching (there can be other requests
+
45 * as well) and ties them together for cancellation.
+
46 * This IO queue is the fair_queue's priority_class's one.
+
47 * Beware, if requests from different IO queues happen
+
48 * in the same cancellable queue the whole thing blows up.
+
49 */
+
50class cancellable_queue {
+
51public:
+
52 class link {
+
53 friend class cancellable_queue;
+
54
+
55 union {
+
56 cancellable_queue* _ref;
+
57 bi::slist_member_hook<> _hook;
+
58 };
+
59
+
60 public:
+
61 link() noexcept : _ref(nullptr) {}
+
62 ~link() { assert(_ref == nullptr); }
+
63
+
64 void enqueue(cancellable_queue& cq) noexcept {
+
65 cq.push_back(*this);
+
66 }
+
67
+
68 void maybe_dequeue() noexcept {
+
69 if (_ref != nullptr) {
+
70 _ref->pop_front();
+
71 }
+
72 }
+
73 };
+
74
+
75private:
+
76 static_assert(sizeof(link) == sizeof(void*), "cancellable_queue::link size is too big");
+
77 using list_of_links_t = bi::slist<link,
+
78 bi::constant_time_size<false>,
+
79 bi::cache_last<true>,
+
80 bi::member_hook<link, bi::slist_member_hook<>, &link::_hook>>;
+
81
+
82 link* _first;
+
83 list_of_links_t _rest;
+
84
+
85 void push_back(link& il) noexcept;
+
86 void pop_front() noexcept;
+
87
+
88public:
+
89 cancellable_queue() noexcept : _first(nullptr) {}
+
90 cancellable_queue(const cancellable_queue&) = delete;
+
91 cancellable_queue(cancellable_queue&& o) noexcept;
+
92 cancellable_queue& operator=(cancellable_queue&& o) noexcept;
+
93 ~cancellable_queue();
+
94};
+
95
+
96/*
+
97 * A "safe" reference on a intent. Safe here means that the original
+
98 * intent can be destroyed at any time and this reference will be
+
99 * updated not to point at it any longer.
+
100 * The retrieve() method brings the original intent back or throws
+
101 * and exception if the intent was cancelled.
+
102 */
+
103class intent_reference : public bi::list_base_hook<bi::link_mode<bi::auto_unlink>> {
+
104 friend class seastar::io_intent;
+
105 using container_type = bi::list<intent_reference, bi::constant_time_size<false>>;
+
106 static constexpr uintptr_t _cancelled_intent = 1;
+
107 io_intent* _intent;
+
108
+
109 void on_cancel() noexcept { _intent = reinterpret_cast<io_intent*>(_cancelled_intent); }
+
110 bool is_cancelled() const noexcept { return _intent == reinterpret_cast<io_intent*>(_cancelled_intent); }
+
111
+
112public:
+
113 intent_reference(io_intent* intent) noexcept;
+
114
+
115 intent_reference(intent_reference&& o) noexcept : _intent(std::exchange(o._intent, nullptr)) {
+
116 container_type::node_algorithms::swap_nodes(o.this_ptr(), this_ptr());
+
117 }
+
118
+
119 intent_reference& operator=(intent_reference&& o) noexcept {
+
120 if (this != &o) {
+
121 _intent = std::exchange(o._intent, nullptr);
+
122 unlink();
+
123 container_type::node_algorithms::swap_nodes(o.this_ptr(), this_ptr());
+
124 }
+
125 return *this;
+
126 }
+
127
+
128 io_intent* retrieve() const;
+
129};
+
130
+
131} // namespace internal
+
132
+
133} // namespace seastar
+
Definition: io_intent.hh:44
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/io__desc_8hh_source.html b/master/io__desc_8hh_source.html new file mode 100644 index 000000000..dc0bd589c --- /dev/null +++ b/master/io__desc_8hh_source.html @@ -0,0 +1,118 @@ + + + + + + + +Seastar: seastar/core/internal/io_desc.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
io_desc.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2019 ScyllaDB Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <exception>
+
25
+
26namespace seastar {
+
27
+ +
29protected:
+
30 kernel_completion() = default;
+ +
32 kernel_completion& operator=(kernel_completion&&) = default;
+
33 ~kernel_completion() = default;
+
34public:
+
35 virtual void complete_with(ssize_t res) = 0;
+
36};
+
37}
+
Definition: io_desc.hh:28
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/io__intent_8hh_source.html b/master/io__intent_8hh_source.html new file mode 100644 index 000000000..cf016f84c --- /dev/null +++ b/master/io__intent_8hh_source.html @@ -0,0 +1,179 @@ + + + + + + + +Seastar: seastar/core/io_intent.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
io_intent.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2021 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/internal/io_intent.hh>
+
25#include <seastar/core/io_priority_class.hh>
+
26#include <seastar/util/modules.hh>
+
27#ifndef SEASTAR_MODULE
+
28#include <boost/container/small_vector.hpp>
+
29#endif
+
30
+
31namespace seastar {
+
32
+
43SEASTAR_MODULE_EXPORT
+
44class io_intent {
+
45 struct intents_for_queue {
+
46 dev_t dev;
+
47 io_priority_class_id qid;
+
48 internal::cancellable_queue cq;
+
49
+
50 intents_for_queue(dev_t dev_, io_priority_class_id qid_) noexcept
+
51 : dev(dev_), qid(qid_), cq() {}
+
52
+
53 intents_for_queue(intents_for_queue&&) noexcept = default;
+
54 intents_for_queue& operator=(intents_for_queue&&) noexcept = default;
+
55 };
+
56
+
57 struct references {
+
58 internal::intent_reference::container_type list;
+
59
+
60 references(references&& o) noexcept : list(std::move(o.list)) {}
+
61 references() noexcept : list() {}
+
62 ~references() { clear(); }
+
63
+
64 void clear() {
+
65 list.clear_and_dispose([] (internal::intent_reference* r) { r->on_cancel(); });
+
66 }
+
67
+
68 void bind(internal::intent_reference& iref) noexcept {
+
69 list.push_back(iref);
+
70 }
+
71 };
+
72
+
73 boost::container::small_vector<intents_for_queue, 1> _intents;
+
74 references _refs;
+
75 friend internal::intent_reference::intent_reference(io_intent*) noexcept;
+
76
+
77public:
+
78 io_intent() = default;
+
79 ~io_intent() = default;
+
80
+
81 io_intent(const io_intent&) = delete;
+
82 io_intent& operator=(const io_intent&) = delete;
+
83 io_intent& operator=(io_intent&&) = delete;
+
84 io_intent(io_intent&& o) noexcept : _intents(std::move(o._intents)), _refs(std::move(o._refs)) {
+
85 for (auto&& r : _refs.list) {
+
86 r._intent = this;
+
87 }
+
88 }
+
89
+
93 void cancel() noexcept {
+
94 _refs.clear();
+
95 _intents.clear();
+
96 }
+
97
+
99 internal::cancellable_queue& find_or_create_cancellable_queue(dev_t dev, io_priority_class_id qid) {
+
100 for (auto&& i : _intents) {
+
101 if (i.dev == dev && i.qid == qid) {
+
102 return i.cq;
+
103 }
+
104 }
+
105
+
106 _intents.emplace_back(dev, qid);
+
107 return _intents.back().cq;
+
108 }
+
109};
+
110
+
111} // namespace seastar
+
Definition: io_intent.hh:44
+
void cancel() noexcept
Definition: io_intent.hh:93
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/io__priority__class_8hh_source.html b/master/io__priority__class_8hh_source.html new file mode 100644 index 000000000..511ffd441 --- /dev/null +++ b/master/io__priority__class_8hh_source.html @@ -0,0 +1,188 @@ + + + + + + + +Seastar: seastar/core/io_priority_class.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
io_priority_class.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2021 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <seastar/core/sstring.hh>
+
26#include <seastar/core/future.hh>
+
27#include <seastar/util/modules.hh>
+
28
+
29#if SEASTAR_API_LEVEL < 7
+
30#include <array>
+
31#include <mutex>
+
32#endif
+
33
+
34#endif
+
35
+
36namespace seastar {
+
37
+
38class io_queue;
+
39
+
40SEASTAR_MODULE_EXPORT_BEGIN
+
41
+
42using io_priority_class_id = unsigned;
+
43
+
44#if SEASTAR_API_LEVEL < 7
+
45// We could very well just add the name to the io_priority_class. However, because that
+
46// structure is passed along all the time - and sometimes we can't help but copy it, better keep
+
47// it lean. The name won't really be used for anything other than monitoring.
+
48class io_priority_class {
+
49 io_priority_class_id _id;
+
50
+
51 io_priority_class() = delete;
+
52 explicit io_priority_class(io_priority_class_id id) noexcept
+
53 : _id(id)
+
54 { }
+
55
+
56 bool rename_registered(sstring name);
+
57
+
58public:
+
59 io_priority_class_id id() const noexcept {
+
60 return _id;
+
61 }
+
62
+
63 [[deprecated("Use scheduling_groups and API level >= 7")]]
+
64 static io_priority_class register_one(sstring name, uint32_t shares);
+
65
+
71 future<> update_shares(uint32_t shares) const;
+
72
+
80 future<> update_bandwidth(uint64_t bandwidth) const;
+
81
+
92 future<> rename(sstring new_name) noexcept;
+
93
+
94 unsigned get_shares() const;
+
95 sstring get_name() const;
+
96
+
97private:
+
98 struct class_info {
+
99 unsigned shares = 0;
+
100 sstring name;
+
101 bool registered() const noexcept { return shares != 0; }
+
102 };
+
103
+
104 static constexpr unsigned _max_classes = 2048;
+
105 static std::mutex _register_lock;
+
106 static std::array<class_info, _max_classes> _infos;
+
107
+
108 friend std::tuple<unsigned, sstring> get_class_info(io_priority_class_id pc);
+
109};
+
110
+
111const io_priority_class& default_priority_class();
+
112
+
113#endif
+
114
+
115SEASTAR_MODULE_EXPORT_END
+
116
+
117namespace internal {
+
118#if SEASTAR_API_LEVEL >= 7
+
119struct maybe_priority_class_ref {
+
120};
+
121#else
+
122struct maybe_priority_class_ref {
+
123 const io_priority_class& pc;
+
124 explicit maybe_priority_class_ref(const io_priority_class& p) noexcept : pc(p) {}
+
125 maybe_priority_class_ref() noexcept : pc(default_priority_class()) {}
+
126};
+
127#endif
+
128}
+
129
+
130} // namespace seastar
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/io__queue_8hh_source.html b/master/io__queue_8hh_source.html new file mode 100644 index 000000000..dc6bbfe84 --- /dev/null +++ b/master/io__queue_8hh_source.html @@ -0,0 +1,344 @@ + + + + + + + +Seastar: seastar/core/io_queue.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
io_queue.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2019 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <boost/container/static_vector.hpp>
+
26#include <chrono>
+
27#include <memory>
+
28#include <vector>
+
29#include <sys/uio.h>
+
30#endif
+
31#include <seastar/core/sstring.hh>
+
32#include <seastar/core/fair_queue.hh>
+ +
34#include <seastar/core/future.hh>
+
35#include <seastar/core/internal/io_request.hh>
+
36#include <seastar/core/lowres_clock.hh>
+
37#include <seastar/util/spinlock.hh>
+
38#include <seastar/util/modules.hh>
+
39
+
40struct io_queue_for_tests;
+
41
+
42namespace seastar {
+
43
+
44class io_queue;
+
45namespace internal {
+
46const fair_group& get_fair_group(const io_queue& ioq, unsigned stream);
+
47}
+
48
+
49#if SEASTAR_API_LEVEL < 7
+
50SEASTAR_MODULE_EXPORT
+
51class io_priority_class;
+
52
+
53[[deprecated("Use io_priority_class.rename")]]
+
54future<>
+
55rename_priority_class(io_priority_class pc, sstring new_name);
+
56#endif
+
57
+
58SEASTAR_MODULE_EXPORT
+
59class io_intent;
+
60
+
61namespace internal {
+
62class io_sink;
+
63}
+
64
+
65using shard_id = unsigned;
+
66using stream_id = unsigned;
+
67
+
68class io_desc_read_write;
+
69class queued_io_request;
+
70class io_group;
+
71
+
72using io_group_ptr = std::shared_ptr<io_group>;
+
73using iovec_keeper = std::vector<::iovec>;
+
74
+
75namespace internal {
+
76struct maybe_priority_class_ref;
+
77class priority_class {
+
78 unsigned _id;
+
79public:
+
80#if SEASTAR_API_LEVEL < 7
+
81 explicit priority_class(const io_priority_class& pc) noexcept;
+
82#endif
+
83 explicit priority_class(const scheduling_group& sg) noexcept;
+
84 explicit priority_class(internal::maybe_priority_class_ref pc) noexcept;
+
85 unsigned id() const noexcept { return _id; }
+
86};
+
87}
+
88
+
89class io_queue {
+
90public:
+
91 class priority_class_data;
+
92
+
93private:
+
94 std::vector<std::unique_ptr<priority_class_data>> _priority_classes;
+
95 io_group_ptr _group;
+
96 boost::container::static_vector<fair_queue, 2> _streams;
+
97 internal::io_sink& _sink;
+
98
+
99 friend struct ::io_queue_for_tests;
+
100 friend const fair_group& internal::get_fair_group(const io_queue& ioq, unsigned stream);
+
101
+
102 priority_class_data& find_or_create_class(internal::priority_class pc);
+
103 future<size_t> queue_request(internal::priority_class pc, internal::io_direction_and_length dnl, internal::io_request req, io_intent* intent, iovec_keeper iovs) noexcept;
+
104 future<size_t> queue_one_request(internal::priority_class pc, internal::io_direction_and_length dnl, internal::io_request req, io_intent* intent, iovec_keeper iovs) noexcept;
+
105
+
106 // The fields below are going away, they are just here so we can implement deprecated
+
107 // functions that used to be provided by the fair_queue and are going away (from both
+
108 // the fair_queue and the io_queue). Double-accounting for now will allow for easier
+
109 // decoupling and is temporary
+
110 size_t _queued_requests = 0;
+
111 size_t _requests_executing = 0;
+
112 uint64_t _requests_dispatched = 0;
+
113 uint64_t _requests_completed = 0;
+
114
+
115 // Flow monitor
+
116 uint64_t _prev_dispatched = 0;
+
117 uint64_t _prev_completed = 0;
+
118 double _flow_ratio = 1.0;
+
119 timer<lowres_clock> _flow_ratio_update;
+
120
+
121 void update_flow_ratio() noexcept;
+
122
+
123 metrics::metric_groups _metric_groups;
+
124public:
+
125
+
126 using clock_type = std::chrono::steady_clock;
+
127
+
128 // We want to represent the fact that write requests are (maybe) more expensive
+
129 // than read requests. To avoid dealing with floating point math we will scale one
+
130 // read request to be counted by this amount.
+
131 //
+
132 // A write request that is 30% more expensive than a read will be accounted as
+
133 // (read_request_base_count * 130) / 100.
+
134 // It is also technically possible for reads to be the expensive ones, in which case
+
135 // writes will have an integer value lower than read_request_base_count.
+
136 static constexpr unsigned read_request_base_count = 128;
+
137 static constexpr unsigned block_size_shift = 9;
+
138
+
139 struct config {
+
140 dev_t devid;
+
141 unsigned long req_count_rate = std::numeric_limits<int>::max();
+
142 unsigned long blocks_count_rate = std::numeric_limits<int>::max();
+
143 unsigned disk_req_write_to_read_multiplier = read_request_base_count;
+
144 unsigned disk_blocks_write_to_read_multiplier = read_request_base_count;
+
145 size_t disk_read_saturation_length = std::numeric_limits<size_t>::max();
+
146 size_t disk_write_saturation_length = std::numeric_limits<size_t>::max();
+
147 sstring mountpoint = "undefined";
+
148 bool duplex = false;
+
149 std::chrono::duration<double> rate_limit_duration = std::chrono::milliseconds(1);
+
150 size_t block_count_limit_min = 1;
+
151 unsigned flow_ratio_ticks = 100;
+
152 double flow_ratio_ema_factor = 0.95;
+
153 double flow_ratio_backpressure_threshold = 1.1;
+
154 };
+
155
+
156 io_queue(io_group_ptr group, internal::io_sink& sink);
+
157 ~io_queue();
+
158
+
159 stream_id request_stream(internal::io_direction_and_length dnl) const noexcept;
+
160
+
161 future<size_t> submit_io_read(internal::priority_class priority_class,
+
162 size_t len, internal::io_request req, io_intent* intent, iovec_keeper iovs = {}) noexcept;
+
163 future<size_t> submit_io_write(internal::priority_class priority_class,
+
164 size_t len, internal::io_request req, io_intent* intent, iovec_keeper iovs = {}) noexcept;
+
165
+
166 void submit_request(io_desc_read_write* desc, internal::io_request req) noexcept;
+
167 void cancel_request(queued_io_request& req) noexcept;
+
168 void complete_cancelled_request(queued_io_request& req) noexcept;
+
169 void complete_request(io_desc_read_write& desc) noexcept;
+
170
+
171 [[deprecated("I/O queue users should not track individual requests, but resources (weight, size) passing through the queue")]]
+
172 size_t queued_requests() const {
+
173 return _queued_requests;
+
174 }
+
175
+
176 // How many requests are sent to disk but not yet returned.
+
177 [[deprecated("I/O queue users should not track individual requests, but resources (weight, size) passing through the queue")]]
+
178 size_t requests_currently_executing() const {
+
179 return _requests_executing;
+
180 }
+
181
+
182 // Dispatch requests that are pending in the I/O queue
+
183 void poll_io_queue();
+
184
+
185 clock_type::time_point next_pending_aio() const noexcept;
+
186 fair_queue_entry::capacity_t request_capacity(internal::io_direction_and_length dnl) const noexcept;
+
187
+
188 sstring mountpoint() const;
+
189 dev_t dev_id() const noexcept;
+
190
+
191 void update_shares_for_class(internal::priority_class pc, size_t new_shares);
+
192 future<> update_bandwidth_for_class(internal::priority_class pc, uint64_t new_bandwidth);
+
193 void rename_priority_class(internal::priority_class pc, sstring new_name);
+
194 void throttle_priority_class(const priority_class_data& pc) noexcept;
+
195 void unthrottle_priority_class(const priority_class_data& pc) noexcept;
+
196
+ +
198 size_t max_read;
+
199 size_t max_write;
+
200 };
+
201
+
202 request_limits get_request_limits() const noexcept;
+
203 const config& get_config() const noexcept;
+
204
+
205private:
+
206 static fair_queue::config make_fair_queue_config(const config& cfg, sstring label);
+
207 void register_stats(sstring name, priority_class_data& pc);
+
208};
+
209
+
210class io_group {
+
211public:
+
212 explicit io_group(io_queue::config io_cfg, unsigned nr_queues);
+
213 ~io_group();
+
214 struct priority_class_data;
+
215
+
216 std::chrono::duration<double> io_latency_goal() const noexcept;
+
217
+
218private:
+
219 friend class io_queue;
+
220 friend struct ::io_queue_for_tests;
+
221 friend const fair_group& internal::get_fair_group(const io_queue& ioq, unsigned stream);
+
222
+
223 const io_queue::config _config;
+
224 size_t _max_request_length[2];
+
225 boost::container::static_vector<fair_group, 2> _fgs;
+
226 std::vector<std::unique_ptr<priority_class_data>> _priority_classes;
+
227 util::spinlock _lock;
+
228 const shard_id _allocated_on;
+
229
+
230 static fair_group::config make_fair_group_config(const io_queue::config& qcfg) noexcept;
+
231 priority_class_data& find_or_create_class(internal::priority_class pc);
+
232};
+
233
+
234inline const io_queue::config& io_queue::get_config() const noexcept {
+
235 return _group->_config;
+
236}
+
237
+
238inline sstring io_queue::mountpoint() const {
+
239 return get_config().mountpoint;
+
240}
+
241
+
242inline dev_t io_queue::dev_id() const noexcept {
+
243 return get_config().devid;
+
244}
+
245
+
246namespace internal {
+
247double request_tokens(io_direction_and_length dnl, const io_queue::config& cfg) noexcept;
+
248}
+
249
+
250}
+
Group of queues class.
Definition: fair_queue.hh:138
+
Definition: fair_queue.hh:236
+
Fair queuing class.
Definition: fair_queue.hh:289
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Definition: io_queue.hh:210
+
Definition: io_intent.hh:44
+
Definition: io_queue.hh:89
+
Definition: io_queue.hh:139
+
Definition: io_queue.hh:197
+
holds the metric definition.
Definition: metrics_registration.hh:94
+
Definition: stream.hh:60
+ +
Definition: spinlock.hh:88
+
holds the metric_groups definition needed by class that reports metrics
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/io__request_8hh_source.html b/master/io__request_8hh_source.html new file mode 100644 index 000000000..0294eaa6d --- /dev/null +++ b/master/io__request_8hh_source.html @@ -0,0 +1,502 @@ + + + + + + + +Seastar: seastar/core/internal/io_request.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
io_request.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2020 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/sstring.hh>
+
25#include <seastar/core/on_internal_error.hh>
+
26#include <cassert>
+
27#include <cstdint>
+
28#include <vector>
+
29#include <sys/types.h>
+
30#include <sys/socket.h>
+
31
+
32namespace seastar {
+
33extern logger io_log;
+
34
+
35namespace internal {
+
36
+
37class io_request {
+
38public:
+
39 enum class operation { read, readv, write, writev, fdatasync, recv, recvmsg, send, sendmsg, accept, connect, poll_add, poll_remove, cancel };
+
40private:
+
41 operation _op;
+
42 // the upper layers give us void pointers, but storing void pointers here is just
+
43 // dangerous. The constructors seem to be happy to convert other pointers to void*,
+
44 // even if they are marked as explicit, and then you end up losing approximately 3 hours
+
45 // and 15 minutes (hypothetically, of course), trying to chase the weirdest bug.
+
46 // Let's store a char* for safety, and cast it back to void* in the accessor.
+
47 struct read_op {
+
48 int fd;
+
49 uint64_t pos;
+
50 char* addr;
+
51 size_t size;
+
52 bool nowait_works;
+
53 };
+
54 struct readv_op {
+
55 int fd;
+
56 uint64_t pos;
+
57 ::iovec* iovec;
+
58 size_t iov_len;
+
59 bool nowait_works;
+
60 };
+
61 struct recv_op {
+
62 int fd;
+
63 char* addr;
+
64 size_t size;
+
65 int flags;
+
66 };
+
67 struct recvmsg_op {
+
68 int fd;
+
69 ::msghdr* msghdr;
+
70 int flags;
+
71 };
+
72 using send_op = recv_op;
+
73 using sendmsg_op = recvmsg_op;
+
74 using write_op = read_op;
+
75 using writev_op = readv_op;
+
76 struct fdatasync_op {
+
77 int fd;
+
78 };
+
79 struct accept_op {
+
80 int fd;
+
81 ::sockaddr* sockaddr;
+
82 socklen_t* socklen_ptr;
+
83 int flags;
+
84 };
+
85 struct connect_op {
+
86 int fd;
+
87 ::sockaddr* sockaddr;
+
88 socklen_t socklen;
+
89 };
+
90 struct poll_add_op {
+
91 int fd;
+
92 int events;
+
93 };
+
94 struct poll_remove_op {
+
95 int fd;
+
96 char* addr;
+
97 };
+
98 struct cancel_op {
+
99 int fd;
+
100 char* addr;
+
101 };
+
102 union {
+
103 read_op _read;
+
104 readv_op _readv;
+
105 recv_op _recv;
+
106 recvmsg_op _recvmsg;
+
107 send_op _send;
+
108 sendmsg_op _sendmsg;
+
109 write_op _write;
+
110 writev_op _writev;
+
111 fdatasync_op _fdatasync;
+
112 accept_op _accept;
+
113 connect_op _connect;
+
114 poll_add_op _poll_add;
+
115 poll_remove_op _poll_remove;
+
116 cancel_op _cancel;
+
117 };
+
118
+
119public:
+
120 static io_request make_read(int fd, uint64_t pos, void* address, size_t size, bool nowait_works) {
+
121 io_request req;
+
122 req._op = operation::read;
+
123 req._read = {
+
124 .fd = fd,
+
125 .pos = pos,
+
126 .addr = reinterpret_cast<char*>(address),
+
127 .size = size,
+
128 .nowait_works = nowait_works,
+
129 };
+
130 return req;
+
131 }
+
132
+
133 static io_request make_readv(int fd, uint64_t pos, std::vector<iovec>& iov, bool nowait_works) {
+
134 io_request req;
+
135 req._op = operation::readv;
+
136 req._readv = {
+
137 .fd = fd,
+
138 .pos = pos,
+
139 .iovec = iov.data(),
+
140 .iov_len = iov.size(),
+
141 .nowait_works = nowait_works,
+
142 };
+
143 return req;
+
144 }
+
145
+
146 static io_request make_recv(int fd, void* address, size_t size, int flags) {
+
147 io_request req;
+
148 req._op = operation::recv;
+
149 req._recv = {
+
150 .fd = fd,
+
151 .addr = reinterpret_cast<char*>(address),
+
152 .size = size,
+
153 .flags = flags,
+
154 };
+
155 return req;
+
156 }
+
157
+
158 static io_request make_recvmsg(int fd, ::msghdr* msg, int flags) {
+
159 io_request req;
+
160 req._op = operation::recvmsg;
+
161 req._recvmsg = {
+
162 .fd = fd,
+
163 .msghdr = msg,
+
164 .flags = flags,
+
165 };
+
166 return req;
+
167 }
+
168
+
169 static io_request make_send(int fd, const void* address, size_t size, int flags) {
+
170 io_request req;
+
171 req._op = operation::send;
+
172 req._send = {
+
173 .fd = fd,
+
174 .addr = const_cast<char*>(reinterpret_cast<const char*>(address)),
+
175 .size = size,
+
176 .flags = flags,
+
177 };
+
178 return req;
+
179 }
+
180
+
181 static io_request make_sendmsg(int fd, ::msghdr* msg, int flags) {
+
182 io_request req;
+
183 req._op = operation::sendmsg;
+
184 req._sendmsg = {
+
185 .fd = fd,
+
186 .msghdr = msg,
+
187 .flags = flags,
+
188 };
+
189 return req;
+
190 }
+
191
+
192 static io_request make_write(int fd, uint64_t pos, const void* address, size_t size, bool nowait_works) {
+
193 io_request req;
+
194 req._op = operation::write;
+
195 req._write = {
+
196 .fd = fd,
+
197 .pos = pos,
+
198 .addr = const_cast<char*>(reinterpret_cast<const char*>(address)),
+
199 .size = size,
+
200 .nowait_works = nowait_works,
+
201 };
+
202 return req;
+
203 }
+
204
+
205 static io_request make_writev(int fd, uint64_t pos, std::vector<iovec>& iov, bool nowait_works) {
+
206 io_request req;
+
207 req._op = operation::writev;
+
208 req._writev = {
+
209 .fd = fd,
+
210 .pos = pos,
+
211 .iovec = iov.data(),
+
212 .iov_len = iov.size(),
+
213 .nowait_works = nowait_works,
+
214 };
+
215 return req;
+
216 }
+
217
+
218 static io_request make_fdatasync(int fd) {
+
219 io_request req;
+
220 req._op = operation::fdatasync;
+
221 req._fdatasync = {
+
222 .fd = fd,
+
223 };
+
224 return req;
+
225 }
+
226
+
227 static io_request make_accept(int fd, struct sockaddr* addr, socklen_t* addrlen, int flags) {
+
228 io_request req;
+
229 req._op = operation::accept;
+
230 req._accept = {
+
231 .fd = fd,
+
232 .sockaddr = addr,
+
233 .socklen_ptr = addrlen,
+
234 .flags = flags,
+
235 };
+
236 return req;
+
237 }
+
238
+
239 static io_request make_connect(int fd, struct sockaddr* addr, socklen_t addrlen) {
+
240 io_request req;
+
241 req._op = operation::connect;
+
242 req._connect = {
+
243 .fd = fd,
+
244 .sockaddr = addr,
+
245 .socklen = addrlen,
+
246 };
+
247 return req;
+
248 }
+
249
+
250 static io_request make_poll_add(int fd, int events) {
+
251 io_request req;
+
252 req._op = operation::poll_add;
+
253 req._poll_add = {
+
254 .fd = fd,
+
255 .events = events,
+
256 };
+
257 return req;
+
258 }
+
259
+
260 static io_request make_poll_remove(int fd, void *addr) {
+
261 io_request req;
+
262 req._op = operation::poll_remove;
+
263 req._poll_remove = {
+
264 .fd = fd,
+
265 .addr = reinterpret_cast<char*>(addr),
+
266 };
+
267 return req;
+
268 }
+
269
+
270 static io_request make_cancel(int fd, void *addr) {
+
271 io_request req;
+
272 req._op = operation::cancel;
+
273 req._cancel = {
+
274 .fd = fd,
+
275 .addr = reinterpret_cast<char*>(addr),
+
276 };
+
277 return req;
+
278 }
+
279
+
280 bool is_read() const {
+
281 switch (_op) {
+
282 case operation::read:
+
283 case operation::readv:
+
284 case operation::recvmsg:
+
285 case operation::recv:
+
286 return true;
+
287 default:
+
288 return false;
+
289 }
+
290 }
+
291
+
292 bool is_write() const {
+
293 switch (_op) {
+
294 case operation::write:
+
295 case operation::writev:
+
296 case operation::send:
+
297 case operation::sendmsg:
+
298 return true;
+
299 default:
+
300 return false;
+
301 }
+
302 }
+
303
+
304 sstring opname() const;
+
305
+
306 operation opcode() const {
+
307 return _op;
+
308 }
+
309
+
310 template <operation Op>
+
311 auto& as() const {
+
312 if constexpr (Op == operation::read) {
+
313 return _read;
+
314 }
+
315 if constexpr (Op == operation::readv) {
+
316 return _readv;
+
317 }
+
318 if constexpr (Op == operation::recv) {
+
319 return _recv;
+
320 }
+
321 if constexpr (Op == operation::recvmsg) {
+
322 return _recvmsg;
+
323 }
+
324 if constexpr (Op == operation::send) {
+
325 return _send;
+
326 }
+
327 if constexpr (Op == operation::sendmsg) {
+
328 return _sendmsg;
+
329 }
+
330 if constexpr (Op == operation::write) {
+
331 return _write;
+
332 }
+
333 if constexpr (Op == operation::writev) {
+
334 return _writev;
+
335 }
+
336 if constexpr (Op == operation::fdatasync) {
+
337 return _fdatasync;
+
338 }
+
339 if constexpr (Op == operation::accept) {
+
340 return _accept;
+
341 }
+
342 if constexpr (Op == operation::connect) {
+
343 return _connect;
+
344 }
+
345 if constexpr (Op == operation::poll_add) {
+
346 return _poll_add;
+
347 }
+
348 if constexpr (Op == operation::poll_remove) {
+
349 return _poll_remove;
+
350 }
+
351 if constexpr (Op == operation::cancel) {
+
352 return _cancel;
+
353 }
+
354 }
+
355
+
356 struct part;
+
357 std::vector<part> split(size_t max_length);
+
358
+
359private:
+
360 io_request sub_req_buffer(size_t pos, size_t len) const {
+
361 io_request sub_req;
+
362 sub_req._op = _op;
+
363 // read_op and write_op share the same layout, so we don't handle
+
364 // them separately
+
365 auto& op = _read;
+
366 auto& sub_op = sub_req._read;
+
367 sub_op = {
+
368 .fd = op.fd,
+
369 .pos = op.pos + pos,
+
370 .addr = op.addr + pos,
+
371 .size = len,
+
372 .nowait_works = op.nowait_works,
+
373 };
+
374 return sub_req;
+
375 }
+
376 std::vector<part> split_buffer(size_t max_length);
+
377
+
378 io_request sub_req_iovec(size_t pos, std::vector<iovec>& iov) const {
+
379 io_request sub_req;
+
380 sub_req._op = _op;
+
381 // readv_op and writev_op share the same layout, so we don't handle
+
382 // them separately
+
383 auto& op = _readv;
+
384 auto& sub_op = sub_req._readv;
+
385 sub_op = {
+
386 .fd = op.fd,
+
387 .pos = op.pos + pos,
+
388 .iovec = iov.data(),
+
389 .iov_len = iov.size(),
+
390 .nowait_works = op.nowait_works,
+
391 };
+
392 return sub_req;
+
393 }
+
394 std::vector<part> split_iovec(size_t max_length);
+
395};
+
396
+
397struct io_request::part {
+
398 io_request req;
+
399 size_t size;
+
400 std::vector<::iovec> iovecs;
+
401};
+
402
+
403// Helper pair of IO direction and length
+
404struct io_direction_and_length {
+
405 size_t _directed_length; // bit 0 is R/W flag
+
406
+
407public:
+
408 size_t length() const noexcept { return _directed_length >> 1; }
+
409 int rw_idx() const noexcept { return _directed_length & 0x1; }
+
410 static constexpr int read_idx = 1;
+
411 static constexpr int write_idx = 0;
+
412
+
413 io_direction_and_length(int idx, size_t val) noexcept
+
414 : _directed_length((val << 1) | idx)
+
415 {
+
416 assert(idx == read_idx || idx == write_idx);
+
417 }
+
418};
+
419
+
420}
+
421}
+
future< connected_socket > connect(socket_address sa)
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/io__sink_8hh_source.html b/master/io__sink_8hh_source.html new file mode 100644 index 000000000..af5b65f7a --- /dev/null +++ b/master/io__sink_8hh_source.html @@ -0,0 +1,160 @@ + + + + + + + +Seastar: seastar/core/internal/io_sink.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
io_sink.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2021 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/circular_buffer.hh>
+
25#include <seastar/core/internal/io_request.hh>
+
26
+
27#include <concepts>
+
28#include <cstddef>
+
29#include <type_traits>
+
30#include <utility>
+
31
+
32namespace seastar {
+
33
+
34class io_completion;
+
35
+
36namespace internal {
+
37
+
38class io_sink;
+
39
+
40class pending_io_request : private internal::io_request {
+
41 friend class io_sink;
+
42 io_completion* _completion;
+
43
+
44public:
+
45 pending_io_request(internal::io_request req, io_completion* desc) noexcept
+
46 : io_request(std::move(req))
+
47 , _completion(desc)
+
48 { }
+
49};
+
50
+
51class io_sink {
+
52 circular_buffer<pending_io_request> _pending_io;
+
53public:
+
54 void submit(io_completion* desc, internal::io_request req) noexcept;
+
55
+
56 template <typename Fn>
+
57 // Fn should return whether the request was consumed and
+
58 // draining should try to drain more
+
59 requires std::is_invocable_r<bool, Fn, internal::io_request&, io_completion*>::value
+
60 size_t drain(Fn&& consume) {
+
61 size_t pending = _pending_io.size();
+
62 size_t drained = 0;
+
63
+
64 while (pending > drained) {
+
65 pending_io_request& req = _pending_io[drained];
+
66
+
67 if (!consume(req, req._completion)) {
+
68 break;
+
69 }
+
70 drained++;
+
71 }
+
72
+
73 _pending_io.erase(_pending_io.begin(), _pending_io.begin() + drained);
+
74 return drained;
+
75 }
+
76};
+
77
+
78} // namespace internal
+
79
+
80} // namespace seastar
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/iostream-impl_8hh_source.html b/master/iostream-impl_8hh_source.html new file mode 100644 index 000000000..3a2757ba5 --- /dev/null +++ b/master/iostream-impl_8hh_source.html @@ -0,0 +1,652 @@ + + + + + + + +Seastar: seastar/core/iostream-impl.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
iostream-impl.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18
+
19/*
+
20 * Copyright (C) 2015 Cloudius Systems, Ltd.
+
21 */
+
22
+
23
+
24#pragma once
+
25
+
26#include <seastar/core/coroutine.hh>
+
27#include <seastar/core/do_with.hh>
+
28#include <seastar/core/loop.hh>
+
29#include <seastar/net/packet.hh>
+
30#include <seastar/util/variant_utils.hh>
+
31
+
32namespace seastar {
+
33
+
34inline future<temporary_buffer<char>> data_source_impl::skip(uint64_t n)
+
35{
+
36 return do_with(uint64_t(n), [this] (uint64_t& n) {
+
37 return repeat_until_value([&] {
+
38 return get().then([&] (temporary_buffer<char> buffer) -> std::optional<temporary_buffer<char>> {
+
39 if (buffer.empty()) {
+
40 return buffer;
+
41 }
+
42 if (buffer.size() >= n) {
+
43 buffer.trim_front(n);
+
44 return buffer;
+
45 }
+
46 n -= buffer.size();
+
47 return { };
+
48 });
+
49 });
+
50 });
+
51}
+
52
+
53template<typename CharType>
+
54inline
+
55future<> output_stream<CharType>::write(const char_type* buf) noexcept {
+
56 return write(buf, strlen(buf));
+
57}
+
58
+
59template<typename CharType>
+
60template<typename StringChar, typename SizeType, SizeType MaxSize, bool NulTerminate>
+
61inline
+
62future<> output_stream<CharType>::write(const basic_sstring<StringChar, SizeType, MaxSize, NulTerminate>& s) noexcept {
+
63 return write(reinterpret_cast<const CharType *>(s.c_str()), s.size());
+
64}
+
65
+
66template<typename CharType>
+
67inline
+
68future<> output_stream<CharType>::write(const std::basic_string<CharType>& s) noexcept {
+
69 return write(s.c_str(), s.size());
+
70}
+
71
+
72template<typename CharType>
+
73future<> output_stream<CharType>::write(scattered_message<CharType> msg) noexcept {
+
74 return write(std::move(msg).release());
+
75}
+
76
+
77template<typename CharType>
+
78future<>
+
79output_stream<CharType>::zero_copy_put(net::packet p) noexcept {
+
80 // if flush is scheduled, disable it, so it will not try to write in parallel
+
81 _flush = false;
+
82 if (_flushing) {
+
83 // flush in progress, wait for it to end before continuing
+
84 return _in_batch.value().get_future().then([this, p = std::move(p)] () mutable {
+
85 return _fd.put(std::move(p));
+
86 });
+
87 } else {
+
88 return _fd.put(std::move(p));
+
89 }
+
90}
+
91
+
92// Writes @p in chunks of _size length. The last chunk is buffered if smaller.
+
93template <typename CharType>
+
94future<>
+
95output_stream<CharType>::zero_copy_split_and_put(net::packet p) noexcept {
+
96 return repeat([this, p = std::move(p)] () mutable {
+
97 if (p.len() < _size) {
+
98 if (p.len()) {
+
99 _zc_bufs = std::move(p);
+
100 } else {
+
101 _zc_bufs = net::packet::make_null_packet();
+
102 }
+
103 return make_ready_future<stop_iteration>(stop_iteration::yes);
+
104 }
+
105 auto chunk = p.share(0, _size);
+
106 p.trim_front(_size);
+
107 return zero_copy_put(std::move(chunk)).then([] {
+
108 return stop_iteration::no;
+
109 });
+
110 });
+
111}
+
112
+
113template<typename CharType>
+
114future<> output_stream<CharType>::write(net::packet p) noexcept {
+
115 static_assert(std::is_same_v<CharType, char>, "packet works on char");
+
116 try {
+
117 if (p.len() != 0) {
+
118 assert(!_end && "Mixing buffered writes and zero-copy writes not supported yet");
+
119
+
120 if (_zc_bufs) {
+
121 _zc_bufs.append(std::move(p));
+
122 } else {
+
123 _zc_bufs = std::move(p);
+
124 }
+
125
+
126 if (_zc_bufs.len() >= _size) {
+
127 if (_trim_to_size) {
+
128 return zero_copy_split_and_put(std::move(_zc_bufs));
+
129 } else {
+
130 return zero_copy_put(std::move(_zc_bufs));
+
131 }
+
132 }
+
133 }
+
134 return make_ready_future<>();
+
135 } catch (...) {
+ +
137 }
+
138}
+
139
+
140template<typename CharType>
+
141future<> output_stream<CharType>::write(temporary_buffer<CharType> p) noexcept {
+
142 try {
+
143 if (p.empty()) {
+
144 return make_ready_future<>();
+
145 }
+
146 assert(!_end && "Mixing buffered writes and zero-copy writes not supported yet");
+
147 return write(net::packet(std::move(p)));
+
148 } catch (...) {
+ +
150 }
+
151}
+
152
+
153template <typename CharType>
+
154future<temporary_buffer<CharType>>
+
155input_stream<CharType>::read_exactly_part(size_t n) noexcept {
+
156 temporary_buffer<CharType> out(n);
+
157 size_t completed{0U};
+
158 while (completed < n) {
+
159 size_t avail = available();
+
160 if (avail) {
+
161 auto now = std::min(n - completed, avail);
+
162 std::copy_n(_buf.get(), now, out.get_write() + completed);
+
163 _buf.trim_front(now);
+
164 completed += now;
+
165 if (completed == n) {
+
166 break;
+
167 }
+
168 }
+
169
+
170 // _buf is now empty
+
171 temporary_buffer<CharType> buf = co_await _fd.get();
+
172 if (buf.size() == 0) {
+
173 _eof = true;
+
174 out.trim(completed);
+
175 break;
+
176 }
+
177 _buf = std::move(buf);
+
178 }
+
179 co_return out;
+
180}
+
181
+
182template <typename CharType>
+
183future<temporary_buffer<CharType>>
+ +
185 if (_buf.size() == n) {
+
186 // easy case: steal buffer, return to caller
+
187 return make_ready_future<tmp_buf>(std::move(_buf));
+
188 } else if (_buf.size() > n) {
+
189 // buffer large enough, share it with caller
+
190 auto front = _buf.share(0, n);
+
191 _buf.trim_front(n);
+
192 return make_ready_future<tmp_buf>(std::move(front));
+
193 } else if (_buf.size() == 0) {
+
194 // buffer is empty: grab one and retry
+
195 return _fd.get().then([this, n] (auto buf) mutable {
+
196 if (buf.size() == 0) {
+
197 _eof = true;
+
198 return make_ready_future<tmp_buf>(std::move(buf));
+
199 }
+
200 _buf = std::move(buf);
+
201 return this->read_exactly(n);
+
202 });
+
203 } else {
+
204 // buffer too small: start copy/read loop
+
205 return read_exactly_part(n);
+
206 }
+
207}
+
208
+
209template <typename CharType>
+
210template <typename Consumer>
+
211requires InputStreamConsumer<Consumer, CharType> || ObsoleteInputStreamConsumer<Consumer, CharType>
+ +
213input_stream<CharType>::consume(Consumer&& consumer) noexcept(std::is_nothrow_move_constructible_v<Consumer>) {
+
214 return repeat([consumer = std::move(consumer), this] () mutable {
+
215 if (_buf.empty() && !_eof) {
+
216 return _fd.get().then([this] (tmp_buf buf) {
+
217 _buf = std::move(buf);
+
218 _eof = _buf.empty();
+
219 return make_ready_future<stop_iteration>(stop_iteration::no);
+
220 });
+
221 }
+
222 return consumer(std::move(_buf)).then([this] (consumption_result_type result) {
+
223 return seastar::visit(result.get(), [this] (const continue_consuming&) {
+
224 // If we're here, consumer consumed entire buffer and is ready for
+
225 // more now. So we do not return, and rather continue the loop.
+
226 //
+
227 // If we're at eof, we should stop.
+
228 return make_ready_future<stop_iteration>(stop_iteration(this->_eof));
+
229 }, [this] (stop_consuming<CharType>& stop) {
+
230 // consumer is done
+
231 this->_buf = std::move(stop.get_buffer());
+
232 return make_ready_future<stop_iteration>(stop_iteration::yes);
+
233 }, [this] (const skip_bytes& skip) {
+
234 return this->_fd.skip(skip.get_value()).then([this](tmp_buf buf) {
+
235 if (!buf.empty()) {
+
236 this->_buf = std::move(buf);
+
237 }
+
238 return make_ready_future<stop_iteration>(stop_iteration::no);
+
239 });
+
240 });
+
241 });
+
242 });
+
243}
+
244
+
245template <typename CharType>
+
246template <typename Consumer>
+
247requires InputStreamConsumer<Consumer, CharType> || ObsoleteInputStreamConsumer<Consumer, CharType>
+
248future<>
+
249input_stream<CharType>::consume(Consumer& consumer) noexcept(std::is_nothrow_move_constructible_v<Consumer>) {
+
250 return consume(std::ref(consumer));
+
251}
+
252
+
253template <typename CharType>
+
254future<temporary_buffer<CharType>>
+ + +
257 if (_buf.empty()) {
+
258 if (_eof) {
+
259 return make_ready_future<tmp_buf>();
+
260 } else {
+
261 return _fd.get().then([this, n] (tmp_buf buf) {
+
262 _eof = buf.empty();
+
263 _buf = std::move(buf);
+
264 return read_up_to(n);
+
265 });
+
266 }
+
267 } else if (_buf.size() <= n) {
+
268 // easy case: steal buffer, return to caller
+
269 return make_ready_future<tmp_buf>(std::move(_buf));
+
270 } else {
+
271 try {
+
272 // buffer is larger than n, so share its head with a caller
+
273 auto front = _buf.share(0, n);
+
274 _buf.trim_front(n);
+
275 return make_ready_future<tmp_buf>(std::move(front));
+
276 } catch (...) {
+
277 return current_exception_as_future<tmp_buf>();
+
278 }
+
279 }
+
280}
+
281
+
282template <typename CharType>
+ + + +
286 if (_eof) {
+
287 return make_ready_future<tmp_buf>();
+
288 }
+
289 if (_buf.empty()) {
+
290 return _fd.get().then([this] (tmp_buf buf) {
+
291 _eof = buf.empty();
+
292 return make_ready_future<tmp_buf>(std::move(buf));
+
293 });
+
294 } else {
+
295 return make_ready_future<tmp_buf>(std::move(_buf));
+
296 }
+
297}
+
298
+
299template <typename CharType>
+ +
301input_stream<CharType>::skip(uint64_t n) noexcept {
+
302 auto skip_buf = std::min(n, _buf.size());
+
303 _buf.trim_front(skip_buf);
+
304 n -= skip_buf;
+
305 if (!n) {
+
306 return make_ready_future<>();
+
307 }
+
308 return _fd.skip(n).then([this] (temporary_buffer<CharType> buffer) {
+
309 _buf = std::move(buffer);
+
310 });
+
311}
+
312
+
313template <typename CharType>
+
314data_source
+ +
316 if (_buf) {
+
317 throw std::logic_error("detach() called on a used input_stream");
+
318 }
+
319
+
320 return std::move(_fd);
+
321}
+
322
+
323// Writes @buf in chunks of _size length. The last chunk is buffered if smaller.
+
324template <typename CharType>
+ + +
327 assert(_end == 0);
+ +
329 return repeat([this, buf = std::move(buf)] () mutable {
+
330 if (buf.size() < _size) {
+
331 if (!_buf) {
+
332 _buf = _fd.allocate_buffer(_size);
+
333 }
+
334 std::copy(buf.get(), buf.get() + buf.size(), _buf.get_write());
+
335 _end = buf.size();
+
336 return make_ready_future<stop_iteration>(stop_iteration::yes);
+
337 }
+
338 auto chunk = buf.share(0, _size);
+
339 buf.trim_front(_size);
+
340 return put(std::move(chunk)).then([] {
+
341 return stop_iteration::no;
+
342 });
+
343 });
+
344}
+
345
+
346template <typename CharType>
+
347future<>
+
348output_stream<CharType>::write(const char_type* buf, size_t n) noexcept {
+
349 if (__builtin_expect(!_buf || n > _size - _end, false)) {
+
350 return slow_write(buf, n);
+
351 }
+
352 std::copy_n(buf, n, _buf.get_write() + _end);
+
353 _end += n;
+
354 return make_ready_future<>();
+ +
356
+
357template <typename CharType>
+ +
359output_stream<CharType>::slow_write(const char_type* buf, size_t n) noexcept {
+
360 try {
+
361 assert(!_zc_bufs && "Mixing buffered writes and zero-copy writes not supported yet");
+
362 auto bulk_threshold = _end ? (2 * _size - _end) : _size;
+
363 if (n >= bulk_threshold) {
+
364 if (_end) {
+
365 auto now = _size - _end;
+
366 std::copy(buf, buf + now, _buf.get_write() + _end);
+
367 _end = _size;
+
368 temporary_buffer<char> tmp = _fd.allocate_buffer(n - now);
+
369 std::copy(buf + now, buf + n, tmp.get_write());
+
370 _buf.trim(_end);
+
371 _end = 0;
+
372 return put(std::move(_buf)).then([this, tmp = std::move(tmp)]() mutable {
+
373 if (_trim_to_size) {
+
374 return split_and_put(std::move(tmp));
+
375 } else {
+
376 return put(std::move(tmp));
+
377 }
+
378 });
+
379 } else {
+
380 temporary_buffer<char> tmp = _fd.allocate_buffer(n);
+
381 std::copy(buf, buf + n, tmp.get_write());
+
382 if (_trim_to_size) {
+
383 return split_and_put(std::move(tmp));
+
384 } else {
+
385 return put(std::move(tmp));
+
386 }
+
387 }
+
388 }
+
389
+
390 if (!_buf) {
+
391 _buf = _fd.allocate_buffer(_size);
+
392 }
+
393
+
394 auto now = std::min(n, _size - _end);
+
395 std::copy(buf, buf + now, _buf.get_write() + _end);
+
396 _end += now;
+
397 if (now == n) {
+
398 return make_ready_future<>();
+
399 } else {
+
400 temporary_buffer<char> next = _fd.allocate_buffer(_size);
+
401 std::copy(buf + now, buf + n, next.get_write());
+
402 _end = n - now;
+
403 std::swap(next, _buf);
+
404 return put(std::move(next));
+
405 }
+
406 } catch (...) {
+ +
408 }
+
409}
+
410
+
411namespace internal {
+
412void add_to_flush_poller(output_stream<char>& x) noexcept;
+
413}
+
414
+
415template <typename CharType>
+
416future<> output_stream<CharType>::do_flush() noexcept {
+
417 if (_end) {
+
418 _buf.trim(_end);
+
419 _end = 0;
+
420 return _fd.put(std::move(_buf)).then([this] {
+
421 return _fd.flush();
+
422 });
+
423 } else if (_zc_bufs) {
+
424 return _fd.put(std::move(_zc_bufs)).then([this] {
+
425 return _fd.flush();
+
426 });
+
427 } else {
+
428 return _fd.flush();
+
429 }
+
430}
+
431
+
432template <typename CharType>
+
433future<>
+
434output_stream<CharType>::flush() noexcept {
+
435 if (!_batch_flushes) {
+
436 return do_flush();
+
437 } else {
+
438 if (_ex) {
+
439 // flush is a good time to deliver outstanding errors
+
440 return make_exception_future<>(std::move(_ex));
+
441 } else {
+
442 _flush = true;
+
443 if (!_in_batch) {
+
444 internal::add_to_flush_poller(*this);
+
445 _in_batch = promise<>();
+
446 }
+
447 }
+
448 }
+
449 return make_ready_future<>();
+
450}
+ +
452template <typename CharType>
+ + +
455 // if flush is scheduled, disable it, so it will not try to write in parallel
+
456 _flush = false;
+
457 if (_flushing) {
+
458 // flush in progress, wait for it to end before continuing
+
459 return _in_batch.value().get_future().then([this, buf = std::move(buf)] () mutable {
+
460 return _fd.put(std::move(buf));
+
461 });
+
462 } else {
+
463 return _fd.put(std::move(buf));
+
464 }
+
465}
+
466
+
467template <typename CharType>
+
468void
+ +
470 if (!_flush) {
+
471 // flush was canceled, do nothing
+
472 _flushing = false;
+
473 _in_batch.value().set_value();
+
474 _in_batch = std::nullopt;
+
475 return;
+
476 }
+
477
+
478 _flush = false;
+
479 _flushing = true; // make whoever wants to write into the fd to wait for flush to complete
+
480
+
481 // FIXME: future is discarded
+
482 (void)do_flush().then_wrapped([this] (future<> f) {
+
483 try {
+
484 f.get();
+
485 } catch (...) {
+
486 _ex = std::current_exception();
+
487 _fd.on_batch_flush_error();
+
488 }
+
489 // if flush() was called while flushing flush once more
+
490 poll_flush();
+
491 });
+
492}
+
493
+
494template <typename CharType>
+
495future<>
+ +
497 return flush().finally([this] {
+
498 if (_in_batch) {
+
499 return _in_batch.value().get_future();
+
500 } else {
+
501 return make_ready_future();
+
502 }
+
503 }).then([this] {
+
504 // report final exception as close error
+
505 if (_ex) {
+
506 std::rethrow_exception(_ex);
+
507 }
+
508 }).finally([this] {
+
509 return _fd.close();
+
510 });
+
511}
+
512
+
513template <typename CharType>
+ + +
516 if (_buf) {
+
517 throw std::logic_error("detach() called on a used output_stream");
+
518 }
+
519
+
520 return std::move(_fd);
+
521}
+
522
+
523namespace internal {
+
524
+
526template <typename CharType>
+
527struct stream_copy_consumer {
+
528private:
+ +
530 using consumption_result_type = consumption_result<CharType>;
+
531public:
+
532 stream_copy_consumer(output_stream<CharType>& os) : _os(os) {
+
533 }
+
534 future<consumption_result_type> operator()(temporary_buffer<CharType> data) {
+
535 if (data.empty()) {
+
536 return make_ready_future<consumption_result_type>(stop_consuming(std::move(data)));
+
537 }
+
538 return _os.write(data.get(), data.size()).then([] {
+
539 return make_ready_future<consumption_result_type>(continue_consuming());
+
540 });
+
541 }
+
542};
+
544
+
545}
+
546
+
547extern template struct internal::stream_copy_consumer<char>;
+
548
+
549template <typename CharType>
+ +
551 return in.consume(internal::stream_copy_consumer<CharType>(out));
+
552}
+
553
+
554extern template future<> copy<char>(input_stream<char>&, output_stream<char>&);
+
555}
+
Definition: iostream.hh:222
+
Definition: iostream.hh:148
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Result then(Func &&func) noexcept
Schedule a block of code to run when the future is ready.
Definition: future.hh:1425
+
value_type && get()
gets the value returned by the computation
Definition: future.hh:1342
+
Definition: iostream.hh:280
+
Definition: iostream.hh:378
+ +
Definition: temporary_buffer.hh:67
+
bool empty() const noexcept
Checks whether the buffer is empty.
Definition: temporary_buffer.hh:152
+
CharType * get_write() noexcept
Definition: temporary_buffer.hh:128
+
future< T > make_ready_future(A &&... value) noexcept
Creates a future in an available, value state.
Definition: future.hh:1943
+
future< T > current_exception_as_future() noexcept
Returns std::current_exception() wrapped in a future.
Definition: future.hh:1962
+
auto do_with(T1 &&rv1, T2 &&rv2, More &&... more) noexcept
Definition: do_with.hh:135
+
repeat_until_value_return_type< AsyncAction > repeat_until_value(AsyncAction action) noexcept
Definition: loop.hh:237
+
future now()
Returns a ready future.
Definition: later.hh:35
+
reference_wrapper< T > ref(T &object) noexcept
Wraps reference in a reference_wrapper.
Definition: reference_wrapper.hh:62
+
auto visit(Variant &&variant, Args &&... args)
Definition: variant_utils.hh:68
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
future copy(input_stream< CharType > &in, output_stream< CharType > &out)
copy all the content from the input stream to the output stream
Definition: iostream-impl.hh:550
+
+ + + + diff --git a/master/iostream_8hh_source.html b/master/iostream_8hh_source.html new file mode 100644 index 000000000..80e7ac120 --- /dev/null +++ b/master/iostream_8hh_source.html @@ -0,0 +1,512 @@ + + + + + + + +Seastar: seastar/core/iostream.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
iostream.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18
+
19/*
+
20 * Copyright (C) 2015 Cloudius Systems, Ltd.
+
21 */
+
22
+
23//
+
24// Buffered input and output streams
+
25//
+
26// Two abstract classes (data_source and data_sink) provide means
+
27// to acquire bulk data from, or push bulk data to, some provider.
+
28// These could be tied to a TCP connection, a disk file, or a memory
+
29// buffer.
+
30//
+
31// Two concrete classes (input_stream and output_stream) buffer data
+
32// from data_source and data_sink and provide easier means to process
+
33// it.
+
34//
+
35
+
36#pragma once
+
37
+
38#include <seastar/core/future.hh>
+
39#include <seastar/core/temporary_buffer.hh>
+
40#include <seastar/core/scattered_message.hh>
+
41#include <seastar/util/std-compat.hh>
+
42#include <seastar/util/modules.hh>
+
43#ifndef SEASTAR_MODULE
+
44#include <boost/intrusive/slist.hpp>
+
45#include <algorithm>
+
46#include <memory>
+
47#include <optional>
+
48#include <variant>
+
49#include <vector>
+
50#endif
+
51
+
52namespace bi = boost::intrusive;
+
53
+
54namespace seastar {
+
55
+
56SEASTAR_MODULE_EXPORT_BEGIN
+
57
+
58namespace net { class packet; }
+
59
+ +
61public:
+
62 virtual ~data_source_impl() {}
+
63 virtual future<temporary_buffer<char>> get() = 0;
+
64 virtual future<temporary_buffer<char>> skip(uint64_t n);
+
65 virtual future<> close() { return make_ready_future<>(); }
+
66};
+
67
+ +
69 std::unique_ptr<data_source_impl> _dsi;
+
70protected:
+
71 data_source_impl* impl() const { return _dsi.get(); }
+
72public:
+ +
74
+
75 data_source() noexcept = default;
+
76 explicit data_source(std::unique_ptr<data_source_impl> dsi) noexcept : _dsi(std::move(dsi)) {}
+
77 data_source(data_source&& x) noexcept = default;
+
78 data_source& operator=(data_source&& x) noexcept = default;
+
79
+
80 future<tmp_buf> get() noexcept {
+
81 try {
+
82 return _dsi->get();
+
83 } catch (...) {
+
84 return current_exception_as_future<tmp_buf>();
+
85 }
+
86 }
+
87 future<tmp_buf> skip(uint64_t n) noexcept {
+
88 try {
+
89 return _dsi->skip(n);
+
90 } catch (...) {
+
91 return current_exception_as_future<tmp_buf>();
+
92 }
+
93 }
+
94 future<> close() noexcept {
+
95 try {
+
96 return _dsi->close();
+
97 } catch (...) {
+
98 return current_exception_as_future<>();
+
99 }
+
100 }
+
101};
+
102
+ +
104public:
+
105 virtual ~data_sink_impl() {}
+
106 virtual temporary_buffer<char> allocate_buffer(size_t size) {
+
107 return temporary_buffer<char>(size);
+
108 }
+
109 virtual future<> put(net::packet data) = 0;
+
110 virtual future<> put(std::vector<temporary_buffer<char>> data) {
+
111 net::packet p;
+
112 p.reserve(data.size());
+
113 for (auto& buf : data) {
+
114 p = net::packet(std::move(p), net::fragment{buf.get_write(), buf.size()}, buf.release());
+
115 }
+
116 return put(std::move(p));
+
117 }
+
118 virtual future<> put(temporary_buffer<char> buf) {
+
119 return put(net::packet(net::fragment{buf.get_write(), buf.size()}, buf.release()));
+
120 }
+
121 virtual future<> flush() {
+
122 return make_ready_future<>();
+
123 }
+
124 virtual future<> close() = 0;
+
125
+
126 // The method should return the maximum buffer size that's acceptable by
+
127 // the sink. It's used when the output stream is constructed without any
+
128 // specific buffer size. In this case the stream accepts this value as its
+
129 // buffer size and doesn't put larger buffers (see trim_to_size).
+
130 virtual size_t buffer_size() const noexcept {
+
131 assert(false && "Data sink must have the buffer_size() method overload");
+
132 return 0;
+
133 }
+
134
+
135 // In order to support flushes batching (output_stream_options.batch_flushes)
+
136 // the sink mush handle flush errors that may happen in the background by
+
137 // overriding the on_batch_flush_error() method. If the sink doesn't do it,
+
138 // turning on batch_flushes would have no effect
+
139 virtual bool can_batch_flushes() const noexcept {
+
140 return false;
+
141 }
+
142
+
143 virtual void on_batch_flush_error() noexcept {
+
144 assert(false && "Data sink must implement on_batch_flush_error() method");
+
145 }
+
146};
+
147
+ +
149 std::unique_ptr<data_sink_impl> _dsi;
+
150public:
+
151 data_sink() noexcept = default;
+
152 explicit data_sink(std::unique_ptr<data_sink_impl> dsi) noexcept : _dsi(std::move(dsi)) {}
+
153 data_sink(data_sink&& x) noexcept = default;
+
154 data_sink& operator=(data_sink&& x) noexcept = default;
+
155 temporary_buffer<char> allocate_buffer(size_t size) {
+
156 return _dsi->allocate_buffer(size);
+
157 }
+
158 future<> put(std::vector<temporary_buffer<char>> data) noexcept {
+
159 try {
+
160 return _dsi->put(std::move(data));
+
161 } catch (...) {
+ +
163 }
+
164 }
+
165 future<> put(temporary_buffer<char> data) noexcept {
+
166 try {
+
167 return _dsi->put(std::move(data));
+
168 } catch (...) {
+ +
170 }
+
171 }
+
172 future<> put(net::packet p) noexcept {
+
173 try {
+
174 return _dsi->put(std::move(p));
+
175 } catch (...) {
+ +
177 }
+
178 }
+
179 future<> flush() noexcept {
+
180 try {
+
181 return _dsi->flush();
+
182 } catch (...) {
+ +
184 }
+
185 }
+
186 future<> close() noexcept {
+
187 try {
+
188 return _dsi->close();
+
189 } catch (...) {
+ +
191 }
+
192 }
+
193
+
194 size_t buffer_size() const noexcept { return _dsi->buffer_size(); }
+
195 bool can_batch_flushes() const noexcept { return _dsi->can_batch_flushes(); }
+
196 void on_batch_flush_error() noexcept { _dsi->on_batch_flush_error(); }
+
197};
+
198
+ +
200
+
201template <typename CharType>
+ +
203public:
+ +
205 explicit stop_consuming(tmp_buf buf) : _buf(std::move(buf)) {}
+
206
+
207 tmp_buf& get_buffer() { return _buf; }
+
208 const tmp_buf& get_buffer() const { return _buf; }
+
209private:
+
210 tmp_buf _buf;
+
211};
+
212
+ +
214public:
+
215 explicit skip_bytes(uint64_t v) : _value(v) {}
+
216 uint64_t get_value() const { return _value; }
+
217private:
+
218 uint64_t _value;
+
219};
+
220
+
221template <typename CharType>
+ +
223public:
+ +
225 using consumption_variant = std::variant<continue_consuming, stop_consuming_type, skip_bytes>;
+
226 using tmp_buf = typename stop_consuming_type::tmp_buf;
+
227
+
228 /*[[deprecated]]*/ consumption_result(std::optional<tmp_buf> opt_buf) {
+
229 if (opt_buf) {
+
230 _result = stop_consuming_type{std::move(opt_buf.value())};
+
231 }
+
232 }
+
233
+ +
235 consumption_result(stop_consuming_type&& stop) : _result(std::move(stop)) {}
+
236 consumption_result(skip_bytes&& skip) : _result(std::move(skip)) {}
+
237
+
238 consumption_variant& get() { return _result; }
+
239 const consumption_variant& get() const { return _result; }
+
240
+
241private:
+
242 consumption_variant _result;
+
243};
+
244
+
245// Consumer concept, for consume() method
+
246
+
247// The consumer should operate on the data given to it, and
+
248// return a future "consumption result", which can be
+
249// - continue_consuming, if the consumer has consumed all the input given
+
250// to it and is ready for more
+
251// - stop_consuming, when the consumer is done (and in that case
+
252// the contained buffer is the unconsumed part of the last data buffer - this
+
253// can also happen to be empty).
+
254// - skip_bytes, when the consumer has consumed all the input given to it
+
255// and wants to skip before processing the next chunk
+
256//
+
257// For backward compatibility reasons, we also support the deprecated return value
+
258// of type "unconsumed remainder" which can be
+
259// - empty optional, if the consumer consumed all the input given to it
+
260// and is ready for more
+
261// - non-empty optional, when the consumer is done (and in that case
+
262// the value is the unconsumed part of the last data buffer - this
+
263// can also happen to be empty).
+
264
+
265template <typename Consumer, typename CharType>
+
266concept InputStreamConsumer = requires (Consumer c) {
+
267 { c(temporary_buffer<CharType>{}) } -> std::same_as<future<consumption_result<CharType>>>;
+
268};
+
269
+
270template <typename Consumer, typename CharType>
+
271concept ObsoleteInputStreamConsumer = requires (Consumer c) {
+
272 { c(temporary_buffer<CharType>{}) } -> std::same_as<future<std::optional<temporary_buffer<CharType>>>>;
+
273};
+
274
+
279template <typename CharType>
+
280class input_stream final {
+
281 static_assert(sizeof(CharType) == 1, "must buffer stream of bytes");
+
282 data_source _fd;
+ +
284 bool _eof = false;
+
285private:
+ +
287 size_t available() const noexcept { return _buf.size(); }
+
288protected:
+
289 void reset() noexcept { _buf = {}; }
+
290 data_source* fd() noexcept { return &_fd; }
+
291public:
+ +
293 // unconsumed_remainder is mapped for compatibility only; new code should use consumption_result_type
+
294 using unconsumed_remainder = std::optional<tmp_buf>;
+
295 using char_type = CharType;
+
296 input_stream() noexcept = default;
+
297 explicit input_stream(data_source fd) noexcept : _fd(std::move(fd)), _buf() {}
+
298 input_stream(input_stream&&) = default;
+
299 input_stream& operator=(input_stream&&) = default;
+ +
311 template <typename Consumer>
+
312 requires InputStreamConsumer<Consumer, CharType> || ObsoleteInputStreamConsumer<Consumer, CharType>
+
313 future<> consume(Consumer&& c) noexcept(std::is_nothrow_move_constructible_v<Consumer>);
+
314 template <typename Consumer>
+
315 requires InputStreamConsumer<Consumer, CharType> || ObsoleteInputStreamConsumer<Consumer, CharType>
+
316 future<> consume(Consumer& c) noexcept(std::is_nothrow_move_constructible_v<Consumer>);
+
322 bool eof() const noexcept { return _eof; }
+
325 future<tmp_buf> read() noexcept;
+
328 future<tmp_buf> read_up_to(size_t n) noexcept;
+
338 future<> close() noexcept {
+
339 return _fd.close();
+
340 }
+
342 future<> skip(uint64_t n) noexcept;
+
343
+
355 data_source detach() &&;
+
356private:
+
357 future<temporary_buffer<CharType>> read_exactly_part(size_t n) noexcept;
+
358};
+
359
+ +
361 bool trim_to_size = false;
+
363 bool batch_flushes = false;
+
364};
+
365
+
377template <typename CharType>
+
378class output_stream final {
+
379 static_assert(sizeof(CharType) == 1, "must buffer stream of bytes");
+
380 data_sink _fd;
+ +
382 net::packet _zc_bufs = net::packet::make_null_packet(); //zero copy buffers
+
383 size_t _size = 0;
+
384 size_t _begin = 0;
+
385 size_t _end = 0;
+
386 bool _trim_to_size = false;
+
387 bool _batch_flushes = false;
+
388 std::optional<promise<>> _in_batch;
+
389 bool _flush = false;
+
390 bool _flushing = false;
+
391 std::exception_ptr _ex;
+
392 bi::slist_member_hook<> _in_poller;
+
393
+
394private:
+
395 size_t available() const noexcept { return _end - _begin; }
+
396 future<> split_and_put(temporary_buffer<CharType> buf) noexcept;
+
397 future<> put(temporary_buffer<CharType> buf) noexcept;
+
398 void poll_flush() noexcept;
+
399 future<> do_flush() noexcept;
+
400 future<> zero_copy_put(net::packet p) noexcept;
+
401 future<> zero_copy_split_and_put(net::packet p) noexcept;
+
402 [[gnu::noinline]]
+
403 future<> slow_write(const CharType* buf, size_t n) noexcept;
+
404public:
+
405 using char_type = CharType;
+
406 output_stream() noexcept = default;
+
407 output_stream(data_sink fd, size_t size, output_stream_options opts = {}) noexcept
+
408 : _fd(std::move(fd)), _size(size), _trim_to_size(opts.trim_to_size), _batch_flushes(opts.batch_flushes && _fd.can_batch_flushes()) {}
+
409 [[deprecated("use output_stream_options instead of booleans")]]
+
410 output_stream(data_sink fd, size_t size, bool trim_to_size, bool batch_flushes = false) noexcept
+
411 : _fd(std::move(fd)), _size(size), _trim_to_size(trim_to_size), _batch_flushes(batch_flushes && _fd.can_batch_flushes()) {}
+
412 output_stream(data_sink fd) noexcept
+
413 : _fd(std::move(fd)), _size(_fd.buffer_size()), _trim_to_size(true) {}
+
414 output_stream(output_stream&&) noexcept = default;
+
415 output_stream& operator=(output_stream&&) noexcept = default;
+ +
417 if (_batch_flushes) {
+
418 assert(!_in_batch && "Was this stream properly closed?");
+
419 } else {
+
420 assert(!_end && !_zc_bufs && "Was this stream properly closed?");
+
421 }
+
422 }
+
423 future<> write(const char_type* buf, size_t n) noexcept;
+
424 future<> write(const char_type* buf) noexcept;
+
425
+
426 template <typename StringChar, typename SizeType, SizeType MaxSize, bool NulTerminate>
+ +
428 future<> write(const std::basic_string<char_type>& s) noexcept;
+
429
+
430 future<> write(net::packet p) noexcept;
+
431 future<> write(scattered_message<char_type> msg) noexcept;
+ +
433 future<> flush() noexcept;
+
434
+
438 future<> close() noexcept;
+
439
+
451 data_sink detach() &&;
+
452
+
453 using batch_flush_list_t = bi::slist<output_stream,
+
454 bi::constant_time_size<false>, bi::cache_last<true>,
+
455 bi::member_hook<output_stream, bi::slist_member_hook<>, &output_stream::_in_poller>>;
+
456private:
+
457 friend class reactor;
+
458};
+
459
+
463template <typename CharType>
+ +
465
+
466SEASTAR_MODULE_EXPORT_END
+
467}
+
468
+
469#include "iostream-impl.hh"
+
Definition: sstring.hh:76
+
Definition: iostream.hh:222
+
Definition: iostream.hh:103
+
Definition: iostream.hh:148
+
Definition: iostream.hh:60
+
Definition: iostream.hh:68
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
value_type && get()
gets the value returned by the computation
Definition: future.hh:1342
+
Definition: iostream.hh:280
+
future skip(uint64_t n) noexcept
Ignores n next bytes from the stream.
Definition: iostream-impl.hh:301
+
future< tmp_buf > read_up_to(size_t n) noexcept
Definition: iostream-impl.hh:255
+
future< temporary_buffer< CharType > > read_exactly(size_t n) noexcept
Definition: iostream-impl.hh:184
+
future< tmp_buf > read() noexcept
Definition: iostream-impl.hh:284
+
future close() noexcept
Definition: iostream.hh:338
+
data_source detach() &&
Definition: iostream-impl.hh:315
+
bool eof() const noexcept
Definition: iostream.hh:322
+
Definition: packet.hh:87
+
Definition: iostream.hh:378
+
data_sink detach() &&
Definition: iostream-impl.hh:515
+
future close() noexcept
Definition: iostream-impl.hh:496
+
Definition: reactor.hh:156
+
Definition: scattered_message.hh:35
+
Definition: iostream.hh:213
+
Definition: iostream.hh:202
+ +
deleter release() noexcept
Definition: temporary_buffer.hh:203
+
size_t size() const noexcept
Gets the buffer size.
Definition: temporary_buffer.hh:130
+
CharType * get_write() noexcept
Definition: temporary_buffer.hh:128
+
future< T > current_exception_as_future() noexcept
Returns std::current_exception() wrapped in a future.
Definition: future.hh:1962
+
holds the implementation parts of the metrics layer, do not use directly.
+
Definition: packet.hh:46
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
bool batch_flushes
Try to merge flushes with each other.
Definition: iostream.hh:363
+
bool trim_to_size
Definition: iostream.hh:361
+
future copy(input_stream< CharType > &in, output_stream< CharType > &out)
copy all the content from the input stream to the output stream
Definition: iostream-impl.hh:550
+
Definition: iostream.hh:199
+
Definition: iostream.hh:360
+
+ + + + diff --git a/master/iovec__utils_8hh_source.html b/master/iovec__utils_8hh_source.html new file mode 100644 index 000000000..caa835cf8 --- /dev/null +++ b/master/iovec__utils_8hh_source.html @@ -0,0 +1,137 @@ + + + + + + + +Seastar: seastar/util/internal/iovec_utils.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
iovec_utils.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2022 ScyllaDB.
+
20 */
+
21
+
22#ifndef SEASTAR_MODULE
+
23#include <sys/types.h>
+
24#endif
+
25
+
26#pragma once
+
27
+
28namespace seastar {
+
29namespace internal {
+
30
+
31inline size_t iovec_len(const iovec* begin, size_t len)
+
32{
+
33 size_t ret = 0;
+
34 auto end = begin + len;
+
35 while (begin != end) {
+
36 ret += begin++->iov_len;
+
37 }
+
38 return ret;
+
39}
+
40
+
41inline size_t iovec_len(const std::vector<iovec>& iov)
+
42{
+
43 size_t ret = 0;
+
44 for (auto&& e : iov) {
+
45 ret += e.iov_len;
+
46 }
+
47 return ret;
+
48}
+
49
+
50// Given a properly aligned vector of iovecs, ensures that it respects the
+
51// IOV_MAX limit, by trimming if necessary. The modified vector still satisfied
+
52// the alignment requirements.
+
53// Returns the final total length of all iovecs.
+
54size_t sanitize_iovecs(std::vector<iovec>& iov, size_t disk_alignment) noexcept;
+
55
+
56} // internal namespace
+
57} // seastar namespace
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/ip_8hh_source.html b/master/ip_8hh_source.html new file mode 100644 index 000000000..571baf030 --- /dev/null +++ b/master/ip_8hh_source.html @@ -0,0 +1,548 @@ + + + + + + + +Seastar: seastar/net/ip.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
ip.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 *
+
21 */
+
22
+
23#pragma once
+
24
+
25#ifndef SEASTAR_MODULE
+
26#include <boost/asio/ip/address_v4.hpp>
+
27#include <arpa/inet.h>
+
28#include <unordered_map>
+
29#include <cstdint>
+
30#include <array>
+
31#include <map>
+
32#include <list>
+
33#include <chrono>
+
34#endif
+
35
+
36#include <seastar/core/array_map.hh>
+
37#include <seastar/net/byteorder.hh>
+
38#include <seastar/core/byteorder.hh>
+
39#include <seastar/net/arp.hh>
+
40#include <seastar/net/ip_checksum.hh>
+
41#include <seastar/net/const.hh>
+
42#include <seastar/net/packet-util.hh>
+
43#include <seastar/core/shared_ptr.hh>
+
44#include <seastar/net/toeplitz.hh>
+
45#include <seastar/net/udp.hh>
+ +
47#include <seastar/util/modules.hh>
+
48
+
49#include "ipv4_address.hh"
+
50#include "ipv6_address.hh"
+
51
+
52namespace seastar {
+
53
+
54namespace net {
+
55
+
56class ipv4;
+
57template <ip_protocol_num ProtoNum>
+
58class ipv4_l4;
+
59
+
60template <typename InetTraits>
+
61class tcp;
+
62
+ + + +
66 struct l4packet {
+
67 ipv4_address to;
+
68 packet p;
+
69 ethernet_address e_dst;
+
70 ip_protocol_num proto_num;
+
71 };
+
72 using packet_provider_type = std::function<std::optional<l4packet> ()>;
+
73 static void tcp_pseudo_header_checksum(checksummer& csum, ipv4_address src, ipv4_address dst, uint16_t len) {
+
74 csum.sum_many(src.ip.raw, dst.ip.raw, uint8_t(0), uint8_t(ip_protocol_num::tcp), len);
+
75 }
+
76 static void udp_pseudo_header_checksum(checksummer& csum, ipv4_address src, ipv4_address dst, uint16_t len) {
+
77 csum.sum_many(src.ip.raw, dst.ip.raw, uint8_t(0), uint8_t(ip_protocol_num::udp), len);
+
78 }
+
79 static constexpr uint8_t ip_hdr_len_min = ipv4_hdr_len_min;
+
80};
+
81
+
82template <ip_protocol_num ProtoNum>
+
83class ipv4_l4 {
+
84public:
+
85 ipv4& _inet;
+
86public:
+
87 ipv4_l4(ipv4& inet) : _inet(inet) {}
+
88 void register_packet_provider(ipv4_traits::packet_provider_type func);
+
89 future<ethernet_address> get_l2_dst_address(ipv4_address to);
+
90 const ipv4& inet() const {
+
91 return _inet;
+
92 }
+
93};
+
94
+ +
96public:
+
97 virtual ~ip_protocol() {}
+
98 virtual void received(packet p, ipv4_address from, ipv4_address to) = 0;
+
99 virtual bool forward(forward_hash& out_hash_data, packet& p, size_t off) {
+
100 std::ignore = out_hash_data;
+
101 std::ignore = p;
+
102 std::ignore = off;
+
103 return true;
+
104 }
+
105};
+
106
+
107template <typename InetTraits>
+
108struct l4connid {
+
109 using ipaddr = typename InetTraits::address_type;
+
110 using inet_type = typename InetTraits::inet_type;
+
111 struct connid_hash;
+
112
+
113 ipaddr local_ip;
+
114 ipaddr foreign_ip;
+
115 uint16_t local_port;
+
116 uint16_t foreign_port;
+
117
+
118 bool operator==(const l4connid& x) const {
+
119 return local_ip == x.local_ip
+
120 && foreign_ip == x.foreign_ip
+
121 && local_port == x.local_port
+
122 && foreign_port == x.foreign_port;
+
123 }
+
124
+
125 uint32_t hash(rss_key_type rss_key) {
+
126 forward_hash hash_data;
+
127 hash_data.push_back(hton(foreign_ip.ip));
+
128 hash_data.push_back(hton(local_ip.ip));
+
129 hash_data.push_back(hton(foreign_port));
+
130 hash_data.push_back(hton(local_port));
+
131 return toeplitz_hash(rss_key, hash_data);
+
132 }
+
133};
+
134
+
135class ipv4_tcp final : public ip_protocol {
+ +
137 std::unique_ptr<tcp<ipv4_traits>> _tcp;
+
138public:
+
139 ipv4_tcp(ipv4& inet);
+
140 ~ipv4_tcp();
+
141 virtual void received(packet p, ipv4_address from, ipv4_address to) override;
+
142 virtual bool forward(forward_hash& out_hash_data, packet& p, size_t off) override;
+
143 friend class ipv4;
+
144};
+
145
+
146struct icmp_hdr {
+
147 enum class msg_type : uint8_t {
+
148 echo_reply = 0,
+
149 echo_request = 8,
+
150 };
+
151 msg_type type;
+
152 uint8_t code;
+
153 packed<uint16_t> csum;
+
154 packed<uint32_t> rest;
+
155 template <typename Adjuster>
+
156 auto adjust_endianness(Adjuster a) {
+
157 return a(csum);
+
158 }
+
159} __attribute__((packed));
+
160
+
161
+
162class icmp {
+
163public:
+
164 using ipaddr = ipv4_address;
+ +
166 explicit icmp(inet_type& inet) : _inet(inet) {
+
167 _inet.register_packet_provider([this] {
+
168 std::optional<ipv4_traits::l4packet> l4p;
+
169 if (!_packetq.empty()) {
+
170 l4p = std::move(_packetq.front());
+
171 _packetq.pop_front();
+
172 _queue_space.signal(l4p.value().p.len());
+
173 }
+
174 return l4p;
+
175 });
+
176 }
+
177 void received(packet p, ipaddr from, ipaddr to);
+
178private:
+
179 inet_type& _inet;
+ +
181 semaphore _queue_space = {212992};
+
182};
+
183
+
184class ipv4_icmp final : public ip_protocol {
+ +
186 icmp _icmp;
+
187public:
+
188 ipv4_icmp(ipv4& inet) : _inet_l4(inet), _icmp(_inet_l4) {}
+
189 virtual void received(packet p, ipv4_address from, ipv4_address to) {
+
190 _icmp.received(std::move(p), from, to);
+
191 }
+
192 friend class ipv4;
+
193};
+
194
+
195class ipv4_udp : public ip_protocol {
+ +
197 using connid_hash = typename connid::connid_hash;
+
198
+
199public:
+
200 static const int default_queue_size;
+
201private:
+
202 static const uint16_t min_anonymous_port = 32768;
+
203 ipv4 &_inet;
+
204 std::unordered_map<uint16_t, lw_shared_ptr<udp_channel_state>> _channels;
+
205 int _queue_size = default_queue_size;
+
206 uint16_t _next_anonymous_port = min_anonymous_port;
+ +
208private:
+
209 uint16_t next_port(uint16_t port);
+
210public:
+ +
212 private:
+
213 ipv4_udp &_proto;
+
214 uint16_t _port;
+
215 public:
+
216 registration(ipv4_udp &proto, uint16_t port) : _proto(proto), _port(port) {};
+
217
+
218 void unregister() {
+
219 _proto._channels.erase(_proto._channels.find(_port));
+
220 }
+
221
+
222 uint16_t port() const {
+
223 return _port;
+
224 }
+
225 };
+
226
+
227 ipv4_udp(ipv4& inet);
+
228 udp_channel make_channel(ipv4_addr addr);
+
229 virtual void received(packet p, ipv4_address from, ipv4_address to) override;
+
230 void send(uint16_t src_port, ipv4_addr dst, packet &&p);
+
231 bool forward(forward_hash& out_hash_data, packet& p, size_t off) override;
+
232 void set_queue_size(int size) { _queue_size = size; }
+
233
+
234 const ipv4& inet() const {
+
235 return _inet;
+
236 }
+
237};
+
238
+
239struct ip_hdr;
+
240
+ +
242 virtual ~ip_packet_filter() {};
+
243 virtual future<> handle(packet& p, ip_hdr* iph, ethernet_address from, bool & handled) = 0;
+
244};
+
245
+ +
247 struct hash;
+
248 ipv4_address src_ip;
+
249 ipv4_address dst_ip;
+
250 uint16_t identification;
+
251 uint8_t protocol;
+
252 bool operator==(const ipv4_frag_id& x) const {
+
253 return src_ip == x.src_ip &&
+
254 dst_ip == x.dst_ip &&
+
255 identification == x.identification &&
+
256 protocol == x.protocol;
+
257 }
+
258};
+
259
+
260struct ipv4_frag_id::hash : private std::hash<ipv4_address>,
+
261 private std::hash<uint16_t>, private std::hash<uint8_t> {
+
262 size_t operator()(const ipv4_frag_id& id) const noexcept {
+
263 using h1 = std::hash<ipv4_address>;
+
264 using h2 = std::hash<uint16_t>;
+
265 using h3 = std::hash<uint8_t>;
+
266 return h1::operator()(id.src_ip) ^
+
267 h1::operator()(id.dst_ip) ^
+
268 h2::operator()(id.identification) ^
+
269 h3::operator()(id.protocol);
+
270 }
+
271};
+
272
+
273struct ipv4_tag {};
+ +
275
+
276class ipv4 {
+
277public:
+
278 using clock_type = lowres_clock;
+ +
280 using proto_type = uint16_t;
+
281 static address_type broadcast_address() { return ipv4_address(0xffffffff); }
+
282 static proto_type arp_protocol_type() { return proto_type(eth_protocol_num::ipv4); }
+
283private:
+
284 interface* _netif;
+
285 std::vector<ipv4_traits::packet_provider_type> _pkt_providers;
+
286 arp _global_arp;
+
287 arp_for<ipv4> _arp;
+
288 ipv4_address _host_address;
+
289 ipv4_address _gw_address;
+
290 ipv4_address _netmask;
+
291 l3_protocol _l3;
+
292 ipv4_tcp _tcp;
+
293 ipv4_icmp _icmp;
+
294 ipv4_udp _udp;
+ +
296 ip_packet_filter * _packet_filter = nullptr;
+
297 struct frag {
+
298 packet header;
+ +
300 clock_type::time_point rx_time;
+
301 uint32_t mem_size = 0;
+
302 // fragment with MF == 0 inidates it is the last fragment
+
303 bool last_frag_received = false;
+
304
+
305 packet get_assembled_packet(ethernet_address from, ethernet_address to);
+
306 int32_t merge(ip_hdr &h, uint16_t offset, packet p);
+
307 bool is_complete();
+
308 };
+
309 std::unordered_map<ipv4_frag_id, frag, ipv4_frag_id::hash> _frags;
+
310 std::list<ipv4_frag_id> _frags_age;
+
311 static constexpr std::chrono::seconds _frag_timeout{30};
+
312 static constexpr uint32_t _frag_low_thresh{3 * 1024 * 1024};
+
313 static constexpr uint32_t _frag_high_thresh{4 * 1024 * 1024};
+
314 uint32_t _frag_mem{0};
+
315 timer<lowres_clock> _frag_timer;
+ +
317 unsigned _pkt_provider_idx = 0;
+
318 metrics::metric_groups _metrics;
+
319private:
+
320 future<> handle_received_packet(packet p, ethernet_address from);
+
321 bool forward(forward_hash& out_hash_data, packet& p, size_t off);
+
322 std::optional<l3_protocol::l3packet> get_packet();
+
323 bool in_my_netmask(ipv4_address a) const;
+
324 void frag_limit_mem();
+
325 void frag_timeout();
+
326 void frag_drop(ipv4_frag_id frag_id, uint32_t dropped_size);
+
327 void frag_arm(clock_type::time_point now) {
+
328 auto tp = now + _frag_timeout;
+
329 _frag_timer.arm(tp);
+
330 }
+
331 void frag_arm() {
+
332 auto now = clock_type::now();
+
333 frag_arm(now);
+
334 }
+
335public:
+
336 explicit ipv4(interface* netif);
+
337 void set_host_address(ipv4_address ip);
+
338 ipv4_address host_address() const;
+
339 void set_gw_address(ipv4_address ip);
+
340 ipv4_address gw_address() const;
+
341 void set_netmask_address(ipv4_address ip);
+
342 ipv4_address netmask_address() const;
+
343 interface * netif() const {
+
344 return _netif;
+
345 }
+
346 // TODO or something. Should perhaps truly be a list
+
347 // of filters. With ordering. And blackjack. Etc.
+
348 // But for now, a simple single raw pointer suffices
+
349 void set_packet_filter(ip_packet_filter *);
+
350 ip_packet_filter * packet_filter() const;
+
351 void send(ipv4_address to, ip_protocol_num proto_num, packet p, ethernet_address e_dst);
+
352 tcp<ipv4_traits>& get_tcp() { return *_tcp._tcp; }
+
353 ipv4_udp& get_udp() { return _udp; }
+
354 void register_l4(proto_type id, ip_protocol* handler);
+
355 const net::hw_features& hw_features() const { return _netif->hw_features(); }
+
356 static bool needs_frag(packet& p, ip_protocol_num proto_num, net::hw_features hw_features);
+
357 void learn(ethernet_address l2, ipv4_address l3) {
+
358 _arp.learn(l2, l3);
+
359 }
+
360 void register_packet_provider(ipv4_traits::packet_provider_type&& func) {
+
361 _pkt_providers.push_back(std::move(func));
+
362 }
+
363 future<ethernet_address> get_l2_dst_address(ipv4_address to);
+
364};
+
365
+
366template <ip_protocol_num ProtoNum>
+
367inline
+
368void ipv4_l4<ProtoNum>::register_packet_provider(ipv4_traits::packet_provider_type func) {
+
369 _inet.register_packet_provider([func = std::move(func)] {
+
370 auto l4p = func();
+
371 if (l4p) {
+
372 l4p.value().proto_num = ProtoNum;
+
373 }
+
374 return l4p;
+
375 });
+
376}
+
377
+
378template <ip_protocol_num ProtoNum>
+
379inline
+
380future<ethernet_address> ipv4_l4<ProtoNum>::get_l2_dst_address(ipv4_address to) {
+
381 return _inet.get_l2_dst_address(to);
+
382}
+
383
+
384struct ip_hdr {
+
385 uint8_t ihl : 4;
+
386 uint8_t ver : 4;
+
387 uint8_t dscp : 6;
+
388 uint8_t ecn : 2;
+ + +
391 packed<uint16_t> frag;
+
392 enum class frag_bits : uint8_t { mf = 13, df = 14, reserved = 15, offset_shift = 3 };
+
393 uint8_t ttl;
+
394 uint8_t ip_proto;
+
395 packed<uint16_t> csum;
+
396 ipv4_address src_ip;
+
397 ipv4_address dst_ip;
+
398 uint8_t options[0];
+
399 template <typename Adjuster>
+
400 auto adjust_endianness(Adjuster a) {
+
401 return a(len, id, frag, csum, src_ip, dst_ip);
+
402 }
+
403 bool mf() { return frag & (1 << uint8_t(frag_bits::mf)); }
+
404 bool df() { return frag & (1 << uint8_t(frag_bits::df)); }
+
405 uint16_t offset() { return frag << uint8_t(frag_bits::offset_shift); }
+
406} __attribute__((packed));
+
407
+
408template <typename InetTraits>
+
409struct l4connid<InetTraits>::connid_hash : private std::hash<ipaddr>, private std::hash<uint16_t> {
+
410 size_t operator()(const l4connid<InetTraits>& id) const noexcept {
+
411 using h1 = std::hash<ipaddr>;
+
412 using h2 = std::hash<uint16_t>;
+
413 return h1::operator()(id.local_ip)
+
414 ^ h1::operator()(id.foreign_ip)
+
415 ^ h2::operator()(id.local_port)
+
416 ^ h2::operator()(id.foreign_port);
+
417 }
+
418};
+
419
+
420void arp_learn(ethernet_address l2, ipv4_address l3);
+
421
+
422}
+
423
+
424}
+
Definition: array_map.hh:39
+ +
Definition: circular_buffer.hh:63
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Low-resolution and efficient steady clock.
Definition: lowres_clock.hh:56
+
static time_point now() noexcept
Definition: lowres_clock.hh:74
+
holds the metric definition.
Definition: metrics_registration.hh:94
+
Definition: arp.hh:90
+
Definition: arp.hh:58
+
Definition: api.hh:116
+
Definition: net.hh:51
+
Definition: ip.hh:162
+
Definition: net.hh:114
+
Definition: ip.hh:95
+
Definition: ip.hh:184
+ +
Definition: ip.hh:135
+ +
Definition: ip.hh:195
+
Definition: ip.hh:276
+
Definition: net.hh:94
+ +
Definition: packet.hh:87
+
Definition: tcp.hh:291
+ +
void arm(time_point until, std::optional< duration > period={}) noexcept
+
future now()
Returns a ready future.
Definition: later.hh:35
+
holds the metric_groups definition needed by class that reports metrics
+
Definition: net.hh:75
+
Definition: ip.hh:273
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: socket_defs.hh:113
+
Definition: ip_checksum.hh:38
+
Definition: ethernet.hh:37
+
Definition: ip.hh:146
+
Definition: ip.hh:384
+
Definition: ip.hh:241
+
Definition: ipv4_address.hh:35
+ +
Definition: ip.hh:246
+
Definition: ip.hh:63
+ + +
Definition: ip.hh:108
+
Definition: unaligned.hh:58
+
+ + + + diff --git a/master/ip__checksum_8hh_source.html b/master/ip__checksum_8hh_source.html new file mode 100644 index 000000000..82b0751cf --- /dev/null +++ b/master/ip__checksum_8hh_source.html @@ -0,0 +1,161 @@ + + + + + + + +Seastar: seastar/net/ip_checksum.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
ip_checksum.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/net/packet.hh>
+
25#include <seastar/util/modules.hh>
+
26#ifndef SEASTAR_MODULE
+
27#include <cstdint>
+
28#include <cstddef>
+
29#include <arpa/inet.h>
+
30#endif
+
31
+
32namespace seastar {
+
33
+
34namespace net {
+
35
+
36uint16_t ip_checksum(const void* data, size_t len);
+
37
+ +
39 __int128 csum = 0;
+
40 bool odd = false;
+
41 void sum(const char* data, size_t len);
+
42 void sum(const packet& p);
+
43 void sum(uint8_t data) {
+
44 if (!odd) {
+
45 csum += data << 8;
+
46 } else {
+
47 csum += data;
+
48 }
+
49 odd = !odd;
+
50 }
+
51 void sum(uint16_t data) {
+
52 if (odd) {
+
53 sum(uint8_t(data >> 8));
+
54 sum(uint8_t(data));
+
55 } else {
+
56 csum += data;
+
57 }
+
58 }
+
59 void sum(uint32_t data) {
+
60 if (odd) {
+
61 sum(uint16_t(data));
+
62 sum(uint16_t(data >> 16));
+
63 } else {
+
64 csum += data;
+
65 }
+
66 }
+
67 void sum_many() {}
+
68 template <typename T0, typename... T>
+
69 void sum_many(T0 data, T... rest) {
+
70 sum(data);
+
71 sum_many(rest...);
+
72 }
+
73 uint16_t get() const;
+
74};
+
75
+
76}
+
77
+
78}
+
79
+
Definition: packet.hh:87
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: ip_checksum.hh:38
+
+ + + + diff --git a/master/ipv4__address_8hh_source.html b/master/ipv4__address_8hh_source.html new file mode 100644 index 000000000..4c412d9ee --- /dev/null +++ b/master/ipv4__address_8hh_source.html @@ -0,0 +1,179 @@ + + + + + + + +Seastar: seastar/net/ipv4_address.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
ipv4_address.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2022 ScyllaDB
+
20 *
+
21 */
+
22
+
23#pragma once
+
24
+
25#include <seastar/net/socket_defs.hh>
+
26#include <seastar/core/byteorder.hh>
+
27#include <seastar/util/modules.hh>
+
28
+
29namespace seastar {
+
30
+
31namespace net {
+
32
+
33SEASTAR_MODULE_EXPORT_BEGIN
+
34
+ +
36 ipv4_address() noexcept : ip(0) {}
+
37 explicit ipv4_address(uint32_t ip) noexcept : ip(ip) {}
+
38 // throws if addr is not a valid ipv4 address
+
39 explicit ipv4_address(const std::string& addr);
+
40 ipv4_address(ipv4_addr addr) noexcept {
+
41 ip = addr.ip;
+
42 }
+
43
+ +
45
+
46 template <typename Adjuster>
+
47 auto adjust_endianness(Adjuster a) { return a(ip); }
+
48
+
49 friend bool operator==(ipv4_address x, ipv4_address y) noexcept {
+
50 return x.ip == y.ip;
+
51 }
+
52 friend bool operator!=(ipv4_address x, ipv4_address y) noexcept {
+
53 return x.ip != y.ip;
+
54 }
+
55
+
56 static ipv4_address read(const char* p) noexcept {
+
57 ipv4_address ia;
+
58 ia.ip = read_be<uint32_t>(p);
+
59 return ia;
+
60 }
+
61 static ipv4_address consume(const char*& p) noexcept {
+
62 auto ia = read(p);
+
63 p += 4;
+
64 return ia;
+
65 }
+
66 void write(char* p) const noexcept {
+
67 write_be<uint32_t>(p, ip);
+
68 }
+
69 void produce(char*& p) const noexcept {
+
70 produce_be<uint32_t>(p, ip);
+
71 }
+
72 static constexpr size_t size() {
+
73 return 4;
+
74 }
+
75} __attribute__((packed));
+
76
+
77inline bool is_unspecified(ipv4_address addr) noexcept { return addr.ip == 0; }
+
78
+
79std::ostream& operator<<(std::ostream& os, const ipv4_address& a);
+
80
+
81SEASTAR_MODULE_EXPORT_END
+
82
+
83}
+
84
+
85}
+
86
+
87namespace std {
+
88
+
89SEASTAR_MODULE_EXPORT
+
90template <>
+
91struct hash<seastar::net::ipv4_address> {
+
92 size_t operator()(seastar::net::ipv4_address a) const { return a.ip; }
+
93};
+
94
+
95}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
STL namespace.
+
Definition: socket_defs.hh:113
+
Definition: ipv4_address.hh:35
+
Definition: unaligned.hh:58
+
+ + + + diff --git a/master/ipv6__address_8hh_source.html b/master/ipv6__address_8hh_source.html new file mode 100644 index 000000000..38bd54a07 --- /dev/null +++ b/master/ipv6__address_8hh_source.html @@ -0,0 +1,174 @@ + + + + + + + +Seastar: seastar/net/ipv6_address.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
ipv6_address.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2022 ScyllaDB
+
20 *
+
21 */
+
22
+
23#pragma once
+
24
+
25#include <seastar/net/socket_defs.hh>
+
26#include <seastar/core/byteorder.hh>
+
27
+
28#include <array>
+
29
+
30namespace seastar {
+
31
+
32namespace net {
+
33
+ +
35 using ipv6_bytes = std::array<uint8_t, 16>;
+
36
+
37 static_assert(alignof(ipv6_bytes) == 1, "ipv6_bytes should be byte-aligned");
+
38 static_assert(sizeof(ipv6_bytes) == 16, "ipv6_bytes should be 16 bytes");
+
39
+
40 ipv6_address() noexcept;
+
41 explicit ipv6_address(const ::in6_addr&) noexcept;
+
42 explicit ipv6_address(const ipv6_bytes&) noexcept;
+
43 // throws if addr is not a valid ipv6 address
+
44 explicit ipv6_address(const std::string&);
+
45 ipv6_address(const ipv6_addr& addr) noexcept;
+
46
+
47 // No need to use packed - we only store
+
48 // as byte array. If we want to read as
+
49 // uints or whatnot, we must copy
+
50 ipv6_bytes ip;
+
51
+
52 template <typename Adjuster>
+
53 auto adjust_endianness(Adjuster a) { return a(ip); }
+
54
+
55 bool operator==(const ipv6_address& y) const noexcept {
+
56 return bytes() == y.bytes();
+
57 }
+
58 bool operator!=(const ipv6_address& y) const noexcept {
+
59 return !(*this == y);
+
60 }
+
61
+
62 const ipv6_bytes& bytes() const noexcept {
+
63 return ip;
+
64 }
+
65
+
66 bool is_unspecified() const noexcept;
+
67
+
68 static ipv6_address read(const char*) noexcept;
+
69 static ipv6_address consume(const char*& p) noexcept;
+
70 void write(char* p) const noexcept;
+
71 void produce(char*& p) const noexcept;
+
72 static constexpr size_t size() {
+
73 return sizeof(ipv6_bytes);
+
74 }
+
75} __attribute__((packed));
+
76
+
77std::ostream& operator<<(std::ostream&, const ipv6_address&);
+
78
+
79}
+
80
+
81}
+
82
+
83namespace std {
+
84
+
85template <>
+
86struct hash<seastar::net::ipv6_address> {
+
87 size_t operator()(const seastar::net::ipv6_address&) const;
+
88};
+
89
+
90}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
STL namespace.
+
Definition: socket_defs.hh:136
+
Definition: ipv6_address.hh:34
+
Definition: unaligned.hh:58
+
+ + + + diff --git a/master/is__smart__ptr_8hh_source.html b/master/is__smart__ptr_8hh_source.html new file mode 100644 index 000000000..5077bff62 --- /dev/null +++ b/master/is__smart__ptr_8hh_source.html @@ -0,0 +1,117 @@ + + + + + + + +Seastar: seastar/util/is_smart_ptr.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
is_smart_ptr.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2015 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <memory> // for std::unique_ptr
+
25#include <type_traits>
+
26
+
27namespace seastar {
+
28
+
29template<typename T>
+
30struct is_smart_ptr : std::false_type {};
+
31
+
32template<typename T>
+
33struct is_smart_ptr<std::unique_ptr<T>> : std::true_type {};
+
34
+
35}
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
STL namespace.
+
Definition: is_smart_ptr.hh:30
+
+ + + + diff --git a/master/jquery.js b/master/jquery.js new file mode 100644 index 000000000..c9ed3d99c --- /dev/null +++ b/master/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/master/json__elements_8hh_source.html b/master/json__elements_8hh_source.html new file mode 100644 index 000000000..731bf8f55 --- /dev/null +++ b/master/json__elements_8hh_source.html @@ -0,0 +1,348 @@ + + + + + + + +Seastar: seastar/json/json_elements.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
json_elements.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2015 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <string>
+
26#include <vector>
+
27#include <time.h>
+
28#include <sstream>
+
29#endif
+
30
+
31#include <seastar/core/do_with.hh>
+
32#include <seastar/core/loop.hh>
+
33#include <seastar/json/formatter.hh>
+
34#include <seastar/core/sstring.hh>
+
35#include <seastar/core/iostream.hh>
+
36#include <seastar/util/modules.hh>
+
37
+
38namespace seastar {
+
39
+
40namespace json {
+
41
+
42SEASTAR_MODULE_EXPORT_BEGIN
+
43
+ +
53protected:
+ +
58 : _mandatory(false), _set(false) {
+
59 }
+
60
+
61 json_base_element(const json_base_element& o) noexcept = default;
+
62 json_base_element& operator=(const json_base_element& o) noexcept {
+
63 // Names and mandatory are never changed after creation
+
64 _set = o._set;
+
65 return *this;
+
66 }
+
67
+ +
69 json_base_element& operator=(json_base_element&&) = delete;
+
70public:
+
71 virtual ~json_base_element() = default;
+
78 virtual bool is_verify() noexcept {
+
79 return !(_mandatory && !_set);
+
80 }
+
81
+
87 virtual std::string to_string() = 0;
+
88
+
89 virtual future<> write(output_stream<char>& s) const = 0;
+
90 std::string _name;
+
91 bool _mandatory;
+
92 bool _set;
+
93};
+
94
+
101template<class T>
+ +
103public:
+
104
+
111 json_element &operator=(const T& new_value) {
+
112 _value = new_value;
+
113 _set = true;
+
114 return *this;
+
115 }
+
122 template<class C>
+
123 json_element &operator=(const C& new_value) {
+
124 _value = new_value;
+
125 _set = true;
+
126 return *this;
+
127 }
+
132 const T& operator()() const noexcept {
+
133 return _value;
+
134 }
+
135
+
141 virtual std::string to_string() override
+
142 {
+
143 return formatter::to_json(_value);
+
144 }
+
145
+
146 virtual future<> write(output_stream<char>& s) const override {
+
147 return formatter::write(s, _value);
+
148 }
+
149private:
+
150 T _value;
+
151};
+
152
+
159template<class T>
+ +
161public:
+
162
+
167 void push(const T& element) {
+
168 _set = true;
+
169 _elements.push_back(element);
+
170 }
+
171
+
172 virtual std::string to_string() override
+
173 {
+
174 return formatter::to_json(_elements);
+
175 }
+
176
+
181 template<class C>
+
182 json_list& operator=(const C& list) {
+
183 _elements.clear();
+
184 for (auto i : list) {
+
185 push(i);
+
186 }
+
187 return *this;
+
188 }
+
189 virtual future<> write(output_stream<char>& s) const override {
+
190 return formatter::write(s, _elements);
+
191 }
+
192 std::vector<T> _elements;
+
193};
+
194
+
195class jsonable {
+
196public:
+
197 jsonable() = default;
+
198 jsonable(const jsonable&) = default;
+
199 jsonable& operator=(const jsonable&) = default;
+
200 virtual ~jsonable() = default;
+
205 virtual std::string to_json() const = 0;
+
206
+ +
214 return s.write(to_json());
+
215 }
+
216};
+
217
+
228struct json_base : public jsonable {
+
229
+
230 virtual ~json_base() = default;
+
231
+
232 json_base() = default;
+
233
+
234 json_base(const json_base&) = delete;
+
235
+
236 json_base operator=(const json_base&) = delete;
+
237
+
242 virtual std::string to_json() const;
+
243
+ +
248
+
253 virtual bool is_verify() const;
+
254
+
261 virtual void add(json_base_element* element, std::string name,
+
262 bool mandatory = false);
+
263
+
264 std::vector<json_base_element*> _elements;
+
265};
+
266
+
273struct json_void : public jsonable{
+
274 virtual std::string to_json() const {
+
275 return "";
+
276 }
+
277
+ +
282 return s.close();
+
283 }
+
284};
+
285
+
286
+ +
300 sstring _res;
+
301 std::function<future<>(output_stream<char>&&)> _body_writer;
+
302 json_return_type(std::function<future<>(output_stream<char>&&)>&& body_writer) : _body_writer(std::move(body_writer)) {
+
303 }
+
304 template<class T>
+
305 json_return_type(const T& res) {
+
306 _res = formatter::to_json(res);
+
307 }
+
308
+
309 json_return_type(json_return_type&& o) noexcept : _res(std::move(o._res)), _body_writer(std::move(o._body_writer)) {
+
310 }
+
311 json_return_type& operator=(json_return_type&& o) noexcept {
+
312 if (this != &o) {
+
313 _res = std::move(o._res);
+
314 _body_writer = std::move(o._body_writer);
+
315 }
+
316 return *this;
+
317 }
+
318
+
319 json_return_type(const json_return_type&) = default;
+
320 json_return_type& operator=(const json_return_type&) = default;
+
321};
+
322
+
331template<typename Container, typename Func>
+
332requires requires (Container c, Func aa, output_stream<char> s) { { formatter::write(s, aa(*c.begin())) } -> std::same_as<future<>>; }
+
333std::function<future<>(output_stream<char>&&)> stream_range_as_array(Container val, Func fun) {
+
334 return [val = std::move(val), fun = std::move(fun)](output_stream<char>&& s) mutable {
+
335 return do_with(output_stream<char>(std::move(s)), Container(std::move(val)), Func(std::move(fun)), true, [](output_stream<char>& s, const Container& val, const Func& f, bool& first){
+
336 return s.write("[").then([&val, &s, &first, &f] () {
+
337 return do_for_each(val, [&s, &first, &f](const typename Container::value_type& v){
+
338 auto fut = first ? make_ready_future<>() : s.write(", ");
+
339 first = false;
+
340 return fut.then([&s, &f, &v]() {
+
341 return formatter::write(s, f(v));
+
342 });
+
343 });
+
344 }).then([&s](){
+
345 return s.write("]");
+
346 }).finally([&s] {
+
347 return s.close();
+
348 });
+
349 });
+
350 };
+
351}
+
352
+
359template<class T>
+
360std::function<future<>(output_stream<char>&&)> stream_object(T val) {
+
361 return [val = std::move(val)](output_stream<char>&& s) mutable {
+
362 return do_with(output_stream<char>(std::move(s)), T(std::move(val)), [](output_stream<char>& s, const T& val){
+
363 return formatter::write(s, val).finally([&s] {
+
364 return s.close();
+
365 });
+
366 });
+
367 };
+
368}
+
369
+
370SEASTAR_MODULE_EXPORT_END
+
371}
+
372
+
373}
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
Definition: json_elements.hh:52
+
json_base_element() noexcept
Definition: json_elements.hh:57
+
virtual bool is_verify() noexcept
Definition: json_elements.hh:78
+
virtual std::string to_string()=0
+
Definition: json_elements.hh:102
+
json_element & operator=(const C &new_value)
Definition: json_elements.hh:123
+
const T & operator()() const noexcept
Definition: json_elements.hh:132
+
json_element & operator=(const T &new_value)
Definition: json_elements.hh:111
+
virtual std::string to_string() override
Definition: json_elements.hh:141
+
Definition: json_elements.hh:160
+
json_list & operator=(const C &list)
Definition: json_elements.hh:182
+
void push(const T &element)
Definition: json_elements.hh:167
+
virtual std::string to_string() override
Definition: json_elements.hh:172
+
Definition: json_elements.hh:195
+
virtual future write(output_stream< char > &s) const
write an object to the output stream
Definition: json_elements.hh:213
+
virtual std::string to_json() const =0
+ +
future close() noexcept
Definition: iostream-impl.hh:496
+
auto do_with(T1 &&rv1, T2 &&rv2, More &&... more) noexcept
Definition: do_with.hh:135
+
future do_for_each(Iterator begin, Iterator end, AsyncAction action) noexcept
Call a function for each item in a range, sequentially (iterator version).
Definition: loop.hh:462
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: json_elements.hh:228
+
virtual bool is_verify() const
+
virtual future write(output_stream< char > &) const
write to an output stream
+
virtual std::string to_json() const
+
virtual void add(json_base_element *element, std::string name, bool mandatory=false)
+
Definition: json_elements.hh:299
+
Definition: json_elements.hh:273
+
virtual future write(output_stream< char > &s) const
write to an output stream
Definition: json_elements.hh:281
+
virtual std::string to_json() const
Definition: json_elements.hh:274
+
+ + + + diff --git a/master/json__path_8hh_source.html b/master/json__path_8hh_source.html new file mode 100644 index 000000000..3c1dbde69 --- /dev/null +++ b/master/json__path_8hh_source.html @@ -0,0 +1,208 @@ + + + + + + + +Seastar: seastar/http/json_path.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
json_path.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2015 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <vector>
+
26#endif
+
27
+
28#include <seastar/http/common.hh>
+
29#include <seastar/core/sstring.hh>
+
30#include <seastar/http/routes.hh>
+
31#include <seastar/http/function_handlers.hh>
+
32#include <seastar/util/modules.hh>
+
33
+
34namespace seastar {
+
35
+
36namespace httpd {
+
37
+
43SEASTAR_MODULE_EXPORT
+ + +
49 : method(GET) {
+
50 }
+
51
+
57 json_operation(operation_type method, const sstring& nickname)
+
58 : method(method), nickname(nickname) {
+
59 }
+
60
+
61 operation_type method;
+
62 sstring nickname;
+
63
+
64};
+
65
+
81SEASTAR_MODULE_EXPORT
+ +
83 //
+
84 enum class url_component_type {
+
85 PARAM, // a normal path parameter (starts with / and end with / or end of path)
+
86 PARAM_UNTIL_END_OF_PATH, // a parameter that contains all the path entil its end
+
87 FIXED_STRING, // a fixed string inside the path, must be a full match and does not count
+
88 // as a parameter
+
89 };
+
90
+
91 // path_part is either a parameter or a fixed string
+
92 struct path_part {
+
93 sstring name;
+
94 url_component_type type = url_component_type::PARAM;
+
95 };
+
96
+
100 path_description() = default;
+
101
+
111 path_description(const sstring& path, operation_type method,
+
112 const sstring& nickname,
+
113 const std::vector<std::pair<sstring, bool>>& path_parameters,
+
114 const std::vector<sstring>& mandatory_params);
+
115
+
125 path_description(const sstring& path, operation_type method,
+
126 const sstring& nickname,
+
127 const std::initializer_list<path_part>& path_parameters,
+
128 const std::vector<sstring>& mandatory_params);
+
129
+
146 path_description* pushparam(const sstring& param,
+
147 bool all_path = false) {
+
148 params.push_back( { param, (all_path) ? url_component_type::PARAM_UNTIL_END_OF_PATH : url_component_type::PARAM});
+
149 return this;
+
150 }
+
151
+ +
162 params.push_back( { url, url_component_type::FIXED_STRING});
+
163 return this;
+
164 }
+
171 path_description* pushmandatory_param(const sstring& param) {
+
172 mandatory_queryparams.push_back(param);
+
173 return this;
+
174 }
+
175
+
176 std::vector<path_part> params;
+
177 sstring path;
+
178 json_operation operations;
+
179 mutable routes::rule_cookie _cookie;
+
180
+
181 std::vector<sstring> mandatory_queryparams;
+
182
+
183 void set(routes& _routes, handler_base* handler) const;
+
184
+
185 void set(routes& _routes, const json_request_function& f) const;
+
186
+
187 void set(routes& _routes, const future_json_function& f) const;
+
188
+
189 void unset(routes& _routes) const;
+
190};
+
191
+
192}
+
193
+
194}
+
Definition: handlers.hh:42
+
Definition: routes.hh:81
+
Definition: routes.hh:43
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: json_path.hh:44
+
json_operation(operation_type method, const sstring &nickname)
Definition: json_path.hh:57
+
json_operation()
Definition: json_path.hh:48
+
Definition: json_path.hh:82
+
path_description(const sstring &path, operation_type method, const sstring &nickname, const std::initializer_list< path_part > &path_parameters, const std::vector< sstring > &mandatory_params)
+
path_description * push_static_path_part(const sstring &url)
adds a fixed string as part of the path This will allow to combine fixed string URL parts and path pa...
Definition: json_path.hh:161
+
path_description(const sstring &path, operation_type method, const sstring &nickname, const std::vector< std::pair< sstring, bool > > &path_parameters, const std::vector< sstring > &mandatory_params)
+
path_description * pushmandatory_param(const sstring &param)
Definition: json_path.hh:171
+ +
path_description * pushparam(const sstring &param, bool all_path=false)
Definition: json_path.hh:146
+ +
+ + + + diff --git a/master/later_8hh_source.html b/master/later_8hh_source.html new file mode 100644 index 000000000..0d229784e --- /dev/null +++ b/master/later_8hh_source.html @@ -0,0 +1,139 @@ + + + + + + + +Seastar: seastar/util/later.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
later.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18
+
19/*
+
20 * Copyright (C) 2020 ScyllaDB.
+
21 */
+
22
+
23
+
24#pragma once
+
25
+
26#include <seastar/core/future.hh>
+
27
+
28namespace seastar {
+
29
+
32
+
34inline
+ +
36 return make_ready_future<>();
+
37}
+
38
+
45future<> yield() noexcept;
+
46
+
56inline
+
57future<> maybe_yield() noexcept {
+
58 if (need_preempt()) {
+
59 return yield();
+
60 } else {
+
61 return make_ready_future<>();
+
62 }
+
63}
+
64
+ +
75
+
79[[deprecated("Use yield() or check_for_io_immediately()")]]
+
80future<> later() noexcept;
+
81
+
83
+
84} // namespace seastar
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
future maybe_yield() noexcept
Definition: later.hh:57
+
future check_for_io_immediately() noexcept
+
future now()
Returns a ready future.
Definition: later.hh:35
+
future yield() noexcept
Returns a future which is not ready but is scheduled to resolve soon.
+
future later() noexcept
Returns a future which is not ready but is scheduled to resolve soon.
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/layered__file_8hh_source.html b/master/layered__file_8hh_source.html new file mode 100644 index 000000000..be25f2e5e --- /dev/null +++ b/master/layered__file_8hh_source.html @@ -0,0 +1,147 @@ + + + + + + + +Seastar: seastar/core/layered_file.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
layered_file.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2020 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <seastar/core/file.hh>
+
26#include <seastar/util/modules.hh>
+
27#endif
+
28
+
29namespace seastar {
+
30
+
33
+
42SEASTAR_MODULE_EXPORT
+ +
44protected:
+
45 file _underlying_file;
+
46public:
+ +
50 : _underlying_file(std::move(underlying_file)) {
+
51 _memory_dma_alignment = _underlying_file.memory_dma_alignment();
+
52 _disk_read_dma_alignment = _underlying_file.disk_read_dma_alignment();
+
53 _disk_write_dma_alignment = _underlying_file.disk_write_dma_alignment();
+
54 _disk_overwrite_dma_alignment = _underlying_file.disk_overwrite_dma_alignment();
+
55 }
+
56
+
58 file& underlying_file() noexcept {
+
59 return _underlying_file;
+
60 }
+
61
+
63 const file& underlying_file() const noexcept {
+
64 return _underlying_file;
+
65 }
+
66};
+
67
+
68
+
70
+
71
+
72}
+
Definition: file.hh:119
+
Definition: file.hh:193
+
uint64_t memory_dma_alignment() const noexcept
Alignment requirement for data buffers.
Definition: file.hh:264
+
uint64_t disk_read_dma_alignment() const noexcept
Alignment requirement for file offsets (for reads)
Definition: file.hh:244
+
uint64_t disk_overwrite_dma_alignment() const noexcept
Definition: file.hh:259
+
uint64_t disk_write_dma_alignment() const noexcept
Alignment requirement for file offsets (for writes)
Definition: file.hh:249
+
Definition: layered_file.hh:43
+
layered_file_impl(file underlying_file) noexcept
Definition: layered_file.hh:49
+
file & underlying_file() noexcept
The underlying file which can be used to back I/O methods.
Definition: layered_file.hh:58
+
const file & underlying_file() const noexcept
The underlying file which can be used to back I/O methods.
Definition: layered_file.hh:63
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/lazy_8hh_source.html b/master/lazy_8hh_source.html new file mode 100644 index 000000000..41059a021 --- /dev/null +++ b/master/lazy_8hh_source.html @@ -0,0 +1,205 @@ + + + + + + + +Seastar: seastar/util/lazy.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
lazy.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2016 Cloudius Systems, Ltd.
+
20 */
+
21#pragma once
+
22
+
23#include <ostream>
+
24#include <fmt/core.h>
+
25
+
28
+
29namespace seastar {
+
30
+
39template<typename Func>
+
40class lazy_eval {
+
41private:
+
42 Func _func;
+
43
+
44private:
+
45 lazy_eval(Func&& f) : _func(std::forward<Func>(f)) {}
+
46
+
47public:
+
51 auto operator()() {
+
52 return _func();
+
53 }
+
54
+
58 auto operator()() const {
+
59 return _func();
+
60 }
+
61
+
62 template <typename F>
+
63 friend lazy_eval<F> value_of(F&& func);
+
64};
+
65
+
66
+
76template <typename Func>
+
77inline lazy_eval<Func> value_of(Func&& func) {
+
78 return lazy_eval<Func>(std::forward<Func>(func));
+
79}
+
80
+
89template <typename T>
+ +
91 const T& p;
+
92
+
93 constexpr lazy_deref_wrapper(const T& p) : p(p) {
+
94 }
+
95};
+
96
+
106template <typename T>
+ +
108lazy_deref(const T& p) {
+
109 return lazy_deref_wrapper<T>(p);
+
110}
+
111
+
112}
+
113
+
114namespace std {
+
130template <typename Func>
+
131ostream& operator<<(ostream& os, const seastar::lazy_eval<Func>& lf) {
+
132 return os << lf();
+
133}
+
134
+
135template <typename Func>
+
136ostream& operator<<(ostream& os, seastar::lazy_eval<Func>& lf) {
+
137 return os << lf();
+
138}
+
139
+
140template <typename Func>
+
141ostream& operator<<(ostream& os, seastar::lazy_eval<Func>&& lf) {
+
142 return os << lf();
+
143}
+
144
+
145template <typename T>
+
146ostream& operator<<(ostream& os, seastar::lazy_deref_wrapper<T> ld) {
+
147 if (ld.p) {
+
148 return os << *ld.p;
+
149 }
+
150
+
151 return os << "null";
+
152}
+
153}
+
154
+
155template <typename Func>
+
156struct fmt::formatter<seastar::lazy_eval<Func>> : fmt::formatter<string_view> {
+
157 template <typename FormatContext>
+
158 auto format(const seastar::lazy_eval<Func>& lf, FormatContext& ctx) const {
+
159 return fmt::format_to(ctx.out(), "{}", lf());
+
160 }
+
161};
+
162
+
163template <typename T>
+
164struct fmt::formatter<seastar::lazy_deref_wrapper<T>> : fmt::formatter<string_view> {
+
165 template <typename FormatContext>
+
166 auto format(const seastar::lazy_deref_wrapper<T>& ld, FormatContext& ctx) const {
+
167 if (ld.p) {
+
168 return fmt::format_to(ctx.out(), "{}", *ld.p);
+
169 } else {
+
170 return fmt::format_to(ctx.out(), "null");
+
171 }
+
172 }
+
173};
+
174
+
This class is a wrapper for a lazy evaluation of a value.
Definition: lazy.hh:40
+
auto operator()() const
Evaluate a value (const version).
Definition: lazy.hh:58
+
auto operator()()
Evaluate a value.
Definition: lazy.hh:51
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
lazy_eval< Func > value_of(Func &&func)
Definition: lazy.hh:77
+
lazy_deref_wrapper< T > lazy_deref(const T &p)
Definition: lazy.hh:108
+
STL namespace.
+
ostream & operator<<(ostream &os, const seastar::lazy_eval< Func > &lf)
Definition: lazy.hh:131
+
This struct is a wrapper for lazy dereferencing a pointer.
Definition: lazy.hh:90
+
+ + + + diff --git a/master/linux-aio_8hh_source.html b/master/linux-aio_8hh_source.html new file mode 100644 index 000000000..0efdfa57b --- /dev/null +++ b/master/linux-aio_8hh_source.html @@ -0,0 +1,316 @@ + + + + + + + +Seastar: seastar/core/linux-aio.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
linux-aio.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2017 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <endian.h>
+
25#include <sys/time.h>
+
26#include <sys/uio.h>
+
27#include <cstdint>
+
28
+
29namespace seastar {
+
30
+
31namespace internal {
+
32
+
33namespace linux_abi {
+
34
+
35using aio_context_t = unsigned long;
+
36
+
37enum class iocb_cmd : uint16_t {
+
38 PREAD = 0,
+
39 PWRITE = 1,
+
40 FSYNC = 2,
+
41 FDSYNC = 3,
+
42 POLL = 5,
+
43 NOOP = 6,
+
44 PREADV = 7,
+
45 PWRITEV = 8,
+
46};
+
47
+
48struct io_event {
+
49 uint64_t data;
+
50 uint64_t obj;
+
51 int64_t res;
+
52 int64_t res2;
+
53};
+
54
+
55constexpr int IOCB_FLAG_RESFD = 1;
+
56
+
57struct iocb {
+
58 uint64_t aio_data;
+
59
+
60#if __BYTE_ORDER == __LITTLE_ENDIAN
+
61 uint32_t aio_key;
+
62 int32_t aio_rw_flags;
+
63#elif __BYTE_ORDER == __BIG_ENDIAN
+
64 int32_t aio_rw_flags;
+
65 uint32_t aio_key;
+
66#else
+
67#error bad byteorder
+
68#endif
+
69
+
70 iocb_cmd aio_lio_opcode;
+
71 int16_t aio_reqprio;
+
72 uint32_t aio_fildes;
+
73
+
74 uint64_t aio_buf;
+
75 uint64_t aio_nbytes;
+
76 int64_t aio_offset;
+
77
+
78 uint64_t aio_reserved2;
+
79
+
80 uint32_t aio_flags;
+
81
+
82 uint32_t aio_resfd;
+
83};
+
84
+
85struct aio_sigset {
+
86 const sigset_t *sigmask;
+
87 size_t sigsetsize;
+
88};
+
89
+
90}
+
91
+
92linux_abi::iocb make_read_iocb(int fd, uint64_t offset, void* buffer, size_t len);
+
93linux_abi::iocb make_write_iocb(int fd, uint64_t offset, const void* buffer, size_t len);
+
94linux_abi::iocb make_readv_iocb(int fd, uint64_t offset, const ::iovec* iov, size_t niov);
+
95linux_abi::iocb make_writev_iocb(int fd, uint64_t offset, const ::iovec* iov, size_t niov);
+
96linux_abi::iocb make_poll_iocb(int fd, uint32_t events);
+
97
+
98void set_user_data(linux_abi::iocb& iocb, void* data);
+
99void set_nowait(linux_abi::iocb& iocb, bool nowait);
+
100
+
101void set_eventfd_notification(linux_abi::iocb& iocb, int eventfd);
+
102
+
103linux_abi::iocb* get_iocb(const linux_abi::io_event& ioev);
+
104
+
105int io_setup(int nr_events, linux_abi::aio_context_t* io_context);
+
106int io_destroy(linux_abi::aio_context_t io_context) noexcept;
+
107int io_submit(linux_abi::aio_context_t io_context, long nr, linux_abi::iocb** iocbs);
+
108int io_cancel(linux_abi::aio_context_t io_context, linux_abi::iocb* iocb, linux_abi::io_event* result);
+
109int io_getevents(linux_abi::aio_context_t io_context, long min_nr, long nr, linux_abi::io_event* events, const ::timespec* timeout,
+
110 bool force_syscall = false);
+
111int io_pgetevents(linux_abi::aio_context_t io_context, long min_nr, long nr, linux_abi::io_event* events, const ::timespec* timeout, const sigset_t* sigmask,
+
112 bool force_syscall = false);
+
113
+
114void setup_aio_context(size_t nr, linux_abi::aio_context_t* io_context);
+
115
+
116}
+
117
+
118extern bool aio_nowait_supported;
+
119
+
120namespace internal {
+
121
+
122inline
+
123linux_abi::iocb
+
124make_read_iocb(int fd, uint64_t offset, void* buffer, size_t len) {
+
125 linux_abi::iocb iocb{};
+
126 iocb.aio_lio_opcode = linux_abi::iocb_cmd::PREAD;
+
127 iocb.aio_fildes = fd;
+
128 iocb.aio_offset = offset;
+
129 iocb.aio_buf = reinterpret_cast<uintptr_t>(buffer);
+
130 iocb.aio_nbytes = len;
+
131 return iocb;
+
132}
+
133
+
134inline
+
135linux_abi::iocb
+
136make_write_iocb(int fd, uint64_t offset, const void* buffer, size_t len) {
+
137 linux_abi::iocb iocb{};
+
138 iocb.aio_lio_opcode = linux_abi::iocb_cmd::PWRITE;
+
139 iocb.aio_fildes = fd;
+
140 iocb.aio_offset = offset;
+
141 iocb.aio_buf = reinterpret_cast<uintptr_t>(buffer);
+
142 iocb.aio_nbytes = len;
+
143 return iocb;
+
144}
+
145
+
146inline
+
147linux_abi::iocb
+
148make_readv_iocb(int fd, uint64_t offset, const ::iovec* iov, size_t niov) {
+
149 linux_abi::iocb iocb{};
+
150 iocb.aio_lio_opcode = linux_abi::iocb_cmd::PREADV;
+
151 iocb.aio_fildes = fd;
+
152 iocb.aio_offset = offset;
+
153 iocb.aio_buf = reinterpret_cast<uintptr_t>(iov);
+
154 iocb.aio_nbytes = niov;
+
155 return iocb;
+
156}
+
157
+
158inline
+
159linux_abi::iocb
+
160make_writev_iocb(int fd, uint64_t offset, const ::iovec* iov, size_t niov) {
+
161 linux_abi::iocb iocb{};
+
162 iocb.aio_lio_opcode = linux_abi::iocb_cmd::PWRITEV;
+
163 iocb.aio_fildes = fd;
+
164 iocb.aio_offset = offset;
+
165 iocb.aio_buf = reinterpret_cast<uintptr_t>(iov);
+
166 iocb.aio_nbytes = niov;
+
167 return iocb;
+
168}
+
169
+
170inline
+
171linux_abi::iocb
+
172make_poll_iocb(int fd, uint32_t events) {
+
173 linux_abi::iocb iocb{};
+
174 iocb.aio_lio_opcode = linux_abi::iocb_cmd::POLL;
+
175 iocb.aio_fildes = fd;
+
176 iocb.aio_buf = events;
+
177 return iocb;
+
178}
+
179
+
180inline
+
181linux_abi::iocb
+
182make_fdsync_iocb(int fd) {
+
183 linux_abi::iocb iocb{};
+
184 iocb.aio_lio_opcode = linux_abi::iocb_cmd::FDSYNC;
+
185 iocb.aio_fildes = fd;
+
186 return iocb;
+
187}
+
188
+
189inline
+
190void
+
191set_user_data(linux_abi::iocb& iocb, void* data) {
+
192 iocb.aio_data = reinterpret_cast<uintptr_t>(data);
+
193}
+
194
+
195template <typename T>
+
196inline T* get_user_data(const linux_abi::iocb& iocb) noexcept {
+
197 return reinterpret_cast<T*>(uintptr_t(iocb.aio_data));
+
198}
+
199
+
200template <typename T>
+
201inline T* get_user_data(const linux_abi::io_event& ev) noexcept {
+
202 return reinterpret_cast<T*>(uintptr_t(ev.data));
+
203}
+
204
+
205inline
+
206void
+
207set_eventfd_notification(linux_abi::iocb& iocb, int eventfd) {
+
208 iocb.aio_flags |= linux_abi::IOCB_FLAG_RESFD;
+
209 iocb.aio_resfd = eventfd;
+
210}
+
211
+
212inline
+
213linux_abi::iocb*
+
214get_iocb(const linux_abi::io_event& ev) {
+
215 return reinterpret_cast<linux_abi::iocb*>(uintptr_t(ev.obj));
+
216}
+
217
+
218inline
+
219void
+
220set_nowait(linux_abi::iocb& iocb, bool nowait) {
+
221#ifdef RWF_NOWAIT
+
222 if (aio_nowait_supported) {
+
223 if (nowait) {
+
224 iocb.aio_rw_flags |= RWF_NOWAIT;
+
225 } else {
+
226 iocb.aio_rw_flags &= ~RWF_NOWAIT;
+
227 }
+
228 }
+
229#endif
+
230}
+
231
+
232}
+
233
+
234
+
235}
+
236
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/linux__perf__event_8hh_source.html b/master/linux__perf__event_8hh_source.html new file mode 100644 index 000000000..680e25828 --- /dev/null +++ b/master/linux__perf__event_8hh_source.html @@ -0,0 +1,130 @@ + + + + + + + +Seastar: seastar/testing/linux_perf_event.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
linux_perf_event.hh
+
+
+
1/*
+
2 * Copyright (C) 2021-present ScyllaDB
+
3 */
+
4
+
5/*
+
6 * This file is open source software, licensed to you under the terms
+
7 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
8 * distributed with this work for additional information regarding copyright
+
9 * ownership. You may not use this file except in compliance with the License.
+
10 *
+
11 * You may obtain a copy of the License at
+
12 *
+
13 * http://www.apache.org/licenses/LICENSE-2.0
+
14 *
+
15 * Unless required by applicable law or agreed to in writing,
+
16 * software distributed under the License is distributed on an
+
17 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
18 * KIND, either express or implied. See the License for the
+
19 * specific language governing permissions and limitations
+
20 * under the License.
+
21 */
+
22
+
23/*
+
24 * This file was copied from Scylla (https://github.com/scylladb/scylla)
+
25 */
+
26
+
27#pragma once
+
28
+
29
+
30#include <cstdint>
+
31#include <utility>
+
32#include <unistd.h>
+
33
+
34struct perf_event_attr; // from <linux/perf_event.h>
+
35
+ +
37 int _fd = -1;
+
38public:
+
39 linux_perf_event(const struct ::perf_event_attr& attr, pid_t pid, int cpu, int group_fd, unsigned long flags);
+
40 linux_perf_event(linux_perf_event&& x) noexcept : _fd(std::exchange(x._fd, -1)) {}
+
41 linux_perf_event& operator=(linux_perf_event&& x) noexcept;
+ +
43 uint64_t read();
+
44 void enable();
+
45 void disable();
+
46public:
+
47 static linux_perf_event user_instructions_retired();
+
48 static linux_perf_event user_cpu_cycles_retired();
+
49};
+
50
+
Definition: linux_perf_event.hh:36
+
+ + + + diff --git a/master/log-cli_8hh_source.html b/master/log-cli_8hh_source.html new file mode 100644 index 000000000..ddaafe54f --- /dev/null +++ b/master/log-cli_8hh_source.html @@ -0,0 +1,179 @@ + + + + + + + +Seastar: seastar/util/log-cli.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
log-cli.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2017 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <boost/program_options.hpp>
+
26
+
27#include <algorithm>
+
28#include <unordered_map>
+
29#endif
+
30
+
31#include <seastar/util/log.hh>
+
32#include <seastar/util/program-options.hh>
+
33
+
34#include <seastar/core/sstring.hh>
+
35
+
36
+
39namespace seastar {
+
40
+
44namespace log_cli {
+
45
+
49boost::program_options::options_description get_options_description();
+
50
+
51using log_level_map = std::unordered_map<sstring, log_level>;
+
52
+ + + + + + + +
86
+ + +
94};
+
95
+
99void print_available_loggers(std::ostream& os);
+
100
+ +
106
+
108void parse_map_associations(const std::string& v, std::function<void(std::string, std::string)> consume_key_value);
+
110
+
111//
+
112// \brief Parse associations from loggers to log-levels and write the resulting pairs to the output iterator.
+
113//
+
114// \throws \c std::runtime_error for an invalid log-level.
+
115//
+
116template <class OutputIter>
+
117void parse_logger_levels(const program_options::string_map& levels, OutputIter out) {
+
118 std::for_each(levels.begin(), levels.end(), [&out](auto&& pair) {
+
119 *out++ = std::make_pair(pair.first, parse_log_level(pair.second));
+
120 });
+
121}
+
122
+
125//
+
126logging_settings extract_settings(const boost::program_options::variables_map&);
+
127
+
131logging_settings extract_settings(const options&);
+
132
+
133}
+
134
+
135}
+
136
+
Definition: program-options.hh:292
+
Wrapper for command-line options with arbitrary string associations.
Definition: program-options.hh:73
+ +
log_level
log level used with
Definition: log.hh:55
+
log_level parse_log_level(const sstring &)
Parse a log-level ({error, warn, info, debug, trace}) string, throwing std::runtime_error for an inva...
+
logging_settings extract_settings(const boost::program_options::variables_map &)
Extract CLI options into a logging configuration.
+
boost::program_options::options_description get_options_description()
Options for controlling logging at run-time.
+
void print_available_loggers(std::ostream &os)
Print a human-friendly list of the available loggers.
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Logging configuration.
Definition: log-cli.hh:54
+
program_options::value< bool > log_to_stdout
Send log output to output stream.
Definition: log-cli.hh:76
+
program_options::value< seastar::logger_ostream_type > logger_ostream_type
Definition: log-cli.hh:81
+
program_options::value< log_level_map > logger_log_level
Map of logger name to log level.
Definition: log-cli.hh:66
+
program_options::value< bool > log_with_color
Definition: log-cli.hh:90
+
program_options::value< logger_timestamp_style > logger_stdout_timestamps
Definition: log-cli.hh:71
+
program_options::value< log_level > default_log_level
Default log level for log messages.
Definition: log-cli.hh:60
+
program_options::value< bool > log_to_syslog
Definition: log-cli.hh:85
+
+ + + + diff --git a/master/log-impl_8hh_source.html b/master/log-impl_8hh_source.html new file mode 100644 index 000000000..a99879df6 --- /dev/null +++ b/master/log-impl_8hh_source.html @@ -0,0 +1,176 @@ + + + + + + + +Seastar: seastar/util/log-impl.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
log-impl.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2020 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <iterator>
+
25
+
28
+
29namespace seastar {
+
30
+
32namespace internal {
+
33
+
42class log_buf {
+
43 char* _begin;
+
44 char* _end;
+
45 char* _current;
+
46 bool _own_buf;
+
47 bool _alloc_failure = false;
+
48private:
+
49 void free_buffer() noexcept;
+
50 void realloc_buffer_and_append(char c) noexcept;
+
51
+
52public:
+
53 // inserter_iterator is designed like std::back_insert_iterator:
+
54 // operator*, operator++ and operator++(int) are no-ops,
+
55 // and all the work happens in operator=, which pushes a character
+
56 // to the buffer.
+
57 // The iterator stores no state of its own.
+
58 //
+
59 // inserter_iterator is supposed to be used as an output_iterator.
+
60 // That is, assignment is expected to alternate with incrementing.
+
61 class inserter_iterator {
+
62 public:
+
63 using iterator_category = std::output_iterator_tag;
+
64 using difference_type = std::ptrdiff_t;
+
65 using value_type = void;
+
66 using pointer = void;
+
67 using reference = void;
+
68
+
69 private:
+
70 log_buf* _buf;
+
71
+
72 public:
+
73 explicit inserter_iterator(log_buf& buf) noexcept : _buf(&buf) { }
+
74
+
75 inserter_iterator& operator=(char c) noexcept {
+
76 if (__builtin_expect(_buf->_current == _buf->_end, false)) {
+
77 _buf->realloc_buffer_and_append(c);
+
78 return *this;
+
79 }
+
80 *_buf->_current++ = c;
+
81 return *this;
+
82 }
+
83 inserter_iterator& operator*() noexcept {
+
84 return *this;
+
85 }
+
86 inserter_iterator& operator++() noexcept {
+
87 return *this;
+
88 }
+
89 inserter_iterator operator++(int) noexcept {
+
90 return *this;
+
91 }
+
92 };
+
93
+
97 log_buf();
+
102 log_buf(char* external_buf, size_t size) noexcept;
+
103 ~log_buf();
+
107 void clear() { _current = _begin; }
+
109 inserter_iterator back_insert_begin() noexcept { return inserter_iterator(*this); }
+
111 size_t size() const noexcept { return _current - _begin; }
+
113 size_t capacity() const noexcept { return _end - _begin; }
+
117 const char* data() const noexcept { return _begin; }
+
119 std::string_view view() const noexcept { return std::string_view(_begin, size()); }
+
120};
+
121
+
122} // namespace internal
+
124
+
125} // namespace seastar
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/log_8hh_source.html b/master/log_8hh_source.html new file mode 100644 index 000000000..aa363fdbe --- /dev/null +++ b/master/log_8hh_source.html @@ -0,0 +1,497 @@ + + + + + + + +Seastar: seastar/util/log.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
log.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2015 Cloudius Systems, Ltd.
+
20 */
+
21#pragma once
+
22
+
23#include <seastar/core/sstring.hh>
+
24#include <seastar/util/backtrace.hh>
+
25#include <seastar/util/log-impl.hh>
+
26#include <seastar/core/lowres_clock.hh>
+
27#include <seastar/util/std-compat.hh>
+
28#include <seastar/util/modules.hh>
+
29
+
30#ifndef SEASTAR_MODULE
+
31#include <concepts>
+
32#include <unordered_map>
+
33#include <exception>
+
34#include <iosfwd>
+
35#include <atomic>
+
36#include <mutex>
+
37#include <type_traits>
+
38#include <boost/lexical_cast.hpp>
+
39#include <fmt/core.h>
+
40#include <fmt/format.h>
+
41#endif
+
42
+
45
+
46namespace seastar {
+
47
+
48SEASTAR_MODULE_EXPORT_BEGIN
+
49
+
55enum class log_level {
+
56 error,
+
57 warn,
+
58 info,
+
59 debug,
+
60 trace,
+
61};
+
62
+
63std::ostream& operator<<(std::ostream& out, log_level level);
+
64std::istream& operator>>(std::istream& in, log_level& level);
+
65
+
66SEASTAR_MODULE_EXPORT_END
+
67}
+
68
+
69template <>
+
70struct fmt::formatter<seastar::log_level> {
+
71 constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); }
+
72 auto format(seastar::log_level level, fmt::format_context& ctx) const -> decltype(ctx.out());
+
73};
+
74
+
75// Boost doesn't auto-deduce the existence of the streaming operators for some reason
+
76
+
77namespace boost {
+
78template<>
+
79seastar::log_level lexical_cast(const std::string& source);
+
80
+
81}
+
82
+
83namespace seastar {
+
84SEASTAR_MODULE_EXPORT_BEGIN
+
85class logger;
+
86class logger_registry;
+
87
+
99class logger {
+
100 sstring _name;
+
101 std::atomic<log_level> _level = { log_level::info };
+
102 static std::ostream* _out;
+
103 static std::atomic<bool> _ostream;
+
104 static std::atomic<bool> _syslog;
+
105 static unsigned _shard_field_width;
+
106#ifdef SEASTAR_BUILD_SHARED_LIBS
+
107 static thread_local bool silent;
+
108#else
+
109 static inline thread_local bool silent = false;
+
110#endif
+
111
+
112public:
+
113 class log_writer {
+
114 public:
+
115 virtual ~log_writer() = default;
+
116 virtual internal::log_buf::inserter_iterator operator()(internal::log_buf::inserter_iterator) = 0;
+
117 };
+
118 template <typename Func>
+
119 requires requires (Func fn, internal::log_buf::inserter_iterator it) {
+
120 it = fn(it);
+
121 }
+
122 class lambda_log_writer : public log_writer {
+
123 Func _func;
+
124 public:
+
125 lambda_log_writer(Func&& func) : _func(std::forward<Func>(func)) { }
+
126 virtual ~lambda_log_writer() override = default;
+
127 virtual internal::log_buf::inserter_iterator operator()(internal::log_buf::inserter_iterator it) override { return _func(it); }
+
128 };
+
129
+
132#ifdef SEASTAR_LOGGER_COMPILE_TIME_FMT
+
133 template<typename... Args>
+
134 struct format_info {
+
137 template<
+
138 typename S,
+
139 std::enable_if_t<std::is_convertible_v<const S&, std::string_view>, int> = 0>
+
140 FMT_CONSTEVAL inline format_info(const S& format,
+
141 compat::source_location loc = compat::source_location::current()) noexcept
+
142 : format(format)
+
143 , loc(loc)
+
144 {}
+
149 inline format_info(fmt::format_string<Args...> s,
+
150 compat::source_location loc = compat::source_location::current()) noexcept
+
151 : format(s)
+
152 , loc(loc)
+
153 {}
+
154#if FMT_VERSION >= 100000
+
155 using runtime_format_string_t = fmt::runtime_format_string<char>;
+
156#else
+
157 using runtime_format_string_t = fmt::basic_runtime<char>;
+
158#endif
+
159 inline format_info(runtime_format_string_t s,
+
160 compat::source_location loc = compat::source_location::current()) noexcept
+
161 : format(s)
+
162 , loc(loc)
+
163 {}
+
165 FMT_CONSTEVAL format_info() noexcept
+
166 : format_info("")
+
167 {}
+
168 fmt::format_string<Args...> format;
+
169 compat::source_location loc;
+
170 };
+
171#ifdef __cpp_lib_type_identity
+
172 template <typename T>
+
173 using type_identity_t = typename std::type_identity<T>::type;
+
174#else
+
175 template <typename T> struct type_identity { using type = T; };
+
176 template <typename T> using type_identity_t = typename type_identity<T>::type;
+
177#endif
+
178 template <typename... Args>
+
179 using format_info_t = format_info<type_identity_t<Args>...>;
+
180#else // SEASTAR_LOGGER_COMPILE_TIME_FMT
+
183 struct format_info {
+
186 format_info(const char* format, compat::source_location loc = compat::source_location::current()) noexcept
+
187 : format(format)
+
188 , loc(loc)
+
189 {}
+
192 format_info(std::string_view format, compat::source_location loc = compat::source_location::current()) noexcept
+
193 : format(format)
+
194 , loc(loc)
+
195 {}
+
197 format_info(compat::source_location loc = compat::source_location::current()) noexcept
+
198 : format()
+
199 , loc(loc)
+
200 {}
+
201 std::string_view format;
+
202 compat::source_location loc;
+
203 };
+
204 // to reduce the number of #ifdefs, let's be compatible with the templated
+
205 // format_info
+
206 template <typename...>
+
207 using format_info_t = format_info;
+
208#endif // SEASTAR_LOGGER_COMPILE_TIME_FMT
+
209
+
210private:
+
211
+
212 // We can't use an std::function<> as it potentially allocates.
+
213 void do_log(log_level level, log_writer& writer);
+
214 void failed_to_log(std::exception_ptr ex,
+
215 fmt::string_view fmt,
+
216 compat::source_location loc) noexcept;
+
217
+
218 class silencer {
+
219 public:
+
220 silencer() noexcept {
+
221 silent = true;
+
222 }
+
223
+
224 ~silencer() {
+
225 silent = false;
+
226 }
+
227 };
+
228
+
229public:
+
251 class rate_limit {
+
252 friend class logger;
+
253
+
254 using clock = lowres_clock;
+
255
+
256 private:
+
257 clock::duration _interval;
+
258 clock::time_point _next;
+
259 uint64_t _dropped_messages = 0;
+
260
+
261 private:
+
262 bool check();
+
263 bool has_dropped_messages() const { return bool(_dropped_messages); }
+
264 uint64_t get_and_reset_dropped_messages() {
+
265 return std::exchange(_dropped_messages, 0);
+
266 }
+
267
+
268 public:
+
269 explicit rate_limit(std::chrono::milliseconds interval);
+
270 };
+
271
+
272public:
+
273 explicit logger(sstring name);
+
274 logger(logger&& x);
+
275 ~logger();
+
276
+
277 bool is_shard_zero() noexcept;
+
278
+
283 bool is_enabled(log_level level) const noexcept {
+
284 return __builtin_expect(level <= _level.load(std::memory_order_relaxed), false) && !silent;
+
285 }
+
286
+
293 template <typename... Args>
+
294 void log(log_level level, format_info_t<Args...> fmt, Args&&... args) noexcept {
+
295 if (is_enabled(level)) {
+
296 try {
+
297 lambda_log_writer writer([&] (internal::log_buf::inserter_iterator it) {
+
298#if defined(SEASTAR_LOGGER_COMPILE_TIME_FMT) || FMT_VERSION < 80000
+
299 return fmt::format_to(it, fmt.format, std::forward<Args>(args)...);
+
300#else
+
301 return fmt::format_to(it, fmt::runtime(fmt.format), std::forward<Args>(args)...);
+
302#endif
+
303 });
+
304 do_log(level, writer);
+
305 } catch (...) {
+
306 failed_to_log(std::current_exception(), fmt::string_view(fmt.format), fmt.loc);
+
307 }
+
308 }
+
309 }
+
310
+
325 template <typename... Args>
+
326 void log(log_level level, rate_limit& rl, format_info_t<Args...> fmt, Args&&... args) noexcept {
+
327 if (is_enabled(level) && rl.check()) {
+
328 try {
+
329 lambda_log_writer writer([&] (internal::log_buf::inserter_iterator it) {
+
330 if (rl.has_dropped_messages()) {
+
331 it = fmt::format_to(it, "(rate limiting dropped {} similar messages) ", rl.get_and_reset_dropped_messages());
+
332 }
+
333#if FMT_VERSION >= 80000
+
334 return fmt::format_to(it, fmt::runtime(fmt.format), std::forward<Args>(args)...);
+
335#else
+
336 return fmt::format_to(it, fmt.format, std::forward<Args>(args)...);
+
337#endif
+
338 });
+
339 do_log(level, writer);
+
340 } catch (...) {
+
341 failed_to_log(std::current_exception(), fmt::string_view(fmt.format), fmt.loc);
+
342 }
+
343 }
+
344 }
+
345
+
356 void log(log_level level, rate_limit& rl, log_writer& writer, format_info_t<> fmt = {}) noexcept {
+
357 if (is_enabled(level) && rl.check()) {
+
358 try {
+
359 lambda_log_writer writer_wrapper([&] (internal::log_buf::inserter_iterator it) {
+
360 if (rl.has_dropped_messages()) {
+
361 it = fmt::format_to(it, "(rate limiting dropped {} similar messages) ", rl.get_and_reset_dropped_messages());
+
362 }
+
363 return writer(it);
+
364 });
+
365 do_log(level, writer_wrapper);
+
366 } catch (...) {
+
367 failed_to_log(std::current_exception(), "", fmt.loc);
+
368 }
+
369 }
+
370 }
+
372
+
380 template <typename... Args>
+
381 void error(format_info_t<Args...> fmt, Args&&... args) noexcept {
+
382 log(log_level::error, std::move(fmt), std::forward<Args>(args)...);
+
383 }
+
391 template <typename... Args>
+
392 void warn(format_info_t<Args...> fmt, Args&&... args) noexcept {
+
393 log(log_level::warn, std::move(fmt), std::forward<Args>(args)...);
+
394 }
+
402 template <typename... Args>
+
403 void info(format_info_t<Args...> fmt, Args&&... args) noexcept {
+
404 log(log_level::info, std::move(fmt), std::forward<Args>(args)...);
+
405 }
+
413 template <typename... Args>
+
414 void info0(format_info_t<Args...> fmt, Args&&... args) noexcept {
+
415 if (is_shard_zero()) {
+
416 log(log_level::info, std::move(fmt), std::forward<Args>(args)...);
+
417 }
+
418 }
+
426 template <typename... Args>
+
427 void debug(format_info_t<Args...> fmt, Args&&... args) noexcept {
+
428 log(log_level::debug, std::move(fmt), std::forward<Args>(args)...);
+
429 }
+
437 template <typename... Args>
+
438 void trace(format_info_t<Args...> fmt, Args&&... args) noexcept {
+
439 log(log_level::trace, std::move(fmt), std::forward<Args>(args)...);
+
440 }
+
441
+
444 const sstring& name() const noexcept {
+
445 return _name;
+
446 }
+
447
+
450 log_level level() const noexcept {
+
451 return _level.load(std::memory_order_relaxed);
+
452 }
+
453
+
456 void set_level(log_level level) noexcept {
+
457 _level.store(level, std::memory_order_relaxed);
+
458 }
+
459
+
461 static void set_ostream(std::ostream& out) noexcept;
+
462
+
464 static void set_ostream_enabled(bool enabled) noexcept;
+
465
+
467 [[deprecated("Use set_ostream_enabled instead")]]
+
468 static void set_stdout_enabled(bool enabled) noexcept;
+
469
+
475 static void set_syslog_enabled(bool enabled) noexcept;
+
476
+
484 static void set_shard_field_width(unsigned width) noexcept;
+
485
+
489 static void set_with_color(bool enabled) noexcept;
+
490};
+
491
+
500class logger_registry {
+
501 mutable std::mutex _mutex;
+
502 std::unordered_map<sstring, logger*> _loggers;
+
503public:
+
508 void set_all_loggers_level(log_level level);
+
509
+
514 log_level get_logger_level(sstring name) const;
+
515
+
521 void set_logger_level(sstring name, log_level level);
+
522
+
527 std::vector<sstring> get_all_logger_names();
+
528
+
532 void register_logger(logger* l);
+
536 void unregister_logger(logger* l);
+
540 void moved(logger* from, logger* to);
+
541};
+
542
+
543logger_registry& global_logger_registry();
+
544
+
546enum class logger_timestamp_style {
+
547 none,
+
548 boot,
+
549 real,
+
550};
+
551
+
553enum class logger_ostream_type {
+
554 none,
+
555#ifdef SEASTAR_LOGGER_TYPE_STDOUT
+
556 stdout __attribute__ ((deprecated ("use cout instead"))) = 1,
+
557 stderr __attribute__ ((deprecated ("use cerr instead"))) = 2,
+
558#endif
+
559 cout = 1,
+
560 cerr = 2,
+
561};
+
562
+
563struct logging_settings final {
+
564 std::unordered_map<sstring, log_level> logger_levels;
+
565 log_level default_level;
+
566 bool stdout_enabled;
+
567 bool syslog_enabled;
+
568 bool with_color;
+
569 logger_timestamp_style stdout_timestamp_style = logger_timestamp_style::real;
+
570 logger_ostream_type logger_ostream = logger_ostream_type::cerr;
+
571};
+
572
+
575void apply_logging_settings(const logging_settings&);
+
576
+
577SEASTAR_MODULE_EXPORT_END
+
578
+
580
+
581extern thread_local uint64_t logging_failures;
+
582
+
583sstring pretty_type_name(const std::type_info&);
+
584
+
585sstring level_name(log_level level);
+
586
+
587template <typename T>
+
588class logger_for : public logger {
+
589public:
+
590 logger_for() : logger(pretty_type_name(typeid(T))) {}
+
591};
+
592
+
594} // end seastar namespace
+
595
+
596// Pretty-printer for exceptions to be logged, e.g., std::current_exception().
+
597namespace std {
+
598std::ostream& operator<<(std::ostream&, const std::exception_ptr&);
+
599std::ostream& operator<<(std::ostream&, const std::exception&);
+
600std::ostream& operator<<(std::ostream&, const std::system_error&);
+
601}
+
602
+
603#if FMT_VERSION >= 90000
+
604template <> struct fmt::formatter<std::exception_ptr> : fmt::ostream_formatter {};
+
605template <> struct fmt::formatter<std::exception> : fmt::ostream_formatter {};
+
606template <> struct fmt::formatter<std::system_error> : fmt::ostream_formatter {};
+
607#endif
+
608
+
log_level
log level used with
Definition: log.hh:55
+
@ none
Dump diagnostic error report for none of the allocation failures.
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
sstring format(const char *fmt, A &&... a)
Definition: print.hh:143
+
STL namespace.
+
ostream & operator<<(ostream &os, const seastar::lazy_eval< Func > &lf)
Definition: lazy.hh:131
+
+ + + + diff --git a/master/loop_8hh_source.html b/master/loop_8hh_source.html new file mode 100644 index 000000000..1eee9f37a --- /dev/null +++ b/master/loop_8hh_source.html @@ -0,0 +1,713 @@ + + + + + + + +Seastar: seastar/core/loop.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
loop.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18
+
19/*
+
20 * Copyright (C) 2020 ScyllaDB.
+
21 */
+
22
+
23#pragma once
+
24
+
25#ifndef SEASTAR_MODULE
+
26#include <cassert>
+
27#include <cstddef>
+
28#include <iterator>
+
29#include <memory>
+
30#include <optional>
+
31#include <type_traits>
+
32#include <vector>
+
33#endif
+
34#include <seastar/core/future.hh>
+
35#include <seastar/core/task.hh>
+
36#include <seastar/util/bool_class.hh>
+
37#include <seastar/util/modules.hh>
+
38#include <seastar/core/semaphore.hh>
+
39
+
40namespace seastar {
+
41
+
42SEASTAR_MODULE_EXPORT_BEGIN
+
43
+
46
+
47// The AsyncAction concept represents an action which can complete later than
+
48// the actual function invocation. It is represented by a function which
+
49// returns a future which resolves when the action is done.
+
50
+ + +
53
+
54namespace internal {
+
55
+
56template <typename AsyncAction>
+
57class repeater final : public continuation_base<stop_iteration> {
+
58 promise<> _promise;
+
59 AsyncAction _action;
+
60public:
+
61 explicit repeater(AsyncAction&& action) : _action(std::move(action)) {}
+
62 future<> get_future() { return _promise.get_future(); }
+
63 task* waiting_task() noexcept override { return _promise.waiting_task(); }
+
64 virtual void run_and_dispose() noexcept override {
+
65 if (_state.failed()) {
+
66 _promise.set_exception(std::move(_state).get_exception());
+
67 delete this;
+
68 return;
+
69 } else {
+
70 if (_state.get() == stop_iteration::yes) {
+
71 _promise.set_value();
+
72 delete this;
+
73 return;
+
74 }
+
75 _state = {};
+
76 }
+
77 try {
+
78 do {
+
79 auto f = futurize_invoke(_action);
+
80 if (!f.available()) {
+
81 internal::set_callback(std::move(f), this);
+
82 return;
+
83 }
+
84 if (f.get() == stop_iteration::yes) {
+
85 _promise.set_value();
+
86 delete this;
+
87 return;
+
88 }
+
89 } while (!need_preempt());
+
90 } catch (...) {
+
91 _promise.set_exception(std::current_exception());
+
92 delete this;
+
93 return;
+
94 }
+
95 _state.set(stop_iteration::no);
+
96 schedule(this);
+
97 }
+
98};
+
99
+
100} // namespace internal
+
101
+
102// Delete these overloads so that the actual implementation can use a
+
103// universal reference but still reject lvalue references.
+
104template<typename AsyncAction>
+
105future<> repeat(const AsyncAction& action) noexcept = delete;
+
106template<typename AsyncAction>
+
107future<> repeat(AsyncAction& action) noexcept = delete;
+
108
+
118template<typename AsyncAction>
+
119requires std::is_invocable_r_v<stop_iteration, AsyncAction> || std::is_invocable_r_v<future<stop_iteration>, AsyncAction>
+
120inline
+
121future<> repeat(AsyncAction&& action) noexcept {
+ +
123 static_assert(std::is_same_v<future<stop_iteration>, typename futurator::type>, "bad AsyncAction signature");
+
124 for (;;) {
+
125 // Do not type-erase here in case this is a short repeat()
+
126 auto f = futurator::invoke(action);
+
127
+
128 if (!f.available() || f.failed() || need_preempt()) {
+
129 return [&] () noexcept {
+ +
131 auto repeater = new internal::repeater<AsyncAction>(std::move(action));
+
132 auto ret = repeater->get_future();
+
133 internal::set_callback(std::move(f), repeater);
+
134 return ret;
+
135 }();
+
136 }
+
137
+
138 if (f.get() == stop_iteration::yes) {
+
139 return make_ready_future<>();
+
140 }
+
141 }
+
142}
+
143
+
145
+
146template <typename T>
+
147struct repeat_until_value_type_helper;
+
148
+
150template <typename T>
+
151struct repeat_until_value_type_helper<future<std::optional<T>>> {
+
153 using value_type = T;
+
155 using optional_type = std::optional<T>;
+
157 using future_type = future<value_type>;
+
158};
+
159
+
161template <typename AsyncAction>
+
162using repeat_until_value_return_type
+
163 = typename repeat_until_value_type_helper<typename futurize<std::invoke_result_t<AsyncAction>>::type>::future_type;
+
164
+
166
+
167namespace internal {
+
168
+
169template <typename AsyncAction, typename T>
+
170class repeat_until_value_state final : public continuation_base<std::optional<T>> {
+
171 promise<T> _promise;
+
172 AsyncAction _action;
+
173public:
+
174 explicit repeat_until_value_state(AsyncAction action) : _action(std::move(action)) {}
+
175 repeat_until_value_state(std::optional<T> st, AsyncAction action) : repeat_until_value_state(std::move(action)) {
+
176 this->_state.set(std::move(st));
+
177 }
+
178 future<T> get_future() { return _promise.get_future(); }
+
179 task* waiting_task() noexcept override { return _promise.waiting_task(); }
+
180 virtual void run_and_dispose() noexcept override {
+
181 if (this->_state.failed()) {
+
182 _promise.set_exception(std::move(this->_state).get_exception());
+
183 delete this;
+
184 return;
+
185 } else {
+
186 auto v = std::move(this->_state).get();
+
187 if (v) {
+
188 _promise.set_value(std::move(*v));
+
189 delete this;
+
190 return;
+
191 }
+
192 this->_state = {};
+
193 }
+
194 try {
+
195 do {
+
196 auto f = futurize_invoke(_action);
+
197 if (!f.available()) {
+
198 internal::set_callback(std::move(f), this);
+
199 return;
+
200 }
+
201 auto ret = f.get();
+
202 if (ret) {
+
203 _promise.set_value(std::move(*ret));
+
204 delete this;
+
205 return;
+
206 }
+
207 } while (!need_preempt());
+
208 } catch (...) {
+
209 _promise.set_exception(std::current_exception());
+
210 delete this;
+
211 return;
+
212 }
+
213 this->_state.set(std::nullopt);
+
214 schedule(this);
+
215 }
+
216};
+
217
+
218} // namespace internal
+
219
+
231template<typename AsyncAction>
+
232requires requires (AsyncAction aa) {
+
233 bool(futurize_invoke(aa).get());
+
234 futurize_invoke(aa).get().value();
+
235}
+
236repeat_until_value_return_type<AsyncAction>
+
237repeat_until_value(AsyncAction action) noexcept {
+ +
239 using type_helper = repeat_until_value_type_helper<typename futurator::type>;
+
240 // the "T" in the documentation
+
241 using value_type = typename type_helper::value_type;
+
242 using optional_type = typename type_helper::optional_type;
+
243 do {
+
244 auto f = futurator::invoke(action);
+
245
+
246 if (!f.available()) {
+
247 return [&] () noexcept {
+ +
249 auto state = new internal::repeat_until_value_state<AsyncAction, value_type>(std::move(action));
+
250 auto ret = state->get_future();
+
251 internal::set_callback(std::move(f), state);
+
252 return ret;
+
253 }();
+
254 }
+
255
+
256 if (f.failed()) {
+
257 return make_exception_future<value_type>(f.get_exception());
+
258 }
+
259
+
260 optional_type&& optional = std::move(f).get();
+
261 if (optional) {
+
262 return make_ready_future<value_type>(std::move(optional.value()));
+
263 }
+
264 } while (!need_preempt());
+
265
+
266 try {
+
267 auto state = new internal::repeat_until_value_state<AsyncAction, value_type>(std::nullopt, std::move(action));
+
268 auto f = state->get_future();
+
269 schedule(state);
+
270 return f;
+
271 } catch (...) {
+
272 return make_exception_future<value_type>(std::current_exception());
+
273 }
+
274}
+
275
+
276namespace internal {
+
277
+
278template <typename StopCondition, typename AsyncAction>
+
279class do_until_state final : public continuation_base<> {
+
280 promise<> _promise;
+
281 StopCondition _stop;
+
282 AsyncAction _action;
+
283public:
+
284 explicit do_until_state(StopCondition stop, AsyncAction action) : _stop(std::move(stop)), _action(std::move(action)) {}
+
285 future<> get_future() { return _promise.get_future(); }
+
286 task* waiting_task() noexcept override { return _promise.waiting_task(); }
+
287 virtual void run_and_dispose() noexcept override {
+
288 if (_state.available()) {
+
289 if (_state.failed()) {
+
290 _promise.set_urgent_state(std::move(_state));
+
291 delete this;
+
292 return;
+
293 }
+
294 _state = {}; // allow next cycle to overrun state
+
295 }
+
296 try {
+
297 do {
+
298 if (_stop()) {
+
299 _promise.set_value();
+
300 delete this;
+
301 return;
+
302 }
+
303 auto f = _action();
+
304 if (!f.available()) {
+
305 internal::set_callback(std::move(f), this);
+
306 return;
+
307 }
+
308 if (f.failed()) {
+
309 f.forward_to(std::move(_promise));
+
310 delete this;
+
311 return;
+
312 }
+
313 } while (!need_preempt());
+
314 } catch (...) {
+
315 _promise.set_exception(std::current_exception());
+
316 delete this;
+
317 return;
+
318 }
+
319 schedule(this);
+
320 }
+
321};
+
322
+
323} // namespace internal
+
324
+
330// in the returned future.
+
336template<typename AsyncAction, typename StopCondition>
+
337requires std::is_invocable_r_v<bool, StopCondition> && std::is_invocable_r_v<future<>, AsyncAction>
+
338inline
+
339future<> do_until(StopCondition stop_cond, AsyncAction action) noexcept {
+
340 using namespace internal;
+
341 for (;;) {
+
342 try {
+
343 if (stop_cond()) {
+
344 return make_ready_future<>();
+
345 }
+
346 } catch (...) {
+ +
348 }
+
349 auto f = futurize_invoke(action);
+
350 if (f.failed()) {
+
351 return f;
+
352 }
+
353 if (!f.available() || need_preempt()) {
+
354 return [&] () noexcept {
+ +
356 auto task = new do_until_state<StopCondition, AsyncAction>(std::move(stop_cond), std::move(action));
+
357 auto ret = task->get_future();
+
358 internal::set_callback(std::move(f), task);
+
359 return ret;
+
360 }();
+
361 }
+
362 }
+
363}
+
364
+
372template<typename AsyncAction>
+
373requires std::is_invocable_r_v<future<>, AsyncAction>
+
374inline
+
375future<> keep_doing(AsyncAction action) noexcept {
+
376 return repeat([action = std::move(action)] () mutable {
+
377 return action().then([] {
+
378 return stop_iteration::no;
+
379 });
+
380 });
+
381}
+
382
+
383namespace internal {
+
384template <typename Iterator, typename AsyncAction>
+
385class do_for_each_state final : public continuation_base<> {
+
386 Iterator _begin;
+
387 Iterator _end;
+
388 AsyncAction _action;
+
389 promise<> _pr;
+
390
+
391public:
+
392 do_for_each_state(Iterator begin, Iterator end, AsyncAction action, future<>&& first_unavailable)
+
393 : _begin(std::move(begin)), _end(std::move(end)), _action(std::move(action)) {
+
394 internal::set_callback(std::move(first_unavailable), this);
+
395 }
+
396 virtual void run_and_dispose() noexcept override {
+
397 std::unique_ptr<do_for_each_state> zis(this);
+
398 if (_state.failed()) {
+
399 _pr.set_urgent_state(std::move(_state));
+
400 return;
+
401 }
+
402 while (_begin != _end) {
+
403 auto f = futurize_invoke(_action, *_begin++);
+
404 if (f.failed()) {
+
405 f.forward_to(std::move(_pr));
+
406 return;
+
407 }
+
408 if (!f.available() || need_preempt()) {
+
409 _state = {};
+
410 internal::set_callback(std::move(f), this);
+
411 zis.release();
+
412 return;
+
413 }
+
414 }
+
415 _pr.set_value();
+
416 }
+
417 task* waiting_task() noexcept override {
+
418 return _pr.waiting_task();
+
419 }
+
420 future<> get_future() {
+
421 return _pr.get_future();
+
422 }
+
423};
+
424
+
425template<typename Iterator, typename AsyncAction>
+
426inline
+
427future<> do_for_each_impl(Iterator begin, Iterator end, AsyncAction action) {
+
428 while (begin != end) {
+
429 auto f = futurize_invoke(action, *begin++);
+
430 if (f.failed()) {
+
431 return f;
+
432 }
+
433 if (!f.available() || need_preempt()) {
+
434 auto* s = new internal::do_for_each_state<Iterator, AsyncAction>{
+
435 std::move(begin), std::move(end), std::move(action), std::move(f)};
+
436 return s->get_future();
+
437 }
+
438 }
+
439 return make_ready_future<>();
+
440}
+
441} // namespace internal
+
442
+
444
+
457template<typename Iterator, typename AsyncAction>
+
458requires requires (Iterator i, AsyncAction aa) {
+
459 { futurize_invoke(aa, *i) } -> std::same_as<future<>>;
+
460}
+
461inline
+
462future<> do_for_each(Iterator begin, Iterator end, AsyncAction action) noexcept {
+
463 try {
+
464 return internal::do_for_each_impl(std::move(begin), std::move(end), std::move(action));
+
465 } catch (...) {
+ +
467 }
+
468}
+
469
+
481template<typename Container, typename AsyncAction>
+
482requires requires (Container c, AsyncAction aa) {
+
483 { futurize_invoke(aa, *std::begin(c)) } -> std::same_as<future<>>;
+
484 std::end(c);
+
485}
+
486inline
+
487future<> do_for_each(Container& c, AsyncAction action) noexcept {
+
488 try {
+
489 return internal::do_for_each_impl(std::begin(c), std::end(c), std::move(action));
+
490 } catch (...) {
+ +
492 }
+
493}
+
494
+
495namespace internal {
+
496
+
497template <typename T, typename = void>
+
498struct has_iterator_category : std::false_type {};
+
499
+
500template <typename T>
+
501struct has_iterator_category<T, std::void_t<typename std::iterator_traits<T>::iterator_category >> : std::true_type {};
+
502
+
503template <typename Iterator, typename Sentinel, typename IteratorCategory>
+
504inline
+
505size_t
+
506iterator_range_estimate_vector_capacity(Iterator begin, Sentinel end, IteratorCategory) {
+
507 // May be linear time below random_access_iterator_tag, but still better than reallocation
+
508 if constexpr (std::is_base_of_v<std::forward_iterator_tag, IteratorCategory>) {
+
509 return std::distance(begin, end);
+
510 }
+
511
+
512 // For InputIterators we can't estimate needed capacity
+
513 return 0;
+
514}
+
515
+
516} // namespace internal
+
517
+
519
+
520class parallel_for_each_state final : private continuation_base<> {
+
521 std::vector<future<>> _incomplete;
+
522 promise<> _result;
+
523 std::exception_ptr _ex;
+
524private:
+
525 // Wait for one of the futures in _incomplete to complete, and then
+
526 // decide what to do: wait for another one, or deliver _result if all
+
527 // are complete.
+
528 void wait_for_one() noexcept;
+
529 virtual void run_and_dispose() noexcept override;
+
530 task* waiting_task() noexcept override { return _result.waiting_task(); }
+
531public:
+
532 parallel_for_each_state(size_t n);
+
533 void add_future(future<>&& f);
+
534 future<> get_future();
+
535};
+
536
+
538
+
558template <typename Iterator, typename Sentinel, typename Func>
+
559requires (requires (Func f, Iterator i) { { f(*i) } -> std::same_as<future<>>; { i++ }; } && (std::same_as<Sentinel, Iterator> || std::sentinel_for<Sentinel, Iterator>))
+
560// We use a conjunction with std::same_as<Sentinel, Iterator> because std::sentinel_for requires Sentinel to be semiregular,
+
561// which implies that it requires Sentinel to be default-constructible, which is unnecessarily strict in below's context and could
+
562// break legacy code, for which it holds that Sentinel equals Iterator.
+
563inline
+
564future<>
+
565parallel_for_each(Iterator begin, Sentinel end, Func&& func) noexcept {
+
566 parallel_for_each_state* s = nullptr;
+
567 // Process all elements, giving each future the following treatment:
+
568 // - available, not failed: do nothing
+
569 // - available, failed: collect exception in ex
+
570 // - not available: collect in s (allocating it if needed)
+
571 while (begin != end) {
+
572 auto f = futurize_invoke(std::forward<Func>(func), *begin);
+
573 ++begin;
+ +
575 if (!f.available() || f.failed()) {
+
576 if (!s) {
+
577 using itraits = std::iterator_traits<Iterator>;
+
578 size_t n{0U};
+
579 if constexpr (internal::has_iterator_category<Iterator>::value) {
+
580 // We need if-constexpr here because there exist iterators for which std::iterator_traits
+
581 // does not have 'iterator_category' as member type
+
582 n = (internal::iterator_range_estimate_vector_capacity(begin, end, typename itraits::iterator_category{}) + 1);
+
583 }
+
584 s = new parallel_for_each_state(n);
+
585 }
+
586 s->add_future(std::move(f));
+
587 }
+
588 }
+
589 // If any futures were not available, hand off to parallel_for_each_state::start().
+
590 // Otherwise we can return a result immediately.
+
591 if (s) {
+
592 // s->get_future() takes ownership of s (and chains it to one of the futures it contains)
+
593 // so this isn't a leak
+
594 return s->get_future();
+
595 }
+
596 return make_ready_future<>();
+
597}
+
598
+
618
+
619namespace internal {
+
620
+
621template <typename Range, typename Func>
+
622inline
+
623future<>
+
624parallel_for_each_impl(Range&& range, Func&& func) {
+
625 return parallel_for_each(std::begin(range), std::end(range),
+
626 std::forward<Func>(func));
+
627}
+
628
+
629} // namespace internal
+
630
+
631template <typename Range, typename Func>
+
632requires requires (Func f, Range r) {
+
633 { f(*std::begin(r)) } -> std::same_as<future<>>;
+
634 std::end(r);
+
635}
+
636inline
+
637future<>
+
638parallel_for_each(Range&& range, Func&& func) noexcept {
+
639 auto impl = internal::parallel_for_each_impl<Range, Func>;
+
640 return futurize_invoke(impl, std::forward<Range>(range), std::forward<Func>(func));
+
641}
+
642
+
664template <typename Iterator, typename Sentinel, typename Func>
+
665requires (requires (Func f, Iterator i) { { f(*i) } -> std::same_as<future<>>; { ++i }; } && (std::same_as<Sentinel, Iterator> || std::sentinel_for<Sentinel, Iterator>) )
+
666// We use a conjunction with std::same_as<Sentinel, Iterator> because std::sentinel_for requires Sentinel to be semiregular,
+
667// which implies that it requires Sentinel to be default-constructible, which is unnecessarily strict in below's context and could
+
668// break legacy code, for which it holds that Sentinel equals Iterator.
+
669inline
+
670future<>
+
671max_concurrent_for_each(Iterator begin, Sentinel end, size_t max_concurrent, Func&& func) noexcept {
+
672 struct state {
+
673 Iterator begin;
+
674 Sentinel end;
+
675 Func func;
+
676 size_t max_concurrent;
+
677 semaphore sem;
+
678 std::exception_ptr err;
+
679
+
680 state(Iterator begin_, Sentinel end_, size_t max_concurrent_, Func func_)
+
681 : begin(std::move(begin_))
+
682 , end(std::move(end_))
+
683 , func(std::move(func_))
+
684 , max_concurrent(max_concurrent_)
+
685 , sem(max_concurrent_)
+
686 , err()
+
687 { }
+
688 };
+
689
+
690 assert(max_concurrent > 0);
+
691
+
692 try {
+
693 return do_with(state(std::move(begin), std::move(end), max_concurrent, std::forward<Func>(func)), [] (state& s) {
+
694 return do_until([&s] { return s.begin == s.end; }, [&s] {
+
695 return s.sem.wait().then([&s] () mutable noexcept {
+
696 // Possibly run in background and signal _sem when the task is done.
+
697 // The background tasks are waited on using _sem.
+
698 (void)futurize_invoke(s.func, *s.begin).then_wrapped([&s] (future<> fut) {
+
699 if (fut.failed()) {
+
700 auto e = fut.get_exception();;
+
701 if (!s.err) {
+
702 s.err = std::move(e);
+
703 }
+
704 }
+
705 s.sem.signal();
+
706 });
+
707 ++s.begin;
+
708 });
+
709 }).then([&s] {
+
710 // Wait for any background task to finish
+
711 // and signal and semaphore
+
712 return s.sem.wait(s.max_concurrent);
+
713 }).then([&s] {
+
714 if (!s.err) {
+
715 return make_ready_future<>();
+
716 }
+
717 return seastar::make_exception_future<>(std::move(s.err));
+
718 });
+
719 });
+
720 } catch (...) {
+ +
722 }
+
723}
+
724
+
745template <typename Range, typename Func>
+
746requires requires (Func f, Range r) {
+
747 { f(*std::begin(r)) } -> std::same_as<future<>>;
+
748 std::end(r);
+
749}
+
750inline
+
751future<>
+
752max_concurrent_for_each(Range&& range, size_t max_concurrent, Func&& func) noexcept {
+
753 try {
+
754 return max_concurrent_for_each(std::begin(range), std::end(range), max_concurrent, std::forward<Func>(func));
+
755 } catch (...) {
+ +
757 }
+
758}
+
759
+
761
+
762SEASTAR_MODULE_EXPORT_END
+
763
+
764} // namespace seastar
+ +
Type-safe boolean.
Definition: bool_class.hh:58
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+ +
void set_value(A &&... a) noexcept
Sets the promises value.
Definition: future.hh:990
+
Definition: task.hh:34
+
future< T > get_future() noexcept
Gets the promise's associated future.
Definition: future.hh:1926
+
future< T > current_exception_as_future() noexcept
Returns std::current_exception() wrapped in a future.
Definition: future.hh:1962
+
future max_concurrent_for_each(Iterator begin, Sentinel end, size_t max_concurrent, Func &&func) noexcept
Definition: loop.hh:671
+
auto do_with(T1 &&rv1, T2 &&rv2, More &&... more) noexcept
Definition: do_with.hh:135
+
future do_until(StopCondition stop_cond, AsyncAction action) noexcept
Definition: loop.hh:339
+
future keep_doing(AsyncAction action) noexcept
Definition: loop.hh:375
+
repeat_until_value_return_type< AsyncAction > repeat_until_value(AsyncAction action) noexcept
Definition: loop.hh:237
+
future do_for_each(Iterator begin, Iterator end, AsyncAction action) noexcept
Call a function for each item in a range, sequentially (iterator version).
Definition: loop.hh:462
+
future parallel_for_each(Iterator begin, Sentinel end, Func &&func) noexcept
Run tasks in parallel (iterator version).
Definition: loop.hh:565
+
future max_concurrent_for_each(Range &&range, size_t max_concurrent, Func &&func) noexcept
Definition: loop.hh:752
+
Definition: loop.hh:51
+
holds the implementation parts of the metrics layer, do not use directly.
+
Definition: critical_alloc_section.hh:80
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
STL namespace.
+
Converts a type to a future type, if it isn't already.
Definition: future.hh:1853
+
+ + + + diff --git a/master/lowres__clock_8hh_source.html b/master/lowres__clock_8hh_source.html new file mode 100644 index 000000000..c55af756b --- /dev/null +++ b/master/lowres__clock_8hh_source.html @@ -0,0 +1,185 @@ + + + + + + + +Seastar: seastar/core/lowres_clock.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
lowres_clock.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2016 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <seastar/core/cacheline.hh>
+
26#include <seastar/core/timer.hh>
+
27#include <seastar/util/modules.hh>
+
28
+
29#include <chrono>
+
30#endif
+
31
+
32namespace seastar {
+
33
+
34SEASTAR_MODULE_EXPORT_BEGIN
+
35
+
36//
+
37// Forward declarations.
+
38//
+
39
+
40class lowres_clock;
+
41class lowres_system_clock;
+
42
+
44
+
45//
+
56class lowres_clock final {
+
57public:
+
58 using rep = std::chrono::steady_clock::rep;
+
59 using period = std::chrono::steady_clock::period;
+
60 using duration = std::chrono::steady_clock::duration;
+
61 using time_point = std::chrono::time_point<lowres_clock, duration>;
+
62 static constexpr bool is_steady = true;
+
63private:
+
64#ifdef SEASTAR_BUILD_SHARED_LIBS
+
65 static thread_local time_point _now;
+
66#else
+
67 // Use inline variable to prevent the compiler from introducing an initialization guard
+
68 inline static thread_local time_point _now;
+
69#endif
+
70public:
+
74 static time_point now() noexcept {
+
75 return _now;
+
76 }
+
77
+
78 static void update() noexcept;
+
79};
+
80
+ +
91public:
+
92 using rep = std::chrono::system_clock::rep;
+
93 using period = std::chrono::system_clock::period;
+
94 using duration = std::chrono::system_clock::duration;
+
95 using time_point = std::chrono::time_point<lowres_system_clock, duration>;
+
96 static constexpr bool is_steady = false;
+
97private:
+
98#ifdef SEASTAR_BUILD_SHARED_LIBS
+
99 static thread_local time_point _now;
+
100#else
+
101 // Use inline variable to prevent the compiler from introducing an initialization guard
+
102 inline static thread_local time_point _now;
+
103#endif
+
104 friend class lowres_clock; // for updates
+
105public:
+
109 static time_point now() noexcept {
+
110 return _now;
+
111 }
+
112
+
113 static std::time_t to_time_t(time_point t) noexcept {
+
114 return std::chrono::duration_cast<std::chrono::seconds>(t.time_since_epoch()).count();
+
115 }
+
116
+
117 static time_point from_time_t(std::time_t t) noexcept {
+
118 return time_point(std::chrono::duration_cast<duration>(std::chrono::seconds(t)));
+
119 }
+
120};
+
121
+
122extern template class timer<lowres_clock>;
+
123
+
124SEASTAR_MODULE_EXPORT_END
+
125}
+
126
+
Low-resolution and efficient steady clock.
Definition: lowres_clock.hh:56
+
static time_point now() noexcept
Definition: lowres_clock.hh:74
+
Low-resolution and efficient system clock.
Definition: lowres_clock.hh:90
+
static time_point now() noexcept
Definition: lowres_clock.hh:109
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+ +
+ + + + diff --git a/master/lz4__compressor_8hh_source.html b/master/lz4__compressor_8hh_source.html new file mode 100644 index 000000000..12e82403a --- /dev/null +++ b/master/lz4__compressor_8hh_source.html @@ -0,0 +1,133 @@ + + + + + + + +Seastar: seastar/rpc/lz4_compressor.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
lz4_compressor.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2016 Scylladb, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/sstring.hh>
+
25#include <seastar/rpc/rpc_types.hh>
+
26
+
27namespace seastar {
+
28
+
29namespace rpc {
+
30 class lz4_compressor : public compressor {
+
31 public:
+ +
33 public:
+
34 virtual const sstring& supported() const override;
+
35 virtual std::unique_ptr<rpc::compressor> negotiate(sstring feature, bool is_server) const override;
+
36 };
+
37 public:
+ +
39 // compress data, leaving head_space empty in returned buffer
+
40 snd_buf compress(size_t head_space, snd_buf data) override;
+
41 // decompress data
+
42 rcv_buf decompress(rcv_buf data) override;
+
43 sstring name() const override;
+
44 };
+
45}
+
46
+
47}
+
Definition: rpc_types.hh:291
+
Definition: rpc_types.hh:280
+
Definition: lz4_compressor.hh:32
+
Definition: lz4_compressor.hh:30
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: rpc_types.hh:240
+
Definition: rpc_types.hh:252
+
+ + + + diff --git a/master/lz4__fragmented__compressor_8hh_source.html b/master/lz4__fragmented__compressor_8hh_source.html new file mode 100644 index 000000000..c76f6fa34 --- /dev/null +++ b/master/lz4__fragmented__compressor_8hh_source.html @@ -0,0 +1,130 @@ + + + + + + + +Seastar: seastar/rpc/lz4_fragmented_compressor.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
lz4_fragmented_compressor.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2019 Scylladb, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/sstring.hh>
+
25#include <seastar/rpc/rpc_types.hh>
+
26
+
27namespace seastar {
+
28namespace rpc {
+
29
+ +
31public:
+
32 class factory final : public rpc::compressor::factory {
+
33 public:
+
34 virtual const sstring& supported() const override;
+
35 virtual std::unique_ptr<rpc::compressor> negotiate(sstring feature, bool is_server) const override;
+
36 };
+
37public:
+
38 virtual snd_buf compress(size_t head_space, snd_buf data) override;
+
39 virtual rcv_buf decompress(rcv_buf data) override;
+
40 sstring name() const override;
+
41};
+
42
+
43}
+
44}
+
Definition: rpc_types.hh:291
+
Definition: rpc_types.hh:280
+
Definition: lz4_fragmented_compressor.hh:32
+
Definition: lz4_fragmented_compressor.hh:30
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: rpc_types.hh:240
+
Definition: rpc_types.hh:252
+
+ + + + diff --git a/master/magic_8hh_source.html b/master/magic_8hh_source.html new file mode 100644 index 000000000..a84f01b3f --- /dev/null +++ b/master/magic_8hh_source.html @@ -0,0 +1,163 @@ + + + + + + + +Seastar: seastar/util/internal/magic.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
magic.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2022 ScyllaDB.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <linux/magic.h>
+
26#endif
+
27
+
28namespace seastar {
+
29
+
30#ifndef XFS_SUPER_MAGIC
+
31#define XFS_SUPER_MAGIC 0x58465342
+
32#endif
+
33
+
34#ifndef EXT2_SUPER_MAGIC
+
35#define EXT2_SUPER_MAGIC 0xEF53
+
36#endif
+
37
+
38#ifndef EXT3_SUPER_MAGIC
+
39#define EXT3_SUPER_MAGIC 0xEF53
+
40#endif
+
41
+
42#ifndef EXT4_SUPER_MAGIC
+
43#define EXT4_SUPER_MAGIC 0xEF53
+
44#endif
+
45
+
46#ifndef NFS_SUPER_MAGIC
+
47#define NFS_SUPER_MAGIC 0x6969
+
48#endif
+
49
+
50#ifndef TMPFS_MAGIC
+
51#define TMPFS_MAGIC 0x01021994
+
52#endif
+
53
+
54#ifndef FUSE_SUPER_MAGIC
+
55#define FUSE_SUPER_MAGIC 0x65735546
+
56#endif
+
57
+
58#ifndef BTRFS_SUPER_MAGIC
+
59#define BTRFS_SUPER_MAGIC 0x9123683E
+
60#endif
+
61
+
62#ifndef HFS_SUPER_MAGIC
+
63#define HFS_SUPER_MAGIC 0x4244
+
64#endif
+
65
+
66namespace internal {
+
67
+
68class fs_magic {
+
69public:
+
70 static constexpr unsigned long xfs = XFS_SUPER_MAGIC;
+
71 static constexpr unsigned long ext2 = EXT2_SUPER_MAGIC;
+
72 static constexpr unsigned long ext3 = EXT3_SUPER_MAGIC;
+
73 static constexpr unsigned long ext4 = EXT4_SUPER_MAGIC;
+
74 static constexpr unsigned long nfs = NFS_SUPER_MAGIC;
+
75 static constexpr unsigned long tmpfs = TMPFS_MAGIC;
+
76 static constexpr unsigned long fuse = FUSE_SUPER_MAGIC;
+
77 static constexpr unsigned long btrfs = BTRFS_SUPER_MAGIC;
+
78 static constexpr unsigned long hfs = HFS_SUPER_MAGIC;
+
79};
+
80
+
81} // internal namespace
+
82
+
83} // seastar namespace
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/make__task_8hh_source.html b/master/make__task_8hh_source.html new file mode 100644 index 000000000..ef7c1438a --- /dev/null +++ b/master/make__task_8hh_source.html @@ -0,0 +1,156 @@ + + + + + + + +Seastar: seastar/core/make_task.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
make_task.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2015 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <seastar/core/task.hh>
+
26#include <seastar/core/future.hh>
+
27#include <seastar/util/modules.hh>
+
28#endif
+
29
+
30namespace seastar {
+
31
+
32SEASTAR_MODULE_EXPORT_BEGIN
+
33
+
34template <typename Func>
+
35class lambda_task final : public task {
+
36 Func _func;
+ +
38 typename futurator::promise_type _result;
+
39public:
+
40 lambda_task(scheduling_group sg, const Func& func) : task(sg), _func(func) {}
+
41 lambda_task(scheduling_group sg, Func&& func) : task(sg), _func(std::move(func)) {}
+
42 typename futurator::type get_future() noexcept { return _result.get_future(); }
+
43 virtual void run_and_dispose() noexcept override {
+
44 futurator::invoke(_func).forward_to(std::move(_result));
+
45 delete this;
+
46 }
+
47 virtual task* waiting_task() noexcept override {
+
48 return _result.waiting_task();
+
49 }
+
50};
+
51
+
52template <typename Func>
+
53inline
+
54lambda_task<Func>*
+
55make_task(Func&& func) noexcept {
+
56 return new lambda_task<Func>(current_scheduling_group(), std::forward<Func>(func));
+
57}
+
58
+
59template <typename Func>
+
60inline
+
61lambda_task<Func>*
+
62make_task(scheduling_group sg, Func&& func) noexcept {
+
63 return new lambda_task<Func>(sg, std::forward<Func>(func));
+
64}
+
65
+
66SEASTAR_MODULE_EXPORT_END
+
67
+
68}
+
Definition: make_task.hh:35
+
virtual task * waiting_task() noexcept override
Returns the next task which is waiting for this task to complete execution, or nullptr.
Definition: make_task.hh:47
+
Identifies function calls that are accounted as a group.
Definition: scheduling.hh:285
+
Definition: task.hh:34
+
virtual task * waiting_task() noexcept=0
Returns the next task which is waiting for this task to complete execution, or nullptr.
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
scheduling_group current_scheduling_group() noexcept
Returns the current scheduling group.
Definition: scheduling.hh:399
+
Converts a type to a future type, if it isn't already.
Definition: future.hh:1853
+
static type invoke(Func &&func, FuncArgs &&... args) noexcept
+
+ + + + diff --git a/master/manual__clock_8hh_source.html b/master/manual__clock_8hh_source.html new file mode 100644 index 000000000..19fad20b8 --- /dev/null +++ b/master/manual__clock_8hh_source.html @@ -0,0 +1,138 @@ + + + + + + + +Seastar: seastar/core/manual_clock.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
manual_clock.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2016 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#ifndef SEASTAR_MODULE
+
25#include <seastar/core/timer.hh>
+
26#include <seastar/util/modules.hh>
+
27
+
28#include <atomic>
+
29#include <chrono>
+
30#endif
+
31
+
32namespace seastar {
+
33
+
34SEASTAR_MODULE_EXPORT
+ +
36public:
+
37 using rep = int64_t;
+
38 using period = std::chrono::nanoseconds::period;
+
39 using duration = std::chrono::duration<rep, period>;
+
40 using time_point = std::chrono::time_point<manual_clock, duration>;
+
41private:
+
42 static std::atomic<rep> _now;
+
43 static void expire_timers() noexcept;
+
44public:
+
45 manual_clock() noexcept;
+
46 static time_point now() noexcept {
+
47 return time_point(duration(_now.load(std::memory_order_relaxed)));
+
48 }
+
49 static void advance(duration d) noexcept;
+
50};
+
51
+
52extern template class timer<manual_clock>;
+
53
+
54}
+
55
+
Definition: manual_clock.hh:35
+
Definition: timer.hh:83
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+ +
+ + + + diff --git a/master/map__reduce_8hh_source.html b/master/map__reduce_8hh_source.html new file mode 100644 index 000000000..699fa83d8 --- /dev/null +++ b/master/map__reduce_8hh_source.html @@ -0,0 +1,265 @@ + + + + + + + +Seastar: seastar/core/map_reduce.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
map_reduce.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18
+
19/*
+
20 * Copyright (C) 2020 ScyllaDB.
+
21 */
+
22
+
23#pragma once
+
24
+
25#ifndef SEASTAR_MODULE
+
26#include <iterator>
+
27
+
28#include <seastar/core/future.hh>
+
29#include <seastar/core/shared_ptr.hh>
+
30#include <seastar/util/modules.hh>
+
31#endif
+
32
+
33namespace seastar {
+
34
+
35SEASTAR_MODULE_EXPORT_BEGIN
+
36
+
39
+
41
+
42template <typename T, typename Ptr, bool IsFuture>
+
43struct reducer_with_get_traits;
+
44
+
45template <typename T, typename Ptr>
+
46struct reducer_with_get_traits<T, Ptr, false> {
+
47 using result_type = decltype(std::declval<T>().get());
+
48 using future_type = future<result_type>;
+
49 static future_type maybe_call_get(future<> f, Ptr r) {
+
50 return f.then([r = std::move(r)] () mutable {
+
51 return make_ready_future<result_type>(std::move(r->reducer).get());
+
52 });
+
53 }
+
54};
+
55
+
56template <typename T, typename Ptr>
+
57struct reducer_with_get_traits<T, Ptr, true> {
+
58 using future_type = decltype(std::declval<T>().get());
+
59 static future_type maybe_call_get(future<> f, Ptr r) {
+
60 return f.then([r = r.get()] {
+
61 return r->reducer.get();
+
62 }).then_wrapped([r] (future_type f) {
+
63 return f;
+
64 });
+
65 }
+
66};
+
67
+
68template <typename T, typename Ptr = lw_shared_ptr<T>, typename V = void>
+
69struct reducer_traits {
+
70 using future_type = future<>;
+
71 static future_type maybe_call_get(future<> f, Ptr r) {
+
72 return f.then([r = std::move(r)] {});
+
73 }
+
74};
+
75
+
76template <typename T, typename Ptr>
+
77struct reducer_traits<T, Ptr, decltype(std::declval<T>().get(), void())> : public reducer_with_get_traits<T, Ptr, is_future<std::invoke_result_t<decltype(&T::get),T>>::value> {};
+
78
+
80
+
96
+
97// TODO: specialize for non-deferring reducer
+
98template <typename Iterator, typename Mapper, typename Reducer>
+
99requires requires (Iterator i, Mapper mapper, Reducer reduce) {
+
100 *i++;
+
101 { i != i } -> std::convertible_to<bool>;
+
102 mapper(*i);
+
103 reduce(futurize_invoke(mapper, *i).get());
+
104}
+
105inline
+
106auto
+
107map_reduce(Iterator begin, Iterator end, Mapper&& mapper, Reducer&& r)
+
108 -> typename reducer_traits<Reducer>::future_type
+
109{
+
110 struct state {
+
111 Mapper mapper;
+
112 Reducer reducer;
+
113 };
+
114 auto s = make_lw_shared(state{std::forward<Mapper>(mapper), std::forward<Reducer>(r)});
+
115 future<> ret = make_ready_future<>();
+
116 while (begin != end) {
+
117 ret = futurize_invoke(s->mapper, *begin++).then_wrapped([ret = std::move(ret), s] (auto f) mutable {
+
118 return ret.then_wrapped([f = std::move(f), s] (auto rf) mutable {
+
119 if (rf.failed()) {
+
120 f.ignore_ready_future();
+
121 return rf;
+
122 } else {
+
123 return futurize_invoke(s->reducer, std::move(f.get()));
+
124 }
+
125 });
+
126 });
+
127 }
+
128 return reducer_traits<Reducer, lw_shared_ptr<state>>::maybe_call_get(std::move(ret), s);
+
129}
+
130
+
173template <typename Iterator, typename Mapper, typename Initial, typename Reduce>
+
174requires requires (Iterator i, Mapper mapper, Initial initial, Reduce reduce) {
+
175 *i++;
+
176 { i != i} -> std::convertible_to<bool>;
+
177 mapper(*i);
+
178 requires is_future<decltype(mapper(*i))>::value;
+
179 { reduce(std::move(initial), mapper(*i).get()) } -> std::convertible_to<Initial>;
+
180}
+
181inline
+
182future<Initial>
+
183map_reduce(Iterator begin, Iterator end, Mapper&& mapper, Initial initial, Reduce reduce) {
+
184 struct state {
+
185 Mapper mapper;
+
186 Initial result;
+
187 Reduce reduce;
+
188 };
+
189 auto s = make_lw_shared(state{std::forward<Mapper>(mapper), std::move(initial), std::move(reduce)});
+
190 future<> ret = make_ready_future<>();
+
191 while (begin != end) {
+
192 ret = futurize_invoke(s->mapper, *begin++).then_wrapped([s = s.get(), ret = std::move(ret)] (auto f) mutable {
+
193 try {
+
194 s->result = s->reduce(std::move(s->result), f.get());
+
195 return std::move(ret);
+
196 } catch (...) {
+
197 return std::move(ret).then_wrapped([ex = std::current_exception()] (auto f) {
+
198 f.ignore_ready_future();
+
199 return make_exception_future<>(ex);
+
200 });
+
201 }
+
202 });
+
203 }
+
204 return ret.then([s] {
+
205 return make_ready_future<Initial>(std::move(s->result));
+
206 });
+
207}
+
208
+
251template <typename Range, typename Mapper, typename Initial, typename Reduce>
+
252requires requires (Range range, Mapper mapper, Initial initial, Reduce reduce) {
+
253 std::begin(range);
+
254 std::end(range);
+
255 mapper(*std::begin(range));
+
256 requires is_future<std::remove_reference_t<decltype(mapper(*std::begin(range)))>>::value;
+
257 { reduce(std::move(initial), mapper(*std::begin(range)).get()) } -> std::convertible_to<Initial>;
+
258}
+
259inline
+
260future<Initial>
+
261map_reduce(Range&& range, Mapper&& mapper, Initial initial, Reduce reduce) {
+
262 return map_reduce(std::begin(range), std::end(range), std::forward<Mapper>(mapper),
+
263 std::move(initial), std::move(reduce));
+
264}
+
265
+
268template <typename Result, typename Addend = Result>
+
269class adder {
+
270private:
+
271 Result _result;
+
272public:
+
273 future<> operator()(const Addend& value) {
+
274 _result += value;
+
275 return make_ready_future<>();
+
276 }
+
277 Result get() && {
+
278 return std::move(_result);
+
279 }
+
280};
+
281
+
283
+
284SEASTAR_MODULE_EXPORT_END
+
285
+
286} // namespace seastar
+
Definition: map_reduce.hh:269
+
A representation of a possibly not-yet-computed value.
Definition: future.hh:1240
+
auto map_reduce(Iterator begin, Iterator end, Mapper &&mapper, Reducer &&r) -> typename reducer_traits< Reducer >::future_type
Definition: map_reduce.hh:107
+
future< Initial > map_reduce(Range &&range, Mapper &&mapper, Initial initial, Reduce reduce)
Definition: map_reduce.hh:261
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
STL namespace.
+
+ + + + diff --git a/master/matcher_8hh_source.html b/master/matcher_8hh_source.html new file mode 100644 index 000000000..b9e7c2ce7 --- /dev/null +++ b/master/matcher_8hh_source.html @@ -0,0 +1,158 @@ + + + + + + + +Seastar: seastar/http/matcher.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
matcher.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2015 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/http/common.hh>
+
25
+
26#include <seastar/core/sstring.hh>
+
27
+
28namespace seastar {
+
29
+
30namespace httpd {
+
31
+
36class matcher {
+
37public:
+
38
+
39 virtual ~matcher() = default;
+
40
+
48 virtual size_t match(const sstring& url, size_t ind, parameters& param) = 0;
+
49};
+
50
+
65class param_matcher : public matcher {
+
66public:
+
75 explicit param_matcher(const sstring& name, bool entire_path = false)
+
76 : _name(name), _entire_path(entire_path) {
+
77 }
+
78
+
79 virtual size_t match(const sstring& url, size_t ind, parameters& param)
+
80 override;
+
81private:
+
82 sstring _name;
+
83 bool _entire_path;
+
84};
+
85
+
92class str_matcher : public matcher {
+
93public:
+
98 explicit str_matcher(const sstring& cmp)
+
99 : _cmp(cmp), _len(cmp.size()) {
+
100 }
+
101
+
102 virtual size_t match(const sstring& url, size_t ind, parameters& param)
+
103 override;
+
104private:
+
105 sstring _cmp;
+
106 unsigned _len;
+
107};
+
108
+
109}
+
110
+
111}
+
Definition: matcher.hh:36
+
virtual size_t match(const sstring &url, size_t ind, parameters &param)=0
+
Definition: matcher.hh:65
+
param_matcher(const sstring &name, bool entire_path=false)
Definition: matcher.hh:75
+
virtual size_t match(const sstring &url, size_t ind, parameters &param) override
+
Definition: common.hh:48
+
Definition: matcher.hh:92
+
str_matcher(const sstring &cmp)
Definition: matcher.hh:98
+
virtual size_t match(const sstring &url, size_t ind, parameters &param) override
+
Definition: routes.hh:43
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/matchrules_8hh_source.html b/master/matchrules_8hh_source.html new file mode 100644 index 000000000..d937b9342 --- /dev/null +++ b/master/matchrules_8hh_source.html @@ -0,0 +1,177 @@ + + + + + + + +Seastar: seastar/http/matchrules.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
matchrules.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2015 Cloudius Systems
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/http/handlers.hh>
+
25#include <seastar/http/matcher.hh>
+
26#include <seastar/http/common.hh>
+
27
+
28#include <seastar/core/sstring.hh>
+
29#include <vector>
+
30
+
31namespace seastar {
+
32
+
33namespace httpd {
+
34
+ +
43public:
+ +
48 for (auto m : _match_list) {
+
49 delete m;
+
50 }
+
51 delete _handler;
+
52 }
+
53
+
58 explicit match_rule(handler_base* handler)
+
59 : _handler(handler) {
+
60 }
+
61
+
69 handler_base* get(const sstring& url, parameters& params) {
+
70 size_t ind = 0;
+
71 if (_match_list.empty()) {
+
72 return _handler;
+
73 }
+
74 for (unsigned int i = 0; i < _match_list.size(); i++) {
+
75 ind = _match_list.at(i)->match(url, ind, params);
+
76 if (ind == sstring::npos) {
+
77 return nullptr;
+
78 }
+
79 }
+
80 return (ind + 1 >= url.length()) ? _handler : nullptr;
+
81 }
+
82
+ +
89 _match_list.push_back(match);
+
90 return *this;
+
91 }
+
92
+
98 match_rule& add_str(const sstring& str) {
+
99 add_matcher(new str_matcher(str));
+
100 return *this;
+
101 }
+
102
+
110 match_rule& add_param(const sstring& str, bool fullpath = false) {
+
111 add_matcher(new param_matcher(str, fullpath));
+
112 return *this;
+
113 }
+
114
+
115private:
+
116 std::vector<matcher*> _match_list;
+
117 handler_base* _handler;
+
118};
+
119
+
120}
+
121
+
122}
+
Definition: handlers.hh:42
+
Definition: matchrules.hh:42
+
handler_base * get(const sstring &url, parameters &params)
Definition: matchrules.hh:69
+
~match_rule()
Definition: matchrules.hh:47
+
match_rule & add_matcher(matcher *match)
Definition: matchrules.hh:88
+
match_rule & add_param(const sstring &str, bool fullpath=false)
Definition: matchrules.hh:110
+
match_rule(handler_base *handler)
Definition: matchrules.hh:58
+
match_rule & add_str(const sstring &str)
Definition: matchrules.hh:98
+
Definition: matcher.hh:36
+
Definition: matcher.hh:65
+
Definition: common.hh:48
+
Definition: matcher.hh:92
+
Definition: routes.hh:43
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
+ + + + diff --git a/master/maybe__yield_8hh_source.html b/master/maybe__yield_8hh_source.html new file mode 100644 index 000000000..0b180dd26 --- /dev/null +++ b/master/maybe__yield_8hh_source.html @@ -0,0 +1,133 @@ + + + + + + + +Seastar: seastar/coroutine/maybe_yield.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
maybe_yield.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2021-present ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <concepts>
+
25#include <type_traits>
+
26#include <seastar/core/coroutine.hh>
+
27
+
28namespace seastar::coroutine {
+
29
+
30namespace internal {
+
31
+
32struct maybe_yield_awaiter final {
+
33 bool await_ready() const {
+
34 return !need_preempt();
+
35 }
+
36
+
37 template <typename T>
+
38 void await_suspend(std::coroutine_handle<T> h) {
+
39 schedule(&h.promise());
+
40 }
+
41
+
42 void await_resume() {
+
43 }
+
44};
+
45
+
46}
+
47
+
70class [[nodiscard("must co_await an maybe_yield() object")]] maybe_yield {
+
71public:
+
72 auto operator co_await() { return internal::maybe_yield_awaiter(); }
+
73};
+
74
+
75}
+
Definition: maybe_yield.hh:70
+
+ + + + diff --git a/master/md_compatibility.html b/master/md_compatibility.html new file mode 100644 index 000000000..42e5c7a17 --- /dev/null +++ b/master/md_compatibility.html @@ -0,0 +1,152 @@ + + + + + + + +Seastar: Compatibility + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
Compatibility
+
+
+

As a library, Seastar aims to maintain backwards compatibility in terms of the source (application code should continue to build with newer versions of Seastar) and any binary protocols that Seastar exposes (e.g. rpc).

+

Link compatibility is not maintained - you cannot link an application built with one version of Seastar with another version of Seastar.

+

+Language standards

+

Seastar will support the last two standards approved by the ISO C++ committee. For example, after C++20 is released, Seastar supports C++17 and C++20. Similarly, when C++23 is released, Seastar will support C++20 and C++23.

+

Some features may only be enabled for newer dialects.

+

+Platforms

+

Seastar supports Linux. There is no known minimum kernel version, but very old kernels might not work. Performance can be significantly better for newer kernels.

+

Filesystem implementation quality can have significant effect on file I/O performance. XFS is known to be working, ext4 may work well too. Test your filesystem and kernel versions to be sure.

+

Patches for new platforms (e.g, Windows) are welcome.

+

+Compilers

+

Seastar supports gcc and clang. Ports to other compilers are welcome.

+

The last two major releases of a compiler are supported (e.g. gcc 11 and gcc 12). Patches to support older versions are welcome, as long as they don't require onerous compromises.

+

+Deprecation

+

Occasionally, we discover that we took the wrong approach with an API. In these cases we will offer a new API and tag the old API with the [[deprecated]] attribute. The deprecated API will be removed after a transition period (which can vary depending on how central the deprecated API is).

+

+Breaking changes

+

Rarely, we have to make breaking changes. We try to limit those, but sometimes there is no choice.

+

To support a transition period for breaking changes, Seastar offers the Seastar_API_LEVEL cmake variable (and corresponding –api-level configure.py option). An API level selects different versions of the API. For example.

+
    +
  • Seastar_API_LEVEL=1 selects an old version of the server_socket::accept() API that returns a variadic future (which is deprecated)
  • +
  • Seastar_API_LEVEL=2 selects a new version of the server_socket::accept() API that returns a non-variadic future
  • +
  • Seastar_API_LEVEL=6 makes futures non-variadic
  • +
  • Seastar_API_LEVEL=7 unifies CPU scheduling groups and IO priority classes "while at it" file_impl API is forced to accept io_intent argument
  • +
+

Applications can use an old API_LEVEL during a transition period, fix their code, and move to the new API_LEVEL.

+

Old API levels only live for a transition period, so if you are using an API level below the latest, you should upgrade quickly.

+

Note the application should not refer to the api_vN sub-namespaces that Seastar defines as part of the API_LEVEL mechanism; these are internal.

+

+Internal namespace

+

Identifiers in the seastar::internal namespace are not subject to source level compatibility and are subject to change or removal without notice. In addition the api_vN sub-namespaces are also internal.

+

+Accidentally exposed internal identifiers

+

Some identifiers predate the internal namespace, and are only exposed accidentally. These can also be removed or changed. Exposed identifiers are documented using doxygen, but not all exposed APIs are documented. In case of doubt, ask on the mailing list.

+

+API Level History

+ + + + + + + + + + + + + + + +
Level Introduced Mandatory Description
2 2019-07 2020-04 Non-variadic futures in socket::accept()
3 2020-05 2023-03 make_file_data_sink() closes file and returns a future<>
4 2020-06 2023-03 Non-variadic futures in when_all_succeed()
5 2020-08 2023-03 future::get() returns std::monostate() instead of void
6 2020-09 2023-03 future<T> instead of future<T...>
7 2023-05 unified CPU/IO scheduling groups
+

Note: The "mandatory" column indicates when backwards compatibility support for the API preceding the new level was removed.

+

+Implementation notes for API levels

+

API levels are implemented by defining internal sub-namespaces for each API level: seastar::api_v1, seatar::api_v2 etc. #ifdefs are used to inline the user-selected API level namespace into the main seastar namespace, making it visible.

+

Usually, the old API is implemented in terms of the new API to avoid code duplication.

+

Here is an example about the transition from API_LEVEL 1 to 2. The transition from 2 to 3 and similar is analogous.

+

Unconditionally:

    +
  • the new API is defined in sub-namespace api_v2
  • +
+

If API_LEVEL is 2:

    +
  • api_v2 namespace is inlined into the seastar namespace
  • +
+

If API_LEVEL is 1:

    +
  • the old API is defined in sub-namespace api_v1
  • +
  • api_v1 is implemented in terms of api_v2 to prevent code duplication
  • +
  • api_v1 namespace is inlined into the seastar namespace
  • +
+

After a transition period:

    +
  • everthing in api_v1 is dropped
  • +
  • api_v2 is removed, and its contents is placed in the parent namespace
  • +
+
+
+ + + + diff --git a/master/md_rpc.html b/master/md_rpc.html new file mode 100644 index 000000000..c65720dca --- /dev/null +++ b/master/md_rpc.html @@ -0,0 +1,186 @@ + + + + + + + +Seastar: RPC protocol + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
RPC protocol
+
+
+

+Data encoding

+

All integral data is encoded in little endian format.

+

+Protocol negotiation

+

The negotiation works by exchanging negotiation frame immediately after connection establishment. The negotiation frame format is:

uint8_t magic[8] = SSTARRPC
+uint32_t len
+uint8_t data[len]
+

The negotiation frame data is itself composed of multiple records, one for each feature number present. Feature numbers begin at zero and will be defined by later versions of this document.

+
 struct negotiation_frame_feature_record {
+     uint32_t feature_number;
+     uint32_t len;
+     uint8_t data[len];
+ }
+

A negotiation_frame_feature_record signals that an optional feature is present in the client, and can contain additional feature-specific data. The feature number will be omitted in a server response if an optional feature is declined by the server.

+

Actual negotiation looks like this:

     Client                                  Server
+--------------------------------------------------------------------------------------------------
+send negotiation frame
+                                    recv frame
+                                    check magic (disconnect if magic is not SSTARRPC)
+                                    send negotiation frame back
+recv frame
+check magic (disconnect if magic is not SSTARRPC)
+

+Supported features

+

+Compression

+

feature_number: 0 data : opaque data that is passed to a compressor factory provided by an application. Compressor factory is responsible for negotiation of compression algorithm.

+

If compression is negotiated request and response frames are encapsulated in a compressed frame.

+

+Timeout propagation

+

feature_number: 1 data : none

+

If timeout propagation is negotiated request frame has additional 8 bytes that hold timeout value for a request in milliseconds. Zero value means that timeout value was not specified. If timeout is specified and server cannot handle the request in specified time frame it my choose to not send the reply back (sending it back will not be an error either).

+

+Connection ID

+

feature_number: 2 uint64_t conenction_id : RPC connection ID

+

Server assigns unique connection ID for each connection and sends it to a client using this feature.

+

+Stream parent

+

feature_number: 3 uint64_t connection_id : RPC connection ID representing a parent of the stream

+

If this feature is present it means that the connection is not regular RPC connection but stream connection. If parent connection is closed or aborted all streams belonging to it will be closed as well.

+

Stream connection is a connection that allows bidirectional flow of bytes which may carry one or more messages in each direction. Stream connection should be explicitly closed by both client and server. Closing is done by sending special EOS frame (described below).

+

+Isolation

+

feature number: 4 uint32_t isolation_cookie_len uint8_t isolation_cookie[len]

+

The isolation_cookie field is used by the server to select a seastar::scheduling_group (or equivalent in another implementation) that will run this connection. In the future it will also be used for rpc buffer isolation, to avoid rpc traffic in one isolation group from starving another.

+

The server does not directly assign meaning to values of isolation_cookie; instead, the interpretation is left to user code.

+

+Handler duration

+

feature number: 5 data: none

+

Asks server to send "extended" response that includes the handler duration time. See the response frame description for more details

+

+Compressed frame format

+

uint32_t len uint8_t compressed_data[len]

+

After compressed_data is uncompressed, it becomes a regular request, response or streaming frame.

+

As a special case, it is allowed to send a compressed frame of size 0 (pre-compression). Such a frame will be a no-op on the receiver. (This can be used as a means of communication between the compressors themselves. If a compressor wants to send some metadata to its peer, it can send a no-op frame, and prepend the metadata as a compressor-specific header.)

+

+Request frame format

+

uint64_t timeout_in_ms - only present if timeout propagation is negotiated uint64_t verb_type int64_t msg_id uint32_t len uint8_t data[len]

+

msg_id has to be positive and may never be reused. data is transparent for the protocol and serialized/deserialized by a user

+

+Response frame format

+

int64_t msg_id uint32_t len uint32_t handler_duration - present if handler duration is negotiated uint8_t data[len]

+

if msg_id < 0 enclosed response contains an exception that came as a response to msg id abs(msg_id) data is transparent for the protocol and serialized/deserialized by a user

+

the handler_duration is in microseconds, the value of 0xffffffff means that it wasn't measured and should be disregarded by client

+

+Stream frame format

+

uint32_t len uint8_t data[len]

+

len == 0xffffffff signals end of stream data is transparent for the protocol and serialized/deserialized by a user

+

+Exception encoding

+

uint32_t type uint32_t len uint8_t data[len]

+

+Known exception types

+

USER = 0 UNKNOWN_VERB = 1

+

+USER exception encoding

+
uint32_t len
+char[len]
+

This exception is sent as a reply if rpc handler throws an exception. It is delivered to a caller as rpc::remote_verb_error(char[len])

+

+UNKNOWN_VERB exception encoding

+
uint64_t verb_id
+

This exception is sent as a response to a request with unknown verb_id, the verb id is passed back as part of the exception payload.

+

+More formal protocol description

+
    request_stream = negotiation_frame, { request | compressed_request }
+    request = verb_type, msg_id, len, { byte }*len
+    compressed_request = len, { bytes }*len
+    response_stream = negotiation_frame, { response | compressed_response }
+    response = reply | exception
+    compressed_response = len, { byte }*len
+    streaming_stream = negotiation_frame, { streaming_frame | compressed_streaming_frame }
+    streaming_frame = len, { byte }*len
+    compressed_streaming_frame = len, { byte }*len
+    reply = msg_id, len, { byte }*len
+    exception = exception_header, serialized_exception
+    exception_header = -msg_id, len
+    serialized_exception = (user|unknown_verb)
+    user = len, {byte}*len
+    unknown_verb = verb_type
+    verb_type = uint64_t
+    msg_id = int64_t
+    len = uint32_t
+    byte = uint8_t
+    negotiation_frame = 'SSTARRPC' len32(negotiation_frame_data) negotiation_frame_data
+    negotiation_frame_data = negotiation_frame_feature_record*
+    negotiation_frame_feature_record = feature_number len {byte}*len
+    feature_number = uint32_t 
+

Note that replies can come in order different from requests, and some requests may not have a reply at all.

+
+
+ + + + diff --git a/master/md_rpc_compression.html b/master/md_rpc_compression.html new file mode 100644 index 000000000..c58da02c8 --- /dev/null +++ b/master/md_rpc_compression.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: RPC provided compression infrastructure + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
RPC provided compression infrastructure
+
+
+

+Compression algorithm negotiation

+

RPC protocol only defines COMPRESS feature bit but does not define format of its data. If application supports multiple compression algorithms it may use the data for algorithm negotiation. RPC provides convenience class multi_algo_compressor_factory to do it so that each application will not have to re-implement the same logic. The class gets list of supported compression algorithms and send them as comma separated list in the client COMPRESS feature payload. On receiving of the list it matches common algorithm between client and server. In case there is more than one the order of algorithms in client's list is considered to be a tie breaker (first algorithm wins). Once a compressor is chosen by the server, it puts the identifier of this in the returned COMPRESS feature payload, informing the client of which algorithm should be used for the connection.

+

+Compression algorithms

+

+<tt>LZ4</tt> compressor

+

This compressor uses LZ4 to compress and decompress RPC messages. It requires all memory buffers to be contiguous, which may force it to temporarily linearise fragmented messages. LZ4 is fast enough to often make the cost of those copies not negligible compared to the cost of the whole compression or decompression routine. Therefore, this algorithm is best suited if there is an upper bound of the message size and they are expected to fit in a single fragment of input and output memory buffers.

+

+<tt>LZ4_FRAGMENTED</tt> compressor

+

This compressor uses LZ4 streaming interface to compress and decompress even large messages without linearising them. The LZ4 streaming routines tend to be slower than the basic ones and the general logic for handling buffers is more complex, so this compressor is best suited only when there is no clear upper bound on the message size or if the messages are expected to be fragmented.

+

Internally, the compressor processes data in a 32 kB chunks and tries to avoid unnecessary copies as much as possible. It is therefore, recommended, that the application uses memory buffer fragment sizes that are an integral multiple of 32 kB.

+
+
+ + + + diff --git a/master/md_rpc_streaming.html b/master/md_rpc_streaming.html new file mode 100644 index 000000000..96e687105 --- /dev/null +++ b/master/md_rpc_streaming.html @@ -0,0 +1,133 @@ + + + + + + + +Seastar: RPC streaming + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
RPC streaming
+
+
+

+Streaming API

+

+Sink and Source

+

Basic element of streaming API is rpc::sink and rpc::source. The former is used to send data and the later is to receive it. Client and server has their own pair of sink and source. rpc::sink and rpc::source are templated classes where template parameters describe a type of the data that is sent/received. For instance the sink that is used to send messages containing int and long will be of a type rpc::sink<int, long>. The opposite end of the stream will have a source of the type rpc::source<int, long> which will be used to receive those messages. Messages are received at a source as std::optional containing an actual message as an std::tuple. Unengaged optional means EOS (end of stream) - the stream was closed by a peer. If error happen before EOS is received a receiver cannot be sure it received all the data.

+

To send the data using rpc::source<int, long> one can write (assuming seastar::async context):

+
while (has_data()) {
+
int data1 = get_data1();
+
long data2 = get_data2();
+
sink(data1, data2).get(); // sends data
+
}
+
sink.close().get(); // closes stream
+

To receive:

+
while (true) {
+
std:optional<std::tuple<int, long>> data = source().get();
+
if (!data) {
+
// unengaged optional means EOS
+
break;
+
} else {
+
auto [data1, data2] = *data;
+
// process data
+
}
+
}
+
STL namespace.
+

+Creating a stream

+

To open an RPC stream one needs RPC client to be created already. The stream will be associated with the client and will be aborted if the client is closed before streaming is. Given RPC client rc, and a serializer class that models the Serializer concept (as explained in the rpc::protocol class), one creates rpc::sink as follows (again assuming seastar::async context):

+
rpc::sink<int, long> sink = rc.make_stream_sink<serializer, int, long>().get();
+

Now the client has the sink that can be used for streaming data to a server, but how the server will get a corresponding rpc::source to read it? For that the sink should be passed to the server by an RPC call. To receive a sink a server should register an RPC handler that will be used to receive it along with any auxiliary information deemed necessary. To receive the sink above one may register an RPC handler like that:

+
rpc_proto.register_handler(1, [] (int aux_data, rpc::source<int, long> source) {
+
});
+

Notice that rpc::sink is received as an rpc::source since at the server side it will be used for receive. Now all is left to do is for the client to invoke this RPC handler with aux_data and the sink.

+

But what about communicating in another direction: from a server to a client. For that a server also has to have a sink and a client has to have a source and since messages in this direction may be of a different type than from client to server the sink and the source may be of a different type as well.

+

Server initiates creation of a communication channel in another direction. It does this by creating a sink from the source it receives and returning the sink from RPC handler which will cause it to be received as a source by a client. Lets look at the full example where server want to send message containing sstring to a client.

+

Server handler will look like that:

+
rpc_proto.register_handler(1, [] (int aux_data, rpc::source<int, long> source) {
+
rpc::sink<sstring> sink = source.make_sink<serializer, sstring>();
+
// use sink and source asynchronously
+
return sink;
+
});
+

Client code will be:

+
auto rpc_call = rpc_proto.make_client<rpc::source<sstring> (int, rpc::sink<int>)>(1);
+
rpc::sink<int, long> sink = rc.make_stream_sink<serializer, int, long>().get();
+
rpc::source<sstring> source = rpc_call(rc, aux_data, sink).get();
+
// use sink and source here
+

+Implementation notes

+

+RPC stream creation

+

RPC stream is implemented as a separate TCP connection. RPC server knows that a connection will be used for streaming if during RPC negotiation Stream parent feature is present. The feature will contain ID of an RPC client that was used to create the stream.

+

So in the example from previous chapter:

+
rpc::sink<int, long> sink = rc.make_stream_sink<serializer, int, long>().get();
+

the call will initiate a new TCP connection to the same server rc is connected to. During RPC protocol negotiation this connection will have Stream parent feature with rc's ID as a value.

+

+Passing sink/source over RPC call

+

When rpc::sink is sent over RPC call it is serialized as its connection ID. Server's RPC handler then lookups the connection and creates an rpc::source from it. When RPC handler returns rpc::sink the same happens in other direction.
+

+
+
+ + + + diff --git a/master/memory_8hh_source.html b/master/memory_8hh_source.html new file mode 100644 index 000000000..3005d0c93 --- /dev/null +++ b/master/memory_8hh_source.html @@ -0,0 +1,446 @@ + + + + + + + +Seastar: seastar/core/memory.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
memory.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright (C) 2014 Cloudius Systems, Ltd.
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/resource.hh>
+
25#include <seastar/core/bitops.hh>
+
26#include <seastar/util/backtrace.hh>
+
27#include <seastar/util/modules.hh>
+
28#include <seastar/util/sampler.hh>
+
29#ifndef SEASTAR_MODULE
+
30#include <new>
+
31#include <cstdint>
+
32#include <functional>
+
33#include <optional>
+
34#include <string>
+
35#include <vector>
+
36#endif
+
37
+
38namespace seastar {
+
39
+
50
+
124namespace memory {
+
125
+
127
+
128#ifdef SEASTAR_OVERRIDE_ALLOCATOR_PAGE_SIZE
+
129#define SEASTAR_INTERNAL_ALLOCATOR_PAGE_SIZE (SEASTAR_OVERRIDE_ALLOCATOR_PAGE_SIZE)
+
130#else
+
131#define SEASTAR_INTERNAL_ALLOCATOR_PAGE_SIZE 4096
+
132#endif
+
133
+
134static constexpr size_t page_size = SEASTAR_INTERNAL_ALLOCATOR_PAGE_SIZE;
+
135static constexpr size_t page_bits = log2ceil(page_size);
+
136static constexpr size_t huge_page_size =
+
137#if defined(__x86_64__) || defined(__i386__) || defined(__s390x__) || defined(__zarch__)
+
138 1 << 21; // 2M
+
139#elif defined(__aarch64__)
+
140 1 << 21; // 2M
+
141#elif defined(__PPC__)
+
142 1 << 24; // 16M
+
143#else
+
144#error "Huge page size is not defined for this architecture"
+
145#endif
+
146
+
147
+
148namespace internal {
+
149
+
150struct memory_range {
+
151 char* start;
+
152 char* end;
+
153 unsigned numa_node_id;
+
154};
+
155
+
156struct numa_layout {
+
157 std::vector<memory_range> ranges;
+
158};
+
159
+
160numa_layout merge(numa_layout one, numa_layout two);
+
161
+
162}
+
163
+
164internal::numa_layout configure(std::vector<resource::memory> m, bool mbind,
+
165 bool transparent_hugepages,
+
166 std::optional<std::string> hugetlbfs_path = {});
+
167
+
168void configure_minimal();
+
169
+
170// A deprecated alias for set_abort_on_allocation_failure(true).
+
171[[deprecated("use set_abort_on_allocation_failure(true) instead")]]
+
172void enable_abort_on_allocation_failure();
+
173
+
174class disable_abort_on_alloc_failure_temporarily {
+
175public:
+
176 disable_abort_on_alloc_failure_temporarily();
+
177 ~disable_abort_on_alloc_failure_temporarily() noexcept;
+
178};
+
179
+
180// Disables heap profiling as long as this object is alive.
+
181// Can be nested, in which case the profiling is re-enabled when all
+
182// the objects go out of scope.
+
183class disable_backtrace_temporarily {
+ +
185public:
+
186 disable_backtrace_temporarily();
+
187};
+
188
+
189enum class reclaiming_result {
+
190 reclaimed_nothing,
+
191 reclaimed_something
+
192};
+
193
+
194// Determines when reclaimer can be invoked
+
195enum class reclaimer_scope {
+
196 //
+
197 // Reclaimer is only invoked in its own fiber. That fiber will be
+
198 // given higher priority than regular application fibers.
+
199 //
+
200 async,
+
201
+
202 //
+
203 // Reclaimer may be invoked synchronously with allocation.
+
204 // It may also be invoked in async scope.
+
205 //
+
206 // Reclaimer may invoke allocation, though it is discouraged because
+
207 // the system may be low on memory and such allocations may fail.
+
208 // Reclaimers which allocate should be prepared for re-entry.
+
209 //
+
210 sync
+
211};
+
212
+
213class reclaimer {
+
214public:
+
215 struct request {
+
216 // The number of bytes which is needed to be released.
+
217 // The reclaimer can release a different amount.
+
218 // If less is released then the reclaimer may be invoked again.
+
219 size_t bytes_to_reclaim;
+
220 };
+
221 using reclaim_fn = std::function<reclaiming_result ()>;
+
222private:
+
223 std::function<reclaiming_result (request)> _reclaim;
+
224 reclaimer_scope _scope;
+
225public:
+
226 // Installs new reclaimer which will be invoked when system is falling
+
227 // low on memory. 'scope' determines when reclaimer can be executed.
+
228 reclaimer(std::function<reclaiming_result ()> reclaim, reclaimer_scope scope = reclaimer_scope::async);
+
229 reclaimer(std::function<reclaiming_result (request)> reclaim, reclaimer_scope scope = reclaimer_scope::async);
+
230 ~reclaimer();
+
231 reclaiming_result do_reclaim(size_t bytes_to_reclaim) { return _reclaim(request{bytes_to_reclaim}); }
+
232 reclaimer_scope scope() const { return _scope; }
+
233};
+
234
+
235extern std::pmr::polymorphic_allocator<char>* malloc_allocator;
+
236
+
237// Call periodically to recycle objects that were freed
+
238// on cpu other than the one they were allocated on.
+
239//
+
240// Returns @true if any work was actually performed.
+
241bool drain_cross_cpu_freelist();
+
242
+
243
+
244// We don't want the memory code calling back into the rest of
+
245// the system, so allow the rest of the system to tell the memory
+
246// code how to initiate reclaim.
+
247//
+
248// When memory is low, calling \c hook(fn) will result in fn being called
+
249// in a safe place wrt. allocations.
+
250void set_reclaim_hook(
+
251 std::function<void (std::function<void ()>)> hook);
+
252
+
254
+
255SEASTAR_MODULE_EXPORT_BEGIN
+
256
+ +
273
+ +
280
+
281class statistics;
+
282
+ +
285
+ +
288 uint64_t _mallocs;
+
289 uint64_t _frees;
+
290 uint64_t _cross_cpu_frees;
+
291 size_t _total_memory;
+
292 size_t _free_memory;
+
293 uint64_t _reclaims;
+
294 uint64_t _large_allocs;
+
295 uint64_t _failed_allocs;
+
296
+
297 uint64_t _foreign_mallocs;
+
298 uint64_t _foreign_frees;
+
299 uint64_t _foreign_cross_frees;
+
300private:
+
301 statistics(uint64_t mallocs, uint64_t frees, uint64_t cross_cpu_frees,
+
302 uint64_t total_memory, uint64_t free_memory, uint64_t reclaims,
+
303 uint64_t large_allocs, uint64_t failed_allocs,
+
304 uint64_t foreign_mallocs, uint64_t foreign_frees, uint64_t foreign_cross_frees)
+
305 : _mallocs(mallocs), _frees(frees), _cross_cpu_frees(cross_cpu_frees)
+
306 , _total_memory(total_memory), _free_memory(free_memory), _reclaims(reclaims)
+
307 , _large_allocs(large_allocs), _failed_allocs(failed_allocs)
+
308 , _foreign_mallocs(foreign_mallocs), _foreign_frees(foreign_frees)
+
309 , _foreign_cross_frees(foreign_cross_frees) {}
+
310public:
+
312 uint64_t mallocs() const { return _mallocs; }
+
314 uint64_t frees() const { return _frees; }
+
317 uint64_t cross_cpu_frees() const { return _cross_cpu_frees; }
+
319 size_t live_objects() const { return mallocs() - frees(); }
+
321 size_t free_memory() const { return _free_memory; }
+
323 size_t allocated_memory() const { return _total_memory - _free_memory; }
+
325 size_t total_memory() const { return _total_memory; }
+
327 uint64_t reclaims() const { return _reclaims; }
+
329 uint64_t large_allocations() const { return _large_allocs; }
+
332 uint64_t failed_allocations() const { return _failed_allocs; }
+
334 uint64_t foreign_mallocs() const { return _foreign_mallocs; }
+
336 uint64_t foreign_frees() const { return _foreign_frees; }
+
338 uint64_t foreign_cross_frees() const { return _foreign_cross_frees; }
+ +
340};
+
341
+ +
343 uintptr_t start;
+
344 uintptr_t end;
+
345};
+
346
+
347// Discover virtual address range used by the allocator on current shard.
+
348// Supported only when seastar allocator is enabled.
+
349memory::memory_layout get_memory_layout();
+
350
+
352size_t free_memory();
+
353
+ +
357
+
359void set_min_free_pages(size_t pages);
+
360
+ +
367
+ +
370
+ +
373
+ +
376 size_t _old_threshold;
+
377public:
+
378 explicit scoped_large_allocation_warning_threshold(size_t threshold)
+
379 : _old_threshold(get_large_allocation_warning_threshold()) {
+ +
381 }
+ + + +
385 if (_old_threshold) {
+ +
387 }
+
388 }
+
389 void operator=(const scoped_large_allocation_warning_threshold&) const = delete;
+
390 void operator=(scoped_large_allocation_warning_threshold&&) = delete;
+
391};
+
392
+ +
395 size_t _old_threshold;
+
396public:
+ +
398 : _old_threshold(get_large_allocation_warning_threshold()) {
+ +
400 }
+ + + +
404 if (_old_threshold) {
+ +
406 }
+
407 }
+
408 void operator=(const scoped_large_allocation_warning_disable&) const = delete;
+
409 void operator=(scoped_large_allocation_warning_disable&&) = delete;
+
410};
+
411
+ +
421 mutable size_t count = 0;
+
422 mutable size_t size = 0;
+ +
424
+
425 // All allocation sites are linked to each other. This can be used for easy
+
426 // iteration across them in gdb scripts where it's difficult to work with
+
427 // the C++ data structures.
+
428 mutable const allocation_site* next = nullptr; // next allocation site in the chain
+
429 mutable const allocation_site* prev = nullptr; // previous allocation site in the chain
+
430
+
431 bool operator==(const allocation_site& o) const {
+
432 return backtrace == o.backtrace;
+
433 }
+
434
+
435 bool operator!=(const allocation_site& o) const {
+
436 return !(*this == o);
+
437 }
+
438};
+
439
+
446std::vector<allocation_site> sampled_memory_profile();
+
447
+
461size_t sampled_memory_profile(allocation_site* output, size_t size);
+
462
+
483void set_heap_profiling_sampling_rate(size_t sample_rate);
+
484
+ +
488
+ +
496public:
+
497 scoped_heap_profiling(size_t) noexcept;
+ +
499};
+
500
+
501SEASTAR_MODULE_EXPORT_END
+
502
+
503}
+
504}
+
505
+
506namespace std {
+
507
+
508template<>
+
509struct hash<seastar::memory::allocation_site> {
+
510 size_t operator()(const seastar::memory::allocation_site& bi) const {
+ +
512 }
+
513};
+
514
+
515}
+
Enable heap profiling for the duration of the scope.
Definition: memory.hh:495
+
Disable large allocation warnings for a scope.
Definition: memory.hh:394
+
Set a different large allocation warning threshold for a scope.
Definition: memory.hh:375
+
Memory allocation statistics.
Definition: memory.hh:287
+
uint64_t failed_allocations() const
Definition: memory.hh:332
+
uint64_t foreign_frees() const
Number of foreign frees.
Definition: memory.hh:336
+
uint64_t cross_cpu_frees() const
Definition: memory.hh:317
+
size_t total_memory() const
Total memory (in bytes)
Definition: memory.hh:325
+
uint64_t large_allocations() const
Number of allocations which violated the large allocation threshold.
Definition: memory.hh:329
+
uint64_t mallocs() const
Total number of memory allocations calls since the system was started.
Definition: memory.hh:312
+
uint64_t reclaims() const
Number of reclaims performed due to low memory.
Definition: memory.hh:327
+
size_t live_objects() const
Total number of objects which were allocated but not freed.
Definition: memory.hh:319
+
uint64_t frees() const
Total number of memory deallocations calls since the system was started.
Definition: memory.hh:314
+
friend statistics stats()
Capture a snapshot of memory allocation statistics for this lcore.
+
uint64_t foreign_mallocs() const
Number of foreign allocations.
Definition: memory.hh:334
+
size_t free_memory() const
Total free memory (in bytes)
Definition: memory.hh:321
+
size_t allocated_memory() const
Total allocated memory (in bytes)
Definition: memory.hh:323
+
uint64_t foreign_cross_frees() const
Number of foreign frees on reactor threads.
Definition: memory.hh:338
+
Definition: backtrace.hh:81
+
futurize_t< std::invoke_result_t< Func, Args... > > async(thread_attributes attr, Func &&func, Args &&... args) noexcept
Definition: thread.hh:245
+
size_t get_heap_profiling_sample_rate()
Returns the current heap profiling sampling rate (0 means off)
+
size_t free_memory()
Returns the size of free memory in bytes.
+
void set_large_allocation_warning_threshold(size_t threshold)
+
void set_heap_profiling_sampling_rate(size_t sample_rate)
Enable sampled heap profiling by setting a sample rate.
+
size_t get_large_allocation_warning_threshold()
Gets the current large allocation warning threshold.
+
statistics stats()
Capture a snapshot of memory allocation statistics for this lcore.
+
void set_min_free_pages(size_t pages)
Sets the value of free memory low water mark in memory::page_size units.
+
size_t min_free_memory()
+
void set_abort_on_allocation_failure(bool enabled)
Set the global state of the abort on allocation failure behavior.
+
std::vector< allocation_site > sampled_memory_profile()
If memory sampling is on returns the current sampled memory live set.
+
bool is_abort_on_allocation_failure()
Determine the abort on allocation failure mode.
+
void disable_large_allocation_warning()
Disable large allocation warnings.
+
Definition: memory.hh:342
+
future configure(const options &opts)
set the metrics configuration
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
STL namespace.
+
RAII class to temporarily pause sampling.
Definition: sampler.hh:91
+
Describes an allocation location in the code.
Definition: memory.hh:420
+
const allocation_site * next
call site for this allocation
Definition: memory.hh:428
+
simple_backtrace backtrace
amount of bytes in live objects allocated at backtrace.
Definition: memory.hh:423
+
size_t size
number of live objects allocated at backtrace.
Definition: memory.hh:422
+
Definition: backtrace.hh:168
+
+ + + + diff --git a/master/memory__diagnostics_8hh_source.html b/master/memory__diagnostics_8hh_source.html new file mode 100644 index 000000000..b296b48c6 --- /dev/null +++ b/master/memory__diagnostics_8hh_source.html @@ -0,0 +1,147 @@ + + + + + + + +Seastar: seastar/util/memory_diagnostics.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
Seastar +
+
High performance C++ framework for concurrent servers
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
memory_diagnostics.hh
+
+
+
1/*
+
2 * This file is open source software, licensed to you under the terms
+
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+
4 * distributed with this work for additional information regarding copyright
+
5 * ownership. You may not use this file except in compliance with the License.
+
6 *
+
7 * You may obtain a copy of the License at
+
8 *
+
9 * http://www.apache.org/licenses/LICENSE-2.0
+
10 *
+
11 * Unless required by applicable law or agreed to in writing,
+
12 * software distributed under the License is distributed on an
+
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+
14 * KIND, either express or implied. See the License for the
+
15 * specific language governing permissions and limitations
+
16 * under the License.
+
17 */
+
18/*
+
19 * Copyright 2020 ScyllaDB
+
20 */
+
21
+
22#pragma once
+
23
+
24#include <seastar/core/sstring.hh>
+
25#include <seastar/util/noncopyable_function.hh>
+
26#include <seastar/util/modules.hh>
+
27
+
28namespace seastar {
+
29
+
30SEASTAR_MODULE_EXPORT_BEGIN
+
31
+
32enum class log_level;
+
33
+
34namespace memory {
+
35
+ +
43 none,
+ +
48 all,
+
49};
+
50
+ +
56
+ +
62
+
64using memory_diagnostics_writer = noncopyable_function<void(std::string_view)>;
+
65
+ +
83
+ +
90
+
91SEASTAR_MODULE_EXPORT_END
+
92
+
93namespace internal {
+
100void log_memory_diagnostics_report(log_level lvl);
+
101}
+
102
+
103} // namespace memory
+
104} // namespace seastar
+
log_level
log level used with
Definition: log.hh:55
+
alloc_failure_kind
The kind of allocation failures to dump diagnostics report for.
Definition: memory_diagnostics.hh:41
+
@ none
Dump diagnostic error report for none of the allocation failures.
+ +
void set_dump_memory_diagnostics_on_alloc_failure_kind(alloc_failure_kind)
Configure when memory diagnostics are dumped.
+
sstring generate_memory_diagnostics_report()
+
void set_additional_diagnostics_producer(noncopyable_function< void(memory_diagnostics_writer)> producer)
Set a producer of additional diagnostic information.
+
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
+
Definition: noncopyable_function.hh:37
+
+ + + + diff --git a/master/menu.js b/master/menu.js new file mode 100644 index 000000000..818b859b7 --- /dev/null +++ b/master/menu.js @@ -0,0 +1,135 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='
    '; + for (var i in data.children) { + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + var searchBox; + if (searchEnabled) { + if (serverSide) { + searchBox='
'+ + '
'+ + '
'+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBox='
'+ + ''+ + ''+ + ''+ + ''+ + ''+ + '' + '' + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBox) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBox); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBox); + $('#searchBoxPos2').show(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/master/menudata.js b/master/menudata.js new file mode 100644 index 000000000..d478c1289 --- /dev/null +++ b/master/menudata.js @@ -0,0 +1,161 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Modules",url:"modules.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html",children:[ +{text:"a",url:"namespacemembers.html#index_a"}, +{text:"c",url:"namespacemembers_c.html#index_c"}, +{text:"d",url:"namespacemembers_d.html#index_d"}, +{text:"e",url:"namespacemembers_e.html#index_e"}, +{text:"f",url:"namespacemembers_f.html#index_f"}, +{text:"g",url:"namespacemembers_g.html#index_g"}, +{text:"i",url:"namespacemembers_i.html#index_i"}, +{text:"k",url:"namespacemembers_k.html#index_k"}, +{text:"l",url:"namespacemembers_l.html#index_l"}, +{text:"m",url:"namespacemembers_m.html#index_m"}, +{text:"n",url:"namespacemembers_n.html#index_n"}, +{text:"o",url:"namespacemembers_o.html#index_o"}, +{text:"p",url:"namespacemembers_p.html#index_p"}, +{text:"r",url:"namespacemembers_r.html#index_r"}, +{text:"s",url:"namespacemembers_s.html#index_s"}, +{text:"t",url:"namespacemembers_t.html#index_t"}, +{text:"v",url:"namespacemembers_v.html#index_v"}, +{text:"w",url:"namespacemembers_w.html#index_w"}, +{text:"y",url:"namespacemembers_y.html#index_y"}]}, +{text:"Functions",url:"namespacemembers_func.html",children:[ +{text:"a",url:"namespacemembers_func.html#index_a"}, +{text:"c",url:"namespacemembers_func.html#index_c"}, +{text:"d",url:"namespacemembers_func.html#index_d"}, +{text:"e",url:"namespacemembers_func.html#index_e"}, +{text:"f",url:"namespacemembers_func.html#index_f"}, +{text:"g",url:"namespacemembers_func.html#index_g"}, +{text:"i",url:"namespacemembers_func.html#index_i"}, +{text:"k",url:"namespacemembers_func.html#index_k"}, +{text:"l",url:"namespacemembers_func.html#index_l"}, +{text:"m",url:"namespacemembers_func.html#index_m"}, +{text:"n",url:"namespacemembers_func.html#index_n"}, +{text:"o",url:"namespacemembers_func.html#index_o"}, +{text:"p",url:"namespacemembers_func.html#index_p"}, +{text:"r",url:"namespacemembers_func.html#index_r"}, +{text:"s",url:"namespacemembers_func.html#index_s"}, +{text:"t",url:"namespacemembers_func.html#index_t"}, +{text:"v",url:"namespacemembers_func.html#index_v"}, +{text:"w",url:"namespacemembers_func.html#index_w"}, +{text:"y",url:"namespacemembers_func.html#index_y"}]}, +{text:"Variables",url:"namespacemembers_vars.html"}, +{text:"Typedefs",url:"namespacemembers_type.html"}, +{text:"Enumerations",url:"namespacemembers_enum.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"_",url:"functions.html#index__5F"}, +{text:"a",url:"functions_a.html#index_a"}, +{text:"b",url:"functions_b.html#index_b"}, +{text:"c",url:"functions_c.html#index_c"}, +{text:"d",url:"functions_d.html#index_d"}, +{text:"e",url:"functions_e.html#index_e"}, +{text:"f",url:"functions_f.html#index_f"}, +{text:"g",url:"functions_g.html#index_g"}, +{text:"h",url:"functions_h.html#index_h"}, +{text:"i",url:"functions_i.html#index_i"}, +{text:"j",url:"functions_j.html#index_j"}, +{text:"k",url:"functions_k.html#index_k"}, +{text:"l",url:"functions_l.html#index_l"}, +{text:"m",url:"functions_m.html#index_m"}, +{text:"n",url:"functions_n.html#index_n"}, +{text:"o",url:"functions_o.html#index_o"}, +{text:"p",url:"functions_p.html#index_p"}, +{text:"q",url:"functions_q.html#index_q"}, +{text:"r",url:"functions_r.html#index_r"}, +{text:"s",url:"functions_s.html#index_s"}, +{text:"t",url:"functions_t.html#index_t"}, +{text:"u",url:"functions_u.html#index_u"}, +{text:"v",url:"functions_v.html#index_v"}, +{text:"w",url:"functions_w.html#index_w"}, +{text:"y",url:"functions_y.html#index_y"}, +{text:"~",url:"functions_~.html#index__7E"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"b",url:"functions_func_b.html#index_b"}, +{text:"c",url:"functions_func_c.html#index_c"}, +{text:"d",url:"functions_func_d.html#index_d"}, +{text:"e",url:"functions_func_e.html#index_e"}, +{text:"f",url:"functions_func_f.html#index_f"}, +{text:"g",url:"functions_func_g.html#index_g"}, +{text:"h",url:"functions_func_h.html#index_h"}, +{text:"i",url:"functions_func_i.html#index_i"}, +{text:"j",url:"functions_func_j.html#index_j"}, +{text:"k",url:"functions_func_k.html#index_k"}, +{text:"l",url:"functions_func_l.html#index_l"}, +{text:"m",url:"functions_func_m.html#index_m"}, +{text:"n",url:"functions_func_n.html#index_n"}, +{text:"o",url:"functions_func_o.html#index_o"}, +{text:"p",url:"functions_func_p.html#index_p"}, +{text:"q",url:"functions_func_q.html#index_q"}, +{text:"r",url:"functions_func_r.html#index_r"}, +{text:"s",url:"functions_func_s.html#index_s"}, +{text:"t",url:"functions_func_t.html#index_t"}, +{text:"u",url:"functions_func_u.html#index_u"}, +{text:"v",url:"functions_func_v.html#index_v"}, +{text:"w",url:"functions_func_w.html#index_w"}, +{text:"y",url:"functions_func_y.html#index_y"}, +{text:"~",url:"functions_func_~.html#index__7E"}]}, +{text:"Variables",url:"functions_vars.html",children:[ +{text:"_",url:"functions_vars.html#index__5F"}, +{text:"a",url:"functions_vars.html#index_a"}, +{text:"b",url:"functions_vars.html#index_b"}, +{text:"c",url:"functions_vars.html#index_c"}, +{text:"d",url:"functions_vars.html#index_d"}, +{text:"e",url:"functions_vars.html#index_e"}, +{text:"f",url:"functions_vars.html#index_f"}, +{text:"g",url:"functions_vars.html#index_g"}, +{text:"h",url:"functions_vars.html#index_h"}, +{text:"i",url:"functions_vars.html#index_i"}, +{text:"k",url:"functions_vars.html#index_k"}, +{text:"l",url:"functions_vars.html#index_l"}, +{text:"m",url:"functions_vars.html#index_m"}, +{text:"n",url:"functions_vars.html#index_n"}, +{text:"o",url:"functions_vars.html#index_o"}, +{text:"p",url:"functions_vars.html#index_p"}, +{text:"r",url:"functions_vars.html#index_r"}, +{text:"s",url:"functions_vars.html#index_s"}, +{text:"t",url:"functions_vars.html#index_t"}, +{text:"u",url:"functions_vars.html#index_u"}, +{text:"v",url:"functions_vars.html#index_v"}, +{text:"w",url:"functions_vars.html#index_w"}]}, +{text:"Typedefs",url:"functions_type.html"}, +{text:"Enumerations",url:"functions_enum.html"}, +{text:"Related Functions",url:"functions_rela.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}, +{text:"Examples",url:"examples.html"}]} diff --git a/master/metrics_8hh.html b/master/metrics_8hh.html new file mode 100644 index 000000000..bfc9c8bb7 --- /dev/null +++ b/master/metrics_8hh.html @@ -0,0 +1,270 @@ + + + + + + + +Seastar: seastar/core/metrics.hh File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    metrics.hh File Reference
    +
    +
    +

    Detailed Description

    +

    header for metrics creation.

    +

    This header file contains the metrics creation method with their helper function. Include this file when need to create metrics. Typically this will be in your source file.

    +

    Code that is under the impl namespace should not be used directly.

    +
    #include <functional>
    +#include <limits>
    +#include <map>
    +#include <type_traits>
    +#include <variant>
    +#include <fmt/format.h>
    +#include <seastar/core/sstring.hh>
    +#include <seastar/core/shared_ptr.hh>
    +#include <seastar/core/metrics_registration.hh>
    +#include <seastar/core/metrics_types.hh>
    +#include <seastar/util/std-compat.hh>
    +#include <seastar/util/bool_class.hh>
    +#include <seastar/util/modules.hh>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  seastar::metrics::double_registration
     
    class  seastar::metrics::description
     Human-readable description of a metric/group. More...
     
    class  seastar::metrics::label_instance
     Label a metrics. More...
     
    class  seastar::metrics::label
     Class that creates label instances. More...
     
    struct  seastar::metrics::impl::real_counter_type_traits< callable, T >
     
    struct  seastar::metrics::impl::real_counter_type_traits< true, T >
     
    struct  seastar::metrics::impl::counter_type_traits< T >
     
    class  seastar::metrics::impl::metric_value
     A helper class that used to return metrics value. More...
     
    struct  seastar::metrics::impl::metric_type
     
    struct  seastar::metrics::impl::metric_definition_impl
     
    class  seastar::metrics::impl::metric_groups_def
     
    + + + + + + + + + + +

    +Namespaces

    namespace  seastar
     Seastar API namespace.
     
    namespace  seastar::metrics
     metrics creation and registration
     
    namespace  impl
     holds the implementation parts of the metrics layer, do not use directly.
     
    + + + + + + + + + + + +

    +Typedefs

    using seastar::metrics::metric_type_def = sstring
     
    using seastar::metrics::metric_name_type = sstring
     
    using seastar::metrics::instance_id_type = sstring
     
    +using seastar::metrics::skip_when_empty = bool_class< class skip_when_empty_tag >
     
    +using seastar::metrics::impl::metric_function = std::function< metric_value()>
     
    + + + +

    +Enumerations

    enum class  data_type : uint8_t {
    +  COUNTER +, REAL_COUNTER +, GAUGE +, HISTOGRAM +,
    +  SUMMARY +
    + }
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    +instance_id_type seastar::metrics::impl::shard ()
     
    +template<typename T , typename = std::enable_if_t<std::is_invocable_v<T>>>
    metric_function seastar::metrics::impl::make_function (T val, data_type dt)
     
    +template<typename T , typename = std::enable_if_t<!std::is_invocable_v<T>>>
    metric_function seastar::metrics::impl::make_function (T &val, data_type dt)
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_gauge (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
     Gauge are a general purpose metric. More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_gauge (metric_name_type name, description d, T &&val)
     Gauge are a general purpose metric. More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_gauge (metric_name_type name, description d, std::vector< label_instance > labels, T &&val)
     Gauge are a general purpose metric. More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_derive (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
     Derive are used when a rate is more interesting than the value. More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_derive (metric_name_type name, description d, T &&val)
     Derive are used when a rate is more interesting than the value. More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_derive (metric_name_type name, description d, std::vector< label_instance > labels, T &&val)
     Derive are used when a rate is more interesting than the value. More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_counter (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
     create a counter metric More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_counter (metric_name_type name, description d, T &&val)
     create a counter metric More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_counter (metric_name_type name, description d, std::vector< label_instance > labels, T &&val)
     create a counter metric More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_absolute (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
     create an absolute metric. More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_histogram (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
     create a histogram metric. More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_histogram (metric_name_type name, description d, std::vector< label_instance > labels, T &&val)
     create a histogram metric. More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_histogram (metric_name_type name, description d, T &&val)
     create a histogram metric. More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_summary (metric_name_type name, description d, T &&val)
     create a summary metric. More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_total_bytes (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
     create a total_bytes metric. More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_current_bytes (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
     create a current_bytes metric. More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_queue_length (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
     create a queue_length metric. More...
     
    template<typename T >
    impl::metric_definition_impl seastar::metrics::make_total_operations (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
     create a total operation metric. More...
     
    + + + + + +

    +Variables

    +const bool seastar::metrics::metric_disabled
     
    +label seastar::metrics::shard_label
     
    +
    + + + + diff --git a/master/metrics_8hh_source.html b/master/metrics_8hh_source.html new file mode 100644 index 000000000..8f631077a --- /dev/null +++ b/master/metrics_8hh_source.html @@ -0,0 +1,509 @@ + + + + + + + +Seastar: seastar/core/metrics.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    metrics.hh
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2016 ScyllaDB.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <functional>
    +
    26#include <limits>
    +
    27#include <map>
    +
    28#include <type_traits>
    +
    29#include <variant>
    +
    30#include <fmt/format.h>
    +
    31#endif
    +
    32#include <seastar/core/sstring.hh>
    +
    33#include <seastar/core/shared_ptr.hh>
    + +
    35#include <seastar/core/metrics_types.hh>
    +
    36#include <seastar/util/std-compat.hh>
    +
    37#include <seastar/util/bool_class.hh>
    +
    38#include <seastar/util/modules.hh>
    +
    39
    +
    51namespace seastar {
    +
    52
    +
    98namespace metrics {
    +
    99
    +
    100SEASTAR_MODULE_EXPORT_BEGIN
    +
    101
    +
    102class double_registration : public std::runtime_error {
    +
    103public:
    +
    104 double_registration(std::string what);
    +
    105};
    +
    106
    +
    113using metric_type_def = sstring;
    +
    114using metric_name_type = sstring;
    +
    115using instance_id_type = sstring;
    + +
    117
    + +
    134public:
    +
    135 description(sstring s = sstring()) : _s(std::move(s))
    +
    136 {}
    +
    137 const sstring& str() const {
    +
    138 return _s;
    +
    139 }
    +
    140private:
    +
    141 sstring _s;
    +
    142};
    +
    143
    + +
    162 sstring _key;
    +
    163 sstring _value;
    +
    164public:
    +
    177 template<typename T>
    +
    178 label_instance(const sstring& key, T v) : _key(key), _value(fmt::to_string(v)){}
    +
    179
    +
    183 const sstring key() const {
    +
    184 return _key;
    +
    185 }
    +
    186
    +
    190 const sstring value() const {
    +
    191 return _value;
    +
    192 }
    +
    193 bool operator<(const label_instance&) const;
    +
    194 bool operator==(const label_instance&) const;
    +
    195 bool operator!=(const label_instance&) const;
    +
    196};
    +
    197
    +
    198
    +
    216class label {
    +
    217 sstring key;
    +
    218public:
    +
    219 using instance = label_instance;
    +
    225 explicit label(const sstring& key) : key(key) {
    +
    226 }
    +
    227
    +
    240 template<typename T>
    +
    241 instance operator()(T value) const {
    +
    242 return label_instance(key, std::forward<T>(value));
    +
    243 }
    +
    244
    +
    248 const sstring& name() const {
    +
    249 return key;
    +
    250 }
    +
    251};
    +
    252SEASTAR_MODULE_EXPORT_END
    +
    253
    +
    261namespace impl {
    +
    262
    +
    263// The value binding data types
    +
    264enum class data_type : uint8_t {
    +
    265 COUNTER,
    +
    266 REAL_COUNTER,
    +
    267 GAUGE,
    +
    268 HISTOGRAM,
    +
    269 SUMMARY,
    +
    270};
    +
    271
    +
    272template <bool callable, typename T>
    + +
    274 using type = T;
    +
    275};
    +
    276
    +
    277template <typename T>
    + +
    279 using type = std::invoke_result_t<T>;
    +
    280};
    +
    281
    +
    282template <typename T>
    + + +
    285 static constexpr bool is_integral = std::is_integral_v<typename real_traits::type>;
    +
    286 static constexpr data_type type = is_integral ? data_type::COUNTER : data_type::REAL_COUNTER;
    +
    287};
    +
    288
    + +
    295public:
    +
    296 std::variant<double, histogram> u;
    +
    297 data_type _type;
    +
    298 data_type type() const {
    +
    299 return _type;
    +
    300 }
    +
    301
    +
    302 double d() const {
    +
    303 return std::get<double>(u);
    +
    304 }
    +
    305
    +
    306 uint64_t ui() const {
    +
    307 auto d = std::get<double>(u);
    +
    308 if (d >= 0 && d <= double(std::numeric_limits<long>::max())) {
    +
    309 return lround(d);
    +
    310 } else {
    +
    311 // double value is out of range or NaN or Inf
    +
    312 ulong_conversion_error(d);
    +
    313 return 0;
    +
    314 }
    +
    315 }
    +
    316
    +
    317 int64_t i() const {
    +
    318 auto d = std::get<double>(u);
    +
    319 if (d >= double(std::numeric_limits<long>::min()) && d <= double(std::numeric_limits<long>::max())) {
    +
    320 return lround(d);
    +
    321 } else {
    +
    322 // double value is out of range or NaN or Inf
    +
    323 ulong_conversion_error(d);
    +
    324 return 0;
    +
    325 }
    +
    326 }
    +
    327
    + +
    329 : _type(data_type::GAUGE) {
    +
    330 }
    +
    331
    +
    332 metric_value(histogram&& h, data_type t = data_type::HISTOGRAM) :
    +
    333 u(std::move(h)), _type(t) {
    +
    334 }
    +
    335 metric_value(const histogram& h, data_type t = data_type::HISTOGRAM) :
    +
    336 u(h), _type(t) {
    +
    337 }
    +
    338
    +
    339 metric_value(double d, data_type t)
    +
    340 : u(d), _type(t) {
    +
    341 }
    +
    342
    +
    343 metric_value& operator+=(const metric_value& c) {
    +
    344 *this = *this + c;
    +
    345 return *this;
    +
    346 }
    +
    347
    +
    348 metric_value operator+(const metric_value& c);
    +
    349 const histogram& get_histogram() const {
    +
    350 return std::get<histogram>(u);
    +
    351 }
    +
    352
    +
    359 bool is_empty() const noexcept {
    +
    360 return ((_type == data_type::HISTOGRAM || _type == data_type::SUMMARY) && get_histogram().sample_count == 0) ||
    +
    361 ((_type == data_type::COUNTER || _type == data_type::REAL_COUNTER) && d() == 0);
    +
    362 }
    +
    363private:
    +
    364 static void ulong_conversion_error(double d);
    +
    365};
    +
    366
    +
    367using metric_function = std::function<metric_value()>;
    +
    368
    + +
    370 data_type base_type;
    +
    371 metric_type_def type_name;
    +
    372};
    +
    373
    + +
    375 metric_name_type name;
    +
    376 metric_type type;
    +
    377 metric_function f;
    +
    378 description d;
    +
    379 bool enabled = true;
    +
    380 skip_when_empty _skip_when_empty = skip_when_empty::no;
    +
    381 std::vector<std::string> aggregate_labels;
    +
    382 std::map<sstring, sstring> labels;
    +
    383 metric_definition_impl& operator ()(bool enabled);
    +
    384 metric_definition_impl& operator ()(const label_instance& label);
    +
    385 metric_definition_impl& operator ()(skip_when_empty skip) noexcept;
    +
    386 metric_definition_impl& aggregate(const std::vector<label>& labels) noexcept;
    +
    387 metric_definition_impl& set_skip_when_empty(bool skip=true) noexcept;
    +
    388 metric_definition_impl& set_type(const sstring& type_name);
    + +
    390 metric_name_type name,
    +
    391 metric_type type,
    +
    392 metric_function f,
    +
    393 description d,
    +
    394 std::vector<label_instance> labels,
    +
    395 std::vector<label> aggregate_labels = {});
    +
    396};
    +
    397
    + +
    399public:
    +
    400 metric_groups_def() = default;
    +
    401 virtual ~metric_groups_def() = default;
    +
    402 metric_groups_def(const metric_groups_def&) = delete;
    + +
    404 virtual metric_groups_def& add_metric(group_name_type name, const metric_definition& md) = 0;
    +
    405 virtual metric_groups_def& add_group(group_name_type name, const std::initializer_list<metric_definition>& l) = 0;
    +
    406 virtual metric_groups_def& add_group(group_name_type name, const std::vector<metric_definition>& l) = 0;
    +
    407};
    +
    408
    +
    409instance_id_type shard();
    +
    410
    +
    411template<typename T, typename = std::enable_if_t<std::is_invocable_v<T>>>
    +
    412metric_function make_function(T val, data_type dt) {
    +
    413 return [dt, val = std::move(val)] {
    +
    414 return metric_value(val(), dt);
    +
    415 };
    +
    416}
    +
    417
    +
    418template<typename T, typename = std::enable_if_t<!std::is_invocable_v<T>>>
    +
    419metric_function make_function(T& val, data_type dt) {
    +
    420 return [dt, &val] {
    +
    421 return metric_value(val, dt);
    +
    422 };
    +
    423}
    +
    424}
    +
    425
    +
    426extern const bool metric_disabled;
    +
    427
    +
    428extern label shard_label;
    +
    429
    +
    430/*
    +
    431 * The metrics definition are defined to be compatible with collectd metrics defintion.
    +
    432 * Typically you should used gauge or derived.
    +
    433 */
    +
    434
    +
    435
    +
    441template<typename T>
    + +
    443 T&& val, description d = description(), std::vector<label_instance> labels = {}) {
    +
    444 return {name, {impl::data_type::GAUGE, "gauge"}, make_function(std::forward<T>(val), impl::data_type::GAUGE), d, labels};
    +
    445}
    +
    446
    +
    452template<typename T>
    + +
    454 description d, T&& val) {
    +
    455 return {name, {impl::data_type::GAUGE, "gauge"}, make_function(std::forward<T>(val), impl::data_type::GAUGE), d, {}};
    +
    456}
    +
    457
    +
    463template<typename T>
    + +
    465 description d, std::vector<label_instance> labels, T&& val) {
    +
    466 return {name, {impl::data_type::GAUGE, "gauge"}, make_function(std::forward<T>(val), impl::data_type::GAUGE), d, labels};
    +
    467}
    +
    468
    +
    469
    +
    478template<typename T>
    +
    479[[deprecated("Use make_counter()")]]
    + +
    481 T&& val, description d = description(), std::vector<label_instance> labels = {}) {
    +
    482 return make_counter(std::move(name), std::forward<T>(val), std::move(d), std::move(labels));
    +
    483}
    +
    484
    +
    485
    +
    494template<typename T>
    +
    495[[deprecated("Use make_counter()")]]
    + +
    497 T&& val) {
    +
    498 return make_counter(std::move(name), std::forward<T>(val), std::move(d), {});
    +
    499}
    +
    500
    +
    501
    +
    510template<typename T>
    +
    511[[deprecated("Use make_counter()")]]
    +
    512impl::metric_definition_impl make_derive(metric_name_type name, description d, std::vector<label_instance> labels,
    +
    513 T&& val) {
    +
    514 return make_counter(std::move(name), std::forward<T>(val), std::move(d), std::move(labels));
    +
    515}
    +
    516
    +
    517
    +
    527template<typename T>
    + +
    529 T&& val, description d = description(), std::vector<label_instance> labels = {}) {
    +
    530 auto type = impl::counter_type_traits<std::remove_reference_t<T>>::type;
    +
    531 return {name, {type, "counter"}, make_function(std::forward<T>(val), type), d, labels};
    +
    532}
    +
    533
    +
    543template<typename T>
    + +
    545 return make_counter(std::move(name), std::forward<T>(val), std::move(d), {});
    +
    546}
    +
    547
    +
    557template<typename T>
    +
    558impl::metric_definition_impl make_counter(metric_name_type name, description d, std::vector<label_instance> labels, T&& val) {
    +
    559 return make_counter(std::move(name), std::forward<T>(val), std::move(d), std::move(labels));
    +
    560}
    +
    561
    +
    568template<typename T>
    +
    569[[deprecated("Use make_counter()")]]
    + +
    571 T&& val, description d = description(), std::vector<label_instance> labels = {}) {
    +
    572 return make_counter(std::move(name), std::forward<T>(val), std::move(d), std::move(labels));
    +
    573}
    +
    574
    +
    581template<typename T>
    + +
    583 T&& val, description d = description(), std::vector<label_instance> labels = {}) {
    +
    584 return {name, {impl::data_type::HISTOGRAM, "histogram"}, make_function(std::forward<T>(val), impl::data_type::HISTOGRAM), d, labels};
    +
    585}
    +
    586
    +
    593template<typename T>
    + +
    595 description d, std::vector<label_instance> labels, T&& val) {
    +
    596 return {name, {impl::data_type::HISTOGRAM, "histogram"}, make_function(std::forward<T>(val), impl::data_type::HISTOGRAM), d, labels};
    +
    597}
    +
    598
    +
    599
    +
    606template<typename T>
    + +
    608 description d, T&& val) {
    +
    609 return {name, {impl::data_type::HISTOGRAM, "histogram"}, make_function(std::forward<T>(val), impl::data_type::HISTOGRAM), d, {}};
    +
    610}
    +
    611
    +
    618template<typename T>
    + +
    620 description d, T&& val) {
    +
    621 return {name, {impl::data_type::SUMMARY, "summary"}, make_function(std::forward<T>(val), impl::data_type::SUMMARY), d, {}};
    +
    622}
    +
    623
    +
    624
    +
    632template<typename T>
    + +
    634 T&& val, description d = description(), std::vector<label_instance> labels = {},
    +
    635 instance_id_type = impl::shard()) {
    +
    636 return make_counter(name, std::forward<T>(val), d, labels).set_type("total_bytes");
    +
    637}
    +
    638
    +
    646template<typename T>
    + +
    648 T&& val, description d = description(), std::vector<label_instance> labels = {},
    +
    649 instance_id_type = impl::shard()) {
    +
    650 return make_gauge(name, std::forward<T>(val), d, labels).set_type("bytes");
    +
    651}
    +
    652
    +
    653
    +
    660template<typename T>
    + +
    662 T&& val, description d = description(), std::vector<label_instance> labels = {},
    +
    663 instance_id_type = impl::shard()) {
    +
    664 return make_gauge(name, std::forward<T>(val), d, labels).set_type("queue_length");
    +
    665}
    +
    666
    +
    667
    +
    674template<typename T>
    + +
    676 T&& val, description d = description(), std::vector<label_instance> labels = {},
    +
    677 instance_id_type = impl::shard()) {
    +
    678 return make_counter(name, std::forward<T>(val), d, labels).set_type("total_operations");
    +
    679}
    +
    680
    +
    682}
    +
    683}
    + +
    Human-readable description of a metric/group.
    Definition: metrics.hh:133
    +
    Definition: metrics.hh:102
    + +
    A helper class that used to return metrics value.
    Definition: metrics.hh:294
    +
    bool is_empty() const noexcept
    return true if this metric was never used
    Definition: metrics.hh:359
    +
    Label a metrics.
    Definition: metrics.hh:161
    +
    const sstring key() const
    returns the label key
    Definition: metrics.hh:183
    +
    label_instance(const sstring &key, T v)
    create a label_instance label instance consists of key and value. The key is an sstring....
    Definition: metrics.hh:178
    +
    const sstring value() const
    returns the label value
    Definition: metrics.hh:190
    +
    Class that creates label instances.
    Definition: metrics.hh:216
    +
    instance operator()(T value) const
    creating a label instance
    Definition: metrics.hh:241
    +
    label(const sstring &key)
    creating a label key is the label name, it will be the key for all label_instance that will be create...
    Definition: metrics.hh:225
    +
    const sstring & name() const
    returns the label name
    Definition: metrics.hh:248
    +
    Definition: metrics_registration.hh:67
    +
    impl::metric_definition_impl make_queue_length(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
    create a queue_length metric.
    Definition: metrics.hh:661
    +
    sstring metric_type_def
    Definition: metrics.hh:113
    +
    sstring metric_name_type
    Definition: metrics.hh:114
    +
    impl::metric_definition_impl make_total_operations(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
    create a total operation metric.
    Definition: metrics.hh:675
    +
    sstring instance_id_type
    Definition: metrics.hh:115
    +
    impl::metric_definition_impl make_total_bytes(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
    create a total_bytes metric.
    Definition: metrics.hh:633
    +
    impl::metric_definition_impl make_derive(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
    Derive are used when a rate is more interesting than the value.
    Definition: metrics.hh:480
    +
    impl::metric_definition_impl make_current_bytes(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
    create a current_bytes metric.
    Definition: metrics.hh:647
    +
    impl::metric_definition_impl make_summary(metric_name_type name, description d, T &&val)
    create a summary metric.
    Definition: metrics.hh:619
    +
    impl::metric_definition_impl make_gauge(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
    Gauge are a general purpose metric.
    Definition: metrics.hh:442
    +
    impl::metric_definition_impl make_absolute(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
    create an absolute metric.
    Definition: metrics.hh:570
    +
    impl::metric_definition_impl make_counter(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
    create a counter metric
    Definition: metrics.hh:528
    +
    impl::metric_definition_impl make_histogram(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
    create a histogram metric.
    Definition: metrics.hh:582
    +
    holds the metric_groups definition needed by class that reports metrics
    +
    holds the implementation parts of the metrics layer, do not use directly.
    +
    sstring group_name_type
    Definition: metrics_registration.hh:64
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Histogram data type.
    Definition: metrics_types.hh:69
    + + +
    Definition: metrics.hh:369
    + +
    + + + + diff --git a/master/metrics__api_8hh.html b/master/metrics__api_8hh.html new file mode 100644 index 000000000..67b12cda6 --- /dev/null +++ b/master/metrics__api_8hh.html @@ -0,0 +1,254 @@ + + + + + + + +Seastar: seastar/core/metrics_api.hh File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    metrics_api.hh File Reference
    +
    +
    +

    Detailed Description

    +

    header file for metric API layer (like prometheus or collectd)

    +
    #include <seastar/core/metrics.hh>
    +#include <seastar/util/modules.hh>
    +#include <seastar/core/sharded.hh>
    +#include <boost/functional/hash.hpp>
    +#include <deque>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    struct  std::hash< seastar::metrics::impl::labels_type >
     
    struct  seastar::metrics::metric_relabeling_result
     result of metric relabeling More...
     
    class  seastar::metrics::impl::metric_id
     
    struct  std::hash< seastar::metrics::impl::metric_id >
     
    struct  seastar::metrics::impl::metric_family_info
     holds metadata information of a metric family More...
     
    struct  seastar::metrics::impl::metric_info
     holds metric metadata More...
     
    class  seastar::metrics::impl::metric_groups_impl
     
    class  seastar::metrics::impl::registered_metric
     
    class  seastar::metrics::impl::metric_family
     
    struct  seastar::metrics::impl::metric_family_metadata
     holds a metric family metadata More...
     
    struct  seastar::metrics::impl::values_copy
     
    struct  seastar::metrics::impl::config
     
    class  seastar::metrics::impl::impl
     
    struct  seastar::metrics::options
     Metrics configuration options. More...
     
    + + + + + + + + + + +

    +Namespaces

    namespace  seastar
     Seastar API namespace.
     
    namespace  seastar::metrics
     metrics creation and registration
     
    namespace  std
     STL namespace.
     
    + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    +using seastar::metrics::impl::labels_type = std::map< sstring, sstring >
     
    +using seastar::metrics::impl::metrics_registration = std::vector< metric_id >
     
    +using seastar::metrics::impl::register_ref = shared_ptr< registered_metric >
     
    +using seastar::metrics::impl::metric_instances = std::map< labels_type, register_ref >
     
    +using seastar::metrics::impl::value_map = std::map< sstring, metric_family >
     
    +using seastar::metrics::impl::metric_metadata_fifo = std::deque< metric_info >
     
    +using seastar::metrics::impl::value_vector = std::deque< metric_value >
     
    +using seastar::metrics::impl::metric_metadata = std::vector< metric_family_metadata >
     
    +using seastar::metrics::impl::metric_values = std::deque< value_vector >
     
    +using seastar::metrics::impl::values_reference = shared_ptr< values_copy >
     
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    +const value_map & seastar::metrics::impl::get_value_map ()
     
    +foreign_ptr< values_reference > seastar::metrics::impl::get_values ()
     
    +shared_ptr< impl > seastar::metrics::impl::get_local_impl ()
     
    +void seastar::metrics::impl::unregister_metric (const metric_id &id)
     
    std::unique_ptr< metric_groups_def > seastar::metrics::impl::create_metric_groups ()
     initialize metric group More...
     
    +future seastar::metrics::configure (const options &opts)
     set the metrics configuration
     
    future< metric_relabeling_result > seastar::metrics::set_relabel_configs (const std::vector< relabel_config > &relabel_configs)
     Perform relabeling and operation on metrics dynamically. More...
     
    +const std::vector< relabel_config > & seastar::metrics::get_relabel_configs ()
     
    +void seastar::metrics::set_metric_family_configs (const std::vector< metric_family_config > &metrics_config)
     
    +const std::vector< metric_family_config > & seastar::metrics::get_metric_family_configs ()
     
    +

    Class Documentation

    + +

    ◆ seastar::metrics::metric_relabeling_result

    + +
    +
    + + + + +
    struct seastar::metrics::metric_relabeling_result
    +
    + + + + + +
    Class Members
    +size_t +metrics_relabeled_due_to_collision +
    + +
    +
    +

    Function Documentation

    + +

    ◆ create_metric_groups()

    + +
    +
    + + + + + + + +
    std::unique_ptr< metric_groups_def > seastar::metrics::impl::create_metric_groups ()
    +
    + +

    initialize metric group

    +

    Create a metric_group_def. No need to use it directly.

    + +
    +
    +
    + + + + diff --git a/master/metrics__api_8hh_source.html b/master/metrics__api_8hh_source.html new file mode 100644 index 000000000..cbced3e9e --- /dev/null +++ b/master/metrics__api_8hh_source.html @@ -0,0 +1,533 @@ + + + + + + + +Seastar: seastar/core/metrics_api.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    metrics_api.hh
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2016 ScyllaDB.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    + +
    25#include <seastar/util/modules.hh>
    +
    26#include <seastar/core/sharded.hh>
    +
    27#ifndef SEASTAR_MODULE
    +
    28#include <boost/functional/hash.hpp>
    +
    29#endif
    +
    30
    +
    31#include <deque>
    +
    32
    +
    40namespace seastar {
    +
    41namespace metrics {
    +
    42namespace impl {
    +
    43
    +
    44using labels_type = std::map<sstring, sstring>;
    +
    45}
    +
    46}
    +
    47}
    +
    48
    +
    49namespace std {
    +
    50
    +
    51template<>
    +
    52struct hash<seastar::metrics::impl::labels_type> {
    +
    53 using argument_type = seastar::metrics::impl::labels_type;
    +
    54 using result_type = ::std::size_t;
    +
    55 result_type operator()(argument_type const& s) const {
    +
    56 result_type h = 0;
    +
    57 for (auto&& i : s) {
    +
    58 boost::hash_combine(h, std::hash<seastar::sstring>{}(i.second));
    +
    59 }
    +
    60 return h;
    +
    61 }
    +
    62};
    +
    63
    +
    64}
    +
    65
    +
    66namespace seastar {
    +
    67namespace metrics {
    +
    68
    +
    69SEASTAR_MODULE_EXPORT
    +
    70struct relabel_config;
    +
    71
    +
    72SEASTAR_MODULE_EXPORT
    +
    73struct metric_family_config;
    +
    85SEASTAR_MODULE_EXPORT
    + +
    87 size_t metrics_relabeled_due_to_collision;
    +
    88};
    +
    89
    +
    90namespace impl {
    +
    91
    + +
    106public:
    +
    107 metric_id() = default;
    + +
    109 labels_type labels = {})
    +
    110 : _group(std::move(group)), _name(
    +
    111 std::move(name)), _labels(labels) {
    +
    112 }
    +
    113 metric_id(metric_id &&) = default;
    +
    114 metric_id(const metric_id &) = default;
    +
    115
    +
    116 metric_id & operator=(metric_id &&) = default;
    +
    117 metric_id & operator=(const metric_id &) = default;
    +
    118
    +
    119 const group_name_type & group_name() const {
    +
    120 return _group;
    +
    121 }
    +
    122 void group_name(const group_name_type & name) {
    +
    123 _group = name;
    +
    124 }
    +
    125 const instance_id_type & instance_id() const {
    +
    126 return _labels.at(shard_label.name());
    +
    127 }
    +
    128 const metric_name_type & name() const {
    +
    129 return _name;
    +
    130 }
    +
    131 const labels_type& labels() const {
    +
    132 return _labels;
    +
    133 }
    +
    134 labels_type& labels() {
    +
    135 return _labels;
    +
    136 }
    +
    137 sstring full_name() const;
    +
    138
    +
    139 bool operator<(const metric_id&) const;
    +
    140 bool operator==(const metric_id&) const;
    +
    141private:
    +
    142 auto as_tuple() const {
    +
    143 return std::tie(group_name(), instance_id(), name(), labels());
    +
    144 }
    +
    145 group_name_type _group;
    +
    146 metric_name_type _name;
    +
    147 labels_type _labels;
    +
    148};
    +
    149}
    +
    150}
    +
    151}
    +
    152
    +
    153namespace std {
    +
    154
    +
    155template<>
    +
    156struct hash<seastar::metrics::impl::metric_id>
    +
    157{
    + +
    159 typedef ::std::size_t result_type;
    +
    160 result_type operator()(argument_type const& s) const
    +
    161 {
    +
    162 result_type const h1 ( std::hash<seastar::sstring>{}(s.group_name()) );
    +
    163 result_type const h2 ( std::hash<seastar::sstring>{}(s.instance_id()) );
    +
    164 return h1 ^ (h2 << 1); // or use boost::hash_combine
    +
    165 }
    +
    166};
    +
    167
    +
    168}
    +
    169
    +
    170namespace seastar {
    +
    171namespace metrics {
    +
    172namespace impl {
    +
    173
    + +
    181 data_type type;
    +
    182 metric_type_def inherit_type;
    +
    183 description d;
    +
    184 sstring name;
    +
    185 std::vector<std::string> aggregate_labels;
    +
    186};
    +
    187
    +
    188
    + +
    193 metric_id id;
    +
    194 labels_type original_labels;
    +
    195 bool enabled;
    +
    196 skip_when_empty should_skip_when_empty;
    +
    197};
    +
    198
    +
    199
    +
    200using metrics_registration = std::vector<metric_id>;
    +
    201
    + +
    203 metrics_registration _registration;
    +
    204public:
    +
    205 metric_groups_impl() = default;
    + +
    207 metric_groups_impl(const metric_groups_impl&) = delete;
    + +
    209 metric_groups_impl& add_metric(group_name_type name, const metric_definition& md);
    +
    210 metric_groups_impl& add_group(group_name_type name, const std::initializer_list<metric_definition>& l);
    +
    211 metric_groups_impl& add_group(group_name_type name, const std::vector<metric_definition>& l);
    +
    212};
    +
    213
    +
    214class impl;
    +
    215
    +
    216class registered_metric final {
    +
    217 metric_info _info;
    +
    218 metric_function _f;
    +
    219 shared_ptr<impl> _impl;
    +
    220public:
    +
    221 registered_metric(metric_id id, metric_function f, bool enabled=true, skip_when_empty skip=skip_when_empty::no);
    +
    222 metric_value operator()() const {
    +
    223 return _f();
    +
    224 }
    +
    225
    +
    226 bool is_enabled() const {
    +
    227 return _info.enabled;
    +
    228 }
    +
    229
    +
    230 void set_enabled(bool b) {
    +
    231 _info.enabled = b;
    +
    232 }
    +
    233 void set_skip_when_empty(skip_when_empty skip) noexcept {
    +
    234 _info.should_skip_when_empty = skip;
    +
    235 }
    +
    236 const metric_id& get_id() const {
    +
    237 return _info.id;
    +
    238 }
    +
    239
    +
    240 const metric_info& info() const {
    +
    241 return _info;
    +
    242 }
    +
    243 metric_info& info() {
    +
    244 return _info;
    +
    245 }
    +
    246 const metric_function& get_function() const {
    +
    247 return _f;
    +
    248 }
    +
    249};
    +
    250
    + +
    252using metric_instances = std::map<labels_type, register_ref>;
    +
    253
    + +
    255 metric_instances _instances;
    +
    256 metric_family_info _info;
    +
    257public:
    +
    258 using iterator = metric_instances::iterator;
    +
    259 using const_iterator = metric_instances::const_iterator;
    +
    260
    +
    261 metric_family() = default;
    +
    262 metric_family(const metric_family&) = default;
    +
    263 metric_family(const metric_instances& instances) : _instances(instances) {
    +
    264 }
    +
    265 metric_family(const metric_instances& instances, const metric_family_info& info) : _instances(instances), _info(info) {
    +
    266 }
    +
    267 metric_family(metric_instances&& instances, metric_family_info&& info) : _instances(std::move(instances)), _info(std::move(info)) {
    +
    268 }
    +
    269 metric_family(metric_instances&& instances) : _instances(std::move(instances)) {
    +
    270 }
    +
    271
    +
    272 register_ref& operator[](const labels_type& l) {
    +
    273 return _instances[l];
    +
    274 }
    +
    275
    +
    276 const register_ref& at(const labels_type& l) const {
    +
    277 return _instances.at(l);
    +
    278 }
    +
    279
    +
    280 metric_family_info& info() {
    +
    281 return _info;
    +
    282 }
    +
    283
    +
    284 const metric_family_info& info() const {
    +
    285 return _info;
    +
    286 }
    +
    287
    +
    288 iterator find(const labels_type& l) {
    +
    289 return _instances.find(l);
    +
    290 }
    +
    291
    +
    292 const_iterator find(const labels_type& l) const {
    +
    293 return _instances.find(l);
    +
    294 }
    +
    295
    +
    296 iterator begin() {
    +
    297 return _instances.begin();
    +
    298 }
    +
    299
    +
    300 const_iterator begin() const {
    +
    301 return _instances.cbegin();
    +
    302 }
    +
    303
    +
    304 iterator end() {
    +
    305 return _instances.end();
    +
    306 }
    +
    307
    +
    308 bool empty() const {
    +
    309 return _instances.empty();
    +
    310 }
    +
    311
    +
    312 iterator erase(const_iterator position) {
    +
    313 return _instances.erase(position);
    +
    314 }
    +
    315
    +
    316 const_iterator end() const {
    +
    317 return _instances.cend();
    +
    318 }
    +
    319
    +
    320 uint32_t size() const {
    +
    321 return _instances.size();
    +
    322 }
    +
    323
    +
    324};
    +
    325
    +
    326using value_map = std::map<sstring, metric_family>;
    +
    327
    +
    328using metric_metadata_fifo = std::deque<metric_info>;
    +
    329
    + + +
    344 metric_metadata_fifo metrics;
    +
    345};
    +
    346
    +
    347using value_vector = std::deque<metric_value>;
    +
    348using metric_metadata = std::vector<metric_family_metadata>;
    +
    349using metric_values = std::deque<value_vector>;
    +
    350
    + + +
    353 metric_values values;
    +
    354};
    +
    355
    +
    356struct config {
    +
    357 sstring hostname;
    +
    358};
    +
    359
    +
    360class impl {
    +
    361 value_map _value_map;
    +
    362 config _config;
    +
    363 bool _dirty = true;
    + +
    365 std::set<sstring> _labels;
    +
    366 std::vector<std::deque<metric_function>> _current_metrics;
    +
    367 std::vector<relabel_config> _relabel_configs;
    +
    368 std::vector<metric_family_config> _metric_family_configs;
    +
    369public:
    +
    370 value_map& get_value_map() {
    +
    371 return _value_map;
    +
    372 }
    +
    373
    +
    374 const value_map& get_value_map() const {
    +
    375 return _value_map;
    +
    376 }
    +
    377
    +
    378 void add_registration(const metric_id& id, const metric_type& type, metric_function f, const description& d, bool enabled, skip_when_empty skip, const std::vector<std::string>& aggregate_labels);
    +
    379 void remove_registration(const metric_id& id);
    +
    380 future<> stop() {
    +
    381 return make_ready_future<>();
    +
    382 }
    +
    383 const config& get_config() const {
    +
    384 return _config;
    +
    385 }
    +
    386 void set_config(const config& c) {
    +
    387 _config = c;
    +
    388 }
    +
    389
    + +
    391
    +
    392 std::vector<std::deque<metric_function>>& functions();
    +
    393
    +
    394 void update_metrics_if_needed();
    +
    395
    +
    396 void dirty() {
    +
    397 _dirty = true;
    +
    398 }
    +
    399
    +
    400 const std::set<sstring>& get_labels() const noexcept {
    +
    401 return _labels;
    +
    402 }
    +
    403
    +
    404 future<metric_relabeling_result> set_relabel_configs(const std::vector<relabel_config>& relabel_configs);
    +
    405
    +
    406 const std::vector<relabel_config>& get_relabel_configs() const noexcept {
    +
    407 return _relabel_configs;
    +
    408 }
    +
    409 const std::vector<metric_family_config>& get_metric_family_configs() const noexcept {
    +
    410 return _metric_family_configs;
    +
    411 }
    +
    412
    +
    413 void set_metric_family_configs(const std::vector<metric_family_config>& metrics_config);
    +
    414
    +
    415 void update_aggregate(metric_family_info& mf) const noexcept;
    +
    416};
    +
    417
    +
    418const value_map& get_value_map();
    + +
    420
    + +
    422
    +
    423shared_ptr<impl> get_local_impl();
    +
    424
    +
    425void unregister_metric(const metric_id & id);
    +
    426
    +
    433std::unique_ptr<metric_groups_def> create_metric_groups();
    +
    434
    +
    435}
    +
    436
    + + +
    443
    + +
    445};
    +
    446
    + +
    451
    +
    497future<metric_relabeling_result> set_relabel_configs(const std::vector<relabel_config>& relabel_configs);
    +
    498/*
    +
    499 * \brief return the current relabel_configs
    +
    500 * This function returns a vector of the current relabel configs
    +
    501 */
    +
    502const std::vector<relabel_config>& get_relabel_configs();
    +
    503
    +
    504/*
    +
    505 * \brief change the metrics family config
    +
    506 *
    +
    507 * Family config is a configuration that relates to all metrics with the same name but with different labels.
    +
    508 * set_metric_family_configs allows changing that configuration during run time.
    +
    509 * Specifically, change the label aggregation based on a metric name.
    +
    510 *
    +
    511 * The following is an example for setting the aggregate labels for the metric test_gauge_1
    +
    512 * and all metrics matching the regex test_gauge1.*:
    +
    513 *
    +
    514 * std::vector<sm::metric_family_config> fc(2);
    +
    515 * fc[0].name = "test_gauge_1";
    +
    516 * fc[0].aggregate_labels = { "lb" };
    +
    517 * fc[1].regex_name = "test_gauge1.*";
    +
    518 * fc[1].aggregate_labels = { "ll", "aa" };
    +
    519 * sm::set_metric_family_configs(fc);
    +
    520 */
    +
    521void set_metric_family_configs(const std::vector<metric_family_config>& metrics_config);
    +
    522
    +
    523/*
    +
    524 * \brief return the current metric_family_config
    +
    525 * This function returns a vector of the current metrics family config
    +
    526 */
    +
    527const std::vector<metric_family_config>& get_metric_family_configs();
    +
    528}
    +
    529}
    + +
    Definition: sharded.hh:842
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Human-readable description of a metric/group.
    Definition: metrics.hh:133
    +
    Definition: metrics_api.hh:254
    + +
    Definition: metrics_api.hh:202
    +
    Definition: metrics_api.hh:105
    +
    A helper class that used to return metrics value.
    Definition: metrics.hh:294
    +
    Definition: metrics_api.hh:216
    +
    const sstring & name() const
    returns the label name
    Definition: metrics.hh:248
    +
    Definition: metrics_registration.hh:67
    +
    Definition: program-options.hh:292
    + + +
    sstring metric_type_def
    Definition: metrics.hh:113
    +
    sstring metric_name_type
    Definition: metrics.hh:114
    +
    sstring instance_id_type
    Definition: metrics.hh:115
    +
    header for metrics creation.
    +
    std::unique_ptr< metric_groups_def > create_metric_groups()
    initialize metric group
    +
    holds the implementation parts of the metrics layer, do not use directly.
    +
    sstring group_name_type
    Definition: metrics_registration.hh:64
    +
    future configure(const options &opts)
    set the metrics configuration
    +
    future< metric_relabeling_result > set_relabel_configs(const std::vector< relabel_config > &relabel_configs)
    Perform relabeling and operation on metrics dynamically.
    +
    result of metric relabeling
    Definition: metrics_api.hh:86
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    STL namespace.
    +
    Definition: metrics_api.hh:356
    +
    holds metadata information of a metric family
    Definition: metrics_api.hh:180
    +
    holds a metric family metadata
    Definition: metrics_api.hh:342
    +
    holds metric metadata
    Definition: metrics_api.hh:192
    +
    Definition: metrics.hh:369
    +
    Definition: metrics_api.hh:351
    +
    Metrics configuration options.
    Definition: metrics_api.hh:438
    +
    program_options::value< std::string > metrics_hostname
    The hostname used by the metrics.
    Definition: metrics_api.hh:442
    +
    + + + + diff --git a/master/metrics__registration_8hh.html b/master/metrics__registration_8hh.html new file mode 100644 index 000000000..3cfc39f2c --- /dev/null +++ b/master/metrics__registration_8hh.html @@ -0,0 +1,130 @@ + + + + + + + +Seastar: seastar/core/metrics_registration.hh File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    metrics_registration.hh File Reference
    +
    +
    +

    Detailed Description

    +

    holds the metric_groups definition needed by class that reports metrics

    +

    If class A needs to report metrics, typically you include metrics_registration.hh, in A header file and add to A:

      +
    • metric_groups _metrics as a member
    • +
    • set_metrics() method that would be called in the constructor.
      class A {
      +
      metric_groups _metrics
      +
      +
      void setup_metrics();
      +
      +
      };
      +
      To define the metrics, include in your source file metircs.hh
      See also
      metrics.hh for the definition for adding a metric.
      +
    • +
    +
    #include <memory>
    +#include <vector>
    +#include <seastar/core/sstring.hh>
    +#include <seastar/util/modules.hh>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + +

    +Classes

    class  seastar::metrics::metric_definition
     
    class  seastar::metrics::metric_group_definition
     
    class  seastar::metrics::metric_groups
     holds the metric definition. More...
     
    class  seastar::metrics::metric_group
     hold a single metric group Initialization is done in the constructor or with a call to add_group More...
     
    + + + + + + + +

    +Namespaces

    namespace  seastar
     Seastar API namespace.
     
    namespace  seastar::metrics
     metrics creation and registration
     
    + + + +

    +Typedefs

    using seastar::metrics::group_name_type = sstring
     
    +
    + + + + diff --git a/master/metrics__registration_8hh_source.html b/master/metrics__registration_8hh_source.html new file mode 100644 index 000000000..678d4850c --- /dev/null +++ b/master/metrics__registration_8hh_source.html @@ -0,0 +1,190 @@ + + + + + + + +Seastar: seastar/core/metrics_registration.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    metrics_registration.hh
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2016 ScyllaDB.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <memory>
    +
    26#include <vector>
    +
    27
    +
    28#include <seastar/core/sstring.hh>
    +
    29#include <seastar/util/modules.hh>
    +
    30#endif
    +
    31
    +
    52namespace seastar {
    +
    53
    +
    54namespace metrics {
    +
    55
    +
    56namespace impl {
    +
    57class metric_groups_def;
    +
    58struct metric_definition_impl;
    +
    59class metric_groups_impl;
    +
    60}
    +
    61
    +
    62SEASTAR_MODULE_EXPORT_BEGIN
    +
    63
    +
    64using group_name_type = sstring;
    +
    65class metric_groups;
    +
    66
    + +
    68 std::unique_ptr<impl::metric_definition_impl> _impl;
    +
    69public:
    + + + +
    73 friend metric_groups;
    + +
    75};
    +
    76
    + +
    78public:
    +
    79 group_name_type name;
    +
    80 std::initializer_list<metric_definition> metrics;
    +
    81 metric_group_definition(const group_name_type& name, std::initializer_list<metric_definition> l);
    + + +
    84};
    +
    85
    + +
    95 std::unique_ptr<impl::metric_groups_def> _impl;
    +
    96public:
    +
    97 metric_groups() noexcept;
    +
    98 metric_groups(metric_groups&&) = default;
    +
    99 virtual ~metric_groups();
    +
    100 metric_groups& operator=(metric_groups&&) = default;
    +
    106 metric_groups(std::initializer_list<metric_group_definition> mg);
    +
    107
    +
    128 metric_groups& add_group(const group_name_type& name, const std::initializer_list<metric_definition>& l);
    +
    129
    +
    146 metric_groups& add_group(const group_name_type& name, const std::vector<metric_definition>& l);
    +
    147
    +
    151 void clear();
    +
    152};
    +
    153
    +
    154
    + +
    161public:
    +
    162 metric_group() noexcept;
    +
    163 metric_group(const metric_group&) = delete;
    +
    164 metric_group(metric_group&&) = default;
    +
    165 virtual ~metric_group();
    +
    166 metric_group& operator=(metric_group&&) = default;
    +
    167
    +
    173 metric_group(const group_name_type& name, std::initializer_list<metric_definition> l);
    +
    174};
    +
    175
    +
    176SEASTAR_MODULE_EXPORT_END
    +
    177
    +
    178}
    +
    179}
    +
    Definition: metrics_api.hh:202
    +
    Definition: metrics_registration.hh:67
    +
    Definition: metrics_registration.hh:77
    +
    hold a single metric group Initialization is done in the constructor or with a call to add_group
    Definition: metrics_registration.hh:160
    +
    metric_group(const group_name_type &name, std::initializer_list< metric_definition > l)
    add metrics belong to the same group in the constructor.
    +
    holds the metric definition.
    Definition: metrics_registration.hh:94
    +
    void clear()
    clear all metrics groups registrations.
    +
    metric_groups(std::initializer_list< metric_group_definition > mg)
    add metrics belong to the same group in the constructor.
    +
    metric_groups & add_group(const group_name_type &name, const std::vector< metric_definition > &l)
    Add metrics belonging to the same group.
    +
    metric_groups & add_group(const group_name_type &name, const std::initializer_list< metric_definition > &l)
    Add metrics belonging to the same group.
    +
    holds the implementation parts of the metrics layer, do not use directly.
    +
    sstring group_name_type
    Definition: metrics_registration.hh:64
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    + +
    + + + + diff --git a/master/metrics__types_8hh_source.html b/master/metrics__types_8hh_source.html new file mode 100644 index 000000000..8437bf8d9 --- /dev/null +++ b/master/metrics__types_8hh_source.html @@ -0,0 +1,156 @@ + + + + + + + +Seastar: seastar/core/metrics_types.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    metrics_types.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2016 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <cstdint>
    +
    26#include <vector>
    +
    27#include <seastar/util/modules.hh>
    +
    28#include <optional>
    +
    29#endif
    +
    30
    +
    31namespace seastar {
    +
    32namespace metrics {
    +
    33
    +
    34SEASTAR_MODULE_EXPORT_BEGIN
    +
    35
    + +
    43 uint64_t count = 0; // number of events.
    +
    44 double upper_bound = 0; // Inclusive.
    +
    45};
    + +
    52 // schema defines the bucket schema. Currently, valid numbers are -4 <= n <= 8.
    +
    53 // They are all for base-2 bucket schemas, where 1 is a bucket boundary in each case, and
    +
    54 // then each power of two is divided into 2^n logarithmic buckets.
    +
    55 // Or in other words, each bucket boundary is the previous boundary times 2^(2^-n).
    +
    56 // In the future, more bucket schemas may be added using numbers < -4 or > 8.
    +
    57 int32_t schema;
    +
    58 // min_id is the first bucket id of a given schema.
    +
    59 int32_t min_id;
    +
    60};
    +
    61
    +
    69struct histogram {
    +
    70 uint64_t sample_count = 0;
    +
    71 double sample_sum = 0;
    +
    72 std::vector<histogram_bucket> buckets; // Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +
    73
    + +
    81
    +
    89 histogram operator+(const histogram& h) const;
    +
    90
    + +
    99
    +
    100 // Native histograms are an experimental Prometheus feature.
    +
    101 std::optional<native_histogram_info> native_histogram;
    +
    102};
    +
    103
    +
    104SEASTAR_MODULE_EXPORT_END
    +
    105
    +
    106}
    +
    107
    +
    108}
    +
    Histogram bucket type.
    Definition: metrics_types.hh:42
    +
    native histogram specific information
    Definition: metrics_types.hh:51
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Histogram data type.
    Definition: metrics_types.hh:69
    +
    histogram operator+(histogram &&h) const
    Addition historgrams.
    +
    histogram operator+(const histogram &h) const
    Addition historgrams.
    +
    histogram & operator+=(const histogram &h)
    Addition assigning a historgram.
    +
    + + + + diff --git a/master/mime__types_8hh_source.html b/master/mime__types_8hh_source.html new file mode 100644 index 000000000..51e6ad5b7 --- /dev/null +++ b/master/mime__types_8hh_source.html @@ -0,0 +1,118 @@ + + + + + + + +Seastar: seastar/http/mime_types.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    mime_types.hh
    +
    +
    +
    1//
    +
    2// mime_types.hpp
    +
    3// ~~~~~~~~~~~~~~
    +
    4//
    +
    5// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
    +
    6//
    +
    7// Distributed under the Boost Software License, Version 1.0. (See accompanying
    +
    8// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
    +
    9//
    +
    10
    +
    11#pragma once
    +
    12
    +
    13#include <seastar/core/sstring.hh>
    +
    14#include <seastar/util/modules.hh>
    +
    15
    +
    16namespace seastar {
    +
    17
    +
    18namespace http {
    +
    19
    +
    20namespace mime_types {
    +
    21
    +
    28SEASTAR_MODULE_EXPORT
    +
    29const char* extension_to_type(const sstring& extension);
    +
    30
    +
    31} // namespace mime_types
    +
    32
    +
    33} // namespace httpd
    +
    34
    +
    35namespace httpd {
    +
    36namespace mime_types {
    +
    37[[deprecated("Use http::mime_types::extension_to_type instead")]]
    +
    38inline const char* extension_to_type(const sstring& extension) {
    +
    39 return http::mime_types::extension_to_type(extension);
    +
    40}
    +
    41}
    +
    42}
    +
    43
    +
    44}
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/modules.html b/master/modules.html new file mode 100644 index 000000000..2980709a5 --- /dev/null +++ b/master/modules.html @@ -0,0 +1,103 @@ + + + + + + + +Seastar: Modules + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Modules
    +
    +
    +
    Here is a list of all modules:
    +
    [detail level 12]
    + + + + + + + + + + + + + + + + + + + + + + + + +
     Execution StagesExecution stages provide an infrastructure for processing function calls in batches in order to improve instruction cache locality
     Futures and PromisesFutures and promises are the basic tools for asynchronous programming in seastar. A future represents a result that may not have been computed yet, for example a buffer that is being read from the disk, or the result of a function that is executed on another cpu. A promise object allows the future to be eventually resolved by assigning it a value
     Implementation overview
     Future UtilitiesThese utilities are provided to help perform operations on futures
     Memory management
     FibersFibers of execution
     adds a /metrics endpoint that returns prometheus metrics
     Networking
     File Input/Output
     File and Stream UtilitiesThese utilities are provided to help perform operations on files and I/O streams
     Interprocess Communication
     MulticoreSupport for exploiting multiple cores on a server
     Seastar threads
     Timers
     rpc - remote procedure call frameworkRpc is a framework that can be used to define client-server communication protocols. For a high-level description of the RPC features see doc/rpc.md, doc/rpc-streaming.md and doc/rpc-compression.md
     Program OptionsInfrastructure for configuring a seastar application
     Io-module
     FileSystem Notifier
     Metrics
     metrics type definitions
     POSIX Support
     Utilities
     Logging
     WebSocket
    +
    +
    + + + + diff --git a/master/modules_8hh_source.html b/master/modules_8hh_source.html new file mode 100644 index 000000000..84c9283e8 --- /dev/null +++ b/master/modules_8hh_source.html @@ -0,0 +1,111 @@ + + + + + + + +Seastar: seastar/util/modules.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    modules.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2023 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifdef SEASTAR_MODULE
    +
    25# define SEASTAR_MODULE_EXPORT export
    +
    26# define SEASTAR_MODULE_EXPORT_BEGIN export {
    +
    27# define SEASTAR_MODULE_EXPORT_END }
    +
    28#else
    +
    29# define SEASTAR_MODULE_EXPORT
    +
    30# define SEASTAR_MODULE_EXPORT_BEGIN
    +
    31# define SEASTAR_MODULE_EXPORT_END
    +
    32#endif
    +
    + + + + diff --git a/master/multi__algo__compressor__factory_8hh_source.html b/master/multi__algo__compressor__factory_8hh_source.html new file mode 100644 index 000000000..c10cbd054 --- /dev/null +++ b/master/multi__algo__compressor__factory_8hh_source.html @@ -0,0 +1,166 @@ + + + + + + + +Seastar: seastar/rpc/multi_algo_compressor_factory.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    multi_algo_compressor_factory.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2016 Scylladb, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <boost/range/adaptor/transformed.hpp>
    +
    25#include <boost/algorithm/string.hpp>
    +
    26#include <seastar/core/sstring.hh>
    +
    27#include <seastar/rpc/rpc_types.hh>
    +
    28
    +
    29namespace seastar {
    +
    30
    +
    31namespace rpc {
    +
    32
    +
    33// This is meta compressor factory. It gets an array of regular factories that
    +
    34// support one compression algorithm each and negotiates common compression algorithm
    +
    35// that is supported both by a client and a server. The order of algorithm preferences
    +
    36// is the order they appear in clien's list
    + +
    38 std::vector<const rpc::compressor::factory*> _factories;
    +
    39 sstring _features;
    +
    40
    +
    41public:
    +
    42 multi_algo_compressor_factory(std::vector<const rpc::compressor::factory*> factories) : _factories(std::move(factories)) {
    +
    43 _features = boost::algorithm::join(_factories | boost::adaptors::transformed(std::mem_fn(&rpc::compressor::factory::supported)), sstring(","));
    +
    44 }
    +
    45 multi_algo_compressor_factory(std::initializer_list<const rpc::compressor::factory*> factories) :
    +
    46 multi_algo_compressor_factory(std::vector<const rpc::compressor::factory*>(std::move(factories))) {}
    + +
    48 // return feature string that will be sent as part of protocol negotiation
    +
    49 const sstring& supported() const override {
    +
    50 return _features;
    +
    51 }
    +
    52 // negotiate compress algorithm
    +
    53 std::unique_ptr<compressor> negotiate(sstring feature, bool is_server) const override {
    +
    54 return negotiate(feature, is_server, nullptr);
    +
    55 }
    +
    56 std::unique_ptr<compressor> negotiate(sstring feature, bool is_server, std::function<future<>()> send_empty_frame) const override {
    +
    57 std::vector<sstring> names;
    +
    58 boost::split(names, feature, boost::is_any_of(","));
    +
    59 std::unique_ptr<compressor> c;
    +
    60 if (is_server) {
    +
    61 for (auto&& n : names) {
    +
    62 for (auto&& f : _factories) {
    +
    63 if ((c = f->negotiate(n, is_server, send_empty_frame))) {
    +
    64 return c;
    +
    65 }
    +
    66 }
    +
    67 }
    +
    68 } else {
    +
    69 for (auto&& f : _factories) {
    +
    70 for (auto&& n : names) {
    +
    71 if ((c = f->negotiate(n, is_server, send_empty_frame))) {
    +
    72 return c;
    +
    73 }
    +
    74 }
    +
    75 }
    +
    76 }
    +
    77 return nullptr;
    +
    78 }
    +
    79};
    +
    80
    +
    81}
    +
    82
    +
    83}
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: rpc_types.hh:291
    +
    Definition: multi_algo_compressor_factory.hh:37
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/namespaceimpl.html b/master/namespaceimpl.html new file mode 100644 index 000000000..582507798 --- /dev/null +++ b/master/namespaceimpl.html @@ -0,0 +1,78 @@ + + + + + + + +Seastar: impl Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    impl Namespace Reference
    +
    +
    +

    Detailed Description

    +

    holds the implementation parts of the metrics layer, do not use directly.

    +

    The metrics layer define a thin API for adding metrics. Some of the implementation details need to be in the header file, they should not be use directly.

    +
    + + + + diff --git a/master/namespacemembers.html b/master/namespacemembers.html new file mode 100644 index 000000000..0a6651c4e --- /dev/null +++ b/master/namespacemembers.html @@ -0,0 +1,81 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - a -

    +
    + + + + diff --git a/master/namespacemembers_c.html b/master/namespacemembers_c.html new file mode 100644 index 000000000..f1aca55af --- /dev/null +++ b/master/namespacemembers_c.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - c -

    +
    + + + + diff --git a/master/namespacemembers_d.html b/master/namespacemembers_d.html new file mode 100644 index 000000000..537653993 --- /dev/null +++ b/master/namespacemembers_d.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - d -

    +
    + + + + diff --git a/master/namespacemembers_e.html b/master/namespacemembers_e.html new file mode 100644 index 000000000..ec4863af5 --- /dev/null +++ b/master/namespacemembers_e.html @@ -0,0 +1,80 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - e -

    +
    + + + + diff --git a/master/namespacemembers_enum.html b/master/namespacemembers_enum.html new file mode 100644 index 000000000..f5ccc3686 --- /dev/null +++ b/master/namespacemembers_enum.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    + + + + diff --git a/master/namespacemembers_f.html b/master/namespacemembers_f.html new file mode 100644 index 000000000..d209855da --- /dev/null +++ b/master/namespacemembers_f.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - f -

    +
    + + + + diff --git a/master/namespacemembers_func.html b/master/namespacemembers_func.html new file mode 100644 index 000000000..fc9152caa --- /dev/null +++ b/master/namespacemembers_func.html @@ -0,0 +1,295 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +  + +

    - a -

    + + +

    - c -

    + + +

    - d -

    + + +

    - e -

    + + +

    - f -

    + + +

    - g -

    + + +

    - i -

    + + +

    - k -

    + + +

    - l -

    + + +

    - m -

    + + +

    - n -

    + + +

    - o -

    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - t -

    + + +

    - v -

    + + +

    - w -

    + + +

    - y -

    +
    + + + + diff --git a/master/namespacemembers_g.html b/master/namespacemembers_g.html new file mode 100644 index 000000000..39a50853c --- /dev/null +++ b/master/namespacemembers_g.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - g -

    +
    + + + + diff --git a/master/namespacemembers_i.html b/master/namespacemembers_i.html new file mode 100644 index 000000000..97044d76c --- /dev/null +++ b/master/namespacemembers_i.html @@ -0,0 +1,81 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - i -

    +
    + + + + diff --git a/master/namespacemembers_k.html b/master/namespacemembers_k.html new file mode 100644 index 000000000..450fa5908 --- /dev/null +++ b/master/namespacemembers_k.html @@ -0,0 +1,77 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - k -

    +
    + + + + diff --git a/master/namespacemembers_l.html b/master/namespacemembers_l.html new file mode 100644 index 000000000..133bb89f3 --- /dev/null +++ b/master/namespacemembers_l.html @@ -0,0 +1,82 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - l -

    +
    + + + + diff --git a/master/namespacemembers_m.html b/master/namespacemembers_m.html new file mode 100644 index 000000000..951670720 --- /dev/null +++ b/master/namespacemembers_m.html @@ -0,0 +1,113 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - m -

    +
    + + + + diff --git a/master/namespacemembers_n.html b/master/namespacemembers_n.html new file mode 100644 index 000000000..a24b88b5c --- /dev/null +++ b/master/namespacemembers_n.html @@ -0,0 +1,77 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - n -

    +
    + + + + diff --git a/master/namespacemembers_o.html b/master/namespacemembers_o.html new file mode 100644 index 000000000..f5d7a6c74 --- /dev/null +++ b/master/namespacemembers_o.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - o -

    +
    + + + + diff --git a/master/namespacemembers_p.html b/master/namespacemembers_p.html new file mode 100644 index 000000000..ea466e021 --- /dev/null +++ b/master/namespacemembers_p.html @@ -0,0 +1,79 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - p -

    +
    + + + + diff --git a/master/namespacemembers_r.html b/master/namespacemembers_r.html new file mode 100644 index 000000000..58a83446f --- /dev/null +++ b/master/namespacemembers_r.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - r -

    +
    + + + + diff --git a/master/namespacemembers_s.html b/master/namespacemembers_s.html new file mode 100644 index 000000000..c8efc6ee3 --- /dev/null +++ b/master/namespacemembers_s.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - s -

    +
    + + + + diff --git a/master/namespacemembers_t.html b/master/namespacemembers_t.html new file mode 100644 index 000000000..33b8c9c00 --- /dev/null +++ b/master/namespacemembers_t.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - t -

    +
    + + + + diff --git a/master/namespacemembers_type.html b/master/namespacemembers_type.html new file mode 100644 index 000000000..b6edc735c --- /dev/null +++ b/master/namespacemembers_type.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    + + + + diff --git a/master/namespacemembers_v.html b/master/namespacemembers_v.html new file mode 100644 index 000000000..0d0da9a90 --- /dev/null +++ b/master/namespacemembers_v.html @@ -0,0 +1,78 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - v -

    +
    + + + + diff --git a/master/namespacemembers_vars.html b/master/namespacemembers_vars.html new file mode 100644 index 000000000..e52e6a908 --- /dev/null +++ b/master/namespacemembers_vars.html @@ -0,0 +1,75 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    + + + + diff --git a/master/namespacemembers_w.html b/master/namespacemembers_w.html new file mode 100644 index 000000000..d9621a888 --- /dev/null +++ b/master/namespacemembers_w.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - w -

    +
    + + + + diff --git a/master/namespacemembers_y.html b/master/namespacemembers_y.html new file mode 100644 index 000000000..4ba2cedd5 --- /dev/null +++ b/master/namespacemembers_y.html @@ -0,0 +1,77 @@ + + + + + + + +Seastar: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - y -

    +
    + + + + diff --git a/master/namespaces.html b/master/namespaces.html new file mode 100644 index 000000000..4aeb9c147 --- /dev/null +++ b/master/namespaces.html @@ -0,0 +1,522 @@ + + + + + + + +Seastar: Namespace List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Namespace List
    +
    +
    +
    Here is a list of all documented namespaces with brief descriptions:
    +
    [detail level 1234]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     NimplHolds the implementation parts of the metrics layer, do not use directly
     NseastarSeastar API namespace
     NstdSTL namespace
    +
    +
    + + + + diff --git a/master/namespaceseastar.html b/master/namespaceseastar.html new file mode 100644 index 000000000..68280bbd2 --- /dev/null +++ b/master/namespaceseastar.html @@ -0,0 +1,4250 @@ + + + + + + + +Seastar: seastar Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    seastar Namespace Reference
    +
    +
    +

    Detailed Description

    +

    Seastar API namespace.

    +
    + + + + + + + + + + + + + + + + + + +

    +Namespaces

    namespace  alien
     Integration with non-seastar applications.
     
    namespace  log_cli
     Configure application logging at run-time with program options.
     
    namespace  memory
     
    namespace  metrics
     metrics creation and registration
     
    namespace  net
     
    namespace  scollectd
     
    namespace  tls
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  abort_on_expiry
     
    class  abort_requested_exception
     
    class  abort_source
     
    struct  accept_result
     The result of an server_socket::accept() call. More...
     
    class  adder
     
    class  array_map
     
    class  async_sharded_service
     
    class  basic_rwlock
     
    class  basic_semaphore
     Counted resource guard. More...
     
    class  basic_sstring
     
    class  bool_class
     Type-safe boolean. More...
     
    class  broken_condition_variable
     
    class  broken_named_semaphore
     
    class  broken_pipe_exception
     
    struct  broken_promise
     Exception type for broken promises. More...
     
    class  broken_semaphore
     
    class  cancelled_error
     An exception Cancelled IOs resolve their future into (see io_intent) More...
     
    class  checked_ptr
     seastar::checked_ptr class is a wrapper class that may be used with any pointer type (smart like std::unique_ptr or raw pointers like int*). More...
     
    class  checked_ptr_is_null_exception
     The exception thrown by a default_null_deref_action. More...
     
    class  chunked_fifo
     
    class  circular_buffer
     
    class  circular_buffer_fixed_capacity
     
    class  concrete_execution_stage
     Concrete execution stage class. More...
     
    class  condition_variable
     Conditional variable. More...
     
    class  condition_variable_timed_out
     
    class  connected_socket
     
    struct  connected_socket_input_stream_config
     
    class  consumption_result
     
    struct  continue_consuming
     
    class  data_sink
     
    class  data_sink_impl
     
    class  data_source
     
    class  data_source_impl
     
    struct  default_null_deref_action
     Default not engaged seastar::checked_ptr dereferencing action (functor). More...
     
    struct  default_timeout_exception_factory
     
    class  deferred_action
     
    class  deferred_close
     
    class  deferred_stop
     
    class  deleter
     
    struct  directory_entry
     A directory entry being listed. More...
     
    struct  dummy_expiry
     
    class  enable_lw_shared_from_this
     
    class  enable_shared_from_this
     
    class  enum_hash
     
    struct  exception_future_marker
     
    class  execution_stage
     Base execution stage class. More...
     
    class  expiring_fifo
     
    class  fair_group
     Group of queues class. More...
     
    class  fair_queue
     Fair queuing class. More...
     
    class  fair_queue_entry
     
    class  fair_queue_ticket
     describes a request that passes through the fair_queue. More...
     
    class  file
     
    class  file_desc
     
    class  file_handle
     A shard-transportable handle to a file. More...
     
    class  file_handle_impl
     
    class  file_impl
     
    class  file_input_stream_history
     
    struct  file_input_stream_options
     Data structure describing options for opening a file input stream. More...
     
    struct  file_open_options
     
    struct  file_output_stream_options
     
    class  foreign_ptr
     
    class  fragmented_memory_input_stream
     
    class  fragmented_memory_output_stream
     
    struct  frame
     
    struct  free_deleter
     
    struct  function_input_iterator
     
    struct  function_traits
     
    struct  function_traits< Ret(*)(Args...)>
     
    struct  function_traits< Ret(Args...)>
     
    struct  function_traits< Ret(T::*)(Args...) const >
     
    struct  function_traits< Ret(T::*)(Args...)>
     
    struct  function_traits< T & >
     
    class  future
     A representation of a possibly not-yet-computed value. More...
     
    struct  future_for_get_promise_marker
     
    struct  future_state_base
     
    struct  futurize
     Converts a type to a future type, if it isn't already. More...
     
    class  gate
     
    class  gate_closed_exception
     
    struct  indirect_equal_to
     
    struct  indirect_hash
     
    struct  indirect_less
     
    class  inheriting_concrete_execution_stage
     Concrete execution stage class, with support for automatic scheduling_group inheritance. More...
     
    class  inheriting_execution_stage
     Base class for execution stages with support for automatic scheduling_group inheritance. More...
     
    class  input_stream
     
    class  io_completion
     
    class  io_group
     
    class  io_intent
     
    class  io_queue
     
    struct  ipv4_addr
     
    struct  ipv6_addr
     
    struct  is_future
     Check whether a type is a future. More...
     
    struct  is_smart_ptr
     
    struct  is_smart_ptr< foreign_ptr< T > >
     
    struct  is_smart_ptr< lw_shared_ptr< T > >
     
    struct  is_smart_ptr< shared_ptr< T > >
     
    struct  is_smart_ptr< std::unique_ptr< T > >
     
    class  kernel_completion
     
    class  lambda_task
     
    class  layered_file_impl
     
    struct  lazy_deref_wrapper
     This struct is a wrapper for lazy dereferencing a pointer. More...
     
    class  lazy_eval
     This class is a wrapper for a lazy evaluation of a value. More...
     
    struct  listen_options
     
    class  lowres_clock
     Low-resolution and efficient steady clock. More...
     
    class  lowres_system_clock
     Low-resolution and efficient system clock. More...
     
    class  lw_shared_ptr
     
    struct  lw_shared_ptr_counter_base
     
    struct  lw_shared_ptr_deleter
     
    struct  lw_shared_ptr_no_esft
     
    class  manual_clock
     
    class  measuring_output_stream
     
    class  memory_input_stream
     
    class  memory_output_stream
     
    struct  mmap_deleter
     
    class  named_semaphore_aborted
     
    struct  named_semaphore_exception_factory
     
    class  named_semaphore_timed_out
     
    struct  nested_exception
     
    class  network_interface
     
    class  network_stack
     
    struct  network_stack_entry
     
    class  no_sharded_instance_exception
     Exception thrown when a sharded object does not exist. More...
     
    class  noncopyable_function
     
    class  noncopyable_function< Ret(Args...) noexcept(Noexcept)>
     
    class  optimized_optional
     
    class  output_stream
     
    struct  output_stream_options
     
    class  peering_sharded_service
     Provide a sharded service with access to its peers. More...
     
    class  pipe
     A fixed-size pipe for communicating between two fibers. More...
     
    class  pipe_reader
     Read side of a seastar::pipe. More...
     
    class  pipe_writer
     Write side of a seastar::pipe. More...
     
    class  pollable_fd
     
    class  pollable_fd_state
     
    struct  pollfn
     
    class  posix_thread
     
    struct  prefetcher
     
    struct  prefetcher< 0, RW, LOC >
     
    class  promise
     promise - allows a future value to be made available at a later time. More...
     
    struct  promise_expiry
     
    class  queue
     
    class  ragel_parser_base
     
    class  reactor
     
    struct  reactor_options
     Configuration for the reactor. More...
     
    class  readable_eventfd
     
    struct  ready_future_marker
     
    class  reference_wrapper
     
    class  scattered_message
     
    class  scheduling_group
     Identifies function calls that are accounted as a group. More...
     
    class  scheduling_group_key
     
    struct  scheduling_group_key_config
     
    class  semaphore_aborted
     
    struct  semaphore_default_exception_factory
     
    class  semaphore_timed_out
     
    class  semaphore_units
     
    class  server_socket
     A listening socket, waiting to accept incoming network connections. More...
     
    struct  session_dn
     Distinguished name. More...
     
    class  sharded
     
    class  sharded_parameter
     Helper to pass a parameter to a sharded<> object that depends on the shard. It is evaluated on the shard, just before being passed to the local instance. It is useful when passing parameters to sharded::start(). More...
     
    class  shared_future
     Like future except the result can be waited for by many fibers. More...
     
    class  shared_mutex
     Shared/exclusive mutual exclusion. More...
     
    struct  shared_object
     
    class  shared_promise
     Like promise except that its counterpart is shared_future instead of future. More...
     
    class  shared_ptr
     
    struct  shared_ptr_count_base
     
    struct  shared_ptr_count_for
     
    struct  shared_ptr_make_helper
     
    struct  shared_ptr_make_helper< T, false >
     
    struct  shared_ptr_make_helper< T, true >
     
    class  simple_backtrace
     
    class  simple_memory_input_stream
     
    class  simple_memory_output_stream
     
    struct  simple_pollfn
     
    class  skip_bytes
     
    class  slab_allocator
     
    class  slab_class
     
    class  slab_item_base
     
    struct  slab_page_desc
     
    class  sleep_aborted
     exception that is thrown when application is in process of been stopped More...
     
    class  smp
     
    class  smp_message_queue
     
    struct  smp_options
     Configuration for the multicore aspect of seastar. More...
     
    class  smp_service_group
     
    struct  smp_service_group_config
     
    struct  smp_submit_to_options
     Options controlling the behaviour of smp::submit_to(). More...
     
    class  socket
     
    class  socket_address
     
    union  socket_address.u
     !< actual size of the relevant 'u' member More...
     
    class  sstring_builder
     
    struct  stat_data
     Filesystem object stat information. More...
     
    class  stop_consuming
     
    struct  stop_iteration_tag
     
    class  stream
     
    class  subscription
     
    class  task
     
    class  task_entry
     
    class  tasktrace
     
    class  temporary_buffer
     
    class  thread
     thread - stateful thread of execution More...
     
    class  thread_attributes
     Class that holds attributes controling the behavior of a thread. More...
     
    class  thread_cputime_clock
     
    class  timed_out_error
     
    class  timer
     
    class  timer_set
     
    class  tmp_dir
     
    class  tmp_file
     
    class  transform_iterator
     
    struct  tuple_map_types
     
    struct  tuple_map_types< MapClass, std::tuple< Elements... > >
     
    struct  unaligned
     
    struct  unix_domain_addr
     
    class  unread_overflow_exception
     
    struct  usecfmt_wrapper
     
    class  vector_data_sink
     
    class  weak_ptr
     
    class  weakly_referencable
     
    struct  when_any_result
     
    struct  with_clock
     Changes the clock used by shared_future<> and shared_promise<> when passed as the first template parameter. More...
     
    class  writeable_eventfd
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    +template<typename Service >
    using distributed = sharded< Service >
     
    +template<typename T >
    using futurize_t = typename futurize< T >::type
     
    using work_waiting_on_reactor = const noncopyable_function< bool()> &
     
    using idle_cpu_handler = noncopyable_function< idle_cpu_handler_result(work_waiting_on_reactor poll)>
     
    +using pollable_fd_state_ptr = boost::intrusive_ptr< pollable_fd_state >
     
    +using io_priority_class_id = unsigned
     
    +using shard_id = unsigned
     
    +using stream_id = unsigned
     
    +using io_group_ptr = std::shared_ptr< io_group >
     
    +using iovec_keeper = std::vector<::iovec >
     
    +using stop_iteration = bool_class< stop_iteration_tag >
     
    +using mmap_area = std::unique_ptr< char[], mmap_deleter >
     
    +using rwlock = basic_rwlock<>
     
    +using sched_clock = std::chrono::steady_clock
     
    +using follow_symlink = bool_class< follow_symlink_tag >
     
    using semaphore = basic_semaphore< semaphore_default_exception_factory >
     
    +using named_semaphore = basic_semaphore< named_semaphore_exception_factory >
     
    +using shared_ptr_counter_type = long
     
    +template<typename T >
    using shared_ptr_equal_by_value = indirect_equal_to< shared_ptr< T > >
     
    +template<typename T >
    using shared_ptr_value_hash = indirect_hash< shared_ptr< T > >
     
    +using simple_input_stream = simple_memory_input_stream
     
    +using simple_output_stream = simple_memory_output_stream
     
    +using smp_timeout_clock = lowres_clock
     
    +using smp_service_group_semaphore = basic_semaphore< named_semaphore_exception_factory, smp_timeout_clock >
     
    +using smp_service_group_semaphore_units = semaphore_units< named_semaphore_exception_factory, smp_timeout_clock >
     
    +using sstring = std::string
     
    +using steady_clock_type = std::chrono::steady_clock
     
    +using rss_key_type = std::basic_string_view< uint8_t >
     
    +using shared_backtrace = seastar::lw_shared_ptr< simple_backtrace >
     
    +using saved_backtrace = tasktrace
     
    + + + + + + + + + + + + + + + + + + + + + +

    +Enumerations

    enum class  open_flags {
    +  rw = O_RDWR +, ro = O_RDONLY +, wo = O_WRONLY +, create = O_CREAT +,
    +  truncate = O_TRUNC +, exclusive = O_EXCL +, dsync = O_DSYNC +
    + }
     
    enum class  directory_entry_type {
    +  unknown +, block_device +, char_device +, directory +,
    +  fifo +, link +, regular +, socket +
    + }
     
    enum class  fs_type {
    +  other +, xfs +, ext2 +, ext3 +,
    +  ext4 +, btrfs +, hfs +, tmpfs +
    + }
     Enumeration describing the type of a particular filesystem.
     
    enum class  access_flags {
    +  exists = F_OK +, read = R_OK +, write = W_OK +, execute = X_OK +,
    +  lookup = execute +
    + }
     
    enum class  file_permissions {
    +  user_read = S_IRUSR +, user_write = S_IWUSR +, user_execute = S_IXUSR +, group_read = S_IRGRP +,
    +  group_write = S_IWGRP +, group_execute = S_IXGRP +, others_read = S_IROTH +, others_write = S_IWOTH +,
    +  others_execute = S_IXOTH +, user_permissions = user_read | user_write | user_execute +, group_permissions = group_read | group_write | group_execute +, others_permissions = others_read | others_write | others_execute +,
    +  all_permissions = user_permissions | group_permissions | others_permissions +, default_file_permissions = user_read | user_write | group_read | group_write | others_read | others_write +, default_dir_permissions = all_permissions +
    + }
     
    enum class  idle_cpu_handler_result { no_more_work +, interrupted_by_higher_priority_task + }
     
    enum class  memory_allocator { seastar +, standard + }
     
    enum class  transport { TCP = IPPROTO_TCP +, SCTP = IPPROTO_SCTP + }
     
    enum class  log_level {
    +  error +, warn +, info +, debug +,
    +  trace +
    + }
     log level used with More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    void set_abort_on_ebadf (bool do_abort)
     
    bool is_abort_on_ebadf_enabled ()
     
    +template<typename T >
    constexpr T align_up (T v, T align)
     
    +template<typename T >
    constexpr T * align_up (T *v, size_t align)
     
    +template<typename T >
    constexpr T align_down (T v, T align)
     
    +template<typename T >
    constexpr T * align_down (T *v, size_t align)
     
    +template<typename CharType >
    std::unique_ptr< CharType[], free_deleterallocate_aligned_buffer (size_t size, size_t align)
     
    +constexpr unsigned count_leading_zeros (unsigned x)
     
    +constexpr unsigned count_leading_zeros (unsigned long x)
     
    +constexpr unsigned count_leading_zeros (unsigned long long x)
     
    +constexpr unsigned count_trailing_zeros (unsigned x)
     
    +constexpr unsigned count_trailing_zeros (unsigned long x)
     
    +constexpr unsigned count_trailing_zeros (unsigned long long x)
     
    +template<std::integral T>
    constexpr unsigned log2ceil (T n)
     
    +template<std::integral T>
    constexpr unsigned log2floor (T n)
     
    +template<typename T >
    cpu_to_le (T x) noexcept
     
    +template<typename T >
    le_to_cpu (T x) noexcept
     
    +template<typename T >
    cpu_to_be (T x) noexcept
     
    +template<typename T >
    be_to_cpu (T x) noexcept
     
    +template<typename T >
    cpu_to_le (const unaligned< T > &v) noexcept
     
    +template<typename T >
    le_to_cpu (const unaligned< T > &v) noexcept
     
    +template<typename T >
    read_le (const char *p) noexcept
     
    +template<typename T >
    void write_le (char *p, T datum) noexcept
     
    +template<typename T >
    read_be (const char *p) noexcept
     
    +template<typename T >
    void write_be (char *p, T datum) noexcept
     
    +template<typename T >
    consume_be (const char *&p) noexcept
     
    +template<typename T >
    void produce_be (char *&p, T datum) noexcept
     
    +template<typename T >
    auto operator co_await (future< T > f) noexcept
     
    template<typename T >
    auto operator co_await (coroutine::without_preemption_check< T > f) noexcept
     
    template<typename T1 , typename T2 , typename... More>
    auto do_with (T1 &&rv1, T2 &&rv2, More &&... more) noexcept
     
    template<typename Lock , typename Func >
    auto with_lock (Lock &lock, Func &&func)
     
    +void init_phdr_cache ()
     
    template<typename Function >
    auto make_execution_stage (const sstring &name, scheduling_group sg, Function &&fn)
     
    template<typename Function >
    auto make_execution_stage (const sstring &name, Function &&fn)
     
    template<typename Ret , typename Object , typename... Args>
    concrete_execution_stage< Ret, Object *, Args... > make_execution_stage (const sstring &name, scheduling_group sg, Ret(Object::*fn)(Args...))
     
    +template<typename Ret , typename Object , typename... Args>
    concrete_execution_stage< Ret, const Object *, Args... > make_execution_stage (const sstring &name, scheduling_group sg, Ret(Object::*fn)(Args...) const)
     
    +template<typename Ret , typename Object , typename... Args>
    concrete_execution_stage< Ret, Object *, Args... > make_execution_stage (const sstring &name, Ret(Object::*fn)(Args...))
     
    +template<typename Ret , typename Object , typename... Args>
    concrete_execution_stage< Ret, const Object *, Args... > make_execution_stage (const sstring &name, Ret(Object::*fn)(Args...) const)
     
    +open_flags operator| (open_flags a, open_flags b)
     
    +void operator|= (open_flags &a, open_flags b)
     
    +open_flags operator& (open_flags a, open_flags b)
     
    +void operator&= (open_flags &a, open_flags b)
     
    +access_flags operator| (access_flags a, access_flags b)
     
    +access_flags operator& (access_flags a, access_flags b)
     
    +constexpr file_permissions operator| (file_permissions a, file_permissions b)
     
    +constexpr file_permissions operator& (file_permissions a, file_permissions b)
     
    +future< shared_ptr< file_impl > > make_file_impl (int fd, file_open_options options, int oflags, struct stat st) noexcept
     
    template<std::invocable< file & > Func>
    +requires std::is_nothrow_move_constructible_v<Func>
    auto with_file (future< file > file_fut, Func func) noexcept
     Helper for ensuring a file is closed after func is called. More...
     
    template<std::invocable< file & > Func>
    +requires std::is_nothrow_move_constructible_v<Func>
    auto with_file_close_on_failure (future< file > file_fut, Func func) noexcept
     Helper for ensuring a file is closed if func fails. More...
     
    +bool filesystem_has_good_aio_support (sstring directory, bool verbose=false)
     
    input_stream< char > make_file_input_stream (file file, uint64_t offset, uint64_t len, file_input_stream_options options={})
     Creates an input_stream to read a portion of a file. More...
     
    input_stream< char > make_file_input_stream (file file, uint64_t offset, file_input_stream_options={})
     Create an input_stream for a given file, reading starting at a given position of the given file, with the specified options. More...
     
    input_stream< char > make_file_input_stream (file file, file_input_stream_options={})
     
    future< output_stream< char > > make_file_output_stream (file file, uint64_t buffer_size=8192) noexcept
     
    future< output_stream< char > > make_file_output_stream (file file, file_output_stream_options options) noexcept
     
    future< data_sinkmake_file_data_sink (file, file_output_stream_options) noexcept
     
    template<typename T = void, typename... A>
    future< T > make_ready_future (A &&... value) noexcept
     Creates a future in an available, value state. More...
     
    +template<typename T >
    future< std::remove_cv_t< std::remove_reference_t< T > > > as_ready_future (T &&v) noexcept
     Returns a ready future that is already resolved.
     
    template<typename T = void>
    future< T > make_exception_future (std::exception_ptr &&value) noexcept
     Creates a future in an available, failed state. More...
     
    template<typename T = void, typename Exception >
    future< T > make_exception_future (Exception &&ex) noexcept
     Creates a future in an available, failed state. More...
     
    +template<typename T = void>
    future< T > make_exception_future (const std::exception_ptr &ex) noexcept
     
    +template<typename T = void>
    future< T > make_exception_future (std::exception_ptr &ex) noexcept
     
    +template<typename T = void>
    future< T > make_exception_future (const std::exception_ptr &&ex) noexcept
     
    template<typename T = void>
    future< T > current_exception_as_future () noexcept
     Returns std::current_exception() wrapped in a future. More...
     
    template future< void > current_exception_as_future () noexcept
     
    +void report_failed_future (future_state_base::any &&state) noexcept
     
    +template<typename Func , typename... Args>
    auto futurize_invoke (Func &&func, Args &&... args) noexcept
     
    +template<typename Func , typename... Args>
    auto futurize_apply (Func &&func, std::tuple< Args... > &&args) noexcept
     
    +void log_exception_trace () noexcept
     
    +template<typename T , typename Exception >
    future< T > make_exception_future_with_backtrace (Exception &&ex) noexcept
     
    void set_idle_cpu_handler (idle_cpu_handler &&handler)
     
    +template<typename CharType >
    future copy (input_stream< CharType > &, output_stream< CharType > &)
     copy all the content from the input stream to the output stream
     
    +template future copy< char > (input_stream< char > &, output_stream< char > &)
     
    +template<typename AsyncAction >
    future repeat (const AsyncAction &action) noexcept=delete
     
    +template<typename AsyncAction >
    future repeat (AsyncAction &action) noexcept=delete
     
    template<typename AsyncAction >
    +requires std::is_invocable_r_v<stop_iteration, AsyncAction> || std::is_invocable_r_v<future<stop_iteration>, AsyncAction>
    future repeat (AsyncAction &&action) noexcept
     
    template<typename AsyncAction >
    +requires requires (AsyncAction aa) { bool(futurize_invoke(aa).get()); futurize_invoke(aa).get().value(); }
    repeat_until_value_return_type< AsyncAction > repeat_until_value (AsyncAction action) noexcept
     
    template<typename AsyncAction , typename StopCondition >
    +requires std::is_invocable_r_v<bool, StopCondition> && std::is_invocable_r_v<future<>, AsyncAction>
    future do_until (StopCondition stop_cond, AsyncAction action) noexcept
     
    template<typename AsyncAction >
    +requires std::is_invocable_r_v<future<>, AsyncAction>
    future keep_doing (AsyncAction action) noexcept
     
    template<typename Iterator , typename AsyncAction >
    +requires requires (Iterator i, AsyncAction aa) { { futurize_invoke(aa, *i) } -> std::same_as<future<>>; }
    future do_for_each (Iterator begin, Iterator end, AsyncAction action) noexcept
     Call a function for each item in a range, sequentially (iterator version). More...
     
    template<typename Container , typename AsyncAction >
    +requires requires (Container c, AsyncAction aa) { { futurize_invoke(aa, *std::begin(c)) } -> std::same_as<future<>>; std::end(c); }
    future do_for_each (Container &c, AsyncAction action) noexcept
     Call a function for each item in a range, sequentially (range version). More...
     
    template<typename Iterator , typename Sentinel , typename Func >
    +requires (requires (Func f, Iterator i) { { f(*i) } -> std::same_as<future<>>; { i++ }; } && (std::same_as<Sentinel, Iterator> || std::sentinel_for<Sentinel, Iterator>))
    future parallel_for_each (Iterator begin, Sentinel end, Func &&func) noexcept
     Run tasks in parallel (iterator version). More...
     
    +template<typename Range , typename Func >
    +requires requires (Func f, Range r) { { f(*std::begin(r)) } -> std::same_as<future<>>; std::end(r); }
    future parallel_for_each (Range &&range, Func &&func) noexcept
     
    template<typename Iterator , typename Sentinel , typename Func >
    +requires (requires (Func f, Iterator i) { { f(*i) } -> std::same_as<future<>>; { ++i }; } && (std::same_as<Sentinel, Iterator> || std::sentinel_for<Sentinel, Iterator>) )
    future max_concurrent_for_each (Iterator begin, Sentinel end, size_t max_concurrent, Func &&func) noexcept
     
    template<typename Range , typename Func >
    +requires requires (Func f, Range r) { { f(*std::begin(r)) } -> std::same_as<future<>>; std::end(r); }
    future max_concurrent_for_each (Range &&range, size_t max_concurrent, Func &&func) noexcept
     
    +template<typename Func >
    lambda_task< Func > * make_task (Func &&func) noexcept
     
    +template<typename Func >
    lambda_task< Func > * make_task (scheduling_group sg, Func &&func) noexcept
     
    template<typename Iterator , typename Mapper , typename Reducer >
    +requires requires (Iterator i, Mapper mapper, Reducer reduce) { *i++; { i != i } -> std::convertible_to<bool>; mapper(*i); reduce(futurize_invoke(mapper, *i).get()); }
    auto map_reduce (Iterator begin, Iterator end, Mapper &&mapper, Reducer &&r) -> typename reducer_traits< Reducer >::future_type
     
    template<typename Iterator , typename Mapper , typename Initial , typename Reduce >
    +requires requires (Iterator i, Mapper mapper, Initial initial, Reduce reduce) { *i++; { i != i} -> std::convertible_to<bool>; mapper(*i); requires is_future<decltype(mapper(*i))>::value; { reduce(std::move(initial), mapper(*i).get()) } -> std::convertible_to<Initial>; }
    future< Initial > map_reduce (Iterator begin, Iterator end, Mapper &&mapper, Initial initial, Reduce reduce)
     
    template<typename Range , typename Mapper , typename Initial , typename Reduce >
    +requires requires (Range range, Mapper mapper, Initial initial, Reduce reduce) { std::begin(range); std::end(range); mapper(*std::begin(range)); requires is_future<std::remove_reference_t<decltype(mapper(*std::begin(range)))>>::value; { reduce(std::move(initial), mapper(*std::begin(range)).get()) } -> std::convertible_to<Initial>; }
    future< Initial > map_reduce (Range &&range, Mapper &&mapper, Initial initial, Reduce reduce)
     
    bool set_abort_on_internal_error (bool do_abort) noexcept
     
    void on_internal_error (logger &logger, std::string_view reason)
     
    void on_internal_error (logger &logger, std::exception_ptr ex)
     
    void on_internal_error_noexcept (logger &logger, std::string_view reason) noexcept
     
    void on_fatal_internal_error (logger &logger, std::string_view reason) noexcept
     
    template<typename CharType >
    temporary_buffer< CharType > make_temporary_buffer (std::pmr::polymorphic_allocator< CharType > *allocator, std::size_t size)
     
    +void throw_system_error_on (bool condition, const char *what_arg="")
     
    +template<typename T >
    void throw_kernel_error (T r)
     
    +template<typename T >
    void throw_pthread_error (T r)
     
    +mmap_area mmap_anonymous (void *addr, size_t length, int prot, int flags)
     
    +sigset_t make_sigset_mask (int signo)
     
    +sigset_t make_full_sigset_mask ()
     
    +sigset_t make_empty_sigset_mask ()
     
    +void pin_this_thread (unsigned cpu_id)
     
    +std::set< unsigned > get_current_cpuset ()
     
    +bool need_preempt () noexcept
     
    +template<typename T , int LOC = 3>
    void prefetch (T *ptr)
     
    +template<typename Iterator , int LOC = 3>
    void prefetch (Iterator begin, Iterator end)
     
    +template<size_t C, typename T , int LOC = 3>
    void prefetch_n (T **pptr)
     
    +template<size_t L, int LOC = 3>
    void prefetch (void *ptr)
     
    +template<size_t L, typename Iterator , int LOC = 3>
    void prefetch_n (Iterator begin, Iterator end)
     
    +template<size_t L, size_t C, typename T , int LOC = 3>
    void prefetch_n (T **pptr)
     
    +template<typename T , int LOC = 3>
    void prefetchw (T *ptr)
     
    +template<typename Iterator , int LOC = 3>
    void prefetchw_n (Iterator begin, Iterator end)
     
    +template<size_t C, typename T , int LOC = 3>
    void prefetchw_n (T **pptr)
     
    +template<size_t L, int LOC = 3>
    void prefetchw (void *ptr)
     
    +template<size_t L, typename Iterator , int LOC = 3>
    void prefetchw_n (Iterator begin, Iterator end)
     
    +template<size_t L, size_t C, typename T , int LOC = 3>
    void prefetchw_n (T **pptr)
     
    +template<typename... A>
    std::ostream & fprint (std::ostream &os, const char *fmt, A &&... a)
     
    +template<typename... A>
    void print (const char *fmt, A &&... a)
     
    +template<typename... A>
    std::string sprint (const char *fmt, A &&... a)
     
    +template<typename... A>
    std::string sprint (const sstring &fmt, A &&... a)
     
    +template<typename Iterator >
    std::string format_separated (Iterator b, Iterator e, const char *sep=", ")
     
    +template<typename TimePoint >
    usecfmt_wrapper< TimePoint > usecfmt (TimePoint tp)
     
    +template<typename Clock , typename Rep , typename Period >
    std::ostream & operator<< (std::ostream &os, usecfmt_wrapper< std::chrono::time_point< Clock, std::chrono::duration< Rep, Period > > > tp)
     
    +template<typename... A>
    void log (A &&... a)
     
    template<typename... A>
    sstring format (const char *fmt, A &&... a)
     
    +template<typename... A>
    std::ostream & fmt_print (std::ostream &os, const char *format, A &&... a)
     
    +void trim_trailing_spaces_and_tabs (sstring &str)
     
    +reactorengine ()
     
    +bool engine_is_ready ()
     
    +int hrtimer_signal ()
     
    +void report_exception (std::string_view message, std::exception_ptr) noexcept
     
    +cpu_set_t cpuid_to_cpuset (unsigned cpuid)
     
    +constexpr unsigned max_scheduling_groups ()
     
    future< scheduling_groupcreate_scheduling_group (sstring name, float shares) noexcept
     
    future< scheduling_groupcreate_scheduling_group (sstring name, sstring shortname, float shares) noexcept
     
    future destroy_scheduling_group (scheduling_group sg) noexcept
     
    future rename_scheduling_group (scheduling_group sg, sstring new_name) noexcept
     
    future rename_scheduling_group (scheduling_group sg, sstring new_name, sstring new_shortname) noexcept
     
    template<typename T , typename... ConstructorArgs>
    scheduling_group_key_config make_scheduling_group_key_config (ConstructorArgs... args)
     
    future< scheduling_group_keyscheduling_group_key_create (scheduling_group_key_config cfg) noexcept
     
    template<typename T >
    T & scheduling_group_get_specific (scheduling_group sg, scheduling_group_key key)
     
    +scheduling_group current_scheduling_group () noexcept
     Returns the current scheduling group.
     
    +scheduling_group default_scheduling_group () noexcept
     
    template<typename T >
    T & scheduling_group_get_specific (scheduling_group_key key) noexcept
     
    template<typename SpecificValType , typename Mapper , typename Reducer , typename Initial >
    +requires requires(SpecificValType specific_val, Mapper mapper, Reducer reducer, Initial initial) { {reducer(initial, mapper(specific_val))} -> std::convertible_to<Initial>; }
    future< typename function_traits< Reducer >::return_type > map_reduce_scheduling_group_specific (Mapper mapper, Reducer reducer, Initial initial_val, scheduling_group_key key)
     
    template<typename SpecificValType , typename Reducer , typename Initial >
    +requires requires(SpecificValType specific_val, Reducer reducer, Initial initial) { {reducer(initial, specific_val)} -> std::convertible_to<Initial>; }
    future< typename function_traits< Reducer >::return_type > reduce_scheduling_group_specific (Reducer reducer, Initial initial_val, scheduling_group_key key)
     
    server_socket listen (socket_address sa)
     
    server_socket listen (socket_address sa, listen_options opts)
     
    future< connected_socketconnect (socket_address sa)
     
    future< connected_socketconnect (socket_address sa, socket_address local, transport proto)
     
    socket make_socket ()
     
    net::udp_channel make_udp_channel ()
     
    net::udp_channel make_udp_channel (const socket_address &local)
     
    net::datagram_channel make_unbound_datagram_channel (sa_family_t family)
     
    net::datagram_channel make_bound_datagram_channel (const socket_address &local)
     
    future check_direct_io_support (std::string_view path) noexcept
     
    future make_directory (std::string_view name, file_permissions permissions=file_permissions::default_dir_permissions) noexcept
     
    future touch_directory (std::string_view name, file_permissions permissions=file_permissions::default_dir_permissions) noexcept
     
    future recursive_touch_directory (std::string_view name, file_permissions permissions=file_permissions::default_dir_permissions) noexcept
     
    future sync_directory (std::string_view name) noexcept
     
    future remove_file (std::string_view name) noexcept
     
    future rename_file (std::string_view old_name, std::string_view new_name) noexcept
     
    future< stat_datafile_stat (std::string_view name, follow_symlink fs=follow_symlink::yes) noexcept
     
    future< uint64_t > file_size (std::string_view name) noexcept
     
    future< bool > file_accessible (std::string_view name, access_flags flags) noexcept
     
    future< bool > file_exists (std::string_view name) noexcept
     
    future< std::optional< directory_entry_type > > file_type (std::string_view name, follow_symlink follow=follow_symlink::yes) noexcept
     
    future link_file (std::string_view oldpath, std::string_view newpath) noexcept
     
    future chmod (std::string_view name, file_permissions permissions) noexcept
     
    future< fs_typefile_system_at (std::string_view name) noexcept
     
    future< uint64_t > fs_avail (std::string_view name) noexcept
     
    future< uint64_t > fs_free (std::string_view name) noexcept
     
    template<typename ExceptionFactory , typename Clock = typename timer<>::clock>
    semaphore_units< ExceptionFactory, Clock > consume_units (basic_semaphore< ExceptionFactory, Clock > &sem, size_t units) noexcept
     Consume units from semaphore temporarily. More...
     
    +shard_id this_shard_id () noexcept
     Returns shard_id of the of the current shard.
     
    +template<std::invocable Func>
    +requires (!std::is_nothrow_move_constructible_v<Func>)
    futurize_t< std::invoke_result_t< Func > > with_shared (shared_mutex &sm, Func &&func) noexcept
     
    +template<std::invocable Func>
    +requires (!std::is_nothrow_move_constructible_v<Func>)
    futurize_t< std::invoke_result_t< Func > > with_lock (shared_mutex &sm, Func &&func) noexcept
     
    template<internal::FutureBasicSharedLockable T>
    future< std::shared_lock< T > > get_shared_lock (T &t)
     Construct a RAII-based shared lock corresponding to a given object. More...
     
    template<internal::FutureBasicLockable T>
    future< std::unique_lock< T > > get_unique_lock (T &t)
     Construct a RAII-based unique lock corresponding to a given object. More...
     
    +template<typename T , typename... A>
    lw_shared_ptr< T > make_lw_shared (A &&... a)
     
    +template<typename T >
    lw_shared_ptr< T > make_lw_shared (T &&a)
     
    +template<typename T >
    lw_shared_ptr< T > make_lw_shared (T &a)
     
    +template<typename T , typename... A>
    shared_ptr< T > make_shared (A &&... a)
     
    +template<typename T >
    shared_ptr< T > make_shared (T &&a)
     
    +template<typename T , typename U >
    shared_ptr< T > static_pointer_cast (const shared_ptr< U > &p)
     
    +template<typename T , typename U >
    shared_ptr< T > dynamic_pointer_cast (const shared_ptr< U > &p)
     
    +template<typename T , typename U >
    shared_ptr< T > const_pointer_cast (const shared_ptr< U > &p)
     
    +template<typename T >
    std::ostream & operator<< (std::ostream &out, const lw_shared_ptr< T > &p)
     
    +template<typename T , typename U >
    bool operator== (const shared_ptr< T > &x, const shared_ptr< U > &y)
     
    +template<typename T >
    bool operator== (const shared_ptr< T > &x, std::nullptr_t)
     
    +template<typename T >
    bool operator== (std::nullptr_t, const shared_ptr< T > &y)
     
    +template<typename T >
    bool operator== (const lw_shared_ptr< T > &x, std::nullptr_t)
     
    +template<typename T >
    bool operator== (std::nullptr_t, const lw_shared_ptr< T > &y)
     
    +template<typename T , typename U >
    bool operator!= (const shared_ptr< T > &x, const shared_ptr< U > &y)
     
    +template<typename T >
    bool operator!= (const shared_ptr< T > &x, std::nullptr_t)
     
    +template<typename T >
    bool operator!= (std::nullptr_t, const shared_ptr< T > &y)
     
    +template<typename T >
    bool operator!= (const lw_shared_ptr< T > &x, std::nullptr_t)
     
    +template<typename T >
    bool operator!= (std::nullptr_t, const lw_shared_ptr< T > &y)
     
    +template<typename T , typename U >
    bool operator< (const shared_ptr< T > &x, const shared_ptr< U > &y)
     
    +template<typename T >
    bool operator< (const shared_ptr< T > &x, std::nullptr_t)
     
    +template<typename T >
    bool operator< (std::nullptr_t, const shared_ptr< T > &y)
     
    +template<typename T , typename U >
    bool operator<= (const shared_ptr< T > &x, const shared_ptr< U > &y)
     
    +template<typename T >
    bool operator<= (const shared_ptr< T > &x, std::nullptr_t)
     
    +template<typename T >
    bool operator<= (std::nullptr_t, const shared_ptr< T > &y)
     
    +template<typename T , typename U >
    bool operator> (const shared_ptr< T > &x, const shared_ptr< U > &y)
     
    +template<typename T >
    bool operator> (const shared_ptr< T > &x, std::nullptr_t)
     
    +template<typename T >
    bool operator> (std::nullptr_t, const shared_ptr< T > &y)
     
    +template<typename T , typename U >
    bool operator>= (const shared_ptr< T > &x, const shared_ptr< U > &y)
     
    +template<typename T >
    bool operator>= (const shared_ptr< T > &x, std::nullptr_t)
     
    +template<typename T >
    bool operator>= (std::nullptr_t, const shared_ptr< T > &y)
     
    +template<typename T >
    std::ostream & operator<< (std::ostream &out, const shared_ptr< T > &p)
     
    +template<typename Stream , typename StreamVisitor , typename = std::enable_if_t<Stream::has_with_stream::value>>
    decltype(auto) with_serialized_stream (Stream &stream, StreamVisitor &&visitor)
     
    +template<typename Stream , typename StreamVisitor , typename = std::enable_if_t<!Stream::has_with_stream::value>, typename = void>
    decltype(auto) with_serialized_stream (Stream &stream, StreamVisitor &&visitor)
     
    template<typename Clock = steady_clock_type, typename Rep , typename Period >
    future sleep (std::chrono::duration< Rep, Period > dur)
     
    template<typename Clock = steady_clock_type>
    future sleep_abortable (typename Clock::duration dur)
     
    +template future sleep_abortable< steady_clock_type > (typename steady_clock_type::duration)
     
    +template future sleep_abortable< lowres_clock > (typename lowres_clock::duration)
     
    template<typename Clock = steady_clock_type>
    future sleep_abortable (typename Clock::duration dur, abort_source &as)
     
    +template future sleep_abortable< steady_clock_type > (typename steady_clock_type::duration, abort_source &)
     
    +template future sleep_abortable< lowres_clock > (typename lowres_clock::duration, abort_source &)
     
    +template future sleep_abortable< manual_clock > (typename manual_clock::duration, abort_source &)
     
    smp_service_group default_smp_service_group () noexcept
     
    future< smp_service_groupcreate_smp_service_group (smp_service_group_config ssgc) noexcept
     
    future destroy_smp_service_group (smp_service_group ssg) noexcept
     
    +void init_default_smp_service_group (shard_id cpu)
     
    +smp_service_group_semaphoreget_smp_service_groups_semaphore (unsigned ssg_id, shard_id t) noexcept
     
    +template<typename string_type = sstring>
    string_type uninitialized_string (size_t size)
     
    +template<typename char_type , typename size_type , size_type Max, size_type N, bool NulTerminate>
    basic_sstring< char_type, size_type, Max, NulTerminate > operator+ (const char(&s)[N], const basic_sstring< char_type, size_type, Max, NulTerminate > &t)
     
    +template<typename T >
    static size_t constexpr str_len (const T &s)
     
    +template<typename char_type , typename size_type , size_type max_size>
    void swap (basic_sstring< char_type, size_type, max_size > &x, basic_sstring< char_type, size_type, max_size > &y) noexcept
     
    +template<typename char_type , typename size_type , size_type max_size, bool NulTerminate, typename char_traits >
    std::basic_ostream< char_type, char_traits > & operator<< (std::basic_ostream< char_type, char_traits > &os, const basic_sstring< char_type, size_type, max_size, NulTerminate > &s)
     
    +template<typename char_type , typename size_type , size_type max_size, bool NulTerminate, typename char_traits >
    std::basic_istream< char_type, char_traits > & operator>> (std::basic_istream< char_type, char_traits > &is, basic_sstring< char_type, size_type, max_size, NulTerminate > &s)
     
    +template<typename T >
    static void copy_str_to (char *&dst, const T &s)
     
    +template<typename String = sstring, typename... Args>
    static String make_sstring (Args &&... args)
     
    +template<typename string_type = sstring, typename T >
    string_type to_sstring (T value)
     
    +void schedule (task *t) noexcept
     
    +void schedule_checked (task *t) noexcept
     
    +void schedule_urgent (task *t) noexcept
     
    template<typename Func , typename... Args>
    futurize_t< std::invoke_result_t< Func, Args... > > async (thread_attributes attr, Func &&func, Args &&... args) noexcept
     
    template<typename Func , typename... Args>
    futurize_t< std::invoke_result_t< Func, Args... > > async (Func &&func, Args &&... args) noexcept
     
    +template<typename T , typename Alloc >
    void transfer_pass1 (Alloc &a, T *from, T *to, std::enable_if_t< std::is_nothrow_move_constructible_v< T > > *=nullptr)
     
    +template<typename T , typename Alloc >
    void transfer_pass2 (Alloc &, T *, T *, std::enable_if_t< std::is_nothrow_move_constructible_v< T > > *=nullptr)
     
    +template<typename T , typename Alloc >
    void transfer_pass1 (Alloc &a, T *from, T *to, std::enable_if_t<!std::is_nothrow_move_constructible_v< T > > *=nullptr)
     
    +template<typename T , typename Alloc >
    void transfer_pass2 (Alloc &a, T *from, T *, std::enable_if_t<!std::is_nothrow_move_constructible_v< T > > *=nullptr)
     
    +template<typename T >
    struct seastar::unaligned __attribute__ ((packed))
     
    +template<typename T , typename F >
    auto unaligned_cast (F *p) noexcept
     
    +template<typename T , typename F >
    auto unaligned_cast (const F *p) noexcept
     
    +constexpr size_t operator""_KiB (unsigned long long n)
     
    +constexpr size_t operator""_MiB (unsigned long long n)
     
    +constexpr size_t operator""_GiB (unsigned long long n)
     
    +constexpr size_t operator""_TiB (unsigned long long n)
     
    template<typename... FutOrFuncs>
    auto when_all (FutOrFuncs &&... fut_or_funcs) noexcept
     
    template<typename FutureIterator >
    +requires requires (FutureIterator i) { { *i++ }; requires is_future<std::remove_reference_t<decltype(*i)>>::value; }
    future< std::vector< typename std::iterator_traits< FutureIterator >::value_type > > when_all (FutureIterator begin, FutureIterator end) noexcept
     
    template<typename... FutOrFuncs>
    auto when_all_succeed (FutOrFuncs &&... fut_or_funcs) noexcept
     
    template<typename FutureIterator , typename = typename std::iterator_traits<FutureIterator>::value_type>
    +requires requires (FutureIterator i) { *i++; { i != i } -> std::convertible_to<bool>; requires is_future<std::remove_reference_t<decltype(*i)>>::value; }
    auto when_all_succeed (FutureIterator begin, FutureIterator end) noexcept
     
    template<typename T >
    auto when_all_succeed (std::vector< future< T > > &&futures) noexcept
     
    template<class FutureIterator >
    +requires requires (FutureIterator i) { { *i++ }; requires is_future<std::remove_reference_t<decltype(*i)>>::value; }
    auto when_any (FutureIterator begin, FutureIterator end) noexcept -> future< when_any_result< std::vector< std::decay_t< typename std::iterator_traits< FutureIterator >::value_type > > > >
     
    template<class... FutOrFuncs>
    auto when_any (FutOrFuncs &&... fut_or_funcs) noexcept
     
    template<typename Func , typename... Args>
    +requires std::is_nothrow_move_constructible_v<Func>
    auto with_scheduling_group (scheduling_group sg, Func func, Args &&... args) noexcept
     run a callable (with some arbitrary arguments) in a scheduling group More...
     
    template<typename ExceptionFactory = default_timeout_exception_factory, typename Clock , typename Duration , typename... T>
    future< T... > with_timeout (std::chrono::time_point< Clock, Duration > timeout, future< T... > f)
     Wait for either a future, or a timeout, whichever comes first. More...
     
    +auto operator co_await (coroutine::exception ex) noexcept
     
    +bool is_ip_unspecified (const ipv4_addr &addr) noexcept
     
    +bool is_port_unspecified (const ipv4_addr &addr) noexcept
     
    +socket_address make_ipv4_address (const ipv4_addr &addr) noexcept
     
    +socket_address make_ipv4_address (uint32_t ip, uint16_t port) noexcept
     
    +uint64_t ntohq (uint64_t v)
     
    +uint64_t htonq (uint64_t v)
     
    +std::ostream & operator<< (std::ostream &, const socket_address &)
     
    +std::ostream & operator<< (std::ostream &, const ipv4_addr &)
     
    +std::ostream & operator<< (std::ostream &, const ipv6_addr &)
     
    +bool operator== (const ipv4_addr &lhs, const ipv4_addr &rhs) noexcept
     
    +template<typename T >
    uint32_t toeplitz_hash (rss_key_type key, const T &data)
     
    +std::ostream & operator<< (std::ostream &, const unix_domain_addr &)
     
    +bool operator== (const frame &a, const frame &b) noexcept
     
    +frame decorate (uintptr_t addr) noexcept
     
    +template<typename Func >
    void backtrace (Func &&func) noexcept(noexcept(func(frame())))
     
    +saved_backtrace current_backtrace () noexcept
     
    +tasktrace current_tasktrace () noexcept
     
    +simple_backtrace current_backtrace_tasklocal () noexcept
     
    +std::ostream & operator<< (std::ostream &out, const tasktrace &b)
     
    template<class Exc , typename... Args>
    std::exception_ptr make_backtraced_exception_ptr (Args &&... args)
     
    template<class Exc , typename... Args>
    void throw_with_backtrace (Args &&... args)
     
    +template<closeable Closeable, std::invocable< Closeable & > Func>
    +requires std::is_nothrow_move_constructible_v<Closeable> && std::is_nothrow_move_constructible_v<Func>
    futurize_t< std::invoke_result_t< Func, Closeable & > > with_closeable (Closeable &&obj, Func func) noexcept
     
    +template<stoppable Stoppable, std::invocable< Stoppable & > Func>
    +requires std::is_nothrow_move_constructible_v<Stoppable> && std::is_nothrow_move_constructible_v<Func>
    futurize_t< std::invoke_result_t< Func, Stoppable & > > with_stoppable (Stoppable &&obj, Func func) noexcept
     
    +size_t parse_memory_size (std::string_view s)
     
    +static std::vector< char > string2vector (std::string_view str)
     
    +template<typename Func >
    +requires deferrable_action<Func>
    deferred_action< Func > defer (Func &&func)
     
    std::filesystem::filesystem_error make_filesystem_error (const std::string &what, std::filesystem::path path, int error)
     make a filesystem_error for system calls with a single file operand. More...
     
    std::filesystem::filesystem_error make_filesystem_error (const std::string &what, std::filesystem::path path1, std::filesystem::path path2, int error)
     make a filesystem_error for system calls with two file operands. More...
     
    future recursive_remove_directory (std::filesystem::path path) noexcept
     
    +template<typename Function , typename State >
    function_input_iterator< Function, State > make_function_input_iterator (Function func, State state)
     
    +template<typename Function , typename State >
    function_input_iterator< Function, State > make_function_input_iterator (Function &&func)
     
    +future now ()
     Returns a ready future.
     
    future yield () noexcept
     Returns a future which is not ready but is scheduled to resolve soon. More...
     
    future maybe_yield () noexcept
     
    future check_for_io_immediately () noexcept
     
    future later () noexcept
     Returns a future which is not ready but is scheduled to resolve soon. More...
     
    template<typename Func >
    lazy_eval< Func > value_of (Func &&func)
     
    template<typename T >
    lazy_deref_wrapper< T > lazy_deref (const T &p)
     
    +std::ostream & operator<< (std::ostream &out, log_level level)
     
    +std::istream & operator>> (std::istream &in, log_level &level)
     
    +void print_safe (const char *str, size_t len) noexcept
     
    +void print_safe (const char *str) noexcept
     
    +template<typename Integral , char Padding = ' '>
    +requires std::integral<Integral>
    char * convert_hex_safe (char *buf, size_t bufsz, Integral n) noexcept
     
    +template<typename Integral >
    +requires std::integral<Integral>
    void convert_zero_padded_hex_safe (char *buf, size_t bufsz, Integral n) noexcept
     
    +template<typename Integral >
    +requires std::unsigned_integral<Integral>
    void print_zero_padded_hex_safe (Integral n) noexcept
     
    +template<typename Integral >
    +requires std::unsigned_integral<Integral>
    size_t convert_decimal_safe (char *buf, size_t bufsz, Integral n) noexcept
     
    +template<typename Integral >
    void print_decimal_safe (Integral n) noexcept
     
    +sstring read_first_line (std::filesystem::path sys_file)
     
    +template<typename Type >
    Type read_first_line_as (std::filesystem::path sys_file)
     
    +template<typename T >
    reference_wrapper< T > ref (T &object) noexcept
     Wraps reference in a reference_wrapper.
     
    +template<typename T >
    reference_wrapper< const T > cref (const T &object) noexcept
     Wraps constant reference in a reference_wrapper.
     
    +const std::filesystem::path & default_tmpdir ()
     
    +void set_default_tmpdir (std::filesystem::path)
     
    future< tmp_filemake_tmp_file (std::filesystem::path path_template=default_tmpdir(), open_flags oflags=open_flags::rw, file_open_options options={}) noexcept
     
    future< tmp_dirmake_tmp_dir (std::filesystem::path path_template=default_tmpdir(), file_permissions create_permissions=file_permissions::default_dir_permissions) noexcept
     
    +template<typename Iterator , typename Func >
    transform_iterator< Iterator, Func > make_transform_iterator (Iterator i, Func f)
     
    template<template< typename > class FilterClass, typename... Elements>
    auto tuple_filter_by_type (const std::tuple< Elements... > &t)
     
    +template<template< typename > class FilterClass, typename... Elements>
    auto tuple_filter_by_type (std::tuple< Elements... > &&t)
     
    template<typename Function , typename... Elements>
    auto tuple_map (const std::tuple< Elements... > &t, Function &&f)
     
    +template<typename Function , typename... Elements>
    auto tuple_map (std::tuple< Elements... > &&t, Function &&f)
     
    template<typename Function , typename... Elements>
    void tuple_for_each (const std::tuple< Elements... > &t, Function &&f)
     
    +template<typename Function , typename... Elements>
    void tuple_for_each (std::tuple< Elements... > &t, Function &&f)
     
    +template<typename Function , typename... Elements>
    void tuple_for_each (std::tuple< Elements... > &&t, Function &&f)
     
    template<typename... Args>
    auto make_visitor (Args &&... args)
     
    template<typename Variant , typename... Args>
    auto visit (Variant &&variant, Args &&... args)
     
    +template<typename... Args>
    internal::castable_variant< Args... > variant_cast (std::variant< Args... > &&var)
     
    +template<typename... Args>
    internal::castable_variant< Args... > variant_cast (const std::variant< Args... > &var)
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    +logger io_log
     
    +bool aio_nowait_supported
     
    +__thread reactorlocal_engine
     
    +__thread size_t task_quota
     
    +logger seastar_logger
     
    +static constexpr uint16_t SLAB_MAGIC_NUMBER = 0x51AB
     
    +static constexpr smp_timeout_clock::time_point smp_no_timeout = smp_timeout_clock::time_point::max()
     
    +constexpr size_t KB = 1 << 10
     
    +constexpr size_t MB = 1 << 20
     
    +constexpr size_t GB = 1 << 30
     
    static constexpr uint8_t default_rsskey_40bytes_v []
     
    +static constexpr rss_key_type default_rsskey_40bytes {default_rsskey_40bytes_v, sizeof(default_rsskey_40bytes_v)}
     
    static constexpr uint8_t default_rsskey_52bytes_v []
     
    +static constexpr rss_key_type default_rsskey_52bytes {default_rsskey_52bytes_v, sizeof(default_rsskey_52bytes_v)}
     
    +

    Class Documentation

    + +

    ◆ seastar::continue_consuming

    + +
    +
    + + + + +
    struct seastar::continue_consuming
    +
    + +
    +
    + +

    ◆ seastar::file_input_stream_options

    + +
    +
    + + + + +
    struct seastar::file_input_stream_options
    +
    + + + + + + + + + + + +
    Class Members
    +size_t +buffer_size +I/O buffer size.
    +lw_shared_ptr< file_input_stream_history > +dynamic_adjustments +Input stream history, if null dynamic adjustments are disabled.
    +unsigned +read_ahead +Maximum number of extra read-ahead operations.
    + +
    +
    + +

    ◆ seastar::file_output_stream_options

    + +
    +
    + + + + +
    struct seastar::file_output_stream_options
    +
    + + + + + + + + + + + +
    Class Members
    +unsigned +buffer_size +
    +unsigned +preallocation_size +Preallocate extents. For large files, set to a large number (a few megabytes) to reduce fragmentation.
    +unsigned +write_behind +Number of buffers to write in parallel.
    + +
    +
    + +

    ◆ seastar::frame

    + +
    +
    + + + + +
    struct seastar::frame
    +
    + + + + + + + + +
    Class Members
    +uintptr_t +addr +
    +const shared_object * +so +
    + +
    +
    + +

    ◆ seastar::function_traits

    + +
    +
    + + + + +
    struct seastar::function_traits
    +
    + +
    +
    + +

    ◆ seastar::lw_shared_ptr_deleter

    + +
    +
    + + + + +
    struct seastar::lw_shared_ptr_deleter
    +
    + +
    +
    + +

    ◆ seastar::network_stack_entry

    + +
    +
    + + + + +
    struct seastar::network_stack_entry
    +
    + + + + + +
    Class Members
    +typedef noncopyable_function< future< unique_ptr< network_stack > >(const option_group &)> +factory_func +
    + + + + + + + + + + + + + + +
    Class Members
    +factory_func +factory +
    +bool +is_default +
    +sstring +name +
    +unique_ptr< option_group > +opts +
    + +
    +
    + +

    ◆ seastar::noncopyable_function

    + +
    +
    + + + + +
    class seastar::noncopyable_function
    +
    + +
    +
    + +

    ◆ seastar::output_stream_options

    + +
    +
    + + + + +
    struct seastar::output_stream_options
    +
    + + + + + + + + +
    Class Members
    +bool +batch_flushes +Try to merge flushes with each other.
    +bool +trim_to_size +

    Make sure that buffers put into sink haven't grown larger than the configured size

    +
    + +
    +
    + +

    ◆ seastar::shared_object

    + +
    +
    + + + + +
    struct seastar::shared_object
    +
    + + + + + + + + + + + +
    Class Members
    +uintptr_t +begin +
    +uintptr_t +end +
    +sstring +name +
    + +
    +
    + +

    ◆ seastar::shared_ptr_make_helper

    + +
    +
    + + + + +
    struct seastar::shared_ptr_make_helper
    +
    + +
    +
    + +

    ◆ seastar::smp_service_group_config

    + +
    +
    + + + + +
    struct seastar::smp_service_group_config
    +
    + + + + + + + + +
    Class Members
    +optional< sstring > +group_name +

    An optional name for this smp group

    +

    If this optional is engaged, timeout exception messages of the group's semaphores will indicate the group's name.

    +
    +unsigned +max_nonlocal_requests +

    The maximum number of non-local requests that execute on a shard concurrently

    +

    Will be adjusted upwards to allow at least one request per non-local shard.

    +
    + +
    +
    + +

    ◆ seastar::socket_address.u

    + +
    +
    + + + + +
    union seastar::socket_address.u
    +
    + + + + + + + + + + + + + + + + + +
    Class Members
    +::sockaddr_in +in +
    +::sockaddr_in6 +in6 +
    +::sockaddr +sa +
    +::sockaddr_storage +sas +
    +::sockaddr_un +un +
    + +
    +
    + +

    ◆ seastar::tuple_map_types< MapClass, std::tuple< Elements... > >

    + +
    +
    + + + + +
    struct seastar::tuple_map_types< MapClass, std::tuple< Elements... > >
    +
    + + + + + +
    Class Members
    +typedef type... > +type +
    + +
    +
    + +

    ◆ seastar::usecfmt_wrapper

    + +
    +
    + + + + +
    struct seastar::usecfmt_wrapper
    +
    + + + + + +
    Class Members
    +TimePoint +val +
    + +
    +
    + +

    ◆ seastar::when_any_result

    + +
    +
    + + + + +
    struct seastar::when_any_result
    +
    + + + + + + + + +
    Class Members
    +Sequence +futures +
    +size_t +index +
    + +
    +
    +

    Typedef Documentation

    + +

    ◆ idle_cpu_handler

    + +
    +
    +

    Signature of a callback provided by the user, that the reactor calls when it has idle cycles.

    +

    The poll parameter is a work_waiting_on_reactor function that should be periodically called to check if the idle callback should return with idle_cpu_handler_result::interrupted_by_higher_priority_task

    + +
    +
    + +

    ◆ work_waiting_on_reactor

    + +
    +
    + + + + +
    using seastar::work_waiting_on_reactor = typedef const noncopyable_function<bool()>&
    +
    +

    Signature of a callback provided by the reactor to a user callback installed to take advantage of idle cpu cycles, used to periodically check if the CPU is still idle.

    +
    Returns
    true if the reactor has new work to do
    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ idle_cpu_handler_result

    + +
    +
    + + + + + +
    + + + + +
    enum class seastar::idle_cpu_handler_result
    +
    +strong
    +
    +

    Indicates the outcome of a user callback installed to take advantage of idle CPU cycles.

    + + + +
    Enumerator
    no_more_work 

    The user callback has no more work to perform.

    +
    interrupted_by_higher_priority_task 

    A call to the work_waiting_on_reactor parameter to idle_cpu_handler returned true

    +
    + +
    +
    + +

    ◆ memory_allocator

    + +
    +
    + + + + + +
    + + + + +
    enum class seastar::memory_allocator
    +
    +strong
    +
    + + + +
    Enumerator
    seastar 

    Seastar's own allocator, optimized for its shard-per core design. Strongly recommended for most seastar apps.

    +
    standard 

    The standard allocator from libc. Useful when writing seastar-based tool apps that want to minimize their footprint on the system they run on.

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ create_scheduling_group() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    future< scheduling_group > seastar::create_scheduling_group (sstring name,
    float shares 
    )
    +
    +noexcept
    +
    +

    Creates a scheduling group with a specified number of shares.

    +

    The operation is global and affects all shards. The returned scheduling group can then be used in any shard.

    +
    Parameters
    + + + +
    nameA name that identifiers the group; will be used as a label in the group's metrics
    sharesnumber of shares of the CPU time allotted to the group; Use numbers in the 1-1000 range (but can go above).
    +
    +
    +
    Returns
    a scheduling group that can be used on any shard
    + +
    +
    + +

    ◆ create_scheduling_group() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    future< scheduling_group > seastar::create_scheduling_group (sstring name,
    sstring shortname,
    float shares 
    )
    +
    +noexcept
    +
    +

    Creates a scheduling group with a specified number of shares.

    +

    The operation is global and affects all shards. The returned scheduling group can then be used in any shard.

    +
    Parameters
    + + + + +
    nameA name that identifies the group; will be used as a label in the group's metrics
    shortnameA name that identifies the group; will be printed in the logging message aside of the shard id. please note, the shortname will be truncated to 4 characters.
    sharesnumber of shares of the CPU time allotted to the group; Use numbers in the 1-1000 range (but can go above).
    +
    +
    +
    Returns
    a scheduling group that can be used on any shard
    + +
    +
    + +

    ◆ create_smp_service_group()

    + +
    +
    + + + + + +
    + + + + + + + + +
    future< smp_service_group > seastar::create_smp_service_group (smp_service_group_config ssgc)
    +
    +noexcept
    +
    +

    Creates an smp_service_group with the specified configuration.

    +

    The smp_service_group is global, and after this call completes, the returned value can be used on any shard.

    + +
    +
    + +

    ◆ default_smp_service_group()

    + +
    +
    + + + + + +
    + + + + + + + +
    smp_service_group seastar::default_smp_service_group ()
    +
    +inlinenoexcept
    +
    +

    Returns the default smp_service_group. This smp_service_group does not impose any limits on concurrency in the target shard. This makes is deadlock-safe, but can consume unbounded resources, and should therefore only be used when initiator concurrency is very low (e.g. administrative tasks).

    + +
    +
    + +

    ◆ destroy_scheduling_group()

    + +
    +
    + + + + + +
    + + + + + + + + +
    future seastar::destroy_scheduling_group (scheduling_group sg)
    +
    +noexcept
    +
    +

    Destroys a scheduling group.

    +

    Destroys a scheduling_group previously created with create_scheduling_group(). The destroyed group must not be currently in use and must not be used later.

    +

    The operation is global and affects all shards.

    +
    Parameters
    + + +
    sgThe scheduling group to be destroyed
    +
    +
    +
    Returns
    a future that is ready when the scheduling group has been torn down
    + +
    +
    + +

    ◆ destroy_smp_service_group()

    + +
    +
    + + + + + +
    + + + + + + + + +
    future seastar::destroy_smp_service_group (smp_service_group ssg)
    +
    +noexcept
    +
    +

    Destroy an smp_service_group.

    +

    Frees all resources used by an smp_service_group. It must not be used again once this function is called.

    + +
    +
    + +

    ◆ format()

    + +
    +
    +
    +template<typename... A>
    + + + + + + + + + + + + + + + + + + +
    sstring seastar::format (const char * fmt,
    A &&... a 
    )
    +
    +

    Evaluate the formatted string in a native fmt library format

    +
    Parameters
    + + + +
    fmtformat string with the native fmt library syntax
    apositional parameters
    +
    +
    +
    Returns
    sstring object with the result of applying the given positional parameters on a given format string.
    + +
    +
    + +

    ◆ is_abort_on_ebadf_enabled()

    + +
    +
    + + + + + + + +
    bool seastar::is_abort_on_ebadf_enabled ()
    +
    +

    Queries the current setting for seastar's behavior on invalid file descriptor access. See set_abort_on_ebadf().

    + +
    +
    + +

    ◆ lazy_deref()

    + +
    +
    +
    +template<typename T >
    + + + + + + + + +
    lazy_deref_wrapper< T > seastar::lazy_deref (const T & p)
    +
    +

    Create a seastar::lazy_deref_wrapper object.

    +

    The actual dereferencing will happen when the object is inserted into a stream. The pointer is not copied, only a reference is saved to it. Smart pointers are supported as well.

    +
    Parameters
    + + +
    pa raw pointer or a smart pointer
    +
    +
    +
    Returns
    a lazy_deref_wrapper object
    + +
    +
    + +

    ◆ make_backtraced_exception_ptr()

    + +
    +
    +
    +template<class Exc , typename... Args>
    + + + + + + + + +
    std::exception_ptr seastar::make_backtraced_exception_ptr (Args &&... args)
    +
    +

    Create an exception pointer of unspecified type that is derived from Exc type with a backtrace attached to its message.

    +
    Template Parameters
    + + + +
    Excexception type to be caught at the receiving side
    Argstypes of arguments forwarded to the constructor of Exc
    +
    +
    +
    Parameters
    + + +
    argsarguments forwarded to the constructor of Exc
    +
    +
    +
    Returns
    std::exception_ptr containing the exception with the backtrace.
    + +
    +
    + +

    ◆ make_file_data_sink()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    future< data_sink > seastar::make_file_data_sink (file ,
    file_output_stream_options  
    )
    +
    +noexcept
    +
    +

    Create a data_sink for writing starting at the position zero of a newly created file. Closes the file if the sink creation fails.

    + +
    +
    + +

    ◆ make_file_input_stream() [1/3]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    input_stream< char > seastar::make_file_input_stream (file file,
    file_input_stream_options  = {} 
    )
    +
    +

    Create an input_stream for a given file, with the specified options

    Parameters
    + + +
    fileFile to read; multiple streams for the same file may coexist
    +
    +
    +
    Note
    Multiple fibers of execution (continuations) may safely open multiple input streams concurrently for the same file.
    + +
    +
    + +

    ◆ make_file_input_stream() [2/3]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    input_stream< char > seastar::make_file_input_stream (file file,
    uint64_t offset,
    file_input_stream_options  = {} 
    )
    +
    + +

    Create an input_stream for a given file, reading starting at a given position of the given file, with the specified options.

    +
    Parameters
    + + + +
    fileFile to read; multiple streams for the same file may coexist
    offsetStarting offset to read from (no alignment restrictions)
    +
    +
    +
    Note
    Multiple fibers of execution (continuations) may safely open multiple input streams concurrently for the same file.
    + +
    +
    + +

    ◆ make_file_input_stream() [3/3]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    input_stream< char > seastar::make_file_input_stream (file file,
    uint64_t offset,
    uint64_t len,
    file_input_stream_options options = {} 
    )
    +
    + +

    Creates an input_stream to read a portion of a file.

    +
    Parameters
    + + + + + +
    fileFile to read; multiple streams for the same file may coexist
    offsetStarting offset to read from (no alignment restrictions)
    lenMaximum number of bytes to read; the stream will stop at end-of-file even if offset + len is beyond end-of-file.
    optionsA set of options controlling the stream.
    +
    +
    +
    Note
    Multiple input streams may exist concurrently for the same file.
    + +
    +
    + +

    ◆ make_file_output_stream() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    future< output_stream< char > > seastar::make_file_output_stream (file file,
    file_output_stream_options options 
    )
    +
    +noexcept
    +
    +

    Create an output_stream for writing starting at the position zero of a newly created file. NOTE: flush() should be the last thing to be called on a file output stream. Closes the file if the stream creation fails.

    + +
    +
    + +

    ◆ make_file_output_stream() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    future< output_stream< char > > seastar::make_file_output_stream (file file,
    uint64_t buffer_size = 8192 
    )
    +
    +noexcept
    +
    +

    Create an output_stream for writing starting at the position zero of a newly created file. NOTE: flush() should be the last thing to be called on a file output stream. Closes the file if the stream creation fails.

    +
    Examples
    file_demo.cc.
    +
    + +
    +
    + +

    ◆ make_filesystem_error() [1/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    std::filesystem::filesystem_error seastar::make_filesystem_error (const std::string & what,
    std::filesystem::path path,
    int error 
    )
    +
    + +

    make a filesystem_error for system calls with a single file operand.

    +
    Parameters
    + + + + +
    what- describes the action that failed
    path- path of the file that hit the error
    error- the system error number (see errno(3))
    +
    +
    + +
    +
    + +

    ◆ make_filesystem_error() [2/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    std::filesystem::filesystem_error seastar::make_filesystem_error (const std::string & what,
    std::filesystem::path path1,
    std::filesystem::path path2,
    int error 
    )
    +
    + +

    make a filesystem_error for system calls with two file operands.

    +
    Parameters
    + + + + +
    what- describes the action that failed
    path1,path2- paths of the files that hit the error
    error- the system error number (see errno(3))
    +
    +
    + +
    +
    + +

    ◆ make_scheduling_group_key_config()

    + +
    +
    +
    +template<typename T , typename... ConstructorArgs>
    + + + + + + + + +
    scheduling_group_key_config seastar::make_scheduling_group_key_config (ConstructorArgs... args)
    +
    +

    A template function that builds a scheduling group specific value configuration. This configuration is used by the infrastructure to allocate memory for the values and initialize or deinitialize them when they are created or destroyed.

    +
    Template Parameters
    + + + +
    T- the type for the newly created value.
    ...ConstructorArgs- the types for the constructor parameters (should be deduced)
    +
    +
    +
    Parameters
    + + +
    args- The parameters for the constructor.
    +
    +
    +
    Returns
    a fully initialized scheduling_group_key_config object.
    + +
    +
    + +

    ◆ make_temporary_buffer()

    + +
    +
    +
    +template<typename CharType >
    + + + + + + + + + + + + + + + + + + +
    temporary_buffer< CharType > seastar::make_temporary_buffer (std::pmr::polymorphic_allocator< CharType > * allocator,
    std::size_t size 
    )
    +
    +

    Creates a temporary_buffer allocated by a custom allocator

    +
    Parameters
    + + + +
    allocatorallocator to use when allocating the temporary_buffer
    sizesize of the temporary buffer
    +
    +
    + +
    +
    + +

    ◆ make_tmp_dir()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    future< tmp_dir > seastar::make_tmp_dir (std::filesystem::path path_template = default_tmpdir(),
    file_permissions create_permissions = file_permissions::default_dir_permissions 
    )
    +
    +noexcept
    +
    +

    Returns a future for a tmp_dir exclusively created by the function.

    +
    Parameters
    + + + +
    path_template- path where the file is to be created, optionally including a template for the file name.
    create_permissions- optional permissions for the newly created directory.
    +
    +
    +
    Note
    path_template may optionally include a name template in the last component of the path. The template is indicated by two or more consecutive XX's. Those will be replaced in the result path by a unique string.
    +

    If no name template is found, then path_template is assumed to refer to the directory where the temporary dir is to be created at (a.k.a. the parent directory) and default_tmp_name_template is appended to the path as the name template for the to-be-created directory.

    +

    The parent directory must exist and be writable to the current process.

    + +
    +
    + +

    ◆ make_tmp_file()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    future< tmp_file > seastar::make_tmp_file (std::filesystem::path path_template = default_tmpdir(),
    open_flags oflags = open_flags::rw,
    file_open_options options = {} 
    )
    +
    +noexcept
    +
    +

    Returns a future for an opened tmp_file exclusively created by the function.

    +
    Parameters
    + + + + +
    path_template- path where the file is to be created, optionally including a template for the file name.
    oflags- optional open_flags (open_flags::create | open_flags::exclusive are added to those by default)
    options- additional file_open_options, e.g. for setting the created file permission.
    +
    +
    +
    Note
    path_template may optionally include a filename template in the last component of the path. The template is indicated by two or more consecutive XX's. Those will be replaced in the result path by a unique string.
    +

    If no filename template is found, then path_template is assumed to refer to the directory where the temporary file is to be created at (a.k.a. the parent directory) and default_tmp_name_template is appended to the path as the filename template.

    +

    The parent directory must exist and be writable to the current process.

    + +
    +
    + +

    ◆ map_reduce_scheduling_group_specific()

    + +
    +
    +
    +template<typename SpecificValType , typename Mapper , typename Reducer , typename Initial >
    +requires requires(SpecificValType specific_val, Mapper mapper, Reducer reducer, Initial initial) { {reducer(initial, mapper(specific_val))} -> std::convertible_to<Initial>; }
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    future< typename function_traits< Reducer >::return_type > seastar::map_reduce_scheduling_group_specific (Mapper mapper,
    Reducer reducer,
    Initial initial_val,
    scheduling_group_key key 
    )
    +
    +

    A map reduce over all values of a specific scheduling group data.

    Parameters
    + + + + + +
    mapper- A functor SomeType(SpecificValType&) or SomeType(SpecificValType) that maps the specific data to a value of any type.
    reducer- A functor of of type ConvetibleToInitial(Initial, MapperReurnType) that reduces a value of type Initial and of the mapper return type to a value of type convertible to Initial.
    initial_val- the initial value to pass in the first call to the reducer.
    key- the key to the specific data that the mapper should act upon.
    +
    +
    +
    Returns
    A future that resolves when the result of the map reduce is ready.
    +
    Note
    The type of SpecificValType must be given because there is no way to deduce it in a consistent manner.
    +
    +Theoretically the parameter type of Mapper can be deduced to be the type (function_traits<Mapper>::arg<0>) but then there is a danger when the Mapper accepts a parameter type T where SpecificValType is convertible to SpecificValType.
    + +
    +
    + +

    ◆ on_fatal_internal_error()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    void seastar::on_fatal_internal_error (logger & logger,
    std::string_view reason 
    )
    +
    +noexcept
    +
    +

    Report an internal error and abort unconditionally

    +

    The error will be logged to \logger and the program will be aborted, regardless of the abort_on_internal_error setting. This overload can be used to replace assert().

    + +
    +
    + +

    ◆ on_internal_error() [1/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void seastar::on_internal_error (logger & logger,
    std::exception_ptr ex 
    )
    +
    +

    Report an internal error

    +

    Depending on the value passed to set_abort_on_internal_error, this will either abort or throw the passed-in ex. In both cases an error will be logged with logger, containing ex and the current backtrace. This overload cannot attach a backtrace to the exception, so if the caller wishes to have one attached they have to do it themselves.

    + +
    +
    + +

    ◆ on_internal_error() [2/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void seastar::on_internal_error (logger & logger,
    std::string_view reason 
    )
    +
    +

    Report an internal error

    +

    Depending on the value passed to set_abort_on_internal_error, this will either abort or throw a std::runtime_error. In both cases an error will be logged with logger, containing reason and the current backtrace.

    + +
    +
    + +

    ◆ on_internal_error_noexcept()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    void seastar::on_internal_error_noexcept (logger & logger,
    std::string_view reason 
    )
    +
    +noexcept
    +
    +

    Report an internal error in a noexcept context

    +

    The error will be logged to \logger and if set_abort_on_internal_error, was set to true, the program will be aborted. This overload can be used in noexcept contexts like destructors or noexcept functions.

    + +
    +
    + +

    ◆ operator co_await()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + + +
    auto seastar::operator co_await (coroutine::without_preemption_check< T > f)
    +
    +noexcept
    +
    +

    Wait for a future without a preemption check

    +
    Parameters
    + + +
    fa future<> wrapped with without_preemption_check
    +
    +
    + +
    +
    + +

    ◆ recursive_remove_directory()

    + +
    +
    + + + + + +
    + + + + + + + + +
    future seastar::recursive_remove_directory (std::filesystem::path path)
    +
    +noexcept
    +
    +

    Recursively removes a directory and all of its contents.

    +
    Parameters
    + + +
    pathpath of the directory to recursively remove
    +
    +
    +
    Note
    Unlike rm -rf path has to be a directory and may not refer to a regular file.
    +

    The function flushes the parent directory of the removed path and so guaranteeing that the remove is stable on disk.

    +

    The function bails out on first error. In that case, some files and/or sub-directories (and their contents) may be left behind at the level in which the error was detected.

    + +
    +
    + +

    ◆ reduce_scheduling_group_specific()

    + +
    +
    +
    +template<typename SpecificValType , typename Reducer , typename Initial >
    +requires requires(SpecificValType specific_val, Reducer reducer, Initial initial) { {reducer(initial, specific_val)} -> std::convertible_to<Initial>; }
    + + + + + + + + + + + + + + + + + + + + + + + + +
    future< typename function_traits< Reducer >::return_type > seastar::reduce_scheduling_group_specific (Reducer reducer,
    Initial initial_val,
    scheduling_group_key key 
    )
    +
    +

    A reduce over all values of a specific scheduling group data.

    Parameters
    + + + + +
    reducer- A functor of of type ConvetibleToInitial(Initial, SpecificValType) that reduces a value of type Initial and of the sg specific data type to a value of type convertible to Initial.
    initial_val- the initial value to pass in the first call to the reducer.
    key- the key to the specific data that the mapper should act upon.
    +
    +
    +
    Returns
    A future that resolves when the result of the reduce is ready.
      +
    • +
    +
    +
    Note
    The type of SpecificValType must be given because there is no way to deduce it in a consistent manner.
    +
    +Theoretically the parameter type of Reducer can be deduced to be the type (function_traits<Reducer>::arg<0>) but then there is a danger when the Reducer accepts a parameter type T where SpecificValType is convertible to SpecificValType.
    + +
    +
    + +

    ◆ rename_scheduling_group() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    future seastar::rename_scheduling_group (scheduling_group sg,
    sstring new_name 
    )
    +
    +noexcept
    +
    +

    Rename scheduling group.

    +

    Renames a scheduling_group previously created with create_scheduling_group().

    +

    The operation is global and affects all shards. The operation affects the exported statistics labels.

    +
    Parameters
    + + + +
    sgThe scheduling group to be renamed
    new_nameThe new name for the scheduling group.
    +
    +
    +
    Returns
    a future that is ready when the scheduling group has been renamed
    + +
    +
    + +

    ◆ rename_scheduling_group() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    future seastar::rename_scheduling_group (scheduling_group sg,
    sstring new_name,
    sstring new_shortname 
    )
    +
    +noexcept
    +
    +

    Rename scheduling group.

    +

    Renames a scheduling_group previously created with create_scheduling_group().

    +

    The operation is global and affects all shards. The operation affects the exported statistics labels.

    +
    Parameters
    + + + + +
    sgThe scheduling group to be renamed
    new_nameThe new name for the scheduling group.
    new_shortnameThe new shortname for the scheduling group.
    +
    +
    +
    Returns
    a future that is ready when the scheduling group has been renamed
    + +
    +
    + +

    ◆ scheduling_group_get_specific() [1/2]

    + +
    +
    +
    +template<typename T >
    + + + + + + + + + + + + + + + + + + +
    T & seastar::scheduling_group_get_specific (scheduling_group sg,
    scheduling_group_key key 
    )
    +
    +

    Returnes a reference to the given scheduling group specific value

    Template Parameters
    + + +
    T- the type of the scheduling specific type (cannot be deduced)
    +
    +
    +
    Parameters
    + + + +
    sg- the scheduling group which it's specific value to retrieve
    key- the key of the value to retrieve.
    +
    +
    +
    Returns
    A reference to the scheduling specific value.
    +

    Returns a reference to the given scheduling group specific data.

    Parameters
    + + + +
    sg- The scheduling group which it's data needs to be accessed
    key- The scheduling group key that for the data to access
    +
    +
    +
    Returns
    A reference of type T& to the data.
    +
    Note
    The parameter T has to be given since there is no way to deduce it. May throw std::invalid_argument if sg does not exist or is uninitialized.
    + +
    +
    + +

    ◆ scheduling_group_get_specific() [2/2]

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + + +
    T & seastar::scheduling_group_get_specific (scheduling_group_key key)
    +
    +noexcept
    +
    +

    Returns a reference to the current specific data.

    Parameters
    + + +
    key- The scheduling group key that for the data to access
    +
    +
    +
    Returns
    A reference of type T& to the data.
    +
    Note
    The parameter T has to be given since there is no way to deduce it.
    + +
    +
    + +

    ◆ scheduling_group_key_create()

    + +
    +
    + + + + + +
    + + + + + + + + +
    future< scheduling_group_key > seastar::scheduling_group_key_create (scheduling_group_key_config cfg)
    +
    +noexcept
    +
    +

    Returns a future that holds a scheduling key and resolves when this key can be used to access the scheduling group specific value it represents.

    Parameters
    + + +
    cfg- A scheduling_group_key_config object (by recomendation: initialized with make_scheduling_group_key_config )
    +
    +
    +
    Returns
    A future containing scheduling_group_key for the newly created specific value.
    + +
    +
    + +

    ◆ set_abort_on_ebadf()

    + +
    +
    + + + + + + + + +
    void seastar::set_abort_on_ebadf (bool do_abort)
    +
    +

    Determines whether seastar should throw or abort when operation made by seastar fails because the target file descriptor is not valid. This is detected when underlying system calls return EBADF or ENOTSOCK. The default behavior is to throw std::system_error.

    + +
    +
    + +

    ◆ set_abort_on_internal_error()

    + +
    +
    + + + + + +
    + + + + + + + + +
    bool seastar::set_abort_on_internal_error (bool do_abort)
    +
    +noexcept
    +
    +

    Controls whether on_internal_error() aborts or throws. The default is to throw.

    Returns
    the current abort_on_internal_error state.
    + +
    +
    + +

    ◆ set_idle_cpu_handler()

    + +
    +
    + + + + + + + + +
    void seastar::set_idle_cpu_handler (idle_cpu_handler && handler)
    +
    +

    Set a handler that will be called when there is no task to execute on cpu. Handler should do a low priority work.

    +

    Handler's return value determines whether handler did any actual work. If no work was done then reactor will go into sleep.

    +

    Handler's argument is a function that returns true if a task which should be executed on cpu appears or false otherwise. This function should be used by a handler to return early if a task appears.

    + +
    +
    + +

    ◆ sleep()

    + +
    +
    +
    +template<typename Clock = steady_clock_type, typename Rep , typename Period >
    + + + + + + + + +
    future seastar::sleep (std::chrono::duration< Rep, Period > dur)
    +
    +

    Returns a future which completes after a specified time has elapsed.

    +
    Parameters
    + + +
    durminimum amount of time before the returned future becomes ready.
    +
    +
    +
    Returns
    A future which becomes ready when the sleep duration elapses.
    + +
    +
    + +

    ◆ sleep_abortable() [1/2]

    + +
    +
    +
    +template<typename Clock = steady_clock_type>
    + + + + + + + + +
    future seastar::sleep_abortable (typename Clock::duration dur)
    +
    +

    Returns a future which completes after a specified time has elapsed or throws sleep_aborted exception if application is aborted

    +
    Parameters
    + + +
    durminimum amount of time before the returned future becomes ready.
    +
    +
    +
    Returns
    A future which becomes ready when the sleep duration elapses.
    + +
    +
    + +

    ◆ sleep_abortable() [2/2]

    + +
    +
    +
    +template<typename Clock = steady_clock_type>
    + + + + + + + + + + + + + + + + + + +
    future seastar::sleep_abortable (typename Clock::duration dur,
    abort_sourceas 
    )
    +
    +

    Returns a future which completes after a specified time has elapsed or throws sleep_aborted exception if the sleep is aborted.

    +
    Parameters
    + + + +
    durminimum amount of time before the returned future becomes ready.
    asthe abort_source that eventually notifies that the sleep should be aborted.
    +
    +
    +
    Returns
    A future which becomes ready when the sleep duration elapses.
    + +
    +
    + +

    ◆ throw_with_backtrace()

    + +
    +
    +
    +template<class Exc , typename... Args>
    + + + + + + + + +
    void seastar::throw_with_backtrace (Args &&... args)
    +
    +

    Throws an exception of unspecified type that is derived from the Exc type with a backtrace attached to its message

    +
    Template Parameters
    + + + +
    Excexception type to be caught at the receiving side
    Argstypes of arguments forwarded to the constructor of Exc
    +
    +
    +
    Parameters
    + + +
    argsarguments forwarded to the constructor of Exc
    +
    +
    +
    Returns
    never returns (throws an exception)
    + +
    +
    + +

    ◆ value_of()

    + +
    +
    +
    +template<typename Func >
    + + + + + +
    + + + + + + + + +
    lazy_eval< Func > seastar::value_of (Func && func)
    +
    +inline
    +
    +

    Create a seastar::lazy_eval object that will use a given functor for evaluating a value when the evaluation is triggered.

    +

    The actual evaluation is triggered by applying a () operator on a returned object.

    +
    Parameters
    + + +
    funca functor to evaluate the value
    +
    +
    +
    Returns
    a lazy_eval object that may be used for evaluating a value
    + +
    +
    + +

    ◆ when_any() [1/2]

    + +
    +
    +
    +template<class... FutOrFuncs>
    + + + + + +
    + + + + + + + + +
    auto seastar::when_any (FutOrFuncs &&... fut_or_funcs)
    +
    +noexcept
    +
    +

    Wait for the first of multiple futures to complete (variadic version).

    +

    Each future can be passed directly, or a function that returns a future can be given instead.

    +

    Returns a when_any_result (following the concurrency TS from the standard library), containing a std::tuple to all futures and the index (into the vector) of the future that resolved.

    +
    Parameters
    + + +
    fut_or_funcsfutures or functions that return futures
    +
    +
    +
    Returns
    a when_any_result containing a tuple of all futures and and index; when ready, at least one of the contained futures (the one indicated by index) will be ready.
    + +
    +
    + +

    ◆ when_any() [2/2]

    + +
    +
    +
    +template<class FutureIterator >
    +requires requires (FutureIterator i) { { *i++ }; requires is_future<std::remove_reference_t<decltype(*i)>>::value; }
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    auto seastar::when_any (FutureIterator begin,
    FutureIterator end 
    ) -> future<when_any_result<std::vector<std::decay_t<typename std::iterator_traits<FutureIterator>::value_type>>>> +
    +
    +noexcept
    +
    +

    Wait for the first of multiple futures to complete (iterator version).

    +

    Given a range of futures as input, wait for the first of them to resolve (either successfully or with an exception), and return all of them in a when_any_result (following the concurrency TS from the standard library), containing a std::vector to all futures and the index (into the vector) of the future that resolved.

    +
    Parameters
    + + + +
    beginan InputIterator designating the beginning of the range of futures
    endan InputIterator designating the end of the range of futures
    +
    +
    +
    Returns
    a when_any_result of all the futures in the input; when ready, at least one of the contained futures (the one indicated by index) will be ready.
    + +
    +
    +

    Variable Documentation

    + +

    ◆ default_rsskey_40bytes_v

    + +
    +
    + + + + + +
    + + + + +
    constexpr uint8_t seastar::default_rsskey_40bytes_v[]
    +
    +staticconstexpr
    +
    +Initial value:
    = {
    +
    0xd1, 0x81, 0xc6, 0x2c, 0xf7, 0xf4, 0xdb, 0x5b,
    +
    0x19, 0x83, 0xa2, 0xfc, 0x94, 0x3e, 0x1a, 0xdb,
    +
    0xd9, 0x38, 0x9e, 0x6b, 0xd1, 0x03, 0x9c, 0x2c,
    +
    0xa7, 0x44, 0x99, 0xad, 0x59, 0x3d, 0x56, 0xd9,
    +
    0xf3, 0x25, 0x3c, 0x06, 0x2a, 0xdc, 0x1f, 0xfc
    +
    }
    +
    +
    +
    + +

    ◆ default_rsskey_52bytes_v

    + +
    +
    + + + + + +
    + + + + +
    constexpr uint8_t seastar::default_rsskey_52bytes_v[]
    +
    +staticconstexpr
    +
    +Initial value:
    = {
    +
    0x44, 0x39, 0x79, 0x6b, 0xb5, 0x4c, 0x50, 0x23,
    +
    0xb6, 0x75, 0xea, 0x5b, 0x12, 0x4f, 0x9f, 0x30,
    +
    0xb8, 0xa2, 0xc0, 0x3d, 0xdf, 0xdc, 0x4d, 0x02,
    +
    0xa0, 0x8c, 0x9b, 0x33, 0x4a, 0xf6, 0x4a, 0x4c,
    +
    0x05, 0xc6, 0xfa, 0x34, 0x39, 0x58, 0xd8, 0x55,
    +
    0x7d, 0x99, 0x58, 0x3a, 0xe1, 0x38, 0xc9, 0x2e,
    +
    0x81, 0x15, 0x03, 0x66
    +
    }
    +
    +
    +
    +
    + + + + diff --git a/master/namespaceseastar_1_1alien.html b/master/namespaceseastar_1_1alien.html new file mode 100644 index 000000000..261858ff9 --- /dev/null +++ b/master/namespaceseastar_1_1alien.html @@ -0,0 +1,282 @@ + + + + + + + +Seastar: seastar::alien Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::alien Namespace Reference
    +
    +
    +

    Detailed Description

    +

    Integration with non-seastar applications.

    +
    + + + + + +

    +Classes

    class  instance
     
    class  message_queue
     
    + + + + + + + + + + + + + +

    +Functions

    template<typename Func >
    +requires std::is_nothrow_invocable_r_v<void, Func>
    void run_on (instance &instance, unsigned shard, Func func)
     
    template<typename Func >
    void run_on (unsigned shard, Func func)
     
    template<std::invocable Func, typename T = internal::return_type_t<Func>>
    std::future< T > submit_to (instance &instance, unsigned shard, Func func)
     
    template<typename Func , typename T = internal::return_type_t<Func>>
    std::future< T > submit_to (unsigned shard, Func func)
     
    +

    Function Documentation

    + +

    ◆ run_on() [1/2]

    + +
    +
    +
    +template<typename Func >
    +requires std::is_nothrow_invocable_r_v<void, Func>
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void seastar::alien::run_on (instanceinstance,
    unsigned shard,
    Func func 
    )
    +
    +

    Runs a function on a remote shard from an alien thread where engine() is not available.

    +
    Parameters
    + + + + +
    instancedesignates the Seastar instance to process the message
    sharddesignates the shard to run the function on
    funca callable to run on shard t. If func is a temporary object, its lifetime will be extended by moving it. If func is a reference, the caller must guarantee that it will survive the call.
    +
    +
    +
    Note
    the func must not throw and should return void. as we cannot identify the alien thread, hence we are not able to post the fulfilled promise to the message queue managed by the shard executing the alien thread which is interested to the return value. Please use submit_to() instead, if func throws.
    + +
    +
    + +

    ◆ run_on() [2/2]

    + +
    +
    +
    +template<typename Func >
    + + + + + + + + + + + + + + + + + + +
    void seastar::alien::run_on (unsigned shard,
    Func func 
    )
    +
    +

    Runs a function on a remote shard from an alien thread where engine() is not available.

    +
    Parameters
    + + + +
    sharddesignates the shard to run the function on
    funca callable to run on shard t. If func is a temporary object, its lifetime will be extended by moving it. If func is a reference, the caller must guarantee that it will survive the call.
    +
    +
    +
    Note
    the func must not throw and should return void. as we cannot identify the alien thread, hence we are not able to post the fulfilled promise to the message queue managed by the shard executing the alien thread which is interested to the return value. Please use submit_to() instead, if func throws.
    + +
    +
    + +

    ◆ submit_to() [1/2]

    + +
    +
    +
    +template<std::invocable Func, typename T = internal::return_type_t<Func>>
    + + + + + + + + + + + + + + + + + + + + + + + + +
    std::future< T > seastar::alien::submit_to (instanceinstance,
    unsigned shard,
    Func func 
    )
    +
    +

    Runs a function on a remote shard from an alien thread where engine() is not available.

    +
    Parameters
    + + + + +
    instancedesignates the Seastar instance to process the message
    sharddesignates the shard to run the function on
    funca callable to run on shard. If func is a temporary object, its lifetime will be extended by moving it. If func is a reference, the caller must guarantee that it will survive the call.
    +
    +
    +
    Returns
    whatever func returns, as a std::future<>
    +
    Note
    the caller must keep the returned future alive until func returns
    + +
    +
    + +

    ◆ submit_to() [2/2]

    + +
    +
    +
    +template<typename Func , typename T = internal::return_type_t<Func>>
    + + + + + + + + + + + + + + + + + + +
    std::future< T > seastar::alien::submit_to (unsigned shard,
    Func func 
    )
    +
    +

    Runs a function on a remote shard from an alien thread where engine() is not available.

    +
    Parameters
    + + + +
    sharddesignates the shard to run the function on
    funca callable to run on shard. If func is a temporary object, its lifetime will be extended by moving it. If func is a reference, the caller must guarantee that it will survive the call.
    +
    +
    +
    Returns
    whatever func returns, as a std::future<>
    +
    Note
    the caller must keep the returned future alive until func returns
    + +
    +
    +
    + + + + diff --git a/master/namespaceseastar_1_1log__cli.html b/master/namespaceseastar_1_1log__cli.html new file mode 100644 index 000000000..f5d5ca8c6 --- /dev/null +++ b/master/namespaceseastar_1_1log__cli.html @@ -0,0 +1,125 @@ + + + + + + + +Seastar: seastar::log_cli Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::log_cli Namespace Reference
    +
    +
    +

    Detailed Description

    +

    Configure application logging at run-time with program options.

    +
    + + + + +

    +Classes

    struct  options
     Logging configuration. More...
     
    + + + +

    +Typedefs

    +using log_level_map = std::unordered_map< sstring, log_level >
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions

    +boost::program_options::options_description get_options_description ()
     Options for controlling logging at run-time.
     
    +void print_available_loggers (std::ostream &os)
     Print a human-friendly list of the available loggers.
     
    +log_level parse_log_level (const sstring &)
     Parse a log-level ({error, warn, info, debug, trace}) string, throwing std::runtime_error for an invalid level.
     
    +template<class OutputIter >
    void parse_logger_levels (const program_options::string_map &levels, OutputIter out)
     
    +logging_settings extract_settings (const boost::program_options::variables_map &)
     Extract CLI options into a logging configuration.
     
    +logging_settings extract_settings (const options &)
     Extract options into a logging configuration.
     
    +
    + + + + diff --git a/master/namespaceseastar_1_1memory.html b/master/namespaceseastar_1_1memory.html new file mode 100644 index 000000000..4ea296c08 --- /dev/null +++ b/master/namespaceseastar_1_1memory.html @@ -0,0 +1,649 @@ + + + + + + + +Seastar: seastar::memory Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::memory Namespace Reference
    +
    +
    +

    Detailed Description

    +

    Low-level memory management support

    +

    The memory namespace provides functions and classes for interfacing with the seastar memory allocator.

    +

    The seastar memory allocator splits system memory into a pool per logical core (lcore). Memory allocated one an lcore should be freed on the same lcore; failing to do so carries a severe performance penalty. It is possible to share memory with another core, but this should be limited to avoid cache coherency traffic. You can obtain the memory layout of the current shard with get_memory_layout().

    +

    +Critical allocation scopes

    +

    Seastar supports marking scopes as critical allocation scopes for the purpose of special treatment from various memory related utilities. See scoped_critical_alloc_section.

    +

    +Diagnostics and debugging features

    +

    +Allocation failure injector

    +

    Allows injecting allocation failures for testing resiliency against allocation failures, or exceptions in general. See:

    +

    +Large allocation warning

    +

    Large allocations put great pressure on the allocator which might be unable to serve them even if there is enough memory available, due to memory fragmentation. This is especially relevant for long-running applications, the kind of applications that are typically built with seastar. This feature allows finding these large by logging a warning on large allocations, with the stacktrace of the. See:

    +

    +Heap profiling

    +

    Heap profiling allows finding out how memory is used by your application, by recording the stacktrace of a sampled subset (or all) allocations. See:

    +

    +Abort on allocation failure

    +

    Often, the best way to debug an allocation failure is a coredump. This feature allows dumping core on allocation failures, containing the stack of the failed allocation, by means of aborting. To enable this behavior, set abort_on_seastar_bad_alloc in reactor_options or pass the --abort-on-seastar-bad-alloc command line flag. Additionally, applications may enable or disable this functionality globally at runtime by calling set_abort_on_allocation_failure().

    +

    +Dump diagnostics report

    +

    Dump a diagnostic report of the state of the seastar allocator upon allocation failure. The report is dumped with the seastar_memory logger, with debug level. You can configure a report to be dumped with error level on certain allocation kinds, see:

    +

    The diagnostics report dump can be configured with the command line/configuration file via the dump-memory-diagnostics-on-alloc-failure-kind command-line flag/configuration item.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  alloc_failure_injector
     
    struct  allocation_site
     Describes an allocation location in the code. More...
     
    struct  disable_failure_guard
     
    struct  memory_layout
     
    struct  scoped_critical_alloc_section
     
    class  scoped_heap_profiling
     Enable heap profiling for the duration of the scope. More...
     
    class  scoped_large_allocation_warning_disable
     Disable large allocation warnings for a scope. More...
     
    class  scoped_large_allocation_warning_threshold
     Set a different large allocation warning threshold for a scope. More...
     
    class  statistics
     Memory allocation statistics. More...
     
    + + + + +

    +Typedefs

    +using memory_diagnostics_writer = noncopyable_function< void(std::string_view)>
     A functor which writes its argument into the diagnostics report.
     
    + + + + +

    +Enumerations

    enum class  alloc_failure_kind { none +, critical +, all + }
     The kind of allocation failures to dump diagnostics report for. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    void set_abort_on_allocation_failure (bool enabled)
     Set the global state of the abort on allocation failure behavior. More...
     
    bool is_abort_on_allocation_failure ()
     Determine the abort on allocation failure mode. More...
     
    +statistics stats ()
     Capture a snapshot of memory allocation statistics for this lcore.
     
    +memory::memory_layout get_memory_layout ()
     
    +size_t free_memory ()
     Returns the size of free memory in bytes.
     
    size_t min_free_memory ()
     
    +void set_min_free_pages (size_t pages)
     Sets the value of free memory low water mark in memory::page_size units.
     
    void set_large_allocation_warning_threshold (size_t threshold)
     
    +size_t get_large_allocation_warning_threshold ()
     Gets the current large allocation warning threshold.
     
    +void disable_large_allocation_warning ()
     Disable large allocation warnings.
     
    std::vector< allocation_sitesampled_memory_profile ()
     If memory sampling is on returns the current sampled memory live set. More...
     
    size_t sampled_memory_profile (allocation_site *output, size_t size)
     Copies the current sampled set of allocation_sites into the array pointed to by the output parameter. More...
     
    void set_heap_profiling_sampling_rate (size_t sample_rate)
     Enable sampled heap profiling by setting a sample rate. More...
     
    size_t get_heap_profiling_sample_rate ()
     Returns the current heap profiling sampling rate (0 means off) More...
     
    +alloc_failure_injectorlocal_failure_injector ()
     Return the shard-local alloc_failure_injector instance.
     
    +void on_alloc_point ()
     Marks a point in code which should be considered for failure injection.
     
    void with_allocation_failures (noncopyable_function< void()> func)
     
    +bool is_critical_alloc_section ()
     
    void set_dump_memory_diagnostics_on_alloc_failure_kind (alloc_failure_kind)
     Configure when memory diagnostics are dumped. More...
     
    void set_dump_memory_diagnostics_on_alloc_failure_kind (std::string_view)
     Configure when memory diagnostics are dumped. More...
     
    void set_additional_diagnostics_producer (noncopyable_function< void(memory_diagnostics_writer)> producer)
     Set a producer of additional diagnostic information. More...
     
    sstring generate_memory_diagnostics_report ()
     
    +

    Class Documentation

    + +

    ◆ seastar::memory::disable_failure_guard

    + +
    +
    + + + + +
    struct seastar::memory::disable_failure_guard
    +
    + + + + + +
    Class Members
    +scoped_critical_alloc_section +cs +
    + +
    +
    + +

    ◆ seastar::memory::memory_layout

    + +
    +
    + + + + +
    struct seastar::memory::memory_layout
    +
    + + + + + + + + +
    Class Members
    +uintptr_t +end +
    +uintptr_t +start +
    + +
    +
    + +

    ◆ seastar::memory::scoped_critical_alloc_section

    + +
    +
    + + + + +
    struct seastar::memory::scoped_critical_alloc_section
    +
    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ alloc_failure_kind

    + +
    +
    + + + + + +
    + + + + +
    enum class seastar::memory::alloc_failure_kind
    +
    +strong
    +
    + +

    The kind of allocation failures to dump diagnostics report for.

    +

    Note that if the seastar_memory logger is set to level debug, there will be a report dumped for any allocation failure, regardless of this configuration.

    + + + + +
    Enumerator
    none 

    Dump diagnostic error report for none of the allocation failures.

    +
    critical 

    Dump diagnostic error report for critical allocation failures, see scoped_critical_alloc_section.

    +
    all 

    Dump diagnostic error report for all the allocation failures.

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ generate_memory_diagnostics_report()

    + +
    +
    + + + + + + + +
    sstring seastar::memory::generate_memory_diagnostics_report ()
    +
    +

    Generate and return a diagnostics report as a string.

    +

    Note that contrary to the automated report generation (triggered by allocation failure), this method does allocate memory and can fail in low-memory conditions.

    + +
    +
    + +

    ◆ get_heap_profiling_sample_rate()

    + +
    +
    + + + + + + + +
    size_t seastar::memory::get_heap_profiling_sample_rate ()
    +
    + +

    Returns the current heap profiling sampling rate (0 means off)

    +
    Returns
    the current heap profiling sampling rate
    + +
    +
    + +

    ◆ is_abort_on_allocation_failure()

    + +
    +
    + + + + + + + +
    bool seastar::memory::is_abort_on_allocation_failure ()
    +
    + +

    Determine the abort on allocation failure mode.

    +

    Return true if the global abort on allocation failure behavior is enabled, or false otherwise. Always returns false if the default (system) allocator is being used.

    + +
    +
    + +

    ◆ min_free_memory()

    + +
    +
    + + + + + + + +
    size_t seastar::memory::min_free_memory ()
    +
    +

    Returns the value of free memory low water mark in bytes. When free memory is below this value, reclaimers are invoked until it goes above again.

    + +
    +
    + +

    ◆ sampled_memory_profile() [1/2]

    + +
    +
    + + + + + + + +
    std::vector< allocation_site > seastar::memory::sampled_memory_profile ()
    +
    + +

    If memory sampling is on returns the current sampled memory live set.

    +

    If there is tracked allocations (because heap profiling was on earlier) these will still be returned if heap profiling is now off

    +
    Returns
    a vector of allocation_site
    + +
    +
    + +

    ◆ sampled_memory_profile() [2/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    size_t seastar::memory::sampled_memory_profile (allocation_siteoutput,
    size_t size 
    )
    +
    + +

    Copies the current sampled set of allocation_sites into the array pointed to by the output parameter.

    +

    Copies up to size elements of the current sampled set of allocation sites into the output array, which must have length at least size.

    +

    Returns amount of copied elements. This method does not allocate so it is a useful alternative to sampled_memory_profile() when one wants to avoid allocating (e.g.: under OOM conditions).

    +
    Parameters
    + + + +
    outputarray to copy the allocation sites to
    sizethe size of the array pointed to by output
    +
    +
    +
    Returns
    number of allocation_site copied to the vector
    + +
    +
    + +

    ◆ set_abort_on_allocation_failure()

    + +
    +
    + + + + + + + + +
    void seastar::memory::set_abort_on_allocation_failure (bool enabled)
    +
    + +

    Set the global state of the abort on allocation failure behavior.

    +

    If enabled, an allocation failure (i.e., the requested memory could not be allocated even after reclaim was attempted), will generally result in abort() being called. If disabled, the failure is reported to the caller, e.g., by throwing a std::bad_alloc for C++ allocations such as new, or returning a null pointer from malloc.

    +

    Note that even if the global state is set to enabled, the disable_abort_on_alloc_failure_temporarily class may override the behavior tepmorarily on a given shard. That is, abort only occurs if abort is globablly enabled on this shard and there are no disable_abort_on_alloc_failure_temporarily objects currently alive on this shard.

    + +
    +
    + +

    ◆ set_additional_diagnostics_producer()

    + +
    +
    + + + + + + + + +
    void seastar::memory::set_additional_diagnostics_producer (noncopyable_function< void(memory_diagnostics_writer)> producer)
    +
    + +

    Set a producer of additional diagnostic information.

    +

    This allows the application running on top of seastar to add its own part to the diagnostics dump. The application can supply higher level diagnostics information, that might help explain how the memory was consumed.

    +

    The application specific part will be added just below the main stats (free/used/total memory).

    +
    Parameters
    + + +
    producer- the functor to produce the additional diagnostics, specific to the application, to be added to the generated report. The producer is passed a writer functor, which it can use to add its parts to the report.
    +
    +
    +
    Note
    As the report is generated at a time when allocations are failing, the producer should try as hard as possible to not allocate while producing the output.
    + +
    +
    + +

    ◆ set_dump_memory_diagnostics_on_alloc_failure_kind() [1/2]

    + +
    +
    + + + + + + + + +
    void seastar::memory::set_dump_memory_diagnostics_on_alloc_failure_kind (alloc_failure_kind )
    +
    + +

    Configure when memory diagnostics are dumped.

    +

    See alloc_failure_kind on available options. Applies configuration on all shards.

    + +
    +
    + +

    ◆ set_dump_memory_diagnostics_on_alloc_failure_kind() [2/2]

    + +
    +
    + + + + + + + + +
    void seastar::memory::set_dump_memory_diagnostics_on_alloc_failure_kind (std::string_view )
    +
    + +

    Configure when memory diagnostics are dumped.

    +

    String version. See alloc_failure_kind on available options. Applies configuration on all shards.

    + +
    +
    + +

    ◆ set_heap_profiling_sampling_rate()

    + +
    +
    + + + + + + + + +
    void seastar::memory::set_heap_profiling_sampling_rate (size_t sample_rate)
    +
    + +

    Enable sampled heap profiling by setting a sample rate.

    +
    Parameters
    + + +
    sample_ratethe sample rate to use. Disable heap profiling by setting the sample rate to 0
    +
    +
    +

    In order to use heap profiling you have to define SEASTAR_HEAPPROF.

    +

    Use sampled_memory_profile for API access to profiling data

    +

    Note: Changing the sampling rate while previously sampled allocations are still alive can lead to inconsistent results of their reported size (i.e.: their size will be over or under reported). Undefined behavior or memory corruption will not occur.

    +

    For an example script that makes use of the heap profiling data see [scylla-gdb.py] (https://github.com/scylladb/scylla/blob/e1b22b6a4c56b4f1d0adf65d1a11db4bcb51fe7d/scylla-gdb.py#L1439) This script can generate either textual representation of the data, or a zoomable flame graph (flame graph generation instructions, example flame graph).

    + +
    +
    + +

    ◆ set_large_allocation_warning_threshold()

    + +
    +
    + + + + + + + + +
    void seastar::memory::set_large_allocation_warning_threshold (size_t threshold)
    +
    +

    Enable the large allocation warning threshold.

    +

    Warn when allocation above a given threshold are performed.

    +
    Parameters
    + + +
    thresholdsize (in bytes) above which an allocation will be logged
    +
    +
    + +
    +
    + +

    ◆ with_allocation_failures()

    + +
    +
    + + + + + + + + +
    void seastar::memory::with_allocation_failures (noncopyable_function< void()> func)
    +
    +

    Repeatedly run func with allocation failures

    +

    Initially, allocations start to fail immediately. In each subsequent run the failures start one allocation later. This returns when func is run and no allocation failures are detected.

    + +
    +
    +
    + + + + diff --git a/master/namespaceseastar_1_1metrics.html b/master/namespaceseastar_1_1metrics.html new file mode 100644 index 000000000..1fa1808e1 --- /dev/null +++ b/master/namespaceseastar_1_1metrics.html @@ -0,0 +1,448 @@ + + + + + + + +Seastar: seastar::metrics Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::metrics Namespace Reference
    +
    +
    +

    Detailed Description

    +

    metrics creation and registration

    +

    the metrics namespace holds the relevant method and classes to generate metrics.

    +

    The metrics layer support registering metrics, that later will be exported via different API protocols.

    +

    To be able to support multiple protocols the following simplifications where made:

      +
    1. The id of the metrics is based on the collectd id
    2. +
    3. A metric could be a single value either a reference or a function
    4. +
    +

    To add metrics definition to class A do the following:

      +
    • Add a metrics_group memeber to A
    • +
    • Add a a set_metrics() method that would be called in the constructor.
    • +
    +

    In A header file

    +
    class A {
    +
    metric_groups _metrics
    +
    +
    void setup_metrics();
    +
    +
    };
    +
    holds the metric definition.
    Definition: metrics_registration.hh:94
    +
    holds the metric_groups definition needed by class that reports metrics
    +

    In A source file:

    +
    include "core/metrics.hh"
    +
    +
    void A::setup_metrics() {
    +
    namespace sm = seastar::metrics;
    +
    _metrics = sm::create_metric_group();
    +
    _metrics->add_group("cache", {sm::make_gauge("bytes", "used", [this] { return _region.occupancy().used_space(); })});
    +
    }
    +
    impl::metric_definition_impl make_gauge(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
    Gauge are a general purpose metric.
    Definition: metrics.hh:442
    +
    metrics creation and registration
    Definition: estimated_histogram.hh:34
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  description
     Human-readable description of a metric/group. More...
     
    class  double_registration
     
    struct  histogram
     Histogram data type. More...
     
    struct  histogram_bucket
     Histogram bucket type. More...
     
    class  label
     Class that creates label instances. More...
     
    class  label_instance
     Label a metrics. More...
     
    class  metric_definition
     
    struct  metric_family_config
     metric_family_config allow changing metrics family configuration More...
     
    class  metric_group
     hold a single metric group Initialization is done in the constructor or with a call to add_group More...
     
    class  metric_group_definition
     
    class  metric_groups
     holds the metric definition. More...
     
    struct  metric_relabeling_result
     result of metric relabeling More...
     
    struct  native_histogram_info
     native histogram specific information More...
     
    struct  options
     Metrics configuration options. More...
     
    struct  relabel_config
     a relabel_config allows changing metrics labels dynamically More...
     
    class  relabel_config_regex
     a wrapper class around regex with the original expr More...
     
    + + + + + + + + + + + +

    +Typedefs

    using metric_type_def = sstring
     
    using metric_name_type = sstring
     
    using instance_id_type = sstring
     
    +using skip_when_empty = bool_class< class skip_when_empty_tag >
     
    using group_name_type = sstring
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename T >
    impl::metric_definition_impl make_gauge (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
     Gauge are a general purpose metric. More...
     
    template<typename T >
    impl::metric_definition_impl make_gauge (metric_name_type name, description d, T &&val)
     Gauge are a general purpose metric. More...
     
    template<typename T >
    impl::metric_definition_impl make_gauge (metric_name_type name, description d, std::vector< label_instance > labels, T &&val)
     Gauge are a general purpose metric. More...
     
    template<typename T >
    impl::metric_definition_impl make_derive (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
     Derive are used when a rate is more interesting than the value. More...
     
    template<typename T >
    impl::metric_definition_impl make_derive (metric_name_type name, description d, T &&val)
     Derive are used when a rate is more interesting than the value. More...
     
    template<typename T >
    impl::metric_definition_impl make_derive (metric_name_type name, description d, std::vector< label_instance > labels, T &&val)
     Derive are used when a rate is more interesting than the value. More...
     
    template<typename T >
    impl::metric_definition_impl make_counter (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
     create a counter metric More...
     
    template<typename T >
    impl::metric_definition_impl make_counter (metric_name_type name, description d, T &&val)
     create a counter metric More...
     
    template<typename T >
    impl::metric_definition_impl make_counter (metric_name_type name, description d, std::vector< label_instance > labels, T &&val)
     create a counter metric More...
     
    template<typename T >
    impl::metric_definition_impl make_absolute (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
     create an absolute metric. More...
     
    template<typename T >
    impl::metric_definition_impl make_histogram (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
     create a histogram metric. More...
     
    template<typename T >
    impl::metric_definition_impl make_histogram (metric_name_type name, description d, std::vector< label_instance > labels, T &&val)
     create a histogram metric. More...
     
    template<typename T >
    impl::metric_definition_impl make_histogram (metric_name_type name, description d, T &&val)
     create a histogram metric. More...
     
    template<typename T >
    impl::metric_definition_impl make_summary (metric_name_type name, description d, T &&val)
     create a summary metric. More...
     
    template<typename T >
    impl::metric_definition_impl make_total_bytes (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
     create a total_bytes metric. More...
     
    template<typename T >
    impl::metric_definition_impl make_current_bytes (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
     create a current_bytes metric. More...
     
    template<typename T >
    impl::metric_definition_impl make_queue_length (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
     create a queue_length metric. More...
     
    template<typename T >
    impl::metric_definition_impl make_total_operations (metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={}, instance_id_type=impl::shard())
     create a total operation metric. More...
     
    +future configure (const options &opts)
     set the metrics configuration
     
    future< metric_relabeling_resultset_relabel_configs (const std::vector< relabel_config > &relabel_configs)
     Perform relabeling and operation on metrics dynamically. More...
     
    +const std::vector< relabel_config > & get_relabel_configs ()
     
    +void set_metric_family_configs (const std::vector< metric_family_config > &metrics_config)
     
    +const std::vector< metric_family_config > & get_metric_family_configs ()
     
    +relabel_config::relabel_action relabel_config_action (const std::string &action)
     a helper function to translate a string to relabel_config::relabel_action enum values
     
    + + + + + +

    +Variables

    +const bool metric_disabled
     
    +label shard_label
     
    +

    Class Documentation

    + +

    ◆ seastar::metrics::histogram_bucket

    + +
    +
    + + + + +
    struct seastar::metrics::histogram_bucket
    +
    + + + + + + + + +
    Class Members
    +uint64_t +count +
    +double +upper_bound +
    + +
    +
    + +

    ◆ seastar::metrics::metric_family_config

    + +
    +
    + + + + +
    struct seastar::metrics::metric_family_config
    +
    + + + + + + + + + + + +
    Class Members
    +vector< string > +aggregate_labels +
    +string +name +
    +relabel_config_regex +regex_name +
    + +
    +
    + +

    ◆ seastar::metrics::metric_relabeling_result

    + +
    +
    + + + + +
    struct seastar::metrics::metric_relabeling_result
    +
    + + + + + +
    Class Members
    +size_t +metrics_relabeled_due_to_collision +
    + +
    +
    + +

    ◆ seastar::metrics::native_histogram_info

    + +
    +
    + + + + +
    struct seastar::metrics::native_histogram_info
    +
    + + + + + + + + +
    Class Members
    +int32_t +min_id +
    +int32_t +schema +
    + +
    +
    +

    Typedef Documentation

    + +

    ◆ group_name_type

    + +
    +
    + + + + +
    using seastar::metrics::group_name_type = typedef sstring
    +
    +

    A group of logically related metrics

    + +
    +
    +

    Function Documentation

    + +

    ◆ set_relabel_configs()

    + +
    +
    + + + + + + + + +
    future< metric_relabeling_result > seastar::metrics::set_relabel_configs (const std::vector< relabel_config > & relabel_configs)
    +
    + +

    Perform relabeling and operation on metrics dynamically.

    +

    The function would return true if the changes were applied with no conflict or false, if there was a conflict in the registration.

    +

    The general logic follows Prometheus metrics_relabel_config configuration. The relabel rules are applied one after the other. You can add or change a label. you can enable or disable a metric, in that case the metrics will not be reported at all. You can turn on and off the skip_when_empty flag.

    +

    Using the Prometheus convention, the metric name is name. Names cannot be changed.

    +

    Import notes:

      +
    • The relabeling always starts from the original set of labels the metric was created with.
    • +
    • calling with an empty set will remove the relabel config and will return all metrics to their original labels
    • +
    • To prevent a situation that calling this function would crash the system. in a situation where a conflicting metrics name are entered, an additional label will be added to the labels with a unique ID.
    • +
    +

    A few examples: To add a level label with a value 1, to the reactor_utilization metric: std::vector<sm::relabel_config> rl(1); rl[0].source_labels = {"__name__"}; rl[0].target_label = "level"; rl[0].replacement = "1"; rl[0].expr = "reactor_utilization"; set_relabel_configs(rl);

    +

    To report only the metrics with the level label equals 1

    +

    std::vector<sm::relabel_config> rl(2); rl[0].source_labels = {"__name__"}; rl[0].action = sm::relabel_config::relabel_action::drop;

    +

    rl[1].source_labels = {"level"}; rl[1].expr = "1"; rl[1].action = sm::relabel_config::relabel_action::keep; set_relabel_configs(rl);

    + +
    +
    +
    + + + + diff --git a/master/namespaceseastar_1_1net.html b/master/namespaceseastar_1_1net.html new file mode 100644 index 000000000..369830d97 --- /dev/null +++ b/master/namespaceseastar_1_1net.html @@ -0,0 +1,1130 @@ + + + + + + + +Seastar: seastar::net Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net Namespace Reference
    +
    +
    +

    Detailed Description

    +

    C-ares based dns query support. Handles name- and ip-based resolution.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  arp
     
    class  arp_error
     
    class  arp_for
     
    class  arp_for_protocol
     
    class  arp_queue_full_error
     
    class  arp_timeout_error
     
    struct  checksummer
     
    class  config_exception
     
    class  conntrack
     
    class  datagram
     
    class  datagram_channel
     
    class  datagram_impl
     
    class  device
     
    struct  device_config
     
    class  dhcp
     
    class  dns_resolver
     
    struct  dpdk_options
     DPDK configuration. More...
     
    struct  eth_hdr
     
    struct  ethernet
     
    struct  ethernet_address
     
    class  forward_hash
     
    struct  fragment
     
    struct  hostent
     
    struct  hw_config
     
    struct  hw_features
     
    class  icmp
     
    struct  icmp_hdr
     
    class  inet_address
     
    class  interface
     
    struct  ip_hdr
     
    struct  ip_packet_filter
     
    class  ip_protocol
     
    class  ipv4
     
    struct  ipv4_address
     
    struct  ipv4_config
     
    struct  ipv4_frag_id
     
    class  ipv4_icmp
     
    class  ipv4_l4
     
    struct  ipv4_tag
     
    class  ipv4_tcp
     
    struct  ipv4_traits
     
    class  ipv4_udp
     
    struct  ipv6_address
     
    class  l3_protocol
     
    struct  l4connid
     
    struct  native_stack_options
     Native stack configuration. More...
     
    struct  offload_info
     
    class  packet
     
    class  packet_data_source
     
    class  packet_merger
     
    class  posix_ap_network_stack
     
    class  posix_ap_server_socket_impl
     
    class  posix_data_sink_impl
     
    class  posix_data_source_impl
     
    class  posix_network_stack
     
    class  posix_reuseport_server_socket_impl
     
    class  posix_server_socket_impl
     
    class  qp
     
    struct  qp_stats
     
    struct  qp_stats.rx
     
    struct  qp_stats.rx.bad
     
    struct  qp_stats.tx
     
    struct  qp_stats_good
     
    struct  sctp_keepalive_params
     
    struct  srv_record
     
    class  tcp
     
    struct  tcp_hdr
     
    struct  tcp_keepalive_params
     
    struct  tcp_option
     
    struct  tcp_seq
     
    struct  tcp_tag
     
    struct  udp_channel_state
     
    struct  udp_hdr
     
    class  unknown_host
     
    struct  virtio_options
     Virtio configuration. More...
     
    + + + + + + + + + + + + + + + + + + +

    +Typedefs

    +using udp_channel = datagram_channel
     
    +using keepalive_params = std::variant< tcp_keepalive_params, sctp_keepalive_params >
     
    +using udp_datagram_impl = datagram_impl
     
    +using udp_datagram = datagram
     
    +template<typename T >
    using packed = unaligned< T >
     
    +typedef std::optional< inet_address::family > opt_family
     
    +using ipv4_packet_merger = packet_merger< uint32_t, ipv4_tag >
     
    +using tcp_packet_merger = packet_merger< tcp_seq, tcp_tag >
     
    + + + + + + + +

    +Enumerations

    enum class  ip_protocol_num : uint8_t { icmp = 1 +, tcp = 6 +, udp = 17 +, unused = 255 + }
     
    enum class  eth_protocol_num : uint16_t { ipv4 = 0x0800 +, arp = 0x0806 +, ipv6 = 0x86dd + }
     
    enum class  tcp_state : uint16_t {
    +  CLOSED = (1 << 0) +, LISTEN = (1 << 1) +, SYN_SENT = (1 << 2) +, SYN_RECEIVED = (1 << 3) +,
    +  ESTABLISHED = (1 << 4) +, FIN_WAIT_1 = (1 << 5) +, FIN_WAIT_2 = (1 << 6) +, CLOSE_WAIT = (1 << 7) +,
    +  CLOSING = (1 << 8) +, LAST_ACK = (1 << 9) +, TIME_WAIT = (1 << 10) +
    + }
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    +void ntoh ()
     
    +void hton ()
     
    +uint8_t ntoh (uint8_t x)
     
    +uint8_t hton (uint8_t x)
     
    +uint16_t ntoh (uint16_t x)
     
    +uint16_t hton (uint16_t x)
     
    +uint32_t ntoh (uint32_t x)
     
    +uint32_t hton (uint32_t x)
     
    +uint64_t ntoh (uint64_t x)
     
    +uint64_t hton (uint64_t x)
     
    +int8_t ntoh (int8_t x)
     
    +int8_t hton (int8_t x)
     
    +int16_t ntoh (int16_t x)
     
    +int16_t hton (int16_t x)
     
    +int32_t ntoh (int32_t x)
     
    +int32_t hton (int32_t x)
     
    +int64_t ntoh (int64_t x)
     
    +int64_t hton (int64_t x)
     
    +template<typename T >
    ntoh (const packed< T > &x)
     
    +template<typename T >
    hton (const packed< T > &x)
     
    +template<typename T >
    std::ostream & operator<< (std::ostream &os, const packed< T > &v)
     
    +void ntoh_inplace ()
     
    +void hton_inplace ()
     
    +template<typename First , typename... Rest>
    void ntoh_inplace (First &first, Rest &... rest)
     
    +template<typename First , typename... Rest>
    void hton_inplace (First &first, Rest &... rest)
     
    +template<class T >
    ntoh (const T &x)
     
    +template<class T >
    hton (const T &x)
     
    +std::unordered_map< std::string, device_configparse_config (std::istream &input)
     
    +struct seastar::net::ethernet_address __attribute__ ((packed))
     
    +std::ostream & operator<< (std::ostream &os, ethernet_address ea)
     
    +ethernet_address parse_ethernet_address (std::string addr)
     
    +std::ostream & operator<< (std::ostream &, const inet_address &)
     
    +std::ostream & operator<< (std::ostream &, const inet_address::family &)
     
    +void arp_learn (ethernet_address l2, ipv4_address l3)
     
    +uint16_t ip_checksum (const void *data, size_t len)
     
    +bool is_unspecified (ipv4_address addr) noexcept
     
    +std::ostream & operator<< (std::ostream &os, const ipv4_address &a)
     
    +std::ostream & operator<< (std::ostream &, const ipv6_address &)
     
    +void create_native_stack (const native_stack_options &opts, std::shared_ptr< device > dev)
     
    +network_stack_entry register_native_stack ()
     
    +static input_stream< char > as_input_stream (packet &&p)
     
    +std::ostream & operator<< (std::ostream &os, const packet &p)
     
    +network_stack_entry register_posix_stack ()
     
    +std::unique_ptr< qpcreate_proxy_net_device (unsigned master_cpu, device *dev)
     
    +server_socket tcpv4_listen (tcp< ipv4_traits > &tcpv4, uint16_t port, listen_options opts)
     
    +seastar::socket tcpv4_socket (tcp< ipv4_traits > &tcpv4)
     
    +auto tcp_error (int err)
     
    +auto tcp_reset_error ()
     
    +auto tcp_connect_error ()
     
    +auto tcp_refused_error ()
     
    +tcp_state operator| (tcp_state s1, tcp_state s2)
     
    +template<typename... Args>
    void tcp_debug (const char *fmt, Args &&... args)
     
    +char *& operator+= (char *&x, tcp_option::option_len len)
     
    +const char *& operator+= (const char *&x, tcp_option::option_len len)
     
    +uint8_t & operator+= (uint8_t &x, tcp_option::option_len len)
     
    +tcp_seq ntoh (tcp_seq s)
     
    +tcp_seq hton (tcp_seq s)
     
    +std::ostream & operator<< (std::ostream &os, tcp_seq s)
     
    +tcp_seq make_seq (uint32_t raw)
     
    +tcp_seqoperator+= (tcp_seq &s, int32_t n)
     
    +tcp_seqoperator-= (tcp_seq &s, int32_t n)
     
    +tcp_seq operator+ (tcp_seq s, int32_t n)
     
    +tcp_seq operator- (tcp_seq s, int32_t n)
     
    +int32_t operator- (tcp_seq s, tcp_seq q)
     
    +bool operator== (tcp_seq s, tcp_seq q)
     
    +bool operator!= (tcp_seq s, tcp_seq q)
     
    +bool operator< (tcp_seq s, tcp_seq q)
     
    +bool operator> (tcp_seq s, tcp_seq q)
     
    +bool operator<= (tcp_seq s, tcp_seq q)
     
    +bool operator>= (tcp_seq s, tcp_seq q)
     
    + + + + + + + + + + + + + +

    +Variables

    +const uint8_t eth_hdr_len = 14
     
    +const uint8_t tcp_hdr_len_min = 20
     
    +const uint8_t ipv4_hdr_len_min = 20
     
    +const uint8_t ipv6_hdr_len_min = 40
     
    +const uint16_t ip_packet_len_max = 65535
     
    +struct seastar::net::ethernet __attribute__
     
    +

    Class Documentation

    + +

    ◆ seastar::net::device_config

    + +
    +
    + + + + +
    struct seastar::net::device_config
    +
    + + + + + + + + +
    Class Members
    +hw_config +hw_cfg +
    +ipv4_config +ip_cfg +
    + +
    +
    + +

    ◆ seastar::net::fragment

    + +
    +
    + + + + +
    struct seastar::net::fragment
    +
    + + + + + + + + +
    Class Members
    +char * +base +
    +size_t +size +
    + +
    +
    + +

    ◆ seastar::net::hostent

    + +
    +
    + + + + +
    struct seastar::net::hostent
    +
    + + + + + + + + +
    Class Members
    +vector< inet_address > +addr_list +
    +vector< sstring > +names +
    + +
    +
    + +

    ◆ seastar::net::hw_config

    + +
    +
    + + + + +
    struct seastar::net::hw_config
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Members
    +bool +csum_offload +
    +bool +event_index +
    +bool +hw_fc +
    +bool +lro +
    +string +pci_address +
    +optional< unsigned > +port_index +
    +optional< unsigned > +ring_size +
    +bool +tso +
    +bool +ufo +
    + +
    +
    + +

    ◆ seastar::net::hw_features

    + +
    +
    + + + + +
    struct seastar::net::hw_features
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Members
    +uint16_t +max_packet_len +
    +uint16_t +mtu +
    +bool +rx_csum_offload +
    +bool +rx_lro +
    +bool +tx_csum_ip_offload +
    +bool +tx_csum_l4_offload +
    +bool +tx_tso +
    +bool +tx_ufo +
    + +
    +
    + +

    ◆ seastar::net::ipv4_config

    + +
    +
    + + + + +
    struct seastar::net::ipv4_config
    +
    + + + + + + + + + + + + + + +
    Class Members
    +bool +dhcp +
    +string +gateway +
    +string +ip +
    +string +netmask +
    + +
    +
    + +

    ◆ seastar::net::ipv4_tag

    + +
    +
    + + + + +
    struct seastar::net::ipv4_tag
    +
    + +
    +
    + +

    ◆ seastar::net::offload_info

    + +
    +
    + + + + +
    struct seastar::net::offload_info
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Members
    +uint8_t +ip_hdr_len +
    +bool +needs_csum +
    +bool +needs_ip_csum +
    +ip_protocol_num +protocol +
    +bool +reassembled +
    +uint8_t +tcp_hdr_len +
    +uint16_t +tso_seg_size +
    +uint8_t +udp_hdr_len +
    +optional< uint16_t > +vlan_tci +
    + +
    +
    + +

    ◆ seastar::net::qp_stats.rx

    + +
    +
    + + + + +
    struct seastar::net::qp_stats.rx
    +
    + + + + + + + + +
    Class Members
    +struct qp_stats.rx.bad +bad +
    +struct qp_stats_good +good +
    + +
    +
    + +

    ◆ seastar::net::qp_stats.rx.bad

    + +
    +
    + + + + +
    struct seastar::net::qp_stats.rx.bad
    +
    + + + + + + + + + + + +
    Class Members
    +uint64_t +csum +
    +uint64_t +no_mem +
    +uint64_t +total +
    + +
    +
    + +

    ◆ seastar::net::qp_stats.tx

    + +
    +
    + + + + +
    struct seastar::net::qp_stats.tx
    +
    + + + + + + + + +
    Class Members
    +struct qp_stats_good +good +
    +uint64_t +linearized +
    + +
    +
    + +

    ◆ seastar::net::sctp_keepalive_params

    + +
    +
    + + + + +
    struct seastar::net::sctp_keepalive_params
    +
    + + + + + + + + +
    Class Members
    +unsigned +count +
    +seconds +interval +
    + +
    +
    + +

    ◆ seastar::net::srv_record

    + +
    +
    + + + + +
    struct seastar::net::srv_record
    +
    + + + + + + + + + + + + + + +
    Class Members
    +unsigned short +port +
    +unsigned short +priority +
    +sstring +target +
    +unsigned short +weight +
    + +
    +
    + +

    ◆ seastar::net::tcp_keepalive_params

    + +
    +
    + + + + +
    struct seastar::net::tcp_keepalive_params
    +
    + + + + + + + + + + + +
    Class Members
    +unsigned +count +
    +seconds +idle +
    +seconds +interval +
    + +
    +
    + +

    ◆ seastar::net::tcp_seq

    + +
    +
    + + + + +
    struct seastar::net::tcp_seq
    +
    + + + + + +
    Class Members
    +uint32_t +raw +
    + +
    +
    + +

    ◆ seastar::net::tcp_tag

    + +
    +
    + + + + +
    struct seastar::net::tcp_tag
    +
    + +
    +
    +
    + + + + diff --git a/master/namespaceseastar_1_1scollectd.html b/master/namespaceseastar_1_1scollectd.html new file mode 100644 index 000000000..41479b252 --- /dev/null +++ b/master/namespaceseastar_1_1scollectd.html @@ -0,0 +1,854 @@ + + + + + + + +Seastar: seastar::scollectd Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::scollectd Namespace Reference
    +
    +
    +

    Detailed Description

    +

    Implementation of rudimentary collectd data gathering.

    +

    Usage is hopefully straight forward. Though, feel free to read https://collectd.org/wiki/index.php/Naming_schema for an explanation on the naming model.

    +

    Typically, you'll add values something like:

                scollectd::type_instance_id typ("<pluginname>", "<instance_name>", "<type_name>", "<instance_name>");
    +    scollectd::add_polled_metric(typ, [<metric var> | scollectd::make_typed(<data_type>, <metric_var>) [, ...]);
    +

    Where <pluginname> would be the overall 'module', e.g. "cpu" <instance_name> -> optional distinguisher between plugin instances. For cpu, the built-in scollectd::per_cpu_plugin_instance constant is a good choice, i.e. 0->N cpu. If there are no instances (e.g. only one), empty constant is appropriate (none) <type_name> is the 'type' of metric collected, for ex. "usage" (cpu/0/usage) <type_instance> is a distinguisher for metric parts of the type, e.g. "idle", "user", "kernel" -> cpu/0/usage/idle | cpu/0/usage/user | cpu/0/usage/kernel

    +

    Each type instance can bind an arbitrary number of values, ech representing some aspect in turn of the instance. The structure and interpretation is up to the producer/consumer

    +

    There is a single "scollectd" instance per cpu, and values should be bound locally to this cpu. Polling is done at a frequency set in the seastar config (def once per s), and all registered values will be sent via UDP packages to the destination host(s)

    +

    Note that the tuple { plugin, plugin_instance, type, type_instance } is considered a unique ID for a value registration, so using the same tuple twice will remove the previously registered values.

    +

    Values can be unregistered at any time, though they must be so on the same thread/cpu as they we're registered. The "registration" achor type provides RAII style value unregistration semantics.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    struct  data_type_for
     
    struct  data_type_for< T, std::enable_if_t< is_callable< T >::value, void > >
     
    struct  data_type_for< T, std::enable_if_t< std::is_floating_point_v< T >, void > >
     
    struct  data_type_for< T, std::enable_if_t< std::is_integral_v< T > &&std::is_unsigned_v< T >, void > >
     
    struct  data_type_for< typed< T > >
     
    struct  is_callable
     
    struct  is_callable< T, std::enable_if_t< std::is_fundamental_v< T >, void > >
     
    struct  is_callable< T, std::enable_if_t<!std::is_void_v< std::invoke_result_t< T > >, void > >
     
    struct  options
     
    class  percpu_plugin_instance_metrics
     
    class  plugin_instance_metrics
     
    struct  registration
     
    class  registrations
     
    class  type_instance_id
     
    struct  typed
     
    struct  typed_value
     
    struct  typed_value_impl
     
    class  value
     
    class  value< typed< T > >
     
    class  value_list
     
    class  values_impl
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    +using data_type = seastar::metrics::impl::data_type
     
    +using plugin_id = seastar::metrics::group_name_type
     
    +using plugin_instance_id = seastar::metrics::instance_id_type
     
    +using type_id = seastar::metrics::metric_type_def
     
    +using type_instance = seastar::metrics::metric_name_type
     
    +using description = seastar::metrics::description
     
    typedef typed_value_impl< known_type::total_bytes > total_bytes
     
    +typedef typed_value_impl< known_type::total_connections > total_connections
     
    +typedef typed_value_impl< known_type::total_objects > total_objects
     
    +typedef typed_value_impl< known_type::total_operations > total_operations
     
    +typedef typed_value_impl< known_type::total_requests > total_requests
     
    +typedef typed_value_impl< known_type::total_sessions > total_sessions
     
    +typedef typed_value_impl< known_type::total_threads > total_threads
     
    +typedef typed_value_impl< known_type::total_time_in_ms > total_time_in_ms
     
    +typedef typed_value_impl< known_type::total_values > total_values
     
    +typedef typed_value_impl< known_type::queue_length > queue_length
     
    +typedef typed_value_impl< known_type::counter > counter
     
    +typedef typed_value_impl< known_type::count > count
     
    +typedef typed_value_impl< known_type::gauge > gauge
     
    +typedef std::function< void()> notify_function
     
    +using collectd_value = seastar::metrics::impl::metric_value
     
    + + + +

    +Enumerations

    enum class  known_type {
    +  absolute +, backends +, bitrate +, blocked_clients +,
    +  bytes +, cache_eviction +, cache_operation +, cache_ratio +,
    +  cache_result +, cache_size +, capacity +, changes_since_last_save +,
    +  charge +, clock_last_meas +, clock_last_update +, clock_mode +,
    +  clock_reachability +, clock_skew_ppm +, clock_state +, clock_stratum +,
    +  compression +, compression_ratio +, connections +, conntrack +,
    +  contextswitch +, count +, counter +, cpu +,
    +  cpufreq +, current +, current_connections +, current_sessions +,
    +  delay +, derive +, df +, df_complex +,
    +  df_inodes +, disk_io_time +, disk_latency +, disk_merged +,
    +  disk_octets +, disk_ops +, disk_ops_complex +, disk_time +,
    +  dns_answer +, dns_notify +, dns_octets +, dns_opcode +,
    +  dns_qtype +, dns_qtype_cached +, dns_query +, dns_question +,
    +  dns_rcode +, dns_reject +, dns_request +, dns_resolver +,
    +  dns_response +, dns_transfer +, dns_update +, dns_zops +,
    +  drbd_resource +, duration +, email_check +, email_count +,
    +  email_size +, entropy +, evicted_keys +, expired_keys +,
    +  fanspeed +, file_handles +, file_size +, files +,
    +  flow +, fork_rate +, frequency +, frequency_error +,
    +  frequency_offset +, fscache_stat +, gauge +, hash_collisions +,
    +  http_request_methods +, http_requests +, http_response_codes +, humidity +,
    +  if_collisions +, if_dropped +, if_errors +, if_multicast +,
    +  if_octets +, if_packets +, if_rx_errors +, if_rx_octets +,
    +  if_tx_errors +, if_tx_octets +, invocations +, io_octets +,
    +  io_packets +, ipt_bytes +, ipt_packets +, irq +,
    +  latency +, links +, load +, md_disks +,
    +  memory +, memory_lua +, memory_throttle_count +, multimeter +,
    +  mutex_operations +, objects +, operations +, packets +,
    +  pending_operations +, percent +, percent_bytes +, percent_inodes +,
    +  ping +, ping_droprate +, ping_stddev +, players +,
    +  power +, pressure +, protocol_counter +, pubsub +,
    +  queue_length +, records +, requests +, response_code +,
    +  response_time +, root_delay +, root_dispersion +, route_etx +,
    +  route_metric +, routes +, segments +, serial_octets +,
    +  signal_noise +, signal_power +, signal_quality +, snr +,
    +  spl +, swap +, swap_io +, tcp_connections +,
    +  temperature +, threads +, time_dispersion +, time_offset +,
    +  time_offset_ntp +, time_offset_rms +, time_ref +, timeleft +,
    +  total_bytes +, total_connections +, total_objects +, total_operations +,
    +  total_requests +, total_sessions +, total_threads +, total_time_in_ms +,
    +  total_values +, uptime +, users +, vcl +,
    +  vcpu +, virt_cpu_total +, virt_vcpu +, vmpage_action +,
    +  vmpage_faults +, vmpage_io +, vmpage_number +, volatile_changes +,
    +  voltage +, voltage_threshold +, vs_memory +, vs_processes +,
    +  vs_threads +
    + }
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    +template<typename T >
    typed< T > make_typed (data_type type, T &&t)
     
    +type_id type_id_for (known_type)
     
    +void configure (const options &)
     
    +void remove_polled_metric (const type_instance_id &)
     
    +void add_polled (const type_instance_id &, const shared_ptr< value_list > &, bool enabled=true)
     
    +template<typename... _Args>
    static auto make_type_instance (description d, _Args &&... args) -> values_impl< decltype(value< _Args >(std::forward< _Args >(args)))... >
     
    template<typename ... _Args>
    static type_instance_id add_polled_metric (const plugin_id &plugin, const plugin_instance_id &plugin_instance, const type_id &type, const scollectd::type_instance &type_instance, _Args &&... args)
     
    template<typename ... _Args>
    static type_instance_id add_polled_metric (const plugin_id &plugin, const plugin_instance_id &plugin_instance, const type_id &type, const scollectd::type_instance &type_instance, description d, _Args &&... args)
     
    +template<typename ... _Args>
    static future send_explicit_metric (const plugin_id &plugin, const plugin_instance_id &plugin_instance, const type_id &type, const scollectd::type_instance &type_instance, _Args &&... args)
     
    +template<typename ... _Args>
    static notify_function create_explicit_metric (const plugin_id &plugin, const plugin_instance_id &plugin_instance, const type_id &type, const scollectd::type_instance &type_instance, _Args &&... args)
     
    +seastar::metrics::impl::metric_id to_metrics_id (const type_instance_id &id)
     
    template<typename Arg >
    static type_instance_id add_polled_metric (const type_instance_id &id, description d, Arg &&arg, bool enabled=true)
     
    template<typename Arg >
    static type_instance_id add_polled_metric (const type_instance_id &id, Arg &&arg)
     
    template<typename Args >
    static type_instance_id add_disabled_polled_metric (const type_instance_id &id, description d, Args &&arg)
     
    +template<typename Args >
    static type_instance_id add_disabled_polled_metric (const type_instance_id &id, Args &&args)
     
    +template<typename ... Args>
    static type_instance_id add_disabled_polled_metric (const type_instance_id &id, Args &&... args)
     
    +template<typename ... _Args>
    static future send_explicit_metric (const type_instance_id &id, _Args &&... args)
     
    +template<typename ... _Args>
    static notify_function create_explicit_metric (const type_instance_id &id, _Args &&... args)
     
    +future send_notification (const type_instance_id &id, const sstring &msg)
     
    +std::vector< collectd_valueget_collectd_value (const scollectd::type_instance_id &id)
     
    +std::vector< scollectd::type_instance_idget_collectd_ids ()
     
    +sstring get_collectd_description_str (const scollectd::type_instance_id &)
     
    +bool is_enabled (const scollectd::type_instance_id &id)
     
    void enable (const scollectd::type_instance_id &id, bool enable)
     
    +metrics::impl::value_map get_value_map ()
     
    + + + + + + + +

    +Variables

    +seastar::logger logger
     
    +static constexpr unsigned max_collectd_field_text_len = 63
     
    +const plugin_instance_id per_cpu_plugin_instance
     
    +

    Class Documentation

    + +

    ◆ seastar::scollectd::is_callable

    + +
    +
    + + + + +
    struct seastar::scollectd::is_callable
    +
    + +
    +
    +

    Typedef Documentation

    + +

    ◆ total_bytes

    + +
    +
    + + + + +
    typedef typed_value_impl<known_type::total_bytes> seastar::scollectd::total_bytes
    +
    +
    Deprecated:
    metrics registration should be done using the metrics layer
    +

    Some typedefs for common used types. Feel free to add.

    + +
    +
    +

    Function Documentation

    + +

    ◆ add_disabled_polled_metric()

    + +
    +
    +
    +template<typename Args >
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    static type_instance_id seastar::scollectd::add_disabled_polled_metric (const type_instance_idid,
    description d,
    Args && arg 
    )
    +
    +static
    +
    +
    Deprecated:
    metrics registration should be done using the metrics layer
    + +
    +
    + +

    ◆ add_polled_metric() [1/4]

    + +
    +
    +
    +template<typename ... _Args>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static type_instance_id seastar::scollectd::add_polled_metric (const plugin_id & plugin,
    const plugin_instance_id & plugin_instance,
    const type_id & type,
    const scollectd::type_instance & type_instance,
    _Args &&... args 
    )
    +
    +static
    +
    +
    Deprecated:
    metrics registration should be done using the metrics layer
    + +
    +
    + +

    ◆ add_polled_metric() [2/4]

    + +
    +
    +
    +template<typename ... _Args>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static type_instance_id seastar::scollectd::add_polled_metric (const plugin_id & plugin,
    const plugin_instance_id & plugin_instance,
    const type_id & type,
    const scollectd::type_instance & type_instance,
    description d,
    _Args &&... args 
    )
    +
    +static
    +
    +
    Deprecated:
    metrics registration should be done using the metrics layer
    + +
    +
    + +

    ◆ add_polled_metric() [3/4]

    + +
    +
    +
    +template<typename Arg >
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    static type_instance_id seastar::scollectd::add_polled_metric (const type_instance_idid,
    Arg && arg 
    )
    +
    +static
    +
    +
    Deprecated:
    metrics registration should be done using the metrics layer
    + +
    +
    + +

    ◆ add_polled_metric() [4/4]

    + +
    +
    +
    +template<typename Arg >
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static type_instance_id seastar::scollectd::add_polled_metric (const type_instance_idid,
    description d,
    Arg && arg,
    bool enabled = true 
    )
    +
    +static
    +
    +
    Deprecated:
    metrics registration should be done using the metrics layer
    + +
    +
    + +

    ◆ enable()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void seastar::scollectd::enable (const scollectd::type_instance_idid,
    bool enable 
    )
    +
    +

    Enable or disable collectd metrics on local instance

    Parameters
    + + + +
    id- the metric to enable or disable
    enable- should the collectd metrics be enable or disable
    +
    +
    + +
    +
    +
    + + + + diff --git a/master/namespaceseastar_1_1tls.html b/master/namespaceseastar_1_1tls.html new file mode 100644 index 000000000..8f633202d --- /dev/null +++ b/master/namespaceseastar_1_1tls.html @@ -0,0 +1,880 @@ + + + + + + + +Seastar: seastar::tls Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::tls Namespace Reference
    +
    +
    +

    Detailed Description

    +

    Relatively thin SSL wrapper for socket IO. (Can be expanded to other IO forms).

    +

    The current underlying mechanism is gnutls, however, all interfaces are kept agnostic, so in theory it could be replaced with OpenSSL or similar.

    +
    + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  abstract_credentials
     
    class  certificate_credentials
     
    class  credentials_builder
     
    class  dh_params
     
    class  reloadable_credentials
     
    class  server_credentials
     
    struct  subject_alt_name
     
    struct  tls_options
     TLS configuration options. More...
     
    class  verification_error
     
    class  x509_cert
     
    + + + + + + + + + +

    +Typedefs

    +typedef std::basic_string_view< char > blob
     
    using dn_callback = noncopyable_function< void(session_type type, sstring subject, sstring issuer)>
     
    +using reload_callback = std::function< void(const std::unordered_set< sstring > &, std::exception_ptr)>
     
    +using session_data = std::vector< uint8_t >
     
    + + + + + + + + + + + +

    +Enumerations

    enum class  x509_crt_format { DER +, PEM + }
     
    enum class  session_type { CLIENT +, SERVER + }
     
    enum class  client_auth { NONE +, REQUEST +, REQUIRE + }
     
    enum class  session_resume_mode { NONE +, TLS13_SESSION_TICKET + }
     
    enum class  subject_alt_name_type {
    +  dnsname = 1 +, rfc822name +, uri +, ipaddress +,
    +  othername +, dn +
    + }
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    future< std::optional< session_dn > > get_dn_information (connected_socket &socket)
     
    future< std::vector< subject_alt_name > > get_alt_name_information (connected_socket &socket, std::unordered_set< subject_alt_name_type > types={})
     
    future< bool > check_session_is_resumed (connected_socket &socket)
     
    future< session_data > get_session_resume_data (connected_socket &)
     
    +std::ostream & operator<< (std::ostream &, const subject_alt_name::value_type &)
     
    +std::ostream & operator<< (std::ostream &, const subject_alt_name &)
     
    std::string_view format_as (subject_alt_name_type)
     
    +std::ostream & operator<< (std::ostream &, subject_alt_name_type)
     
    const std::error_category & error_category ()
     
    future< connected_socketconnect (shared_ptr< certificate_credentials >, socket_address, sstring name)
     
    +future< connected_socketconnect (shared_ptr< certificate_credentials >, socket_address, socket_address local, sstring name)
     
    future< connected_socketconnect (shared_ptr< certificate_credentials >, socket_address, tls_options option={})
     
    +future< connected_socketconnect (shared_ptr< certificate_credentials >, socket_address, socket_address local, tls_options options={})
     
    ::seastar::socket socket (shared_ptr< certificate_credentials >, sstring name)
     
    ::seastar::socket socket (shared_ptr< certificate_credentials >, tls_options options={})
     
    future< connected_socketwrap_client (shared_ptr< certificate_credentials >, connected_socket &&, sstring name)
     
    +future< connected_socketwrap_server (shared_ptr< server_credentials >, connected_socket &&)
     
    future< connected_socketwrap_client (shared_ptr< certificate_credentials >, connected_socket &&, tls_options options={})
     
    server_socket listen (shared_ptr< server_credentials >, socket_address sa, listen_options opts=listen_options())
     
    +server_socket listen (shared_ptr< server_credentials >, server_socket)
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    const int ERROR_UNKNOWN_COMPRESSION_ALGORITHM
     
    +const int ERROR_UNKNOWN_CIPHER_TYPE
     
    +const int ERROR_INVALID_SESSION
     
    +const int ERROR_UNEXPECTED_HANDSHAKE_PACKET
     
    +const int ERROR_UNKNOWN_CIPHER_SUITE
     
    +const int ERROR_UNKNOWN_ALGORITHM
     
    +const int ERROR_UNSUPPORTED_SIGNATURE_ALGORITHM
     
    +const int ERROR_SAFE_RENEGOTIATION_FAILED
     
    +const int ERROR_UNSAFE_RENEGOTIATION_DENIED
     
    +const int ERROR_UNKNOWN_SRP_USERNAME
     
    +const int ERROR_PREMATURE_TERMINATION
     
    +const int ERROR_PUSH
     
    +const int ERROR_PULL
     
    +const int ERROR_UNEXPECTED_PACKET
     
    +const int ERROR_UNSUPPORTED_VERSION
     
    +const int ERROR_NO_CIPHER_SUITES
     
    +const int ERROR_DECRYPTION_FAILED
     
    +const int ERROR_MAC_VERIFY_FAILED
     
    +

    Class Documentation

    + +

    ◆ seastar::tls::reloadable_credentials

    + +
    +
    + + + + +
    class seastar::tls::reloadable_credentials
    +
    + +
    +
    + +

    ◆ seastar::tls::subject_alt_name

    + +
    +
    + + + + +
    struct seastar::tls::subject_alt_name
    +
    + + + + + +
    Class Members
    +typedef variant< sstring, inet_address > +value_type +
    + + + + + + + + +
    Class Members
    +subject_alt_name_type +type +
    +value_type +value +
    + +
    +
    + +

    ◆ seastar::tls::tls_options

    + +
    +
    + + + + +
    struct seastar::tls::tls_options
    +
    + + + + + + + + + + + +
    Class Members
    +sstring +server_name +server name to be used for the SNI TLS extension
    +session_data +session_resume_data +Optional session resume data. Must be retrieved via get_session_resume_data below.
    +bool +wait_for_eof_on_shutdown +whether to wait for EOF from server on session termination
    + +
    +
    +

    Typedef Documentation

    + +

    ◆ dn_callback

    + +
    +
    + + + + +
    using seastar::tls::dn_callback = typedef noncopyable_function<void(session_type type, sstring subject, sstring issuer)>
    +
    +

    Callback prototype for receiving Distinguished Name (DN) information

    +
    Parameters
    + + + + +
    typeOur own role in the TLS handshake (client vs. server)
    subjectThe subject DN string
    issuerThe issuer DN string
    +
    +
    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ session_resume_mode

    + +
    +
    + + + + + +
    + + + + +
    enum class seastar::tls::session_resume_mode
    +
    +strong
    +
    +

    Session resumption support. We only support TLS1.3 session tickets.

    + +
    +
    + +

    ◆ session_type

    + +
    +
    + + + + + +
    + + + + +
    enum class seastar::tls::session_type
    +
    +strong
    +
    +

    Enum like tls::session::type but independent of gnutls headers

    +
    Warning
    Uses a different internal encoding than tls::session::type
    + +
    +
    + +

    ◆ subject_alt_name_type

    + +
    +
    + + + + + +
    + + + + +
    enum class seastar::tls::subject_alt_name_type
    +
    +strong
    +
    +

    Subject alt name types.

    + +
    +
    +

    Function Documentation

    + +

    ◆ check_session_is_resumed()

    + +
    +
    + + + + + + + + +
    future< bool > seastar::tls::check_session_is_resumed (connected_socketsocket)
    +
    +

    Checks if the socket was connected using session resume. Will force handshake if not already done.

    +

    If the socket is not connected a system_error exception will be thrown. If the socket is not a TLS socket an exception will be thrown.

    + +
    +
    + +

    ◆ connect() [1/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    future< connected_socket > seastar::tls::connect (shared_ptr< certificate_credentials,
    socket_address ,
    sstring name 
    )
    +
    +

    Creates a TLS client connection using the default network stack and the supplied credentials. Typically these should contain enough information to validate the remote certificate (i.e. trust info).

    +

    ATTN: The method is going to be deprecated

    +
    Parameters
    + + +
    nameThe expected server name for the remote end point
    +
    +
    + +
    +
    + +

    ◆ connect() [2/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    future< connected_socket > seastar::tls::connect (shared_ptr< certificate_credentials,
    socket_address ,
    tls_options option = {} 
    )
    +
    +

    Creates a TLS client connection using the default network stack and the supplied credentials. Typically these should contain enough information to validate the remote certificate (i.e. trust info).

    +
    Parameters
    + + +
    optionsOptional additional session configuration
    +
    +
    + +
    +
    + +

    ◆ error_category()

    + +
    +
    + + + + + + + +
    const std::error_category & seastar::tls::error_category ()
    +
    +

    Error handling.

    +

    The error_category instance used by exceptions thrown by TLS

    + +
    +
    + +

    ◆ format_as()

    + +
    +
    + + + + + + + + +
    std::string_view seastar::tls::format_as (subject_alt_name_type )
    +
    +

    Alt name to string. Note: because naming of alternative names is inconsistent between tools, and because openssl is probably more popular when creating certs anyway, this routine will be inconsistent with both gnutls and openssl (though more in line with the latter) and name the constants as follows:

    +

    dnsname: "DNS" rfc822name: "EMAIL" uri: "URI" ipaddress "IP" othername: "OTHERNAME" dn: "DIRNAME"

    + +
    +
    + +

    ◆ get_alt_name_information()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    future< std::vector< subject_alt_name > > seastar::tls::get_alt_name_information (connected_socketsocket,
    std::unordered_set< subject_alt_name_typetypes = {} 
    )
    +
    +

    Returns the alt name entries of matching types, or all entries if 'types' is empty The values are extracted from the client authentication certificate, if available. If no certificate authentication is used in the connection, en empty list is returned.

    +

    If the socket is not connected a system_error exception will be thrown. If the socket is not a TLS socket an exception will be thrown.

    + +
    +
    + +

    ◆ get_dn_information()

    + +
    +
    + + + + + + + + +
    future< std::optional< session_dn > > seastar::tls::get_dn_information (connected_socketsocket)
    +
    +

    Get distinguished name from the leaf certificate in the certificate chain that the connected peer is using. This function forces the TLS handshake. If the handshake didn't happen before the call to 'get_dn_information' it will be completed when the returned future will become ready. The function returns DN information on success. If the peer didn't send the certificate during the handshake the function returns nullopt. If the socket is not connected the system_error exception will be thrown.

    + +
    +
    + +

    ◆ get_session_resume_data()

    + +
    +
    + + + + + + + + +
    future< session_data > seastar::tls::get_session_resume_data (connected_socket)
    +
    +

    Get session resume data from a connected client socket. Will force handshake if not already done.

    +

    If the socket is not connected a system_error exception will be thrown. If the socket is not a TLS socket an exception will be thrown. If no session resumption data is available, returns empty buffer.

    +

    Note: TLS13 session tickets most of the time require data to have been transferred between client/server. To ensure getting the session data, it is advisable to delay this call to sometime before shutting down/closing the socket.

    + +
    +
    + +

    ◆ listen()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    server_socket seastar::tls::listen (shared_ptr< server_credentials,
    socket_address sa,
    listen_options opts = listen_options() 
    )
    +
    +

    Creates a server socket that accepts SSL/TLS clients using default network stack and the supplied credentials. The credentials object should contain certificate info for the server and optionally trust/crl data.

    + +
    +
    + +

    ◆ socket() [1/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    ::seastar::socket seastar::tls::socket (shared_ptr< certificate_credentials,
    sstring name 
    )
    +
    +

    Creates a socket through which a TLS client connection can be created, using the default network stack and the supplied credentials. Typically these should contain enough information to validate the remote certificate (i.e. trust info).

    +

    ATTN: The method is going to be deprecated

    +
    Parameters
    + + +
    nameThe expected server name for the remote end point
    +
    +
    + +
    +
    + +

    ◆ socket() [2/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    ::seastar::socket seastar::tls::socket (shared_ptr< certificate_credentials,
    tls_options options = {} 
    )
    +
    +

    Creates a socket through which a TLS client connection can be created, using the default network stack and the supplied credentials. Typically these should contain enough information to validate the remote certificate (i.e. trust info).

    +
    Parameters
    + + +
    optionsOptional additional session configuration
    +
    +
    + +
    +
    + +

    ◆ wrap_client() [1/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    future< connected_socket > seastar::tls::wrap_client (shared_ptr< certificate_credentials,
    connected_socket && ,
    sstring name 
    )
    +
    +

    Wraps an existing connection in SSL/TLS.

    +

    ATTN: The method is going to be deprecated

    +
    Parameters
    + + +
    nameThe expected server name for the remote end point
    +
    +
    + +
    +
    + +

    ◆ wrap_client() [2/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    future< connected_socket > seastar::tls::wrap_client (shared_ptr< certificate_credentials,
    connected_socket && ,
    tls_options options = {} 
    )
    +
    +

    Wraps an existing connection in SSL/TLS.

    +
    Parameters
    + + +
    optionsOptional additional session configuration
    +
    +
    + +
    +
    +

    Variable Documentation

    + +

    ◆ ERROR_UNKNOWN_COMPRESSION_ALGORITHM

    + +
    +
    + + + + + +
    + + + + +
    const int seastar::tls::ERROR_UNKNOWN_COMPRESSION_ALGORITHM
    +
    +extern
    +
    +

    The more common error codes encountered in TLS. Not an exhaustive list. Add exports as needed.

    + +
    +
    +
    + + + + diff --git a/master/namespacestd.html b/master/namespacestd.html new file mode 100644 index 000000000..64749e680 --- /dev/null +++ b/master/namespacestd.html @@ -0,0 +1,501 @@ + + + + + + + +Seastar: std Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    std Namespace Reference
    +
    +
    +

    Detailed Description

    +

    STL namespace.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  allocator
     STL class.
     
    class  array
     STL class.
     
    class  atomic
     STL class.
     
    class  atomic_ref
     STL class.
     
    class  auto_ptr
     STL class.
     
    class  bad_alloc
     STL class.
     
    class  bad_cast
     STL class.
     
    class  bad_exception
     STL class.
     
    class  bad_typeid
     STL class.
     
    class  basic_fstream
     STL class.
     
    class  basic_ifstream
     STL class.
     
    class  basic_ios
     STL class.
     
    class  basic_iostream
     STL class.
     
    class  basic_istream
     STL class.
     
    class  basic_istringstream
     STL class.
     
    class  basic_ofstream
     STL class.
     
    class  basic_ostream
     STL class.
     
    class  basic_ostringstream
     STL class.
     
    class  basic_string
     STL class.
     
    class  basic_string_view
     STL class.
     
    class  basic_stringstream
     STL class.
     
    class  bitset
     STL class.
     
    class  complex
     STL class.
     
    class  coroutine_traits< seastar::future< T >, Args... >
     
    class  deque
     STL class.
     
    class  domain_error
     STL class.
     
    class  error_category
     STL class.
     
    class  error_code
     STL class.
     
    class  error_condition
     STL class.
     
    class  exception
     STL class.
     
    class  forward_list
     STL class.
     
    class  fstream
     STL class.
     
    struct  hash< seastar::basic_sstring< char_type, size_type, max_size, NulTerminate > >
     
    struct  hash< seastar::checked_ptr< T > >
     std::hash specialization for seastar::checked_ptr class More...
     
    struct  hash< seastar::ipv4_addr >
     
    struct  hash< seastar::lw_shared_ptr< T > >
     
    struct  hash< seastar::memory::allocation_site >
     
    struct  hash< seastar::metrics::impl::labels_type >
     
    struct  hash< seastar::metrics::impl::metric_id >
     
    struct  hash< seastar::net::inet_address >
     
    struct  hash< seastar::net::ipv4_address >
     
    struct  hash< seastar::net::ipv6_address >
     
    struct  hash< seastar::rpc::connection_id >
     
    struct  hash< seastar::rpc::streaming_domain_type >
     
    struct  hash< seastar::scheduling_group >
     
    struct  hash< seastar::shared_ptr< T > >
     
    struct  hash< seastar::simple_backtrace >
     
    struct  hash< seastar::socket_address >
     
    struct  hash< seastar::tasktrace >
     
    struct  hash< seastar::transport >
     
    struct  hash< seastar::unix_domain_addr >
     
    struct  hash<::sockaddr_in >
     
    struct  hash<::sockaddr_un >
     
    class  ifstream
     STL class.
     
    class  invalid_argument
     STL class.
     
    class  ios
     STL class.
     
    class  ios_base
     STL class.
     
    class  istream
     STL class.
     
    class  istringstream
     STL class.
     
    class  jthread
     STL class.
     
    class  length_error
     STL class.
     
    class  list
     STL class.
     
    class  lock_guard
     STL class.
     
    class  logic_error
     STL class.
     
    class  map
     STL class.
     
    class  multimap
     STL class.
     
    class  multiset
     STL class.
     
    class  mutex
     STL class.
     
    class  ofstream
     STL class.
     
    class  ostream
     STL class.
     
    class  ostringstream
     STL class.
     
    class  out_of_range
     STL class.
     
    class  overflow_error
     STL class.
     
    class  priority_queue
     STL class.
     
    class  queue
     STL class.
     
    class  range_error
     STL class.
     
    class  recursive_mutex
     STL class.
     
    class  recursive_timed_mutex
     STL class.
     
    class  runtime_error
     STL class.
     
    class  set
     STL class.
     
    class  shared_lock
     STL class.
     
    class  shared_mutex
     STL class.
     
    class  shared_ptr
     STL class.
     
    class  shared_timed_mutex
     STL class.
     
    class  smart_ptr
     STL class.
     
    class  span
     STL class.
     
    class  stack
     STL class.
     
    class  string
     STL class.
     
    class  string_view
     STL class.
     
    class  stringstream
     STL class.
     
    class  system_error
     STL class.
     
    class  thread
     STL class.
     
    class  timed_mutex
     STL class.
     
    struct  tuple_element< I, seastar::rpc::tuple< T... > >
     
    struct  tuple_size< seastar::rpc::tuple< T... > >
     
    class  u16string
     STL class.
     
    class  u16string_view
     STL class.
     
    class  u32string
     STL class.
     
    class  u32string_view
     STL class.
     
    class  u8string
     STL class.
     
    class  u8string_view
     STL class.
     
    class  underflow_error
     STL class.
     
    class  unique_lock
     STL class.
     
    class  unique_ptr
     STL class.
     
    class  unordered_map
     STL class.
     
    class  unordered_multimap
     STL class.
     
    class  unordered_multiset
     STL class.
     
    class  unordered_set
     STL class.
     
    class  valarray
     STL class.
     
    class  vector
     STL class.
     
    class  weak_ptr
     STL class.
     
    class  wfstream
     STL class.
     
    class  wifstream
     STL class.
     
    class  wios
     STL class.
     
    class  wistream
     STL class.
     
    class  wistringstream
     STL class.
     
    class  wofstream
     STL class.
     
    class  wostream
     STL class.
     
    class  wostringstream
     STL class.
     
    class  wstring
     STL class.
     
    class  wstring_view
     STL class.
     
    class  wstringstream
     STL class.
     
    + + + + + + + + + + + + + +

    +Functions

    template<typename Func >
    ostream & operator<< (ostream &os, const seastar::lazy_eval< Func > &lf)
     
    +template<typename Func >
    ostream & operator<< (ostream &os, seastar::lazy_eval< Func > &lf)
     
    +template<typename Func >
    ostream & operator<< (ostream &os, seastar::lazy_eval< Func > &&lf)
     
    +template<typename T >
    ostream & operator<< (ostream &os, seastar::lazy_deref_wrapper< T > ld)
     
    + + + +

    +Variables

    +struct std::hash< seastar::net::ipv4_address__attribute__
     
    +

    Function Documentation

    + +

    ◆ operator<<()

    + +
    +
    +
    +template<typename Func >
    + + + + + + + + + + + + + + + + + + +
    ostream & std::operator<< (ostream & os,
    const seastar::lazy_eval< Func > & lf 
    )
    +
    +

    Output operator for a seastar::lazy_eval<Func> This would allow printing a seastar::lazy_eval<Func> as if it's a regular value.

    +

    For example:

    +

    logger.debug("heavy eval result:{}", seastar::value_of([&] { return <heavy evaluation>; }));

    +

    (If a logging level is lower than "debug" the evaluation will not take place.)

    +
    Template Parameters
    + + +
    Funca functor type
    +
    +
    +
    Parameters
    + + + +
    osostream to print to
    lfa reference to a lazy_eval<Func> to be printed
    +
    +
    +
    Returns
    os
    + +
    +
    +
    + + + + diff --git a/master/native-stack_8hh_source.html b/master/native-stack_8hh_source.html new file mode 100644 index 000000000..2fe4d8b1b --- /dev/null +++ b/master/native-stack_8hh_source.html @@ -0,0 +1,158 @@ + + + + + + + +Seastar: seastar/net/native-stack.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    native-stack.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/net/net.hh>
    +
    25#include <seastar/net/virtio.hh>
    +
    26#include <seastar/net/dpdk.hh>
    +
    27#include <seastar/util/program-options.hh>
    +
    28
    +
    29namespace seastar {
    +
    30
    +
    31struct network_stack_entry;
    +
    32
    +
    33namespace net {
    +
    34
    + + + + + + + + + + + + +
    79
    + + +
    86
    +
    88 bool _hugepages;
    +
    89
    + +
    92};
    +
    93
    +
    94void create_native_stack(const native_stack_options& opts, std::shared_ptr<device> dev);
    +
    95network_stack_entry register_native_stack();
    +
    96
    +
    97}
    +
    98
    +
    99}
    +
    Definition: program-options.hh:292
    + +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: api.hh:461
    +
    DPDK configuration.
    Definition: dpdk.hh:35
    +
    Native stack configuration.
    Definition: native-stack.hh:36
    +
    program_options::value< std::string > host_ipv4_addr
    Static IPv4 address to use.
    Definition: native-stack.hh:46
    +
    program_options::value< std::string > gw_ipv4_addr
    Static IPv4 gateway to use.
    Definition: native-stack.hh:50
    +
    program_options::value< std::string > tap_device
    Tap device to connect to.
    Definition: native-stack.hh:42
    +
    program_options::value dpdk_pmd
    Use DPDK PMD drivers.
    Definition: native-stack.hh:74
    +
    virtio_options virtio_opts
    Virtio configuration.
    Definition: native-stack.hh:81
    +
    dpdk_options dpdk_opts
    Definition: native-stack.hh:85
    +
    program_options::value< float > hw_queue_weight
    Weighing of a hardware network queue relative to a software queue.
    Definition: native-stack.hh:70
    +
    program_options::value< std::string > netmask_ipv4_addr
    Static IPv4 netmask to use.
    Definition: native-stack.hh:54
    +
    program_options::value< std::string > lro
    Enable LRO (on/off).
    Definition: native-stack.hh:78
    +
    program_options::value< bool > dhcp
    Use DHCP discovery.
    Definition: native-stack.hh:62
    +
    program_options::value< int > udpv4_queue_size
    Default size of the UDPv4 per-channel packet queue.
    Definition: native-stack.hh:58
    +
    Virtio configuration.
    Definition: virtio.hh:36
    +
    + + + + diff --git a/master/nav_f.png b/master/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/master/nav_g.png b/master/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL + + + + + + +Seastar: seastar/net/byteorder.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    byteorder.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <arpa/inet.h> // for ntohs() and friends
    +
    26#include <iosfwd>
    +
    27#include <utility>
    +
    28#endif
    +
    29
    +
    30#include <seastar/core/unaligned.hh>
    +
    31#include <seastar/util/modules.hh>
    +
    32
    +
    33namespace seastar {
    +
    34
    +
    35inline uint64_t ntohq(uint64_t v) {
    +
    36#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
    +
    37 // big endian, nothing to do
    +
    38 return v;
    +
    39#else
    +
    40 // little endian, reverse bytes
    +
    41 return __builtin_bswap64(v);
    +
    42#endif
    +
    43}
    +
    44inline uint64_t htonq(uint64_t v) {
    +
    45 // htonq and ntohq have identical implementations
    +
    46 return ntohq(v);
    +
    47}
    +
    48
    +
    49namespace net {
    +
    50
    +
    51inline void ntoh() {}
    +
    52inline void hton() {}
    +
    53
    +
    54inline uint8_t ntoh(uint8_t x) { return x; }
    +
    55inline uint8_t hton(uint8_t x) { return x; }
    +
    56inline uint16_t ntoh(uint16_t x) { return ntohs(x); }
    +
    57inline uint16_t hton(uint16_t x) { return htons(x); }
    +
    58inline uint32_t ntoh(uint32_t x) { return ntohl(x); }
    +
    59inline uint32_t hton(uint32_t x) { return htonl(x); }
    +
    60inline uint64_t ntoh(uint64_t x) { return ntohq(x); }
    +
    61inline uint64_t hton(uint64_t x) { return htonq(x); }
    +
    62
    +
    63inline int8_t ntoh(int8_t x) { return x; }
    +
    64inline int8_t hton(int8_t x) { return x; }
    +
    65inline int16_t ntoh(int16_t x) { return ntohs(x); }
    +
    66inline int16_t hton(int16_t x) { return htons(x); }
    +
    67inline int32_t ntoh(int32_t x) { return ntohl(x); }
    +
    68inline int32_t hton(int32_t x) { return htonl(x); }
    +
    69inline int64_t ntoh(int64_t x) { return ntohq(x); }
    +
    70inline int64_t hton(int64_t x) { return htonq(x); }
    +
    71
    +
    72// Deprecated alias net::packed<> for unaligned<> from unaligned.hh.
    +
    73// TODO: get rid of this alias.
    +
    74template <typename T> using packed = unaligned<T>;
    +
    75
    +
    76template <typename T>
    +
    77inline T ntoh(const packed<T>& x) {
    +
    78 T v = x;
    +
    79 return ntoh(v);
    +
    80}
    +
    81
    +
    82template <typename T>
    +
    83inline T hton(const packed<T>& x) {
    +
    84 T v = x;
    +
    85 return hton(v);
    +
    86}
    +
    87
    +
    88template <typename T>
    +
    89inline std::ostream& operator<<(std::ostream& os, const packed<T>& v) {
    +
    90 auto x = v.raw;
    +
    91 return os << x;
    +
    92}
    +
    93
    +
    94inline
    +
    95void ntoh_inplace() {}
    +
    96inline
    +
    97void hton_inplace() {};
    +
    98
    +
    99template <typename First, typename... Rest>
    +
    100inline
    +
    101void ntoh_inplace(First& first, Rest&... rest) {
    +
    102 first = ntoh(first);
    +
    103 ntoh_inplace(std::forward<Rest&>(rest)...);
    +
    104}
    +
    105
    +
    106template <typename First, typename... Rest>
    +
    107inline
    +
    108void hton_inplace(First& first, Rest&... rest) {
    +
    109 first = hton(first);
    +
    110 hton_inplace(std::forward<Rest&>(rest)...);
    +
    111}
    +
    112
    +
    113template <class T>
    +
    114inline
    +
    115T ntoh(const T& x) {
    +
    116 T tmp = x;
    +
    117 tmp.adjust_endianness([] (auto&&... what) { ntoh_inplace(std::forward<decltype(what)&>(what)...); });
    +
    118 return tmp;
    +
    119}
    +
    120
    +
    121template <class T>
    +
    122inline
    +
    123T hton(const T& x) {
    +
    124 T tmp = x;
    +
    125 tmp.adjust_endianness([] (auto&&... what) { hton_inplace(std::forward<decltype(what)&>(what)...); });
    +
    126 return tmp;
    +
    127}
    +
    128
    +
    129}
    +
    130
    +
    131}
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/net_8hh_source.html b/master/net_8hh_source.html new file mode 100644 index 000000000..42e3b3714 --- /dev/null +++ b/master/net_8hh_source.html @@ -0,0 +1,390 @@ + + + + + + + +Seastar: seastar/net/net.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    net.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/smp.hh>
    +
    25#include <seastar/core/deleter.hh>
    +
    26#include <seastar/core/queue.hh>
    +
    27#include <seastar/core/stream.hh>
    + +
    29#include <seastar/net/toeplitz.hh>
    +
    30#include <seastar/net/ethernet.hh>
    +
    31#include <seastar/net/packet.hh>
    +
    32#include <seastar/net/const.hh>
    +
    33#include <unordered_map>
    +
    34
    +
    35namespace seastar {
    +
    36
    +
    37namespace internal {
    +
    38
    +
    39class poller;
    +
    40
    +
    41}
    +
    42
    +
    43namespace net {
    +
    44
    +
    45class packet;
    +
    46class interface;
    +
    47class device;
    +
    48class qp;
    +
    49class l3_protocol;
    +
    50
    + +
    52 uint8_t data[64];
    +
    53 size_t end_idx = 0;
    +
    54public:
    +
    55 size_t size() const {
    +
    56 return end_idx;
    +
    57 }
    +
    58 void push_back(uint8_t b) {
    +
    59 assert(end_idx < sizeof(data));
    +
    60 data[end_idx++] = b;
    +
    61 }
    +
    62 void push_back(uint16_t b) {
    +
    63 push_back(uint8_t(b));
    +
    64 push_back(uint8_t(b >> 8));
    +
    65 }
    +
    66 void push_back(uint32_t b) {
    +
    67 push_back(uint16_t(b));
    +
    68 push_back(uint16_t(b >> 16));
    +
    69 }
    +
    70 const uint8_t& operator[](size_t idx) const {
    +
    71 return data[idx];
    +
    72 }
    +
    73};
    +
    74
    + +
    76 // Enable tx ip header checksum offload
    +
    77 bool tx_csum_ip_offload = false;
    +
    78 // Enable tx l4 (TCP or UDP) checksum offload
    +
    79 bool tx_csum_l4_offload = false;
    +
    80 // Enable rx checksum offload
    +
    81 bool rx_csum_offload = false;
    +
    82 // LRO is enabled
    +
    83 bool rx_lro = false;
    +
    84 // Enable tx TCP segment offload
    +
    85 bool tx_tso = false;
    +
    86 // Enable tx UDP fragmentation offload
    +
    87 bool tx_ufo = false;
    +
    88 // Maximum Transmission Unit
    +
    89 uint16_t mtu = 1500;
    +
    90 // Maximun packet len when TCP/UDP offload is enabled
    +
    91 uint16_t max_packet_len = ip_packet_len_max - eth_hdr_len;
    +
    92};
    +
    93
    + +
    95public:
    +
    96 struct l3packet {
    +
    97 eth_protocol_num proto_num;
    + +
    99 packet p;
    +
    100 };
    +
    101 using packet_provider_type = std::function<std::optional<l3packet> ()>;
    +
    102private:
    +
    103 interface* _netif;
    +
    104 eth_protocol_num _proto_num;
    +
    105public:
    +
    106 explicit l3_protocol(interface* netif, eth_protocol_num proto_num, packet_provider_type func);
    +
    107 future<> receive(
    +
    108 std::function<future<> (packet, ethernet_address)> rx_fn,
    +
    109 std::function<bool (forward_hash&, packet&, size_t)> forward);
    +
    110private:
    +
    111 friend class interface;
    +
    112};
    +
    113
    + +
    115 struct l3_rx_stream {
    + +
    117 future<> ready;
    +
    118 std::function<bool (forward_hash&, packet&, size_t)> forward;
    +
    119 l3_rx_stream(std::function<bool (forward_hash&, packet&, size_t)>&& fw) : ready(packet_stream.started()), forward(fw) {}
    +
    120 };
    +
    121 std::unordered_map<uint16_t, l3_rx_stream> _proto_map;
    +
    122 std::shared_ptr<device> _dev;
    +
    123 ethernet_address _hw_address;
    +
    124 net::hw_features _hw_features;
    +
    125 std::vector<l3_protocol::packet_provider_type> _pkt_providers;
    +
    126private:
    +
    127 future<> dispatch_packet(packet p);
    +
    128public:
    +
    129 explicit interface(std::shared_ptr<device> dev);
    +
    130 ethernet_address hw_address() const noexcept { return _hw_address; }
    +
    131 const net::hw_features& hw_features() const { return _hw_features; }
    +
    132 future<> register_l3(eth_protocol_num proto_num,
    +
    133 std::function<future<> (packet p, ethernet_address from)> next,
    +
    134 std::function<bool (forward_hash&, packet&, size_t)> forward);
    +
    135 void forward(unsigned cpuid, packet p);
    +
    136 unsigned hash2cpu(uint32_t hash);
    +
    137 void register_packet_provider(l3_protocol::packet_provider_type func) {
    +
    138 _pkt_providers.push_back(std::move(func));
    +
    139 }
    +
    140 uint16_t hw_queues_count();
    +
    141 rss_key_type rss_key() const;
    +
    142 friend class l3_protocol;
    +
    143};
    +
    144
    + +
    153 void update_pkts_bunch(uint64_t count) {
    +
    154 last_bunch = count;
    +
    155 packets += count;
    +
    156 }
    +
    157
    +
    165 void update_copy_stats(uint64_t nr_frags, uint64_t bytes) {
    +
    166 copy_frags += nr_frags;
    +
    167 copy_bytes += bytes;
    +
    168 }
    +
    169
    +
    176 void update_frags_stats(uint64_t nfrags, uint64_t nbytes) {
    +
    177 nr_frags += nfrags;
    +
    178 bytes += nbytes;
    +
    179 }
    +
    180
    +
    181 uint64_t bytes; // total number of bytes
    +
    182 uint64_t nr_frags; // total number of fragments
    +
    183 uint64_t copy_frags; // fragments that were copied on L2 level
    +
    184 uint64_t copy_bytes; // bytes that were copied on L2 level
    +
    185 uint64_t packets; // total number of packets
    +
    186 uint64_t last_bunch; // number of packets in the last sent/received bunch
    +
    187};
    +
    188
    +
    189struct qp_stats {
    +
    190 qp_stats() : rx{}, tx{} {}
    +
    191
    +
    192 struct {
    +
    193 struct qp_stats_good good;
    +
    194
    +
    195 struct {
    +
    196 void inc_csum_err() {
    +
    197 ++csum;
    +
    198 ++total;
    +
    199 }
    +
    200
    +
    201 void inc_no_mem() {
    +
    202 ++no_mem;
    +
    203 ++total;
    +
    204 }
    +
    205
    +
    206 uint64_t no_mem; // Packets dropped due to allocation failure
    +
    207 uint64_t total; // total number of erroneous packets
    +
    208 uint64_t csum; // packets with bad checksum
    +
    209 } bad;
    +
    210 } rx;
    +
    211
    +
    212 struct {
    +
    213 struct qp_stats_good good;
    +
    214 uint64_t linearized; // number of packets that were linearized
    +
    215 } tx;
    +
    216};
    +
    217
    +
    218class qp {
    +
    219 using packet_provider_type = std::function<std::optional<packet> ()>;
    +
    220 std::vector<packet_provider_type> _pkt_providers;
    +
    221 std::optional<std::array<uint8_t, 128>> _sw_reta;
    +
    222 circular_buffer<packet> _proxy_packetq;
    +
    223 stream<packet> _rx_stream;
    +
    224 std::unique_ptr<internal::poller> _tx_poller;
    +
    225 circular_buffer<packet> _tx_packetq;
    +
    226
    +
    227protected:
    +
    228 const std::string _stats_plugin_name;
    +
    229 const std::string _queue_name;
    +
    230 metrics::metric_groups _metrics;
    +
    231 qp_stats _stats;
    +
    232
    +
    233public:
    +
    234 qp(bool register_copy_stats = false,
    +
    235 const std::string stats_plugin_name = std::string("network"),
    +
    236 uint8_t qid = 0);
    +
    237 virtual ~qp();
    +
    238 virtual future<> send(packet p) = 0;
    +
    239 virtual uint32_t send(circular_buffer<packet>& p) {
    +
    240 uint32_t sent = 0;
    +
    241 while (!p.empty()) {
    +
    242 // FIXME: future is discarded
    +
    243 (void)send(std::move(p.front()));
    +
    244 p.pop_front();
    +
    245 sent++;
    +
    246 }
    +
    247 return sent;
    +
    248 }
    +
    249 virtual void rx_start() {};
    +
    250 void configure_proxies(const std::map<unsigned, float>& cpu_weights);
    +
    251 // build REdirection TAble for cpu_weights map: target cpu -> weight
    +
    252 void build_sw_reta(const std::map<unsigned, float>& cpu_weights);
    +
    253 void proxy_send(packet p) {
    +
    254 _proxy_packetq.push_back(std::move(p));
    +
    255 }
    +
    256 void register_packet_provider(packet_provider_type func) {
    +
    257 _pkt_providers.push_back(std::move(func));
    +
    258 }
    +
    259 bool poll_tx();
    +
    260 friend class device;
    +
    261};
    +
    262
    +
    263class device {
    +
    264protected:
    +
    265 std::unique_ptr<qp*[]> _queues;
    +
    266 size_t _rss_table_bits = 0;
    +
    267public:
    +
    268 device() {
    +
    269 _queues = std::make_unique<qp*[]>(smp::count);
    +
    270 }
    +
    271 virtual ~device() {};
    +
    272 qp& queue_for_cpu(unsigned cpu) { return *_queues[cpu]; }
    +
    273 qp& local_queue() { return queue_for_cpu(this_shard_id()); }
    +
    274 void l2receive(packet p) {
    +
    275 // FIXME: future is discarded
    +
    276 (void)_queues[this_shard_id()]->_rx_stream.produce(std::move(p));
    +
    277 }
    +
    278 future<> receive(std::function<future<> (packet)> next_packet);
    +
    279 virtual ethernet_address hw_address() = 0;
    +
    280 virtual net::hw_features hw_features() = 0;
    +
    281 virtual rss_key_type rss_key() const { return default_rsskey_40bytes; }
    +
    282 virtual uint16_t hw_queues_count() { return 1; }
    +
    283 virtual future<> link_ready() { return make_ready_future<>(); }
    +
    284 virtual std::unique_ptr<qp> init_local_queue(const program_options::option_group& opts, uint16_t qid) = 0;
    +
    285 virtual unsigned hash2qid(uint32_t hash) {
    +
    286 return hash % hw_queues_count();
    +
    287 }
    +
    288 void set_local_queue(std::unique_ptr<qp> dev);
    +
    289 template <typename Func>
    +
    290 unsigned forward_dst(unsigned src_cpuid, Func&& hashfn) {
    +
    291 auto& qp = queue_for_cpu(src_cpuid);
    +
    292 if (!qp._sw_reta) {
    +
    293 return src_cpuid;
    +
    294 }
    +
    295 auto hash = hashfn() >> _rss_table_bits;
    +
    296 auto& reta = *qp._sw_reta;
    +
    297 return reta[hash % reta.size()];
    +
    298 }
    +
    299 virtual unsigned hash2cpu(uint32_t hash) {
    +
    300 // there is an assumption here that qid == cpu_id which will
    +
    301 // not necessary be true in the future
    +
    302 return forward_dst(hash2qid(hash), [hash] { return hash; });
    +
    303 }
    +
    304};
    +
    305
    +
    306}
    +
    307
    +
    308}
    +
    Definition: circular_buffer.hh:63
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    holds the metric definition.
    Definition: metrics_registration.hh:94
    +
    Definition: net.hh:263
    +
    Definition: net.hh:51
    +
    Definition: net.hh:114
    +
    Definition: net.hh:94
    + +
    Definition: packet.hh:87
    +
    Definition: net.hh:218
    +
    Definition: program-options.hh:292
    +
    Definition: stream.hh:60
    +
    holds the metric_groups definition needed by class that reports metrics
    +
    Definition: net.hh:75
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    shard_id this_shard_id() noexcept
    Returns shard_id of the of the current shard.
    Definition: shard_id.hh:52
    + +
    Definition: ethernet.hh:37
    +
    Definition: net.hh:145
    +
    void update_frags_stats(uint64_t nfrags, uint64_t nbytes)
    Definition: net.hh:176
    +
    void update_copy_stats(uint64_t nr_frags, uint64_t bytes)
    Definition: net.hh:165
    +
    void update_pkts_bunch(uint64_t count)
    Definition: net.hh:153
    +
    Definition: net.hh:189
    +
    + + + + diff --git a/master/noncopyable__function_8hh_source.html b/master/noncopyable__function_8hh_source.html new file mode 100644 index 000000000..22afc1c52 --- /dev/null +++ b/master/noncopyable__function_8hh_source.html @@ -0,0 +1,315 @@ + + + + + + + +Seastar: seastar/util/noncopyable_function.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    noncopyable_function.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2017 ScyllaDB Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/util/modules.hh>
    +
    25#include <seastar/util/used_size.hh>
    +
    26
    +
    27#ifndef SEASTAR_MODULE
    +
    28#include <concepts>
    +
    29#include <utility>
    +
    30#include <type_traits>
    +
    31#include <functional>
    +
    32#endif
    +
    33
    +
    34namespace seastar {
    +
    35
    +
    36template <typename Signature>
    + +
    38
    +
    39namespace internal {
    +
    40
    +
    41class noncopyable_function_base {
    +
    42private:
    +
    43 noncopyable_function_base() = default;
    +
    44 static constexpr size_t nr_direct = 32;
    +
    45 union [[gnu::may_alias]] storage {
    +
    46 char direct[nr_direct];
    +
    47 void* indirect;
    +
    48 };
    +
    49 using move_type = void (*)(noncopyable_function_base* from, noncopyable_function_base* to);
    +
    50 using destroy_type = void (*)(noncopyable_function_base* func);
    +
    51
    +
    52 static void empty_move(noncopyable_function_base*, noncopyable_function_base*) {}
    +
    53 static void empty_destroy(noncopyable_function_base*) {}
    +
    54
    +
    55 static void indirect_move(noncopyable_function_base* from, noncopyable_function_base* to) {
    +
    56 using void_ptr = void*;
    +
    57 new (&to->_storage.indirect) void_ptr(from->_storage.indirect);
    +
    58 }
    +
    59
    +
    60 template <size_t N>
    +
    61 static void trivial_direct_move(noncopyable_function_base* from, noncopyable_function_base* to) {
    +
    62 // We use bytewise copy here since we lost the type. This means that
    +
    63 // we will copy any holes/padding not initialized by the move
    +
    64 // constructor in direct_vtable_for::initialize(). This is okay,
    +
    65 // since we won't use those holes/padding, but gcc doesn't know
    +
    66 // that, and complains. Silence it.
    +
    67#pragma GCC diagnostic push
    +
    68#pragma GCC diagnostic ignored "-Wuninitialized"
    +
    69 // Avoid including <algorithm> just for this
    +
    70 for (unsigned i = 0; i != N; ++i) {
    +
    71 to->_storage.direct[i] = from->_storage.direct[i];
    +
    72 }
    +
    73#pragma GCC diagnostic pop
    +
    74 }
    +
    75
    +
    76 static void trivial_direct_destroy(noncopyable_function_base*) {
    +
    77 }
    +
    78
    +
    79private:
    +
    80 storage _storage;
    +
    81
    +
    82 template <typename Signature>
    + +
    84};
    +
    85
    +
    86template<typename FirstArg = void, typename... RemainingArgs>
    +
    87struct is_nothrow_if_object {
    +
    88 static constexpr bool value = is_nothrow_if_object<FirstArg>::value && is_nothrow_if_object<RemainingArgs...>::value;
    +
    89};
    +
    90
    +
    91template<typename Arg>
    +
    92struct is_nothrow_if_object<Arg> {
    +
    93 static constexpr bool value = !std::is_object_v<Arg> || std::is_nothrow_move_constructible_v<Arg>;
    +
    94};
    +
    95
    +
    96template<>
    +
    97struct is_nothrow_if_object<> {
    +
    98 static constexpr bool value = true;
    +
    99};
    +
    100
    +
    101}
    +
    102
    +
    105SEASTAR_MODULE_EXPORT
    +
    106template <typename Ret, typename... Args, bool Noexcept>
    +
    107class noncopyable_function<Ret (Args...) noexcept(Noexcept)> : private internal::noncopyable_function_base {
    +
    108 using call_type = Ret (*)(const noncopyable_function* func, Args...);
    +
    109 struct vtable {
    +
    110 const call_type call;
    +
    111 const move_type move;
    +
    112 const destroy_type destroy;
    +
    113 };
    +
    114private:
    +
    115 const vtable* _vtable;
    +
    116private:
    +
    117 static Ret empty_call(const noncopyable_function*, [[maybe_unused]] Args... args) {
    +
    118 throw std::bad_function_call();
    +
    119 }
    +
    120
    +
    121 static constexpr vtable _s_empty_vtable = {empty_call, empty_move, empty_destroy};
    +
    122
    +
    123 template <typename Func>
    +
    124 struct direct_vtable_for {
    +
    125 static Func* access(noncopyable_function* func) { return reinterpret_cast<Func*>(func->_storage.direct); }
    +
    126 static const Func* access(const noncopyable_function* func) { return reinterpret_cast<const Func*>(func->_storage.direct); }
    +
    127 static Func* access(noncopyable_function_base* func) { return access(static_cast<noncopyable_function*>(func)); }
    +
    128 static Ret call(const noncopyable_function* func, Args... args) noexcept(Noexcept) {
    +
    129 return (*access(const_cast<noncopyable_function*>(func)))(std::forward<Args>(args)...);
    +
    130 }
    +
    131 static void move(noncopyable_function_base* from, noncopyable_function_base* to) {
    +
    132 new (access(to)) Func(std::move(*access(from)));
    +
    133 destroy(from);
    +
    134 }
    +
    135 static constexpr move_type select_move_thunk() {
    +
    136 bool can_trivially_move = std::is_trivially_move_constructible_v<Func>
    +
    137 && std::is_trivially_destructible_v<Func>;
    +
    138 return can_trivially_move ? trivial_direct_move<internal::used_size<Func>::value> : move;
    +
    139 }
    +
    140 static void destroy(noncopyable_function_base* func) {
    +
    141 access(func)->~Func();
    +
    142 }
    +
    143 static constexpr destroy_type select_destroy_thunk() {
    +
    144 return std::is_trivially_destructible_v<Func> ? trivial_direct_destroy : destroy;
    +
    145 }
    +
    146 static void initialize(Func&& from, noncopyable_function* to) {
    +
    147 new (access(to)) Func(std::move(from));
    +
    148 }
    +
    149 static constexpr vtable make_vtable() { return { call, select_move_thunk(), select_destroy_thunk() }; }
    +
    150 static const vtable s_vtable;
    +
    151 };
    +
    152 template <typename Func>
    +
    153 struct indirect_vtable_for {
    +
    154 static Func* access(noncopyable_function* func) { return reinterpret_cast<Func*>(func->_storage.indirect); }
    +
    155 static const Func* access(const noncopyable_function* func) { return reinterpret_cast<const Func*>(func->_storage.indirect); }
    +
    156 static Func* access(noncopyable_function_base* func) { return access(static_cast<noncopyable_function*>(func)); }
    +
    157 static Ret call(const noncopyable_function* func, Args... args) noexcept(Noexcept) {
    +
    158 return (*access(const_cast<noncopyable_function*>(func)))(std::forward<Args>(args)...);
    +
    159 }
    +
    160 static void destroy(noncopyable_function_base* func) {
    +
    161 delete access(func);
    +
    162 }
    +
    163 static void initialize(Func&& from, noncopyable_function* to) {
    +
    164 to->_storage.indirect = new Func(std::move(from));
    +
    165 }
    +
    166 static constexpr vtable make_vtable() { return { call, indirect_move, destroy }; }
    +
    167 static const vtable s_vtable;
    +
    168 };
    +
    169 template <typename Func, bool Direct = true>
    +
    170 struct select_vtable_for : direct_vtable_for<Func> {};
    +
    171 template <typename Func>
    +
    172 struct select_vtable_for<Func, false> : indirect_vtable_for<Func> {};
    +
    173 template <typename Func>
    +
    174 static constexpr bool is_direct() {
    +
    175 return sizeof(Func) <= nr_direct && alignof(Func) <= alignof(storage)
    +
    176 && std::is_nothrow_move_constructible_v<Func>;
    +
    177 }
    +
    178 template <typename Func>
    +
    179 struct vtable_for : select_vtable_for<Func, is_direct<Func>()> {};
    +
    180public:
    +
    181 noncopyable_function() noexcept : _vtable(&_s_empty_vtable) {}
    +
    182 template <typename Func>
    +
    183 requires std::is_invocable_r_v<Ret, Func, Args...>
    +
    184 noncopyable_function(Func func) {
    +
    185 static_assert(!Noexcept || noexcept(std::declval<Func>()(std::declval<Args>()...)));
    +
    186 vtable_for<Func>::initialize(std::move(func), this);
    +
    187 _vtable = &vtable_for<Func>::s_vtable;
    +
    188 }
    +
    189 template <typename Object, typename... AllButFirstArg>
    +
    190 noncopyable_function(Ret (Object::*member)(AllButFirstArg...) noexcept(Noexcept)) : noncopyable_function(std::mem_fn(member)) {}
    +
    191 template <typename Object, typename... AllButFirstArg>
    +
    192 noncopyable_function(Ret (Object::*member)(AllButFirstArg...) const noexcept(Noexcept)) : noncopyable_function(std::mem_fn(member)) {}
    +
    193
    + +
    195 _vtable->destroy(this);
    +
    196 }
    +
    197
    + +
    199 noncopyable_function& operator=(const noncopyable_function&) = delete;
    +
    200
    +
    201 noncopyable_function(noncopyable_function&& x) noexcept : _vtable(std::exchange(x._vtable, &_s_empty_vtable)) {
    +
    202 _vtable->move(&x, this);
    +
    203 }
    +
    204
    +
    205 noncopyable_function& operator=(noncopyable_function&& x) noexcept {
    +
    206 if (this != &x) {
    +
    207 this->~noncopyable_function();
    +
    208 new (this) noncopyable_function(std::move(x));
    +
    209 }
    +
    210 return *this;
    +
    211 }
    +
    212
    +
    213 Ret operator()(Args... args) const noexcept(Noexcept) {
    +
    214 static_assert(!Noexcept || internal::is_nothrow_if_object<Args...>::value);
    +
    215 return _vtable->call(this, std::forward<Args>(args)...);
    +
    216 }
    +
    217
    +
    218 explicit operator bool() const {
    +
    219 return _vtable != &_s_empty_vtable;
    +
    220 }
    +
    221};
    +
    222
    +
    223
    +
    224template <typename Ret, typename... Args, bool Noexcept>
    +
    225template <typename Func>
    +
    226const typename noncopyable_function<Ret (Args...) noexcept(Noexcept)>::vtable noncopyable_function<Ret (Args...) noexcept(Noexcept)>::direct_vtable_for<Func>::s_vtable
    +
    227 = noncopyable_function<Ret (Args...) noexcept(Noexcept)>::direct_vtable_for<Func>::make_vtable();
    +
    228
    +
    229
    +
    230template <typename Ret, typename... Args, bool Noexcept>
    +
    231template <typename Func>
    +
    232const typename noncopyable_function<Ret (Args...) noexcept(Noexcept)>::vtable noncopyable_function<Ret (Args...) noexcept(Noexcept)>::indirect_vtable_for<Func>::s_vtable
    +
    233 = noncopyable_function<Ret (Args...) noexcept(Noexcept)>::indirect_vtable_for<Func>::make_vtable();
    +
    234
    +
    235}
    +
    236
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: noncopyable_function.hh:37
    +
    + + + + diff --git a/master/open.png b/master/open.png new file mode 100644 index 0000000000000000000000000000000000000000..30f75c7efe2dd0c9e956e35b69777a02751f048b GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + +Seastar: seastar/util/optimized_optional.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    optimized_optional.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2017 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/util/modules.hh>
    +
    25#ifndef SEASTAR_MODULE
    +
    26#include <iostream>
    +
    27#include <optional>
    +
    28#include <type_traits>
    +
    29#include <fmt/core.h>
    +
    30#endif
    +
    31
    +
    32namespace seastar {
    +
    33
    +
    34template<typename T>
    +
    35concept OptimizableOptional =
    +
    36 std::is_default_constructible_v<T>
    +
    37 && std::is_nothrow_move_assignable_v<T>
    +
    38 && requires(const T& obj) {
    +
    39 { bool(obj) } noexcept;
    +
    40 };
    +
    41
    +
    46SEASTAR_MODULE_EXPORT
    +
    47template<typename T>
    + +
    49 T _object;
    +
    50public:
    +
    51 optimized_optional() = default;
    +
    52 optimized_optional(std::nullopt_t) noexcept { }
    +
    53 optimized_optional(const T& obj) : _object(obj) { }
    +
    54 optimized_optional(T&& obj) noexcept : _object(std::move(obj)) { }
    +
    55 optimized_optional(std::optional<T>&& obj) noexcept {
    +
    56 if (obj) {
    +
    57 _object = std::move(*obj);
    +
    58 }
    +
    59 }
    +
    60 optimized_optional(const optimized_optional&) = default;
    + +
    62
    +
    63 optimized_optional& operator=(std::nullopt_t) noexcept {
    +
    64 _object = T();
    +
    65 return *this;
    +
    66 }
    +
    67 template<typename U>
    +
    68 std::enable_if_t<std::is_same_v<std::decay_t<U>, T>, optimized_optional&>
    +
    69 operator=(U&& obj) noexcept {
    +
    70 _object = std::forward<U>(obj);
    +
    71 return *this;
    +
    72 }
    +
    73 optimized_optional& operator=(const optimized_optional&) = default;
    +
    74 optimized_optional& operator=(optimized_optional&&) = default;
    +
    75
    +
    76 explicit operator bool() const noexcept {
    +
    77 return bool(_object);
    +
    78 }
    +
    79
    +
    80 T* operator->() noexcept { return &_object; }
    +
    81 const T* operator->() const noexcept { return &_object; }
    +
    82
    +
    83 T& operator*() noexcept { return _object; }
    +
    84 const T& operator*() const noexcept { return _object; }
    +
    85
    +
    86 bool operator==(const optimized_optional& other) const {
    +
    87 return _object == other._object;
    +
    88 }
    +
    89 bool operator!=(const optimized_optional& other) const {
    +
    90 return _object != other._object;
    +
    91 }
    +
    92 friend std::ostream& operator<<(std::ostream& out, const optimized_optional& opt) {
    +
    93 if (!opt) {
    +
    94 return out << "null";
    +
    95 }
    +
    96 return out << *opt;
    +
    97 }
    +
    98};
    +
    99
    +
    100}
    +
    101
    +
    102template <typename T>
    +
    103struct fmt::formatter<seastar::optimized_optional<T>> : fmt::formatter<string_view> {
    +
    104 auto format(const seastar::optimized_optional<T>& opt, fmt::format_context& ctx) const {
    +
    105 if (opt) {
    +
    106 return fmt::format_to(ctx.out(), "{}", *opt);
    +
    107 }
    +
    108 return fmt::format_to(ctx.out(), "null");
    +
    109 }
    +
    110};
    +
    Definition: optimized_optional.hh:48
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/packet-data-source_8hh_source.html b/master/packet-data-source_8hh_source.html new file mode 100644 index 000000000..fefcf48bb --- /dev/null +++ b/master/packet-data-source_8hh_source.html @@ -0,0 +1,141 @@ + + + + + + + +Seastar: seastar/net/packet-data-source.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    packet-data-source.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18#pragma once
    +
    19
    +
    20#include <seastar/net/packet.hh>
    +
    21#include <seastar/core/iostream.hh>
    +
    22
    +
    23namespace seastar {
    +
    24
    +
    25namespace net {
    +
    26
    + +
    28 size_t _cur_frag = 0;
    +
    29 packet _p;
    +
    30public:
    + +
    32 : _p(std::move(p))
    +
    33 {}
    +
    34
    +
    35 virtual future<temporary_buffer<char>> get() override {
    +
    36 if (_cur_frag != _p.nr_frags()) {
    +
    37 auto& f = _p.fragments()[_cur_frag++];
    +
    38 return make_ready_future<temporary_buffer<char>>(
    +
    39 temporary_buffer<char>(f.base, f.size,
    +
    40 make_deleter(deleter(), [p = _p.share()] () mutable {})));
    +
    41 }
    +
    42 return make_ready_future<temporary_buffer<char>>(temporary_buffer<char>());
    +
    43 }
    +
    44};
    +
    45
    +
    46static inline
    +
    47input_stream<char> as_input_stream(packet&& p) {
    +
    48 return input_stream<char>(data_source(std::make_unique<packet_data_source>(std::move(p))));
    +
    49}
    +
    50
    +
    51}
    +
    52
    +
    53}
    +
    Definition: iostream.hh:60
    +
    Definition: iostream.hh:68
    +
    Definition: deleter.hh:52
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    + +
    Definition: packet-data-source.hh:27
    +
    Definition: packet.hh:87
    + +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/packet-util_8hh_source.html b/master/packet-util_8hh_source.html new file mode 100644 index 000000000..f6bb2664a --- /dev/null +++ b/master/packet-util_8hh_source.html @@ -0,0 +1,240 @@ + + + + + + + +Seastar: seastar/net/packet-util.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    packet-util.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/net/packet.hh>
    +
    25#include <map>
    +
    26#include <iostream>
    +
    27
    +
    28namespace seastar {
    +
    29
    +
    30namespace net {
    +
    31
    +
    32template <typename Offset, typename Tag>
    + +
    34private:
    +
    35 static uint64_t& linearizations_ref() {
    +
    36 static thread_local uint64_t linearization_count;
    +
    37 return linearization_count;
    +
    38 }
    +
    39public:
    +
    40 std::map<Offset, packet> map;
    +
    41
    +
    42 static uint64_t linearizations() {
    +
    43 return linearizations_ref();
    +
    44 }
    +
    45
    +
    46 void merge(Offset offset, packet p) {
    +
    47 bool insert = true;
    +
    48 auto beg = offset;
    +
    49 auto end = beg + p.len();
    +
    50 // Fisrt, try to merge the packet with existing segment
    +
    51 for (auto it = map.begin(); it != map.end();) {
    +
    52 auto& seg_pkt = it->second;
    +
    53 auto seg_beg = it->first;
    +
    54 auto seg_end = seg_beg + seg_pkt.len();
    +
    55 // There are 6 cases:
    +
    56 if (seg_beg <= beg && end <= seg_end) {
    +
    57 // 1) seg_beg beg end seg_end
    +
    58 // We already have data in this packet
    +
    59 return;
    +
    60 } else if (beg <= seg_beg && seg_end <= end) {
    +
    61 // 2) beg seg_beg seg_end end
    +
    62 // The new segment contains more data than this old segment
    +
    63 // Delete the old one, insert the new one
    +
    64 it = map.erase(it);
    +
    65 insert = true;
    +
    66 break;
    +
    67 } else if (beg < seg_beg && seg_beg <= end && end <= seg_end) {
    +
    68 // 3) beg seg_beg end seg_end
    +
    69 // Merge two segments, trim front of old segment
    +
    70 auto trim = end - seg_beg;
    +
    71 seg_pkt.trim_front(trim);
    +
    72 p.append(std::move(seg_pkt));
    +
    73 // Delete the old one, insert the new one
    +
    74 it = map.erase(it);
    +
    75 insert = true;
    +
    76 break;
    +
    77 } else if (seg_beg <= beg && beg <= seg_end && seg_end < end) {
    +
    78 // 4) seg_beg beg seg_end end
    +
    79 // Merge two segments, trim front of new segment
    +
    80 auto trim = seg_end - beg;
    +
    81 p.trim_front(trim);
    +
    82 // Append new data to the old segment, keep the old segment
    +
    83 seg_pkt.append(std::move(p));
    +
    84 seg_pkt.linearize();
    +
    85 ++linearizations_ref();
    +
    86 insert = false;
    +
    87 break;
    +
    88 } else {
    +
    89 // 5) beg end < seg_beg seg_end
    +
    90 // or
    +
    91 // 6) seg_beg seg_end < beg end
    +
    92 // Can not merge with this segment, keep looking
    +
    93 it++;
    +
    94 insert = true;
    +
    95 }
    +
    96 }
    +
    97
    +
    98 if (insert) {
    +
    99 p.linearize();
    +
    100 ++linearizations_ref();
    +
    101 map.emplace(beg, std::move(p));
    +
    102 }
    +
    103
    +
    104 // Second, merge adjacent segments after this packet has been merged,
    +
    105 // becasue this packet might fill a "whole" and make two adjacent
    +
    106 // segments mergable
    +
    107 for (auto it = map.begin(); it != map.end();) {
    +
    108 // The first segment
    +
    109 auto& seg_pkt = it->second;
    +
    110 auto seg_beg = it->first;
    +
    111 auto seg_end = seg_beg + seg_pkt.len();
    +
    112
    +
    113 // The second segment
    +
    114 auto it_next = it;
    +
    115 it_next++;
    +
    116 if (it_next == map.end()) {
    +
    117 break;
    +
    118 }
    +
    119 auto& p = it_next->second;
    +
    120 auto beg = it_next->first;
    +
    121 auto end = beg + p.len();
    +
    122
    +
    123 // Merge the the second segment into first segment if possible
    +
    124 if (seg_beg <= beg && beg <= seg_end && seg_end < end) {
    +
    125 // Merge two segments, trim front of second segment
    +
    126 auto trim = seg_end - beg;
    +
    127 p.trim_front(trim);
    +
    128 // Append new data to the first segment, keep the first segment
    +
    129 seg_pkt.append(std::move(p));
    +
    130
    +
    131 // Delete the second segment
    +
    132 map.erase(it_next);
    +
    133
    +
    134 // Keep merging this first segment with its new next packet
    +
    135 // So we do not update the iterator: it
    +
    136 continue;
    +
    137 } else if (end <= seg_end) {
    +
    138 // The first segment has all the data in the second segment
    +
    139 // Delete the second segment
    +
    140 map.erase(it_next);
    +
    141 continue;
    +
    142 } else if (seg_end < beg) {
    +
    143 // Can not merge first segment with second segment
    +
    144 it = it_next;
    +
    145 continue;
    +
    146 } else {
    +
    147 // If we reach here, we have a bug with merge.
    +
    148 std::cerr << "packet_merger: merge error\n";
    +
    149 abort();
    +
    150 break;
    +
    151 }
    +
    152 }
    +
    153 }
    +
    154};
    +
    155
    +
    156}
    +
    157
    +
    158}
    +
    Definition: packet-util.hh:33
    +
    Definition: packet.hh:87
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/packet_8hh_source.html b/master/packet_8hh_source.html new file mode 100644 index 000000000..3cef2798e --- /dev/null +++ b/master/packet_8hh_source.html @@ -0,0 +1,721 @@ + + + + + + + +Seastar: seastar/net/packet.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    packet.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/deleter.hh>
    +
    25#include <seastar/core/temporary_buffer.hh>
    +
    26#include <seastar/net/const.hh>
    +
    27#include <seastar/util/std-compat.hh>
    +
    28#include <seastar/util/modules.hh>
    +
    29#ifndef SEASTAR_MODULE
    +
    30#include <algorithm>
    +
    31#include <cassert>
    +
    32#include <cstdint>
    +
    33#include <functional>
    +
    34#include <iosfwd>
    +
    35#include <memory>
    +
    36#include <optional>
    +
    37#include <vector>
    +
    38#endif
    +
    39
    +
    40namespace seastar {
    +
    41
    +
    42namespace net {
    +
    43
    +
    44SEASTAR_MODULE_EXPORT_BEGIN
    +
    45
    +
    46struct fragment {
    +
    47 char* base;
    +
    48 size_t size;
    +
    49};
    +
    50
    + +
    52 ip_protocol_num protocol = ip_protocol_num::unused;
    +
    53 bool needs_csum = false;
    +
    54 uint8_t ip_hdr_len = 20;
    +
    55 uint8_t tcp_hdr_len = 20;
    +
    56 uint8_t udp_hdr_len = 8;
    +
    57 bool needs_ip_csum = false;
    +
    58 bool reassembled = false;
    +
    59 uint16_t tso_seg_size = 0;
    +
    60 // HW stripped VLAN header (CPU order)
    +
    61 std::optional<uint16_t> vlan_tci;
    +
    62};
    +
    63
    +
    64// Zero-copy friendly packet class
    +
    65//
    +
    66// For implementing zero-copy, we need a flexible destructor that can
    +
    67// destroy packet data in different ways: decrementing a reference count,
    +
    68// or calling a free()-like function.
    +
    69//
    +
    70// Moreover, we need different destructors for each set of fragments within
    +
    71// a single fragment. For example, a header and trailer might need delete[]
    +
    72// to be called, while the internal data needs a reference count to be
    +
    73// released. Matters are complicated in that fragments can be split
    +
    74// (due to virtual/physical translation).
    +
    75//
    +
    76// To implement this, we associate each packet with a single destructor,
    +
    77// but allow composing a packet from another packet plus a fragment to
    +
    78// be added, with its own destructor, causing the destructors to be chained.
    +
    79//
    +
    80// The downside is that the data needed for the destructor is duplicated,
    +
    81// if it is already available in the fragment itself.
    +
    82//
    +
    83// As an optimization, when we allocate small fragments, we allocate some
    +
    84// extra space, so prepending to the packet does not require extra
    +
    85// allocations. This is useful when adding headers.
    +
    86//
    +
    87class packet final {
    +
    88 // enough for lots of headers, not quite two cache lines:
    +
    89 static constexpr size_t internal_data_size = 128 - 16;
    +
    90 static constexpr size_t default_nr_frags = 4;
    +
    91
    +
    92 struct pseudo_vector {
    +
    93 fragment* _start;
    +
    94 fragment* _finish;
    +
    95 pseudo_vector(fragment* start, size_t nr) noexcept
    +
    96 : _start(start), _finish(_start + nr) {}
    +
    97 fragment* begin() noexcept { return _start; }
    +
    98 fragment* end() noexcept { return _finish; }
    +
    99 fragment& operator[](size_t idx) noexcept { return _start[idx]; }
    +
    100 };
    +
    101
    +
    102 struct impl {
    +
    103 // when destroyed, virtual destructor will reclaim resources
    +
    104 deleter _deleter;
    +
    105 unsigned _len = 0;
    +
    106 uint16_t _nr_frags = 0;
    +
    107 uint16_t _allocated_frags;
    +
    108 offload_info _offload_info;
    +
    109 std::optional<uint32_t> _rss_hash;
    +
    110 char _data[internal_data_size]; // only _frags[0] may use
    +
    111 unsigned _headroom = internal_data_size; // in _data
    +
    112 // FIXME: share _data/_frags space
    +
    113
    +
    114 fragment _frags[];
    +
    115
    +
    116 impl(size_t nr_frags = default_nr_frags) noexcept;
    +
    117 impl(const impl&) = delete;
    +
    118 impl(fragment frag, size_t nr_frags = default_nr_frags);
    +
    119
    +
    120 pseudo_vector fragments() noexcept { return { _frags, _nr_frags }; }
    +
    121
    +
    122 static std::unique_ptr<impl> allocate(size_t nr_frags) {
    +
    123 nr_frags = std::max(nr_frags, default_nr_frags);
    +
    124 return std::unique_ptr<impl>(new (nr_frags) impl(nr_frags));
    +
    125 }
    +
    126
    +
    127 static std::unique_ptr<impl> copy(impl* old, size_t nr) {
    +
    128 auto n = allocate(nr);
    +
    129 n->_deleter = std::move(old->_deleter);
    +
    130 n->_len = old->_len;
    +
    131 n->_nr_frags = old->_nr_frags;
    +
    132 n->_headroom = old->_headroom;
    +
    133 n->_offload_info = old->_offload_info;
    +
    134 n->_rss_hash = old->_rss_hash;
    +
    135 std::copy(old->_frags, old->_frags + old->_nr_frags, n->_frags);
    +
    136 old->copy_internal_fragment_to(n.get());
    +
    137 return n;
    +
    138 }
    +
    139
    +
    140 static std::unique_ptr<impl> copy(impl* old) {
    +
    141 return copy(old, old->_nr_frags);
    +
    142 }
    +
    143
    +
    144 static std::unique_ptr<impl> allocate_if_needed(std::unique_ptr<impl> old, size_t extra_frags) {
    +
    145 if (old->_allocated_frags >= old->_nr_frags + extra_frags) {
    +
    146 return old;
    +
    147 }
    +
    148 return copy(old.get(), std::max<size_t>(old->_nr_frags + extra_frags, 2 * old->_nr_frags));
    +
    149 }
    +
    150 void* operator new(size_t size, size_t nr_frags = default_nr_frags) {
    +
    151 assert(nr_frags == uint16_t(nr_frags));
    +
    152 return ::operator new(size + nr_frags * sizeof(fragment));
    +
    153 }
    +
    154 // Matching the operator new above
    +
    155 void operator delete(void* ptr, size_t) {
    +
    156 return ::operator delete(ptr);
    +
    157 }
    +
    158 // Since the above "placement delete" hides the global one, expose it
    +
    159 void operator delete(void* ptr) {
    +
    160 return ::operator delete(ptr);
    +
    161 }
    +
    162
    +
    163 bool using_internal_data() const noexcept {
    +
    164 return _nr_frags
    +
    165 && _frags[0].base >= _data
    +
    166 && _frags[0].base < _data + internal_data_size;
    +
    167 }
    +
    168
    +
    169 void unuse_internal_data() {
    +
    170 if (!using_internal_data()) {
    +
    171 return;
    +
    172 }
    +
    173 auto buf = static_cast<char*>(::malloc(_frags[0].size));
    +
    174 if (!buf) {
    +
    175 throw std::bad_alloc();
    +
    176 }
    +
    177 deleter d = make_free_deleter(buf);
    +
    178 std::copy(_frags[0].base, _frags[0].base + _frags[0].size, buf);
    +
    179 _frags[0].base = buf;
    +
    180 d.append(std::move(_deleter));
    +
    181 _deleter = std::move(d);
    +
    182 _headroom = internal_data_size;
    +
    183 }
    +
    184 void copy_internal_fragment_to(impl* to) noexcept {
    +
    185 if (!using_internal_data()) {
    +
    186 return;
    +
    187 }
    +
    188 to->_frags[0].base = to->_data + _headroom;
    +
    189 std::copy(_frags[0].base, _frags[0].base + _frags[0].size,
    +
    190 to->_frags[0].base);
    +
    191 }
    +
    192 };
    +
    193 packet(std::unique_ptr<impl>&& impl) noexcept : _impl(std::move(impl)) {}
    +
    194 std::unique_ptr<impl> _impl;
    +
    195public:
    +
    196 static packet from_static_data(const char* data, size_t len) noexcept {
    +
    197 return {fragment{const_cast<char*>(data), len}, deleter()};
    +
    198 }
    +
    199
    +
    200 // build empty packet
    +
    201 packet();
    +
    202 // build empty packet with nr_frags allocated
    +
    203 packet(size_t nr_frags);
    +
    204 // move existing packet
    +
    205 packet(packet&& x) noexcept;
    +
    206 // copy data into packet
    +
    207 packet(const char* data, size_t len);
    +
    208 // copy data into packet
    +
    209 packet(fragment frag);
    +
    210 // zero-copy single fragment
    +
    211 packet(fragment frag, deleter del);
    +
    212 // zero-copy multiple fragments
    +
    213 packet(std::vector<fragment> frag, deleter del);
    +
    214 // build packet with iterator
    +
    215 template <typename Iterator>
    +
    216 packet(Iterator begin, Iterator end, deleter del);
    +
    217 // append fragment (copying new fragment)
    +
    218 packet(packet&& x, fragment frag);
    +
    219 // prepend fragment (copying new fragment, with header optimization)
    +
    220 packet(fragment frag, packet&& x);
    +
    221 // prepend fragment (zero-copy)
    +
    222 packet(fragment frag, deleter del, packet&& x);
    +
    223 // append fragment (zero-copy)
    +
    224 packet(packet&& x, fragment frag, deleter d);
    +
    225 // append temporary_buffer (zero-copy)
    + +
    227 // create from temporary_buffer (zero-copy)
    + +
    229 // append deleter
    +
    230 packet(packet&& x, deleter d);
    +
    231
    +
    232 packet& operator=(packet&& x) noexcept {
    +
    233 if (this != &x) {
    +
    234 this->~packet();
    +
    235 new (this) packet(std::move(x));
    +
    236 }
    +
    237 return *this;
    +
    238 }
    +
    239
    +
    240 unsigned len() const noexcept { return _impl->_len; }
    +
    241 unsigned memory() const noexcept { return len() + sizeof(packet::impl); }
    +
    242
    +
    243 fragment frag(unsigned idx) const noexcept { return _impl->_frags[idx]; }
    +
    244 fragment& frag(unsigned idx) noexcept { return _impl->_frags[idx]; }
    +
    245
    +
    246 unsigned nr_frags() const noexcept { return _impl->_nr_frags; }
    +
    247 pseudo_vector fragments() const noexcept { return { _impl->_frags, _impl->_nr_frags }; }
    +
    248 fragment* fragment_array() const noexcept { return _impl->_frags; }
    +
    249
    +
    250 // share packet data (reference counted, non COW)
    +
    251 packet share();
    +
    252 packet share(size_t offset, size_t len);
    +
    253
    +
    254 void append(packet&& p);
    +
    255
    +
    256 void trim_front(size_t how_much) noexcept;
    +
    257 void trim_back(size_t how_much) noexcept;
    +
    258
    +
    259 // get a header pointer, linearizing if necessary
    +
    260 template <typename Header>
    +
    261 Header* get_header(size_t offset = 0);
    +
    262
    +
    263 // get a header pointer, linearizing if necessary
    +
    264 char* get_header(size_t offset, size_t size);
    +
    265
    +
    266 // prepend a header (default-initializing it)
    +
    267 template <typename Header>
    +
    268 Header* prepend_header(size_t extra_size = 0);
    +
    269
    +
    270 // prepend a header (uninitialized!)
    +
    271 char* prepend_uninitialized_header(size_t size);
    +
    272
    +
    273 packet free_on_cpu(unsigned cpu, std::function<void()> cb = []{});
    +
    274
    +
    275 void linearize() { return linearize(0, len()); }
    +
    276
    +
    277 void reset() noexcept { _impl.reset(); }
    +
    278
    +
    279 void reserve(int n_frags) {
    +
    280 if (n_frags > _impl->_nr_frags) {
    +
    281 auto extra = n_frags - _impl->_nr_frags;
    +
    282 _impl = impl::allocate_if_needed(std::move(_impl), extra);
    +
    283 }
    +
    284 }
    +
    285 std::optional<uint32_t> rss_hash() const noexcept {
    +
    286 return _impl->_rss_hash;
    +
    287 }
    +
    288 std::optional<uint32_t> set_rss_hash(uint32_t hash) noexcept {
    +
    289 return _impl->_rss_hash = hash;
    +
    290 }
    +
    291 // Call `func` for each fragment, avoiding data copies when possible
    +
    292 // `func` is called with a temporary_buffer<char> parameter
    +
    293 template <typename Func>
    +
    294 void release_into(Func&& func) {
    +
    295 unsigned idx = 0;
    +
    296 if (_impl->using_internal_data()) {
    +
    297 auto&& f = frag(idx++);
    +
    298 func(temporary_buffer<char>(f.base, f.size));
    +
    299 }
    +
    300 while (idx < nr_frags()) {
    +
    301 auto&& f = frag(idx++);
    +
    302 func(temporary_buffer<char>(f.base, f.size, _impl->_deleter.share()));
    +
    303 }
    +
    304 }
    +
    305 std::vector<temporary_buffer<char>> release() {
    +
    306 std::vector<temporary_buffer<char>> ret;
    +
    307 ret.reserve(_impl->_nr_frags);
    +
    308 release_into([&ret] (temporary_buffer<char>&& frag) {
    +
    309 ret.push_back(std::move(frag));
    +
    310 });
    +
    311 return ret;
    +
    312 }
    +
    313 explicit operator bool() noexcept {
    +
    314 return bool(_impl);
    +
    315 }
    +
    316 static packet make_null_packet() noexcept {
    +
    317 return net::packet(nullptr);
    +
    318 }
    +
    319private:
    +
    320 void linearize(size_t at_frag, size_t desired_size);
    +
    321 bool allocate_headroom(size_t size);
    +
    322public:
    +
    323 struct offload_info get_offload_info() const noexcept { return _impl->_offload_info; }
    +
    324 struct offload_info& offload_info_ref() noexcept { return _impl->_offload_info; }
    +
    325 void set_offload_info(struct offload_info oi) noexcept { _impl->_offload_info = oi; }
    +
    326};
    +
    327
    +
    328std::ostream& operator<<(std::ostream& os, const packet& p);
    +
    329
    +
    330SEASTAR_MODULE_EXPORT_END
    +
    331
    +
    332inline
    +
    333packet::packet(packet&& x) noexcept
    +
    334 : _impl(std::move(x._impl)) {
    +
    335}
    +
    336
    +
    337inline
    +
    338packet::impl::impl(size_t nr_frags) noexcept
    +
    339 : _len(0), _allocated_frags(nr_frags) {
    +
    340}
    +
    341
    +
    342inline
    +
    343packet::impl::impl(fragment frag, size_t nr_frags)
    +
    344 : _len(frag.size), _allocated_frags(nr_frags) {
    +
    345 assert(_allocated_frags > _nr_frags);
    +
    346 if (frag.size <= internal_data_size) {
    +
    347 _headroom -= frag.size;
    +
    348 _frags[0] = { _data + _headroom, frag.size };
    +
    349 } else {
    +
    350 auto buf = static_cast<char*>(::malloc(frag.size));
    +
    351 if (!buf) {
    +
    352 throw std::bad_alloc();
    +
    353 }
    +
    354 deleter d = make_free_deleter(buf);
    +
    355 _frags[0] = { buf, frag.size };
    +
    356 _deleter.append(std::move(d));
    +
    357 }
    +
    358 std::copy(frag.base, frag.base + frag.size, _frags[0].base);
    +
    359 ++_nr_frags;
    +
    360}
    +
    361
    +
    362inline
    +
    363packet::packet()
    +
    364 : _impl(impl::allocate(1)) {
    +
    365}
    +
    366
    +
    367inline
    +
    368packet::packet(size_t nr_frags)
    +
    369 : _impl(impl::allocate(nr_frags)) {
    +
    370}
    +
    371
    +
    372inline
    +
    373packet::packet(fragment frag) : _impl(new impl(frag)) {
    +
    374}
    +
    375
    +
    376inline
    +
    377packet::packet(const char* data, size_t size) : packet(fragment{const_cast<char*>(data), size}) {
    +
    378}
    +
    379
    +
    380inline
    +
    381packet::packet(fragment frag, deleter d)
    +
    382 : _impl(impl::allocate(1)) {
    +
    383 _impl->_deleter = std::move(d);
    +
    384 _impl->_frags[_impl->_nr_frags++] = frag;
    +
    385 _impl->_len = frag.size;
    +
    386}
    +
    387
    +
    388inline
    +
    389packet::packet(std::vector<fragment> frag, deleter d)
    +
    390 : _impl(impl::allocate(frag.size())) {
    +
    391 _impl->_deleter = std::move(d);
    +
    392 std::copy(frag.begin(), frag.end(), _impl->_frags);
    +
    393 _impl->_nr_frags = frag.size();
    +
    394 _impl->_len = 0;
    +
    395 for (auto&& f : _impl->fragments()) {
    +
    396 _impl->_len += f.size;
    +
    397 }
    +
    398}
    +
    399
    +
    400template <typename Iterator>
    +
    401inline
    +
    402packet::packet(Iterator begin, Iterator end, deleter del) {
    +
    403 unsigned nr_frags = 0, len = 0;
    +
    404 nr_frags = std::distance(begin, end);
    +
    405 std::for_each(begin, end, [&] (const fragment& frag) { len += frag.size; });
    +
    406 _impl = impl::allocate(nr_frags);
    +
    407 _impl->_deleter = std::move(del);
    +
    408 _impl->_len = len;
    +
    409 _impl->_nr_frags = nr_frags;
    +
    410 std::copy(begin, end, _impl->_frags);
    +
    411}
    +
    412
    +
    413inline
    +
    414packet::packet(packet&& x, fragment frag)
    +
    415 : _impl(impl::allocate_if_needed(std::move(x._impl), 1)) {
    +
    416 _impl->_len += frag.size;
    +
    417 std::unique_ptr<char[]> buf(new char[frag.size]);
    +
    418 std::copy(frag.base, frag.base + frag.size, buf.get());
    +
    419 _impl->_frags[_impl->_nr_frags++] = {buf.get(), frag.size};
    +
    420 _impl->_deleter = make_deleter(std::move(_impl->_deleter), [buf = buf.release()] {
    +
    421 delete[] buf;
    +
    422 });
    +
    423}
    +
    424
    +
    425inline
    +
    426bool
    +
    427packet::allocate_headroom(size_t size) {
    +
    428 if (_impl->_headroom >= size) {
    +
    429 _impl->_len += size;
    +
    430 if (!_impl->using_internal_data()) {
    +
    431 _impl = impl::allocate_if_needed(std::move(_impl), 1);
    +
    432 std::copy_backward(_impl->_frags, _impl->_frags + _impl->_nr_frags,
    +
    433 _impl->_frags + _impl->_nr_frags + 1);
    +
    434 _impl->_frags[0] = { _impl->_data + internal_data_size, 0 };
    +
    435 ++_impl->_nr_frags;
    +
    436 }
    +
    437 _impl->_headroom -= size;
    +
    438 _impl->_frags[0].base -= size;
    +
    439 _impl->_frags[0].size += size;
    +
    440 return true;
    +
    441 } else {
    +
    442 return false;
    +
    443 }
    +
    444}
    +
    445
    +
    446
    +
    447inline
    +
    448packet::packet(fragment frag, packet&& x)
    +
    449 : _impl(std::move(x._impl)) {
    +
    450 // try to prepend into existing internal fragment
    +
    451 if (allocate_headroom(frag.size)) {
    +
    452 std::copy(frag.base, frag.base + frag.size, _impl->_frags[0].base);
    +
    453 return;
    +
    454 } else {
    +
    455 // didn't work out, allocate and copy
    +
    456 _impl->unuse_internal_data();
    +
    457 _impl = impl::allocate_if_needed(std::move(_impl), 1);
    +
    458 _impl->_len += frag.size;
    +
    459 std::unique_ptr<char[]> buf(new char[frag.size]);
    +
    460 std::copy(frag.base, frag.base + frag.size, buf.get());
    +
    461 std::copy_backward(_impl->_frags, _impl->_frags + _impl->_nr_frags,
    +
    462 _impl->_frags + _impl->_nr_frags + 1);
    +
    463 ++_impl->_nr_frags;
    +
    464 _impl->_frags[0] = {buf.get(), frag.size};
    +
    465 _impl->_deleter = make_deleter(std::move(_impl->_deleter),
    +
    466 [buf = std::move(buf)] {});
    +
    467 }
    +
    468}
    +
    469
    +
    470inline
    +
    471packet::packet(packet&& x, fragment frag, deleter d)
    +
    472 : _impl(impl::allocate_if_needed(std::move(x._impl), 1)) {
    +
    473 _impl->_len += frag.size;
    +
    474 _impl->_frags[_impl->_nr_frags++] = frag;
    +
    475 d.append(std::move(_impl->_deleter));
    +
    476 _impl->_deleter = std::move(d);
    +
    477}
    +
    478
    +
    479inline
    +
    480packet::packet(packet&& x, deleter d)
    +
    481 : _impl(std::move(x._impl)) {
    +
    482 _impl->_deleter.append(std::move(d));
    +
    483}
    +
    484
    +
    485inline
    +
    486packet::packet(packet&& x, temporary_buffer<char> buf)
    +
    487 : packet(std::move(x), fragment{buf.get_write(), buf.size()}, buf.release()) {
    +
    488}
    +
    489
    +
    490inline
    +
    491packet::packet(temporary_buffer<char> buf)
    +
    492 : packet(fragment{buf.get_write(), buf.size()}, buf.release()) {}
    +
    493
    +
    494inline
    +
    495void packet::append(packet&& p) {
    +
    496 if (!_impl->_len) {
    +
    497 *this = std::move(p);
    +
    498 return;
    +
    499 }
    +
    500 _impl = impl::allocate_if_needed(std::move(_impl), p._impl->_nr_frags);
    +
    501 _impl->_len += p._impl->_len;
    +
    502 p._impl->unuse_internal_data();
    +
    503 std::copy(p._impl->_frags, p._impl->_frags + p._impl->_nr_frags,
    +
    504 _impl->_frags + _impl->_nr_frags);
    +
    505 _impl->_nr_frags += p._impl->_nr_frags;
    +
    506 p._impl->_deleter.append(std::move(_impl->_deleter));
    +
    507 _impl->_deleter = std::move(p._impl->_deleter);
    +
    508}
    +
    509
    +
    510inline
    +
    511char* packet::get_header(size_t offset, size_t size) {
    +
    512 if (offset + size > _impl->_len) {
    +
    513 return nullptr;
    +
    514 }
    +
    515 size_t i = 0;
    +
    516 while (i != _impl->_nr_frags && offset >= _impl->_frags[i].size) {
    +
    517 offset -= _impl->_frags[i++].size;
    +
    518 }
    +
    519 if (i == _impl->_nr_frags) {
    +
    520 return nullptr;
    +
    521 }
    +
    522 if (offset + size > _impl->_frags[i].size) {
    +
    523 linearize(i, offset + size);
    +
    524 }
    +
    525 return _impl->_frags[i].base + offset;
    +
    526}
    +
    527
    +
    528template <typename Header>
    +
    529inline
    +
    530Header* packet::get_header(size_t offset) {
    +
    531 return reinterpret_cast<Header*>(get_header(offset, sizeof(Header)));
    +
    532}
    +
    533
    +
    534inline
    +
    535void packet::trim_front(size_t how_much) noexcept {
    +
    536 assert(how_much <= _impl->_len);
    +
    537 _impl->_len -= how_much;
    +
    538 size_t i = 0;
    +
    539 while (how_much && how_much >= _impl->_frags[i].size) {
    +
    540 how_much -= _impl->_frags[i++].size;
    +
    541 }
    +
    542 std::copy(_impl->_frags + i, _impl->_frags + _impl->_nr_frags, _impl->_frags);
    +
    543 _impl->_nr_frags -= i;
    +
    544 if (!_impl->using_internal_data()) {
    +
    545 _impl->_headroom = internal_data_size;
    +
    546 }
    +
    547 if (how_much) {
    +
    548 if (_impl->using_internal_data()) {
    +
    549 _impl->_headroom += how_much;
    +
    550 }
    +
    551 _impl->_frags[0].base += how_much;
    +
    552 _impl->_frags[0].size -= how_much;
    +
    553 }
    +
    554}
    +
    555
    +
    556inline
    +
    557void packet::trim_back(size_t how_much) noexcept {
    +
    558 assert(how_much <= _impl->_len);
    +
    559 _impl->_len -= how_much;
    +
    560 size_t i = _impl->_nr_frags - 1;
    +
    561 while (how_much && how_much >= _impl->_frags[i].size) {
    +
    562 how_much -= _impl->_frags[i--].size;
    +
    563 }
    +
    564 _impl->_nr_frags = i + 1;
    +
    565 if (how_much) {
    +
    566 _impl->_frags[i].size -= how_much;
    +
    567 if (i == 0 && _impl->using_internal_data()) {
    +
    568 _impl->_headroom += how_much;
    +
    569 }
    +
    570 }
    +
    571}
    +
    572
    +
    573template <typename Header>
    +
    574Header*
    +
    575packet::prepend_header(size_t extra_size) {
    +
    576 auto h = prepend_uninitialized_header(sizeof(Header) + extra_size);
    +
    577 return new (h) Header{};
    +
    578}
    +
    579
    +
    580// prepend a header (uninitialized!)
    +
    581inline
    +
    582char* packet::prepend_uninitialized_header(size_t size) {
    +
    583 if (!allocate_headroom(size)) {
    +
    584 // didn't work out, allocate and copy
    +
    585 _impl->unuse_internal_data();
    +
    586 // try again, after unuse_internal_data we may have space after all
    +
    587 if (!allocate_headroom(size)) {
    +
    588 // failed
    +
    589 _impl->_len += size;
    +
    590 _impl = impl::allocate_if_needed(std::move(_impl), 1);
    +
    591 std::unique_ptr<char[]> buf(new char[size]);
    +
    592 std::copy_backward(_impl->_frags, _impl->_frags + _impl->_nr_frags,
    +
    593 _impl->_frags + _impl->_nr_frags + 1);
    +
    594 ++_impl->_nr_frags;
    +
    595 _impl->_frags[0] = {buf.get(), size};
    +
    596 _impl->_deleter = make_deleter(std::move(_impl->_deleter),
    +
    597 [buf = std::move(buf)] {});
    +
    598 }
    +
    599 }
    +
    600 return _impl->_frags[0].base;
    +
    601}
    +
    602
    +
    603inline
    +
    604packet packet::share() {
    +
    605 return share(0, _impl->_len);
    +
    606}
    +
    607
    +
    608inline
    +
    609packet packet::share(size_t offset, size_t len) {
    +
    610 _impl->unuse_internal_data(); // FIXME: eliminate?
    +
    611 packet n;
    +
    612 n._impl = impl::allocate_if_needed(std::move(n._impl), _impl->_nr_frags);
    +
    613 size_t idx = 0;
    +
    614 while (offset > 0 && offset >= _impl->_frags[idx].size) {
    +
    615 offset -= _impl->_frags[idx++].size;
    +
    616 }
    +
    617 while (n._impl->_len < len) {
    +
    618 auto& f = _impl->_frags[idx++];
    +
    619 auto fsize = std::min(len - n._impl->_len, f.size - offset);
    +
    620 n._impl->_frags[n._impl->_nr_frags++] = { f.base + offset, fsize };
    +
    621 n._impl->_len += fsize;
    +
    622 offset = 0;
    +
    623 }
    +
    624 n._impl->_offload_info = _impl->_offload_info;
    +
    625 assert(!n._impl->_deleter);
    +
    626 n._impl->_deleter = _impl->_deleter.share();
    +
    627 return n;
    +
    628}
    +
    629
    +
    630}
    +
    631
    +
    632}
    +
    Definition: deleter.hh:52
    +
    Definition: packet.hh:87
    + +
    void append(deleter d)
    Definition: deleter.hh:220
    +
    holds the implementation parts of the metrics layer, do not use directly.
    +
    Definition: packet.hh:46
    +
    Definition: packet.hh:51
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    future copy(input_stream< CharType > &in, output_stream< CharType > &out)
    copy all the content from the input stream to the output stream
    Definition: iostream-impl.hh:550
    +
    STL namespace.
    +
    + + + + diff --git a/master/pages.html b/master/pages.html new file mode 100644 index 000000000..f8adcfe09 --- /dev/null +++ b/master/pages.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Related Pages + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    +
    + + + + diff --git a/master/parallel__for__each_8hh_source.html b/master/parallel__for__each_8hh_source.html new file mode 100644 index 000000000..c2ebb84f7 --- /dev/null +++ b/master/parallel__for__each_8hh_source.html @@ -0,0 +1,248 @@ + + + + + + + +Seastar: seastar/coroutine/parallel_for_each.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    parallel_for_each.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2022-present ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <ranges>
    +
    25
    +
    26#include <boost/container/small_vector.hpp>
    +
    27
    +
    28#include <seastar/core/loop.hh>
    +
    29#include <seastar/core/coroutine.hh>
    +
    30#include <seastar/core/reactor.hh>
    +
    31
    +
    32namespace seastar::coroutine {
    +
    33
    +
    61template <typename Func>
    +
    62// constaints for Func are defined at the parallel_for_each constructor
    +
    63class [[nodiscard("must co_await an parallel_for_each() object")]] parallel_for_each final : continuation_base<> {
    +
    64 using coroutine_handle_t = std::coroutine_handle<void>;
    +
    65
    +
    66 Func _func;
    +
    67 boost::container::small_vector<future<>, 5> _futures;
    +
    68 std::exception_ptr _ex;
    +
    69 coroutine_handle_t _when_ready;
    +
    70 task* _waiting_task = nullptr;
    +
    71
    +
    72 // Consume futures in reverse order.
    +
    73 // Since futures at the front are expected
    +
    74 // to become ready before futures at the back,
    +
    75 // therefore it is less likely we will have
    +
    76 // to wait on them, after the back futures
    +
    77 // become available.
    +
    78 //
    +
    79 // Return true iff all futures were consumed.
    +
    80 bool consume_next() noexcept {
    +
    81 while (!_futures.empty()) {
    +
    82 auto& fut = _futures.back();
    +
    83 if (!fut.available()) {
    +
    84 return false;
    +
    85 }
    +
    86 if (fut.failed()) {
    +
    87 _ex = fut.get_exception();
    +
    88 }
    +
    89 _futures.pop_back();
    +
    90 }
    +
    91 return true;
    +
    92 }
    +
    93
    +
    94 void set_callback() noexcept {
    +
    95 // To reuse `this` as continuation_base<>
    +
    96 // we must reset _state, to allow setting
    +
    97 // it again.
    +
    98 this->_state = {};
    +
    99 seastar::internal::set_callback(std::move(_futures.back()), reinterpret_cast<continuation_base<>*>(this));
    +
    100 _futures.pop_back();
    +
    101 }
    +
    102
    +
    103 void resume_or_set_callback() noexcept {
    +
    104 if (consume_next()) {
    +
    105 local_engine->set_current_task(_waiting_task);
    +
    106 _when_ready.resume();
    +
    107 } else {
    +
    108 set_callback();
    +
    109 }
    +
    110 }
    +
    111
    +
    112public:
    +
    113 // clang 13.0.1 doesn't support subrange
    +
    114 // so provide also a Iterator/Sentinel based constructor.
    +
    115 // See https://github.com/llvm/llvm-project/issues/46091
    +
    116 template <typename Iterator, typename Sentinel, typename Func1>
    +
    117 requires (std::same_as<Sentinel, Iterator> || std::sentinel_for<Sentinel, Iterator>)
    +
    118 && std::same_as<future<>, futurize_t<std::invoke_result_t<Func, typename std::iterator_traits<Iterator>::reference>>>
    +
    119 explicit parallel_for_each(Iterator begin, Sentinel end, Func1&& func) noexcept
    +
    120 : _func(std::forward<Func1>(func))
    +
    121 {
    +
    122 for (auto it = begin; it != end; ++it) {
    +
    123 auto fut = futurize_invoke(_func, *it);
    +
    124 if (fut.available()) {
    +
    125 if (fut.failed()) {
    +
    126 _ex = fut.get_exception();
    +
    127 }
    +
    128 } else {
    + +
    130 if (_futures.empty()) {
    +
    131 using itraits = std::iterator_traits<Iterator>;
    +
    132 if constexpr (seastar::internal::has_iterator_category<Iterator>::value) {
    +
    133 auto n = seastar::internal::iterator_range_estimate_vector_capacity(it, end, typename itraits::iterator_category{});
    +
    134 _futures.reserve(n);
    +
    135 }
    +
    136 }
    +
    137 _futures.push_back(std::move(fut));
    +
    138 }
    +
    139 }
    +
    140 }
    +
    141
    +
    142 template <std::ranges::range Range, typename Func1>
    +
    143 requires std::invocable<Func, std::ranges::range_reference_t<Range>>
    +
    144 explicit parallel_for_each(Range&& range, Func1&& func) noexcept
    +
    145 : parallel_for_each(std::ranges::begin(range), std::ranges::end(range), std::forward<Func1>(func))
    +
    146 { }
    +
    147
    +
    148 bool await_ready() const noexcept {
    +
    149 if (_futures.empty()) {
    +
    150 return !_ex;
    +
    151 }
    +
    152 return false;
    +
    153 }
    +
    154
    +
    155 template<typename T>
    +
    156 void await_suspend(std::coroutine_handle<T> h) {
    +
    157 _when_ready = h;
    +
    158 _waiting_task = &h.promise();
    +
    159 resume_or_set_callback();
    +
    160 }
    +
    161
    +
    162 void await_resume() const {
    +
    163 if (_ex) [[unlikely]] {
    +
    164 std::rethrow_exception(std::move(_ex));
    +
    165 }
    +
    166 }
    +
    167
    +
    168 virtual void run_and_dispose() noexcept override {
    +
    169 if (this->_state.failed()) {
    +
    170 _ex = std::move(this->_state).get_exception();
    +
    171 }
    +
    172 resume_or_set_callback();
    +
    173 }
    +
    174
    +
    175 virtual task* waiting_task() noexcept override {
    +
    176 return _waiting_task;
    +
    177 }
    +
    178};
    +
    179
    +
    180template <typename Iterator, typename Sentinel, typename Func>
    +
    181requires (std::same_as<Sentinel, Iterator> || std::sentinel_for<Sentinel, Iterator>)
    +
    182 && std::same_as<future<>, futurize_t<std::invoke_result_t<Func, typename std::iterator_traits<Iterator>::reference>>>
    +
    183parallel_for_each(Iterator begin, Sentinel end, Func&& func) -> parallel_for_each<Func>;
    +
    184
    +
    185template <std::ranges::range Range,
    +
    186 std::invocable<std::ranges::range_reference_t<Range>> Func>
    +
    187parallel_for_each(Range&& range, Func&& func) -> parallel_for_each<Func>;
    +
    188
    +
    189
    +
    190
    +
    191}
    +
    Definition: parallel_for_each.hh:63
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: task.hh:34
    +
    future parallel_for_each(Iterator begin, Sentinel end, Func &&func) noexcept
    Run tasks in parallel (iterator version).
    Definition: loop.hh:565
    +
    Definition: critical_alloc_section.hh:80
    +
    + + + + diff --git a/master/perf__tests_8hh_source.html b/master/perf__tests_8hh_source.html new file mode 100644 index 000000000..5da204d0e --- /dev/null +++ b/master/perf__tests_8hh_source.html @@ -0,0 +1,484 @@ + + + + + + + +Seastar: seastar/testing/perf_tests.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    perf_tests.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2018 ScyllaDB Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <atomic>
    +
    25#include <memory>
    +
    26
    +
    27#include <fmt/format.h>
    +
    28
    +
    29#include <seastar/core/coroutine.hh>
    +
    30#include <seastar/core/future.hh>
    +
    31#include <seastar/core/loop.hh>
    +
    32#include <seastar/testing/linux_perf_event.hh>
    +
    33
    +
    34using namespace seastar;
    +
    35
    +
    36namespace perf_tests {
    +
    37namespace internal {
    +
    38
    +
    39struct config;
    +
    40
    +
    41using clock_type = std::chrono::steady_clock;
    +
    42
    + +
    44public:
    +
    45 uint64_t allocations = 0;
    +
    46 uint64_t tasks_executed = 0;
    +
    47 uint64_t instructions_retired = 0;
    +
    48 uint64_t cpu_cycles_retired = 0;
    +
    49
    +
    50private:
    +
    51 static uint64_t perf_mallocs();
    +
    52 static uint64_t perf_tasks_processed();
    +
    53
    +
    54public:
    +
    55 perf_stats() = default;
    +
    56 perf_stats(uint64_t allocations_, uint64_t tasks_executed_, uint64_t instructions_retired_ = 0, uint64_t cpu_cycles_retired_ = 0)
    +
    57 : allocations(allocations_)
    +
    58 , tasks_executed(tasks_executed_)
    +
    59 , instructions_retired(instructions_retired_)
    +
    60 , cpu_cycles_retired(cpu_cycles_retired_)
    +
    61 {}
    +
    62 perf_stats(perf_stats&& o) noexcept
    +
    63 : allocations(std::exchange(o.allocations, 0))
    +
    64 , tasks_executed(std::exchange(o.tasks_executed, 0))
    +
    65 , instructions_retired(std::exchange(o.instructions_retired, 0))
    +
    66 , cpu_cycles_retired(std::exchange(o.cpu_cycles_retired, 0))
    +
    67 {}
    +
    68 perf_stats(const perf_stats& o) = default;
    +
    69
    +
    70 perf_stats& operator=(perf_stats&& o) = default;
    +
    71 perf_stats& operator=(const perf_stats& o) = default;
    +
    72
    +
    73 perf_stats& operator+=(perf_stats b);
    +
    74 perf_stats& operator-=(perf_stats b);
    +
    75
    +
    76 static perf_stats snapshot(linux_perf_event* instructions_retired_counter = nullptr, linux_perf_event* cpu_cycles_retired_counter = nullptr);
    +
    77};
    +
    78
    +
    79inline
    + +
    81operator+(perf_stats a, perf_stats b) {
    +
    82 a.allocations += b.allocations;
    +
    83 a.tasks_executed += b.tasks_executed;
    +
    84 a.instructions_retired += b.instructions_retired;
    +
    85 a.cpu_cycles_retired += b.cpu_cycles_retired;
    +
    86 return a;
    +
    87}
    +
    88
    +
    89inline
    +
    90perf_stats
    +
    91operator-(perf_stats a, perf_stats b) {
    +
    92 a.allocations -= b.allocations;
    +
    93 a.tasks_executed -= b.tasks_executed;
    +
    94 a.instructions_retired -= b.instructions_retired;
    +
    95 a.cpu_cycles_retired -= b.cpu_cycles_retired;
    +
    96 return a;
    +
    97}
    +
    98
    +
    99inline perf_stats& perf_stats::operator+=(perf_stats b) {
    +
    100 allocations += b.allocations;
    +
    101 tasks_executed += b.tasks_executed;
    +
    102 instructions_retired += b.instructions_retired;
    +
    103 cpu_cycles_retired += b.cpu_cycles_retired;
    +
    104 return *this;
    +
    105}
    +
    106
    +
    107inline perf_stats& perf_stats::operator-=(perf_stats b) {
    +
    108 allocations -= b.allocations;
    +
    109 tasks_executed -= b.tasks_executed;
    +
    110 instructions_retired -= b.instructions_retired;
    +
    111 cpu_cycles_retired -= b.cpu_cycles_retired;
    +
    112 return *this;
    +
    113}
    +
    114
    + +
    116 std::string _test_case;
    +
    117 std::string _test_group;
    +
    118
    +
    119 uint64_t _single_run_iterations = 0;
    +
    120 std::atomic<uint64_t> _max_single_run_iterations;
    +
    121protected:
    +
    122 linux_perf_event _instructions_retired_counter = linux_perf_event::user_instructions_retired();
    +
    123 linux_perf_event _cpu_cycles_retired_counter = linux_perf_event::user_cpu_cycles_retired();
    +
    124private:
    +
    125 void do_run(const config&);
    +
    126public:
    +
    127 struct run_result {
    +
    128 clock_type::duration duration;
    +
    129 perf_stats stats;
    +
    130 };
    +
    131protected:
    +
    132 [[gnu::always_inline]] [[gnu::hot]]
    +
    133 bool stop_iteration() const {
    +
    134 return _single_run_iterations >= _max_single_run_iterations.load(std::memory_order_relaxed);
    +
    135 }
    +
    136
    +
    137 [[gnu::always_inline]] [[gnu::hot]]
    +
    138 void next_iteration(size_t n) {
    +
    139 _single_run_iterations += n;
    +
    140 }
    +
    141
    +
    142 virtual void set_up() = 0;
    +
    143 virtual void tear_down() noexcept = 0;
    +
    144 virtual future<run_result> do_single_run() = 0;
    +
    145public:
    +
    146 performance_test(const std::string& test_case, const std::string& test_group)
    +
    147 : _test_case(test_case)
    +
    148 , _test_group(test_group)
    +
    149 { }
    +
    150
    +
    151 virtual ~performance_test() = default;
    +
    152
    +
    153 const std::string& test_case() const { return _test_case; }
    +
    154 const std::string& test_group() const { return _test_group; }
    +
    155 std::string name() const { return fmt::format("{}.{}", test_group(), test_case()); }
    +
    156
    +
    157 void run(const config&);
    +
    158public:
    +
    159 static void register_test(std::unique_ptr<performance_test>);
    +
    160};
    +
    161
    +
    162// Helper for measuring time.
    +
    163// Each microbenchmark can either use the default behaviour which measures
    +
    164// only the start and stop time of the whole run or manually invoke
    +
    165// start_measuring_time() and stop_measuring_time() in order to measure
    +
    166// only parts of each iteration.
    + +
    168 clock_type::time_point _run_start_time;
    +
    169 clock_type::time_point _start_time;
    +
    170 clock_type::duration _total_time;
    +
    171
    +
    172 perf_stats _start_stats;
    +
    173 perf_stats _total_stats;
    +
    174
    +
    175 linux_perf_event* _instructions_retired_counter = nullptr;
    +
    176 linux_perf_event* _cpu_cycles_retired_counter = nullptr;
    +
    177
    +
    178public:
    +
    179 [[gnu::always_inline]] [[gnu::hot]]
    +
    180 void start_run(linux_perf_event* instructions_retired_counter = nullptr, linux_perf_event* cpu_cycles_retired_counter = nullptr) {
    +
    181 _instructions_retired_counter = instructions_retired_counter;
    +
    182 _cpu_cycles_retired_counter = cpu_cycles_retired_counter;
    +
    183 _total_time = { };
    +
    184 _total_stats = {};
    +
    185 auto t = clock_type::now();
    +
    186 _run_start_time = t;
    +
    187 _start_time = t;
    +
    188 _start_stats = perf_stats::snapshot(_instructions_retired_counter, _cpu_cycles_retired_counter);
    +
    189 }
    +
    190
    +
    191 [[gnu::always_inline]] [[gnu::hot]]
    + +
    193 auto t = clock_type::now();
    + +
    195 if (_start_time == _run_start_time) {
    +
    196 ret.duration = t - _start_time;
    +
    197 auto stats = perf_stats::snapshot(_instructions_retired_counter, _cpu_cycles_retired_counter);
    +
    198 ret.stats = stats - _start_stats;
    +
    199 } else {
    +
    200 ret.duration = _total_time;
    +
    201 ret.stats = _total_stats;
    +
    202 }
    +
    203 _instructions_retired_counter = nullptr;
    +
    204 _cpu_cycles_retired_counter = nullptr;
    +
    205 return ret;
    +
    206 }
    +
    207
    +
    208 [[gnu::always_inline]] [[gnu::hot]]
    +
    209 void start_iteration() {
    +
    210 _start_time = clock_type::now();
    +
    211 _start_stats = perf_stats::snapshot(_instructions_retired_counter, _cpu_cycles_retired_counter);
    +
    212 }
    +
    213
    +
    214 [[gnu::always_inline]] [[gnu::hot]]
    +
    215 void stop_iteration() {
    +
    216 auto t = clock_type::now();
    +
    217 _total_time += t - _start_time;
    +
    218 perf_stats stats;
    +
    219 stats = perf_stats::snapshot(_instructions_retired_counter, _cpu_cycles_retired_counter);
    +
    220 _total_stats += stats - _start_stats;
    +
    221 }
    +
    222};
    +
    223
    +
    224extern time_measurement measure_time;
    +
    225
    +
    226namespace {
    +
    227
    +
    228template<bool Condition, typename TrueFn, typename FalseFn>
    +
    229struct do_if_constexpr_ : FalseFn {
    +
    230 do_if_constexpr_(TrueFn, FalseFn false_fn) : FalseFn(std::move(false_fn)) { }
    +
    231 decltype(auto) operator()() const {
    +
    232 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64095
    +
    233 return FalseFn::operator()(0);
    +
    234 }
    +
    235};
    +
    236template<typename TrueFn, typename FalseFn>
    +
    237struct do_if_constexpr_<true, TrueFn, FalseFn> : TrueFn {
    +
    238 do_if_constexpr_(TrueFn true_fn, FalseFn) : TrueFn(std::move(true_fn)) { }
    +
    239 decltype(auto) operator()() const { return TrueFn::operator()(0); }
    +
    240};
    +
    241
    +
    242template<bool Condition, typename TrueFn, typename FalseFn>
    +
    243do_if_constexpr_<Condition, TrueFn, FalseFn> if_constexpr_(TrueFn&& true_fn, FalseFn&& false_fn)
    +
    244{
    +
    245 return do_if_constexpr_<Condition, TrueFn, FalseFn>(std::forward<TrueFn>(true_fn),
    +
    246 std::forward<FalseFn>(false_fn));
    +
    247}
    +
    248
    +
    249}
    +
    250
    +
    251template<typename Test>
    + +
    253 std::optional<Test> _test;
    +
    254private:
    +
    255 template<typename... Args>
    +
    256 auto run_test(Args&&...) {
    +
    257 return _test->run();
    +
    258 }
    +
    259
    +
    260protected:
    +
    261 virtual void set_up() override {
    +
    262 _test.emplace();
    +
    263 }
    +
    264
    +
    265 virtual void tear_down() noexcept override {
    +
    266 _test = std::nullopt;
    +
    267 }
    +
    268
    +
    269 [[gnu::hot]]
    +
    270 virtual future<run_result> do_single_run() override {
    +
    271 // Redundant 'this->'s courtesy of https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61636
    +
    272 _instructions_retired_counter.enable();
    +
    273 _cpu_cycles_retired_counter.enable();
    +
    274 return if_constexpr_<is_future<decltype(_test->run())>::value>([&] (auto&&...) {
    +
    275 measure_time.start_run(&_instructions_retired_counter);
    +
    276 return do_until([this] { return this->stop_iteration(); }, [this] {
    +
    277 return if_constexpr_<std::is_same_v<decltype(_test->run()), future<>>>([&] (auto&&...) {
    +
    278 this->next_iteration(1);
    +
    279 return _test->run();
    +
    280 }, [&] (auto&&... dependency) {
    +
    281 // We need `dependency` to make sure the compiler won't be able to instantiate anything
    +
    282 // (and notice that the code does not compile) if this part of if_constexpr_ is not active.
    +
    283 return run_test(dependency...).then([&] (size_t n) {
    +
    284 this->next_iteration(n);
    +
    285 });
    +
    286 })();
    +
    287 }).then([] {
    +
    288 return measure_time.stop_run();
    +
    289 }).finally([this] {
    +
    290 _instructions_retired_counter.disable();
    +
    291 _cpu_cycles_retired_counter.disable();
    +
    292 });
    +
    293 }, [&] (auto&&...) {
    +
    294 measure_time.start_run(&_instructions_retired_counter, &_cpu_cycles_retired_counter);
    +
    295 while (!stop_iteration()) {
    +
    296 if_constexpr_<std::is_void_v<decltype(_test->run())>>([&] (auto&&...) {
    +
    297 (void)_test->run();
    +
    298 this->next_iteration(1);
    +
    299 }, [&] (auto&&... dependency) {
    +
    300 // We need `dependency` to make sure the compiler won't be able to instantiate anything
    +
    301 // (and notice that the code does not compile) if this part of if_constexpr_ is not active.
    +
    302 this->next_iteration(run_test(dependency...));
    +
    303 })();
    +
    304 }
    +
    305 auto ret = measure_time.stop_run();
    +
    306 _instructions_retired_counter.disable();
    +
    307 _cpu_cycles_retired_counter.disable();
    +
    308 return make_ready_future<run_result>(std::move(ret));
    +
    309 })();
    +
    310 }
    +
    311public:
    +
    312 using performance_test::performance_test;
    +
    313};
    +
    314
    +
    315void register_test(std::unique_ptr<performance_test>);
    +
    316
    +
    317template<typename Test>
    + +
    319 test_registrar(const std::string& test_group, const std::string& test_case) {
    +
    320 auto test = std::make_unique<concrete_performance_test<Test>>(test_case, test_group);
    +
    321 performance_test::register_test(std::move(test));
    +
    322 }
    +
    323};
    +
    324
    +
    325}
    +
    326
    +
    327[[gnu::always_inline]]
    +
    328inline void start_measuring_time()
    +
    329{
    +
    330 internal::measure_time.start_iteration();
    +
    331}
    +
    332
    +
    333[[gnu::always_inline]]
    +
    334inline void stop_measuring_time()
    +
    335{
    +
    336 internal::measure_time.stop_iteration();
    +
    337}
    +
    338
    +
    339
    +
    340template<typename T>
    +
    341void do_not_optimize(const T& v)
    +
    342{
    +
    343 asm volatile("" : : "r,m" (v));
    +
    344}
    +
    345
    +
    346}
    +
    347
    +
    348// PERF_TEST and PERF_TEST_F support both synchronous and asynchronous functions.
    +
    349// The former should return `void`, the latter `future<>`.
    +
    350// PERF_TEST_C executes a coroutine function, if enabled.
    +
    351// PERF_TEST_CN executes a coroutine function, if enabled, returning the number of inner-loops.
    +
    352//
    +
    353// Test cases may perform multiple operations in a single run, this may be desirable
    +
    354// if the cost of an individual operation is very small. This allows measuring either
    +
    355// the latency of throughput depending on how the test in written. In such cases,
    +
    356// the test function shall return either size_t or future<size_t> for synchronous and
    +
    357// asynchronous cases respectively. The returned value shall be the number of iterations
    +
    358// done in a single test run.
    +
    359
    +
    360#define PERF_TEST_F(test_group, test_case) \
    +
    361 struct test_##test_group##_##test_case : test_group { \
    +
    362 [[gnu::always_inline]] inline auto run(); \
    +
    363 }; \
    +
    364 static ::perf_tests::internal::test_registrar<test_##test_group##_##test_case> \
    +
    365 test_##test_group##_##test_case##_registrar(#test_group, #test_case); \
    +
    366 [[gnu::always_inline]] auto test_##test_group##_##test_case::run()
    +
    367
    +
    368#define PERF_TEST(test_group, test_case) \
    +
    369 struct test_##test_group##_##test_case { \
    +
    370 [[gnu::always_inline]] inline auto run(); \
    +
    371 }; \
    +
    372 static ::perf_tests::internal::test_registrar<test_##test_group##_##test_case> \
    +
    373 test_##test_group##_##test_case##_registrar(#test_group, #test_case); \
    +
    374 [[gnu::always_inline]] auto test_##test_group##_##test_case::run()
    +
    375
    +
    376
    +
    377#define PERF_TEST_C(test_group, test_case) \
    +
    378 struct test_##test_group##_##test_case : test_group { \
    +
    379 inline future<> run(); \
    +
    380 }; \
    +
    381 static ::perf_tests::internal::test_registrar<test_##test_group##_##test_case> \
    +
    382 test_##test_group##_##test_case##_registrar(#test_group, #test_case); \
    +
    383 future<> test_##test_group##_##test_case::run()
    +
    384
    +
    385#define PERF_TEST_CN(test_group, test_case) \
    +
    386 struct test_##test_group##_##test_case : test_group { \
    +
    387 inline future<size_t> run(); \
    +
    388 }; \
    +
    389 static ::perf_tests::internal::test_registrar<test_##test_group##_##test_case> \
    +
    390 test_##test_group##_##test_case##_registrar(#test_group, #test_case); \
    +
    391 future<size_t> test_##test_group##_##test_case::run()
    +
    Definition: linux_perf_event.hh:36
    + +
    Definition: perf_tests.hh:43
    +
    Definition: perf_tests.hh:115
    + +
    Definition: perf_tests.hh:167
    +
    Type-safe boolean.
    Definition: bool_class.hh:58
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    future do_until(StopCondition stop_cond, AsyncAction action) noexcept
    Definition: loop.hh:339
    +
    future now()
    Returns a ready future.
    Definition: later.hh:35
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    STL namespace.
    +
    Definition: perf_tests.hh:318
    +
    Check whether a type is a future.
    Definition: future.hh:1032
    +
    + + + + diff --git a/master/pipe_8hh_source.html b/master/pipe_8hh_source.html new file mode 100644 index 000000000..75d9e0fc7 --- /dev/null +++ b/master/pipe_8hh_source.html @@ -0,0 +1,277 @@ + + + + + + + +Seastar: seastar/core/pipe.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    pipe.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2015 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/future.hh>
    +
    25#include <seastar/core/queue.hh>
    +
    26
    +
    27#include <seastar/util/std-compat.hh>
    +
    28#include <seastar/util/modules.hh>
    +
    29
    +
    60
    +
    62namespace seastar {
    +
    63
    +
    64
    +
    65
    +
    68SEASTAR_MODULE_EXPORT
    +
    69class broken_pipe_exception : public std::exception {
    +
    70public:
    +
    71 virtual const char* what() const noexcept {
    +
    72 return "Broken pipe";
    +
    73 }
    +
    74};
    +
    75
    +
    76SEASTAR_MODULE_EXPORT
    +
    77class unread_overflow_exception : public std::exception {
    +
    78public:
    +
    79 virtual const char* what() const noexcept {
    +
    80 return "pipe_reader::unread() overflow";
    +
    81 }
    +
    82};
    +
    83
    +
    85namespace internal {
    +
    86template <typename T>
    +
    87class pipe_buffer {
    +
    88private:
    + +
    90 bool _read_open = true;
    +
    91 bool _write_open = true;
    +
    92public:
    +
    93 pipe_buffer(size_t size) : _buf(size) {}
    +
    94 future<std::optional<T>> read() {
    +
    95 return _buf.pop_eventually();
    +
    96 }
    +
    97 future<> write(T&& data) {
    +
    98 return _buf.push_eventually(std::move(data));
    +
    99 }
    +
    100 bool readable() const {
    +
    101 return _write_open || !_buf.empty();
    +
    102 }
    +
    103 bool writeable() const {
    +
    104 return _read_open;
    +
    105 }
    +
    106 bool close_read() {
    +
    107 // If a writer blocking (on a full queue), need to stop it.
    +
    108 if (_buf.full()) {
    +
    109 _buf.abort(std::make_exception_ptr(broken_pipe_exception()));
    +
    110 }
    +
    111 _read_open = false;
    +
    112 return !_write_open;
    +
    113 }
    +
    114 bool close_write() {
    +
    115 // If the queue is empty, write the EOF (disengaged optional) to the
    +
    116 // queue to wake a blocked reader. If the queue is not empty, there is
    +
    117 // no need to write the EOF to the queue - the reader will return an
    +
    118 // EOF when it sees that _write_open == false.
    +
    119 if (_buf.empty()) {
    +
    120 _buf.push({});
    +
    121 }
    +
    122 _write_open = false;
    +
    123 return !_read_open;
    +
    124 }
    +
    125};
    +
    126} // namespace internal
    +
    128
    +
    129SEASTAR_MODULE_EXPORT_BEGIN
    +
    130template <typename T>
    +
    131class pipe;
    +
    132
    +
    138template <typename T>
    + +
    140private:
    +
    141 internal::pipe_buffer<T> *_bufp;
    +
    142 std::optional<T> _unread;
    +
    143 pipe_reader(internal::pipe_buffer<T> *bufp) noexcept : _bufp(bufp) { }
    +
    144 friend class pipe<T>;
    +
    145public:
    + +
    153 if (_unread) {
    +
    154 auto ret = std::move(*_unread);
    +
    155 _unread = {};
    +
    156 return make_ready_future<std::optional<T>>(std::move(ret));
    +
    157 }
    +
    158 if (_bufp->readable()) {
    +
    159 return _bufp->read();
    +
    160 } else {
    +
    161 return make_ready_future<std::optional<T>>();
    +
    162 }
    +
    163 }
    +
    173 void unread(T&& item) {
    +
    174 if (_unread) {
    + +
    176 }
    +
    177 _unread = std::move(item);
    +
    178 }
    +
    179 ~pipe_reader() {
    +
    180 if (_bufp && _bufp->close_read()) {
    +
    181 delete _bufp;
    +
    182 }
    +
    183 }
    +
    184 // Allow move, but not copy, of pipe_reader
    +
    185 pipe_reader(pipe_reader&& other) noexcept : _bufp(other._bufp) {
    +
    186 other._bufp = nullptr;
    +
    187 }
    +
    188 pipe_reader& operator=(pipe_reader&& other) noexcept {
    +
    189 std::swap(_bufp, other._bufp);
    +
    190 return *this;
    +
    191 }
    +
    192};
    +
    193
    +
    199template <typename T>
    + +
    201private:
    +
    202 internal::pipe_buffer<T> *_bufp;
    +
    203 pipe_writer(internal::pipe_buffer<T> *bufp) noexcept : _bufp(bufp) { }
    +
    204 friend class pipe<T>;
    +
    205public:
    +
    212 future<> write(T&& data) {
    +
    213 if (_bufp->writeable()) {
    +
    214 return _bufp->write(std::move(data));
    +
    215 } else {
    +
    216 return make_exception_future<>(broken_pipe_exception());
    +
    217 }
    +
    218 }
    +
    219 ~pipe_writer() {
    +
    220 if (_bufp && _bufp->close_write()) {
    +
    221 delete _bufp;
    +
    222 }
    +
    223 }
    +
    224 // Allow move, but not copy, of pipe_writer
    +
    225 pipe_writer(pipe_writer&& other) noexcept : _bufp(other._bufp) {
    +
    226 other._bufp = nullptr;
    +
    227 }
    +
    228 pipe_writer& operator=(pipe_writer&& other) noexcept {
    +
    229 std::swap(_bufp, other._bufp);
    +
    230 return *this;
    +
    231 }
    +
    232};
    +
    233
    +
    261template <typename T>
    +
    262class pipe {
    +
    263public:
    +
    264 pipe_reader<T> reader;
    +
    265 pipe_writer<T> writer;
    +
    266 explicit pipe(size_t size) : pipe(new internal::pipe_buffer<T>(size)) { }
    +
    267private:
    +
    268 pipe(internal::pipe_buffer<T> *bufp) noexcept : reader(bufp), writer(bufp) { }
    +
    269};
    +
    270
    +
    271SEASTAR_MODULE_EXPORT_END
    +
    272
    +
    274
    +
    275} // namespace seastar
    +
    Definition: pipe.hh:69
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Read side of a seastar::pipe.
    Definition: pipe.hh:139
    +
    void unread(T &&item)
    Return an item to the front of the pipe.
    Definition: pipe.hh:173
    +
    future< std::optional< T > > read()
    Read next item from the pipe.
    Definition: pipe.hh:152
    +
    Write side of a seastar::pipe.
    Definition: pipe.hh:200
    +
    future write(T &&data)
    Write an item to the pipe.
    Definition: pipe.hh:212
    +
    A fixed-size pipe for communicating between two fibers.
    Definition: pipe.hh:262
    +
    Definition: queue.hh:44
    +
    bool push(T &&a)
    Push an item.
    Definition: queue.hh:187
    +
    bool full() const noexcept
    Returns true when the queue is full.
    Definition: queue.hh:300
    +
    future< T > pop_eventually() noexcept
    Definition: queue.hh:225
    +
    void abort(std::exception_ptr ex) noexcept
    Definition: queue.hh:131
    +
    bool empty() const noexcept
    Returns true when the queue is empty.
    Definition: queue.hh:292
    +
    future push_eventually(T &&data) noexcept
    Definition: queue.hh:250
    + +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/poll_8hh_source.html b/master/poll_8hh_source.html new file mode 100644 index 000000000..d1109e4e7 --- /dev/null +++ b/master/poll_8hh_source.html @@ -0,0 +1,182 @@ + + + + + + + +Seastar: seastar/core/internal/poll.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    poll.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2019 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24namespace seastar {
    +
    25
    +
    26struct pollfn {
    +
    27 virtual ~pollfn() {}
    +
    28 // Returns true if work was done (false = idle)
    +
    29 virtual bool poll() = 0;
    +
    30 // Checks if work needs to be done, but without actually doing any
    +
    31 // returns true if works needs to be done (false = idle)
    +
    32 virtual bool pure_poll() = 0;
    +
    33 // Tries to enter interrupt mode.
    +
    34 //
    +
    35 // If it returns true, then events from this poller will wake
    +
    36 // a sleeping idle loop, and exit_interrupt_mode() must be called
    +
    37 // to return to normal polling.
    +
    38 //
    +
    39 // If it returns false, the sleeping idle loop may not be entered.
    +
    40 virtual bool try_enter_interrupt_mode() = 0;
    +
    41 virtual void exit_interrupt_mode() = 0;
    +
    42};
    +
    43
    +
    44// The common case for poller -- do not make any difference between
    +
    45// poll() and pure_poll(), always/never agree to go to sleep and do
    +
    46// nothing on wakeup.
    +
    47template <bool Passive>
    +
    48struct simple_pollfn : public pollfn {
    +
    49 virtual bool pure_poll() override final {
    +
    50 return poll();
    +
    51 }
    +
    52 virtual bool try_enter_interrupt_mode() override final {
    +
    53 return Passive;
    +
    54 }
    +
    55 virtual void exit_interrupt_mode() override final {
    +
    56 }
    +
    57};
    +
    58
    +
    59namespace internal {
    +
    60
    +
    61template <typename Func>
    +
    62requires std::is_invocable_r_v<bool, Func>
    +
    63inline
    +
    64std::unique_ptr<seastar::pollfn> make_pollfn(Func&& func) {
    +
    65 struct the_pollfn : simple_pollfn<false> {
    +
    66 the_pollfn(Func&& func) : func(std::forward<Func>(func)) {}
    +
    67 Func func;
    +
    68 virtual bool poll() override final {
    +
    69 return func();
    +
    70 }
    +
    71 };
    +
    72 return std::make_unique<the_pollfn>(std::forward<Func>(func));
    +
    73}
    +
    74
    +
    75class poller {
    +
    76 std::unique_ptr<pollfn> _pollfn;
    +
    77 class registration_task;
    +
    78 class deregistration_task;
    +
    79 registration_task* _registration_task = nullptr;
    +
    80public:
    +
    81 template <typename Func>
    +
    82 requires std::is_invocable_r_v<bool, Func>
    +
    83 static poller simple(Func&& poll) {
    +
    84 return poller(make_pollfn(std::forward<Func>(poll)));
    +
    85 }
    +
    86 poller(std::unique_ptr<pollfn> fn)
    +
    87 : _pollfn(std::move(fn)) {
    +
    88 do_register();
    +
    89 }
    +
    90 ~poller();
    +
    91 poller(poller&& x) noexcept;
    +
    92 poller& operator=(poller&& x) noexcept;
    +
    93 void do_register() noexcept;
    +
    94 friend class reactor;
    +
    95};
    +
    96
    +
    97} // internal namespace
    +
    98
    +
    99}
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    STL namespace.
    +
    Definition: poll.hh:26
    +
    Definition: poll.hh:48
    +
    + + + + diff --git a/master/pollable__fd_8hh_source.html b/master/pollable__fd_8hh_source.html new file mode 100644 index 000000000..ff56ae991 --- /dev/null +++ b/master/pollable__fd_8hh_source.html @@ -0,0 +1,332 @@ + + + + + + + +Seastar: seastar/core/internal/pollable_fd.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    pollable_fd.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2019 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/future.hh>
    +
    25#include <seastar/core/posix.hh>
    +
    26#include <seastar/util/bool_class.hh>
    +
    27#include <seastar/util/modules.hh>
    +
    28#ifndef SEASTAR_MODULE
    +
    29#include <boost/intrusive_ptr.hpp>
    +
    30#include <cstdint>
    +
    31#include <vector>
    +
    32#include <tuple>
    +
    33#include <sys/uio.h>
    +
    34#endif
    +
    35
    +
    36namespace seastar {
    +
    37
    +
    38SEASTAR_MODULE_EXPORT_BEGIN
    +
    39class reactor;
    +
    40class pollable_fd;
    +
    41class pollable_fd_state;
    +
    42class socket_address;
    +
    43SEASTAR_MODULE_EXPORT_END
    +
    44
    +
    45namespace internal {
    +
    46
    +
    47class buffer_allocator;
    +
    48
    +
    49}
    +
    50
    +
    51namespace net {
    +
    52
    +
    53SEASTAR_MODULE_EXPORT
    +
    54class packet;
    +
    55
    +
    56}
    +
    57
    + +
    59
    +
    60using pollable_fd_state_ptr = boost::intrusive_ptr<pollable_fd_state>;
    +
    61
    + +
    63 unsigned _refs = 0;
    +
    64public:
    +
    65 struct speculation {
    +
    66 int events = 0;
    +
    67 explicit speculation(int epoll_events_guessed = 0) : events(epoll_events_guessed) {}
    +
    68 };
    +
    69 pollable_fd_state(const pollable_fd_state&) = delete;
    +
    70 void operator=(const pollable_fd_state&) = delete;
    +
    78 void speculate_epoll(int events) { events_known |= events; }
    +
    83 bool take_speculation(int events) {
    +
    84 // invalidate the speculation set by the last speculate_epoll() call,
    +
    85 if (events_known & events) {
    +
    86 events_known &= ~events;
    +
    87 return true;
    +
    88 }
    +
    89 return false;
    +
    90 }
    +
    91 file_desc fd;
    +
    92 bool events_rw = false; // single consumer for both read and write (accept())
    +
    93 unsigned shutdown_mask = 0; // For udp, there is no shutdown indication from the kernel
    +
    94 int events_requested = 0; // wanted by pollin/pollout promises
    +
    95 int events_epoll = 0; // installed in epoll
    +
    96 int events_known = 0; // returned from epoll
    +
    97
    +
    98 friend class reactor;
    +
    99 friend class pollable_fd;
    +
    100 friend class reactor_backend_uring;
    +
    101
    +
    102 future<size_t> read_some(char* buffer, size_t size);
    +
    103 future<size_t> read_some(uint8_t* buffer, size_t size);
    +
    104 future<size_t> read_some(const std::vector<iovec>& iov);
    +
    105 future<temporary_buffer<char>> read_some(internal::buffer_allocator* ba);
    +
    106 future<> write_all(const char* buffer, size_t size);
    +
    107 future<> write_all(const uint8_t* buffer, size_t size);
    +
    108 future<size_t> write_some(net::packet& p);
    +
    109 future<> write_all(net::packet& p);
    +
    110 future<> readable();
    +
    111 future<> writeable();
    +
    112 future<> readable_or_writeable();
    + + +
    115 future<temporary_buffer<char>> recv_some(internal::buffer_allocator* ba);
    +
    116 future<size_t> sendmsg(struct msghdr *msg);
    +
    117 future<size_t> recvmsg(struct msghdr *msg);
    +
    118 future<size_t> sendto(socket_address addr, const void* buf, size_t len);
    +
    119 future<> poll_rdhup();
    +
    120
    +
    121protected:
    +
    122 explicit pollable_fd_state(file_desc fd, speculation speculate = speculation())
    +
    123 : fd(std::move(fd)), events_known(speculate.events) {}
    +
    124 ~pollable_fd_state() = default;
    +
    125private:
    +
    126 void maybe_no_more_recv();
    +
    127 void maybe_no_more_send();
    +
    128 void forget(); // called on end-of-life
    +
    129
    +
    130 friend void intrusive_ptr_add_ref(pollable_fd_state* fd) {
    +
    131 ++fd->_refs;
    +
    132 }
    +
    133 friend void intrusive_ptr_release(pollable_fd_state* fd);
    +
    134};
    +
    135
    + +
    137public:
    + +
    139 pollable_fd() = default;
    +
    140 pollable_fd(file_desc fd, speculation speculate = speculation());
    +
    141public:
    +
    142 future<size_t> read_some(char* buffer, size_t size) {
    +
    143 return _s->read_some(buffer, size);
    +
    144 }
    +
    145 future<size_t> read_some(uint8_t* buffer, size_t size) {
    +
    146 return _s->read_some(buffer, size);
    +
    147 }
    +
    148 future<size_t> read_some(const std::vector<iovec>& iov) {
    +
    149 return _s->read_some(iov);
    +
    150 }
    +
    151 future<temporary_buffer<char>> read_some(internal::buffer_allocator* ba) {
    +
    152 return _s->read_some(ba);
    +
    153 }
    +
    154 future<> write_all(const char* buffer, size_t size) {
    +
    155 return _s->write_all(buffer, size);
    +
    156 }
    +
    157 future<> write_all(const uint8_t* buffer, size_t size) {
    +
    158 return _s->write_all(buffer, size);
    +
    159 }
    +
    160 future<size_t> write_some(net::packet& p) {
    +
    161 return _s->write_some(p);
    +
    162 }
    +
    163 future<> write_all(net::packet& p) {
    +
    164 return _s->write_all(p);
    +
    165 }
    +
    166 future<> readable() {
    +
    167 return _s->readable();
    +
    168 }
    +
    169 future<> writeable() {
    +
    170 return _s->writeable();
    +
    171 }
    +
    172 future<> readable_or_writeable() {
    +
    173 return _s->readable_or_writeable();
    +
    174 }
    + +
    176 return _s->accept();
    +
    177 }
    +
    178 future<> connect(socket_address& sa) {
    +
    179 return _s->connect(sa);
    +
    180 }
    +
    181 future<temporary_buffer<char>> recv_some(internal::buffer_allocator* ba) {
    +
    182 return _s->recv_some(ba);
    +
    183 }
    +
    184 future<size_t> sendmsg(struct msghdr *msg) {
    +
    185 return _s->sendmsg(msg);
    +
    186 }
    +
    187 future<size_t> recvmsg(struct msghdr *msg) {
    +
    188 return _s->recvmsg(msg);
    +
    189 }
    +
    190 future<size_t> sendto(socket_address addr, const void* buf, size_t len) {
    +
    191 return _s->sendto(addr, buf, len);
    +
    192 }
    +
    193 file_desc& get_file_desc() const { return _s->fd; }
    + +
    195 void shutdown(int how, shutdown_kernel_only kernel_only = shutdown_kernel_only::yes);
    +
    196 void close() { _s.reset(); }
    +
    197 explicit operator bool() const noexcept {
    +
    198 return bool(_s);
    +
    199 }
    +
    200 future<> poll_rdhup() {
    +
    201 return _s->poll_rdhup();
    +
    202 }
    +
    203protected:
    +
    204 int get_fd() const { return _s->fd.get(); }
    +
    205 void maybe_no_more_recv() { return _s->maybe_no_more_recv(); }
    +
    206 void maybe_no_more_send() { return _s->maybe_no_more_send(); }
    +
    207 friend class reactor;
    +
    208 friend class readable_eventfd;
    +
    209 friend class writeable_eventfd;
    +
    210 friend class aio_storage_context;
    +
    211private:
    +
    212 pollable_fd_state_ptr _s;
    +
    213};
    +
    214
    + +
    216
    + +
    218 pollable_fd _fd;
    +
    219public:
    +
    220 explicit readable_eventfd(size_t initial = 0) : _fd(try_create_eventfd(initial)) {}
    + +
    222 writeable_eventfd write_side();
    +
    223 future<size_t> wait();
    +
    224 int get_write_fd() { return _fd.get_fd(); }
    +
    225private:
    +
    226 explicit readable_eventfd(file_desc&& fd) : _fd(std::move(fd)) {}
    +
    227 static file_desc try_create_eventfd(size_t initial);
    +
    228
    +
    229 friend class writeable_eventfd;
    +
    230};
    +
    231
    + +
    233 file_desc _fd;
    +
    234public:
    +
    235 explicit writeable_eventfd(size_t initial = 0) : _fd(try_create_eventfd(initial)) {}
    + +
    237 readable_eventfd read_side();
    +
    238 void signal(size_t nr);
    +
    239 int get_read_fd() { return _fd.get(); }
    +
    240private:
    +
    241 explicit writeable_eventfd(file_desc&& fd) : _fd(std::move(fd)) {}
    +
    242 static file_desc try_create_eventfd(size_t initial);
    +
    243
    +
    244 friend class readable_eventfd;
    +
    245};
    +
    246
    +
    247}
    +
    Type-safe boolean.
    Definition: bool_class.hh:58
    +
    Definition: posix.hh:85
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: packet.hh:87
    +
    Definition: pollable_fd.hh:62
    +
    bool take_speculation(int events)
    Definition: pollable_fd.hh:83
    +
    void speculate_epoll(int events)
    Definition: pollable_fd.hh:78
    +
    Definition: pollable_fd.hh:136
    +
    Definition: reactor.hh:156
    +
    Definition: pollable_fd.hh:217
    +
    Definition: socket_defs.hh:47
    +
    Definition: pollable_fd.hh:232
    +
    future< connected_socket > connect(socket_address sa)
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    STL namespace.
    + +
    Definition: pollable_fd.hh:65
    +
    + + + + diff --git a/master/polymorphic__temporary__buffer_8hh_source.html b/master/polymorphic__temporary__buffer_8hh_source.html new file mode 100644 index 000000000..13e661aab --- /dev/null +++ b/master/polymorphic__temporary__buffer_8hh_source.html @@ -0,0 +1,127 @@ + + + + + + + +Seastar: seastar/core/polymorphic_temporary_buffer.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    polymorphic_temporary_buffer.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2019 Elazar Leibovich
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <seastar/core/memory.hh>
    +
    26#include <seastar/core/temporary_buffer.hh>
    +
    27#include <seastar/util/std-compat.hh>
    +
    28#include <seastar/util/modules.hh>
    +
    29#endif
    +
    30
    +
    31namespace seastar {
    +
    32
    +
    37SEASTAR_MODULE_EXPORT
    +
    38template <typename CharType>
    +
    39temporary_buffer<CharType> make_temporary_buffer(std::pmr::polymorphic_allocator<CharType>* allocator, std::size_t size) {
    +
    40 if (allocator == memory::malloc_allocator) {
    +
    41 return temporary_buffer<CharType>(size);
    +
    42 }
    +
    43 CharType *buffer = allocator->allocate(size);
    +
    44 return temporary_buffer<CharType>(buffer, size,
    +
    45 make_deleter(deleter(), [allocator, buffer, size] () mutable { allocator->deallocate(buffer, size); }));
    +
    46}
    +
    47
    +
    48}
    +
    Definition: deleter.hh:52
    +
    Definition: temporary_buffer.hh:67
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    temporary_buffer< CharType > make_temporary_buffer(std::pmr::polymorphic_allocator< CharType > *allocator, std::size_t size)
    Definition: polymorphic_temporary_buffer.hh:39
    +
    + + + + diff --git a/master/posix-stack_8hh_source.html b/master/posix-stack_8hh_source.html new file mode 100644 index 000000000..f00239f98 --- /dev/null +++ b/master/posix-stack_8hh_source.html @@ -0,0 +1,343 @@ + + + + + + + +Seastar: seastar/net/posix-stack.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    posix-stack.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23#ifndef SEASTAR_MODULE
    +
    24#include <unordered_set>
    +
    25#endif
    +
    26#include <seastar/core/sharded.hh>
    +
    27#include <seastar/core/internal/pollable_fd.hh>
    +
    28#include <seastar/net/stack.hh>
    +
    29#include <seastar/core/polymorphic_temporary_buffer.hh>
    +
    30#include <seastar/core/internal/buffer_allocator.hh>
    +
    31#include <seastar/util/program-options.hh>
    +
    32
    +
    33#include <unordered_set>
    +
    34
    +
    35namespace seastar {
    +
    36
    +
    37namespace net {
    +
    38
    +
    39using namespace seastar;
    +
    40
    +
    41// We can't keep this in any of the socket servers as instance members, because a connection can
    +
    42// outlive the socket server. To avoid having the whole socket_server tracked as a shared pointer,
    +
    43// we will have a conntrack structure.
    +
    44//
    +
    45// Right now this class is used by the posix_server_socket_impl, but it could be used by any other.
    +
    46class conntrack {
    +
    47 class load_balancer {
    +
    48 std::vector<unsigned> _cpu_load;
    +
    49 public:
    +
    50 load_balancer() : _cpu_load(size_t(smp::count), 0) {}
    +
    51 void closed_cpu(shard_id cpu) {
    +
    52 _cpu_load[cpu]--;
    +
    53 }
    +
    54 shard_id next_cpu() {
    +
    55 // FIXME: The naive algorithm will just round robin the connections around the shards.
    +
    56 // A more complex version can keep track of the amount of activity in each connection,
    +
    57 // and use that information.
    +
    58 auto min_el = std::min_element(_cpu_load.begin(), _cpu_load.end());
    +
    59 auto cpu = shard_id(std::distance(_cpu_load.begin(), min_el));
    +
    60 _cpu_load[cpu]++;
    +
    61 return cpu;
    +
    62 }
    +
    63 shard_id force_cpu(shard_id cpu) {
    +
    64 _cpu_load[cpu]++;
    +
    65 return cpu;
    +
    66 }
    +
    67 };
    +
    68
    + +
    70 void closed_cpu(shard_id cpu) {
    +
    71 _lb->closed_cpu(cpu);
    +
    72 }
    +
    73public:
    +
    74 class handle {
    +
    75 shard_id _host_cpu;
    +
    76 shard_id _target_cpu;
    + +
    78 public:
    +
    79 handle() : _lb(nullptr) {}
    +
    80 handle(shard_id cpu, lw_shared_ptr<load_balancer> lb)
    +
    81 : _host_cpu(this_shard_id())
    +
    82 , _target_cpu(cpu)
    +
    83 , _lb(make_foreign(std::move(lb))) {}
    +
    84
    +
    85 handle(const handle&) = delete;
    +
    86 handle(handle&&) = default;
    +
    87 ~handle() {
    +
    88 if (!_lb) {
    +
    89 return;
    +
    90 }
    +
    91 // FIXME: future is discarded
    +
    92 (void)smp::submit_to(_host_cpu, [cpu = _target_cpu, lb = std::move(_lb)] {
    +
    93 lb->closed_cpu(cpu);
    +
    94 });
    +
    95 }
    +
    96 shard_id cpu() {
    +
    97 return _target_cpu;
    +
    98 }
    +
    99 };
    +
    100 friend class handle;
    +
    101
    +
    102 conntrack() : _lb(make_lw_shared<load_balancer>()) {}
    +
    103 handle get_handle() {
    +
    104 return handle(_lb->next_cpu(), _lb);
    +
    105 }
    +
    106 handle get_handle(shard_id cpu) {
    +
    107 return handle(_lb->force_cpu(cpu), _lb);
    +
    108 }
    +
    109};
    +
    110
    +
    111class posix_data_source_impl final : public data_source_impl, private internal::buffer_allocator {
    +
    112 std::pmr::polymorphic_allocator<char>* _buffer_allocator;
    +
    113 pollable_fd _fd;
    + +
    115private:
    +
    116 virtual temporary_buffer<char> allocate_buffer() override;
    +
    117public:
    + +
    119 std::pmr::polymorphic_allocator<char>* allocator=memory::malloc_allocator)
    +
    120 : _buffer_allocator(allocator), _fd(std::move(fd)), _config(config) {
    +
    121 }
    +
    122 future<temporary_buffer<char>> get() override;
    +
    123 future<> close() override;
    +
    124};
    +
    125
    + +
    127 pollable_fd _fd;
    +
    128 packet _p;
    +
    129public:
    +
    130 explicit posix_data_sink_impl(pollable_fd fd) : _fd(std::move(fd)) {}
    +
    131 using data_sink_impl::put;
    +
    132 future<> put(packet p) override;
    +
    133 future<> put(temporary_buffer<char> buf) override;
    +
    134 future<> close() override;
    +
    135 bool can_batch_flushes() const noexcept override { return true; }
    +
    136 void on_batch_flush_error() noexcept override;
    +
    137};
    +
    138
    +
    139class posix_ap_server_socket_impl : public server_socket_impl {
    +
    140 using protocol_and_socket_address = std::tuple<int, socket_address>;
    +
    141 struct connection {
    +
    142 pollable_fd fd;
    +
    143 socket_address addr;
    +
    144 conntrack::handle connection_tracking_handle;
    +
    145 connection(pollable_fd xfd, socket_address xaddr, conntrack::handle cth) : fd(std::move(xfd)), addr(xaddr), connection_tracking_handle(std::move(cth)) {}
    +
    146 };
    +
    147 using port_map_t = std::unordered_set<protocol_and_socket_address>;
    +
    148 using sockets_map_t = std::unordered_map<protocol_and_socket_address, promise<accept_result>>;
    +
    149 using conn_map_t = std::unordered_multimap<protocol_and_socket_address, connection>;
    +
    150 static thread_local port_map_t ports;
    +
    151 static thread_local sockets_map_t sockets;
    +
    152 static thread_local conn_map_t conn_q;
    +
    153 int _protocol;
    +
    154 socket_address _sa;
    +
    155 std::pmr::polymorphic_allocator<char>* _allocator;
    +
    156public:
    +
    157 explicit posix_ap_server_socket_impl(int protocol, socket_address sa, std::pmr::polymorphic_allocator<char>* allocator = memory::malloc_allocator);
    + +
    159 virtual future<accept_result> accept() override;
    +
    160 virtual void abort_accept() override;
    +
    161 socket_address local_address() const override {
    +
    162 return _sa;
    +
    163 }
    +
    164 static void move_connected_socket(int protocol, socket_address sa, pollable_fd fd, socket_address addr, conntrack::handle handle, std::pmr::polymorphic_allocator<char>* allocator);
    +
    165
    +
    166 template <typename T>
    +
    167 friend class std::hash;
    +
    168};
    +
    169
    +
    170class posix_server_socket_impl : public server_socket_impl {
    +
    171 socket_address _sa;
    +
    172 int _protocol;
    +
    173 pollable_fd _lfd;
    +
    174 conntrack _conntrack;
    +
    175 server_socket::load_balancing_algorithm _lba;
    +
    176 shard_id _fixed_cpu;
    +
    177 std::pmr::polymorphic_allocator<char>* _allocator;
    +
    178public:
    +
    179 explicit posix_server_socket_impl(int protocol, socket_address sa, pollable_fd lfd,
    +
    180 server_socket::load_balancing_algorithm lba, shard_id fixed_cpu,
    +
    181 std::pmr::polymorphic_allocator<char>* allocator=memory::malloc_allocator) : _sa(sa), _protocol(protocol), _lfd(std::move(lfd)), _lba(lba), _fixed_cpu(fixed_cpu), _allocator(allocator) {}
    +
    182 virtual future<accept_result> accept() override;
    +
    183 virtual void abort_accept() override;
    +
    184 virtual socket_address local_address() const override;
    +
    185};
    +
    186
    +
    187class posix_reuseport_server_socket_impl : public server_socket_impl {
    +
    188 socket_address _sa;
    +
    189 int _protocol;
    +
    190 pollable_fd _lfd;
    +
    191 std::pmr::polymorphic_allocator<char>* _allocator;
    +
    192public:
    + +
    194 std::pmr::polymorphic_allocator<char>* allocator=memory::malloc_allocator) : _sa(sa), _protocol(protocol), _lfd(std::move(lfd)), _allocator(allocator) {}
    +
    195 virtual future<accept_result> accept() override;
    +
    196 virtual void abort_accept() override;
    +
    197 virtual socket_address local_address() const override;
    +
    198};
    +
    199
    + +
    201private:
    +
    202 const bool _reuseport;
    +
    203protected:
    +
    204 std::pmr::polymorphic_allocator<char>* _allocator;
    +
    205public:
    +
    206 explicit posix_network_stack(const program_options::option_group& opts, std::pmr::polymorphic_allocator<char>* allocator=memory::malloc_allocator);
    +
    207 virtual server_socket listen(socket_address sa, listen_options opts) override;
    +
    208 virtual ::seastar::socket socket() override;
    +
    209 virtual net::udp_channel make_udp_channel(const socket_address&) override;
    +
    210 virtual net::datagram_channel make_unbound_datagram_channel(sa_family_t) override;
    +
    211 virtual net::datagram_channel make_bound_datagram_channel(const socket_address& local) override;
    +
    212 static future<std::unique_ptr<network_stack>> create(const program_options::option_group& opts, std::pmr::polymorphic_allocator<char>* allocator=memory::malloc_allocator) {
    +
    213 return make_ready_future<std::unique_ptr<network_stack>>(std::unique_ptr<network_stack>(new posix_network_stack(opts, allocator)));
    +
    214 }
    +
    215 virtual bool has_per_core_namespace() override { return _reuseport; };
    +
    216 bool supports_ipv6() const override;
    +
    217 std::vector<network_interface> network_interfaces() override;
    +
    218};
    +
    219
    + +
    221private:
    +
    222 const bool _reuseport;
    +
    223public:
    +
    224 posix_ap_network_stack(const program_options::option_group& opts, std::pmr::polymorphic_allocator<char>* allocator=memory::malloc_allocator);
    +
    225 virtual server_socket listen(socket_address sa, listen_options opts) override;
    +
    226 static future<std::unique_ptr<network_stack>> create(const program_options::option_group& opts, std::pmr::polymorphic_allocator<char>* allocator=memory::malloc_allocator) {
    +
    227 return make_ready_future<std::unique_ptr<network_stack>>(std::unique_ptr<network_stack>(new posix_ap_network_stack(opts, allocator)));
    +
    228 }
    +
    229};
    +
    230
    +
    231network_stack_entry register_posix_stack();
    +
    232}
    +
    233
    +
    234}
    +
    Definition: iostream.hh:103
    +
    Definition: iostream.hh:60
    +
    Definition: sharded.hh:842
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    + +
    Definition: posix-stack.hh:74
    +
    Definition: posix-stack.hh:46
    +
    Definition: api.hh:116
    +
    Definition: packet.hh:87
    +
    Definition: posix-stack.hh:220
    +
    Definition: posix-stack.hh:139
    +
    Definition: posix-stack.hh:126
    +
    Definition: posix-stack.hh:111
    +
    Definition: posix-stack.hh:200
    +
    std::vector< network_interface > network_interfaces() override
    + +
    Definition: posix-stack.hh:170
    +
    Definition: api.hh:429
    +
    Definition: pollable_fd.hh:136
    +
    Definition: program-options.hh:292
    +
    A listening socket, waiting to accept incoming network connections.
    Definition: api.hh:326
    +
    static futurize_t< std::invoke_result_t< Func > > submit_to(unsigned t, smp_submit_to_options options, Func &&func) noexcept
    Definition: smp.hh:354
    +
    Definition: socket_defs.hh:47
    +
    Definition: api.hh:283
    + + +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    shard_id this_shard_id() noexcept
    Returns shard_id of the of the current shard.
    Definition: shard_id.hh:52
    +
    Definition: api.hh:461
    +
    Definition: api.hh:392
    +
    + + + + diff --git a/master/posix_8hh.html b/master/posix_8hh.html new file mode 100644 index 000000000..750956695 --- /dev/null +++ b/master/posix_8hh.html @@ -0,0 +1,325 @@ + + + + + + + +Seastar: seastar/core/posix.hh File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    posix.hh File Reference
    +
    +
    +
    #include <sys/epoll.h>
    +#include <sys/eventfd.h>
    +#include <sys/ioctl.h>
    +#include <sys/mman.h>
    +#include <sys/socket.h>
    +#include <sys/stat.h>
    +#include <sys/timerfd.h>
    +#include <sys/types.h>
    +#include <sys/uio.h>
    +#include <assert.h>
    +#include <fcntl.h>
    +#include <pthread.h>
    +#include <signal.h>
    +#include <spawn.h>
    +#include <unistd.h>
    +#include <utility>
    +#include <system_error>
    +#include <chrono>
    +#include <cstring>
    +#include <functional>
    +#include <memory>
    +#include <set>
    +#include <optional>
    +#include "abort_on_ebadf.hh"
    +#include <seastar/core/sstring.hh>
    +#include <seastar/net/socket_defs.hh>
    +#include <seastar/util/std-compat.hh>
    +#include <seastar/util/modules.hh>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + +

    +Classes

    struct  seastar::mmap_deleter
     
    class  seastar::file_desc
     
    class  seastar::posix_thread
     
    class  seastar::posix_thread::attr
     
    struct  seastar::posix_thread::attr::stack_size
     
    + + + + +

    +Namespaces

    namespace  seastar
     Seastar API namespace.
     
    + + + +

    +Typedefs

    +using seastar::mmap_area = std::unique_ptr< char[], mmap_deleter >
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    +void seastar::throw_system_error_on (bool condition, const char *what_arg="")
     
    +template<typename T >
    void seastar::throw_kernel_error (T r)
     
    +template<typename T >
    void seastar::throw_pthread_error (T r)
     
    +mmap_area seastar::mmap_anonymous (void *addr, size_t length, int prot, int flags)
     
    +constexpr unsigned seastar::posix::shutdown_mask (int how)
     
    template<typename Rep , typename Period >
    struct timespec seastar::posix::to_timespec (std::chrono::duration< Rep, Period > d)
     
    template<typename Rep1 , typename Period1 , typename Rep2 , typename Period2 >
    struct itimerspec seastar::posix::to_relative_itimerspec (std::chrono::duration< Rep1, Period1 > base, std::chrono::duration< Rep2, Period2 > interval)
     
    template<typename Clock , class Duration , class Rep , class Period >
    struct itimerspec seastar::posix::to_absolute_itimerspec (std::chrono::time_point< Clock, Duration > base, std::chrono::duration< Rep, Period > interval)
     
    +sigset_t seastar::make_sigset_mask (int signo)
     
    +sigset_t seastar::make_full_sigset_mask ()
     
    +sigset_t seastar::make_empty_sigset_mask ()
     
    +void seastar::pin_this_thread (unsigned cpu_id)
     
    +std::set< unsigned > seastar::get_current_cpuset ()
     
    + + + + + +

    +Variables

    +constexpr unsigned seastar::posix::rcv_shutdown = 0x1
     
    +constexpr unsigned seastar::posix::snd_shutdown = 0x2
     
    +

    Class Documentation

    + +

    ◆ seastar::posix_thread::attr::stack_size

    + +
    +
    + + + + +
    struct seastar::posix_thread::attr::stack_size
    +
    + + + + + +
    Class Members
    +size_t +size +
    + +
    +
    +

    Function Documentation

    + +

    ◆ to_absolute_itimerspec()

    + +
    +
    +
    +template<typename Clock , class Duration , class Rep , class Period >
    + + + + + + + + + + + + + + + + + + +
    struct itimerspec seastar::posix::to_absolute_itimerspec (std::chrono::time_point< Clock, Duration > base,
    std::chrono::duration< Rep, Period > interval 
    )
    +
    +

    Converts a time_point and a duration to an itimerspec

    +
    Parameters
    + + + +
    basebase time for the timer; must use the same clock as the timer
    intervalperiod for re-arming the timer
    +
    +
    +
    Returns
    base and interval converted to an itimerspec
    + +
    +
    + +

    ◆ to_relative_itimerspec()

    + +
    +
    +
    +template<typename Rep1 , typename Period1 , typename Rep2 , typename Period2 >
    + + + + + + + + + + + + + + + + + + +
    struct itimerspec seastar::posix::to_relative_itimerspec (std::chrono::duration< Rep1, Period1 > base,
    std::chrono::duration< Rep2, Period2 > interval 
    )
    +
    +

    Converts a relative start time and an interval to an itimerspec

    +
    Parameters
    + + + +
    baseFirst expiration of the timer, relative to the current time
    intervalperiod for re-arming the timer
    +
    +
    +
    Returns
    base and interval converted to an itimerspec
    + +
    +
    + +

    ◆ to_timespec()

    + +
    +
    +
    +template<typename Rep , typename Period >
    + + + + + + + + +
    struct timespec seastar::posix::to_timespec (std::chrono::duration< Rep, Period > d)
    +
    +

    Converts a duration value to a timespec

    +
    Parameters
    + + +
    da duration value to convert to the POSIX timespec format
    +
    +
    +
    Returns
    d as a timespec value
    + +
    +
    +
    + + + + diff --git a/master/posix_8hh_source.html b/master/posix_8hh_source.html new file mode 100644 index 000000000..2e389b88a --- /dev/null +++ b/master/posix_8hh_source.html @@ -0,0 +1,601 @@ + + + + + + + +Seastar: seastar/core/posix.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    posix.hh
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2016 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <sys/epoll.h>
    +
    26#include <sys/eventfd.h>
    +
    27#include <sys/ioctl.h>
    +
    28#include <sys/mman.h>
    +
    29#include <sys/socket.h>
    +
    30#include <sys/stat.h>
    +
    31#include <sys/timerfd.h>
    +
    32#include <sys/types.h>
    +
    33#include <sys/uio.h>
    +
    34#include <assert.h>
    +
    35#include <fcntl.h>
    +
    36#include <pthread.h>
    +
    37#include <signal.h>
    +
    38#include <spawn.h>
    +
    39#include <unistd.h>
    +
    40#include <utility>
    +
    41#include <system_error>
    +
    42#include <chrono>
    +
    43#include <cstring>
    +
    44#include <functional>
    +
    45#include <memory>
    +
    46#include <set>
    +
    47#include <optional>
    +
    48#endif
    +
    49#include "abort_on_ebadf.hh"
    +
    50#include <seastar/core/sstring.hh>
    +
    51#include <seastar/net/socket_defs.hh>
    +
    52#include <seastar/util/std-compat.hh>
    +
    53#include <seastar/util/modules.hh>
    +
    54
    +
    55namespace seastar {
    +
    56
    +
    57SEASTAR_MODULE_EXPORT_BEGIN
    +
    58
    +
    67
    +
    68inline void throw_system_error_on(bool condition, const char* what_arg = "");
    +
    69
    +
    70template <typename T>
    +
    71inline void throw_kernel_error(T r);
    +
    72
    +
    73template <typename T>
    +
    74inline void throw_pthread_error(T r);
    +
    75
    + +
    77 size_t _size;
    +
    78 void operator()(void* ptr) const;
    +
    79};
    +
    80
    +
    81using mmap_area = std::unique_ptr<char[], mmap_deleter>;
    +
    82
    +
    83mmap_area mmap_anonymous(void* addr, size_t length, int prot, int flags);
    +
    84
    +
    85class file_desc {
    +
    86 int _fd;
    +
    87public:
    +
    88 file_desc() = delete;
    +
    89 file_desc(const file_desc&) = delete;
    +
    90 file_desc(file_desc&& x) noexcept : _fd(x._fd) { x._fd = -1; }
    +
    91 ~file_desc() { if (_fd != -1) { ::close(_fd); } }
    +
    92 void operator=(const file_desc&) = delete;
    +
    93 file_desc& operator=(file_desc&& x) {
    +
    94 if (this != &x) {
    +
    95 std::swap(_fd, x._fd);
    +
    96 if (x._fd != -1) {
    +
    97 x.close();
    +
    98 }
    +
    99 }
    +
    100 return *this;
    +
    101 }
    +
    102 void close() {
    +
    103 assert(_fd != -1);
    +
    104 auto r = ::close(_fd);
    +
    105 throw_system_error_on(r == -1, "close");
    +
    106 _fd = -1;
    +
    107 }
    +
    108 int get() const { return _fd; }
    +
    109
    +
    110 sstring fdinfo() const noexcept;
    +
    111
    +
    112 static file_desc from_fd(int fd) {
    +
    113 return file_desc(fd);
    +
    114 }
    +
    115
    +
    116 static file_desc open(sstring name, int flags, mode_t mode = 0) {
    +
    117 int fd = ::open(name.c_str(), flags, mode);
    +
    118 throw_system_error_on(fd == -1, "open");
    +
    119 return file_desc(fd);
    +
    120 }
    +
    121 static file_desc socket(int family, int type, int protocol = 0) {
    +
    122 int fd = ::socket(family, type, protocol);
    +
    123 throw_system_error_on(fd == -1, "socket");
    +
    124 return file_desc(fd);
    +
    125 }
    +
    126 static file_desc eventfd(unsigned initval, int flags) {
    +
    127 int fd = ::eventfd(initval, flags);
    +
    128 throw_system_error_on(fd == -1, "eventfd");
    +
    129 return file_desc(fd);
    +
    130 }
    +
    131 static file_desc epoll_create(int flags = 0) {
    +
    132 int fd = ::epoll_create1(flags);
    +
    133 throw_system_error_on(fd == -1, "epoll_create1");
    +
    134 return file_desc(fd);
    +
    135 }
    +
    136 static file_desc timerfd_create(int clockid, int flags) {
    +
    137 int fd = ::timerfd_create(clockid, flags);
    +
    138 throw_system_error_on(fd == -1, "timerfd_create");
    +
    139 return file_desc(fd);
    +
    140 }
    +
    141 static file_desc temporary(sstring directory);
    +
    142 file_desc dup() const {
    +
    143 int fd = ::dup(get());
    +
    144 throw_system_error_on(fd == -1, "dup");
    +
    145 return file_desc(fd);
    +
    146 }
    +
    147 file_desc accept(socket_address& sa, int flags = 0) {
    +
    148 auto ret = ::accept4(_fd, &sa.as_posix_sockaddr(), &sa.addr_length, flags);
    +
    149 throw_system_error_on(ret == -1, "accept4");
    +
    150 return file_desc(ret);
    +
    151 }
    +
    152 static file_desc inotify_init(int flags);
    +
    153 // return nullopt if no connection is availbale to be accepted
    +
    154 std::optional<file_desc> try_accept(socket_address& sa, int flags = 0) {
    +
    155 auto ret = ::accept4(_fd, &sa.as_posix_sockaddr(), &sa.addr_length, flags);
    +
    156 if (ret == -1 && errno == EAGAIN) {
    +
    157 return {};
    +
    158 }
    +
    159 throw_system_error_on(ret == -1, "accept4");
    +
    160 return file_desc(ret);
    +
    161 }
    +
    162 void shutdown(int how) {
    +
    163 auto ret = ::shutdown(_fd, how);
    +
    164 if (ret == -1 && errno != ENOTCONN) {
    +
    165 throw_system_error_on(ret == -1, "shutdown");
    +
    166 }
    +
    167 }
    +
    168 void truncate(size_t size) {
    +
    169 auto ret = ::ftruncate(_fd, size);
    +
    170 throw_system_error_on(ret, "ftruncate");
    +
    171 }
    +
    172 int ioctl(int request) {
    +
    173 return ioctl(request, 0);
    +
    174 }
    +
    175 int ioctl(int request, int value) {
    +
    176 int r = ::ioctl(_fd, request, value);
    +
    177 throw_system_error_on(r == -1, "ioctl");
    +
    178 return r;
    +
    179 }
    +
    180 int ioctl(int request, unsigned int value) {
    +
    181 int r = ::ioctl(_fd, request, value);
    +
    182 throw_system_error_on(r == -1, "ioctl");
    +
    183 return r;
    +
    184 }
    +
    185 template <class X>
    +
    186 int ioctl(int request, X& data) {
    +
    187 int r = ::ioctl(_fd, request, &data);
    +
    188 throw_system_error_on(r == -1, "ioctl");
    +
    189 return r;
    +
    190 }
    +
    191 template <class X>
    +
    192 int ioctl(int request, X&& data) {
    +
    193 int r = ::ioctl(_fd, request, &data);
    +
    194 throw_system_error_on(r == -1, "ioctl");
    +
    195 return r;
    +
    196 }
    +
    197 template <class X>
    +
    198 int setsockopt(int level, int optname, X&& data) {
    +
    199 int r = ::setsockopt(_fd, level, optname, &data, sizeof(data));
    +
    200 throw_system_error_on(r == -1, "setsockopt");
    +
    201 return r;
    +
    202 }
    +
    203 int setsockopt(int level, int optname, const char* data) {
    +
    204 int r = ::setsockopt(_fd, level, optname, data, strlen(data) + 1);
    +
    205 throw_system_error_on(r == -1, "setsockopt");
    +
    206 return r;
    +
    207 }
    +
    208 int setsockopt(int level, int optname, const void* data, socklen_t len) {
    +
    209 int r = ::setsockopt(_fd, level, optname, data, len);
    +
    210 throw_system_error_on(r == -1, "setsockopt");
    +
    211 return r;
    +
    212 }
    +
    213 template <typename Data>
    +
    214 Data getsockopt(int level, int optname) {
    +
    215 Data data;
    +
    216 socklen_t len = sizeof(data);
    +
    217 memset(&data, 0, len);
    +
    218 int r = ::getsockopt(_fd, level, optname, &data, &len);
    +
    219 throw_system_error_on(r == -1, "getsockopt");
    +
    220 return data;
    +
    221 }
    +
    222 int getsockopt(int level, int optname, char* data, socklen_t len) {
    +
    223 int r = ::getsockopt(_fd, level, optname, data, &len);
    +
    224 throw_system_error_on(r == -1, "getsockopt");
    +
    225 return r;
    +
    226 }
    +
    227 size_t size() {
    +
    228 struct stat buf;
    +
    229 auto r = ::fstat(_fd, &buf);
    +
    230 throw_system_error_on(r == -1, "fstat");
    +
    231 return buf.st_size;
    +
    232 }
    +
    233 std::optional<size_t> read(void* buffer, size_t len) {
    +
    234 auto r = ::read(_fd, buffer, len);
    +
    235 if (r == -1 && errno == EAGAIN) {
    +
    236 return {};
    +
    237 }
    +
    238 throw_system_error_on(r == -1, "read");
    +
    239 return { size_t(r) };
    +
    240 }
    +
    241 std::optional<ssize_t> recv(void* buffer, size_t len, int flags) {
    +
    242 auto r = ::recv(_fd, buffer, len, flags);
    +
    243 if (r == -1 && errno == EAGAIN) {
    +
    244 return {};
    +
    245 }
    +
    246 throw_system_error_on(r == -1, "recv");
    +
    247 return { ssize_t(r) };
    +
    248 }
    +
    249 std::optional<size_t> recvmsg(msghdr* mh, int flags) {
    +
    250 auto r = ::recvmsg(_fd, mh, flags);
    +
    251 if (r == -1 && errno == EAGAIN) {
    +
    252 return {};
    +
    253 }
    +
    254 throw_system_error_on(r == -1, "recvmsg");
    +
    255 return { size_t(r) };
    +
    256 }
    +
    257 std::optional<size_t> send(const void* buffer, size_t len, int flags) {
    +
    258 auto r = ::send(_fd, buffer, len, flags);
    +
    259 if (r == -1 && errno == EAGAIN) {
    +
    260 return {};
    +
    261 }
    +
    262 throw_system_error_on(r == -1, "send");
    +
    263 return { size_t(r) };
    +
    264 }
    +
    265 std::optional<size_t> sendto(socket_address& addr, const void* buf, size_t len, int flags) {
    +
    266 auto r = ::sendto(_fd, buf, len, flags, &addr.u.sa, addr.length());
    +
    267 if (r == -1 && errno == EAGAIN) {
    +
    268 return {};
    +
    269 }
    +
    270 throw_system_error_on(r == -1, "sendto");
    +
    271 return { size_t(r) };
    +
    272 }
    +
    273 std::optional<size_t> sendmsg(const msghdr* msg, int flags) {
    +
    274 auto r = ::sendmsg(_fd, msg, flags);
    +
    275 if (r == -1 && errno == EAGAIN) {
    +
    276 return {};
    +
    277 }
    +
    278 throw_system_error_on(r == -1, "sendmsg");
    +
    279 return { size_t(r) };
    +
    280 }
    +
    281 void bind(sockaddr& sa, socklen_t sl) {
    +
    282 auto r = ::bind(_fd, &sa, sl);
    +
    283 throw_system_error_on(r == -1, "bind");
    +
    284 }
    +
    285 void connect(sockaddr& sa, socklen_t sl) {
    +
    286 auto r = ::connect(_fd, &sa, sl);
    +
    287 if (r == -1 && errno == EINPROGRESS) {
    +
    288 return;
    +
    289 }
    +
    290 throw_system_error_on(r == -1, "connect");
    +
    291 }
    +
    292 socket_address get_address() {
    +
    293 socket_address addr;
    +
    294 auto r = ::getsockname(_fd, &addr.u.sa, &addr.addr_length);
    +
    295 throw_system_error_on(r == -1, "getsockname");
    +
    296 return addr;
    +
    297 }
    +
    298 socket_address get_remote_address() {
    +
    299 socket_address addr;
    +
    300 auto r = ::getpeername(_fd, &addr.u.sa, &addr.addr_length);
    +
    301 throw_system_error_on(r == -1, "getpeername");
    +
    302 return addr;
    +
    303 }
    +
    304 void listen(int backlog) {
    +
    305 auto fd = ::listen(_fd, backlog);
    +
    306 throw_system_error_on(fd == -1, "listen");
    +
    307 }
    +
    308 std::optional<size_t> write(const void* buf, size_t len) {
    +
    309 auto r = ::write(_fd, buf, len);
    +
    310 if (r == -1 && errno == EAGAIN) {
    +
    311 return {};
    +
    312 }
    +
    313 throw_system_error_on(r == -1, "write");
    +
    314 return { size_t(r) };
    +
    315 }
    +
    316 std::optional<size_t> writev(const iovec *iov, int iovcnt) {
    +
    317 auto r = ::writev(_fd, iov, iovcnt);
    +
    318 if (r == -1 && errno == EAGAIN) {
    +
    319 return {};
    +
    320 }
    +
    321 throw_system_error_on(r == -1, "writev");
    +
    322 return { size_t(r) };
    +
    323 }
    +
    324 size_t pread(void* buf, size_t len, off_t off) {
    +
    325 auto r = ::pread(_fd, buf, len, off);
    +
    326 throw_system_error_on(r == -1, "pread");
    +
    327 return size_t(r);
    +
    328 }
    +
    329 void timerfd_settime(int flags, const itimerspec& its) {
    +
    330 auto r = ::timerfd_settime(_fd, flags, &its, NULL);
    +
    331 throw_system_error_on(r == -1, "timerfd_settime");
    +
    332 }
    +
    333
    +
    334 mmap_area map(size_t size, unsigned prot, unsigned flags, size_t offset,
    +
    335 void* addr = nullptr) {
    +
    336 void *x = mmap(addr, size, prot, flags, _fd, offset);
    +
    337 throw_system_error_on(x == MAP_FAILED, "mmap");
    +
    338 return mmap_area(static_cast<char*>(x), mmap_deleter{size});
    +
    339 }
    +
    340
    +
    341 mmap_area map_shared_rw(size_t size, size_t offset) {
    +
    342 return map(size, PROT_READ | PROT_WRITE, MAP_SHARED, offset);
    +
    343 }
    +
    344
    +
    345 mmap_area map_shared_ro(size_t size, size_t offset) {
    +
    346 return map(size, PROT_READ, MAP_SHARED, offset);
    +
    347 }
    +
    348
    +
    349 mmap_area map_private_rw(size_t size, size_t offset) {
    +
    350 return map(size, PROT_READ | PROT_WRITE, MAP_PRIVATE, offset);
    +
    351 }
    +
    352
    +
    353 mmap_area map_private_ro(size_t size, size_t offset) {
    +
    354 return map(size, PROT_READ, MAP_PRIVATE, offset);
    +
    355 }
    +
    356
    +
    357 void spawn_actions_add_close(posix_spawn_file_actions_t* actions) {
    +
    358 auto r = ::posix_spawn_file_actions_addclose(actions, _fd);
    +
    359 throw_pthread_error(r);
    +
    360 }
    +
    361
    +
    362 void spawn_actions_add_dup2(posix_spawn_file_actions_t* actions, int newfd) {
    +
    363 auto r = ::posix_spawn_file_actions_adddup2(actions, _fd, newfd);
    +
    364 throw_pthread_error(r);
    +
    365 }
    +
    366private:
    +
    367 file_desc(int fd) : _fd(fd) {}
    +
    368 };
    +
    369
    +
    370
    +
    371namespace posix {
    +
    372
    +
    373constexpr unsigned rcv_shutdown = 0x1;
    +
    374constexpr unsigned snd_shutdown = 0x2;
    +
    375inline constexpr unsigned shutdown_mask(int how) { return how + 1; }
    +
    376
    +
    381template <typename Rep, typename Period>
    +
    382struct timespec
    +
    383to_timespec(std::chrono::duration<Rep, Period> d) {
    +
    384 auto ns = std::chrono::duration_cast<std::chrono::nanoseconds>(d).count();
    +
    385 struct timespec ts {};
    +
    386 ts.tv_sec = ns / 1000000000;
    +
    387 ts.tv_nsec = ns % 1000000000;
    +
    388 return ts;
    +
    389}
    +
    390
    +
    396template <typename Rep1, typename Period1, typename Rep2, typename Period2>
    +
    397struct itimerspec
    +
    398to_relative_itimerspec(std::chrono::duration<Rep1, Period1> base, std::chrono::duration<Rep2, Period2> interval) {
    +
    399 struct itimerspec its {};
    +
    400 its.it_interval = to_timespec(interval);
    +
    401 its.it_value = to_timespec(base);
    +
    402 return its;
    +
    403}
    +
    404
    +
    405
    +
    411template <typename Clock, class Duration, class Rep, class Period>
    +
    412struct itimerspec
    +
    413to_absolute_itimerspec(std::chrono::time_point<Clock, Duration> base, std::chrono::duration<Rep, Period> interval) {
    +
    414 return to_relative_itimerspec(base.time_since_epoch(), interval);
    +
    415}
    +
    416
    +
    417}
    +
    418
    + +
    420public:
    +
    421 class attr;
    +
    422private:
    +
    423 // must allocate, since this class is moveable
    +
    424 std::unique_ptr<std::function<void ()>> _func;
    +
    425 pthread_t _pthread;
    +
    426 bool _valid = true;
    +
    427 mmap_area _stack;
    +
    428private:
    +
    429 static void* start_routine(void* arg) noexcept;
    +
    430public:
    +
    431 posix_thread(std::function<void ()> func);
    +
    432 posix_thread(attr a, std::function<void ()> func);
    + + +
    435 void join();
    +
    436public:
    +
    437 class attr {
    +
    438 public:
    +
    439 struct stack_size { size_t size = 0; };
    +
    440 attr() = default;
    +
    441 template <typename... A>
    +
    442 attr(A... a) {
    +
    443 set(std::forward<A>(a)...);
    +
    444 }
    +
    445 void set() {}
    +
    446 template <typename A, typename... Rest>
    +
    447 void set(A a, Rest... rest) {
    +
    448 set(std::forward<A>(a));
    +
    449 set(std::forward<Rest>(rest)...);
    +
    450 }
    +
    451 void set(stack_size ss) { _stack_size = ss; }
    +
    452 void set(cpu_set_t affinity) { _affinity = affinity; }
    +
    453 private:
    +
    454 stack_size _stack_size;
    +
    455 std::optional<cpu_set_t> _affinity;
    +
    456 friend class posix_thread;
    +
    457 };
    +
    458};
    +
    459
    +
    460
    +
    461inline
    +
    462void throw_system_error_on(bool condition, const char* what_arg) {
    +
    463 if (condition) {
    +
    464 if ((errno == EBADF || errno == ENOTSOCK) && is_abort_on_ebadf_enabled()) {
    +
    465 abort();
    +
    466 }
    +
    467 throw std::system_error(errno, std::system_category(), what_arg);
    +
    468 }
    +
    469}
    +
    470
    +
    471template <typename T>
    +
    472inline
    +
    473void throw_kernel_error(T r) {
    +
    474 static_assert(std::is_signed_v<T>, "kernel error variables must be signed");
    +
    475 if (r < 0) {
    +
    476 auto ec = -r;
    +
    477 if ((ec == EBADF || ec == ENOTSOCK) && is_abort_on_ebadf_enabled()) {
    +
    478 abort();
    +
    479 }
    +
    480 throw std::system_error(-r, std::system_category());
    +
    481 }
    +
    482}
    +
    483
    +
    484template <typename T>
    +
    485inline
    +
    486void throw_pthread_error(T r) {
    +
    487 if (r != 0) {
    +
    488 throw std::system_error(r, std::system_category());
    +
    489 }
    +
    490}
    +
    491
    +
    492inline
    +
    493sigset_t make_sigset_mask(int signo) {
    +
    494 sigset_t set;
    +
    495 sigemptyset(&set);
    +
    496 sigaddset(&set, signo);
    +
    497 return set;
    +
    498}
    +
    499
    +
    500inline
    +
    501sigset_t make_full_sigset_mask() {
    +
    502 sigset_t set;
    +
    503 sigfillset(&set);
    +
    504 return set;
    +
    505}
    +
    506
    +
    507inline
    +
    508sigset_t make_empty_sigset_mask() {
    +
    509 sigset_t set;
    +
    510 sigemptyset(&set);
    +
    511 return set;
    +
    512}
    +
    513
    +
    514inline
    +
    515void pin_this_thread(unsigned cpu_id) {
    +
    516 cpu_set_t cs;
    +
    517 CPU_ZERO(&cs);
    +
    518 CPU_SET(cpu_id, &cs);
    +
    519 auto r = pthread_setaffinity_np(pthread_self(), sizeof(cs), &cs);
    +
    520 assert(r == 0);
    +
    521 (void)r;
    +
    522}
    +
    523
    +
    524std::set<unsigned> get_current_cpuset();
    +
    525
    +
    527
    +
    528SEASTAR_MODULE_EXPORT_END
    +
    529}
    +
    Definition: posix.hh:85
    +
    Definition: posix.hh:437
    + +
    Definition: posix.hh:419
    +
    Definition: socket_defs.hh:47
    +
    union seastar::socket_address::@14 u
    !< actual size of the relevant 'u' member
    +
    Definition: api.hh:283
    +
    server_socket listen(socket_address sa)
    +
    future< connected_socket > connect(socket_address sa)
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    bool is_abort_on_ebadf_enabled()
    +
    STL namespace.
    +
    struct itimerspec to_relative_itimerspec(std::chrono::duration< Rep1, Period1 > base, std::chrono::duration< Rep2, Period2 > interval)
    Definition: posix.hh:398
    +
    struct itimerspec to_absolute_itimerspec(std::chrono::time_point< Clock, Duration > base, std::chrono::duration< Rep, Period > interval)
    Definition: posix.hh:413
    +
    struct timespec to_timespec(std::chrono::duration< Rep, Period > d)
    Definition: posix.hh:383
    +
    Definition: posix.hh:76
    +
    + + + + diff --git a/master/preempt_8hh_source.html b/master/preempt_8hh_source.html new file mode 100644 index 000000000..21c09c6dd --- /dev/null +++ b/master/preempt_8hh_source.html @@ -0,0 +1,185 @@ + + + + + + + +Seastar: seastar/core/preempt.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    preempt.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2016 ScyllaDB.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23#ifndef SEASTAR_MODULE
    +
    24#include <atomic>
    +
    25#include <seastar/util/modules.hh>
    +
    26#endif
    +
    27
    +
    28namespace seastar {
    +
    29
    +
    30namespace internal {
    +
    31
    +
    32struct preemption_monitor {
    +
    33 // We preempt when head != tail
    +
    34 // This happens to match the Linux aio completion ring, so we can have the
    +
    35 // kernel preempt a task by queuing a completion event to an io_context.
    +
    36 std::atomic<uint32_t> head;
    +
    37 std::atomic<uint32_t> tail;
    +
    38};
    +
    39
    +
    40#ifdef SEASTAR_BUILD_SHARED_LIBS
    +
    41const preemption_monitor*& get_need_preempt_var();
    +
    42#else
    +
    43inline const preemption_monitor*& get_need_preempt_var() {
    +
    44 static preemption_monitor bootstrap_preemption_monitor;
    +
    45 static thread_local const preemption_monitor* g_need_preempt = &bootstrap_preemption_monitor;
    +
    46 return g_need_preempt;
    +
    47}
    +
    48#endif
    +
    49
    +
    50void set_need_preempt_var(const preemption_monitor* pm);
    +
    51
    +
    52inline
    +
    53bool
    +
    54monitor_need_preempt() noexcept {
    +
    55 // prevent compiler from eliminating loads in a loop
    +
    56 std::atomic_signal_fence(std::memory_order_seq_cst);
    +
    57 auto np = internal::get_need_preempt_var();
    +
    58 // We aren't reading anything from the ring, so we don't need
    +
    59 // any barriers.
    +
    60 auto head = np->head.load(std::memory_order_relaxed);
    +
    61 auto tail = np->tail.load(std::memory_order_relaxed);
    +
    62 // Possible optimization: read head and tail in a single 64-bit load,
    +
    63 // and find a funky way to compare the two 32-bit halves.
    +
    64 return __builtin_expect(head != tail, false);
    +
    65}
    +
    66
    +
    67}
    +
    68
    +
    69SEASTAR_MODULE_EXPORT
    +
    70inline bool need_preempt() noexcept {
    +
    71#ifndef SEASTAR_DEBUG
    +
    72 return internal::monitor_need_preempt();
    +
    73#else
    +
    74 return true;
    +
    75#endif
    +
    76}
    +
    77
    +
    78namespace internal {
    +
    79
    +
    80
    +
    81
    +
    82// Same as need_preempt(), but for the scheduler's use. Outside debug
    +
    83// mode they have the same meaning - the task quota expired and we need
    +
    84// to check for I/O.
    +
    85inline
    +
    86bool
    +
    87scheduler_need_preempt() {
    +
    88#ifndef SEASTAR_DEBUG
    +
    89 return need_preempt();
    +
    90#else
    +
    91 // Within the scheduler, preempting all the time (as need_preempt()
    +
    92 // does in debug mode) reduces performance drastically since we check
    +
    93 // for I/O after every task. Since we don't care about latency in debug
    +
    94 // mode, run some random-but-bounded number of tasks instead. Latency
    +
    95 // will be high if those tasks are slow, but this is debug mode anyway.
    +
    96 // We still check if preemption was requested to allow lowres_clock
    +
    97 // updates.
    +
    98 static thread_local unsigned counter = 0;
    +
    99 return ++counter % 64 == 0 || monitor_need_preempt();;
    +
    100#endif
    +
    101}
    +
    102
    +
    103}
    +
    104
    +
    105}
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/prefetch_8hh_source.html b/master/prefetch_8hh_source.html new file mode 100644 index 000000000..12f9a7101 --- /dev/null +++ b/master/prefetch_8hh_source.html @@ -0,0 +1,203 @@ + + + + + + + +Seastar: seastar/core/prefetch.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    prefetch.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <algorithm>
    +
    26#include <atomic>
    +
    27#include <boost/mpl/range_c.hpp>
    +
    28#include <boost/mpl/for_each.hpp>
    +
    29#include <seastar/core/align.hh>
    +
    30#include <seastar/core/cacheline.hh>
    +
    31#include <seastar/util/modules.hh>
    +
    32#endif
    +
    33
    +
    34namespace seastar {
    +
    35
    +
    36SEASTAR_MODULE_EXPORT_BEGIN
    +
    37
    +
    38template <size_t N, int RW, int LOC>
    +
    39struct prefetcher;
    +
    40
    +
    41template<int RW, int LOC>
    +
    42struct prefetcher<0, RW, LOC> {
    +
    43 prefetcher(uintptr_t ptr) {}
    +
    44};
    +
    45
    +
    46template <size_t N, int RW, int LOC>
    +
    47struct prefetcher {
    +
    48 prefetcher(uintptr_t ptr) {
    +
    49 __builtin_prefetch(reinterpret_cast<void*>(ptr), RW, LOC);
    +
    50 std::atomic_signal_fence(std::memory_order_seq_cst);
    +
    51 prefetcher<N-cache_line_size, RW, LOC>(ptr + cache_line_size);
    +
    52 }
    +
    53};
    +
    54
    +
    55// LOC is a locality from __buitin_prefetch() gcc documentation:
    +
    56// "The value locality must be a compile-time constant integer between zero and three. A value of
    +
    57// zero means that the data has no temporal locality, so it need not be left in the cache after
    +
    58// the access. A value of three means that the data has a high degree of temporal locality and
    +
    59// should be left in all levels of cache possible. Values of one and two mean, respectively, a
    +
    60// low or moderate degree of temporal locality. The default is three."
    +
    61template<typename T, int LOC = 3>
    +
    62void prefetch(T* ptr) {
    +
    63 prefetcher<align_up(sizeof(T), cache_line_size), 0, LOC>(reinterpret_cast<uintptr_t>(ptr));
    +
    64}
    +
    65
    +
    66template<typename Iterator, int LOC = 3>
    +
    67void prefetch(Iterator begin, Iterator end) {
    +
    68 std::for_each(begin, end, [] (auto v) { prefetch<decltype(*v), LOC>(v); });
    +
    69}
    +
    70
    +
    71template<size_t C, typename T, int LOC = 3>
    +
    72void prefetch_n(T** pptr) {
    +
    73 boost::mpl::for_each< boost::mpl::range_c<size_t,0,C> >( [pptr] (size_t x) { prefetch<T, LOC>(*(pptr + x)); } );
    +
    74}
    +
    75
    +
    76template<size_t L, int LOC = 3>
    +
    77void prefetch(void* ptr) {
    +
    78 prefetcher<L*cache_line_size, 0, LOC>(reinterpret_cast<uintptr_t>(ptr));
    +
    79}
    +
    80
    +
    81template<size_t L, typename Iterator, int LOC = 3>
    +
    82void prefetch_n(Iterator begin, Iterator end) {
    +
    83 std::for_each(begin, end, [] (auto v) { prefetch<L, LOC>(v); });
    +
    84}
    +
    85
    +
    86template<size_t L, size_t C, typename T, int LOC = 3>
    +
    87void prefetch_n(T** pptr) {
    +
    88 boost::mpl::for_each< boost::mpl::range_c<size_t,0,C> >( [pptr] (size_t x) { prefetch<L, LOC>(*(pptr + x)); } );
    +
    89}
    +
    90
    +
    91template<typename T, int LOC = 3>
    +
    92void prefetchw(T* ptr) {
    +
    93 prefetcher<align_up(sizeof(T), cache_line_size), 1, LOC>(reinterpret_cast<uintptr_t>(ptr));
    +
    94}
    +
    95
    +
    96template<typename Iterator, int LOC = 3>
    +
    97void prefetchw_n(Iterator begin, Iterator end) {
    +
    98 std::for_each(begin, end, [] (auto v) { prefetchw<decltype(*v), LOC>(v); });
    +
    99}
    +
    100
    +
    101template<size_t C, typename T, int LOC = 3>
    +
    102void prefetchw_n(T** pptr) {
    +
    103 boost::mpl::for_each< boost::mpl::range_c<size_t,0,C> >( [pptr] (size_t x) { prefetchw<T, LOC>(*(pptr + x)); } );
    +
    104}
    +
    105
    +
    106template<size_t L, int LOC = 3>
    +
    107void prefetchw(void* ptr) {
    +
    108 prefetcher<L*cache_line_size, 1, LOC>(reinterpret_cast<uintptr_t>(ptr));
    +
    109}
    +
    110
    +
    111template<size_t L, typename Iterator, int LOC = 3>
    +
    112void prefetchw_n(Iterator begin, Iterator end) {
    +
    113 std::for_each(begin, end, [] (auto v) { prefetchw<L, LOC>(v); });
    +
    114}
    +
    115
    +
    116template<size_t L, size_t C, typename T, int LOC = 3>
    +
    117void prefetchw_n(T** pptr) {
    +
    118 boost::mpl::for_each< boost::mpl::range_c<size_t,0,C> >( [pptr] (size_t x) { prefetchw<L, LOC>(*(pptr + x)); } );
    +
    119}
    +
    120SEASTAR_MODULE_EXPORT_END
    +
    121
    +
    122}
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: prefetch.hh:47
    +
    + + + + diff --git a/master/print_8hh_source.html b/master/print_8hh_source.html new file mode 100644 index 000000000..1377eadcc --- /dev/null +++ b/master/print_8hh_source.html @@ -0,0 +1,236 @@ + + + + + + + +Seastar: seastar/core/print.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    print.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/sstring.hh>
    +
    25#include <seastar/util/modules.hh>
    +
    26#ifndef SEASTAR_MODULE
    +
    27#include <fmt/ostream.h>
    +
    28#include <fmt/printf.h>
    +
    29#include <iostream>
    +
    30#include <iomanip>
    +
    31#include <chrono>
    +
    32#include <sstream>
    +
    33#endif
    +
    34
    +
    35#if 0
    +
    36inline
    +
    37std::ostream&
    +
    38operator<<(std::ostream& os, const void* ptr) {
    +
    39 auto flags = os.flags();
    +
    40 os << "0x" << std::hex << reinterpret_cast<uintptr_t>(ptr);
    +
    41 os.flags(flags);
    +
    42 return os;
    +
    43}
    +
    44#endif
    +
    45
    +
    46SEASTAR_MODULE_EXPORT
    +
    47inline
    +
    48std::ostream&
    +
    49operator<<(std::ostream&& os, const void* ptr) {
    +
    50 return os << ptr; // selects non-rvalue version
    +
    51}
    +
    52
    +
    53namespace seastar {
    +
    54
    +
    55template <typename... A>
    +
    56[[deprecated("use std::format_to() or fmt::print()")]]
    +
    57std::ostream&
    +
    58fprint(std::ostream& os, const char* fmt, A&&... a) {
    +
    59 ::fmt::fprintf(os, fmt, std::forward<A>(a)...);
    +
    60 return os;
    +
    61}
    +
    62
    +
    63template <typename... A>
    +
    64[[deprecated("use std::format_to() or fmt::print()")]]
    +
    65void
    +
    66print(const char* fmt, A&&... a) {
    +
    67 ::fmt::printf(fmt, std::forward<A>(a)...);
    +
    68}
    +
    69
    +
    70template <typename... A>
    +
    71[[deprecated("use std::format() or fmt::format()")]]
    +
    72std::string
    +
    73sprint(const char* fmt, A&&... a) {
    +
    74 std::ostringstream os;
    +
    75 ::fmt::fprintf(os, fmt, std::forward<A>(a)...);
    +
    76 return os.str();
    +
    77}
    +
    78
    +
    79template <typename... A>
    +
    80[[deprecated("use std::format() or fmt::format()")]]
    +
    81std::string
    +
    82sprint(const sstring& fmt, A&&... a) {
    +
    83 std::ostringstream os;
    +
    84 ::fmt::fprintf(os, fmt.c_str(), std::forward<A>(a)...);
    +
    85 return os.str();
    +
    86}
    +
    87
    +
    88template <typename Iterator>
    +
    89[[deprecated("use fmt::join()")]]
    +
    90std::string
    +
    91format_separated(Iterator b, Iterator e, const char* sep = ", ") {
    +
    92 std::string ret;
    +
    93 if (b == e) {
    +
    94 return ret;
    +
    95 }
    +
    96 ret += *b++;
    +
    97 while (b != e) {
    +
    98 ret += sep;
    +
    99 ret += *b++;
    +
    100 }
    +
    101 return ret;
    +
    102}
    +
    103
    +
    104template <typename TimePoint>
    + +
    106 TimePoint val;
    +
    107};
    +
    108
    +
    109template <typename TimePoint>
    +
    110inline
    + +
    112usecfmt(TimePoint tp) {
    +
    113 return { tp };
    +
    114};
    +
    115
    +
    116template <typename Clock, typename Rep, typename Period>
    +
    117std::ostream&
    +
    118operator<<(std::ostream& os, usecfmt_wrapper<std::chrono::time_point<Clock, std::chrono::duration<Rep, Period>>> tp) {
    +
    119 auto usec = std::chrono::duration_cast<std::chrono::microseconds>(tp.val.time_since_epoch()).count();
    +
    120 std::ostream tmp(os.rdbuf());
    +
    121 tmp << std::setw(12) << (usec / 1000000) << "." << std::setw(6) << std::setfill('0') << (usec % 1000000);
    +
    122 return os;
    +
    123}
    +
    124
    +
    125template <typename... A>
    +
    126void
    +
    127log(A&&... a) {
    +
    128 std::cout << usecfmt(std::chrono::high_resolution_clock::now()) << " ";
    +
    129 print(std::forward<A>(a)...);
    +
    130}
    +
    131
    +
    141template <typename... A>
    +
    142sstring
    +
    143format(const char* fmt, A&&... a) {
    +
    144 fmt::memory_buffer out;
    +
    145#if FMT_VERSION >= 80000
    +
    146 fmt::format_to(fmt::appender(out), fmt::runtime(fmt), std::forward<A>(a)...);
    +
    147#else
    +
    148 fmt::format_to(out, fmt, std::forward<A>(a)...);
    +
    149#endif
    +
    150 return sstring{out.data(), out.size()};
    +
    151}
    +
    152
    +
    153// temporary, use fmt::print() instead
    +
    154template <typename... A>
    +
    155[[deprecated("use std::format() or fmt::print()")]]
    +
    156std::ostream&
    +
    157fmt_print(std::ostream& os, const char* format, A&&... a) {
    +
    158 fmt::print(os, format, std::forward<A>(a)...);
    +
    159 return os;
    +
    160}
    +
    161
    +
    162}
    +
    future now()
    Returns a ready future.
    Definition: later.hh:35
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    sstring format(const char *fmt, A &&... a)
    Definition: print.hh:143
    +
    Definition: print.hh:105
    +
    + + + + diff --git a/master/print__safe_8hh_source.html b/master/print__safe_8hh_source.html new file mode 100644 index 000000000..fd8811cdd --- /dev/null +++ b/master/print__safe_8hh_source.html @@ -0,0 +1,214 @@ + + + + + + + +Seastar: seastar/util/print_safe.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    print_safe.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2016 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <cassert>
    +
    26#include <cerrno>
    +
    27#include <concepts>
    +
    28#include <cstring>
    +
    29#include <stdio.h>
    +
    30#include <unistd.h>
    +
    31#endif
    +
    32
    +
    33#include <seastar/util/modules.hh>
    +
    34
    +
    35namespace seastar {
    +
    36
    +
    37SEASTAR_MODULE_EXPORT_BEGIN
    +
    38//
    +
    39// Collection of async-signal safe printing functions.
    +
    40//
    +
    41
    +
    42// Outputs string to stderr.
    +
    43// Async-signal safe.
    +
    44inline
    +
    45void print_safe(const char *str, size_t len) noexcept {
    +
    46 while (len) {
    +
    47 auto result = write(STDERR_FILENO, str, len);
    +
    48 if (result > 0) {
    +
    49 len -= result;
    +
    50 str += result;
    +
    51 } else if (result == 0) {
    +
    52 break;
    +
    53 } else {
    +
    54 if (errno == EINTR) {
    +
    55 // retry
    +
    56 } else {
    +
    57 break; // what can we do?
    +
    58 }
    +
    59 }
    +
    60 }
    +
    61}
    +
    62
    +
    63// Outputs string to stderr.
    +
    64// Async-signal safe.
    +
    65inline
    +
    66void print_safe(const char *str) noexcept {
    +
    67 print_safe(str, strlen(str));
    +
    68}
    +
    69
    +
    70// Fills a buffer with a hexadecimal representation of an integer
    +
    71// and returns a pointer to the first character.
    +
    72// For example, convert_hex_safe(buf, 4, uint16_t(12)) fills the buffer with " c".
    +
    73template<typename Integral, char Padding = ' '>
    +
    74requires std::integral<Integral>
    +
    75char* convert_hex_safe(char *buf, size_t bufsz, Integral n) noexcept {
    +
    76 const char *digits = "0123456789abcdef";
    +
    77 memset(buf, Padding, bufsz);
    +
    78 auto* p = buf + bufsz;
    +
    79 do {
    +
    80 assert(p > buf);
    +
    81 *--p = digits[n & 0xf];
    +
    82 n >>= 4;
    +
    83 } while (n);
    +
    84 return p;
    +
    85}
    +
    86
    +
    87// Fills a buffer with a zero-padded hexadecimal representation of an integer.
    +
    88// For example, convert_zero_padded_hex_safe(buf, 4, uint16_t(12)) fills the buffer with "000c".
    +
    89template<typename Integral>
    +
    90requires std::integral<Integral>
    +
    91void convert_zero_padded_hex_safe(char *buf, size_t bufsz, Integral n) noexcept {
    +
    92 convert_hex_safe<Integral, '0'>(buf, bufsz, n);
    +
    93}
    +
    94
    +
    95// Prints zero-padded hexadecimal representation of an integer to stderr.
    +
    96// For example, print_zero_padded_hex_safe(uint16_t(12)) prints "000c".
    +
    97// Async-signal safe.
    +
    98template<typename Integral>
    +
    99requires std::unsigned_integral<Integral>
    +
    100void print_zero_padded_hex_safe(Integral n) noexcept {
    +
    101 char buf[sizeof(n) * 2];
    +
    102 convert_zero_padded_hex_safe(buf, sizeof(buf), n);
    +
    103 print_safe(buf, sizeof(buf));
    +
    104}
    +
    105
    +
    106// Fills a buffer with a decimal representation of an integer.
    +
    107// The argument bufsz is the maximum size of the buffer.
    +
    108// For example, print_decimal_safe(buf, 16, 12) prints "12".
    +
    109template<typename Integral>
    +
    110requires std::unsigned_integral<Integral>
    +
    111size_t convert_decimal_safe(char *buf, size_t bufsz, Integral n) noexcept {
    +
    112 char tmp[sizeof(n) * 3];
    +
    113 unsigned i = bufsz;
    +
    114 do {
    +
    115 assert(i > 0);
    +
    116 tmp[--i] = '0' + n % 10;
    +
    117 n /= 10;
    +
    118 } while (n);
    +
    119 memcpy(buf, tmp + i, sizeof(tmp) - i);
    +
    120 return sizeof(tmp) - i;
    +
    121}
    +
    122
    +
    123// Prints decimal representation of an integer to stderr.
    +
    124// For example, print_decimal_safe(12) prints "12".
    +
    125// Async-signal safe.
    +
    126template<typename Integral>
    +
    127void print_decimal_safe(Integral n) noexcept {
    +
    128 char buf[sizeof(n) * 3];
    +
    129 unsigned i = sizeof(buf);
    +
    130 auto len = convert_decimal_safe(buf, i, n);
    +
    131 print_safe(buf, len);
    +
    132}
    +
    133SEASTAR_MODULE_EXPORT_END
    +
    134}
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/process_8hh_source.html b/master/process_8hh_source.html new file mode 100644 index 000000000..2913cf33c --- /dev/null +++ b/master/process_8hh_source.html @@ -0,0 +1,179 @@ + + + + + + + +Seastar: seastar/util/process.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    process.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright (C) 2022 Kefu Chai ( tchaikov@gmail.com )
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#ifndef SEASTAR_MODULE
    +
    26#include <sys/types.h>
    +
    27#include <algorithm>
    +
    28#include <filesystem>
    +
    29#include <initializer_list>
    +
    30#include <iterator>
    +
    31#include <string_view>
    +
    32#include <utility>
    +
    33#include <variant>
    +
    34#include <vector>
    +
    35#include <fmt/format.h>
    +
    36#endif
    +
    37#include <seastar/core/iostream.hh>
    +
    38#include <seastar/core/posix.hh>
    +
    39#include <seastar/core/sstring.hh>
    +
    40
    +
    41namespace seastar::experimental {
    +
    42
    +
    46SEASTAR_MODULE_EXPORT
    + +
    49 std::vector<sstring> argv;
    +
    51 std::vector<sstring> env;
    +
    52};
    +
    53
    +
    59SEASTAR_MODULE_EXPORT
    +
    60class process {
    +
    61 struct create_tag {};
    +
    68 static future<process> spawn(const std::filesystem::path& pathname,
    +
    69 spawn_parameters params);
    +
    75 static future<process> spawn(const std::filesystem::path& pathname);
    +
    76public:
    +
    77 process(create_tag, pid_t pid, file_desc&& cin, file_desc&& cout, file_desc&& cerr);
    + + + +
    84 struct wait_exited {
    +
    85 int exit_code;
    +
    86 };
    + +
    88 int terminating_signal;
    +
    89 };
    +
    90 using wait_status = std::variant<wait_exited, wait_signaled>;
    + +
    96 void terminate();
    +
    98 void kill();
    +
    99
    +
    100private:
    +
    101 const pid_t _pid;
    +
    102 file_desc _stdin;
    +
    103 file_desc _stdout;
    +
    104 file_desc _stderr;
    +
    105
    +
    106 friend future<process> spawn_process(const std::filesystem::path&,
    + +
    108 friend future<process> spawn_process(const std::filesystem::path&);
    +
    109};
    +
    110}
    +
    Definition: process.hh:60
    +
    void terminate()
    Stop the process using SIGTERM.
    +
    future< wait_status > wait()
    +
    friend future< process > spawn_process(const std::filesystem::path &, spawn_parameters)
    +
    void kill()
    Force the process to exit using SIGKILL.
    +
    input_stream< char > cerr()
    Return an writable stream which provides stderr output from the child process.
    +
    friend future< process > spawn_process(const std::filesystem::path &)
    +
    output_stream< char > cin()
    Return an writable stream which provides input from the child process.
    +
    input_stream< char > cout()
    Return an writable stream which provides stdout output from the child process.
    + + +
    Definition: posix.hh:85
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    + + + + +
    std::vector< sstring > env
    The environment variables for the program.
    Definition: process.hh:51
    +
    std::vector< sstring > argv
    The arguments passed to the program.
    Definition: process.hh:49
    +
    + + + + diff --git a/master/program-options_8hh_source.html b/master/program-options_8hh_source.html new file mode 100644 index 000000000..215d1e325 --- /dev/null +++ b/master/program-options_8hh_source.html @@ -0,0 +1,535 @@ + + + + + + + +Seastar: seastar/util/program-options.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    program-options.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2017 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/sstring.hh>
    +
    25#include <seastar/core/print.hh>
    +
    26#include <seastar/util/modules.hh>
    +
    27
    +
    28#ifndef SEASTAR_MODULE
    +
    29#include <fmt/format.h>
    +
    30
    +
    31#include <boost/any.hpp>
    +
    32#include <boost/intrusive/list.hpp>
    +
    33
    +
    34#include <string>
    +
    35#include <unordered_map>
    +
    36#include <variant>
    +
    37#include <vector>
    +
    38#include <optional>
    +
    39#include <set>
    +
    40#endif
    +
    41
    +
    55
    +
    56namespace seastar {
    +
    57
    +
    58namespace program_options {
    +
    59
    +
    73class string_map final : private std::unordered_map<sstring, sstring> {
    +
    74private:
    +
    75 using base = std::unordered_map<sstring, sstring>;
    +
    76public:
    +
    77 using base::value_type;
    +
    78 using base::key_type;
    +
    79 using base::mapped_type;
    +
    80
    +
    81 using base::base;
    +
    82 using base::at;
    +
    83 using base::find;
    +
    84 using base::count;
    +
    85 using base::emplace;
    +
    86 using base::clear;
    +
    87 using base::operator[];
    +
    88 using base::begin;
    +
    89 using base::end;
    +
    90
    +
    91 friend bool operator==(const string_map&, const string_map&);
    +
    92 friend bool operator!=(const string_map&, const string_map&);
    +
    93};
    +
    94
    +
    95inline bool operator==(const string_map& lhs, const string_map& rhs) {
    +
    96 return static_cast<const string_map::base&>(lhs) == static_cast<const string_map::base&>(rhs);
    +
    97}
    +
    98
    +
    99inline bool operator!=(const string_map& lhs, const string_map& rhs) {
    +
    100 return !(lhs == rhs);
    +
    101}
    +
    102
    +
    106sstring get_or_default(const string_map&, const sstring& key, const sstring& def = sstring());
    +
    107
    +
    108std::istream& operator>>(std::istream& is, string_map&);
    +
    109std::ostream& operator<<(std::ostream& os, const string_map&);
    +
    110
    +
    112
    +
    113//
    +
    114// Required implementation hook for Boost.Program_options.
    +
    115//
    +
    116void validate(boost::any& out, const std::vector<std::string>& in, string_map*, int);
    +
    117
    +
    118using list_base_hook = boost::intrusive::list_base_hook<boost::intrusive::link_mode<boost::intrusive::auto_unlink>>;
    +
    119
    +
    120} // namespace program_options
    +
    121
    +
    122SEASTAR_MODULE_EXPORT_BEGIN
    +
    123enum class log_level;
    +
    124enum class logger_timestamp_style;
    +
    125enum class logger_ostream_type;
    +
    126namespace memory {
    +
    127 enum class alloc_failure_kind;
    +
    128}
    +
    129
    +
    130namespace program_options {
    +
    131
    +
    133
    +
    136
    +
    137class option_group;
    +
    138
    + +
    143public:
    +
    150 virtual bool visit_group_start(const std::string& name, bool used) = 0;
    +
    155 virtual void visit_group_end() = 0;
    +
    156
    +
    164 virtual bool visit_value_metadata(const std::string& name, const std::string& description, bool used) = 0;
    +
    165
    +
    167 virtual void visit_value() = 0;
    +
    169 virtual void visit_value(const bool* default_val) = 0;
    +
    171 virtual void visit_value(const int* default_val) = 0;
    +
    173 virtual void visit_value(const unsigned* default_val) = 0;
    +
    175 virtual void visit_value(const float* default_val) = 0;
    +
    177 virtual void visit_value(const double* default_val) = 0;
    +
    179 virtual void visit_value(const std::string* default_val) = 0;
    +
    181 virtual void visit_value(const std::set<unsigned>* default_val) = 0;
    +
    183 virtual void visit_value(const log_level* default_val) = 0;
    +
    185 virtual void visit_value(const logger_timestamp_style* default_val) = 0;
    +
    187 virtual void visit_value(const logger_ostream_type* default_val) = 0;
    +
    189 virtual void visit_value(const memory::alloc_failure_kind* default_val) = 0;
    +
    191 virtual void visit_value(const std::unordered_map<sstring, log_level>* default_val) = 0;
    +
    192
    +
    194 virtual void visit_selection_value(const std::vector<std::string>& candidate_names, const std::size_t* default_candidate) = 0;
    +
    195};
    +
    196
    + +
    201public:
    +
    208 virtual bool visit_group_start(const std::string& name, bool used) = 0;
    +
    213 virtual void visit_group_end() = 0;
    +
    214
    +
    222 virtual bool visit_value_metadata(const std::string& name, bool used) = 0;
    +
    223
    +
    225 virtual bool visit_value() = 0;
    +
    227 virtual bool visit_value(bool& val) = 0;
    +
    229 virtual bool visit_value(int& val) = 0;
    +
    231 virtual bool visit_value(unsigned& val) = 0;
    +
    233 virtual bool visit_value(float& val) = 0;
    +
    235 virtual bool visit_value(double& val) = 0;
    +
    237 virtual bool visit_value(std::string& val) = 0;
    +
    239 virtual bool visit_value(std::set<unsigned>& val) = 0;
    +
    241 virtual bool visit_value(log_level& val) = 0;
    +
    243 virtual bool visit_value(logger_timestamp_style& val) = 0;
    +
    245 virtual bool visit_value(logger_ostream_type& val) = 0;
    + +
    249 virtual bool visit_value(std::unordered_map<sstring, log_level>& val) = 0;
    +
    250
    +
    252 virtual bool visit_selection_value(const std::vector<std::string>& candidate_names, std::size_t& selected_candidate) = 0;
    +
    253};
    +
    254
    +
    256struct unused {};
    +
    257
    +
    258class basic_value;
    +
    259
    +
    292class option_group : public list_base_hook {
    +
    293 friend class basic_value;
    +
    294
    +
    295public:
    +
    296 using value_list_type = boost::intrusive::list<
    + +
    298 boost::intrusive::base_hook<list_base_hook>,
    +
    299 boost::intrusive::constant_time_size<false>>;
    +
    300
    +
    301 using option_group_list_type = boost::intrusive::list<
    + +
    303 boost::intrusive::base_hook<list_base_hook>,
    +
    304 boost::intrusive::constant_time_size<false>>;
    +
    305
    +
    306private:
    +
    307 option_group* _parent;
    +
    308 bool _used = true;
    +
    309 std::string _name;
    +
    310 value_list_type _values;
    +
    311 option_group_list_type _subgroups;
    +
    312
    +
    313public:
    +
    319 explicit option_group(option_group* parent, std::string name);
    +
    325 explicit option_group(option_group* parent, std::string name, unused);
    + +
    327 option_group(const option_group&) = delete;
    +
    328 virtual ~option_group() = default;
    +
    329
    +
    330 option_group& operator=(option_group&&) = delete;
    +
    331 option_group& operator=(const option_group&) = delete;
    +
    332
    +
    334 operator bool () const { return !_values.empty(); }
    +
    335 bool used() const { return _used; }
    +
    336 const std::string& name() const { return _name; }
    +
    337 const value_list_type& values() const { return _values; }
    +
    338 value_list_type& values() { return _values; }
    +
    339
    +
    366 void describe(options_descriptor& descriptor) const;
    +
    376 void mutate(options_mutator& mutator);
    +
    377};
    +
    378
    +
    382class basic_value : public list_base_hook {
    +
    383 friend class option_group;
    +
    384
    +
    385public:
    +
    386 option_group* _group;
    +
    387 bool _used = true;
    +
    388 std::string _name;
    +
    389 std::string _description;
    +
    390
    +
    391private:
    +
    392 virtual void do_describe(options_descriptor& descriptor) const = 0;
    +
    393 virtual void do_mutate(options_mutator& mutator) = 0;
    +
    394
    +
    395public:
    +
    396 basic_value(option_group& group, bool used, std::string name, std::string description);
    + +
    398 basic_value(const basic_value&) = delete;
    +
    399 virtual ~basic_value() = default;
    +
    400
    +
    401 basic_value& operator=(basic_value&&) = delete;
    +
    402 basic_value& operator=(const basic_value&) = delete;
    +
    403
    +
    404 bool used() const { return _used; }
    +
    405 const std::string& name() const { return _name; }
    +
    406 const std::string& description() const { return _description; }
    +
    407
    +
    408 void describe(options_descriptor& descriptor) const;
    +
    409 void mutate(options_mutator& mutator);
    +
    410};
    +
    411
    +
    415template <typename T = std::monostate>
    +
    416class value : public basic_value {
    +
    417 std::optional<T> _value;
    +
    418 bool _defaulted = true;
    +
    419
    +
    420private:
    +
    421 virtual void do_describe(options_descriptor& descriptor) const override {
    +
    422 auto* val = _value ? &*_value : nullptr;
    +
    423 descriptor.visit_value(val);
    +
    424 }
    +
    425 virtual void do_mutate(options_mutator& mutator) override {
    +
    426 T val;
    +
    427 if (mutator.visit_value(val)) {
    +
    428 _value = std::move(val);
    +
    429 _defaulted = false;
    +
    430 }
    +
    431 }
    +
    432 void do_set_value(T value, bool defaulted) {
    +
    433 _value = std::move(value);
    +
    434 _defaulted = defaulted;
    +
    435 }
    +
    436
    +
    437public:
    +
    444 value(option_group& group, std::string name, std::optional<T> default_value, std::string description)
    +
    445 : basic_value(group, true, std::move(name), std::move(description))
    +
    446 , _value(std::move(default_value))
    +
    447 { }
    +
    449 value(option_group& group, std::string name, unused)
    +
    450 : basic_value(group, false, std::move(name), {})
    +
    451 { }
    +
    452 value(value&&) = default;
    +
    454 operator bool () const { return bool(_value); }
    +
    456 bool defaulted() const { return _defaulted; }
    +
    458 const T& get_value() const { return _value.value(); }
    +
    459 T& get_value() { return _value.value(); }
    +
    460 void set_default_value(T value) { do_set_value(std::move(value), true); }
    +
    461 void set_value(T value) { do_set_value(std::move(value), false); }
    +
    462};
    +
    463
    +
    467template <>
    +
    468class value<std::monostate> : public basic_value {
    +
    469 std::optional<bool> _set;
    +
    470
    +
    471private:
    +
    472 virtual void do_describe(options_descriptor& descriptor) const override {
    +
    473 descriptor.visit_value();
    +
    474 }
    +
    475 virtual void do_mutate(options_mutator& mutator) override {
    +
    476 bool is_set = mutator.visit_value();
    +
    477 if (_set.has_value()) {
    +
    478 // override the value only if it is not preset
    +
    479 if (is_set) {
    +
    480 _set = true;
    +
    481 }
    +
    482 } else {
    +
    483 _set = is_set;
    +
    484 }
    +
    485 }
    +
    486
    +
    487public:
    +
    493 value(option_group& group, std::string name, std::string description)
    +
    494 : basic_value(group, true, std::move(name), std::move(description))
    +
    495 { }
    +
    497 value(option_group& group, std::string name, unused)
    +
    498 : basic_value(group, false, std::move(name), {})
    +
    499 { }
    +
    501 operator bool () const { return _set ? _set.value() : false; }
    +
    502 void set_value() { _set = true; }
    +
    503 void unset_value() { _set = false; }
    +
    504};
    +
    505
    +
    516template <typename T = std::monostate>
    + +
    518public:
    +
    519 using deleter = std::function<void(T*)>;
    +
    520 using value_handle = std::unique_ptr<T, deleter>;
    +
    521 struct candidate {
    +
    522 std::string name;
    +
    523 value_handle value;
    +
    524 std::unique_ptr<option_group> opts;
    +
    525 };
    +
    526 using candidates = std::vector<candidate>;
    +
    527
    +
    528private:
    +
    529 static constexpr size_t no_selected_candidate = -1;
    +
    530
    +
    531private:
    +
    532 candidates _candidates;
    +
    533 size_t _selected_candidate = no_selected_candidate;
    +
    534 bool _defaulted = true;
    +
    535
    +
    536private:
    +
    537 std::vector<std::string> get_candidate_names() const {
    +
    538 std::vector<std::string> candidate_names;
    +
    539 candidate_names.reserve(_candidates.size());
    +
    540 for (const auto& c : _candidates) {
    +
    541 candidate_names.push_back(c.name);
    +
    542 }
    +
    543 return candidate_names;
    +
    544 }
    +
    545 virtual void do_describe(options_descriptor& descriptor) const override {
    +
    546 descriptor.visit_selection_value(get_candidate_names(), _selected_candidate == no_selected_candidate ? nullptr : &_selected_candidate);
    +
    547 for (auto& c : _candidates) {
    +
    548 if (c.opts) {
    +
    549 c.opts->describe(descriptor);
    +
    550 }
    +
    551 }
    +
    552 }
    +
    553 virtual void do_mutate(options_mutator& mutator) override {
    +
    554 if (mutator.visit_selection_value(get_candidate_names(), _selected_candidate)) {
    +
    555 _defaulted = false;
    +
    556 }
    +
    557 if (_selected_candidate != no_selected_candidate) {
    +
    558 auto& c = _candidates.at(_selected_candidate);
    +
    559 if (c.opts) {
    +
    560 c.opts->mutate(mutator);
    +
    561 }
    +
    562 }
    +
    563 }
    +
    564 size_t find_candidate(const std::string& candidate_name) {
    +
    565 auto it = find_if(_candidates.begin(), _candidates.end(), [&] (const auto& candidate) {
    +
    566 return candidate.name == candidate_name;
    +
    567 });
    +
    568 if (it == _candidates.end()) {
    +
    569 throw std::invalid_argument(fmt::format("find_candidate(): failed to find candidate {}", candidate_name));
    +
    570 }
    +
    571 return it - _candidates.begin();
    +
    572 }
    +
    573
    +
    574 option_group* do_select_candidate(std::string candidate_name, bool defaulted) {
    +
    575 _selected_candidate = find_candidate(candidate_name);
    +
    576 _defaulted = defaulted;
    +
    577 return _candidates.at(_selected_candidate).opts.get();
    +
    578 }
    +
    579
    +
    580public:
    +
    588 selection_value(option_group& group, std::string name, candidates candidates, std::string default_candidate, std::string description)
    +
    589 : basic_value(group, true, std::move(name), std::move(description))
    +
    590 , _candidates(std::move(candidates))
    +
    591 , _selected_candidate(find_candidate(default_candidate))
    +
    592 { }
    +
    593 selection_value(option_group& group, std::string name, candidates candidates, std::string description)
    +
    594 : basic_value(group, true, std::move(name), std::move(description))
    +
    595 , _candidates(std::move(candidates))
    +
    596 { }
    +
    598 selection_value(option_group& group, std::string name, unused)
    +
    599 : basic_value(group, false, std::move(name), {})
    +
    600 { }
    +
    602 operator bool () const { return _selected_candidate != no_selected_candidate; }
    +
    604 bool defaulted() const { return _defaulted; }
    +
    606 const std::string& get_selected_candidate_name() const { return _candidates.at(_selected_candidate).name; }
    +
    608 const option_group* get_selected_candidate_opts() const { return _candidates.at(_selected_candidate).opts.get(); }
    +
    610 option_group* get_selected_candidate_opts() { return _candidates.at(_selected_candidate).opts.get(); }
    +
    611 T& get_selected_candidate() const { return *_candidates.at(_selected_candidate).value; }
    +
    615 option_group* select_candidate(std::string candidate_name) { return do_select_candidate(candidate_name, false); }
    +
    619 option_group* select_default_candidate(std::string candidate_name) { return do_select_candidate(candidate_name, true); }
    +
    620};
    +
    621
    +
    623
    +
    624}
    +
    625SEASTAR_MODULE_EXPORT_END
    +
    626
    +
    627}
    +
    Definition: program-options.hh:382
    +
    Definition: program-options.hh:292
    +
    void mutate(options_mutator &mutator)
    +
    option_group(option_group *parent, std::string name, unused)
    +
    void describe(options_descriptor &descriptor) const
    +
    option_group(option_group *parent, std::string name)
    +
    Definition: program-options.hh:142
    +
    virtual void visit_value(const std::set< unsigned > *default_val)=0
    Visit a value (value), default_val is null when value has no default.
    +
    virtual void visit_value(const logger_ostream_type *default_val)=0
    Visit a value (value), default_val is null when value has no default.
    +
    virtual void visit_value(const double *default_val)=0
    Visit a value (value), default_val is null when value has no default.
    +
    virtual void visit_value(const std::unordered_map< sstring, log_level > *default_val)=0
    Visit a value (value), default_val is null when value has no default.
    +
    virtual void visit_selection_value(const std::vector< std::string > &candidate_names, const std::size_t *default_candidate)=0
    Visit a selection value (selection_value), default_candidate is null when there is no default candida...
    +
    virtual bool visit_value_metadata(const std::string &name, const std::string &description, bool used)=0
    +
    virtual void visit_value(const log_level *default_val)=0
    Visit a value (value), default_val is null when value has no default.
    +
    virtual void visit_value(const float *default_val)=0
    Visit a value (value), default_val is null when value has no default.
    + +
    virtual void visit_value(const memory::alloc_failure_kind *default_val)=0
    Visit a value (value), default_val is null when value has no default.
    +
    virtual void visit_value(const std::string *default_val)=0
    Visit a value (value), default_val is null when value has no default.
    +
    virtual void visit_value(const unsigned *default_val)=0
    Visit a value (value), default_val is null when value has no default.
    +
    virtual void visit_value(const int *default_val)=0
    Visit a value (value), default_val is null when value has no default.
    +
    virtual bool visit_group_start(const std::string &name, bool used)=0
    +
    virtual void visit_value()=0
    Visit a switch (value<std::monostate>).
    +
    virtual void visit_value(const logger_timestamp_style *default_val)=0
    Visit a value (value), default_val is null when value has no default.
    +
    virtual void visit_value(const bool *default_val)=0
    Visit a value (value), default_val is null when value has no default.
    +
    Definition: program-options.hh:200
    +
    virtual bool visit_value(std::set< unsigned > &val)=0
    Visit and optionally mutate a value (value), should return true if value was mutated.
    +
    virtual bool visit_value(std::unordered_map< sstring, log_level > &val)=0
    Visit and optionally mutate a value (value), should return true if value was mutated.
    +
    virtual bool visit_value_metadata(const std::string &name, bool used)=0
    +
    virtual bool visit_value(logger_ostream_type &val)=0
    Visit and optionally mutate a value (value), should return true if value was mutated.
    + +
    virtual bool visit_value()=0
    Visit a switch (value<std::monostate>), switch is set to returned value.
    +
    virtual bool visit_value(double &val)=0
    Visit and optionally mutate a value (value), should return true if value was mutated.
    +
    virtual bool visit_value(float &val)=0
    Visit and optionally mutate a value (value), should return true if value was mutated.
    +
    virtual bool visit_group_start(const std::string &name, bool used)=0
    +
    virtual bool visit_value(unsigned &val)=0
    Visit and optionally mutate a value (value), should return true if value was mutated.
    +
    virtual bool visit_selection_value(const std::vector< std::string > &candidate_names, std::size_t &selected_candidate)=0
    Visit and optionally mutate a selection value (selection_value), should return true if value was muta...
    +
    virtual bool visit_value(memory::alloc_failure_kind &val)=0
    Visit and optionally mutate a value (value), should return true if value was mutated.
    +
    virtual bool visit_value(logger_timestamp_style &val)=0
    Visit and optionally mutate a value (value), should return true if value was mutated.
    +
    virtual bool visit_value(int &val)=0
    Visit a value (value), default_val is null when value has no default.
    +
    virtual bool visit_value(std::string &val)=0
    Visit and optionally mutate a value (value), should return true if value was mutated.
    +
    virtual bool visit_value(log_level &val)=0
    Visit and optionally mutate a value (value), should return true if value was mutated.
    +
    virtual bool visit_value(bool &val)=0
    Visit and optionally mutate a value (value), should return true if value was mutated.
    +
    Definition: program-options.hh:517
    +
    option_group * select_default_candidate(std::string candidate_name)
    Definition: program-options.hh:619
    +
    selection_value(option_group &group, std::string name, unused)
    Construct an unused value.
    Definition: program-options.hh:598
    +
    option_group * get_selected_candidate_opts()
    Get the options of the currently selected candidate (assumes there is one selected,...
    Definition: program-options.hh:610
    +
    option_group * select_candidate(std::string candidate_name)
    Definition: program-options.hh:615
    +
    bool defaulted() const
    Is the currently selected candidate the default one?
    Definition: program-options.hh:604
    +
    selection_value(option_group &group, std::string name, candidates candidates, std::string default_candidate, std::string description)
    Definition: program-options.hh:588
    +
    const option_group * get_selected_candidate_opts() const
    Get the options of the currently selected candidate (assumes there is one selected,...
    Definition: program-options.hh:608
    +
    const std::string & get_selected_candidate_name() const
    Get the name of the currently selected candidate (assumes there is one selected, see \operator bool()...
    Definition: program-options.hh:606
    + +
    Wrapper for command-line options with arbitrary string associations.
    Definition: program-options.hh:73
    +
    value(option_group &group, std::string name, unused)
    Construct an unused value.
    Definition: program-options.hh:497
    +
    value(option_group &group, std::string name, std::string description)
    Definition: program-options.hh:493
    +
    Definition: program-options.hh:416
    +
    value(option_group &group, std::string name, std::optional< T > default_value, std::string description)
    Definition: program-options.hh:444
    +
    const T & get_value() const
    Return the contained value, assumes there is one, see operator bool().
    Definition: program-options.hh:458
    +
    bool defaulted() const
    Does this value still contain a default-value?
    Definition: program-options.hh:456
    +
    value(option_group &group, std::string name, unused)
    Construct an unused value.
    Definition: program-options.hh:449
    +
    log_level
    log level used with
    Definition: log.hh:55
    +
    A tag type used to construct unused option_group and basic_value objects.
    Definition: program-options.hh:256
    +
    alloc_failure_kind
    The kind of allocation failures to dump diagnostics report for.
    Definition: memory_diagnostics.hh:41
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    STL namespace.
    +
    + + + + diff --git a/master/prometheus_8hh_source.html b/master/prometheus_8hh_source.html new file mode 100644 index 000000000..1cc38f90d --- /dev/null +++ b/master/prometheus_8hh_source.html @@ -0,0 +1,142 @@ + + + + + + + +Seastar: seastar/core/prometheus.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    prometheus.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2016 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <seastar/http/httpd.hh>
    + +
    27#include <seastar/util/std-compat.hh>
    +
    28#include <seastar/util/modules.hh>
    +
    29#include <optional>
    +
    30#endif
    +
    31
    +
    32namespace seastar {
    +
    33
    +
    34namespace prometheus {
    +
    35
    +
    36SEASTAR_MODULE_EXPORT_BEGIN
    +
    37
    +
    41struct config {
    +
    42 sstring metric_help;
    +
    43 sstring hostname;
    +
    44 std::optional<metrics::label_instance> label;
    +
    45 sstring prefix = "seastar";
    +
    46 bool allow_protobuf = false; // protobuf support is experimental and off by default
    +
    47};
    +
    48
    +
    49future<> start(httpd::http_server_control& http_server, config ctx);
    +
    50
    +
    54future<> add_prometheus_routes(distributed<httpd::http_server>& server, config ctx);
    +
    55future<> add_prometheus_routes(httpd::http_server& server, config ctx);
    +
    57SEASTAR_MODULE_EXPORT_END
    +
    58}
    +
    59}
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: httpd.hh:236
    +
    Definition: httpd.hh:134
    +
    Definition: sharded.hh:177
    +
    header for metrics creation.
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: prometheus.hh:41
    +
    std::optional< metrics::label_instance > label
    A label that will be added to all metrics, we advice not to use it and set it on the prometheus serve...
    Definition: prometheus.hh:44
    +
    sstring metric_help
    Default help message for the returned metrics.
    Definition: prometheus.hh:42
    +
    sstring prefix
    a prefix that will be added to metric names
    Definition: prometheus.hh:45
    +
    sstring hostname
    hostname is deprecated, use label instead
    Definition: prometheus.hh:43
    +
    + + + + diff --git a/master/proxy_8hh_source.html b/master/proxy_8hh_source.html new file mode 100644 index 000000000..b16098cb3 --- /dev/null +++ b/master/proxy_8hh_source.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar/net/proxy.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    proxy.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18#pragma once
    +
    19
    +
    20#ifndef SEASTAR_MODULE
    +
    21#include <memory>
    +
    22#endif
    +
    23#include <seastar/net/net.hh>
    +
    24#include <seastar/net/packet.hh>
    +
    25
    +
    26namespace seastar {
    +
    27
    +
    28namespace net {
    +
    29
    +
    30std::unique_ptr<qp> create_proxy_net_device(unsigned master_cpu, device* dev);
    +
    31
    +
    32}
    +
    33
    +
    34}
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/queue_8hh_source.html b/master/queue_8hh_source.html new file mode 100644 index 000000000..5fe940d84 --- /dev/null +++ b/master/queue_8hh_source.html @@ -0,0 +1,385 @@ + + + + + + + +Seastar: seastar/core/queue.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    queue.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/circular_buffer.hh>
    +
    25#include <seastar/core/future.hh>
    +
    26#include <seastar/util/modules.hh>
    +
    27#ifndef SEASTAR_MODULE
    +
    28#include <optional>
    +
    29#include <queue>
    +
    30#endif
    +
    31
    +
    32namespace seastar {
    +
    33
    +
    41SEASTAR_MODULE_EXPORT
    +
    42template <typename T>
    +
    43requires std::is_nothrow_move_constructible_v<T>
    +
    44class queue {
    +
    45 std::queue<T, circular_buffer<T>> _q;
    +
    46 size_t _max;
    +
    47 std::optional<promise<>> _not_empty;
    +
    48 std::optional<promise<>> _not_full;
    +
    49 std::exception_ptr _ex = nullptr;
    +
    50private:
    +
    51 void notify_not_empty() noexcept;
    +
    52 void notify_not_full() noexcept;
    +
    53public:
    +
    54 explicit queue(size_t size);
    +
    55
    +
    59 bool push(T&& a);
    +
    60
    +
    64 T pop() noexcept;
    +
    65
    +
    70 T& front() noexcept;
    +
    71
    +
    76 template <typename Func>
    +
    77 bool consume(Func&& func);
    +
    78
    +
    80 bool empty() const noexcept;
    +
    81
    +
    83 bool full() const noexcept;
    +
    84
    +
    88 future<> not_empty() noexcept;
    +
    89
    +
    92 future<> not_full() noexcept;
    +
    93
    +
    99 future<T> pop_eventually() noexcept;
    +
    100
    +
    106 future<> push_eventually(T&& data) noexcept;
    +
    107
    +
    109 size_t size() const noexcept {
    +
    110 // std::queue::size() has no reason to throw
    +
    111 return _q.size();
    +
    112 }
    +
    113
    +
    117 size_t max_size() const noexcept { return _max; }
    +
    118
    +
    122 void set_max_size(size_t max) noexcept {
    +
    123 _max = max;
    +
    124 if (!full()) {
    +
    125 notify_not_full();
    +
    126 }
    +
    127 }
    +
    128
    +
    131 void abort(std::exception_ptr ex) noexcept {
    +
    132 // std::queue::empty() and pop() doesn't throw
    +
    133 // since it just calls seastar::circular_buffer::pop_front
    +
    134 // that is specified as noexcept.
    +
    135 while (!_q.empty()) {
    +
    136 _q.pop();
    +
    137 }
    +
    138 _ex = ex;
    +
    139 if (_not_full) {
    +
    140 _not_full->set_exception(ex);
    +
    141 _not_full= std::nullopt;
    +
    142 }
    +
    143 if (_not_empty) {
    +
    144 _not_empty->set_exception(std::move(ex));
    +
    145 _not_empty = std::nullopt;
    +
    146 }
    +
    147 }
    +
    148
    +
    152 bool has_blocked_consumer() const noexcept {
    +
    153 return bool(_not_empty);
    +
    154 }
    +
    155};
    +
    156
    +
    157template <typename T>
    +
    158requires std::is_nothrow_move_constructible_v<T>
    +
    159inline
    +
    160queue<T>::queue(size_t size)
    +
    161 : _max(size) {
    +
    162}
    +
    163
    +
    164template <typename T>
    +
    165requires std::is_nothrow_move_constructible_v<T>
    +
    166inline
    +
    167void queue<T>::notify_not_empty() noexcept {
    +
    168 if (_not_empty) {
    +
    169 _not_empty->set_value();
    +
    170 _not_empty = std::optional<promise<>>();
    +
    171 }
    +
    172}
    +
    173
    +
    174template <typename T>
    +
    175requires std::is_nothrow_move_constructible_v<T>
    +
    176inline
    +
    177void queue<T>::notify_not_full() noexcept {
    +
    178 if (_not_full) {
    +
    179 _not_full->set_value();
    +
    180 _not_full = std::optional<promise<>>();
    +
    181 }
    +
    182}
    +
    183
    +
    184template <typename T>
    +
    185requires std::is_nothrow_move_constructible_v<T>
    +
    186inline
    +
    187bool queue<T>::push(T&& data) {
    +
    188 if (_q.size() < _max) {
    +
    189 _q.push(std::move(data));
    +
    190 notify_not_empty();
    +
    191 return true;
    +
    192 } else {
    +
    193 return false;
    +
    194 }
    +
    195}
    +
    196
    +
    197template <typename T>
    +
    198requires std::is_nothrow_move_constructible_v<T>
    +
    199inline
    +
    200T& queue<T>::front() noexcept {
    +
    201 // std::queue::front() has no reason to throw
    +
    202 return _q.front();
    +
    203}
    +
    204
    +
    205template <typename T>
    +
    206requires std::is_nothrow_move_constructible_v<T>
    +
    207inline
    +
    208T queue<T>::pop() noexcept {
    +
    209 if (_q.size() == _max) {
    +
    210 notify_not_full();
    +
    211 }
    +
    212 // popping the front element must not throw
    +
    213 // as T is required to be nothrow_move_constructible
    +
    214 // and std::queue::pop won't throw since it uses
    +
    215 // seastar::circular_beffer::pop_front.
    +
    216 assert(!_q.empty());
    +
    217 T data = std::move(_q.front());
    +
    218 _q.pop();
    +
    219 return data;
    +
    220}
    +
    221
    +
    222template <typename T>
    +
    223requires std::is_nothrow_move_constructible_v<T>
    +
    224inline
    + +
    226 // seastar allows only nothrow_move_constructible types
    +
    227 // to be returned as future<T>
    +
    228 static_assert(std::is_nothrow_move_constructible_v<T>,
    +
    229 "Queue element type must be no-throw move constructible");
    +
    230
    +
    231 if (_ex) {
    +
    232 return make_exception_future<T>(_ex);
    +
    233 }
    +
    234 if (empty()) {
    +
    235 return not_empty().then([this] {
    +
    236 if (_ex) {
    +
    237 return make_exception_future<T>(_ex);
    +
    238 } else {
    +
    239 return make_ready_future<T>(pop());
    +
    240 }
    +
    241 });
    +
    242 } else {
    +
    243 return make_ready_future<T>(pop());
    +
    244 }
    +
    245}
    +
    246
    +
    247template <typename T>
    +
    248requires std::is_nothrow_move_constructible_v<T>
    +
    249inline
    + +
    251 if (_ex) {
    +
    252 return make_exception_future<>(_ex);
    +
    253 }
    +
    254 if (full()) {
    +
    255 return not_full().then([this, data = std::move(data)] () mutable {
    +
    256 _q.push(std::move(data));
    +
    257 notify_not_empty();
    +
    258 });
    +
    259 } else {
    +
    260 try {
    +
    261 _q.push(std::move(data));
    +
    262 notify_not_empty();
    +
    263 return make_ready_future<>();
    +
    264 } catch (...) {
    + +
    266 }
    +
    267 }
    +
    268}
    +
    269
    +
    270template <typename T>
    +
    271requires std::is_nothrow_move_constructible_v<T>
    +
    272template <typename Func>
    +
    273inline
    +
    274bool queue<T>::consume(Func&& func) {
    +
    275 if (_ex) {
    +
    276 std::rethrow_exception(_ex);
    +
    277 }
    +
    278 bool running = true;
    +
    279 while (!_q.empty() && running) {
    +
    280 running = func(std::move(_q.front()));
    +
    281 _q.pop();
    +
    282 }
    +
    283 if (!full()) {
    +
    284 notify_not_full();
    +
    285 }
    +
    286 return running;
    +
    287}
    +
    288
    +
    289template <typename T>
    +
    290requires std::is_nothrow_move_constructible_v<T>
    +
    291inline
    +
    292bool queue<T>::empty() const noexcept {
    +
    293 // std::queue::empty() has no reason to throw
    +
    294 return _q.empty();
    +
    295}
    +
    296
    +
    297template <typename T>
    +
    298requires std::is_nothrow_move_constructible_v<T>
    +
    299inline
    +
    300bool queue<T>::full() const noexcept {
    +
    301 // std::queue::size() has no reason to throw
    +
    302 return _q.size() >= _max;
    +
    303}
    +
    304
    +
    305template <typename T>
    +
    306requires std::is_nothrow_move_constructible_v<T>
    +
    307inline
    + +
    309 if (_ex) {
    +
    310 return make_exception_future<>(_ex);
    +
    311 }
    +
    312 if (!empty()) {
    +
    313 return make_ready_future<>();
    +
    314 } else {
    +
    315 _not_empty = promise<>();
    +
    316 return _not_empty->get_future();
    +
    317 }
    +
    318}
    +
    319
    +
    320template <typename T>
    +
    321requires std::is_nothrow_move_constructible_v<T>
    +
    322inline
    + +
    324 if (_ex) {
    +
    325 return make_exception_future<>(_ex);
    +
    326 }
    +
    327 if (!full()) {
    +
    328 return make_ready_future<>();
    +
    329 } else {
    +
    330 _not_full = promise<>();
    +
    331 return _not_full->get_future();
    +
    332 }
    +
    333}
    +
    334
    +
    335}
    +
    336
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    + +
    Definition: queue.hh:44
    +
    size_t size() const noexcept
    Returns the number of items currently in the queue.
    Definition: queue.hh:109
    +
    bool push(T &&a)
    Push an item.
    Definition: queue.hh:187
    +
    future not_full() noexcept
    Definition: queue.hh:323
    +
    bool full() const noexcept
    Returns true when the queue is full.
    Definition: queue.hh:300
    +
    T pop() noexcept
    Pop an item.
    Definition: queue.hh:208
    +
    bool consume(Func &&func)
    Definition: queue.hh:274
    +
    future not_empty() noexcept
    Definition: queue.hh:308
    +
    future< T > pop_eventually() noexcept
    Definition: queue.hh:225
    +
    size_t max_size() const noexcept
    Definition: queue.hh:117
    +
    void set_max_size(size_t max) noexcept
    Definition: queue.hh:122
    +
    T & front() noexcept
    access the front element in the queue
    Definition: queue.hh:200
    +
    void abort(std::exception_ptr ex) noexcept
    Definition: queue.hh:131
    +
    bool empty() const noexcept
    Returns true when the queue is empty.
    Definition: queue.hh:292
    +
    bool has_blocked_consumer() const noexcept
    Check if there is an active consumer.
    Definition: queue.hh:152
    +
    future push_eventually(T &&data) noexcept
    Definition: queue.hh:250
    +
    future< T > current_exception_as_future() noexcept
    Returns std::current_exception() wrapped in a future.
    Definition: future.hh:1962
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/ragel_8hh_source.html b/master/ragel_8hh_source.html new file mode 100644 index 000000000..c5d96aa85 --- /dev/null +++ b/master/ragel_8hh_source.html @@ -0,0 +1,246 @@ + + + + + + + +Seastar: seastar/core/ragel.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    ragel.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <seastar/core/sstring.hh>
    +
    26#include <seastar/core/temporary_buffer.hh>
    +
    27#include <seastar/util/eclipse.hh>
    +
    28#include <algorithm>
    +
    29#include <memory>
    +
    30#include <cassert>
    +
    31#include <optional>
    +
    32#include <seastar/util/modules.hh>
    +
    33#include <seastar/core/future.hh>
    +
    34#endif
    +
    35
    +
    36namespace seastar {
    +
    37
    +
    38// Support classes for Ragel parsers
    +
    39
    +
    40// Builds an sstring that can be scattered across multiple packets.
    +
    41//
    +
    42// Use a sstring_build::guard variable to designate each scattered
    +
    43// char array, and call mark_start() and mark_end() at the start
    +
    44// and end points, respectively. sstring_builder will collect data
    +
    45// from intervening segments, if needed.
    +
    46//
    +
    47// After mark_end() has been called, use the get() method to obtain
    +
    48// the built string.
    +
    49//
    +
    50// FIXME: switch to string_view.
    +
    51//
    + +
    53 sstring _value;
    +
    54 const char* _start = nullptr;
    +
    55public:
    +
    56 class guard;
    +
    57public:
    +
    58 sstring get() && {
    +
    59 return std::move(_value);
    +
    60 }
    +
    61 void reset() {
    +
    62 _value = {};
    +
    63 _start = nullptr;
    +
    64 }
    +
    65 friend class guard;
    +
    66};
    +
    67
    + +
    69 sstring_builder& _builder;
    +
    70 const char* _block_end;
    +
    71public:
    +
    72 guard(sstring_builder& builder, const char* block_start, const char* block_end)
    +
    73 : _builder(builder), _block_end(block_end) {
    +
    74 if (!_builder._value.empty()) {
    +
    75 mark_start(block_start);
    +
    76 }
    +
    77 }
    +
    78 ~guard() {
    +
    79 if (_builder._start) {
    +
    80 mark_end(_block_end);
    +
    81 }
    +
    82 }
    +
    83 void mark_start(const char* p) {
    +
    84 _builder._start = p;
    +
    85 }
    +
    86 void mark_end(const char* p) {
    +
    87 if (_builder._value.empty()) {
    +
    88 // avoid an allocation in the common case
    +
    89 _builder._value = sstring(_builder._start, p);
    +
    90 } else {
    +
    91 _builder._value += sstring(_builder._start, p);
    +
    92 }
    +
    93 _builder._start = nullptr;
    +
    94 }
    +
    95};
    +
    96
    +
    97SEASTAR_MODULE_EXPORT_BEGIN
    +
    98
    +
    99// CRTP
    +
    100template <typename ConcreteParser>
    + +
    102protected:
    +
    103 int _fsm_cs;
    +
    104 std::unique_ptr<int[]> _fsm_stack = nullptr;
    +
    105 int _fsm_stack_size = 0;
    +
    106 int _fsm_top;
    +
    107 int _fsm_act;
    +
    108 char* _fsm_ts;
    +
    109 char* _fsm_te;
    +
    110 sstring_builder _builder;
    +
    111protected:
    +
    112 void init_base() {
    +
    113 _builder.reset();
    +
    114 }
    +
    115 void prepush() {
    +
    116 if (_fsm_top == _fsm_stack_size) {
    +
    117 auto old = _fsm_stack_size;
    +
    118 _fsm_stack_size = std::max(_fsm_stack_size * 2, 16);
    +
    119 assert(_fsm_stack_size > old);
    +
    120 std::unique_ptr<int[]> new_stack{new int[_fsm_stack_size]};
    +
    121 std::copy(_fsm_stack.get(), _fsm_stack.get() + _fsm_top, new_stack.get());
    +
    122 std::swap(_fsm_stack, new_stack);
    +
    123 }
    +
    124 }
    +
    125 void postpop() {}
    +
    126 sstring get_str() {
    +
    127 return std::move(_builder).get();
    +
    128 }
    +
    129public:
    +
    130 using unconsumed_remainder = std::optional<temporary_buffer<char>>;
    + +
    132 char* p = buf.get_write();
    +
    133 char* pe = p + buf.size();
    +
    134 char* eof = buf.empty() ? pe : nullptr;
    +
    135 char* parsed = static_cast<ConcreteParser*>(this)->parse(p, pe, eof);
    +
    136 if (parsed) {
    +
    137 buf.trim_front(parsed - p);
    +
    138 return make_ready_future<unconsumed_remainder>(std::move(buf));
    +
    139 }
    +
    140 return make_ready_future<unconsumed_remainder>();
    +
    141 }
    +
    142};
    +
    143
    +
    144inline void trim_trailing_spaces_and_tabs(sstring& str) {
    +
    145 auto data = str.data();
    +
    146 size_t i;
    +
    147 for (i = str.size(); i > 0; --i) {
    +
    148 auto c = data[i-1];
    +
    149 if (!(c == ' ' || c == '\t')) {
    +
    150 break;
    +
    151 }
    +
    152 }
    +
    153 str.resize(i);
    +
    154}
    +
    155SEASTAR_MODULE_EXPORT_END
    +
    156
    +
    157}
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: ragel.hh:101
    +
    Definition: ragel.hh:68
    +
    Definition: ragel.hh:52
    + +
    bool empty() const noexcept
    Checks whether the buffer is empty.
    Definition: temporary_buffer.hh:152
    +
    void trim_front(size_t pos) noexcept
    Definition: temporary_buffer.hh:186
    +
    size_t size() const noexcept
    Gets the buffer size.
    Definition: temporary_buffer.hh:130
    +
    CharType * get_write() noexcept
    Definition: temporary_buffer.hh:128
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/random_8hh_source.html b/master/random_8hh_source.html new file mode 100644 index 000000000..2e9ddd8c6 --- /dev/null +++ b/master/random_8hh_source.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar/testing/random.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    random.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2020 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <random>
    +
    25
    +
    26namespace seastar {
    +
    27
    +
    28namespace testing {
    +
    29
    +
    30extern thread_local std::default_random_engine local_random_engine;
    +
    31
    +
    32} // namespace testing
    +
    33
    +
    34} // namespace seastar
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/reactor_8hh_source.html b/master/reactor_8hh_source.html new file mode 100644 index 000000000..a82060923 --- /dev/null +++ b/master/reactor_8hh_source.html @@ -0,0 +1,792 @@ + + + + + + + +Seastar: seastar/core/reactor.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    reactor.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2014 Cloudius Systems
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/aligned_buffer.hh>
    +
    25#include <seastar/core/cacheline.hh>
    +
    26#include <seastar/core/circular_buffer.hh>
    + +
    28#include <seastar/core/condition-variable.hh>
    +
    29#include <seastar/core/enum.hh>
    +
    30#include <seastar/core/file.hh>
    +
    31#include <seastar/core/future.hh>
    + +
    33#include <seastar/core/internal/io_desc.hh>
    +
    34#include <seastar/core/internal/io_request.hh>
    +
    35#include <seastar/core/internal/io_sink.hh>
    +
    36#include <seastar/core/iostream.hh>
    +
    37#include <seastar/core/lowres_clock.hh>
    +
    38#include <seastar/core/make_task.hh>
    +
    39#include <seastar/core/manual_clock.hh>
    +
    40#include <seastar/core/memory.hh>
    + +
    42#include <seastar/core/internal/estimated_histogram.hh>
    +
    43#include <seastar/core/posix.hh>
    +
    44#include <seastar/core/reactor_config.hh>
    +
    45#include <seastar/core/scattered_message.hh>
    + +
    47#include <seastar/core/scheduling_specific.hh>
    +
    48#include <seastar/core/seastar.hh>
    +
    49#include <seastar/core/semaphore.hh>
    +
    50#include <seastar/core/sstring.hh>
    +
    51#include <seastar/core/temporary_buffer.hh>
    +
    52#include <seastar/core/thread_cputime_clock.hh>
    +
    53#include <seastar/core/timer.hh>
    +
    54#include <seastar/core/gate.hh>
    +
    55#include <seastar/net/api.hh>
    +
    56#include <seastar/util/eclipse.hh>
    +
    57#include <seastar/util/log.hh>
    +
    58#include <seastar/util/modules.hh>
    +
    59#include <seastar/util/noncopyable_function.hh>
    +
    60#include <seastar/util/std-compat.hh>
    +
    61#include "internal/pollable_fd.hh"
    +
    62
    +
    63#ifndef SEASTAR_MODULE
    +
    64#include <boost/container/static_vector.hpp>
    +
    65#include <boost/lockfree/spsc_queue.hpp>
    +
    66#include <boost/next_prior.hpp>
    +
    67#include <boost/range/irange.hpp>
    +
    68#include <boost/thread/barrier.hpp>
    +
    69#include <atomic>
    +
    70#include <cassert>
    +
    71#include <chrono>
    +
    72#include <cstring>
    +
    73#include <memory>
    +
    74#include <string_view>
    +
    75#include <unordered_map>
    +
    76#include <vector>
    +
    77#include <unistd.h>
    +
    78#include <sys/epoll.h>
    +
    79#include <sys/types.h>
    +
    80#include <sys/socket.h>
    +
    81#include <netinet/ip.h>
    +
    82
    +
    83#ifdef HAVE_OSV
    +
    84#include <osv/sched.hh>
    +
    85#include <osv/mutex.h>
    +
    86#include <osv/condvar.h>
    +
    87#include <osv/newpoll.hh>
    +
    88#endif
    +
    89#endif
    +
    90
    +
    91struct statfs;
    +
    92struct _Unwind_Exception;
    +
    93
    +
    94namespace seastar {
    +
    95
    +
    96using shard_id = unsigned;
    +
    97
    +
    98namespace alien {
    +
    99class instance;
    +
    100}
    +
    101SEASTAR_MODULE_EXPORT
    +
    102class reactor;
    +
    103
    +
    104}
    +
    105
    +
    106namespace std {
    +
    107
    +
    108template <>
    +
    109struct hash<::sockaddr_in> {
    +
    110 size_t operator()(::sockaddr_in a) const {
    +
    111 return a.sin_port ^ a.sin_addr.s_addr;
    +
    112 }
    +
    113};
    +
    114
    +
    115}
    +
    116
    +
    117bool operator==(const ::sockaddr_in a, const ::sockaddr_in b);
    +
    118
    +
    119namespace seastar {
    +
    120
    +
    121class thread_pool;
    +
    122class smp;
    +
    123
    +
    124class reactor_backend_selector;
    +
    125
    +
    126class reactor_backend;
    +
    127struct pollfn;
    +
    128
    +
    129namespace internal {
    +
    130
    +
    131class reactor_stall_sampler;
    +
    132class cpu_stall_detector;
    +
    133class buffer_allocator;
    +
    134class priority_class;
    +
    135class poller;
    +
    136
    +
    137size_t scheduling_group_count();
    +
    138
    +
    139void increase_thrown_exceptions_counter() noexcept;
    +
    140
    +
    141}
    +
    142
    +
    143class io_queue;
    +
    144SEASTAR_MODULE_EXPORT
    +
    145class io_intent;
    +
    146
    + +
    148public:
    +
    149 virtual void complete_with(ssize_t res) final override;
    +
    150
    +
    151 virtual void complete(size_t res) noexcept = 0;
    +
    152 virtual void set_exception(std::exception_ptr eptr) noexcept = 0;
    +
    153};
    +
    154
    +
    155SEASTAR_MODULE_EXPORT
    +
    156class reactor {
    +
    157private:
    +
    158 struct task_queue;
    +
    159 using task_queue_list = circular_buffer_fixed_capacity<task_queue*, 1 << log2ceil(max_scheduling_groups())>;
    +
    160 using pollfn = seastar::pollfn;
    +
    161
    +
    162 class signal_pollfn;
    +
    163 class batch_flush_pollfn;
    +
    164 class smp_pollfn;
    +
    165 class drain_cross_cpu_freelist_pollfn;
    +
    166 class lowres_timer_pollfn;
    +
    167 class manual_timer_pollfn;
    +
    168 class epoll_pollfn;
    +
    169 class reap_kernel_completions_pollfn;
    +
    170 class kernel_submit_work_pollfn;
    +
    171 class io_queue_submission_pollfn;
    +
    172 class syscall_pollfn;
    +
    173 class execution_stage_pollfn;
    +
    174 friend class manual_clock;
    +
    175 friend class file_data_source_impl; // for fstream statistics
    +
    176 friend class internal::reactor_stall_sampler;
    +
    177 friend class preempt_io_context;
    +
    178 friend struct hrtimer_aio_completion;
    +
    179 friend class reactor_backend_epoll;
    +
    180 friend class reactor_backend_aio;
    +
    181 friend class reactor_backend_uring;
    +
    182 friend class reactor_backend_selector;
    +
    183 friend class io_queue; // for aio statistics
    +
    184 friend struct reactor_options;
    +
    185 friend class aio_storage_context;
    +
    186public:
    +
    187 using poller = internal::poller;
    + + + +
    191
    +
    192 struct io_stats {
    +
    193 uint64_t aio_reads = 0;
    +
    194 uint64_t aio_read_bytes = 0;
    +
    195 uint64_t aio_writes = 0;
    +
    196 uint64_t aio_write_bytes = 0;
    +
    197 uint64_t aio_outsizes = 0;
    +
    198 uint64_t aio_errors = 0;
    +
    199 uint64_t fstream_reads = 0;
    +
    200 uint64_t fstream_read_bytes = 0;
    +
    201 uint64_t fstream_reads_blocked = 0;
    +
    202 uint64_t fstream_read_bytes_blocked = 0;
    +
    203 uint64_t fstream_read_aheads_discarded = 0;
    +
    204 uint64_t fstream_read_ahead_discarded_bytes = 0;
    +
    205 };
    +
    207 struct sched_stats {
    +
    211 uint64_t tasks_processed = 0;
    +
    212 };
    +
    213 friend void io_completion::complete_with(ssize_t);
    +
    214
    +
    217 alien::instance& alien() { return _alien; }
    +
    218
    +
    219private:
    +
    220 std::shared_ptr<smp> _smp;
    +
    221 alien::instance& _alien;
    +
    222 reactor_config _cfg;
    +
    223 file_desc _notify_eventfd;
    +
    224 file_desc _task_quota_timer;
    +
    225#ifdef HAVE_OSV
    +
    226 reactor_backend_osv _backend;
    +
    227 sched::thread _timer_thread;
    +
    228 sched::thread *_engine_thread;
    +
    229 mutable mutex _timer_mutex;
    +
    230 condvar _timer_cond;
    +
    231 s64 _timer_due = 0;
    +
    232#else
    +
    233 std::unique_ptr<reactor_backend> _backend;
    +
    234#endif
    +
    235 sigset_t _active_sigmask; // holds sigmask while sleeping with sig disabled
    +
    236 std::vector<pollfn*> _pollers;
    +
    237
    +
    238 static constexpr unsigned max_aio_per_queue = 128;
    +
    239 static constexpr unsigned max_queues = 8;
    +
    240 static constexpr unsigned max_aio = max_aio_per_queue * max_queues;
    +
    241
    +
    242 // Each mountpouint is controlled by its own io_queue, but ...
    +
    243 std::unordered_map<dev_t, std::unique_ptr<io_queue>> _io_queues;
    +
    244 // ... when dispatched all requests get into this single sink
    +
    245 internal::io_sink _io_sink;
    +
    246 unsigned _num_io_groups = 0;
    +
    247
    +
    248 std::vector<noncopyable_function<future<> ()>> _exit_funcs;
    +
    249 unsigned _id = 0;
    +
    250 bool _stopping = false;
    +
    251 bool _stopped = false;
    +
    252 bool _finished_running_tasks = false;
    +
    253 condition_variable _stop_requested;
    +
    254 std::optional<future<std::unique_ptr<network_stack>>> _network_stack_ready;
    +
    255 int _return = 0;
    +
    256 promise<> _start_promise;
    +
    257 semaphore _cpu_started;
    +
    258 internal::preemption_monitor _preemption_monitor{};
    +
    259 uint64_t _global_tasks_processed = 0;
    +
    260 uint64_t _polls = 0;
    +
    261 metrics::internal::time_estimated_histogram _stalls_histogram;
    +
    262 std::unique_ptr<internal::cpu_stall_detector> _cpu_stall_detector;
    +
    263
    +
    264 timer<>::set_t _timers;
    +
    265 timer<>::set_t::timer_list_t _expired_timers;
    +
    266 timer<lowres_clock>::set_t _lowres_timers;
    +
    267 timer<lowres_clock>::set_t::timer_list_t _expired_lowres_timers;
    +
    268 timer<manual_clock>::set_t _manual_timers;
    +
    269 timer<manual_clock>::set_t::timer_list_t _expired_manual_timers;
    +
    270 io_stats _io_stats;
    +
    271 uint64_t _fsyncs = 0;
    +
    272 uint64_t _cxx_exceptions = 0;
    +
    273 uint64_t _abandoned_failed_futures = 0;
    +
    274 struct task_queue {
    +
    275 explicit task_queue(unsigned id, sstring name, sstring shortname, float shares);
    +
    276 int64_t _vruntime = 0;
    +
    277 float _shares;
    +
    278 int64_t _reciprocal_shares_times_2_power_32;
    +
    279 bool _active = false;
    +
    280 uint8_t _id;
    +
    281 sched_clock::time_point _ts; // to help calculating wait/starve-times
    +
    282 sched_clock::duration _runtime = {};
    +
    283 sched_clock::duration _waittime = {};
    +
    284 sched_clock::duration _starvetime = {};
    +
    285 uint64_t _tasks_processed = 0;
    +
    286 circular_buffer<task*> _q;
    +
    287 sstring _name;
    +
    288 // the shortened version of scheduling_gruop's name, only the first 4
    +
    289 // chars are used.
    +
    290 static constexpr size_t shortname_size = 4;
    +
    291 sstring _shortname;
    +
    292 int64_t to_vruntime(sched_clock::duration runtime) const;
    +
    293 void set_shares(float shares) noexcept;
    +
    294 struct indirect_compare;
    +
    295 sched_clock::duration _time_spent_on_task_quota_violations = {};
    + +
    297 void rename(sstring new_name, sstring new_shortname);
    +
    298 private:
    +
    299 void register_stats();
    +
    300 };
    +
    301
    +
    302 boost::container::static_vector<std::unique_ptr<task_queue>, max_scheduling_groups()> _task_queues;
    +
    303 internal::scheduling_group_specific_thread_local_data _scheduling_group_specific_data;
    +
    304 int64_t _last_vruntime = 0;
    +
    305 task_queue_list _active_task_queues;
    +
    306 task_queue_list _activating_task_queues;
    +
    307 task_queue* _at_destroy_tasks;
    +
    308 task* _current_task = nullptr;
    + +
    318 std::unique_ptr<network_stack> _network_stack;
    +
    319 lowres_clock::time_point _lowres_next_timeout = lowres_clock::time_point::max();
    +
    320 std::optional<pollable_fd> _aio_eventfd;
    +
    321 const bool _reuseport;
    +
    322 circular_buffer<double> _loads;
    +
    323 double _load = 0;
    +
    324 sched_clock::duration _total_idle{0};
    +
    325 sched_clock::duration _total_sleep;
    +
    326 sched_clock::time_point _start_time = now();
    +
    327 output_stream<char>::batch_flush_list_t _flush_batching;
    +
    328 std::atomic<bool> _sleeping alignas(seastar::cache_line_size){0};
    +
    329 pthread_t _thread_id alignas(seastar::cache_line_size) = pthread_self();
    +
    330 std::atomic<bool> _dying{false};
    +
    331 gate _background_gate;
    +
    332
    +
    333private:
    +
    334 static std::chrono::nanoseconds calculate_poll_time();
    +
    335 static void block_notifier(int);
    +
    336 bool flush_pending_aio();
    +
    337 steady_clock_type::time_point next_pending_aio() const noexcept;
    +
    338 bool reap_kernel_completions();
    +
    339 bool flush_tcp_batches();
    +
    340 void update_lowres_clocks() noexcept;
    +
    341 bool do_expire_lowres_timers() noexcept;
    +
    342 bool do_check_lowres_timers() const noexcept;
    +
    343 void expire_manual_timers() noexcept;
    +
    344 void start_aio_eventfd_loop();
    +
    345 void stop_aio_eventfd_loop();
    +
    346
    +
    353 bool poll_once();
    +
    354 bool pure_poll_once();
    +
    355public:
    +
    357 void handle_signal(int signo, noncopyable_function<void ()>&& handler);
    +
    358 void wakeup();
    +
    360 bool stopped() const noexcept { return _stopped; }
    +
    361
    +
    362private:
    +
    363 class signals {
    +
    364 public:
    +
    365 signals();
    +
    366 ~signals();
    +
    367
    +
    368 bool poll_signal();
    +
    369 bool pure_poll_signal() const;
    +
    370 void handle_signal(int signo, noncopyable_function<void ()>&& handler);
    +
    371 void handle_signal_once(int signo, noncopyable_function<void ()>&& handler);
    +
    372 static void action(int signo, siginfo_t* siginfo, void* ignore);
    +
    373 static void failed_to_handle(int signo);
    +
    374 private:
    +
    375 struct signal_handler {
    +
    376 signal_handler(int signo, noncopyable_function<void ()>&& handler);
    +
    377 noncopyable_function<void ()> _handler;
    +
    378 };
    +
    379 std::atomic<uint64_t> _pending_signals;
    +
    380 std::unordered_map<int, signal_handler> _signal_handlers;
    +
    381 };
    +
    382
    +
    383 signals _signals;
    +
    384 std::unique_ptr<thread_pool> _thread_pool;
    +
    385 friend class thread_pool;
    +
    386 friend class thread_context;
    +
    387 friend class internal::cpu_stall_detector;
    +
    388
    +
    389 uint64_t pending_task_count() const;
    +
    390 void run_tasks(task_queue& tq);
    +
    391 bool have_more_tasks() const;
    +
    392 bool posix_reuseport_detect();
    +
    393 void run_some_tasks();
    +
    394 void activate(task_queue& tq);
    +
    395 void insert_active_task_queue(task_queue* tq);
    +
    396 task_queue* pop_active_task_queue(sched_clock::time_point now);
    +
    397 void insert_activating_task_queues();
    +
    398 void account_runtime(task_queue& tq, sched_clock::duration runtime);
    +
    399 void account_idle(sched_clock::duration idletime);
    +
    400 void allocate_scheduling_group_specific_data(scheduling_group sg, unsigned long key_id);
    +
    401 future<> rename_scheduling_group_specific_data(scheduling_group sg);
    +
    402 future<> init_scheduling_group(scheduling_group sg, sstring name, sstring shortname, float shares);
    +
    403 future<> init_new_scheduling_group_key(scheduling_group_key key, scheduling_group_key_config cfg);
    +
    404 future<> destroy_scheduling_group(scheduling_group sg) noexcept;
    +
    405 uint64_t tasks_processed() const;
    +
    406 uint64_t min_vruntime() const;
    +
    407 void request_preemption();
    +
    408 void start_handling_signal();
    +
    409 void reset_preemption_monitor();
    +
    410 void service_highres_timer() noexcept;
    +
    411
    +
    412 future<std::tuple<pollable_fd, socket_address>>
    +
    413 do_accept(pollable_fd_state& listen_fd);
    +
    414 future<> do_connect(pollable_fd_state& pfd, socket_address& sa);
    +
    415
    +
    416 future<size_t>
    +
    417 do_read(pollable_fd_state& fd, void* buffer, size_t size);
    +
    418 future<size_t>
    +
    419 do_recvmsg(pollable_fd_state& fd, const std::vector<iovec>& iov);
    +
    420 future<temporary_buffer<char>>
    +
    421 do_read_some(pollable_fd_state& fd, internal::buffer_allocator* ba);
    +
    422
    +
    423 future<size_t>
    +
    424 do_send(pollable_fd_state& fd, const void* buffer, size_t size);
    +
    425 future<size_t>
    +
    426 do_sendmsg(pollable_fd_state& fd, net::packet& p);
    +
    427
    +
    428 future<temporary_buffer<char>>
    +
    429 do_recv_some(pollable_fd_state& fd, internal::buffer_allocator* ba);
    +
    430
    +
    431 void configure(const reactor_options& opts);
    +
    432 int do_run();
    +
    433public:
    +
    434 explicit reactor(std::shared_ptr<smp> smp, alien::instance& alien, unsigned id, reactor_backend_selector rbs, reactor_config cfg);
    +
    435 reactor(const reactor&) = delete;
    +
    436 ~reactor();
    +
    437 void operator=(const reactor&) = delete;
    +
    438
    +
    439 static sched_clock::time_point now() noexcept {
    +
    440 return sched_clock::now();
    +
    441 }
    +
    442 sched_clock::duration uptime() {
    +
    443 return now() - _start_time;
    +
    444 }
    +
    445
    +
    446 io_queue& get_io_queue(dev_t devid = 0) {
    +
    447 auto queue = _io_queues.find(devid);
    +
    448 if (queue == _io_queues.end()) {
    +
    449 return *_io_queues.at(0);
    +
    450 } else {
    +
    451 return *(queue->second);
    +
    452 }
    +
    453 }
    +
    454
    +
    455#if SEASTAR_API_LEVEL < 7
    +
    456 [[deprecated("Use io_priority_class::register_one")]]
    +
    457 io_priority_class register_one_priority_class(sstring name, uint32_t shares);
    +
    458
    +
    459 [[deprecated("Use io_priority_class.update_shares")]]
    +
    460 future<> update_shares_for_class(io_priority_class pc, uint32_t shares);
    +
    461
    +
    462 [[deprecated("Use io_priority_class.rename")]]
    +
    463 static future<> rename_priority_class(io_priority_class pc, sstring new_name) noexcept;
    +
    464#endif
    +
    465
    +
    467 future<> update_bandwidth_for_queues(internal::priority_class pc, uint64_t bandwidth);
    +
    469 void rename_queues(internal::priority_class pc, sstring new_name);
    +
    471 void update_shares_for_queues(internal::priority_class pc, uint32_t shares);
    +
    472
    +
    473 server_socket listen(socket_address sa, listen_options opts = {});
    +
    474
    +
    475 future<connected_socket> connect(socket_address sa);
    +
    476 future<connected_socket> connect(socket_address, socket_address, transport proto = transport::TCP);
    +
    477
    +
    478 pollable_fd posix_listen(socket_address sa, listen_options opts = {});
    +
    479
    +
    480 bool posix_reuseport_available() const { return _reuseport; }
    +
    481
    +
    482 pollable_fd make_pollable_fd(socket_address sa, int proto);
    +
    483
    +
    484 future<> posix_connect(pollable_fd pfd, socket_address sa, socket_address local);
    +
    485
    +
    486 future<> send_all(pollable_fd_state& fd, const void* buffer, size_t size);
    +
    487
    +
    488 future<file> open_file_dma(std::string_view name, open_flags flags, file_open_options options = {}) noexcept;
    +
    489 future<file> open_directory(std::string_view name) noexcept;
    +
    490 future<> make_directory(std::string_view name, file_permissions permissions = file_permissions::default_dir_permissions) noexcept;
    +
    491 future<> touch_directory(std::string_view name, file_permissions permissions = file_permissions::default_dir_permissions) noexcept;
    +
    492 future<std::optional<directory_entry_type>> file_type(std::string_view name, follow_symlink = follow_symlink::yes) noexcept;
    +
    493 future<stat_data> file_stat(std::string_view pathname, follow_symlink) noexcept;
    +
    494 future<uint64_t> file_size(std::string_view pathname) noexcept;
    +
    495 future<bool> file_accessible(std::string_view pathname, access_flags flags) noexcept;
    +
    496 future<bool> file_exists(std::string_view pathname) noexcept {
    +
    497 return file_accessible(pathname, access_flags::exists);
    +
    498 }
    +
    499 future<fs_type> file_system_at(std::string_view pathname) noexcept;
    +
    500 future<struct statvfs> statvfs(std::string_view pathname) noexcept;
    +
    501 future<> remove_file(std::string_view pathname) noexcept;
    +
    502 future<> rename_file(std::string_view old_pathname, std::string_view new_pathname) noexcept;
    +
    503 future<> link_file(std::string_view oldpath, std::string_view newpath) noexcept;
    +
    504 future<> chmod(std::string_view name, file_permissions permissions) noexcept;
    +
    505
    +
    506 future<size_t> read_directory(int fd, char* buffer, size_t buffer_size);
    +
    507
    +
    508 future<int> inotify_add_watch(int fd, std::string_view path, uint32_t flags);
    +
    509
    +
    510 future<std::tuple<file_desc, file_desc>> make_pipe();
    +
    511 future<std::tuple<pid_t, file_desc, file_desc, file_desc>>
    +
    512 spawn(std::string_view pathname,
    +
    513 std::vector<sstring> argv,
    +
    514 std::vector<sstring> env = {});
    +
    515 future<int> waitpid(pid_t pid);
    +
    516 void kill(pid_t pid, int sig);
    +
    517
    +
    518 int run() noexcept;
    +
    519 void exit(int ret);
    +
    520 future<> when_started() { return _start_promise.get_future(); }
    +
    521 // The function waits for timeout period for reactor stop notification
    +
    522 // which happens on termination signals or call for exit().
    +
    523 template <typename Rep, typename Period>
    +
    524 future<> wait_for_stop(std::chrono::duration<Rep, Period> timeout) {
    +
    525 return _stop_requested.wait(timeout, [this] { return _stopping; });
    +
    526 }
    +
    527
    +
    528 void at_exit(noncopyable_function<future<> ()> func);
    +
    529
    +
    530 template <typename Func>
    +
    531 void at_destroy(Func&& func) {
    +
    532 _at_destroy_tasks->_q.push_back(make_task(default_scheduling_group(), std::forward<Func>(func)));
    +
    533 }
    +
    534
    +
    535 task* current_task() const { return _current_task; }
    +
    536 // If a task wants to resume a different task instead of returning control to the reactor,
    +
    537 // it should set _current_task to the resumed task.
    +
    538 // In particular, this is mandatory if the task is going to die before control is returned
    +
    539 // to the reactor -- otherwise _current_task will be left dangling.
    +
    540 void set_current_task(task* t) { _current_task = t; }
    +
    541
    +
    542 void add_task(task* t) noexcept;
    +
    543 void add_urgent_task(task* t) noexcept;
    +
    544
    +
    545 void run_in_background(future<> f);
    +
    546
    +
    547 template <typename Func>
    +
    548 void run_in_background(Func&& func) {
    +
    549 run_in_background(futurize_invoke(std::forward<Func>(func)));
    +
    550 }
    +
    551
    +
    552 // Waits for all background tasks on all shards
    +
    553 static future<> drain();
    +
    554
    + +
    564 _idle_cpu_handler = std::move(handler);
    +
    565 }
    +
    566 void force_poll();
    +
    567
    +
    568 void add_high_priority_task(task*) noexcept;
    +
    569
    +
    570 network_stack& net() { return *_network_stack; }
    +
    571
    +
    572 [[deprecated("Use this_shard_id")]]
    +
    573 shard_id cpu_id() const;
    +
    574
    +
    575 void sleep();
    +
    576
    +
    577 steady_clock_type::duration total_idle_time();
    +
    578 steady_clock_type::duration total_busy_time();
    +
    579 std::chrono::nanoseconds total_steal_time();
    +
    580
    +
    581 const io_stats& get_io_stats() const { return _io_stats; }
    + +
    588 uint64_t abandoned_failed_futures() const { return _abandoned_failed_futures; }
    +
    589#ifdef HAVE_OSV
    +
    590 void timer_thread_func();
    +
    591 void set_timer(sched::timer &tmr, s64 t);
    +
    592#endif
    +
    593private:
    +
    602 void register_poller(pollfn* p);
    +
    603 void unregister_poller(pollfn* p);
    +
    604 void replace_poller(pollfn* old, pollfn* neww);
    +
    605 void register_metrics();
    +
    606 future<> send_all_part(pollable_fd_state& fd, const void* buffer, size_t size, size_t completed);
    +
    607
    +
    608 future<> fdatasync(int fd) noexcept;
    +
    609
    +
    610 void add_timer(timer<steady_clock_type>*) noexcept;
    +
    611 bool queue_timer(timer<steady_clock_type>*) noexcept;
    +
    612 void del_timer(timer<steady_clock_type>*) noexcept;
    +
    613 void add_timer(timer<lowres_clock>*) noexcept;
    +
    614 bool queue_timer(timer<lowres_clock>*) noexcept;
    +
    615 void del_timer(timer<lowres_clock>*) noexcept;
    +
    616 void add_timer(timer<manual_clock>*) noexcept;
    +
    617 bool queue_timer(timer<manual_clock>*) noexcept;
    +
    618 void del_timer(timer<manual_clock>*) noexcept;
    +
    619
    +
    620 future<> run_exit_tasks();
    +
    621 void stop();
    +
    622 friend class pollable_fd;
    +
    623 friend class pollable_fd_state;
    +
    624 friend class posix_file_impl;
    +
    625 friend class blockdev_file_impl;
    +
    626 friend class timer<>;
    +
    627 friend class timer<lowres_clock>;
    +
    628 friend class timer<manual_clock>;
    +
    629 friend class smp;
    +
    630 friend class internal::poller;
    +
    631 friend class scheduling_group;
    +
    632 friend void internal::add_to_flush_poller(output_stream<char>& os) noexcept;
    +
    633 friend void seastar::internal::increase_thrown_exceptions_counter() noexcept;
    +
    634 friend void report_failed_future(const std::exception_ptr& eptr) noexcept;
    +
    635 metrics::metric_groups _metric_groups;
    +
    636 friend future<scheduling_group> create_scheduling_group(sstring name, sstring shortname, float shares) noexcept;
    + +
    638 friend future<> seastar::rename_scheduling_group(scheduling_group sg, sstring new_name, sstring new_shortname) noexcept;
    + +
    640
    +
    641 future<struct statfs> fstatfs(int fd) noexcept;
    +
    642 friend future<shared_ptr<file_impl>> make_file_impl(int fd, file_open_options options, int flags, struct stat st) noexcept;
    +
    643public:
    +
    644 future<> readable(pollable_fd_state& fd);
    +
    645 future<> writeable(pollable_fd_state& fd);
    +
    646 future<> readable_or_writeable(pollable_fd_state& fd);
    +
    647 future<> poll_rdhup(pollable_fd_state& fd);
    +
    648 void enable_timer(steady_clock_type::time_point when) noexcept;
    +
    658 void set_strict_dma(bool value);
    +
    659 void set_bypass_fsync(bool value);
    +
    660 void update_blocked_reactor_notify_ms(std::chrono::milliseconds ms);
    +
    661 std::chrono::milliseconds get_blocked_reactor_notify_ms() const;
    +
    662
    +
    663 class test {
    +
    664 public:
    +
    665 static void with_allow_abandoned_failed_futures(unsigned count, noncopyable_function<void ()> func);
    +
    666
    +
    670 static void set_stall_detector_report_function(std::function<void ()> report);
    +
    671 static std::function<void ()> get_stall_detector_report_function();
    +
    672 };
    +
    673};
    +
    674
    +
    675extern __thread reactor* local_engine;
    +
    676extern __thread size_t task_quota;
    +
    677
    +
    678SEASTAR_MODULE_EXPORT
    +
    679inline reactor& engine() {
    +
    680 return *local_engine;
    +
    681}
    +
    682
    +
    683SEASTAR_MODULE_EXPORT
    +
    684inline bool engine_is_ready() {
    +
    685 return local_engine != nullptr;
    +
    686}
    +
    687
    +
    688inline int hrtimer_signal() {
    +
    689 // We don't want to use SIGALRM, because the boost unit test library
    +
    690 // also plays with it.
    +
    691 return SIGRTMIN;
    +
    692}
    +
    693
    +
    694
    +
    695extern logger seastar_logger;
    +
    696
    +
    697}
    + +
    Definition: alien.hh:119
    + +
    Definition: circular_buffer_fixed_capacity.hh:53
    +
    Conditional variable.
    Definition: condition-variable.hh:72
    +
    future wait() noexcept
    Definition: condition-variable.hh:205
    +
    Definition: posix.hh:85
    +
    Definition: file.hh:119
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: reactor.hh:147
    +
    Definition: io_queue.hh:89
    +
    Definition: io_desc.hh:28
    +
    Low-resolution and efficient steady clock.
    Definition: lowres_clock.hh:56
    +
    Definition: manual_clock.hh:35
    +
    holds the metric definition.
    Definition: metrics_registration.hh:94
    +
    Definition: api.hh:429
    + +
    Definition: pollable_fd.hh:62
    +
    Definition: pollable_fd.hh:136
    + +
    Definition: reactor.hh:663
    +
    static void set_stall_detector_report_function(std::function< void()> report)
    +
    Definition: reactor.hh:156
    +
    sched_stats get_sched_stats() const
    +
    void set_idle_cpu_handler(idle_cpu_handler &&handler)
    Definition: reactor.hh:563
    +
    alien::instance & alien()
    Definition: reactor.hh:217
    +
    Definition: reactor.hh:192
    +
    Scheduling statistics.
    Definition: reactor.hh:207
    +
    Definition: scheduling.hh:183
    +
    Identifies function calls that are accounted as a group.
    Definition: scheduling.hh:285
    +
    Definition: shared_ptr.hh:513
    +
    Definition: smp.hh:314
    +
    Definition: task.hh:34
    +
    Definition: timer.hh:83
    +
    future touch_directory(std::string_view name, file_permissions permissions=file_permissions::default_dir_permissions) noexcept
    +
    future remove_file(std::string_view name) noexcept
    +
    future rename_file(std::string_view old_name, std::string_view new_name) noexcept
    +
    future chmod(std::string_view name, file_permissions permissions) noexcept
    +
    future< uint64_t > file_size(std::string_view name) noexcept
    +
    future< bool > file_exists(std::string_view name) noexcept
    +
    future< fs_type > file_system_at(std::string_view name) noexcept
    +
    future< bool > file_accessible(std::string_view name, access_flags flags) noexcept
    +
    future link_file(std::string_view oldpath, std::string_view newpath) noexcept
    +
    future< std::optional< directory_entry_type > > file_type(std::string_view name, follow_symlink follow=follow_symlink::yes) noexcept
    +
    open_flags
    Definition: file-types.hh:41
    +
    future< stat_data > file_stat(std::string_view name, follow_symlink fs=follow_symlink::yes) noexcept
    +
    future make_directory(std::string_view name, file_permissions permissions=file_permissions::default_dir_permissions) noexcept
    +
    future< T > get_future() noexcept
    Gets the promise's associated future.
    Definition: future.hh:1926
    +
    future now()
    Returns a ready future.
    Definition: later.hh:35
    +
    future< std::tuple< file_desc, file_desc > > make_pipe()
    +
    server_socket listen(socket_address sa)
    +
    future< connected_socket > connect(socket_address sa)
    + +
    holds the metric_groups definition needed by class that reports metrics
    +
    future configure(const options &opts)
    set the metrics configuration
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    const noncopyable_function< bool()> & work_waiting_on_reactor
    Definition: idle_cpu_handler.hh:46
    +
    future sleep(std::chrono::duration< Rep, Period > dur)
    Definition: sleep.hh:48
    +
    future destroy_scheduling_group(scheduling_group sg) noexcept
    +
    future rename_scheduling_group(scheduling_group sg, sstring new_name) noexcept
    +
    idle_cpu_handler_result
    Definition: idle_cpu_handler.hh:37
    +
    @ no_more_work
    The user callback has no more work to perform.
    +
    noncopyable_function< idle_cpu_handler_result(work_waiting_on_reactor poll)> idle_cpu_handler
    Definition: idle_cpu_handler.hh:52
    +
    future< scheduling_group > create_scheduling_group(sstring name, float shares) noexcept
    +
    future< scheduling_group_key > scheduling_group_key_create(scheduling_group_key_config cfg) noexcept
    +
    Definition: noncopyable_function.hh:37
    +
    STL namespace.
    + + +
    Definition: file.hh:88
    +
    Definition: poll.hh:26
    +
    Configuration for the reactor.
    Definition: reactor_config.hh:53
    +
    Definition: scheduling.hh:143
    + +
    + + + + diff --git a/master/reactor__config_8hh_source.html b/master/reactor__config_8hh_source.html new file mode 100644 index 000000000..cf2f2239b --- /dev/null +++ b/master/reactor__config_8hh_source.html @@ -0,0 +1,192 @@ + + + + + + + +Seastar: seastar/core/reactor_config.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    reactor_config.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2019 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/util/program-options.hh>
    +
    25#include <seastar/util/memory_diagnostics.hh>
    +
    26#include <seastar/util/modules.hh>
    + +
    28
    +
    29namespace seastar {
    +
    30
    +
    32struct reactor_config {
    +
    33 sched_clock::duration task_quota;
    +
    34 std::chrono::nanoseconds max_poll_time;
    +
    35 bool handle_sigint = true;
    +
    36 bool auto_handle_sigint_sigterm = true;
    +
    37 unsigned max_networking_aio_io_control_blocks = 10000;
    +
    38 bool force_io_getevents_syscall = false;
    +
    39 bool kernel_page_cache = false;
    +
    40 bool have_aio_fsync = false;
    +
    41 unsigned max_task_backlog = 1000;
    +
    42 bool strict_o_direct = true;
    +
    43 bool bypass_fsync = false;
    +
    44 bool no_poll_aio = false;
    +
    45};
    +
    47
    +
    48class reactor_backend_selector;
    +
    49class network_stack_factory;
    +
    50
    +
    52SEASTAR_MODULE_EXPORT
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    178
    +
    180 std::string _argv0;
    +
    181 bool _auto_handle_sigint_sigterm = true;
    +
    183
    +
    184public:
    + +
    188};
    +
    189
    +
    190}
    +
    Definition: program-options.hh:292
    + +
    Definition: program-options.hh:416
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    + +
    Configuration for the reactor.
    Definition: reactor_config.hh:53
    +
    program_options::value abort_on_seastar_bad_alloc
    Abort when seastar allocator cannot allocate memory.
    Definition: reactor_config.hh:131
    +
    program_options::value overprovisioned
    Run in an overprovisioned environment (such as docker or a laptop).
    Definition: reactor_config.hh:129
    +
    program_options::value< bool > linux_aio_nowait
    Use the Linux NOWAIT AIO feature, which reduces reactor stalls due to aio (autodetected).
    Definition: reactor_config.hh:111
    +
    program_options::value< double > io_latency_goal_ms
    Max time (ms) IO operations must take.
    Definition: reactor_config.hh:79
    +
    program_options::value relaxed_dma
    Allow using buffered I/O if DMA is not available (reduces performance).
    Definition: reactor_config.hh:108
    +
    program_options::value< memory::alloc_failure_kind > dump_memory_diagnostics_on_alloc_failure_kind
    Dump diagnostics of the seastar allocator state on allocation failure.
    Definition: reactor_config.hh:146
    +
    program_options::value poll_mode
    Poll continuously (100% cpu use).
    Definition: reactor_config.hh:63
    +
    program_options::value< double > task_quota_ms
    Max time (ms) between polls.
    Definition: reactor_config.hh:75
    +
    program_options::value< unsigned > max_networking_io_control_blocks
    Maximum number of I/O control blocks (IOCBs) to allocate per shard.
    Definition: reactor_config.hh:167
    +
    program_options::value no_handle_interrupt
    Ignore SIGINT (for gdb).
    Definition: reactor_config.hh:177
    +
    program_options::value< bool > force_aio_syscalls
    Force io_getevents(2) to issue a system call, instead of bypassing the kernel when possible.
    Definition: reactor_config.hh:137
    +
    program_options::value< bool > blocked_reactor_report_format_oneline
    Print a simplified backtrace on a single line.
    Definition: reactor_config.hh:106
    +
    program_options::value< double > io_flow_ratio_threshold
    Definition: reactor_config.hh:87
    +
    program_options::selection_value< reactor_backend_selector > reactor_backend
    Internal reactor implementation.
    Definition: reactor_config.hh:155
    +
    program_options::value< unsigned > heapprof
    Enable seastar heap profiling.
    Definition: reactor_config.hh:175
    +
    program_options::value< bool > poll_aio
    Busy-poll for disk I/O.
    Definition: reactor_config.hh:71
    +
    program_options::value< bool > kernel_page_cache
    Use the kernel page cache.
    Definition: reactor_config.hh:122
    +
    program_options::value< unsigned > blocked_reactor_notify_ms
    Threshold in milliseconds over which the reactor is considered blocked if no progress is made.
    Definition: reactor_config.hh:98
    +
    program_options::value< unsigned > blocked_reactor_reports_per_minute
    Maximum number of backtraces reported by stall detector per minute.
    Definition: reactor_config.hh:102
    +
    program_options::value< bool > aio_fsync
    Use Linux aio for fsync() calls.
    Definition: reactor_config.hh:159
    +
    program_options::value< bool > unsafe_bypass_fsync
    Bypass fsync(), may result in data loss.
    Definition: reactor_config.hh:116
    +
    program_options::value< unsigned > max_task_backlog
    Maximum number of task backlog to allow.
    Definition: reactor_config.hh:93
    +
    program_options::value< unsigned > idle_poll_time_us
    Idle polling time in microseconds.
    Definition: reactor_config.hh:67
    +
    program_options::selection_value< network_stack_factory > network_stack
    Select network stack to use.
    Definition: reactor_config.hh:61
    +
    + + + + diff --git a/master/read__first__line_8hh_source.html b/master/read__first__line_8hh_source.html new file mode 100644 index 000000000..6fd191e72 --- /dev/null +++ b/master/read__first__line_8hh_source.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: seastar/util/read_first_line.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    read_first_line.hh
    +
    +
    +
    1#include <filesystem>
    +
    2#include <seastar/core/sstring.hh>
    +
    3#ifndef SEASTAR_MODULE
    +
    4#include <boost/lexical_cast.hpp>
    +
    5#endif
    +
    6
    +
    7namespace seastar {
    +
    8
    +
    9sstring read_first_line(std::filesystem::path sys_file);
    +
    10
    +
    11template <typename Type>
    +
    12Type read_first_line_as(std::filesystem::path sys_file) {
    +
    13 return boost::lexical_cast<Type>(read_first_line(sys_file));
    +
    14}
    +
    15
    +
    16}
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/read__state_8hh_source.html b/master/read__state_8hh_source.html new file mode 100644 index 000000000..8752c41fb --- /dev/null +++ b/master/read__state_8hh_source.html @@ -0,0 +1,181 @@ + + + + + + + +Seastar: seastar/core/internal/read_state.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    read_state.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2021 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <cstring>
    +
    26#endif
    +
    27
    +
    28#include <seastar/core/align.hh>
    +
    29#include <seastar/core/internal/io_intent.hh>
    +
    30#include <seastar/core/temporary_buffer.hh>
    +
    31
    +
    32namespace seastar {
    +
    33namespace internal {
    +
    34
    +
    35template <typename CharType>
    +
    36struct file_read_state {
    +
    37 typedef temporary_buffer<CharType> tmp_buf_type;
    +
    38
    +
    39 file_read_state(uint64_t offset, uint64_t front, size_t to_read,
    +
    40 size_t memory_alignment, size_t disk_alignment, io_intent* intent)
    +
    41 : buf(tmp_buf_type::aligned(memory_alignment,
    +
    42 align_up(to_read, disk_alignment)))
    +
    43 , _offset(offset)
    +
    44 , _to_read(to_read)
    +
    45 , _front(front)
    +
    46 , _iref(intent) {}
    +
    47
    +
    48 bool done() const {
    +
    49 return eof || pos >= _to_read;
    +
    50 }
    +
    51
    +
    59 void trim_buf_before_ret() {
    +
    60 if (have_good_bytes()) {
    +
    61 buf.trim(pos);
    +
    62 buf.trim_front(_front);
    +
    63 } else {
    +
    64 buf.trim(0);
    +
    65 }
    +
    66 }
    +
    67
    +
    68 uint64_t cur_offset() const {
    +
    69 return _offset + pos;
    +
    70 }
    +
    71
    +
    72 size_t left_space() const {
    +
    73 return buf.size() - pos;
    +
    74 }
    +
    75
    +
    76 size_t left_to_read() const {
    +
    77 // positive as long as (done() == false)
    +
    78 return _to_read - pos;
    +
    79 }
    +
    80
    +
    81 void append_new_data(tmp_buf_type& new_data) {
    +
    82 auto to_copy = std::min(left_space(), new_data.size());
    +
    83
    +
    84 std::memcpy(buf.get_write() + pos, new_data.get(), to_copy);
    +
    85 pos += to_copy;
    +
    86 }
    +
    87
    +
    88 bool have_good_bytes() const {
    +
    89 return pos > _front;
    +
    90 }
    +
    91
    +
    92 io_intent* get_intent() {
    +
    93 return _iref.retrieve();
    +
    94 }
    +
    95
    +
    96public:
    +
    97 bool eof = false;
    +
    98 tmp_buf_type buf;
    +
    99 size_t pos = 0;
    +
    100private:
    +
    101 uint64_t _offset;
    +
    102 size_t _to_read;
    +
    103 uint64_t _front;
    +
    104 internal::intent_reference _iref;
    +
    105};
    +
    106
    +
    107} // namespace internal
    +
    108} // namespace seastar
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/reference__wrapper_8hh_source.html b/master/reference__wrapper_8hh_source.html new file mode 100644 index 000000000..c2b2c93d8 --- /dev/null +++ b/master/reference__wrapper_8hh_source.html @@ -0,0 +1,139 @@ + + + + + + + +Seastar: seastar/util/reference_wrapper.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    reference_wrapper.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2017 ScyllaDB Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24namespace seastar {
    +
    25
    +
    28
    +
    42template<typename T>
    + +
    44 T* _pointer;
    +
    45
    +
    46 explicit reference_wrapper(T& object) noexcept : _pointer(&object) { }
    +
    47
    +
    48 template<typename U>
    +
    49 friend reference_wrapper<U> ref(U&) noexcept;
    +
    50 template<typename U>
    +
    51 friend reference_wrapper<const U> cref(const U&) noexcept;
    +
    52public:
    +
    53 using type = T;
    +
    54
    +
    55 operator T&() const noexcept { return *_pointer; }
    +
    56 T& get() const noexcept { return *_pointer; }
    +
    57
    +
    58};
    +
    59
    +
    61template<typename T>
    +
    62inline reference_wrapper<T> ref(T& object) noexcept {
    +
    63 return reference_wrapper<T>(object);
    +
    64}
    +
    65
    +
    67template<typename T>
    +
    68inline reference_wrapper<const T> cref(const T& object) noexcept {
    +
    69 return reference_wrapper<const T>(object);
    +
    70}
    +
    71
    +
    73
    +
    74}
    +
    Definition: reference_wrapper.hh:43
    +
    reference_wrapper< T > ref(T &object) noexcept
    Wraps reference in a reference_wrapper.
    Definition: reference_wrapper.hh:62
    +
    reference_wrapper< const T > cref(const T &object) noexcept
    Wraps constant reference in a reference_wrapper.
    Definition: reference_wrapper.hh:68
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/relabel__config_8hh_source.html b/master/relabel__config_8hh_source.html new file mode 100644 index 000000000..cf4d15051 --- /dev/null +++ b/master/relabel__config_8hh_source.html @@ -0,0 +1,173 @@ + + + + + + + +Seastar: seastar/core/relabel_config.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    relabel_config.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2022 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <regex>
    +
    26#endif
    +
    27#include <seastar/util/modules.hh>
    +
    28
    +
    29namespace seastar {
    +
    30namespace metrics {
    +
    31
    +
    32SEASTAR_MODULE_EXPORT_BEGIN
    +
    33
    + +
    41 std::string _regex_str;
    +
    42 std::regex _regex;
    +
    43public:
    +
    44 relabel_config_regex() = default;
    +
    45 relabel_config_regex(const std::string& expr) : _regex_str(expr), _regex(std::regex(expr)) {}
    +
    46 relabel_config_regex(const char* expr) : _regex_str(expr), _regex(std::regex(expr)) {}
    +
    47 const std::string& str() const noexcept {
    +
    48 return _regex_str;
    +
    49 }
    +
    50 const std::regex& regex() const noexcept {
    +
    51 return _regex;
    +
    52 }
    +
    53
    +
    54 relabel_config_regex& operator=(const char* expr) {
    +
    55 std::string str(expr);
    +
    56 return operator=(str);
    +
    57 }
    +
    58
    +
    59 relabel_config_regex& operator=(const std::string& expr) {
    +
    60 _regex_str = expr;
    +
    61 _regex = std::regex(_regex_str);
    +
    62 return *this;
    +
    63 }
    +
    64 bool empty() const noexcept {
    +
    65 return _regex_str.empty();
    +
    66 }
    +
    67
    +
    68 bool match(const std::string& str) const noexcept {
    +
    69 return !empty() && std::regex_match(str, _regex);
    +
    70 }
    +
    71};
    +
    72
    + +
    102 enum class relabel_action {skip_when_empty, report_when_empty, replace, keep, drop, drop_label};
    +
    103 std::vector<std::string> source_labels;
    +
    104 std::string target_label;
    +
    105 std::string replacement = "${1}";
    +
    106 relabel_config_regex expr = "(.*)";
    +
    107 relabel_action action = relabel_action::replace;
    +
    108 std::string separator = ";";
    +
    109};
    +
    110
    +
    114relabel_config::relabel_action relabel_config_action(const std::string& action);
    +
    115
    + +
    130 std::string name;
    +
    131 relabel_config_regex regex_name = "";
    +
    132 std::vector<std::string> aggregate_labels;
    +
    133};
    +
    134
    +
    135SEASTAR_MODULE_EXPORT_END
    +
    136
    +
    137}
    +
    138}
    + +
    a wrapper class around regex with the original expr
    Definition: relabel_config.hh:40
    +
    relabel_config::relabel_action relabel_config_action(const std::string &action)
    a helper function to translate a string to relabel_config::relabel_action enum values
    +
    metric_family_config allow changing metrics family configuration
    Definition: relabel_config.hh:129
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    a relabel_config allows changing metrics labels dynamically
    Definition: relabel_config.hh:101
    +
    + + + + diff --git a/master/reply_8hh_source.html b/master/reply_8hh_source.html new file mode 100644 index 000000000..ba706abe9 --- /dev/null +++ b/master/reply_8hh_source.html @@ -0,0 +1,282 @@ + + + + + + + +Seastar: seastar/http/reply.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    reply.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2015 Cloudius Systems
    +
    20 */
    +
    21
    +
    22// This file was modified from boost http example
    +
    23//
    +
    24// reply.hpp
    +
    25// ~~~~~~~~~
    +
    26//
    +
    27// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
    +
    28//
    +
    29// Distributed under the Boost Software License, Version 1.0. (See accompanying
    +
    30// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
    +
    31//
    +
    32#pragma once
    +
    33
    +
    34#ifndef SEASTAR_MODULE
    +
    35#include <unordered_map>
    +
    36#endif
    +
    37#include <seastar/core/sstring.hh>
    +
    38#include <seastar/http/mime_types.hh>
    +
    39#include <seastar/core/iostream.hh>
    +
    40#include <seastar/util/noncopyable_function.hh>
    +
    41#include <seastar/util/modules.hh>
    +
    42#include <seastar/util/string_utils.hh>
    +
    43
    +
    44namespace seastar {
    +
    45
    +
    46SEASTAR_MODULE_EXPORT_BEGIN
    +
    47
    +
    48namespace httpd {
    +
    49
    +
    50class connection;
    +
    51class routes;
    +
    52
    +
    53}
    +
    54
    +
    55namespace http {
    +
    56
    +
    60struct reply {
    +
    64 enum class status_type {
    +
    65 continue_ = 100,
    +
    66 switching_protocols = 101,
    +
    67 ok = 200,
    +
    68 created = 201,
    +
    69 accepted = 202,
    +
    70 nonauthoritative_information = 203,
    +
    71 no_content = 204,
    +
    72 reset_content = 205,
    +
    73 partial_content = 206,
    +
    74 multiple_choices = 300,
    +
    75 moved_permanently = 301,
    +
    76 moved_temporarily = 302,
    +
    77 see_other = 303,
    +
    78 not_modified = 304,
    +
    79 use_proxy = 305,
    +
    80 temporary_redirect = 307,
    +
    81 bad_request = 400,
    +
    82 unauthorized = 401,
    +
    83 payment_required = 402,
    +
    84 forbidden = 403,
    +
    85 not_found = 404,
    +
    86 method_not_allowed = 405,
    +
    87 not_acceptable = 406,
    +
    88 request_timeout = 408,
    +
    89 conflict = 409,
    +
    90 gone = 410,
    +
    91 length_required = 411,
    +
    92 payload_too_large = 413,
    +
    93 uri_too_long = 414,
    +
    94 unsupported_media_type = 415,
    +
    95 expectation_failed = 417,
    +
    96 unprocessable_entity = 422,
    +
    97 upgrade_required = 426,
    +
    98 too_many_requests = 429,
    +
    99 internal_server_error = 500,
    +
    100 not_implemented = 501,
    +
    101 bad_gateway = 502,
    +
    102 service_unavailable = 503,
    +
    103 gateway_timeout = 504,
    +
    104 http_version_not_supported = 505,
    +
    105 insufficient_storage = 507
    +
    106 } _status;
    +
    107
    +
    111 std::unordered_map<sstring, sstring, seastar::internal::case_insensitive_hash, seastar::internal::case_insensitive_cmp> _headers;
    +
    112
    +
    113 sstring _version;
    +
    117 sstring _content;
    +
    118 size_t content_length = 0; // valid when received via client connection
    +
    119
    +
    120 sstring _response_line;
    +
    121 std::unordered_map<sstring, sstring> trailing_headers;
    +
    122 std::unordered_map<sstring, sstring> chunk_extensions;
    +
    123
    +
    124 reply()
    +
    125 : _status(status_type::ok) {
    +
    126 }
    +
    127
    +
    128 reply& add_header(const sstring& h, const sstring& value) {
    +
    129 _headers[h] = value;
    +
    130 return *this;
    +
    131 }
    +
    132
    +
    138 sstring get_header(const sstring& name) const {
    +
    139 auto res = _headers.find(name);
    +
    140 if (res == _headers.end()) {
    +
    141 return "";
    +
    142 }
    +
    143 return res->second;
    +
    144 }
    +
    145
    +
    146 reply& set_version(const sstring& version) {
    +
    147 _version = version;
    +
    148 return *this;
    +
    149 }
    +
    150
    +
    151 reply& set_status(status_type status, sstring content = "") {
    +
    152 _status = status;
    +
    153 if (content != "") {
    +
    154 _content = std::move(content);
    +
    155 }
    +
    156 return *this;
    +
    157 }
    +
    158
    +
    164 reply& set_mime_type(const sstring& mime) {
    +
    165 _headers["Content-Type"] = mime;
    +
    166 return *this;
    +
    167 }
    +
    168
    +
    173 reply& set_content_type(const sstring& content_type = "html") {
    +
    174 set_mime_type(http::mime_types::extension_to_type(content_type));
    +
    175 return *this;
    +
    176 }
    +
    177
    +
    178 reply& done(const sstring& content_type) {
    +
    179 return set_content_type(content_type).done();
    +
    180 }
    + +
    186 _response_line = response_line();
    +
    187 return *this;
    +
    188 }
    +
    189 sstring response_line();
    +
    190
    +
    207 void write_body(const sstring& content_type, noncopyable_function<future<>(output_stream<char>&&)>&& body_writer);
    +
    208
    +
    218 void write_body(const sstring& content_type, sstring content);
    +
    219
    +
    220private:
    +
    221 future<> write_reply_to_connection(httpd::connection& con);
    +
    222 future<> write_reply_headers(httpd::connection& connection);
    +
    223
    + +
    225 friend class httpd::routes;
    +
    226 friend class httpd::connection;
    +
    227};
    +
    228
    +
    229std::ostream& operator<<(std::ostream& os, reply::status_type st);
    +
    230
    +
    231} // namespace http
    +
    232
    +
    233namespace httpd {
    +
    234using reply [[deprecated("Use http::reply instead")]] = http::reply;
    +
    235}
    +
    236
    +
    237SEASTAR_MODULE_EXPORT_END
    +
    238}
    +
    239
    +
    240#if FMT_VERSION >= 90000
    +
    241template <> struct fmt::formatter<seastar::http::reply::status_type> : fmt::ostream_formatter {};
    +
    242#endif
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: httpd.hh:69
    +
    Definition: routes.hh:81
    + +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: noncopyable_function.hh:37
    +
    Definition: reply.hh:60
    +
    void write_body(const sstring &content_type, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)
    use an output stream to write the message body
    +
    std::unordered_map< sstring, sstring, seastar::internal::case_insensitive_hash, seastar::internal::case_insensitive_cmp > _headers
    Definition: reply.hh:111
    +
    reply & set_mime_type(const sstring &mime)
    Definition: reply.hh:164
    +
    sstring get_header(const sstring &name) const
    Definition: reply.hh:138
    +
    status_type
    Definition: reply.hh:64
    +
    reply & done()
    Definition: reply.hh:185
    +
    sstring _content
    Definition: reply.hh:117
    +
    reply & set_content_type(const sstring &content_type="html")
    Definition: reply.hh:173
    +
    void write_body(const sstring &content_type, sstring content)
    Write a string as the reply.
    +
    + + + + diff --git a/master/report__exception_8hh_source.html b/master/report__exception_8hh_source.html new file mode 100644 index 000000000..85cbabb9d --- /dev/null +++ b/master/report__exception_8hh_source.html @@ -0,0 +1,112 @@ + + + + + + + +Seastar: seastar/core/report_exception.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    report_exception.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2014 Cloudius Systems
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <exception>
    +
    25#include <string_view>
    +
    26
    +
    27namespace seastar {
    +
    28
    +
    29void report_exception(std::string_view message, std::exception_ptr) noexcept;
    +
    30
    +
    31}
    +
    32
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/request_8hh_source.html b/master/request_8hh_source.html new file mode 100644 index 000000000..9db4a52e3 --- /dev/null +++ b/master/request_8hh_source.html @@ -0,0 +1,279 @@ + + + + + + + +Seastar: seastar/http/request.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    request.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2015 Cloudius Systems
    +
    20 */
    +
    21
    +
    22//
    +
    23// request.hpp
    +
    24// ~~~~~~~~~~~
    +
    25//
    +
    26// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
    +
    27//
    +
    28// Distributed under the Boost Software License, Version 1.0. (See accompanying
    +
    29// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
    +
    30//
    +
    31#pragma once
    +
    32
    +
    33#include <seastar/core/iostream.hh>
    +
    34#include <seastar/core/sstring.hh>
    +
    35#include <strings.h>
    +
    36#include <seastar/http/common.hh>
    +
    37#include <seastar/http/mime_types.hh>
    +
    38#include <seastar/net/socket_defs.hh>
    +
    39#include <seastar/core/iostream.hh>
    +
    40#include <seastar/util/string_utils.hh>
    +
    41
    +
    42namespace seastar {
    +
    43
    +
    44namespace http {
    +
    45
    +
    46namespace experimental { class connection; }
    +
    47
    +
    51struct request {
    +
    52 enum class ctclass
    +
    53 : char {
    +
    54 other, multipart, app_x_www_urlencoded,
    +
    55 };
    +
    56
    +
    57 socket_address _client_address;
    +
    58 socket_address _server_address;
    +
    59 sstring _method;
    +
    60 sstring _url;
    +
    61 sstring _version;
    +
    62 ctclass content_type_class;
    +
    63 size_t content_length = 0;
    +
    64 mutable size_t _bytes_written = 0;
    +
    65 std::unordered_map<sstring, sstring, seastar::internal::case_insensitive_hash, seastar::internal::case_insensitive_cmp> _headers;
    +
    66 std::unordered_map<sstring, sstring> query_parameters;
    + +
    68 sstring content; // server-side deprecated: use content_stream instead
    +
    69 /*
    +
    70 * The handler should read the contents of this stream till reaching eof (i.e., the end of this request's content). Failing to do so
    +
    71 * will force the server to close this connection, and the client will not be able to reuse this connection for the next request.
    +
    72 * The stream should not be closed by the handler, the server will close it for the handler.
    +
    73 * */
    +
    74 input_stream<char>* content_stream;
    +
    75 std::unordered_map<sstring, sstring> trailing_headers;
    +
    76 std::unordered_map<sstring, sstring> chunk_extensions;
    +
    77 sstring protocol_name = "http";
    +
    78 noncopyable_function<future<>(output_stream<char>&&)> body_writer; // for client
    +
    79
    + +
    85 return _client_address;
    +
    86 }
    +
    87
    + +
    93 return _server_address;
    +
    94 }
    +
    95
    +
    101 sstring get_header(const sstring& name) const {
    +
    102 auto res = _headers.find(name);
    +
    103 if (res == _headers.end()) {
    +
    104 return "";
    +
    105 }
    +
    106 return res->second;
    +
    107 }
    +
    108
    +
    114 sstring get_query_param(const sstring& key) const {
    +
    115 auto res = query_parameters.find(key);
    +
    116 if (res == query_parameters.end()) {
    +
    117 return "";
    +
    118 }
    +
    119 return res->second;
    +
    120 }
    +
    121
    +
    128 sstring get_path_param(const sstring& key) const {
    +
    129 return param.get_decoded_param(key);
    +
    130 }
    +
    131
    +
    135 sstring get_protocol_name() const {
    +
    136 return protocol_name;
    +
    137 }
    +
    138
    +
    143 sstring get_url() const {
    +
    144 return get_protocol_name() + "://" + get_header("Host") + _url;
    +
    145 }
    +
    146
    +
    147 bool is_multi_part() const {
    +
    148 return content_type_class == ctclass::multipart;
    +
    149 }
    +
    150
    +
    151 bool is_form_post() const {
    +
    152 return content_type_class == ctclass::app_x_www_urlencoded;
    +
    153 }
    +
    154
    +
    155 bool should_keep_alive() const {
    +
    156 if (_version == "0.9") {
    +
    157 return false;
    +
    158 }
    +
    159
    +
    160 // TODO: handle HTTP/2.0 when it releases
    +
    161
    +
    162 auto it = _headers.find("Connection");
    +
    163 if (_version == "1.0") {
    +
    164 return it != _headers.end()
    +
    165 && seastar::internal::case_insensitive_cmp()(it->second, "keep-alive");
    +
    166 } else { // HTTP/1.1
    +
    167 return it == _headers.end() || !seastar::internal::case_insensitive_cmp()(it->second, "close");
    +
    168 }
    +
    169 }
    +
    170
    + +
    178
    +
    183 sstring format_url() const;
    +
    184
    +
    190 void set_mime_type(const sstring& mime) {
    +
    191 _headers["Content-Type"] = mime;
    +
    192 }
    +
    193
    +
    198 void set_content_type(const sstring& content_type = "html") {
    +
    199 set_mime_type(http::mime_types::extension_to_type(content_type));
    +
    200 }
    +
    201
    +
    213 void write_body(const sstring& content_type, sstring content);
    +
    214
    +
    232 void write_body(const sstring& content_type, noncopyable_function<future<>(output_stream<char>&&)>&& body_writer);
    +
    233
    +
    256 void write_body(const sstring& content_type, size_t len, noncopyable_function<future<>(output_stream<char>&&)>&& body_writer);
    +
    257
    + +
    266
    +
    275 static request make(sstring method, sstring host, sstring path);
    +
    276
    +
    285 static request make(httpd::operation_type type, sstring host, sstring path);
    +
    286
    +
    287private:
    +
    288 void add_query_param(std::string_view param);
    +
    289 sstring request_line() const;
    +
    290 future<> write_request_headers(output_stream<char>& out) const;
    +
    291 friend class experimental::connection;
    +
    292};
    +
    293
    +
    294} // namespace httpd
    +
    295
    +
    296namespace httpd {
    +
    297using request [[deprecated("Use http::request instead")]] = http::request;
    +
    298}
    +
    299
    +
    300}
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Class connection represents an HTTP connection over a given transport.
    Definition: client.hh:68
    +
    Definition: common.hh:48
    + + +
    Definition: socket_defs.hh:47
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: noncopyable_function.hh:37
    +
    Definition: request.hh:51
    +
    sstring format_url() const
    + +
    sstring get_path_param(const sstring &key) const
    Definition: request.hh:128
    +
    sstring get_header(const sstring &name) const
    Definition: request.hh:101
    +
    void write_body(const sstring &content_type, size_t len, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)
    Use an output stream to write the message body.
    +
    void set_mime_type(const sstring &mime)
    Definition: request.hh:190
    +
    const socket_address & get_client_address() const
    Definition: request.hh:84
    +
    void set_content_type(const sstring &content_type="html")
    Definition: request.hh:198
    +
    void write_body(const sstring &content_type, sstring content)
    Write a string as the body.
    +
    static request make(sstring method, sstring host, sstring path)
    Make simple request.
    +
    void set_expects_continue()
    Make request send Expect header.
    +
    static request make(httpd::operation_type type, sstring host, sstring path)
    Make simple request.
    +
    void write_body(const sstring &content_type, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)
    Use an output stream to write the message body.
    +
    sstring get_url() const
    Definition: request.hh:143
    +
    const socket_address & get_server_address() const
    Definition: request.hh:92
    +
    sstring get_query_param(const sstring &key) const
    Definition: request.hh:114
    +
    sstring get_protocol_name() const
    Definition: request.hh:135
    +
    + + + + diff --git a/master/resource_8hh_source.html b/master/resource_8hh_source.html new file mode 100644 index 000000000..c66dd2552 --- /dev/null +++ b/master/resource_8hh_source.html @@ -0,0 +1,230 @@ + + + + + + + +Seastar: seastar/core/resource.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    resource.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/util/spinlock.hh>
    +
    25#include <seastar/util/modules.hh>
    +
    26#ifndef SEASTAR_MODULE
    +
    27#include <cassert>
    +
    28#include <cstdlib>
    +
    29#include <memory>
    +
    30#include <optional>
    +
    31#include <string>
    +
    32#include <vector>
    +
    33#include <set>
    +
    34#include <sched.h>
    +
    35#include <boost/any.hpp>
    +
    36#include <unordered_map>
    +
    37#ifdef SEASTAR_HAVE_HWLOC
    +
    38#include <hwloc.h>
    +
    39#endif
    +
    40#endif
    +
    41
    +
    42namespace seastar {
    +
    43
    +
    44cpu_set_t cpuid_to_cpuset(unsigned cpuid);
    +
    45class io_queue;
    +
    46class io_group;
    +
    47
    +
    48namespace resource {
    +
    49
    +
    50using std::optional;
    +
    51
    +
    52using cpuset = std::set<unsigned>;
    +
    53
    +
    55std::optional<cpuset> parse_cpuset(std::string value);
    +
    57
    +
    58namespace hwloc::internal {
    +
    59
    +
    60#ifdef SEASTAR_HAVE_HWLOC
    +
    61class topology_holder {
    +
    62 hwloc_topology_t _topology;
    +
    63
    +
    64public:
    +
    65 topology_holder() noexcept
    +
    66 : _topology(nullptr)
    +
    67 { }
    +
    68
    +
    69 topology_holder(topology_holder&& o) noexcept;
    +
    70
    +
    71 ~topology_holder();
    +
    72
    +
    73 topology_holder& operator=(topology_holder&& o) noexcept;
    +
    74
    +
    75 operator bool() const noexcept {
    +
    76 return _topology != nullptr;
    +
    77 }
    +
    78
    +
    79 void init_and_load();
    +
    80 hwloc_topology_t get();
    +
    81};
    +
    82
    +
    83#else // SEASTAR_HAVE_HWLOC
    +
    84
    + +
    86
    +
    87#endif // SEASTAR_HAVE_HWLOC
    +
    88
    +
    89} // namespace hwloc::internal
    +
    90
    +
    91SEASTAR_MODULE_EXPORT_BEGIN
    +
    92
    + +
    94 optional<size_t> total_memory;
    +
    95 optional<size_t> reserve_memory; // if total_memory not specified
    +
    96 size_t reserve_additional_memory_per_shard;
    +
    97 size_t cpus;
    +
    98 cpuset cpu_set;
    +
    99 bool assign_orphan_cpus = false;
    +
    100 std::vector<dev_t> devices;
    +
    101 unsigned num_io_groups;
    + +
    103};
    +
    104
    +
    105struct memory {
    +
    106 size_t bytes;
    +
    107 unsigned nodeid;
    +
    108
    +
    109};
    +
    110
    + +
    112 std::vector<std::unique_ptr<io_queue>> queues;
    +
    113 std::vector<unsigned> shard_to_group;
    +
    114 std::vector<unsigned> shards_in_group;
    +
    115 std::vector<std::shared_ptr<io_group>> groups;
    +
    116
    +
    117 util::spinlock lock;
    +
    118
    + +
    120 io_queue_topology(const io_queue_topology&) = delete;
    + + +
    123};
    +
    124
    +
    125struct cpu {
    +
    126 unsigned cpu_id;
    +
    127 std::vector<memory> mem;
    +
    128};
    +
    129
    +
    130struct resources {
    +
    131 std::vector<cpu> cpus;
    +
    132 std::unordered_map<dev_t, io_queue_topology> ioq_topology;
    +
    133 std::unordered_map<unsigned /* numa node id */, cpuset> numa_node_id_to_cpuset;
    +
    134};
    +
    135
    +
    136resources allocate(configuration& c);
    +
    137unsigned nr_processing_units(configuration& c);
    +
    138
    +
    139SEASTAR_MODULE_EXPORT_END
    +
    140
    +
    141std::optional<resource::cpuset> parse_cpuset(std::string value);
    +
    142
    +
    143
    +
    144}
    +
    145}
    +
    Definition: spinlock.hh:88
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: resource.hh:93
    +
    Definition: resource.hh:125
    + +
    Definition: resource.hh:111
    +
    Definition: resource.hh:105
    +
    Definition: resource.hh:130
    +
    + + + + diff --git a/master/routes_8hh_source.html b/master/routes_8hh_source.html new file mode 100644 index 000000000..b98cade04 --- /dev/null +++ b/master/routes_8hh_source.html @@ -0,0 +1,267 @@ + + + + + + + +Seastar: seastar/http/routes.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    routes.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2015 Cloudius Systems
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <boost/program_options/variables_map.hpp>
    +
    26#include <unordered_map>
    +
    27#endif
    +
    28
    +
    29#include <seastar/http/matchrules.hh>
    +
    30#include <seastar/http/handlers.hh>
    +
    31#include <seastar/http/common.hh>
    +
    32#include <seastar/http/reply.hh>
    +
    33#include <seastar/util/modules.hh>
    +
    34
    +
    35namespace seastar {
    +
    36
    +
    37namespace httpd {
    +
    38
    +
    39SEASTAR_MODULE_EXPORT_BEGIN
    +
    43class url {
    +
    44public:
    +
    48 url(url&&) = default;
    +
    49
    +
    54 url(const sstring& path)
    +
    55 : _path(path) {
    +
    56 }
    +
    57
    +
    63 url& remainder(const sstring& param) {
    +
    64 this->_param = param;
    +
    65 return *this;
    +
    66 }
    +
    67
    +
    68 sstring _path;
    +
    69 sstring _param;
    +
    70};
    +
    71
    +
    72struct path_description;
    +
    73
    +
    81class routes {
    +
    82public:
    + +
    87
    +
    94 routes& put(operation_type type, const sstring& url, handler_base* handler);
    +
    95
    +
    101 handler_base* drop(operation_type type, const sstring& url);
    +
    102
    +
    112 routes& add(match_rule* rule, operation_type type = GET) {
    +
    113 _rules[type][_rover++] = rule;
    +
    114 return *this;
    +
    115 }
    +
    116
    +
    125 routes& add(operation_type type, const url& url, handler_base* handler);
    +
    126
    + +
    134
    +
    145 future<std::unique_ptr<http::reply> > handle(const sstring& path, std::unique_ptr<http::request> req, std::unique_ptr<http::reply> rep);
    +
    146
    +
    152 handler_base* get_exact_match(operation_type type, const sstring& url) const {
    +
    153 auto i = _map[type].find(url);
    +
    154 return (i == _map[type].end()) ? nullptr : i->second;
    +
    155 }
    +
    156
    +
    164 handler_base* get_handler(operation_type type, const sstring& url,
    +
    165 parameters& params);
    +
    166
    +
    167private:
    +
    175 sstring normalize_url(const sstring& url);
    +
    176
    +
    177 std::unordered_map<sstring, handler_base*> _map[NUM_OPERATION];
    +
    178public:
    +
    179 using rule_cookie = uint64_t;
    +
    180private:
    +
    181 rule_cookie _rover = 0;
    +
    182 std::map<rule_cookie, match_rule*> _rules[NUM_OPERATION];
    +
    183 //default Handler -- for any HTTP Method and Path (/*)
    +
    184 handler_base* _default_handler = nullptr;
    +
    185public:
    +
    186 using exception_handler_fun = std::function<std::unique_ptr<http::reply>(std::exception_ptr eptr)>;
    +
    187 using exception_handler_id = size_t;
    +
    188private:
    +
    189 std::map<exception_handler_id, exception_handler_fun> _exceptions;
    +
    190 exception_handler_id _exception_id = 0;
    +
    191 // for optimization reason, the lambda function
    +
    192 // that calls the exception_reply of the current object
    +
    193 // is stored
    +
    194 exception_handler_fun _general_handler;
    +
    195public:
    +
    201 exception_handler_id register_exeption_handler(exception_handler_fun fun) {
    +
    202 auto current = _exception_id++;
    +
    203 _exceptions[current] = fun;
    +
    204 return current;
    +
    205 }
    +
    206
    +
    207 void remove_exception_handler(exception_handler_id id) {
    +
    208 _exceptions.erase(id);
    +
    209 }
    +
    210
    +
    211 std::unique_ptr<http::reply> exception_reply(std::exception_ptr eptr);
    +
    212
    +
    213 routes();
    +
    214
    +
    221 void add_alias(const path_description& old_path, const path_description& new_path);
    +
    222
    +
    229 rule_cookie add_cookie(match_rule* rule, operation_type type) {
    +
    230 auto pos = _rover++;
    +
    231 _rules[type][pos] = rule;
    +
    232 return pos;
    +
    233 }
    +
    234
    +
    241 match_rule* del_cookie(rule_cookie cookie, operation_type type);
    +
    242};
    +
    243
    + +
    249 routes& _routes;
    +
    250 const sstring _url;
    +
    251 operation_type _op;
    +
    252
    +
    253public:
    +
    261 handler_registration(routes& rs, handler_base& h, const sstring& url, operation_type op = GET);
    +
    262
    + +
    267};
    +
    268
    + +
    274 routes& _routes;
    +
    275 operation_type _op;
    +
    276 routes::rule_cookie _cookie;
    +
    277
    +
    278public:
    +
    285 rule_registration(routes& rs, match_rule& rule, operation_type op = GET);
    +
    286
    + +
    291};
    +
    292
    +
    293SEASTAR_MODULE_EXPORT_END
    +
    294}
    +
    295
    +
    296}
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: handlers.hh:42
    +
    Definition: routes.hh:248
    + +
    handler_registration(routes &rs, handler_base &h, const sstring &url, operation_type op=GET)
    +
    Definition: matchrules.hh:42
    +
    Definition: common.hh:48
    +
    Definition: routes.hh:81
    +
    routes & add(operation_type type, const url &url, handler_base *handler)
    +
    void add_alias(const path_description &old_path, const path_description &new_path)
    add an alias to an already registered path. After registering a handler to a path,...
    +
    exception_handler_id register_exeption_handler(exception_handler_fun fun)
    Definition: routes.hh:201
    +
    handler_base * get_exact_match(operation_type type, const sstring &url) const
    Definition: routes.hh:152
    +
    future< std::unique_ptr< http::reply > > handle(const sstring &path, std::unique_ptr< http::request > req, std::unique_ptr< http::reply > rep)
    +
    rule_cookie add_cookie(match_rule *rule, operation_type type)
    Definition: routes.hh:229
    +
    routes & put(operation_type type, const sstring &url, handler_base *handler)
    +
    match_rule * del_cookie(rule_cookie cookie, operation_type type)
    +
    handler_base * get_handler(operation_type type, const sstring &url, parameters &params)
    + +
    routes & add_default_handler(handler_base *handler)
    +
    routes & add(match_rule *rule, operation_type type=GET)
    Definition: routes.hh:112
    +
    handler_base * drop(operation_type type, const sstring &url)
    +
    Definition: routes.hh:273
    +
    rule_registration(routes &rs, match_rule &rule, operation_type op=GET)
    + +
    Definition: routes.hh:43
    +
    url(url &&)=default
    +
    url(const sstring &path)
    Definition: routes.hh:54
    +
    url & remainder(const sstring &param)
    Definition: routes.hh:63
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: json_path.hh:82
    +
    + + + + diff --git a/master/rpc_8hh_source.html b/master/rpc_8hh_source.html new file mode 100644 index 000000000..da2adf359 --- /dev/null +++ b/master/rpc_8hh_source.html @@ -0,0 +1,899 @@ + + + + + + + +Seastar: seastar/rpc/rpc.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    rpc.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2015 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <unordered_map>
    +
    25#include <unordered_set>
    +
    26#include <list>
    +
    27#include <variant>
    +
    28#include <boost/intrusive/list.hpp>
    +
    29#include <seastar/core/future.hh>
    +
    30#include <seastar/core/seastar.hh>
    +
    31#include <seastar/net/api.hh>
    +
    32#include <seastar/core/iostream.hh>
    +
    33#include <seastar/core/shared_ptr.hh>
    +
    34#include <seastar/core/condition-variable.hh>
    +
    35#include <seastar/core/gate.hh>
    +
    36#include <seastar/rpc/rpc_types.hh>
    +
    37#include <seastar/core/byteorder.hh>
    +
    38#include <seastar/core/shared_future.hh>
    +
    39#include <seastar/core/queue.hh>
    +
    40#include <seastar/core/weak_ptr.hh>
    + +
    42#include <seastar/util/backtrace.hh>
    +
    43#include <seastar/util/log.hh>
    +
    44
    +
    45namespace bi = boost::intrusive;
    +
    46
    +
    47namespace seastar {
    +
    48
    +
    49namespace rpc {
    +
    50
    +
    63
    +
    64using id_type = int64_t;
    +
    65
    +
    66using rpc_semaphore = basic_semaphore<semaphore_default_exception_factory, rpc_clock_type>;
    +
    67using resource_permit = semaphore_units<semaphore_default_exception_factory, rpc_clock_type>;
    +
    68
    +
    69static constexpr char rpc_magic[] = "SSTARRPC";
    +
    70
    +
    73
    + + +
    79};
    +
    80
    + +
    85
    + +
    98 size_t basic_request_size = 0;
    +
    99 unsigned bloat_factor = 1;
    + +
    103 using syncronous_isolation_function = std::function<isolation_config (sstring isolation_cookie)>;
    +
    104 using asyncronous_isolation_function = std::function<future<isolation_config> (sstring isolation_cookie)>;
    +
    105 using isolation_function_alternatives = std::variant<syncronous_isolation_function, asyncronous_isolation_function>;
    +
    106 isolation_function_alternatives isolate_connection = default_isolate_connection;
    +
    107};
    +
    108
    + +
    110 std::optional<net::tcp_keepalive_params> keepalive;
    +
    111 bool tcp_nodelay = true;
    +
    112 bool reuseaddr = false;
    +
    113 compressor::factory* compressor_factory = nullptr;
    +
    114 bool send_timeout_data = true;
    +
    115 connection_id stream_parent = invalid_connection_id;
    + +
    120 sstring metrics_domain = "default";
    +
    121 bool send_handler_duration = true;
    +
    122};
    +
    123
    +
    125
    +
    126// RPC call that passes stream connection id as a parameter
    +
    127// may arrive to a different shard from where the stream connection
    +
    128// was opened, so the connection id is not known to a server that handles
    +
    129// the RPC call. The shard that the stream connection belong to is know
    +
    130// since it is a part of connection id, but this is not enough to locate
    +
    131// a server instance the connection belongs to if there are more than one
    +
    132// server on the shard. Stream domain parameter is here to help with that.
    +
    133// Different servers on all shards logically belonging to the same service should
    +
    134// belong to the same streaming domain. Only one server on each shard can belong to
    +
    135// a particulr streaming domain.
    + +
    137 uint64_t _id;
    +
    138public:
    +
    139 explicit streaming_domain_type(uint64_t id) : _id(id) {}
    +
    140 bool operator==(const streaming_domain_type& o) const {
    +
    141 return _id == o._id;
    +
    142 }
    +
    143 friend struct std::hash<streaming_domain_type>;
    +
    144 friend std::ostream& operator<<(std::ostream&, const streaming_domain_type&);
    +
    145};
    +
    146
    +
    149
    +
    150class server;
    +
    151
    + +
    153 compressor::factory* compressor_factory = nullptr;
    +
    154 bool tcp_nodelay = true;
    +
    155 std::optional<streaming_domain_type> streaming_domain;
    +
    156 server_socket::load_balancing_algorithm load_balancing_algorithm = server_socket::load_balancing_algorithm::default_;
    +
    157 // optional filter function. If set, will be called with remote
    +
    158 // (connecting) address.
    +
    159 // Returning false will refuse the incoming connection.
    +
    160 // Returning true will allow the mechanism to proceed.
    +
    161 std::function<bool(const socket_address&)> filter_connection = {};
    +
    162};
    +
    163
    +
    165
    +
    166inline
    +
    167size_t
    +
    168estimate_request_size(const resource_limits& lim, size_t serialized_size) {
    +
    169 return lim.basic_request_size + serialized_size * lim.bloat_factor;
    +
    170}
    +
    171
    + +
    173 char magic[sizeof(rpc_magic) - 1];
    +
    174 uint32_t len; // additional negotiation data length; multiple negotiation_frame_feature_record structs
    +
    175};
    +
    176
    +
    177enum class protocol_features : uint32_t {
    +
    178 COMPRESS = 0,
    +
    179 TIMEOUT = 1,
    +
    180 CONNECTION_ID = 2,
    +
    181 STREAM_PARENT = 3,
    +
    182 ISOLATION = 4,
    +
    183 HANDLER_DURATION = 5,
    +
    184};
    +
    185
    +
    186// internal representation of feature data
    +
    187using feature_map = std::map<protocol_features, sstring>;
    +
    188
    +
    189// An rpc signature, in the form signature<Ret (In0, In1, In2)>.
    +
    190template <typename Function>
    + +
    192
    +
    193class logger {
    +
    194 std::function<void(const sstring&)> _logger;
    +
    195 ::seastar::logger* _seastar_logger = nullptr;
    +
    196
    +
    197 // _seastar_logger will always be used first if it's available
    +
    198 void log(const sstring& str) const {
    +
    199 if (_seastar_logger) {
    +
    200 // default level for log messages is `info`
    +
    201 _seastar_logger->info("{}", str);
    +
    202 } else if (_logger) {
    +
    203 _logger(str);
    +
    204 }
    +
    205 }
    +
    206
    +
    207 // _seastar_logger will always be used first if it's available
    +
    208 template <typename... Args>
    +
    209#ifdef SEASTAR_LOGGER_COMPILE_TIME_FMT
    +
    210 void log(log_level level, fmt::format_string<Args...> fmt, Args&&... args) const {
    +
    211#else
    +
    212 void log(log_level level, const char* fmt, Args&&... args) const {
    +
    213#endif
    +
    214 if (_seastar_logger) {
    +
    215 _seastar_logger->log(level, fmt, std::forward<Args>(args)...);
    +
    216 // If the log level is at least `info`, fall back to legacy logging without explicit level.
    +
    217 // Ignore less severe levels in order not to spam user's log with messages during transition,
    +
    218 // i.e. when the user still only defines a level-less logger.
    +
    219 } else if (_logger && level <= log_level::info) {
    +
    220 _logger(format(fmt, std::forward<Args>(args)...));
    +
    221 }
    +
    222 }
    +
    223
    +
    224public:
    +
    225 void set(std::function<void(const sstring&)> l) {
    +
    226 _logger = std::move(l);
    +
    227 }
    +
    228
    +
    229 void set(::seastar::logger* logger) {
    +
    230 _seastar_logger = logger;
    +
    231 }
    +
    232
    +
    233 void operator()(const client_info& info, id_type msg_id, const sstring& str) const;
    +
    234 void operator()(const client_info& info, id_type msg_id, log_level level, std::string_view str) const;
    +
    235
    +
    236 void operator()(const client_info& info, const sstring& str) const;
    +
    237 void operator()(const client_info& info, log_level level, std::string_view str) const;
    +
    238
    +
    239 void operator()(const socket_address& addr, const sstring& str) const;
    +
    240 void operator()(const socket_address& addr, log_level level, std::string_view str) const;
    +
    241};
    +
    242
    + +
    244protected:
    + +
    246 input_stream<char> _read_buf;
    +
    247 output_stream<char> _write_buf;
    +
    248 bool _error = false;
    +
    249 bool _connected = false;
    +
    250 std::optional<shared_promise<>> _negotiated = shared_promise<>();
    +
    251 promise<> _stopped;
    +
    252 stats _stats;
    +
    253 const logger& _logger;
    +
    254 // The owner of the pointer below is an instance of rpc::protocol<typename Serializer> class.
    +
    255 // The type of the pointer is erased here, but the original type is Serializer
    +
    256 void* _serializer;
    +
    257 struct outgoing_entry : public bi::list_base_hook<bi::link_mode<bi::auto_unlink>> {
    + +
    259 snd_buf buf;
    +
    260 promise<> done;
    +
    261 cancellable* pcancel = nullptr;
    +
    262 outgoing_entry(snd_buf b) : buf(std::move(b)) {}
    +
    263
    +
    264 outgoing_entry(outgoing_entry&&) = delete;
    +
    265 outgoing_entry(const outgoing_entry&) = delete;
    +
    266
    +
    267 void uncancellable() {
    +
    268 t.cancel();
    +
    269 if (pcancel) {
    +
    270 pcancel->cancel_send = std::function<void()>();
    +
    271 }
    +
    272 }
    +
    273
    + +
    275 if (pcancel) {
    +
    276 pcancel->cancel_send = std::function<void()>();
    +
    277 pcancel->send_back_pointer = nullptr;
    +
    278 }
    +
    279 }
    +
    280
    +
    281 using container_t = bi::list<outgoing_entry, bi::constant_time_size<false>>;
    +
    282 };
    +
    283 void withdraw(outgoing_entry::container_t::iterator it, std::exception_ptr ex = nullptr);
    +
    284 future<> _outgoing_queue_ready = _negotiated->get_shared_future();
    +
    285 outgoing_entry::container_t _outgoing_queue;
    +
    286 size_t _outgoing_queue_size = 0;
    +
    287 std::unique_ptr<compressor> _compressor;
    +
    288 bool _propagate_timeout = false;
    +
    289 bool _timeout_negotiated = false;
    +
    290 bool _handler_duration_negotiated = false;
    +
    291 // stream related fields
    +
    292 bool _is_stream = false;
    +
    293 connection_id _id = invalid_connection_id;
    +
    294
    +
    295 std::unordered_map<connection_id, xshard_connection_ptr> _streams;
    +
    296 queue<rcv_buf> _stream_queue = queue<rcv_buf>(max_queued_stream_buffers);
    +
    297 semaphore _stream_sem = semaphore(max_stream_buffers_memory);
    +
    298 bool _sink_closed = true;
    +
    299 bool _source_closed = true;
    +
    300 // the future holds if sink is already closed
    +
    301 // if it is not ready it means the sink is been closed
    +
    302 future<bool> _sink_closed_future = make_ready_future<bool>(false);
    +
    303
    +
    304 void set_negotiated() noexcept;
    +
    305
    +
    306 bool is_stream() const noexcept {
    +
    307 return _is_stream;
    +
    308 }
    +
    309
    +
    310 snd_buf compress(snd_buf buf);
    +
    311 future<> send_buffer(snd_buf buf);
    +
    312 future<> send(snd_buf buf, std::optional<rpc_clock_type::time_point> timeout = {}, cancellable* cancel = nullptr);
    +
    313 future<> send_entry(outgoing_entry& d) noexcept;
    +
    314 future<> stop_send_loop(std::exception_ptr ex);
    +
    315 future<std::optional<rcv_buf>> read_stream_frame_compressed(input_stream<char>& in);
    +
    316 bool stream_check_twoway_closed() const noexcept {
    +
    317 return _sink_closed && _source_closed;
    +
    318 }
    +
    319 future<> stream_close();
    +
    320 future<> stream_process_incoming(rcv_buf&&);
    +
    321 future<> handle_stream_frame();
    +
    322
    +
    323public:
    +
    324 connection(connected_socket&& fd, const logger& l, void* s, connection_id id = invalid_connection_id) : connection(l, s, id) {
    +
    325 set_socket(std::move(fd));
    +
    326 }
    +
    327 connection(const logger& l, void* s, connection_id id = invalid_connection_id) : _logger(l), _serializer(s), _id(id) {}
    +
    328 virtual ~connection() {}
    +
    329 size_t outgoing_queue_length() const noexcept {
    +
    330 return _outgoing_queue_size;
    +
    331 }
    +
    332
    +
    333 void set_socket(connected_socket&& fd);
    +
    334 future<> send_negotiation_frame(feature_map features);
    +
    335 bool error() const noexcept { return _error; }
    +
    336 void abort();
    +
    337 future<> stop() noexcept;
    +
    338 future<> stream_receive(circular_buffer<foreign_ptr<std::unique_ptr<rcv_buf>>>& bufs);
    +
    339 future<> close_sink() {
    +
    340 _sink_closed = true;
    +
    341 if (stream_check_twoway_closed()) {
    +
    342 return stream_close();
    +
    343 }
    +
    344 return make_ready_future();
    +
    345 }
    +
    346 bool sink_closed() const noexcept {
    +
    347 return _sink_closed;
    +
    348 }
    +
    349 future<> close_source() {
    +
    350 _source_closed = true;
    +
    351 if (stream_check_twoway_closed()) {
    +
    352 return stream_close();
    +
    353 }
    +
    354 return make_ready_future();
    +
    355 }
    +
    356 connection_id get_connection_id() const noexcept {
    +
    357 return _id;
    +
    358 }
    +
    359 stats& get_stats_internal() noexcept {
    +
    360 return _stats;
    +
    361 }
    +
    362 xshard_connection_ptr get_stream(connection_id id) const;
    +
    363 void register_stream(connection_id id, xshard_connection_ptr c);
    +
    364 virtual socket_address peer_address() const = 0;
    +
    365
    +
    366 const logger& get_logger() const noexcept {
    +
    367 return _logger;
    +
    368 }
    +
    369
    +
    370 template<typename Serializer>
    +
    371 Serializer& serializer() {
    +
    372 return *static_cast<Serializer*>(_serializer);
    +
    373 }
    +
    374
    +
    375 template <typename FrameType>
    +
    376 future<typename FrameType::return_type> read_frame(socket_address info, input_stream<char>& in);
    +
    377
    +
    378 template <typename FrameType>
    +
    379 future<typename FrameType::return_type> read_frame_compressed(socket_address info, std::unique_ptr<compressor>& compressor, input_stream<char>& in);
    +
    380 friend class client;
    +
    381 template<typename Serializer, typename... Out>
    +
    382 friend class sink_impl;
    +
    383 template<typename Serializer, typename... In>
    +
    384 friend class source_impl;
    +
    385
    +
    386 void suspend_for_testing(promise<>& p) {
    +
    387 _outgoing_queue_ready.get();
    +
    388 auto dummy = std::make_unique<outgoing_entry>(snd_buf());
    +
    389 _outgoing_queue.push_back(*dummy);
    +
    390 _outgoing_queue_ready = dummy->done.get_future();
    +
    391 (void)p.get_future().then([dummy = std::move(dummy)] { dummy->done.set_value(); });
    +
    392 }
    +
    393};
    +
    394
    + +
    396 promise<> pr;
    +
    397 snd_buf data;
    +
    398};
    +
    399
    +
    400// send data Out...
    +
    401template<typename Serializer, typename... Out>
    +
    402class sink_impl : public sink<Out...>::impl {
    +
    403 // Used on the shard *this lives on.
    +
    404 alignas (cache_line_size) uint64_t _next_seq_num = 1;
    +
    405
    +
    406 // Used on the shard the _conn lives on.
    +
    407 struct alignas (cache_line_size) {
    +
    408 uint64_t last_seq_num = 0;
    +
    409 std::map<uint64_t, deferred_snd_buf> out_of_order_bufs;
    +
    410 } _remote_state;
    +
    411public:
    +
    412 sink_impl(xshard_connection_ptr con) : sink<Out...>::impl(std::move(con)) { this->_con->get()->_sink_closed = false; }
    +
    413 future<> operator()(const Out&... args) override;
    +
    414 future<> close() override;
    +
    415 future<> flush() override;
    +
    416 ~sink_impl() override;
    +
    417};
    +
    418
    +
    419// receive data In...
    +
    420template<typename Serializer, typename... In>
    +
    421class source_impl : public source<In...>::impl {
    +
    422public:
    +
    423 source_impl(xshard_connection_ptr con) : source<In...>::impl(std::move(con)) { this->_con->get()->_source_closed = false; }
    +
    424 future<std::optional<std::tuple<In...>>> operator()() override;
    +
    425};
    +
    426
    +
    427class client : public rpc::connection, public weakly_referencable<client> {
    +
    428 socket _socket;
    +
    429 id_type _message_id = 1;
    +
    430 struct reply_handler_base {
    + +
    432 cancellable* pcancel = nullptr;
    +
    433 rpc_clock_type::time_point start;
    +
    434 virtual void operator()(client&, id_type, rcv_buf data) = 0;
    +
    435 virtual void timeout() {}
    +
    436 virtual void cancel() {}
    +
    437 virtual ~reply_handler_base() {
    +
    438 if (pcancel) {
    +
    439 pcancel->cancel_wait = std::function<void()>();
    +
    440 pcancel->wait_back_pointer = nullptr;
    +
    441 }
    +
    442 };
    +
    443 };
    +
    444
    +
    445 class metrics {
    +
    446 struct domain;
    +
    447
    +
    448 using domain_member_hook_t = boost::intrusive::list_member_hook<boost::intrusive::link_mode<boost::intrusive::auto_unlink>>;
    +
    449
    +
    450 const client& _c;
    +
    451 domain& _domain;
    +
    452 domain_member_hook_t _link;
    +
    453
    +
    454 using domain_list_t = boost::intrusive::list<metrics,
    +
    455 boost::intrusive::member_hook<metrics, metrics::domain_member_hook_t, &metrics::_link>,
    +
    456 boost::intrusive::constant_time_size<false>>;
    +
    457
    +
    458 public:
    +
    459 metrics(const client&);
    +
    460 ~metrics();
    +
    461 };
    +
    462
    +
    463 void enqueue_zero_frame();
    +
    464public:
    +
    465 template<typename Reply, typename Func>
    +
    466 struct reply_handler final : reply_handler_base {
    +
    467 Func func;
    +
    468 Reply reply;
    +
    469 reply_handler(Func&& f) : func(std::move(f)) {}
    +
    470 virtual void operator()(client& client, id_type msg_id, rcv_buf data) override {
    +
    471 return func(reply, client, msg_id, std::move(data));
    +
    472 }
    +
    473 virtual void timeout() override {
    +
    474 reply.done = true;
    +
    475 reply.p.set_exception(timeout_error());
    +
    476 }
    +
    477 virtual void cancel() override {
    +
    478 reply.done = true;
    +
    479 reply.p.set_exception(canceled_error());
    +
    480 }
    +
    481 virtual ~reply_handler() {}
    +
    482 };
    +
    483private:
    +
    484 std::unordered_map<id_type, std::unique_ptr<reply_handler_base>> _outstanding;
    +
    485 socket_address _server_addr, _local_addr;
    +
    486 client_options _options;
    +
    487 weak_ptr<client> _parent; // for stream clients
    +
    488
    +
    489 metrics _metrics;
    +
    490
    +
    491private:
    +
    492 future<> negotiate_protocol(feature_map map);
    +
    493 void negotiate(feature_map server_features);
    +
    494 // Returned future is
    +
    495 // - message id
    +
    496 // - optional server-side handler duration
    +
    497 // - message payload
    + +
    499 read_response_frame_compressed(input_stream<char>& in);
    +
    500public:
    +
    509 client(const logger& l, void* s, const socket_address& addr, const socket_address& local = {});
    +
    510 client(const logger& l, void* s, client_options options, const socket_address& addr, const socket_address& local = {});
    +
    511
    +
    522 client(const logger& l, void* s, socket socket, const socket_address& addr, const socket_address& local = {});
    +
    523 client(const logger& l, void* s, client_options options, socket socket, const socket_address& addr, const socket_address& local = {});
    +
    524
    +
    525 stats get_stats() const;
    +
    526 size_t incoming_queue_length() const noexcept {
    +
    527 return _outstanding.size();
    +
    528 }
    +
    529
    +
    530 auto next_message_id() { return _message_id++; }
    +
    531 void wait_for_reply(id_type id, std::unique_ptr<reply_handler_base>&& h, std::optional<rpc_clock_type::time_point> timeout, cancellable* cancel);
    +
    532 void wait_timed_out(id_type id);
    +
    533 future<> stop() noexcept;
    +
    534 void abort_all_streams();
    +
    535 void deregister_this_stream();
    +
    536 socket_address peer_address() const override {
    +
    537 return _server_addr;
    +
    538 }
    +
    539 future<> await_connection() {
    +
    540 if (!_negotiated) {
    +
    541 return make_ready_future<>();
    +
    542 } else {
    +
    543 return _negotiated->get_shared_future();
    +
    544 }
    +
    545 }
    +
    546 template<typename Serializer, typename... Out>
    +
    547 future<sink<Out...>> make_stream_sink(socket socket) {
    +
    548 return await_connection().then([this, socket = std::move(socket)] () mutable {
    +
    549 if (!this->get_connection_id()) {
    +
    550 return make_exception_future<sink<Out...>>(std::runtime_error("Streaming is not supported by the server"));
    +
    551 }
    +
    552 client_options o = _options;
    +
    553 o.stream_parent = this->get_connection_id();
    +
    554 o.send_timeout_data = false;
    +
    555 o.metrics_domain += "_stream";
    +
    556 auto c = make_shared<client>(_logger, _serializer, o, std::move(socket), _server_addr, _local_addr);
    +
    557 c->_parent = this->weak_from_this();
    +
    558 c->_is_stream = true;
    +
    559 return c->await_connection().then([c, this] {
    +
    560 if (_error) {
    +
    561 throw closed_error();
    +
    562 }
    +
    563 xshard_connection_ptr s = make_lw_shared(make_foreign(static_pointer_cast<rpc::connection>(c)));
    +
    564 this->register_stream(c->get_connection_id(), s);
    +
    565 return sink<Out...>(make_shared<sink_impl<Serializer, Out...>>(std::move(s)));
    +
    566 }).handle_exception([c] (std::exception_ptr eptr) {
    +
    567 // If await_connection fails we need to stop the client
    +
    568 // before destroying it.
    +
    569 return c->stop().then([eptr, c] {
    +
    570 return make_exception_future<sink<Out...>>(eptr);
    +
    571 });
    +
    572 });
    +
    573 });
    +
    574 }
    +
    575 template<typename Serializer, typename... Out>
    +
    576 future<sink<Out...>> make_stream_sink() {
    +
    577 return make_stream_sink<Serializer, Out...>(make_socket());
    +
    578 }
    +
    579
    +
    580 future<> request(uint64_t type, int64_t id, snd_buf buf, std::optional<rpc_clock_type::time_point> timeout = {}, cancellable* cancel = nullptr);
    +
    581};
    +
    582
    +
    583class protocol_base;
    +
    584
    +
    585class server {
    +
    586private:
    +
    587 static thread_local std::unordered_map<streaming_domain_type, server*> _servers;
    +
    588
    +
    589public:
    +
    590 class connection : public rpc::connection, public enable_shared_from_this<connection> {
    +
    591 client_info _info;
    +
    592 connection_id _parent_id = invalid_connection_id;
    +
    593 std::optional<isolation_config> _isolation_config;
    +
    594 private:
    +
    595 future<> negotiate_protocol();
    +
    596 future<std::tuple<std::optional<uint64_t>, uint64_t, int64_t, std::optional<rcv_buf>>>
    +
    597 read_request_frame_compressed(input_stream<char>& in);
    +
    598 future<feature_map> negotiate(feature_map requested);
    +
    599 future<> send_unknown_verb_reply(std::optional<rpc_clock_type::time_point> timeout, int64_t msg_id, uint64_t type);
    +
    600 public:
    +
    601 connection(server& s, connected_socket&& fd, socket_address&& addr, const logger& l, void* seralizer, connection_id id);
    +
    602 future<> process();
    +
    603 future<> respond(int64_t msg_id, snd_buf&& data, std::optional<rpc_clock_type::time_point> timeout, std::optional<rpc_clock_type::duration> handler_duration);
    +
    604 client_info& info() { return _info; }
    +
    605 const client_info& info() const { return _info; }
    +
    606 stats get_stats() const {
    +
    607 stats res = _stats;
    +
    608 res.pending = outgoing_queue_length();
    +
    609 return res;
    +
    610 }
    +
    611 socket_address peer_address() const override {
    +
    612 return _info.addr;
    +
    613 }
    +
    614 // Resources will be released when this goes out of scope
    +
    615 future<resource_permit> wait_for_resources(size_t memory_consumed, std::optional<rpc_clock_type::time_point> timeout) {
    +
    616 if (timeout) {
    +
    617 return get_units(get_server()._resources_available, memory_consumed, *timeout);
    +
    618 } else {
    +
    619 return get_units(get_server()._resources_available, memory_consumed);
    +
    620 }
    +
    621 }
    +
    622 size_t estimate_request_size(size_t serialized_size) {
    +
    623 return rpc::estimate_request_size(get_server()._limits, serialized_size);
    +
    624 }
    +
    625 size_t max_request_size() const {
    +
    626 return get_server()._limits.max_memory;
    +
    627 }
    +
    628 server& get_server() {
    +
    629 return _info.server;
    +
    630 }
    +
    631 const server& get_server() const {
    +
    632 return _info.server;
    +
    633 }
    +
    634 future<> deregister_this_stream();
    +
    635 future<> abort_all_streams();
    +
    636 };
    +
    637private:
    +
    638 protocol_base& _proto;
    +
    639 server_socket _ss;
    +
    640 resource_limits _limits;
    +
    641 rpc_semaphore _resources_available;
    +
    642 std::unordered_map<connection_id, shared_ptr<connection>> _conns;
    +
    643 promise<> _ss_stopped;
    +
    644 gate _reply_gate;
    +
    645 server_options _options;
    +
    646 bool _shutdown = false;
    +
    647 uint64_t _next_client_id = 1;
    +
    648
    +
    649public:
    +
    650 server(protocol_base* proto, const socket_address& addr, resource_limits memory_limit = resource_limits());
    +
    651 server(protocol_base* proto, server_options opts, const socket_address& addr, resource_limits memory_limit = resource_limits());
    + + +
    654 void accept();
    + + +
    674 template<typename Func>
    +
    675 void foreach_connection(Func&& f) {
    +
    676 for (auto c : _conns) {
    +
    677 f(*c.second);
    +
    678 }
    +
    679 }
    + +
    688 gate& reply_gate() {
    +
    689 return _reply_gate;
    +
    690 }
    +
    691 friend connection;
    +
    692 friend client;
    +
    693};
    +
    694
    +
    695using rpc_handler_func = std::function<future<> (shared_ptr<server::connection>, std::optional<rpc_clock_type::time_point> timeout, int64_t msgid,
    +
    696 rcv_buf data, gate::holder guard)>;
    +
    697
    + + +
    700 rpc_handler_func func;
    +
    701 gate use_gate;
    +
    702};
    +
    703
    + +
    705public:
    +
    706 virtual ~protocol_base() {};
    +
    707 virtual shared_ptr<server::connection> make_server_connection(rpc::server& server, connected_socket fd, socket_address addr, connection_id id) = 0;
    +
    708protected:
    +
    709 friend class server;
    +
    710
    + +
    712 rpc_handler& handler;
    +
    713 gate::holder holder;
    +
    714 };
    +
    715 virtual std::optional<handler_with_holder> get_handler(uint64_t msg_id) = 0;
    +
    716};
    +
    717
    +
    720
    +
    810template<typename Serializer, typename MsgType = uint32_t>
    +
    811class protocol final : public protocol_base {
    +
    812public:
    +
    814 class server : public rpc::server {
    +
    815 public:
    +
    816 server(protocol& proto, const socket_address& addr, resource_limits memory_limit = resource_limits()) :
    +
    817 rpc::server(&proto, addr, memory_limit) {}
    +
    818 server(protocol& proto, server_options opts, const socket_address& addr, resource_limits memory_limit = resource_limits()) :
    +
    819 rpc::server(&proto, opts, addr, memory_limit) {}
    + +
    821 rpc::server(&proto, std::move(socket), memory_limit) {}
    + +
    823 rpc::server(&proto, opts, std::move(socket), memory_limit) {}
    +
    824 };
    +
    826 class client : public rpc::client {
    +
    827 public:
    +
    828 /*
    +
    829 * Create client object which will attempt to connect to the remote address.
    +
    830 *
    +
    831 * @param addr the remote address identifying this client
    +
    832 * @param local the local address of this client
    +
    833 */
    +
    834 client(protocol& p, const socket_address& addr, const socket_address& local = {}) :
    +
    835 rpc::client(p.get_logger(), &p._serializer, addr, local) {}
    +
    836 client(protocol& p, client_options options, const socket_address& addr, const socket_address& local = {}) :
    +
    837 rpc::client(p.get_logger(), &p._serializer, options, addr, local) {}
    +
    838
    +
    847 client(protocol& p, socket socket, const socket_address& addr, const socket_address& local = {}) :
    +
    848 rpc::client(p.get_logger(), &p._serializer, std::move(socket), addr, local) {}
    +
    849 client(protocol& p, client_options options, socket socket, const socket_address& addr, const socket_address& local = {}) :
    +
    850 rpc::client(p.get_logger(), &p._serializer, options, std::move(socket), addr, local) {}
    +
    851 };
    +
    852
    +
    853 friend server;
    +
    854private:
    +
    855 std::unordered_map<MsgType, rpc_handler> _handlers;
    +
    856 Serializer _serializer;
    +
    857 logger _logger;
    +
    858
    +
    859public:
    +
    860 protocol(Serializer&& serializer) : _serializer(std::forward<Serializer>(serializer)) {}
    +
    861
    +
    871 template<typename Func>
    +
    872 auto make_client(MsgType t);
    +
    873
    +
    886 template<typename Func>
    +
    887 auto register_handler(MsgType t, Func&& func);
    +
    888
    +
    906 template <typename Func>
    +
    907 auto register_handler(MsgType t, scheduling_group sg, Func&& func);
    +
    908
    +
    919 future<> unregister_handler(MsgType t);
    +
    920
    +
    925 [[deprecated("Use set_logger(::seastar::logger*) instead")]]
    +
    926 void set_logger(std::function<void(const sstring&)> logger) {
    +
    927 _logger.set(std::move(logger));
    +
    928 }
    +
    929
    +
    931 void set_logger(::seastar::logger* logger) {
    +
    932 _logger.set(logger);
    +
    933 }
    +
    934
    +
    935 const logger& get_logger() const {
    +
    936 return _logger;
    +
    937 }
    +
    938
    +
    939 shared_ptr<rpc::server::connection> make_server_connection(rpc::server& server, connected_socket fd, socket_address addr, connection_id id) override {
    +
    940 return make_shared<rpc::server::connection>(server, std::move(fd), std::move(addr), _logger, &_serializer, id);
    +
    941 }
    +
    942
    +
    943 bool has_handler(MsgType msg_id);
    +
    944
    +
    949 bool has_handlers() const noexcept {
    +
    950 return !_handlers.empty();
    +
    951 }
    +
    952
    +
    953private:
    +
    954 std::optional<handler_with_holder> get_handler(uint64_t msg_id) override;
    +
    955
    +
    956 template<typename Ret, typename... In>
    +
    957 auto make_client(signature<Ret(In...)> sig, MsgType t);
    +
    958
    +
    959 void register_receiver(MsgType t, rpc_handler&& handler) {
    +
    960 auto r = _handlers.emplace(t, std::move(handler));
    +
    961 if (!r.second) {
    +
    962 throw_with_backtrace<std::runtime_error>("registered handler already exists");
    +
    963 }
    +
    964 }
    +
    965};
    +
    966
    +
    968
    +
    969}
    +
    970
    +
    971}
    +
    972
    +
    973#include "rpc_impl.hh"
    + +
    static constexpr size_t max_counter() noexcept
    Returns the maximum number of units the semaphore counter can hold.
    Definition: semaphore.hh:231
    +
    Definition: api.hh:183
    +
    Definition: shared_ptr.hh:499
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    value_type && get()
    gets the value returned by the computation
    Definition: future.hh:1342
    +
    Definition: gate.hh:171
    +
    Definition: gate.hh:61
    + + + + +
    Definition: queue.hh:44
    +
    Definition: rpc_types.hh:166
    +
    Definition: rpc.hh:427
    +
    client(const logger &l, void *s, const socket_address &addr, const socket_address &local={})
    +
    client(const logger &l, void *s, socket socket, const socket_address &addr, const socket_address &local={})
    +
    Definition: rpc_types.hh:291
    +
    Definition: rpc_types.hh:67
    +
    Definition: rpc.hh:243
    +
    Definition: rpc.hh:193
    +
    Represents a client side connection.
    Definition: rpc.hh:826
    +
    client(protocol &p, socket socket, const socket_address &addr, const socket_address &local={})
    Definition: rpc.hh:847
    +
    Represents the listening port and all accepted connections.
    Definition: rpc.hh:814
    +
    Definition: rpc.hh:704
    + +
    Definition: rpc.hh:811
    +
    void set_logger(std::function< void(const sstring &)> logger)
    Definition: rpc.hh:926
    +
    bool has_handlers() const noexcept
    Definition: rpc.hh:949
    +
    void set_logger(::seastar::logger *logger)
    Set a logger to be used to log messages.
    Definition: rpc.hh:931
    +
    Definition: rpc.hh:590
    +
    Definition: rpc.hh:585
    +
    void abort_connection(connection_id id)
    + + +
    Definition: rpc_types.hh:320
    +
    Definition: rpc.hh:402
    +
    Definition: rpc_types.hh:318
    +
    Definition: rpc_types.hh:359
    +
    Definition: rpc.hh:421
    +
    Definition: rpc_types.hh:357
    + +
    Definition: rpc_types.hh:145
    +
    Identifies function calls that are accounted as a group.
    Definition: scheduling.hh:285
    +
    A listening socket, waiting to accept incoming network connections.
    Definition: api.hh:326
    +
    Like promise except that its counterpart is shared_future instead of future.
    Definition: shared_future.hh:319
    +
    Definition: shared_ptr.hh:513
    +
    Definition: socket_defs.hh:47
    +
    Definition: api.hh:283
    +
    Definition: timer.hh:83
    +
    bool cancel() noexcept
    +
    Definition: weak_ptr.hh:46
    +
    Definition: weak_ptr.hh:133
    +
    basic_semaphore< semaphore_default_exception_factory > semaphore
    Definition: semaphore.hh:804
    +
    future< T > make_ready_future(A &&... value) noexcept
    Creates a future in an available, value state.
    Definition: future.hh:1943
    +
    future< T > get_future() noexcept
    Gets the promise's associated future.
    Definition: future.hh:1926
    +
    future< T > make_exception_future(std::exception_ptr &&value) noexcept
    Creates a future in an available, failed state.
    Definition: future.hh:1949
    +
    log_level
    log level used with
    Definition: log.hh:55
    +
    socket make_socket()
    +
    scheduling_group sched_group
    Definition: rpc.hh:78
    +
    size_t max_memory
    Definition: rpc.hh:100
    +
    unsigned bloat_factor
    Serialized size multiplied by this to estimate memory used by request.
    Definition: rpc.hh:99
    +
    std::function< isolation_config(sstring isolation_cookie)> syncronous_isolation_function
    Definition: rpc.hh:103
    +
    size_t basic_request_size
    Minimum request footprint in memory.
    Definition: rpc.hh:98
    +
    sstring isolation_cookie
    Definition: rpc.hh:119
    +
    isolation_config default_isolate_connection(sstring isolation_cookie)
    +
    Definition: rpc.hh:109
    +
    Specifies resource isolation for a connection.
    Definition: rpc.hh:75
    +
    Resource limits for an RPC server.
    Definition: rpc.hh:97
    +
    Definition: rpc.hh:152
    +
    statistics stats()
    Capture a snapshot of memory allocation statistics for this lcore.
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    scheduling_group current_scheduling_group() noexcept
    Returns the current scheduling group.
    Definition: scheduling.hh:399
    +
    sstring format(const char *fmt, A &&... a)
    Definition: print.hh:143
    +
    STL namespace.
    +
    ostream & operator<<(ostream &os, const seastar::lazy_eval< Func > &lf)
    Definition: lazy.hh:131
    + +
    Definition: rpc_types.hh:204
    + +
    Definition: rpc_types.hh:98
    +
    Definition: rpc.hh:257
    +
    Definition: rpc.hh:395
    +
    Definition: rpc.hh:172
    +
    Definition: rpc_types.hh:240
    +
    Definition: rpc.hh:698
    +
    Definition: rpc.hh:191
    +
    Definition: rpc_types.hh:252
    +
    Definition: rpc_types.hh:55
    +
    + + + + diff --git a/master/rpc__impl_8hh_source.html b/master/rpc__impl_8hh_source.html new file mode 100644 index 000000000..d3884e2d9 --- /dev/null +++ b/master/rpc__impl_8hh_source.html @@ -0,0 +1,1033 @@ + + + + + + + +Seastar: seastar/rpc/rpc_impl.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    rpc_impl.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2015 Cloudius Systems, Ltd.
    +
    20 */
    +
    21#pragma once
    +
    22
    +
    23#include <seastar/core/function_traits.hh>
    +
    24#include <seastar/core/shared_ptr.hh>
    +
    25#include <seastar/core/sstring.hh>
    +
    26#include <seastar/core/when_all.hh>
    +
    27#include <seastar/util/is_smart_ptr.hh>
    +
    28#include <seastar/core/simple-stream.hh>
    +
    29#include <boost/range/numeric.hpp>
    +
    30#include <boost/range/adaptor/transformed.hpp>
    +
    31#include <seastar/net/packet-data-source.hh>
    +
    32#include <seastar/core/print.hh>
    +
    33
    +
    34namespace seastar {
    +
    35
    +
    36namespace rpc {
    +
    37
    +
    38enum class exception_type : uint32_t {
    +
    39 USER = 0,
    +
    40 UNKNOWN_VERB = 1,
    +
    41};
    +
    42
    +
    43template<typename T>
    + +
    45 using type = T;
    +
    46};
    +
    47
    +
    48template<typename T>
    + +
    50 using type = T;
    +
    51};
    +
    52
    +
    53struct wait_type {}; // opposite of no_wait_type
    +
    54
    +
    55// tags to tell whether we want a const client_info& parameter
    + + +
    58
    +
    59// tags to tell whether we want a opt_time_point parameter
    + + +
    62
    +
    63// General case
    +
    64template <typename Ret, typename... In>
    +
    65struct signature<Ret (In...)> {
    +
    66 using ret_type = Ret;
    +
    67 using arg_types = std::tuple<In...>;
    +
    68 using clean = signature;
    + + +
    71};
    +
    72
    +
    73// Specialize 'clean' for handlers that receive client_info
    +
    74template <typename Ret, typename... In>
    +
    75struct signature<Ret (const client_info&, In...)> {
    +
    76 using ret_type = Ret;
    +
    77 using arg_types = std::tuple<In...>;
    +
    78 using clean = signature<Ret (In...)>;
    + + +
    81};
    +
    82
    +
    83template <typename Ret, typename... In>
    +
    84struct signature<Ret (client_info&, In...)> {
    +
    85 using ret_type = Ret;
    +
    86 using arg_types = std::tuple<In...>;
    +
    87 using clean = signature<Ret (In...)>;
    + + +
    90};
    +
    91
    +
    92// Specialize 'clean' for handlers that receive client_info and opt_time_point
    +
    93template <typename Ret, typename... In>
    +
    94struct signature<Ret (const client_info&, opt_time_point, In...)> {
    +
    95 using ret_type = Ret;
    +
    96 using arg_types = std::tuple<In...>;
    +
    97 using clean = signature<Ret (In...)>;
    + + +
    100};
    +
    101
    +
    102template <typename Ret, typename... In>
    +
    103struct signature<Ret (client_info&, opt_time_point, In...)> {
    +
    104 using ret_type = Ret;
    +
    105 using arg_types = std::tuple<In...>;
    +
    106 using clean = signature<Ret (In...)>;
    + + +
    109};
    +
    110
    +
    111// Specialize 'clean' for handlers that receive opt_time_point
    +
    112template <typename Ret, typename... In>
    +
    113struct signature<Ret (opt_time_point, In...)> {
    +
    114 using ret_type = Ret;
    +
    115 using arg_types = std::tuple<In...>;
    +
    116 using clean = signature<Ret (In...)>;
    + + +
    119};
    +
    120
    +
    121template <typename T>
    + +
    123 using type = wait_type;
    +
    124 using cleaned_type = T;
    +
    125};
    +
    126
    +
    127template <typename... T>
    +
    128struct wait_signature<future<T...>> {
    +
    129 using type = wait_type;
    +
    130 using cleaned_type = future<T...>;
    +
    131};
    +
    132
    +
    133template <>
    + +
    135 using type = no_wait_type;
    +
    136 using cleaned_type = void;
    +
    137};
    +
    138
    +
    139template <>
    + +
    141 using type = no_wait_type;
    +
    142 using cleaned_type = future<>;
    +
    143};
    +
    144
    +
    145template <typename T>
    +
    146using wait_signature_t = typename wait_signature<T>::type;
    +
    147
    +
    148template <typename... In>
    +
    149inline
    +
    150std::tuple<In...>
    +
    151maybe_add_client_info(dont_want_client_info, client_info&, std::tuple<In...>&& args) {
    +
    152 return std::move(args);
    +
    153}
    +
    154
    +
    155template <typename... In>
    +
    156inline
    +
    157std::tuple<std::reference_wrapper<client_info>, In...>
    +
    158maybe_add_client_info(do_want_client_info, client_info& ci, std::tuple<In...>&& args) {
    +
    159 return std::tuple_cat(std::make_tuple(std::ref(ci)), std::move(args));
    +
    160}
    +
    161
    +
    162template <typename... In>
    +
    163inline
    +
    164std::tuple<In...>
    +
    165maybe_add_time_point(dont_want_time_point, opt_time_point&, std::tuple<In...>&& args) {
    +
    166 return std::move(args);
    +
    167}
    +
    168
    +
    169template <typename... In>
    +
    170inline
    +
    171std::tuple<opt_time_point, In...>
    +
    172maybe_add_time_point(do_want_time_point, opt_time_point& otp, std::tuple<In...>&& args) {
    +
    173 return std::tuple_cat(std::make_tuple(otp), std::move(args));
    +
    174}
    +
    175
    +
    176inline sstring serialize_connection_id(const connection_id& id) {
    +
    177 sstring p = uninitialized_string(sizeof(id));
    +
    178 auto c = p.data();
    +
    179 write_le(c, id.id());
    +
    180 return p;
    +
    181}
    +
    182
    +
    183inline connection_id deserialize_connection_id(const sstring& s) {
    +
    184 using id_type = decltype(connection_id{0}.id());
    +
    185 auto p = s.c_str();
    +
    186 auto id = read_le<id_type>(p);
    +
    187 return connection_id{id};
    +
    188}
    +
    189
    +
    190template <bool IsSmartPtr>
    + +
    192
    +
    193template <>
    +
    194struct serialize_helper<false> {
    +
    195 template <typename Serializer, typename Output, typename T>
    +
    196 static inline void serialize(Serializer& serializer, Output& out, const T& t) {
    +
    197 return write(serializer, out, t);
    +
    198 }
    +
    199};
    +
    200
    +
    201template <>
    +
    202struct serialize_helper<true> {
    +
    203 template <typename Serializer, typename Output, typename T>
    +
    204 static inline void serialize(Serializer& serializer, Output& out, const T& t) {
    +
    205 return write(serializer, out, *t);
    +
    206 }
    +
    207};
    +
    208
    +
    209template <typename Serializer, typename Output, typename... T>
    +
    210inline void do_marshall(Serializer& serializer, Output& out, const T&... args);
    +
    211
    +
    212template <typename Serializer, typename Output>
    + +
    214 template <typename T> struct helper {
    +
    215 static void doit(Serializer& serializer, Output& out, const T& arg) {
    +
    216 using serialize_helper_type = serialize_helper<is_smart_ptr<typename std::remove_reference_t<T>>::value>;
    +
    217 serialize_helper_type::serialize(serializer, out, arg);
    +
    218 }
    +
    219 };
    +
    220 template<typename T> struct helper<std::reference_wrapper<const T>> {
    +
    221 static void doit(Serializer& serializer, Output& out, const std::reference_wrapper<const T>& arg) {
    +
    222 helper<T>::doit(serializer, out, arg.get());
    +
    223 }
    +
    224 };
    +
    225 static void put_connection_id(const connection_id& cid, Output& out) {
    +
    226 sstring id = serialize_connection_id(cid);
    +
    227 out.write(id.c_str(), id.size());
    +
    228 }
    +
    229 template <typename... T> struct helper<sink<T...>> {
    +
    230 static void doit(Serializer&, Output& out, const sink<T...>& arg) {
    +
    231 put_connection_id(arg.get_id(), out);
    +
    232 }
    +
    233 };
    +
    234 template <typename... T> struct helper<source<T...>> {
    +
    235 static void doit(Serializer&, Output& out, const source<T...>& arg) {
    +
    236 put_connection_id(arg.get_id(), out);
    +
    237 }
    +
    238 };
    +
    239 template <typename... T> struct helper<tuple<T...>> {
    +
    240 static void doit(Serializer& serializer, Output& out, const tuple<T...>& arg) {
    +
    241 auto do_do_marshall = [&serializer, &out] (const auto&... args) {
    +
    242 do_marshall(serializer, out, args...);
    +
    243 };
    +
    244 // since C++23, std::apply() only accepts tuple-like types, while
    +
    245 // rpc::tuple is not a tuple-like type from the tuple-like C++
    +
    246 // concept's perspective. so we have to cast it to std::tuple to
    +
    247 // appease std::apply()
    +
    248 std::apply(do_do_marshall, static_cast<const std::tuple<T...>&>(arg));
    +
    249 }
    +
    250 };
    +
    251};
    +
    252
    +
    253template <typename Serializer, typename Output, typename... T>
    +
    254inline void do_marshall(Serializer& serializer, Output& out, const T&... args) {
    +
    255 // C++ guarantees that brace-initialization expressions are evaluted in order
    +
    256 (void)std::initializer_list<int>{(marshall_one<Serializer, Output>::template helper<T>::doit(serializer, out, args), 1)...};
    +
    257}
    +
    258
    +
    259static inline memory_output_stream<snd_buf::iterator> make_serializer_stream(snd_buf& output) {
    +
    260 auto* b = std::get_if<temporary_buffer<char>>(&output.bufs);
    +
    261 if (b) {
    +
    262 return memory_output_stream<snd_buf::iterator>(memory_output_stream<snd_buf::iterator>::simple(b->get_write(), b->size()));
    +
    263 } else {
    +
    264 auto& ar = std::get<std::vector<temporary_buffer<char>>>(output.bufs);
    +
    265 return memory_output_stream<snd_buf::iterator>(memory_output_stream<snd_buf::iterator>::fragmented(ar.begin(), output.size));
    +
    266 }
    +
    267}
    +
    268
    +
    269template <typename Serializer, typename... T>
    +
    270inline snd_buf marshall(Serializer& serializer, size_t head_space, const T&... args) {
    +
    271 measuring_output_stream measure;
    +
    272 do_marshall(serializer, measure, args...);
    +
    273 snd_buf ret(measure.size() + head_space);
    +
    274 auto out = make_serializer_stream(ret);
    +
    275 out.skip(head_space);
    +
    276 do_marshall(serializer, out, args...);
    +
    277 return ret;
    +
    278}
    +
    279
    +
    280template <typename Serializer, typename Input, typename... T>
    +
    281std::tuple<T...> do_unmarshall(connection& c, Input& in);
    +
    282
    +
    283template<typename Serializer, typename Input>
    + +
    285 template<typename T> struct helper {
    +
    286 static T doit(connection& c, Input& in) {
    +
    287 return read(c.serializer<Serializer>(), in, type<T>());
    +
    288 }
    +
    289 };
    +
    290 template<typename T> struct helper<optional<T>> {
    +
    291 static optional<T> doit(connection& c, Input& in) {
    +
    292 if (in.size()) {
    +
    293 return optional<T>(read(c.serializer<Serializer>(), in, type<typename remove_optional<T>::type>()));
    +
    294 } else {
    +
    295 return optional<T>();
    +
    296 }
    +
    297 }
    +
    298 };
    +
    299 template<typename T> struct helper<std::reference_wrapper<const T>> {
    +
    300 static T doit(connection& c, Input& in) {
    +
    301 return helper<T>::doit(c, in);
    +
    302 }
    +
    303 };
    +
    304 static connection_id get_connection_id(Input& in) {
    +
    305 sstring id = uninitialized_string(sizeof(connection_id));
    +
    306 in.read(id.data(), sizeof(connection_id));
    +
    307 return deserialize_connection_id(id);
    +
    308 }
    +
    309 template<typename... T> struct helper<sink<T...>> {
    +
    310 static sink<T...> doit(connection& c, Input& in) {
    +
    311 return sink<T...>(make_shared<sink_impl<Serializer, T...>>(c.get_stream(get_connection_id(in))));
    +
    312 }
    +
    313 };
    +
    314 template<typename... T> struct helper<source<T...>> {
    +
    315 static source<T...> doit(connection& c, Input& in) {
    +
    316 return source<T...>(make_shared<source_impl<Serializer, T...>>(c.get_stream(get_connection_id(in))));
    +
    317 }
    +
    318 };
    +
    319 template <typename... T> struct helper<tuple<T...>> {
    +
    320 static tuple<T...> doit(connection& c, Input& in) {
    +
    321 return do_unmarshall<Serializer, Input, T...>(c, in);
    +
    322 }
    +
    323 };
    +
    324};
    +
    325
    +
    326template <typename Serializer, typename Input, typename... T>
    +
    327inline std::tuple<T...> do_unmarshall(connection& c, Input& in) {
    +
    328 // Argument order processing is unspecified, but we need to deserialize
    +
    329 // left-to-right. So we deserialize into something that can be lazily
    +
    330 // constructed (and can conditionally destroy itself if we only constructed some
    +
    331 // of the arguments).
    +
    332 std::tuple<std::optional<T>...> temporary;
    +
    333 return std::apply([&] (auto&... args) {
    +
    334 // Comma-expression preserves left-to-right order
    +
    335 (..., (args = unmarshal_one<Serializer, Input>::template helper<typename std::remove_reference_t<decltype(args)>::value_type>::doit(c, in)));
    +
    336 return std::tuple(std::move(*args)...);
    +
    337 }, temporary);
    +
    338}
    +
    339
    +
    340template <typename Serializer, typename... T>
    +
    341inline std::tuple<T...> unmarshall(connection& c, rcv_buf input) {
    +
    342 auto in = make_deserializer_stream(input);
    +
    343 return do_unmarshall<Serializer, decltype(in), T...>(c, in);
    +
    344}
    +
    345
    +
    346inline std::exception_ptr unmarshal_exception(rcv_buf& d) {
    +
    347 std::exception_ptr ex;
    +
    348 auto data = make_deserializer_stream(d);
    +
    349
    +
    350 uint32_t v32;
    +
    351 data.read(reinterpret_cast<char*>(&v32), 4);
    +
    352 exception_type ex_type = exception_type(le_to_cpu(v32));
    +
    353 data.read(reinterpret_cast<char*>(&v32), 4);
    +
    354 uint32_t ex_len = le_to_cpu(v32);
    +
    355
    +
    356 switch (ex_type) {
    +
    357 case exception_type::USER: {
    +
    358 std::string s(ex_len, '\0');
    +
    359 data.read(&*s.begin(), ex_len);
    +
    360 ex = std::make_exception_ptr(remote_verb_error(std::move(s)));
    +
    361 break;
    +
    362 }
    +
    363 case exception_type::UNKNOWN_VERB: {
    +
    364 uint64_t v64;
    +
    365 data.read(reinterpret_cast<char*>(&v64), 8);
    +
    366 ex = std::make_exception_ptr(unknown_verb_error(le_to_cpu(v64)));
    +
    367 break;
    +
    368 }
    +
    369 default:
    +
    370 ex = std::make_exception_ptr(unknown_exception_error());
    +
    371 break;
    +
    372 }
    +
    373 return ex;
    +
    374}
    +
    375
    +
    376template <typename Payload, typename... T>
    + +
    378 bool done = false;
    +
    379 promise<T...> p;
    +
    380 template<typename... V>
    +
    381 void set_value(V&&... v) {
    +
    382 done = true;
    +
    383 p.set_value(internal::untuple(std::forward<V>(v))...);
    +
    384 }
    + +
    386 if (!done) {
    +
    387 p.set_exception(closed_error());
    +
    388 }
    +
    389 }
    +
    390};
    +
    391
    +
    392template<typename Serializer, typename T>
    +
    393struct rcv_reply : rcv_reply_base<T, T> {
    +
    394 inline void get_reply(rpc::client& dst, rcv_buf input) {
    +
    395 this->set_value(unmarshall<Serializer, T>(dst, std::move(input)));
    +
    396 }
    +
    397};
    +
    398
    +
    399template<typename Serializer, typename... T>
    +
    400struct rcv_reply<Serializer, future<T...>> : rcv_reply_base<std::tuple<T...>, T...> {
    +
    401 inline void get_reply(rpc::client& dst, rcv_buf input) {
    +
    402 this->set_value(unmarshall<Serializer, T...>(dst, std::move(input)));
    +
    403 }
    +
    404};
    +
    405
    +
    406template<typename Serializer>
    +
    407struct rcv_reply<Serializer, void> : rcv_reply_base<void, void> {
    +
    408 inline void get_reply(rpc::client&, rcv_buf) {
    +
    409 this->set_value();
    +
    410 }
    +
    411};
    +
    412
    +
    413template<typename Serializer>
    +
    414struct rcv_reply<Serializer, future<>> : rcv_reply<Serializer, void> {};
    +
    415
    +
    416template <typename Serializer, typename Ret, typename... InArgs>
    +
    417inline auto wait_for_reply(wait_type, std::optional<rpc_clock_type::time_point> timeout, rpc_clock_type::time_point start, cancellable* cancel, rpc::client& dst, id_type msg_id,
    +
    418 signature<Ret (InArgs...)>) {
    +
    419 using reply_type = rcv_reply<Serializer, Ret>;
    +
    420 auto lambda = [] (reply_type& r, rpc::client& dst, id_type msg_id, rcv_buf data) mutable {
    +
    421 if (msg_id >= 0) {
    +
    422 dst.get_stats_internal().replied++;
    +
    423 return r.get_reply(dst, std::move(data));
    +
    424 } else {
    +
    425 dst.get_stats_internal().exception_received++;
    +
    426 r.done = true;
    +
    427 r.p.set_exception(unmarshal_exception(data));
    +
    428 }
    +
    429 };
    +
    430 using handler_type = typename rpc::client::template reply_handler<reply_type, decltype(lambda)>;
    +
    431 auto r = std::make_unique<handler_type>(std::move(lambda));
    +
    432 r->start = start;
    +
    433 auto fut = r->reply.p.get_future();
    +
    434 dst.wait_for_reply(msg_id, std::move(r), timeout, cancel);
    +
    435 return fut;
    +
    436}
    +
    437
    +
    438template<typename Serializer, typename... InArgs>
    +
    439inline auto wait_for_reply(no_wait_type, std::optional<rpc_clock_type::time_point>, rpc_clock_type::time_point start, cancellable*, rpc::client&, id_type,
    +
    440 signature<no_wait_type (InArgs...)>) { // no_wait overload
    +
    441 return make_ready_future<>();
    +
    442}
    +
    443
    +
    444template<typename Serializer, typename... InArgs>
    +
    445inline auto wait_for_reply(no_wait_type, std::optional<rpc_clock_type::time_point>, rpc_clock_type::time_point, cancellable*, rpc::client&, id_type,
    +
    446 signature<future<no_wait_type> (InArgs...)>) { // future<no_wait> overload
    +
    447 return make_ready_future<>();
    +
    448}
    +
    449
    +
    450// Convert a relative timeout (a duration) to an absolute one (time_point).
    +
    451// Do the calculation safely so that a very large duration will be capped by
    +
    452// time_point::max, instead of wrapping around to ancient history.
    +
    453inline rpc_clock_type::time_point
    +
    454relative_timeout_to_absolute(rpc_clock_type::duration relative) {
    +
    455 rpc_clock_type::time_point now = rpc_clock_type::now();
    +
    456 return now + std::min(relative, rpc_clock_type::time_point::max() - now);
    +
    457}
    +
    458
    +
    459// Refer to struct request_frame for more details
    +
    460static constexpr size_t request_frame_headroom = 28;
    +
    461
    +
    462// Returns lambda that can be used to send rpc messages.
    +
    463// The lambda gets client connection and rpc parameters as arguments, marshalls them sends
    +
    464// to a server and waits for a reply. After receiving reply it unmarshalls it and signal completion
    +
    465// to a caller.
    +
    466template<typename Serializer, typename MsgType, typename Ret, typename... InArgs>
    +
    467auto send_helper(MsgType xt, signature<Ret (InArgs...)> xsig) {
    +
    468 struct shelper {
    +
    469 MsgType t;
    +
    470 signature<Ret (InArgs...)> sig;
    +
    471 auto send(rpc::client& dst, std::optional<rpc_clock_type::time_point> timeout, cancellable* cancel, const InArgs&... args) {
    +
    472 if (dst.error()) {
    +
    473 using cleaned_ret_type = typename wait_signature<Ret>::cleaned_type;
    +
    474 return futurize<cleaned_ret_type>::make_exception_future(closed_error());
    +
    475 }
    +
    476
    +
    477 auto start = rpc_clock_type::now();
    +
    478 // send message
    +
    479 auto msg_id = dst.next_message_id();
    +
    480 snd_buf data = marshall(dst.template serializer<Serializer>(), request_frame_headroom, args...);
    +
    481
    +
    482 // prepare reply handler, if return type is now_wait_type this does nothing, since no reply will be sent
    +
    483 using wait = wait_signature_t<Ret>;
    +
    484 return when_all(dst.request(uint64_t(t), msg_id, std::move(data), timeout, cancel), wait_for_reply<Serializer>(wait(), timeout, start, cancel, dst, msg_id, sig)).then([] (auto r) {
    +
    485 std::get<0>(r).ignore_ready_future();
    +
    486 return std::move(std::get<1>(r)); // return future of wait_for_reply
    +
    487 });
    +
    488 }
    +
    489 auto operator()(rpc::client& dst, const InArgs&... args) {
    +
    490 return send(dst, {}, nullptr, args...);
    +
    491 }
    +
    492 auto operator()(rpc::client& dst, rpc_clock_type::time_point timeout, const InArgs&... args) {
    +
    493 return send(dst, timeout, nullptr, args...);
    +
    494 }
    +
    495 auto operator()(rpc::client& dst, rpc_clock_type::duration timeout, const InArgs&... args) {
    +
    496 return send(dst, relative_timeout_to_absolute(timeout), nullptr, args...);
    +
    497 }
    +
    498 auto operator()(rpc::client& dst, cancellable& cancel, const InArgs&... args) {
    +
    499 return send(dst, {}, &cancel, args...);
    +
    500 }
    +
    501
    +
    502 };
    +
    503 return shelper{xt, xsig};
    +
    504}
    +
    505
    +
    506// Refer to struct response_frame for more details
    +
    507static constexpr size_t response_frame_headroom = 16;
    +
    508
    +
    509template<typename Serializer, typename RetTypes>
    +
    510inline future<> reply(wait_type, future<RetTypes>&& ret, int64_t msg_id, shared_ptr<server::connection> client,
    +
    511 std::optional<rpc_clock_type::time_point> timeout, std::optional<rpc_clock_type::duration> handler_duration) {
    +
    512 if (!client->error()) {
    +
    513 snd_buf data;
    +
    514 try {
    +
    515 if constexpr (std::is_void_v<RetTypes>) {
    +
    516 ret.get();
    +
    517 data = std::invoke(marshall<Serializer>, std::ref(client->template serializer<Serializer>()), response_frame_headroom);
    +
    518 } else {
    +
    519 data = std::invoke(marshall<Serializer, const RetTypes&>, std::ref(client->template serializer<Serializer>()), response_frame_headroom, std::move(ret.get()));
    +
    520 }
    +
    521 } catch (std::exception& ex) {
    +
    522 uint32_t len = std::strlen(ex.what());
    +
    523 data = snd_buf(response_frame_headroom + 2 * sizeof(uint32_t) + len);
    +
    524 auto os = make_serializer_stream(data);
    +
    525 os.skip(response_frame_headroom);
    +
    526 uint32_t v32 = cpu_to_le(uint32_t(exception_type::USER));
    +
    527 os.write(reinterpret_cast<char*>(&v32), sizeof(v32));
    +
    528 v32 = cpu_to_le(len);
    +
    529 os.write(reinterpret_cast<char*>(&v32), sizeof(v32));
    +
    530 os.write(ex.what(), len);
    +
    531 msg_id = -msg_id;
    +
    532 }
    +
    533
    +
    534 return client->respond(msg_id, std::move(data), timeout, handler_duration);
    +
    535 } else {
    +
    536 ret.ignore_ready_future();
    +
    537 return make_ready_future<>();
    +
    538 }
    +
    539}
    +
    540
    +
    541// specialization for no_wait_type which does not send a reply
    +
    542template<typename Serializer>
    +
    543inline future<> reply(no_wait_type, future<no_wait_type>&& r, int64_t msgid, shared_ptr<server::connection> client,
    +
    544 std::optional<rpc_clock_type::time_point>, std::optional<rpc_clock_type::duration>) {
    +
    545 try {
    +
    546 r.get();
    +
    547 } catch (std::exception& ex) {
    +
    548 client->get_logger()(client->info(), msgid, to_sstring("exception \"") + ex.what() + "\" in no_wait handler ignored");
    +
    549 }
    +
    550 return make_ready_future<>();
    +
    551}
    +
    552
    +
    553template<typename Ret, typename... InArgs, typename WantClientInfo, typename WantTimePoint, typename Func, typename ArgsTuple>
    +
    554inline futurize_t<Ret> apply(Func& func, client_info& info, opt_time_point time_point, WantClientInfo wci, WantTimePoint wtp, signature<Ret (InArgs...)>, ArgsTuple&& args) {
    +
    555 using futurator = futurize<Ret>;
    +
    556 return futurator::apply(func, maybe_add_client_info(wci, info, maybe_add_time_point(wtp, time_point, std::forward<ArgsTuple>(args))));
    +
    557}
    +
    558
    +
    559// lref_to_cref is a helper that encapsulates lvalue reference in std::ref() or does nothing otherwise
    +
    560template<typename T>
    +
    561auto lref_to_cref(T&& x) {
    +
    562 return std::move(x);
    +
    563}
    +
    564
    +
    565template<typename T>
    +
    566auto lref_to_cref(T& x) {
    +
    567 return std::ref(x);
    +
    568}
    +
    569
    +
    570// Creates lambda to handle RPC message on a server.
    +
    571// The lambda unmarshalls all parameters, calls a handler, marshall return values and sends them back to a client
    +
    572template <typename Serializer, typename Func, typename Ret, typename... InArgs, typename WantClientInfo, typename WantTimePoint>
    +
    573auto recv_helper(signature<Ret (InArgs...)> sig, Func&& func, WantClientInfo, WantTimePoint) {
    +
    574 using signature = decltype(sig);
    +
    575 using wait_style = wait_signature_t<Ret>;
    +
    576 return [func = lref_to_cref(std::forward<Func>(func))](shared_ptr<server::connection> client,
    +
    577 std::optional<rpc_clock_type::time_point> timeout,
    +
    578 int64_t msg_id,
    +
    579 rcv_buf data,
    +
    580 gate::holder guard) mutable {
    +
    581 auto memory_consumed = client->estimate_request_size(data.size);
    +
    582 if (memory_consumed > client->max_request_size()) {
    +
    583 auto err = format("request size {:d} large than memory limit {:d}", memory_consumed, client->max_request_size());
    +
    584 client->get_logger()(client->peer_address(), err);
    +
    585 // FIXME: future is discarded
    +
    586 (void)try_with_gate(client->get_server().reply_gate(), [client, timeout, msg_id, err = std::move(err)] {
    +
    587 return reply<Serializer>(wait_style(), futurize<Ret>::make_exception_future(std::runtime_error(err.c_str())), msg_id, client, timeout, std::nullopt).handle_exception([client, msg_id] (std::exception_ptr eptr) {
    +
    588 client->get_logger()(client->info(), msg_id, format("got exception while processing an oversized message: {}", eptr));
    +
    589 });
    +
    590 }).handle_exception_type([] (gate_closed_exception&) {/* ignore */});
    +
    591 return make_ready_future();
    +
    592 }
    +
    593 // note: apply is executed asynchronously with regards to networking so we cannot chain futures here by doing "return apply()"
    +
    594 auto f = client->wait_for_resources(memory_consumed, timeout).then([client, timeout, msg_id, data = std::move(data), &func, g = std::move(guard)] (auto permit) mutable {
    +
    595 // FIXME: future is discarded
    +
    596 (void)try_with_gate(client->get_server().reply_gate(), [client, timeout, msg_id, data = std::move(data), permit = std::move(permit), &func] () mutable {
    +
    597 try {
    +
    598 auto args = unmarshall<Serializer, InArgs...>(*client, std::move(data));
    +
    599 auto start = rpc_clock_type::now();
    +
    600 return apply(func, client->info(), timeout, WantClientInfo(), WantTimePoint(), signature(), std::move(args)).then_wrapped([client, timeout, msg_id, permit = std::move(permit), start] (futurize_t<Ret> ret) mutable {
    +
    601 return reply<Serializer>(wait_style(), std::move(ret), msg_id, client, timeout, rpc_clock_type::now() - start).handle_exception([permit = std::move(permit), client, msg_id] (std::exception_ptr eptr) {
    +
    602 client->get_logger()(client->info(), msg_id, format("got exception while processing a message: {}", eptr));
    +
    603 });
    +
    604 });
    +
    605 } catch (...) {
    +
    606 client->get_logger()(client->info(), msg_id, format("caught exception while processing a message: {}", std::current_exception()));
    +
    607 return make_ready_future();
    +
    608 }
    +
    609 }).handle_exception_type([g = std::move(g)] (gate_closed_exception&) {/* ignore */});
    +
    610 });
    +
    611
    +
    612 if (timeout) {
    +
    613 f = f.handle_exception_type([] (semaphore_timed_out&) { /* ignore */ });
    +
    614 }
    +
    615
    +
    616 return f;
    +
    617 };
    +
    618}
    +
    619
    +
    620// helper to create copy constructible lambda from non copy constructible one. std::function<> works only with former kind.
    +
    621template<typename Func>
    +
    622auto make_copyable_function(Func&& func, std::enable_if_t<!std::is_copy_constructible_v<std::decay_t<Func>>, void*> = nullptr) {
    +
    623 auto p = make_lw_shared<typename std::decay_t<Func>>(std::forward<Func>(func));
    +
    624 return [p] (auto&&... args) { return (*p)( std::forward<decltype(args)>(args)... ); };
    +
    625}
    +
    626
    +
    627template<typename Func>
    +
    628auto make_copyable_function(Func&& func, std::enable_if_t<std::is_copy_constructible_v<std::decay_t<Func>>, void*> = nullptr) {
    +
    629 return std::forward<Func>(func);
    +
    630}
    +
    631
    +
    632// This class is used to calculate client side rpc function signature.
    +
    633// Return type is converted from a smart pointer to a type it points to.
    +
    634// rpc::optional are converted to non optional type.
    +
    635//
    +
    636// Examples:
    +
    637// std::unique_ptr<int>(int, rpc::optional<long>) -> int(int, long)
    +
    638// double(float) -> double(float)
    +
    639template<typename Ret, typename... In>
    + +
    641 template<typename T, bool IsSmartPtr>
    +
    642 struct drop_smart_ptr_impl;
    +
    643 template<typename T>
    +
    644 struct drop_smart_ptr_impl<T, true> {
    +
    645 using type = typename T::element_type;
    +
    646 };
    +
    647 template<typename T>
    +
    648 struct drop_smart_ptr_impl<T, false> {
    +
    649 using type = T;
    +
    650 };
    +
    651 template<typename T>
    +
    652 using drop_smart_ptr = drop_smart_ptr_impl<T, is_smart_ptr<T>::value>;
    +
    653
    +
    654 // if return type is smart ptr take a type it points to instead
    +
    655 using return_type = typename drop_smart_ptr<Ret>::type;
    +
    656public:
    +
    657 using type = return_type(typename remove_optional<In>::type...);
    +
    658};
    +
    659
    +
    660template<typename Serializer, typename MsgType>
    +
    661template<typename Ret, typename... In>
    +
    662auto protocol<Serializer, MsgType>::make_client(signature<Ret(In...)>, MsgType t) {
    +
    663 using sig_type = signature<typename client_function_type<Ret, In...>::type>;
    +
    664 return send_helper<Serializer>(t, sig_type());
    +
    665}
    +
    666
    +
    667template<typename Serializer, typename MsgType>
    +
    668template<typename Func>
    + +
    670 return make_client(typename signature<typename function_traits<Func>::signature>::clean(), t);
    +
    671}
    +
    672
    +
    673template<typename Serializer, typename MsgType>
    +
    674template<typename Func>
    + + +
    677 using clean_sig_type = typename sig_type::clean;
    +
    678 using want_client_info = typename sig_type::want_client_info;
    +
    679 using want_time_point = typename sig_type::want_time_point;
    +
    680 auto recv = recv_helper<Serializer>(clean_sig_type(), std::forward<Func>(func),
    +
    681 want_client_info(), want_time_point());
    +
    682 register_receiver(t, rpc_handler{sg, make_copyable_function(std::move(recv)), {}});
    +
    683 return make_client(clean_sig_type(), t);
    +
    684}
    +
    685
    +
    686template<typename Serializer, typename MsgType>
    +
    687template<typename Func>
    + +
    689 return register_handler(t, scheduling_group(), std::forward<Func>(func));
    +
    690}
    +
    691
    +
    692template<typename Serializer, typename MsgType>
    + +
    694 auto it = _handlers.find(t);
    +
    695 if (it != _handlers.end()) {
    +
    696 return it->second.use_gate.close().finally([this, t] {
    +
    697 _handlers.erase(t);
    +
    698 });
    +
    699 }
    +
    700 return make_ready_future<>();
    +
    701}
    +
    702
    +
    703template<typename Serializer, typename MsgType>
    + +
    705 auto it = _handlers.find(msg_id);
    +
    706 if (it == _handlers.end()) {
    +
    707 return false;
    +
    708 }
    +
    709 return !it->second.use_gate.is_closed();
    +
    710}
    +
    711
    +
    712template<typename Serializer, typename MsgType>
    +
    713std::optional<protocol_base::handler_with_holder> protocol<Serializer, MsgType>::get_handler(uint64_t msg_id) {
    +
    714 const auto it = _handlers.find(MsgType(msg_id));
    +
    715 if (it != _handlers.end()) {
    +
    716 try {
    +
    717 return handler_with_holder{it->second, it->second.use_gate.hold()};
    +
    718 } catch (gate_closed_exception&) {
    +
    719 // unregistered, just ignore
    +
    720 }
    +
    721 }
    +
    722 return std::nullopt;
    +
    723}
    +
    724
    +
    725template<typename T> T make_shard_local_buffer_copy(foreign_ptr<std::unique_ptr<T>> org);
    +
    726
    +
    727template<typename Serializer, typename... Out>
    +
    728future<> sink_impl<Serializer, Out...>::operator()(const Out&... args) {
    +
    729 // note that we use remote serializer pointer, so if serailizer needs a state
    +
    730 // it should have per-cpu one
    +
    731 snd_buf data = marshall(this->_con->get()->template serializer<Serializer>(), 4, args...);
    +
    732 static_assert(snd_buf::chunk_size >= 4, "send buffer chunk size is too small");
    +
    733 auto p = data.front().get_write();
    +
    734 write_le<uint32_t>(p, data.size - 4);
    +
    735 // we do not want to dead lock on huge packets, so let them in
    +
    736 // but only one at a time
    +
    737 auto size = std::min(size_t(data.size), max_stream_buffers_memory);
    +
    738 const auto seq_num = _next_seq_num++;
    +
    739 return get_units(this->_sem, size).then([this, data = make_foreign(std::make_unique<snd_buf>(std::move(data))), seq_num] (semaphore_units<> su) mutable {
    +
    740 if (this->_ex) {
    +
    741 return make_exception_future(this->_ex);
    +
    742 }
    +
    743 // It is OK to discard this future. The user is required to
    +
    744 // wait for it when closing.
    +
    745 (void)smp::submit_to(this->_con->get_owner_shard(), [this, data = std::move(data), seq_num] () mutable {
    +
    746 connection* con = this->_con->get();
    +
    747 if (con->error()) {
    +
    748 return make_exception_future(closed_error());
    +
    749 }
    +
    750 if(con->sink_closed()) {
    +
    751 return make_exception_future(stream_closed());
    +
    752 }
    +
    753
    +
    754 auto& last_seq_num = _remote_state.last_seq_num;
    +
    755 auto& out_of_order_bufs = _remote_state.out_of_order_bufs;
    +
    756
    +
    757 auto local_data = make_shard_local_buffer_copy(std::move(data));
    +
    758 const auto seq_num_diff = seq_num - last_seq_num;
    +
    759 if (seq_num_diff > 1) {
    +
    760 auto [it, _] = out_of_order_bufs.emplace(seq_num, deferred_snd_buf{promise<>{}, std::move(local_data)});
    +
    761 return it->second.pr.get_future();
    +
    762 }
    +
    763
    +
    764 last_seq_num = seq_num;
    +
    765 auto ret_fut = con->send(std::move(local_data), {}, nullptr);
    +
    766 while (!out_of_order_bufs.empty() && out_of_order_bufs.begin()->first == (last_seq_num + 1)) {
    +
    767 auto it = out_of_order_bufs.begin();
    +
    768 last_seq_num = it->first;
    +
    769 auto fut = con->send(std::move(it->second.data), {}, nullptr);
    +
    770 fut.forward_to(std::move(it->second.pr));
    +
    771 out_of_order_bufs.erase(it);
    +
    772 }
    +
    773 return ret_fut;
    +
    774 }).then_wrapped([su = std::move(su), this] (future<> f) {
    +
    775 if (f.failed() && !this->_ex) { // first error is the interesting one
    +
    776 this->_ex = f.get_exception();
    +
    777 } else {
    +
    778 f.ignore_ready_future();
    +
    779 }
    +
    780 });
    +
    781 return make_ready_future<>();
    +
    782 });
    +
    783}
    +
    784
    +
    785template<typename Serializer, typename... Out>
    +
    786future<> sink_impl<Serializer, Out...>::flush() {
    +
    787 // wait until everything is sent out before returning.
    +
    788 return with_semaphore(this->_sem, max_stream_buffers_memory, [this] {
    +
    789 if (this->_ex) {
    +
    790 return make_exception_future(this->_ex);
    +
    791 }
    +
    792 return make_ready_future();
    +
    793 });
    +
    794}
    +
    795
    +
    796template<typename Serializer, typename... Out>
    +
    797future<> sink_impl<Serializer, Out...>::close() {
    +
    798 return with_semaphore(this->_sem, max_stream_buffers_memory, [this] {
    +
    799 return smp::submit_to(this->_con->get_owner_shard(), [this] {
    +
    800 connection* con = this->_con->get();
    +
    801 if (con->sink_closed()) { // double close, should not happen!
    +
    802 return make_exception_future(stream_closed());
    +
    803 }
    +
    804 future<> f = make_ready_future<>();
    +
    805 if (!con->error() && !this->_ex) {
    +
    806 snd_buf data = marshall(con->template serializer<Serializer>(), 4);
    +
    807 static_assert(snd_buf::chunk_size >= 4, "send buffer chunk size is too small");
    +
    808 auto p = data.front().get_write();
    +
    809 write_le<uint32_t>(p, -1U); // max len fragment marks an end of a stream
    +
    810 f = con->send(std::move(data), {}, nullptr);
    +
    811 } else {
    +
    812 f = this->_ex ? make_exception_future(this->_ex) : make_exception_future(closed_error());
    +
    813 }
    +
    814 return f.finally([con] { return con->close_sink(); });
    +
    815 });
    +
    816 });
    +
    817}
    +
    818
    +
    819template<typename Serializer, typename... Out>
    +
    820sink_impl<Serializer, Out...>::~sink_impl() {
    +
    821 // A failure to close might leave some continuations running after
    +
    822 // this is destroyed, leading to use-after-free bugs.
    +
    823 assert(this->_con->get()->sink_closed());
    +
    824}
    +
    825
    +
    826template<typename Serializer, typename... In>
    +
    827future<std::optional<std::tuple<In...>>> source_impl<Serializer, In...>::operator()() {
    +
    828 auto process_one_buffer = [this] {
    +
    829 foreign_ptr<std::unique_ptr<rcv_buf>> buf = std::move(this->_bufs.front());
    +
    830 this->_bufs.pop_front();
    +
    831 return std::apply([] (In&&... args) {
    +
    832 auto ret = std::make_optional(std::make_tuple(std::move(args)...));
    +
    833 return make_ready_future<std::optional<std::tuple<In...>>>(std::move(ret));
    +
    834 }, unmarshall<Serializer, In...>(*this->_con->get(), make_shard_local_buffer_copy(std::move(buf))));
    +
    835 };
    +
    836
    +
    837 if (!this->_bufs.empty()) {
    +
    838 return process_one_buffer();
    +
    839 }
    +
    840
    +
    841 // refill buffers from remote cpu
    +
    842 return smp::submit_to(this->_con->get_owner_shard(), [this] () -> future<> {
    +
    843 connection* con = this->_con->get();
    +
    844 if (con->_source_closed) {
    +
    845 return make_exception_future<>(stream_closed());
    +
    846 }
    +
    847 return con->stream_receive(this->_bufs).then_wrapped([this, con] (future<>&& f) {
    +
    848 if (f.failed()) {
    +
    849 return con->close_source().then_wrapped([ex = f.get_exception()] (future<> f){
    +
    850 f.ignore_ready_future();
    +
    851 return make_exception_future<>(ex);
    +
    852 });
    +
    853 }
    +
    854 if (this->_bufs.empty()) { // nothing to read -> eof
    +
    855 return con->close_source().then_wrapped([] (future<> f) {
    +
    856 f.ignore_ready_future();
    +
    857 return make_ready_future<>();
    +
    858 });
    +
    859 }
    +
    860 return make_ready_future<>();
    +
    861 });
    +
    862 }).then([this, process_one_buffer] () {
    +
    863 if (this->_bufs.empty()) {
    +
    864 return make_ready_future<std::optional<std::tuple<In...>>>(std::nullopt);
    +
    865 } else {
    +
    866 return process_one_buffer();
    +
    867 }
    +
    868 });
    +
    869}
    +
    870
    +
    871template<typename... Out>
    +
    872connection_id sink<Out...>::get_id() const {
    +
    873 return _impl->_con->get()->get_connection_id();
    +
    874}
    +
    875
    +
    876template<typename... In>
    +
    877connection_id source<In...>::get_id() const {
    +
    878 return _impl->_con->get()->get_connection_id();
    +
    879}
    +
    880
    +
    881template<typename... In>
    +
    882template<typename Serializer, typename... Out>
    +
    883sink<Out...> source<In...>::make_sink() {
    +
    884 return sink<Out...>(make_shared<sink_impl<Serializer, Out...>>(_impl->_con));
    +
    885}
    +
    886
    +
    887}
    +
    888
    +
    889}
    +
    890
    +
    891namespace std {
    +
    892template<>
    +
    893struct hash<seastar::rpc::streaming_domain_type> {
    +
    894 size_t operator()(const seastar::rpc::streaming_domain_type& domain) const {
    +
    895 size_t h = 0;
    +
    896 boost::hash_combine(h, std::hash<uint64_t>{}(domain._id));
    +
    897 return h;
    +
    898 }
    +
    899};
    +
    900}
    +
    901
    +
    902
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    static time_point now() noexcept
    Definition: lowres_clock.hh:74
    +
    promise - allows a future value to be made available at a later time.
    Definition: future.hh:934
    +
    void set_value(A &&... a) noexcept
    Sets the promises value.
    Definition: future.hh:990
    +
    Definition: reference_wrapper.hh:43
    +
    Definition: rpc_impl.hh:640
    +
    Definition: rpc.hh:427
    +
    Definition: rpc_types.hh:140
    +
    Definition: rpc_types.hh:67
    +
    Definition: rpc.hh:243
    +
    Definition: rpc_types.hh:194
    +
    Definition: rpc_types.hh:189
    +
    Definition: rpc.hh:811
    +
    Definition: rpc.hh:402
    +
    Definition: rpc_types.hh:318
    +
    Definition: rpc.hh:421
    +
    Definition: rpc_types.hh:357
    + +
    Definition: rpc_types.hh:398
    +
    Identifies function calls that are accounted as a group.
    Definition: scheduling.hh:285
    +
    static futurize_t< std::invoke_result_t< Func > > submit_to(unsigned t, smp_submit_to_options options, Func &&func) noexcept
    Definition: smp.hh:354
    +
    future< T > make_ready_future(A &&... value) noexcept
    Creates a future in an available, value state.
    Definition: future.hh:1943
    +
    future< T > make_exception_future(std::exception_ptr &&value) noexcept
    Creates a future in an available, failed state.
    Definition: future.hh:1949
    +
    auto when_all(FutOrFuncs &&... fut_or_funcs) noexcept
    Definition: when_all.hh:252
    +
    future now()
    Returns a ready future.
    Definition: later.hh:35
    +
    reference_wrapper< T > ref(T &object) noexcept
    Wraps reference in a reference_wrapper.
    Definition: reference_wrapper.hh:62
    +
    std::future< T > submit_to(instance &instance, unsigned shard, Func func)
    Definition: alien.hh:204
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    sstring format(const char *fmt, A &&... a)
    Definition: print.hh:143
    +
    Definition: function_traits.hh:62
    +
    STL namespace.
    +
    Definition: rpc_types.hh:204
    +
    Definition: rpc_types.hh:98
    +
    Definition: rpc_impl.hh:56
    +
    Definition: rpc_impl.hh:60
    +
    Definition: rpc_impl.hh:57
    +
    Definition: rpc_impl.hh:61
    +
    Definition: rpc_impl.hh:214
    +
    Definition: rpc_impl.hh:213
    +
    Definition: rpc_types.hh:180
    +
    Definition: rpc_types.hh:240
    +
    Definition: rpc_impl.hh:377
    +
    Definition: rpc_impl.hh:393
    +
    Definition: rpc_impl.hh:44
    +
    Definition: rpc.hh:698
    +
    Definition: rpc_impl.hh:191
    +
    Definition: rpc_impl.hh:65
    +
    Definition: rpc.hh:191
    +
    Definition: rpc_impl.hh:285
    +
    Definition: rpc_impl.hh:284
    +
    Definition: rpc_impl.hh:122
    +
    Definition: rpc_impl.hh:53
    +
    + + + + diff --git a/master/rpc__types_8hh_source.html b/master/rpc__types_8hh_source.html new file mode 100644 index 000000000..db73ed542 --- /dev/null +++ b/master/rpc__types_8hh_source.html @@ -0,0 +1,566 @@ + + + + + + + +Seastar: seastar/rpc/rpc_types.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    rpc_types.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2015 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#if FMT_VERSION >= 90000
    +
    25#include <fmt/ostream.h>
    +
    26#endif
    +
    27#if FMT_VERSION >= 100000
    +
    28#include <fmt/std.h>
    +
    29#endif
    +
    30
    +
    31#include <seastar/net/api.hh>
    +
    32#include <stdexcept>
    +
    33#include <string>
    +
    34#include <boost/any.hpp>
    +
    35#include <boost/type.hpp>
    +
    36#include <seastar/util/std-compat.hh>
    +
    37#include <seastar/util/variant_utils.hh>
    +
    38#include <seastar/core/timer.hh>
    +
    39#include <seastar/core/circular_buffer.hh>
    +
    40#include <seastar/core/simple-stream.hh>
    +
    41#include <seastar/core/lowres_clock.hh>
    +
    42#include <boost/functional/hash.hpp>
    +
    43#include <seastar/core/sharded.hh>
    +
    44
    +
    45namespace seastar {
    +
    46
    +
    47namespace rpc {
    +
    48
    +
    49using rpc_clock_type = lowres_clock;
    +
    50
    +
    51// used to tag a type for serializers
    +
    52template<typename T>
    +
    53using type = boost::type<T>;
    +
    54
    +
    55struct stats {
    +
    56 using counter_type = uint64_t;
    +
    57 counter_type replied = 0;
    +
    58 counter_type pending = 0;
    +
    59 counter_type exception_received = 0;
    +
    60 counter_type sent_messages = 0;
    +
    61 counter_type wait_reply = 0;
    +
    62 counter_type timeout = 0;
    +
    63 counter_type delay_samples = 0;
    +
    64 std::chrono::duration<double> delay_total = std::chrono::duration<double>(0);
    +
    65};
    +
    66
    + +
    68 uint64_t _id;
    +
    69
    +
    70public:
    +
    71 uint64_t id() const {
    +
    72 return _id;
    +
    73 }
    +
    74 bool operator==(const connection_id& o) const {
    +
    75 return _id == o._id;
    +
    76 }
    +
    77 explicit operator bool() const {
    +
    78 return shard() != 0xffff;
    +
    79 }
    +
    80 size_t shard() const {
    +
    81 return size_t(_id & 0xffff);
    +
    82 }
    +
    83 constexpr static connection_id make_invalid_id(uint64_t _id = 0) {
    +
    84 return make_id(_id, 0xffff);
    +
    85 }
    +
    86 constexpr static connection_id make_id(uint64_t _id, uint16_t shard) {
    +
    87 return {_id << 16 | shard};
    +
    88 }
    +
    89 constexpr connection_id(uint64_t id) : _id(id) {}
    +
    90};
    +
    91
    +
    92constexpr connection_id invalid_connection_id = connection_id::make_invalid_id();
    +
    93
    +
    94std::ostream& operator<<(std::ostream&, const connection_id&);
    +
    95
    +
    96class server;
    +
    97
    + +
    99 socket_address addr;
    + +
    101 connection_id conn_id;
    +
    102 std::unordered_map<sstring, boost::any> user_data;
    +
    103 template <typename T>
    +
    104 void attach_auxiliary(const sstring& key, T&& object) {
    +
    105 user_data.emplace(key, boost::any(std::forward<T>(object)));
    +
    106 }
    +
    107 template <typename T>
    +
    108 T& retrieve_auxiliary(const sstring& key) {
    +
    109 auto it = user_data.find(key);
    +
    110 assert(it != user_data.end());
    +
    111 return boost::any_cast<T&>(it->second);
    +
    112 }
    +
    113 template <typename T>
    +
    114 std::add_const_t<T>& retrieve_auxiliary(const sstring& key) const {
    +
    115 return const_cast<client_info*>(this)->retrieve_auxiliary<std::add_const_t<T>>(key);
    +
    116 }
    +
    117 template <typename T>
    +
    118 T* retrieve_auxiliary_opt(const sstring& key) noexcept {
    +
    119 auto it = user_data.find(key);
    +
    120 if (it == user_data.end()) {
    +
    121 return nullptr;
    +
    122 }
    +
    123 return &boost::any_cast<T&>(it->second);
    +
    124 }
    +
    125 template <typename T>
    +
    126 const T* retrieve_auxiliary_opt(const sstring& key) const noexcept {
    +
    127 auto it = user_data.find(key);
    +
    128 if (it == user_data.end()) {
    +
    129 return nullptr;
    +
    130 }
    +
    131 return &boost::any_cast<const T&>(it->second);
    +
    132 }
    +
    133};
    +
    134
    +
    135class error : public std::runtime_error {
    +
    136public:
    +
    137 error(const std::string& msg) : std::runtime_error(msg) {}
    +
    138};
    +
    139
    +
    140class closed_error : public error {
    +
    141public:
    +
    142 closed_error() : error("connection is closed") {}
    +
    143};
    +
    144
    +
    145class timeout_error : public error {
    +
    146public:
    +
    147 timeout_error() : error("rpc call timed out") {}
    +
    148};
    +
    149
    +
    150class unknown_verb_error : public error {
    +
    151public:
    +
    152 uint64_t type;
    +
    153 unknown_verb_error(uint64_t type_) : error("unknown verb"), type(type_) {}
    +
    154};
    +
    155
    + +
    157public:
    +
    158 unknown_exception_error() : error("unknown exception") {}
    +
    159};
    +
    160
    +
    161class rpc_protocol_error : public error {
    +
    162public:
    +
    163 rpc_protocol_error() : error("rpc protocol exception") {}
    +
    164};
    +
    165
    +
    166class canceled_error : public error {
    +
    167public:
    +
    168 canceled_error() : error("rpc call was canceled") {}
    +
    169};
    +
    170
    +
    171class stream_closed : public error {
    +
    172public:
    +
    173 stream_closed() : error("rpc stream was closed by peer") {}
    +
    174};
    +
    175
    +
    176class remote_verb_error : public error {
    +
    177 using error::error;
    +
    178};
    +
    179
    +
    180struct no_wait_type {};
    +
    181
    +
    182// return this from a callback if client does not want to waiting for a reply
    +
    183extern no_wait_type no_wait;
    +
    184
    +
    187
    +
    188template <typename T>
    +
    189class optional : public std::optional<T> {
    +
    190public:
    +
    191 using std::optional<T>::optional;
    +
    192};
    +
    193
    +
    194class opt_time_point : public std::optional<rpc_clock_type::time_point> {
    +
    195public:
    +
    196 using std::optional<rpc_clock_type::time_point>::optional;
    +
    197 opt_time_point(std::optional<rpc_clock_type::time_point> time_point) {
    +
    198 static_cast<std::optional<rpc_clock_type::time_point>&>(*this) = time_point;
    +
    199 }
    +
    200};
    +
    201
    +
    203
    + +
    205 std::function<void()> cancel_send;
    +
    206 std::function<void()> cancel_wait;
    +
    207 cancellable** send_back_pointer = nullptr;
    +
    208 cancellable** wait_back_pointer = nullptr;
    +
    209 cancellable() = default;
    +
    210 cancellable(cancellable&& x) : cancel_send(std::move(x.cancel_send)), cancel_wait(std::move(x.cancel_wait)), send_back_pointer(x.send_back_pointer), wait_back_pointer(x.wait_back_pointer) {
    +
    211 if (send_back_pointer) {
    +
    212 *send_back_pointer = this;
    +
    213 x.send_back_pointer = nullptr;
    +
    214 }
    +
    215 if (wait_back_pointer) {
    +
    216 *wait_back_pointer = this;
    +
    217 x.wait_back_pointer = nullptr;
    +
    218 }
    +
    219 }
    +
    220 cancellable& operator=(cancellable&& x) {
    +
    221 if (&x != this) {
    +
    222 this->~cancellable();
    +
    223 new (this) cancellable(std::move(x));
    +
    224 }
    +
    225 return *this;
    +
    226 }
    +
    227 void cancel() {
    +
    228 if (cancel_send) {
    +
    229 cancel_send();
    +
    230 }
    +
    231 if (cancel_wait) {
    +
    232 cancel_wait();
    +
    233 }
    +
    234 }
    +
    235 ~cancellable() {
    +
    236 cancel();
    +
    237 }
    +
    238};
    +
    239
    +
    240struct rcv_buf {
    +
    241 uint32_t size = 0;
    +
    242 std::optional<semaphore_units<>> su;
    +
    243 std::variant<std::vector<temporary_buffer<char>>, temporary_buffer<char>> bufs;
    +
    244 using iterator = std::vector<temporary_buffer<char>>::iterator;
    +
    245 rcv_buf() {}
    +
    246 explicit rcv_buf(size_t size_) : size(size_) {}
    +
    247 explicit rcv_buf(temporary_buffer<char> b) : size(b.size()), bufs(std::move(b)) {};
    +
    248 explicit rcv_buf(std::vector<temporary_buffer<char>> bufs, size_t size)
    +
    249 : size(size), bufs(std::move(bufs)) {};
    +
    250};
    +
    251
    +
    252struct snd_buf {
    +
    253 // Preferred, but not required, chunk size.
    +
    254 static constexpr size_t chunk_size = 128*1024;
    +
    255 uint32_t size = 0;
    +
    256 std::variant<std::vector<temporary_buffer<char>>, temporary_buffer<char>> bufs;
    +
    257 using iterator = std::vector<temporary_buffer<char>>::iterator;
    +
    258 snd_buf() {}
    +
    259 snd_buf(snd_buf&&) noexcept;
    +
    260 snd_buf& operator=(snd_buf&&) noexcept;
    +
    261 explicit snd_buf(size_t size_);
    +
    262 explicit snd_buf(temporary_buffer<char> b) : size(b.size()), bufs(std::move(b)) {};
    +
    263
    +
    264 explicit snd_buf(std::vector<temporary_buffer<char>> bufs, size_t size)
    +
    265 : size(size), bufs(std::move(bufs)) {};
    +
    266
    +
    267 temporary_buffer<char>& front();
    +
    268};
    +
    269
    +
    270static inline memory_input_stream<rcv_buf::iterator> make_deserializer_stream(rcv_buf& input) {
    +
    271 auto* b = std::get_if<temporary_buffer<char>>(&input.bufs);
    +
    272 if (b) {
    + +
    274 } else {
    +
    275 auto& ar = std::get<std::vector<temporary_buffer<char>>>(input.bufs);
    + +
    277 }
    +
    278}
    +
    279
    + +
    281public:
    +
    282 virtual ~compressor() {}
    +
    283 // compress data and leave head_space bytes at the beginning of returned buffer
    +
    284 virtual snd_buf compress(size_t head_space, snd_buf data) = 0;
    +
    285 // decompress data
    +
    286 virtual rcv_buf decompress(rcv_buf data) = 0;
    +
    287 virtual sstring name() const = 0;
    +
    288 virtual future<> close() noexcept { return make_ready_future<>(); };
    +
    289
    +
    290 // factory to create compressor for a connection
    +
    291 class factory {
    +
    292 public:
    +
    293 virtual ~factory() {}
    +
    294 // return feature string that will be sent as part of protocol negotiation
    +
    295 virtual const sstring& supported() const = 0;
    +
    296 // negotiate compress algorithm
    +
    297 // send_empty_frame() requests an empty frame to be sent to the peer compressor on the other side of the connection.
    +
    298 // By attaching a header to this empty frame, the compressor can communicate somthing to the peer,
    +
    299 // send_empty_frame() mustn't be called from inside compress() or decompress().
    +
    300 virtual std::unique_ptr<compressor> negotiate(sstring feature, bool is_server, std::function<future<>()> send_empty_frame) const {
    +
    301 return negotiate(feature, is_server);
    +
    302 }
    +
    303 virtual std::unique_ptr<compressor> negotiate(sstring feature, bool is_server) const = 0;
    +
    304 };
    +
    305};
    +
    306
    +
    307class connection;
    +
    308
    + +
    310constexpr size_t max_queued_stream_buffers = 50;
    +
    311constexpr size_t max_stream_buffers_memory = 100 * 1024;
    +
    312
    +
    315
    +
    316// send data Out...
    +
    317template<typename... Out>
    +
    318class sink {
    +
    319public:
    +
    320 class impl {
    +
    321 protected:
    + +
    323 semaphore _sem;
    +
    324 std::exception_ptr _ex;
    +
    325 impl(xshard_connection_ptr con) : _con(std::move(con)), _sem(max_stream_buffers_memory) {}
    +
    326 public:
    +
    327 virtual ~impl() {};
    +
    328 virtual future<> operator()(const Out&... args) = 0;
    +
    329 virtual future<> close() = 0;
    +
    330 virtual future<> flush() = 0;
    +
    331 friend sink;
    +
    332 };
    +
    333
    +
    334private:
    +
    335 shared_ptr<impl> _impl;
    +
    336
    +
    337public:
    +
    338 sink(shared_ptr<impl> impl) : _impl(std::move(impl)) {}
    +
    339 future<> operator()(const Out&... args) {
    +
    340 return _impl->operator()(args...);
    +
    341 }
    +
    342 future<> close() {
    +
    343 return _impl->close();
    +
    344 }
    +
    345 // Calling this function makes sure that any data buffered
    +
    346 // by the stream sink will be flushed to the network.
    +
    347 // It does not mean the data was received by the corresponding
    +
    348 // source.
    +
    349 future<> flush() {
    +
    350 return _impl->flush();
    +
    351 }
    +
    352 connection_id get_id() const;
    +
    353};
    +
    354
    +
    355// receive data In...
    +
    356template<typename... In>
    +
    357class source {
    +
    358public:
    +
    359 class impl {
    +
    360 protected:
    + + +
    363 impl(xshard_connection_ptr con) : _con(std::move(con)) {
    +
    364 _bufs.reserve(max_queued_stream_buffers);
    +
    365 }
    +
    366 public:
    +
    367 virtual ~impl() {}
    +
    368 virtual future<std::optional<std::tuple<In...>>> operator()() = 0;
    +
    369 friend source;
    +
    370 };
    +
    371private:
    +
    372 shared_ptr<impl> _impl;
    +
    373
    +
    374public:
    +
    375 source(shared_ptr<impl> impl) : _impl(std::move(impl)) {}
    +
    376 future<std::optional<std::tuple<In...>>> operator()() {
    +
    377 return _impl->operator()();
    +
    378 };
    +
    379 connection_id get_id() const;
    +
    380 template<typename Serializer, typename... Out> sink<Out...> make_sink();
    +
    381};
    +
    382
    +
    397template <typename... T>
    +
    398class tuple : public std::tuple<T...> {
    +
    399public:
    +
    400 using std::tuple<T...>::tuple;
    +
    401 tuple(std::tuple<T...>&& x) : std::tuple<T...>(std::move(x)) {}
    +
    402};
    +
    403
    +
    405
    +
    406template <typename... T>
    +
    407tuple(T&&...) -> tuple<T...>;
    +
    408
    +
    409} // namespace rpc
    +
    410
    +
    411}
    +
    412
    +
    413namespace std {
    +
    414template<>
    +
    415struct hash<seastar::rpc::connection_id> {
    +
    416 size_t operator()(const seastar::rpc::connection_id& id) const {
    +
    417 size_t h = 0;
    +
    418 boost::hash_combine(h, std::hash<uint64_t>{}(id.id()));
    +
    419 return h;
    +
    420 }
    +
    421};
    +
    422
    +
    423template <typename... T>
    +
    424struct tuple_size<seastar::rpc::tuple<T...>> : tuple_size<tuple<T...>> {
    +
    425};
    +
    426
    +
    427template <size_t I, typename... T>
    +
    428struct tuple_element<I, seastar::rpc::tuple<T...>> : tuple_element<I, tuple<T...>> {
    +
    429};
    +
    430
    +
    431}
    +
    432
    +
    433#if FMT_VERSION >= 90000
    +
    434template <> struct fmt::formatter<seastar::rpc::connection_id> : fmt::ostream_formatter {};
    +
    435#endif
    +
    436
    +
    437#if FMT_VERSION < 100000
    +
    438// fmt v10 introduced formatter for std::exception
    +
    439template <std::derived_from<seastar::rpc::error> T>
    +
    440struct fmt::formatter<T> : fmt::formatter<string_view> {
    +
    441 auto format(const T& e, fmt::format_context& ctx) const {
    +
    442 return fmt::format_to(ctx.out(), "{}", e.what());
    +
    443 }
    +
    444};
    +
    445#endif
    +
    446
    +
    447#if FMT_VERSION < 100000
    +
    448template <typename T>
    +
    449struct fmt::formatter<seastar::rpc::optional<T>> {
    +
    450 constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); }
    +
    451 auto format(const seastar::rpc::optional<T>& opt, fmt::format_context& ctx) const {
    +
    452 if (opt) {
    +
    453 return fmt::format_to(ctx.out(), "optional({})", *opt);
    +
    454 } else {
    +
    455 return fmt::format_to(ctx.out(), "none");
    +
    456 }
    +
    457 }
    +
    458};
    +
    459#else
    +
    460template <typename T>
    +
    461struct fmt::formatter<seastar::rpc::optional<T>> : private fmt::formatter<std::optional<T>> {
    +
    462 using fmt::formatter<std::optional<T>>::parse;
    +
    463 auto format(const seastar::rpc::optional<T>& opt, fmt::format_context& ctx) const {
    +
    464 return fmt::formatter<std::optional<T>>::format(opt, ctx);
    +
    465 }
    +
    466};
    +
    467#endif
    + +
    Definition: circular_buffer.hh:63
    +
    Definition: simple-stream.hh:383
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    + +
    Definition: simple-stream.hh:464
    +
    Definition: rpc_types.hh:166
    +
    Definition: rpc_types.hh:140
    +
    Definition: rpc_types.hh:291
    +
    Definition: rpc_types.hh:280
    +
    Definition: rpc_types.hh:67
    +
    Definition: rpc.hh:243
    +
    Definition: rpc_types.hh:135
    +
    Definition: rpc_types.hh:194
    +
    Definition: rpc_types.hh:189
    +
    Definition: rpc_types.hh:176
    +
    Definition: rpc_types.hh:161
    +
    Definition: rpc.hh:585
    +
    Definition: rpc_types.hh:318
    +
    Definition: rpc_types.hh:357
    +
    Definition: rpc_types.hh:171
    +
    Definition: rpc_types.hh:145
    +
    Definition: rpc_types.hh:398
    +
    Definition: rpc_types.hh:156
    +
    Definition: rpc_types.hh:150
    + +
    Definition: simple-stream.hh:330
    +
    Definition: socket_defs.hh:47
    + +
    size_t size() const noexcept
    Gets the buffer size.
    Definition: temporary_buffer.hh:130
    +
    holds the implementation parts of the metrics layer, do not use directly.
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    STL namespace.
    +
    Definition: rpc_types.hh:204
    +
    Definition: rpc_types.hh:98
    +
    Definition: rpc_types.hh:180
    +
    Definition: rpc_types.hh:240
    +
    Definition: rpc_types.hh:252
    +
    Definition: rpc_types.hh:55
    + +
    + + + + diff --git a/master/run__in__background_8hh_source.html b/master/run__in__background_8hh_source.html new file mode 100644 index 000000000..040aded9c --- /dev/null +++ b/master/run__in__background_8hh_source.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar/core/internal/run_in_background.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    run_in_background.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2023 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/future.hh>
    +
    25
    +
    26namespace seastar::internal {
    +
    27
    +
    28void run_in_background(future<> f);
    +
    29
    +
    30template <typename Func>
    +
    31void run_in_background(Func&& func) {
    +
    32 run_in_background(futurize_invoke(std::forward<Func>(func)));
    +
    33}
    +
    34
    +
    35}
    +
    + + + + diff --git a/master/rwlock_8hh_source.html b/master/rwlock_8hh_source.html new file mode 100644 index 000000000..8075a53c8 --- /dev/null +++ b/master/rwlock_8hh_source.html @@ -0,0 +1,250 @@ + + + + + + + +Seastar: seastar/core/rwlock.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    rwlock.hh
    +
    +
    +
    1/*
    +
    2* This file is open source software, licensed to you under the terms
    +
    3* of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4* distributed with this work for additional information regarding copyright
    +
    5* ownership. You may not use this file except in compliance with the License.
    +
    6*
    +
    7* You may obtain a copy of the License at
    +
    8*
    +
    9* http://www.apache.org/licenses/LICENSE-2.0
    +
    10*
    +
    11* Unless required by applicable law or agreed to in writing,
    +
    12* software distributed under the License is distributed on an
    +
    13* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14* KIND, either express or implied. See the License for the
    +
    15* specific language governing permissions and limitations
    +
    16* under the License.
    +
    17*/
    +
    18/*
    +
    19 * Copyright (C) 2015 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <cstddef>
    +
    26#endif
    +
    27#include <seastar/core/semaphore.hh>
    +
    28#include <seastar/util/modules.hh>
    +
    29
    +
    30namespace seastar {
    +
    31
    +
    33// lock / unlock semantics for rwlock, so it can be used with with_lock()
    +
    34SEASTAR_MODULE_EXPORT
    +
    35template<typename Clock>
    +
    36class basic_rwlock;
    +
    37
    +
    38template<typename Clock = typename timer<>::clock>
    +
    39class rwlock_for_read {
    +
    40public:
    +
    41 future<> lock() {
    +
    42 return static_cast<basic_rwlock<Clock>*>(this)->read_lock();
    +
    43 }
    +
    44 void unlock() {
    +
    45 static_cast<basic_rwlock<Clock>*>(this)->read_unlock();
    +
    46 }
    +
    47 friend class basic_rwlock<Clock>;
    +
    48};
    +
    49
    +
    50template<typename Clock = typename timer<>::clock>
    +
    51class rwlock_for_write {
    +
    52public:
    +
    53 future<> lock() {
    +
    54 return static_cast<basic_rwlock<Clock>*>(this)->write_lock();
    +
    55 }
    +
    56 void unlock() {
    +
    57 static_cast<basic_rwlock<Clock>*>(this)->write_unlock();
    +
    58 }
    +
    59 friend class basic_rwlock<Clock>;
    +
    60};
    +
    62
    +
    63
    +
    66
    +
    73SEASTAR_MODULE_EXPORT
    +
    74template<typename Clock = typename timer<>::clock>
    +
    75class basic_rwlock : private rwlock_for_read<Clock>, rwlock_for_write<Clock> {
    + +
    77
    +
    78 static constexpr size_t max_ops = semaphore_type::max_counter();
    +
    79
    +
    80 semaphore_type _sem;
    +
    81public:
    + +
    83 : _sem(max_ops) {
    +
    84 }
    +
    85
    +
    89 rwlock_for_read<Clock>& for_read() {
    +
    90 return *this;
    +
    91 }
    +
    92
    +
    96 rwlock_for_write<Clock>& for_write() {
    +
    97 return *this;
    +
    98 }
    +
    99
    +
    103 future<> read_lock(typename semaphore_type::time_point timeout = semaphore_type::time_point::max()) {
    +
    104 return _sem.wait(timeout);
    +
    105 }
    +
    106
    + +
    108 return _sem.wait(as);
    +
    109 }
    +
    110
    +
    114 void read_unlock() {
    +
    115 assert(_sem.current() < max_ops);
    +
    116 _sem.signal();
    +
    117 }
    +
    118
    +
    123 future<> write_lock(typename semaphore_type::time_point timeout = semaphore_type::time_point::max()) {
    +
    124 return _sem.wait(timeout, max_ops);
    +
    125 }
    +
    126
    + +
    128 return _sem.wait(as, max_ops);
    +
    129 }
    +
    130
    + +
    135 assert(_sem.current() == 0);
    +
    136 _sem.signal(max_ops);
    +
    137 }
    +
    138
    + +
    141 return _sem.try_wait();
    +
    142 }
    +
    143
    + +
    146 return _sem.try_wait(max_ops);
    +
    147 }
    +
    148
    + +
    150
    +
    162 future<holder> hold_read_lock(typename semaphore_type::time_point timeout = semaphore_type::time_point::max()) {
    +
    163 return get_units(_sem, 1, timeout);
    +
    164 }
    +
    165
    + +
    167 return get_units(_sem, 1, as);
    +
    168 }
    +
    169
    +
    181 future<holder> hold_write_lock(typename semaphore_type::time_point timeout = semaphore_type::time_point::max()) {
    +
    182 return get_units(_sem, max_ops, timeout);
    +
    183 }
    +
    184
    + +
    186 return get_units(_sem, max_ops, as);
    +
    187 }
    +
    188
    +
    190 bool locked() const {
    +
    191 return _sem.available_units() != max_ops;
    +
    192 }
    +
    193
    +
    194 friend class rwlock_for_read<Clock>;
    +
    195 friend class rwlock_for_write<Clock>;
    +
    196};
    +
    197
    +
    198SEASTAR_MODULE_EXPORT
    +
    199using rwlock = basic_rwlock<>;
    +
    200
    +
    202
    +
    203}
    +
    Definition: abort_source.hh:58
    +
    Definition: rwlock.hh:75
    +
    future read_lock(typename semaphore_type::time_point timeout=semaphore_type::time_point::max())
    Definition: rwlock.hh:103
    +
    void read_unlock()
    Definition: rwlock.hh:114
    +
    future write_lock(typename semaphore_type::time_point timeout=semaphore_type::time_point::max())
    Definition: rwlock.hh:123
    +
    bool try_read_lock()
    Tries to acquire the lock in read mode iff this can be done without waiting.
    Definition: rwlock.hh:140
    +
    bool try_write_lock()
    Tries to acquire the lock in write mode iff this can be done without waiting.
    Definition: rwlock.hh:145
    +
    rwlock_for_write< Clock > & for_write()
    Definition: rwlock.hh:96
    +
    rwlock_for_read< Clock > & for_read()
    Definition: rwlock.hh:89
    +
    future< holder > hold_read_lock(typename semaphore_type::time_point timeout=semaphore_type::time_point::max())
    Definition: rwlock.hh:162
    +
    bool locked() const
    Checks if any read or write locks are currently held.
    Definition: rwlock.hh:190
    +
    future< holder > hold_write_lock(typename semaphore_type::time_point timeout=semaphore_type::time_point::max())
    Definition: rwlock.hh:181
    +
    void write_unlock()
    Definition: rwlock.hh:134
    +
    Counted resource guard.
    Definition: semaphore.hh:154
    +
    static constexpr size_t max_counter() noexcept
    Returns the maximum number of units the semaphore counter can hold.
    Definition: semaphore.hh:231
    +
    size_t current() const noexcept
    Definition: semaphore.hh:446
    +
    future wait(size_t nr=1) noexcept
    Definition: semaphore.hh:299
    +
    ssize_t available_units() const noexcept
    Definition: semaphore.hh:452
    +
    bool try_wait(size_t nr=1) noexcept
    Definition: semaphore.hh:434
    +
    void signal(size_t nr=1) noexcept
    Definition: semaphore.hh:396
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: semaphore.hh:511
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/sampler_8hh_source.html b/master/sampler_8hh_source.html new file mode 100644 index 000000000..93df6888d --- /dev/null +++ b/master/sampler_8hh_source.html @@ -0,0 +1,231 @@ + + + + + + + +Seastar: seastar/util/sampler.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    sampler.hh
    +
    +
    +
    1/*
    +
    2 * Copyright (C) 2018 The Android Open Source Project
    +
    3 *
    +
    4 * Licensed under the Apache License, Version 2.0 (the "License");
    +
    5 * you may not use this file except in compliance with the License.
    +
    6 * You may obtain a copy of the License at
    +
    7 *
    +
    8 * http://www.apache.org/licenses/LICENSE-2.0
    +
    9 *
    +
    10 * Unless required by applicable law or agreed to in writing, software
    +
    11 * distributed under the License is distributed on an "AS IS" BASIS,
    +
    12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +
    13 * See the License for the specific language governing permissions and
    +
    14 * limitations under the License.
    +
    15 */
    +
    16
    +
    17// This file has been originally been imported from:
    +
    18// https://cs.android.com/android/platform/superproject/+/013901367630d3ec71c9f2bb3f3077bd11585301:external/perfetto/src/profiling/memory/sampler.h
    +
    19
    +
    20//
    +
    21// The code has been modified as follows:
    +
    22//
    +
    23// - Integrated into seastar and adapted to coding style
    +
    24// - Right now we don't account for samples multiple times (in case we have
    +
    25// multiple loops of drawing from the exp distribution). The reason is that
    +
    26// in our memory sampler we would have to store the weight in addition to the
    +
    27// alloation site ptr as on free we need to know how much a sample accounted
    +
    28// for. Hence, for now we simply always use the sampling interval.
    +
    29// - Sampler can be turned "off" with a 0 sampling rate
    +
    30// - The fast path is more optimized (as a consequence of the first point)
    +
    31// - Provide a way to temporarily pause sampling
    +
    32//
    +
    33// Changes Copyright (C) 2023 ScyllaDB
    +
    34
    +
    35#pragma once
    +
    36
    +
    37#include <random>
    +
    38
    +
    39// See also: https://perfetto.dev/docs/design-docs/heapprofd-sampling for more
    +
    40// background of how the sampler works
    +
    41
    +
    42class sampler {
    +
    43public:
    +
    44 sampler() : random_gen(rd_device()) {
    + +
    46 }
    +
    48 void set_sampling_interval(uint64_t sampling_interval) {
    +
    49 sampling_interval_ = sampling_interval;
    +
    50 if (sampling_interval_ == 0) {
    +
    51 // Set the interval very large. This means in practice we will
    +
    52 // likely never get this below zero and hence it's unlikely we will
    +
    53 // ever have to run the reset path with sampling off
    +
    54 interval_to_next_sample_ = std::numeric_limits<int64_t>::max();
    +
    55 return;
    +
    56 }
    +
    57 sampling_rate_ = 1.0 / static_cast<double>(sampling_interval_);
    +
    58 interval_to_next_sample_ = next_sampling_interval();
    +
    59 }
    +
    66 [[gnu::always_inline]]
    +
    67 bool maybe_sample(size_t alloc_size) {
    +
    68 return (interval_to_next_sample_ -= alloc_size) < 0;
    +
    69 }
    +
    70
    +
    74 bool definitely_sample(size_t alloc_size) {
    +
    75 // this will hold if maybe_sample returned false for this allocation
    +
    76 if (interval_to_next_sample_ >= 0) {
    +
    77 return false;
    +
    78 }
    +
    79 reset_interval_to_next_sample(alloc_size);
    +
    80 return sampling_interval_ != 0; // sampling interval 0 means off
    +
    81 }
    +
    82
    +
    83 uint64_t sampling_interval() const { return sampling_interval_; }
    +
    84
    +
    86 size_t sample_size(size_t allocation_size) const {
    +
    87 return std::max(allocation_size, sampling_interval_);
    +
    88 }
    +
    89
    + + + +
    94 : sampler_(&sampler)
    +
    95 , previous_sampling_interval_(sampler_->sampling_interval_)
    +
    96 , previous_sampling_rate_(sampler_->sampling_rate_)
    +
    97 , previous_interval_to_next_sample_(sampler_->interval_to_next_sample_) {
    +
    98 sampler_->set_sampling_interval(0);
    +
    99 }
    +
    100
    + +
    102 if (sampler_) {
    +
    103 sampler_->sampling_interval_ = previous_sampling_interval_;
    +
    104 sampler_->sampling_rate_ = previous_sampling_rate_;
    +
    105 sampler_->interval_to_next_sample_ = previous_interval_to_next_sample_;
    +
    106 }
    +
    107 }
    +
    108
    +
    109 private:
    +
    110 sampler* sampler_ = nullptr;
    +
    111 uint64_t previous_sampling_interval_ = 0; // sampling interval before pausing
    +
    112 double previous_sampling_rate_ = 0; // sampling rate before pausing
    +
    113 int64_t previous_interval_to_next_sample_ = 0; // interval to next sample before pausing
    +
    114 };
    +
    115
    + +
    123 return disable_sampling_temporarily(*this);
    +
    124 }
    +
    125
    +
    126private:
    +
    130 void reset_interval_to_next_sample(size_t alloc_size)
    +
    131 {
    +
    132 if (sampling_interval_ == 0) { // sampling is off
    +
    133 interval_to_next_sample_ = std::numeric_limits<int64_t>::max();
    +
    134 }
    +
    135 else {
    +
    136 // Large allocations we will just consider in whole. This avoids
    +
    137 // having to sample the distribution too many times if a large alloc
    +
    138 // took us very negative we just add the alloc size back on
    +
    139 if (alloc_size > sampling_interval_) {
    +
    140 interval_to_next_sample_ += alloc_size;
    +
    141 }
    +
    142 else {
    +
    143 while (interval_to_next_sample_ < 0) {
    +
    144 interval_to_next_sample_ += next_sampling_interval();
    +
    145 }
    +
    146 }
    +
    147 }
    +
    148 }
    +
    149
    +
    150 int64_t next_sampling_interval() {
    +
    151 std::exponential_distribution<double> dist(sampling_rate_);
    +
    152 int64_t next = static_cast<int64_t>(dist(random_gen));
    +
    153 // We approximate the geometric distribution using an exponential
    +
    154 // distribution.
    +
    155 return next;
    +
    156 }
    +
    157
    +
    158 uint64_t sampling_interval_; // Sample every N bytes ; 0 means off
    +
    159 double sampling_rate_; // 1 / sampling_interval_ ; used by the exp distribution
    +
    160 // How many bytes remain to be allocated before we take a sample.
    +
    161 // Specifically, if this member has value N, a sample will be taken of the allocation
    +
    162 // that allocates the Nth+1 byte.
    +
    163 int64_t interval_to_next_sample_;
    +
    164 std::random_device rd_device;
    +
    165 std::mt19937_64 random_gen;
    +
    166};
    +
    Definition: sampler.hh:42
    +
    bool maybe_sample(size_t alloc_size)
    Definition: sampler.hh:67
    +
    void set_sampling_interval(uint64_t sampling_interval)
    Sets the sampling interval in bytes. Setting it to 0 means to never sample.
    Definition: sampler.hh:48
    +
    bool definitely_sample(size_t alloc_size)
    Definition: sampler.hh:74
    +
    size_t sample_size(size_t allocation_size) const
    How much should an allocation of size allocation_size count for.
    Definition: sampler.hh:86
    +
    disable_sampling_temporarily pause_sampling()
    Definition: sampler.hh:122
    +
    RAII class to temporarily pause sampling.
    Definition: sampler.hh:91
    +
    + + + + diff --git a/master/scattered__message_8hh_source.html b/master/scattered__message_8hh_source.html new file mode 100644 index 000000000..63ea167e9 --- /dev/null +++ b/master/scattered__message_8hh_source.html @@ -0,0 +1,205 @@ + + + + + + + +Seastar: seastar/core/scattered_message.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    scattered_message.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/deleter.hh>
    +
    25#include <seastar/core/temporary_buffer.hh>
    +
    26#include <seastar/net/packet.hh>
    +
    27#include <seastar/core/sstring.hh>
    +
    28#include <seastar/util/std-compat.hh>
    +
    29#include <seastar/util/modules.hh>
    +
    30
    +
    31namespace seastar {
    +
    32
    +
    33SEASTAR_MODULE_EXPORT
    +
    34template <typename CharType>
    + +
    36private:
    +
    37 using fragment = net::fragment;
    +
    38 using packet = net::packet;
    +
    39 using char_type = CharType;
    +
    40 packet _p;
    +
    41public:
    + + +
    44 scattered_message(const scattered_message&) = delete;
    +
    45
    +
    46 void append_static(const char_type* buf, size_t size) {
    +
    47 if (size) {
    +
    48 _p = packet(std::move(_p), fragment{(char_type*)buf, size}, deleter());
    +
    49 }
    +
    50 }
    +
    51
    +
    52 template <size_t N>
    +
    53 void append_static(const char_type(&s)[N]) {
    +
    54 append_static(s, N - 1);
    +
    55 }
    +
    56
    +
    57 void append_static(const char_type* s) {
    +
    58 append_static(s, strlen(s));
    +
    59 }
    +
    60
    +
    61 template <typename size_type, size_type max_size>
    +
    62 void append_static(const basic_sstring<char_type, size_type, max_size>& s) {
    +
    63 append_static(s.begin(), s.size());
    +
    64 }
    +
    65
    +
    66 void append_static(const std::string_view& s) {
    +
    67 append_static(s.data(), s.size());
    +
    68 }
    +
    69
    +
    70 void append(std::string_view v) {
    +
    71 if (v.size()) {
    +
    72 _p = packet(std::move(_p), temporary_buffer<char>::copy_of(v));
    +
    73 }
    +
    74 }
    +
    75
    +
    76 void append(temporary_buffer<CharType> buff) {
    +
    77 if (buff.size()) {
    +
    78 _p = packet(std::move(_p), std::move(buff));
    +
    79 }
    +
    80 }
    +
    81
    +
    82 template <typename size_type, size_type max_size>
    + +
    84 if (s.size()) {
    +
    85 _p = packet(std::move(_p), std::move(s).release());
    +
    86 }
    +
    87 }
    +
    88
    +
    89 template <typename size_type, size_type max_size, typename Callback>
    +
    90 void append(const basic_sstring<char_type, size_type, max_size>& s, Callback callback) {
    +
    91 if (s.size()) {
    +
    92 _p = packet(std::move(_p), fragment{s.begin(), s.size()}, make_deleter(std::move(callback)));
    +
    93 }
    +
    94 }
    +
    95
    +
    96 void reserve(int n_frags) {
    +
    97 _p.reserve(n_frags);
    +
    98 }
    +
    99
    +
    100 packet release() && {
    +
    101 return std::move(_p);
    +
    102 }
    +
    103
    +
    104 template <typename Callback>
    +
    105 void on_delete(Callback callback) {
    +
    106 _p = packet(std::move(_p), make_deleter(std::move(callback)));
    +
    107 }
    +
    108
    +
    109 operator bool() const {
    +
    110 return _p.len();
    +
    111 }
    +
    112
    +
    113 size_t size() {
    +
    114 return _p.len();
    +
    115 }
    +
    116};
    +
    117
    +
    118}
    +
    Definition: sstring.hh:76
    +
    Definition: deleter.hh:52
    +
    Definition: packet.hh:87
    +
    Definition: scattered_message.hh:35
    +
    Definition: temporary_buffer.hh:67
    +
    size_t size() const noexcept
    Gets the buffer size.
    Definition: temporary_buffer.hh:130
    +
    Definition: packet.hh:46
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/scheduling_8hh.html b/master/scheduling_8hh.html new file mode 100644 index 000000000..f06daf7b5 --- /dev/null +++ b/master/scheduling_8hh.html @@ -0,0 +1,152 @@ + + + + + + + +Seastar: seastar/core/scheduling.hh File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    scheduling.hh File Reference
    +
    +
    +
    #include <chrono>
    +#include <concepts>
    +#include <functional>
    +#include <typeindex>
    +#include <seastar/core/sstring.hh>
    +#include <seastar/core/function_traits.hh>
    +#include <seastar/util/modules.hh>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + +

    +Classes

    struct  seastar::scheduling_group_key_config
     
    class  seastar::scheduling_group_key
     
    class  seastar::scheduling_group
     Identifies function calls that are accounted as a group. More...
     
    struct  std::hash< seastar::scheduling_group >
     
    + + + + + + + +

    +Namespaces

    namespace  seastar
     Seastar API namespace.
     
    namespace  std
     STL namespace.
     
    + + + +

    +Typedefs

    +using seastar::sched_clock = std::chrono::steady_clock
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    +constexpr unsigned seastar::max_scheduling_groups ()
     
    future< scheduling_group > seastar::create_scheduling_group (sstring name, float shares) noexcept
     
    future< scheduling_group > seastar::create_scheduling_group (sstring name, sstring shortname, float shares) noexcept
     
    future seastar::destroy_scheduling_group (scheduling_group sg) noexcept
     
    future seastar::rename_scheduling_group (scheduling_group sg, sstring new_name) noexcept
     
    future seastar::rename_scheduling_group (scheduling_group sg, sstring new_name, sstring new_shortname) noexcept
     
    template<typename T , typename... ConstructorArgs>
    scheduling_group_key_config seastar::make_scheduling_group_key_config (ConstructorArgs... args)
     
    future< scheduling_group_key > seastar::scheduling_group_key_create (scheduling_group_key_config cfg) noexcept
     
    template<typename T >
    T & seastar::scheduling_group_get_specific (scheduling_group sg, scheduling_group_key key)
     
    +scheduling_group seastar::current_scheduling_group () noexcept
     Returns the current scheduling group.
     
    +scheduling_group seastar::default_scheduling_group () noexcept
     
    +
    + + + + diff --git a/master/scheduling_8hh_source.html b/master/scheduling_8hh_source.html new file mode 100644 index 000000000..e26b8b86d --- /dev/null +++ b/master/scheduling_8hh_source.html @@ -0,0 +1,371 @@ + + + + + + + +Seastar: seastar/core/scheduling.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    scheduling.hh
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2016 Scylla DB Ltd
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <chrono>
    +
    26#include <concepts>
    +
    27#include <functional>
    +
    28#include <typeindex>
    +
    29#endif
    +
    30#include <seastar/core/sstring.hh>
    +
    31#include <seastar/core/function_traits.hh>
    +
    32#include <seastar/util/modules.hh>
    +
    33
    +
    35
    +
    36namespace seastar {
    +
    37
    +
    38SEASTAR_MODULE_EXPORT_BEGIN
    +
    39constexpr unsigned max_scheduling_groups() { return SEASTAR_SCHEDULING_GROUPS_COUNT; }
    +
    40
    +
    41template <typename T = void>
    +
    42class future;
    +
    43
    +
    44class reactor;
    +
    45
    +
    46class scheduling_group;
    +
    47class scheduling_group_key;
    +
    48
    +
    49using sched_clock = std::chrono::steady_clock;
    +
    50SEASTAR_MODULE_EXPORT_END
    +
    51
    +
    52namespace internal {
    +
    53
    +
    54// Returns an index between 0 and max_scheduling_groups()
    +
    55unsigned scheduling_group_index(scheduling_group sg) noexcept;
    +
    56scheduling_group scheduling_group_from_index(unsigned index) noexcept;
    +
    57
    +
    58unsigned long scheduling_group_key_id(scheduling_group_key) noexcept;
    +
    59
    +
    60template<typename T>
    +
    61T* scheduling_group_get_specific_ptr(scheduling_group sg, scheduling_group_key key) noexcept;
    +
    62
    +
    63}
    +
    64
    +
    65SEASTAR_MODULE_EXPORT_BEGIN
    +
    66
    +
    77future<scheduling_group> create_scheduling_group(sstring name, float shares) noexcept;
    +
    78
    +
    92future<scheduling_group> create_scheduling_group(sstring name, sstring shortname, float shares) noexcept;
    +
    93
    + +
    104
    +
    115future<> rename_scheduling_group(scheduling_group sg, sstring new_name) noexcept;
    +
    127future<> rename_scheduling_group(scheduling_group sg, sstring new_name, sstring new_shortname) noexcept;
    +
    128
    +
    129
    + + +
    148 scheduling_group_key_config(typeid(void)) {}
    +
    158 scheduling_group_key_config(const std::type_info& type_info) :
    +
    159 type_index(type_info) {}
    + +
    163 size_t alignment;
    +
    165 std::type_index type_index;
    +
    167 std::function<void (void*)> constructor;
    +
    169 std::function<void (void*)> rename;
    +
    172 std::function<void (void*)> destructor;
    +
    173
    +
    174};
    +
    175
    +
    176
    + +
    184public:
    +
    186 scheduling_group_key(const scheduling_group_key&) noexcept = default;
    +
    187 scheduling_group_key(scheduling_group_key&&) noexcept = default;
    +
    188private:
    +
    189 scheduling_group_key(unsigned long id) noexcept :
    +
    190 _id(id) {}
    +
    191 unsigned long _id;
    +
    192 unsigned long id() const noexcept {
    +
    193 return _id;
    +
    194 }
    + +
    196 template<typename T>
    +
    197 friend T* internal::scheduling_group_get_specific_ptr(scheduling_group sg, scheduling_group_key key) noexcept;
    +
    198 template<typename T>
    + +
    200
    +
    201 friend unsigned long internal::scheduling_group_key_id(scheduling_group_key key) noexcept;
    +
    202};
    +
    203
    +
    204SEASTAR_MODULE_EXPORT_END
    +
    205namespace internal {
    +
    206
    +
    207inline unsigned long scheduling_group_key_id(scheduling_group_key key) noexcept {
    +
    208 return key.id();
    +
    209}
    +
    210
    +
    229template<typename ConstructorType, typename Tuple, size_t...Idx>
    +
    230void apply_constructor(void* pre_alocated_mem, Tuple args, std::index_sequence<Idx...>) {
    +
    231 new (pre_alocated_mem) ConstructorType(std::get<Idx>(args)...);
    +
    232}
    +
    233}
    +
    234SEASTAR_MODULE_EXPORT_BEGIN
    +
    235
    +
    246template <typename T, typename... ConstructorArgs>
    +
    247scheduling_group_key_config
    +
    248make_scheduling_group_key_config(ConstructorArgs... args) {
    +
    249 scheduling_group_key_config sgkc(typeid(T));
    +
    250 sgkc.allocation_size = sizeof(T);
    +
    251 sgkc.alignment = alignof(T);
    +
    252 sgkc.constructor = [args = std::make_tuple(args...)] (void* p) {
    +
    253 internal::apply_constructor<T>(p, args, std::make_index_sequence<sizeof...(ConstructorArgs)>());
    +
    254 };
    +
    255 sgkc.destructor = [] (void* p) {
    +
    256 static_cast<T*>(p)->~T();
    +
    257 };
    +
    258 return sgkc;
    +
    259}
    +
    260
    + +
    269
    +
    277template<typename T>
    + +
    279
    +
    280
    + +
    286 unsigned _id;
    +
    287private:
    +
    288 explicit scheduling_group(unsigned id) noexcept : _id(id) {}
    +
    289public:
    +
    291 constexpr scheduling_group() noexcept : _id(0) {} // must be constexpr for current_scheduling_group_holder
    +
    292 bool active() const noexcept;
    +
    293 const sstring& name() const noexcept;
    +
    294 const sstring& short_name() const noexcept;
    +
    295 bool operator==(scheduling_group x) const noexcept { return _id == x._id; }
    +
    296 bool operator!=(scheduling_group x) const noexcept { return _id != x._id; }
    +
    297 bool is_main() const noexcept { return _id == 0; }
    +
    298 bool is_at_exit() const noexcept { return _id == 1; }
    +
    299 template<typename T>
    + +
    307 return *internal::scheduling_group_get_specific_ptr<T>(*this, key);
    +
    308 }
    +
    321 void set_shares(float shares) noexcept;
    +
    322
    +
    327 float get_shares() const noexcept;
    +
    328
    +
    329#if SEASTAR_API_LEVEL >= 7
    +
    337 future<> update_io_bandwidth(uint64_t bandwidth) const;
    +
    338#endif
    +
    339
    +
    340 friend future<scheduling_group> create_scheduling_group(sstring name, sstring shortname, float shares) noexcept;
    + +
    342 friend future<> rename_scheduling_group(scheduling_group sg, sstring new_name, sstring new_shortname) noexcept;
    +
    343 friend class reactor;
    +
    344 friend unsigned internal::scheduling_group_index(scheduling_group sg) noexcept;
    +
    345 friend scheduling_group internal::scheduling_group_from_index(unsigned index) noexcept;
    +
    346
    +
    347 template<typename SpecificValType, typename Mapper, typename Reducer, typename Initial>
    +
    348 requires requires(SpecificValType specific_val, Mapper mapper, Reducer reducer, Initial initial) {
    +
    349 {reducer(initial, mapper(specific_val))} -> std::convertible_to<Initial>;
    +
    350 }
    +
    351 friend future<typename function_traits<Reducer>::return_type>
    +
    352 map_reduce_scheduling_group_specific(Mapper mapper, Reducer reducer, Initial initial_val, scheduling_group_key key);
    +
    353
    +
    354 template<typename SpecificValType, typename Reducer, typename Initial>
    +
    355 requires requires(SpecificValType specific_val, Reducer reducer, Initial initial) {
    +
    356 {reducer(initial, specific_val)} -> std::convertible_to<Initial>;
    +
    357 }
    +
    358 friend future<typename function_traits<Reducer>::return_type>
    +
    359 reduce_scheduling_group_specific(Reducer reducer, Initial initial_val, scheduling_group_key key);
    +
    360
    +
    361
    +
    362};
    +
    363
    +
    365SEASTAR_MODULE_EXPORT_END
    +
    366namespace internal {
    +
    367
    +
    368inline
    +
    369unsigned
    +
    370scheduling_group_index(scheduling_group sg) noexcept {
    +
    371 return sg._id;
    +
    372}
    +
    373
    +
    374inline
    +
    375scheduling_group
    +
    376scheduling_group_from_index(unsigned index) noexcept {
    +
    377 return scheduling_group(index);
    +
    378}
    +
    379
    +
    380#ifdef SEASTAR_BUILD_SHARED_LIBS
    +
    381scheduling_group*
    +
    382current_scheduling_group_ptr() noexcept;
    +
    383#else
    +
    384inline
    +
    385scheduling_group*
    +
    386current_scheduling_group_ptr() noexcept {
    +
    387 // Slow unless constructor is constexpr
    +
    388 static thread_local scheduling_group sg;
    +
    389 return &sg;
    +
    390}
    +
    391#endif
    +
    392}
    +
    394
    +
    395SEASTAR_MODULE_EXPORT_BEGIN
    +
    397inline
    +
    398scheduling_group
    + +
    400 return *internal::current_scheduling_group_ptr();
    +
    401}
    +
    402
    +
    403inline
    +
    404scheduling_group
    +
    405default_scheduling_group() noexcept {
    +
    406 return scheduling_group();
    +
    407}
    +
    408
    +
    409SEASTAR_MODULE_EXPORT_END
    +
    410
    +
    411inline
    +
    412bool
    +
    413scheduling_group::active() const noexcept {
    +
    414 return *this == current_scheduling_group();
    +
    415}
    +
    416
    +
    417}
    +
    418
    +
    419namespace std {
    +
    420
    +
    421SEASTAR_MODULE_EXPORT
    +
    422template <>
    +
    423struct hash<seastar::scheduling_group> {
    +
    424 size_t operator()(seastar::scheduling_group sg) const noexcept {
    +
    425 return seastar::internal::scheduling_group_index(sg);
    +
    426 }
    +
    427};
    +
    428
    +
    429}
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: reactor.hh:156
    +
    Definition: scheduling.hh:183
    +
    friend future< scheduling_group_key > scheduling_group_key_create(scheduling_group_key_config cfg) noexcept
    +
    friend T & scheduling_group_get_specific(scheduling_group_key key) noexcept
    Definition: scheduling_specific.hh:120
    +
    scheduling_group_key(const scheduling_group_key &) noexcept=default
    The only user allowed operation on a key is copying.
    +
    Identifies function calls that are accounted as a group.
    Definition: scheduling.hh:285
    +
    float get_shares() const noexcept
    +
    constexpr scheduling_group() noexcept
    Creates a scheduling_group object denoting the default group.
    Definition: scheduling.hh:291
    +
    friend future rename_scheduling_group(scheduling_group sg, sstring new_name, sstring new_shortname) noexcept
    +
    friend future destroy_scheduling_group(scheduling_group sg) noexcept
    +
    future update_io_bandwidth(uint64_t bandwidth) const
    Updates the current IO bandwidth for a given scheduling group.
    +
    friend future< scheduling_group > create_scheduling_group(sstring name, sstring shortname, float shares) noexcept
    +
    void set_shares(float shares) noexcept
    +
    friend future< typename function_traits< Reducer >::return_type > reduce_scheduling_group_specific(Reducer reducer, Initial initial_val, scheduling_group_key key)
    Definition: scheduling_specific.hh:184
    +
    friend future< typename function_traits< Reducer >::return_type > map_reduce_scheduling_group_specific(Mapper mapper, Reducer reducer, Initial initial_val, scheduling_group_key key)
    Definition: scheduling_specific.hh:150
    +
    T & get_specific(scheduling_group_key key) noexcept
    Definition: scheduling.hh:306
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    scheduling_group current_scheduling_group() noexcept
    Returns the current scheduling group.
    Definition: scheduling.hh:399
    +
    T & scheduling_group_get_specific(scheduling_group sg, scheduling_group_key key)
    Definition: scheduling_specific.hh:104
    +
    future destroy_scheduling_group(scheduling_group sg) noexcept
    +
    future rename_scheduling_group(scheduling_group sg, sstring new_name) noexcept
    +
    future< scheduling_group > create_scheduling_group(sstring name, float shares) noexcept
    +
    scheduling_group_key_config make_scheduling_group_key_config(ConstructorArgs... args)
    Definition: scheduling.hh:248
    +
    future< scheduling_group_key > scheduling_group_key_create(scheduling_group_key_config cfg) noexcept
    +
    STL namespace.
    +
    Definition: scheduling.hh:143
    +
    size_t allocation_size
    The allocation size for the value (usually: sizeof(T))
    Definition: scheduling.hh:161
    +
    std::function< void(void *)> constructor
    A function that will be called for each newly allocated value.
    Definition: scheduling.hh:167
    +
    std::function< void(void *)> rename
    A function that will be called for each value after the scheduling group is renamed.
    Definition: scheduling.hh:169
    +
    std::type_index type_index
    Holds the type information for debug mode runtime validation.
    Definition: scheduling.hh:165
    +
    scheduling_group_key_config()
    Definition: scheduling.hh:147
    +
    size_t alignment
    The required alignment of the value (usually: alignof(T))
    Definition: scheduling.hh:163
    +
    scheduling_group_key_config(const std::type_info &type_info)
    Definition: scheduling.hh:158
    +
    std::function< void(void *)> destructor
    Definition: scheduling.hh:172
    +
    + + + + diff --git a/master/scheduling__specific_8hh_source.html b/master/scheduling__specific_8hh_source.html new file mode 100644 index 000000000..fabd58dc8 --- /dev/null +++ b/master/scheduling__specific_8hh_source.html @@ -0,0 +1,232 @@ + + + + + + + +Seastar: seastar/core/scheduling_specific.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    scheduling_specific.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2019 Scylla DB Ltd
    +
    20 */
    +
    21
    +
    22#ifndef SEASTAR_MODULE
    +
    23#include <boost/range/adaptor/filtered.hpp>
    + +
    25#include <seastar/core/map_reduce.hh>
    +
    26#include <seastar/util/modules.hh>
    +
    27#include <array>
    +
    28#include <typeindex>
    +
    29#include <vector>
    +
    30#endif
    +
    31
    +
    32#pragma once
    +
    33
    +
    34namespace seastar {
    +
    35
    +
    36namespace internal {
    +
    37
    +
    38struct scheduling_group_specific_thread_local_data {
    +
    39 struct per_scheduling_group {
    +
    40 bool queue_is_initialized = false;
    +
    46 std::vector<void*> specific_vals;
    +
    47 };
    +
    48 std::array<per_scheduling_group, max_scheduling_groups()> per_scheduling_group_data;
    +
    49 std::vector<scheduling_group_key_config> scheduling_group_key_configs;
    +
    50};
    +
    51
    +
    52#ifdef SEASTAR_BUILD_SHARED_LIBS
    +
    53scheduling_group_specific_thread_local_data** get_scheduling_group_specific_thread_local_data_ptr() noexcept;
    +
    54#else
    +
    55inline
    +
    56scheduling_group_specific_thread_local_data** get_scheduling_group_specific_thread_local_data_ptr() noexcept {
    +
    57 static thread_local scheduling_group_specific_thread_local_data* data;
    +
    58 return &data;
    +
    59}
    +
    60#endif
    +
    61inline
    +
    62scheduling_group_specific_thread_local_data& get_scheduling_group_specific_thread_local_data() noexcept {
    +
    63 return **get_scheduling_group_specific_thread_local_data_ptr();
    +
    64}
    +
    65
    +
    66[[noreturn]] void no_such_scheduling_group(scheduling_group sg);
    +
    67
    +
    76template<typename T>
    +
    77T* scheduling_group_get_specific_ptr(scheduling_group sg, scheduling_group_key key) noexcept {
    +
    78 auto& data = internal::get_scheduling_group_specific_thread_local_data();
    +
    79#ifdef SEASTAR_DEBUG
    +
    80 assert(std::type_index(typeid(T)) == data.scheduling_group_key_configs[key.id()].type_index);
    +
    81#endif
    +
    82 auto sg_id = internal::scheduling_group_index(sg);
    +
    83 if (__builtin_expect(sg_id < data.per_scheduling_group_data.size() &&
    +
    84 data.per_scheduling_group_data[sg_id].queue_is_initialized, true)) {
    +
    85 return reinterpret_cast<T*>(data.per_scheduling_group_data[sg_id].specific_vals[key.id()]);
    +
    86 }
    +
    87 return nullptr;
    +
    88}
    +
    89
    +
    90}
    +
    91
    +
    92SEASTAR_MODULE_EXPORT_BEGIN
    +
    93
    +
    103template<typename T>
    + +
    105 T* p = internal::scheduling_group_get_specific_ptr<T>(sg, std::move(key));
    +
    106 if (!p) {
    +
    107 internal::no_such_scheduling_group(sg);
    +
    108 }
    +
    109 return *p;
    +
    110}
    +
    111
    +
    119template<typename T>
    + +
    121 // Unlike internal::scheduling_group_get_specific_ptr, this can
    +
    122 // return a reference to an element whose queue_is_initialized is
    +
    123 // false.
    +
    124 auto& data = internal::get_scheduling_group_specific_thread_local_data();
    +
    125 assert(std::type_index(typeid(T)) == data.scheduling_group_key_configs[key.id()].type_index);
    +
    126 auto sg_id = internal::scheduling_group_index(current_scheduling_group());
    +
    127 return *reinterpret_cast<T*>(data.per_scheduling_group_data[sg_id].specific_vals[key.id()]);
    +
    128}
    +
    129
    +
    145template<typename SpecificValType, typename Mapper, typename Reducer, typename Initial>
    +
    146requires requires(SpecificValType specific_val, Mapper mapper, Reducer reducer, Initial initial) {
    +
    147 {reducer(initial, mapper(specific_val))} -> std::convertible_to<Initial>;
    +
    148}
    +
    149future<typename function_traits<Reducer>::return_type>
    +
    150map_reduce_scheduling_group_specific(Mapper mapper, Reducer reducer,
    +
    151 Initial initial_val, scheduling_group_key key) {
    +
    152 using per_scheduling_group = internal::scheduling_group_specific_thread_local_data::per_scheduling_group;
    +
    153 auto& data = internal::get_scheduling_group_specific_thread_local_data();
    +
    154 auto wrapped_mapper = [key, mapper] (per_scheduling_group& psg) {
    +
    155 auto id = internal::scheduling_group_key_id(key);
    +
    156 return make_ready_future<typename function_traits<Mapper>::return_type>
    +
    157 (mapper(*reinterpret_cast<SpecificValType*>(psg.specific_vals[id])));
    +
    158 };
    +
    159
    +
    160 return map_reduce(
    +
    161 data.per_scheduling_group_data
    +
    162 | boost::adaptors::filtered(std::mem_fn(&per_scheduling_group::queue_is_initialized)),
    +
    163 wrapped_mapper, std::move(initial_val), reducer);
    +
    164}
    +
    165
    +
    179template<typename SpecificValType, typename Reducer, typename Initial>
    +
    180requires requires(SpecificValType specific_val, Reducer reducer, Initial initial) {
    +
    181 {reducer(initial, specific_val)} -> std::convertible_to<Initial>;
    +
    182}
    +
    183future<typename function_traits<Reducer>::return_type>
    +
    184reduce_scheduling_group_specific(Reducer reducer, Initial initial_val, scheduling_group_key key) {
    +
    185 using per_scheduling_group = internal::scheduling_group_specific_thread_local_data::per_scheduling_group;
    +
    186 auto& data = internal::get_scheduling_group_specific_thread_local_data();
    +
    187
    +
    188 auto mapper = [key] (per_scheduling_group& psg) {
    +
    189 auto id = internal::scheduling_group_key_id(key);
    +
    190 return make_ready_future<SpecificValType>(*reinterpret_cast<SpecificValType*>(psg.specific_vals[id]));
    +
    191 };
    +
    192
    +
    193 return map_reduce(
    +
    194 data.per_scheduling_group_data
    +
    195 | boost::adaptors::filtered(std::mem_fn(&per_scheduling_group::queue_is_initialized)),
    +
    196 mapper, std::move(initial_val), reducer);
    +
    197}
    +
    198
    +
    199SEASTAR_MODULE_EXPORT_END
    +
    200
    +
    201}
    +
    Definition: scheduling.hh:183
    +
    Identifies function calls that are accounted as a group.
    Definition: scheduling.hh:285
    +
    auto map_reduce(Iterator begin, Iterator end, Mapper &&mapper, Reducer &&r) -> typename reducer_traits< Reducer >::future_type
    Definition: map_reduce.hh:107
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    future< typename function_traits< Reducer >::return_type > map_reduce_scheduling_group_specific(Mapper mapper, Reducer reducer, Initial initial_val, scheduling_group_key key)
    Definition: scheduling_specific.hh:150
    +
    scheduling_group current_scheduling_group() noexcept
    Returns the current scheduling group.
    Definition: scheduling.hh:399
    +
    T & scheduling_group_get_specific(scheduling_group sg, scheduling_group_key key)
    Definition: scheduling_specific.hh:104
    +
    future< typename function_traits< Reducer >::return_type > reduce_scheduling_group_specific(Reducer reducer, Initial initial_val, scheduling_group_key key)
    Definition: scheduling_specific.hh:184
    + +
    + + + + diff --git a/master/scollectd_8hh_source.html b/master/scollectd_8hh_source.html new file mode 100644 index 000000000..226dc6036 --- /dev/null +++ b/master/scollectd_8hh_source.html @@ -0,0 +1,876 @@ + + + + + + + +Seastar: seastar/core/scollectd.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    scollectd.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <type_traits>
    +
    26#include <utility>
    +
    27#include <functional>
    +
    28#include <array>
    +
    29#include <iterator>
    +
    30#include <stdint.h>
    +
    31#include <memory>
    +
    32#include <string>
    +
    33#include <tuple>
    +
    34#include <chrono>
    +
    35#endif
    +
    36
    +
    37#include <seastar/core/future.hh>
    +
    38#include <seastar/net/byteorder.hh>
    +
    39#include <seastar/core/shared_ptr.hh>
    +
    40#include <seastar/core/sstring.hh>
    +
    41#include <seastar/util/log.hh>
    +
    42#include <seastar/util/program-options.hh>
    +
    43#include <seastar/util/modules.hh>
    + +
    45
    +
    46namespace seastar {
    +
    47
    +
    86namespace scollectd {
    +
    87
    +
    88extern seastar::logger logger;
    +
    89
    +
    90using data_type = seastar::metrics::impl::data_type;
    +
    91
    +
    92enum class known_type {
    +
    93 // from types.db. Defined collectd types (type_id) selection.
    +
    94 // This enum omits the very application specific types, such
    +
    95 // as mysql_* etc, since if you really are re-writing mysql
    +
    96 // in seastar, you probably know how to look the type up manually...
    +
    97
    +
    98 absolute,
    +
    99 backends,
    +
    100 bitrate,
    +
    101 blocked_clients,
    +
    102 bytes,
    +
    103 cache_eviction,
    +
    104 cache_operation,
    +
    105 cache_ratio,
    +
    106 cache_result,
    +
    107 cache_size,
    +
    108 capacity,
    +
    109 changes_since_last_save,
    +
    110 charge,
    +
    111 clock_last_meas,
    +
    112 clock_last_update,
    +
    113 clock_mode,
    +
    114 clock_reachability,
    +
    115 clock_skew_ppm,
    +
    116 clock_state,
    +
    117 clock_stratum,
    +
    118 compression,
    +
    119 compression_ratio,
    +
    120 connections,
    +
    121 conntrack,
    +
    122 contextswitch,
    +
    123 count,
    +
    124 counter,
    +
    125 cpu,
    +
    126 cpufreq,
    +
    127 current,
    +
    128 current_connections,
    +
    129 current_sessions,
    +
    130 delay,
    +
    131 derive,
    +
    132 df,
    +
    133 df_complex,
    +
    134 df_inodes,
    +
    135 disk_io_time,
    +
    136 disk_latency,
    +
    137 disk_merged,
    +
    138 disk_octets,
    +
    139 disk_ops,
    +
    140 disk_ops_complex,
    +
    141 disk_time,
    +
    142 dns_answer,
    +
    143 dns_notify,
    +
    144 dns_octets,
    +
    145 dns_opcode,
    +
    146 dns_qtype,
    +
    147 dns_qtype_cached,
    +
    148 dns_query,
    +
    149 dns_question,
    +
    150 dns_rcode,
    +
    151 dns_reject,
    +
    152 dns_request,
    +
    153 dns_resolver,
    +
    154 dns_response,
    +
    155 dns_transfer,
    +
    156 dns_update,
    +
    157 dns_zops,
    +
    158 drbd_resource,
    +
    159 duration,
    +
    160 email_check,
    +
    161 email_count,
    +
    162 email_size,
    +
    163 entropy,
    +
    164 evicted_keys,
    +
    165 expired_keys,
    +
    166 fanspeed,
    +
    167 file_handles,
    +
    168 file_size,
    +
    169 files,
    +
    170 flow,
    +
    171 fork_rate,
    +
    172 frequency,
    +
    173 frequency_error,
    +
    174 frequency_offset,
    +
    175 fscache_stat,
    +
    176 gauge,
    +
    177 hash_collisions,
    +
    178 http_request_methods,
    +
    179 http_requests,
    +
    180 http_response_codes,
    +
    181 humidity,
    +
    182 if_collisions,
    +
    183 if_dropped,
    +
    184 if_errors,
    +
    185 if_multicast,
    +
    186 if_octets,
    +
    187 if_packets,
    +
    188 if_rx_errors,
    +
    189 if_rx_octets,
    +
    190 if_tx_errors,
    +
    191 if_tx_octets,
    +
    192 invocations,
    +
    193 io_octets,
    +
    194 io_packets,
    +
    195 ipt_bytes,
    +
    196 ipt_packets,
    +
    197 irq,
    +
    198 latency,
    +
    199 links,
    +
    200 load,
    +
    201 md_disks,
    +
    202 memory,
    +
    203 memory_lua,
    +
    204 memory_throttle_count,
    +
    205 multimeter,
    +
    206 mutex_operations,
    +
    207 objects,
    +
    208 operations,
    +
    209 packets,
    +
    210 pending_operations,
    +
    211 percent,
    +
    212 percent_bytes,
    +
    213 percent_inodes,
    +
    214 ping,
    +
    215 ping_droprate,
    +
    216 ping_stddev,
    +
    217 players,
    +
    218 power,
    +
    219 pressure,
    +
    220 protocol_counter,
    +
    221 pubsub,
    + +
    223 records,
    +
    224 requests,
    +
    225 response_code,
    +
    226 response_time,
    +
    227 root_delay,
    +
    228 root_dispersion,
    +
    229 route_etx,
    +
    230 route_metric,
    +
    231 routes,
    +
    232 segments,
    +
    233 serial_octets,
    +
    234 signal_noise,
    +
    235 signal_power,
    +
    236 signal_quality,
    +
    237 snr,
    +
    238 spl,
    +
    239 swap,
    +
    240 swap_io,
    +
    241 tcp_connections,
    +
    242 temperature,
    +
    243 threads,
    +
    244 time_dispersion,
    +
    245 time_offset,
    +
    246 time_offset_ntp,
    +
    247 time_offset_rms,
    +
    248 time_ref,
    +
    249 timeleft,
    + + + + + + + + + +
    259 uptime,
    +
    260 users,
    +
    261 vcl,
    +
    262 vcpu,
    +
    263 virt_cpu_total,
    +
    264 virt_vcpu,
    +
    265 vmpage_action,
    +
    266 vmpage_faults,
    +
    267 vmpage_io,
    +
    268 vmpage_number,
    +
    269 volatile_changes,
    +
    270 voltage,
    +
    271 voltage_threshold,
    +
    272 vs_memory,
    +
    273 vs_processes,
    +
    274 vs_threads,
    +
    275};
    +
    276
    +
    277// don't use directly. use make_typed.
    +
    278template<typename T>
    +
    279struct typed {
    +
    280 typed(data_type t, T && v)
    +
    281 : type(t), value(std::forward<T>(v)) {
    +
    282 }
    +
    283 data_type type;
    +
    284 T value;
    +
    285};
    +
    286
    +
    287template<typename T>
    +
    288inline typed<T> make_typed(data_type type, T&& t) {
    +
    289 return typed<T>(type, std::forward<T>(t));
    +
    290}
    +
    291
    +
    292using plugin_id = seastar::metrics::group_name_type;
    +
    293using plugin_instance_id = seastar::metrics::instance_id_type;
    + +
    295using type_instance = seastar::metrics::metric_name_type;
    +
    296
    +
    297type_id type_id_for(known_type);
    +
    298
    +
    299using description = seastar::metrics::description;
    +
    300
    +
    301static constexpr unsigned max_collectd_field_text_len = 63;
    +
    302
    + +
    304 static thread_local unsigned _next_truncated_idx;
    +
    305
    +
    307 void truncate(sstring& field, const char* field_desc);
    +
    308public:
    +
    309 type_instance_id() = default;
    +
    310 type_instance_id(plugin_id p, plugin_instance_id pi, type_id t,
    +
    311 scollectd::type_instance ti = std::string())
    +
    312 : _plugin(std::move(p)), _plugin_instance(std::move(pi)), _type(
    +
    313 std::move(t)), _type_instance(std::move(ti)) {
    +
    314 // truncate strings to the maximum allowed length
    +
    315 truncate(_plugin, "plugin");
    +
    316 truncate(_plugin_instance, "plugin_instance");
    +
    317 truncate(_type, "type");
    +
    318 truncate(_type_instance, "type_instance");
    +
    319 }
    +
    320 type_instance_id(const seastar::metrics::impl::metric_id &id, const type_id& inherit_type) : _plugin(id.group_name()),
    +
    321 _plugin_instance(id.instance_id()), _type(inherit_type),
    +
    322 _type_instance(id.name()) {
    +
    323 }
    + +
    325 type_instance_id(const type_instance_id &) = default;
    +
    326
    +
    327 type_instance_id & operator=(type_instance_id &&) = default;
    +
    328 type_instance_id & operator=(const type_instance_id &) = default;
    +
    329
    +
    330 const plugin_id & plugin() const {
    +
    331 return _plugin;
    +
    332 }
    +
    333 const plugin_instance_id & plugin_instance() const {
    +
    334 return _plugin_instance;
    +
    335 }
    +
    336 const type_id & type() const {
    +
    337 return _type;
    +
    338 }
    +
    339 const scollectd::type_instance & type_instance() const {
    +
    340 return _type_instance;
    +
    341 }
    +
    342 bool operator<(const type_instance_id&) const;
    +
    343 bool operator==(const type_instance_id&) const;
    +
    344private:
    +
    345 plugin_id _plugin;
    +
    346 plugin_instance_id _plugin_instance;
    +
    347 type_id _type;
    +
    348 scollectd::type_instance _type_instance;
    +
    349};
    +
    350
    +
    351extern const plugin_instance_id per_cpu_plugin_instance;
    +
    352
    +
    353// Scollectd configuration options.
    + + + + + +
    370
    + +
    374};
    +
    375
    +
    376void configure(const options&);
    +
    377void remove_polled_metric(const type_instance_id &);
    +
    378
    + +
    380
    + +
    394 registration() = default;
    + + +
    397 registration(const registration&) = delete;
    +
    398 registration(registration&&) = default;
    + +
    400 registration & operator=(const registration&) = delete;
    +
    401 registration & operator=(registration&&) = default;
    +
    402
    +
    403 void unregister() {
    +
    404 remove_polled_metric(_id);
    +
    405 _id = type_instance_id();
    +
    406 }
    +
    407private:
    +
    408 friend class plugin_instance_metrics;
    + + +
    411};
    +
    412
    + +
    420 : public std::vector<registration>
    +
    421{
    +
    422public:
    +
    423 typedef std::vector<registration> vector_type;
    +
    424
    + +
    426 {}
    +
    427 registrations(vector_type&& v) : vector_type(std::move(v))
    +
    428 {}
    +
    429 registrations(const std::initializer_list<type_instance_id>& l)
    +
    430 : vector_type(l.begin(),l.end())
    +
    431 {}
    +
    432 registrations& operator=(vector_type&& v) {
    +
    433 vector_type::operator=(std::move(v));
    +
    434 return *this;
    +
    435 }
    +
    436 registrations& operator=(const std::initializer_list<type_instance_id>& l) {
    +
    437 return registrations::operator=(registrations(l));
    +
    438 }
    +
    439};
    +
    440
    +
    441class value_list;
    +
    442
    + +
    448 template<typename... Args>
    +
    449 typed_value(const type_id& tid, const scollectd::type_instance& ti, description, Args&&... args);
    +
    450
    +
    451 template<typename... Args>
    +
    452 typed_value(const type_id& tid, const scollectd::type_instance& ti, Args&&... args)
    +
    453 : typed_value(tid, ti, description(), std::forward<Args>(args)...)
    +
    454 {}
    +
    455
    +
    456 const scollectd::type_instance& type_instance() const {
    +
    457 return _type_instance;
    +
    458 }
    +
    459 const shared_ptr<value_list>& values() const {
    +
    460 return _values;
    +
    461 }
    +
    462 const type_id & type() const {
    +
    463 return _type_id;
    +
    464 }
    +
    465private:
    +
    466 type_id _type_id;
    +
    467 scollectd::type_instance _type_instance;
    + +
    469};
    +
    470
    + +
    472public:
    +
    473 template<typename... TypedValues>
    +
    474 plugin_instance_metrics(const plugin_id& p, const plugin_instance_id& pi, TypedValues&&... values)
    +
    475 : _plugin_id(p)
    +
    476 , _plugin_instance(pi)
    +
    477 , _registrations({ add_impl(values)... })
    +
    478 {}
    +
    479 std::vector<type_instance_id> bound_ids() const;
    +
    480 void add(const typed_value&);
    +
    481private:
    +
    482 type_instance_id add_impl(const typed_value&);
    +
    483
    +
    484 plugin_id _plugin_id;
    +
    485 plugin_instance_id _plugin_instance;
    +
    486 registrations _registrations;
    +
    487};
    +
    488
    + +
    494public:
    +
    495 template<typename... TypedValues>
    +
    496 percpu_plugin_instance_metrics(const plugin_id& p, TypedValues&&... values)
    +
    497 : plugin_instance_metrics(p, per_cpu_plugin_instance, std::forward<TypedValues>(values)...)
    +
    498 {}
    +
    499};
    +
    500
    +
    505template<known_type Type>
    + +
    507 template<typename ... Args>
    +
    508 typed_value_impl(const scollectd::type_instance& ti, Args&& ... args)
    +
    509 : typed_value(type_id_for(Type), ti, std::forward<Args>(args)...)
    +
    510 {}
    +
    511
    +
    512 template<typename ... Args>
    +
    513 typed_value_impl(scollectd::type_instance ti, description d, Args&& ... args)
    +
    514 : typed_value(type_id_for(Type), std::move(ti), std::move(d), std::forward<Args>(args)...)
    +
    515 {}
    +
    516 template<typename ... Args>
    +
    517 typed_value_impl(description d, Args&& ... args)
    +
    518 : typed_value(type_id_for(Type), scollectd::type_instance(), std::move(d), std::forward<Args>(args)...)
    +
    519 {}
    +
    520};
    +
    521
    + + + + + + + + + + + + + +
    540
    +
    541// lots of template junk to build typed value list tuples
    +
    542// for registered values.
    +
    543template<typename T, typename En = void>
    + +
    545
    +
    546template<typename T, typename En = void>
    + +
    548
    +
    549template<typename T>
    +
    550struct is_callable<T,
    +
    551std::enable_if_t<
    +
    552!std::is_void_v<std::invoke_result_t<T>>,
    +
    553void>> : public std::true_type {
    +
    554};
    +
    555
    +
    556template<typename T>
    +
    557struct is_callable<T,
    +
    558std::enable_if_t<std::is_fundamental_v<T>, void>> : public std::false_type {
    +
    559};
    +
    560
    +
    561template<typename T>
    + +
    563std::enable_if_t<
    +
    564std::is_integral_v<T> && std::is_unsigned_v<T>,
    +
    565void>> : public std::integral_constant<data_type,
    +
    566data_type::COUNTER> {
    +
    567};
    +
    568template<typename T>
    + +
    570std::enable_if_t<std::is_floating_point_v<T>, void>> : public std::integral_constant<
    +
    571data_type, data_type::GAUGE> {
    +
    572};
    +
    573template<typename T>
    + +
    575std::enable_if_t<is_callable<T>::value, void>> : public data_type_for<
    +
    576std::invoke_result_t<T>> {
    +
    577};
    +
    578template<typename T>
    +
    579struct data_type_for<typed<T>> : public data_type_for<T> {
    +
    580};
    +
    581
    +
    582template<typename T>
    +
    583class value {
    +
    584public:
    +
    585 template<typename W>
    +
    586 struct wrap {
    +
    587 wrap(const W & v)
    +
    588 : _v(v) {
    +
    589 }
    +
    590 const W & operator()() const {
    +
    591 return _v;
    +
    592 }
    +
    593 const W & _v;
    +
    594 };
    +
    595
    +
    596 typedef std::remove_reference_t<T> value_type;
    +
    597 typedef std::conditional_t<
    + +
    599 value_type, wrap<value_type> > stored_type;
    +
    600
    +
    601 value(const value_type & t)
    +
    602 : value<T>(data_type_for<value_type>::value, t) {
    +
    603 }
    +
    604 value(data_type type, const value_type & t)
    +
    605 : _type(type), _t(t) {
    +
    606 }
    +
    607 uint64_t operator()() const {
    +
    608 auto v = _t();
    +
    609 if (_type == data_type::GAUGE) {
    +
    610 return convert(double(v));
    +
    611 } else {
    +
    612 uint64_t u = v;
    +
    613 return convert(u);
    +
    614 }
    +
    615 }
    +
    616 operator uint64_t() const {
    +
    617 return (*this)();
    +
    618 }
    +
    619 operator data_type() const {
    +
    620 return _type;
    +
    621 }
    +
    622 data_type type() const {
    +
    623 return _type;
    +
    624 }
    +
    625private:
    +
    626 // not super quick value -> protocol endian 64-bit values.
    +
    627 template<typename _Iter>
    +
    628 void bpack(_Iter s, _Iter e, uint64_t v) const {
    +
    629 while (s != e) {
    +
    630 *s++ = (v & 0xff);
    +
    631 v >>= 8;
    +
    632 }
    +
    633 }
    +
    634 template<typename V>
    +
    635 std::enable_if_t<std::is_integral_v<V>, uint64_t> convert(
    +
    636 V v) const {
    +
    637 uint64_t i = v;
    +
    638 // network byte order
    +
    639 return ntohq(i);
    +
    640 }
    +
    641 template<typename V>
    +
    642 std::enable_if_t<std::is_floating_point_v<V>, uint64_t> convert(
    +
    643 V t) const {
    +
    644 union {
    +
    645 uint64_t i;
    +
    646 double v;
    +
    647 } v;
    +
    648 union {
    +
    649 uint64_t i;
    +
    650 uint8_t b[8];
    +
    651 } u;
    +
    652 v.v = t;
    +
    653 // intel byte order. could also obviously be faster.
    +
    654 // could be ignored if we just assume we're le (for now),
    +
    655 // but this is ok me thinks.
    +
    656 bpack(std::begin(u.b), std::end(u.b), v.i);
    +
    657 return u.i;
    +
    658 }
    +
    659 ;
    +
    660
    +
    661 const data_type _type;
    +
    662 const stored_type _t;
    +
    663};
    +
    664
    +
    665template<typename T>
    +
    666class value<typed<T>> : public value<T> {
    +
    667public:
    +
    668 value(const typed<T> & args)
    +
    669: value<T>(args.type, args.value) {
    +
    670 }
    +
    671};
    +
    672
    + +
    674 bool _enabled = true;
    +
    675public:
    +
    676 value_list(description d) : _description(std::move(d))
    +
    677 {}
    +
    678 value_list(value_list&&) = default;
    +
    679 virtual ~value_list() {}
    +
    680
    +
    681 virtual size_t size() const = 0;
    +
    682
    +
    683 virtual void types(data_type *) const = 0;
    +
    684 virtual void values(net::packed<uint64_t> *) const = 0;
    +
    685
    +
    686 const description& desc() const {
    +
    687 return _description;
    +
    688 }
    +
    689
    +
    690 bool empty() const {
    +
    691 return size() == 0;
    +
    692 }
    +
    693
    +
    694 bool is_enabled() const {
    +
    695 return _enabled;
    +
    696 }
    +
    697
    +
    698 void set_enabled(bool b) {
    +
    699 _enabled = b;
    +
    700 }
    +
    701private:
    +
    702 description _description;
    +
    703};
    +
    704
    +
    705template<typename ... Args>
    +
    706class values_impl: public value_list {
    +
    707public:
    +
    708 static const size_t num_values = sizeof...(Args);
    +
    709
    +
    710 values_impl(description d, Args&& ...args)
    +
    711 : value_list(std::move(d))
    +
    712 , _values(std::forward<Args>(args)...)
    +
    713 {}
    +
    714
    +
    715 values_impl(values_impl<Args...>&& a) = default;
    +
    716 values_impl(const values_impl<Args...>& a) = default;
    +
    717
    +
    718 size_t size() const override {
    +
    719 return num_values;
    +
    720 }
    +
    721 void types(data_type * p) const override {
    +
    722 unpack(_values, [p](Args... args) {
    +
    723 std::initializer_list<data_type> tmp = { args... };
    +
    724 std::copy(tmp.begin(), tmp.end(), p);
    +
    725 });
    +
    726 }
    +
    727 void values(net::packed<uint64_t> * p) const override {
    +
    728 unpack(_values, [p](Args... args) {
    +
    729 std::initializer_list<uint64_t> tmp = { args... };
    +
    730 std::copy(tmp.begin(), tmp.end(), p);
    +
    731 });
    +
    732 }
    +
    733private:
    +
    734 template<typename _Op>
    +
    735 void unpack(const std::tuple<Args...>& t, _Op&& op) const {
    +
    736 do_unpack(t, std::index_sequence_for<Args...> {}, std::forward<_Op>(op));
    +
    737 }
    +
    738
    +
    739 template<size_t ...S, typename _Op>
    +
    740 void do_unpack(const std::tuple<Args...>& t, const std::index_sequence<S...> &, _Op&& op) const {
    +
    741 op(std::get<S>(t)...);
    +
    742 }
    +
    743
    +
    744 std::tuple < Args... > _values;
    +
    745};
    +
    746
    +
    747void add_polled(const type_instance_id &, const shared_ptr<value_list> &, bool enabled = true);
    +
    748
    +
    749typedef std::function<void()> notify_function;
    +
    750template<typename... _Args>
    +
    751static auto make_type_instance(description d, _Args && ... args) -> values_impl < decltype(value<_Args>(std::forward<_Args>(args)))... >
    +
    752{
    +
    753 return values_impl<decltype(value<_Args>(std::forward<_Args>(args)))...>(
    +
    754 std::move(d), value<_Args>(std::forward<_Args>(args))...);
    +
    755}
    +
    760template<typename ... _Args>
    +
    761[[deprecated("Use the metrics layer")]] static type_instance_id add_polled_metric(const plugin_id & plugin,
    +
    762 const plugin_instance_id & plugin_instance, const type_id & type,
    +
    763 const scollectd::type_instance & type_instance, _Args&& ... args) {
    +
    764 return add_polled_metric(plugin, plugin_instance, type, type_instance, description(),
    +
    765 std::forward<_Args>(args)...);
    +
    766}
    +
    771template<typename ... _Args>
    +
    772[[deprecated("Use the metrics layer")]] static type_instance_id add_polled_metric(const plugin_id & plugin,
    +
    773 const plugin_instance_id & plugin_instance, const type_id & type,
    +
    774 const scollectd::type_instance & type_instance, description d, _Args&& ... args) {
    +
    775 return add_polled_metric(
    +
    776 type_instance_id(plugin, plugin_instance, type, type_instance), std::move(d),
    +
    777 std::forward<_Args>(args)...);
    +
    778}
    +
    779template<typename ... _Args>
    +
    780static future<> send_explicit_metric(const plugin_id & plugin,
    +
    781 const plugin_instance_id & plugin_instance, const type_id & type,
    +
    782 const scollectd::type_instance & type_instance, _Args&& ... args) {
    +
    783 return send_explicit_metric(
    +
    784 type_instance_id(plugin, plugin_instance, type, type_instance),
    +
    785 std::forward<_Args>(args)...);
    +
    786}
    +
    787template<typename ... _Args>
    +
    788static notify_function create_explicit_metric(const plugin_id & plugin,
    +
    789 const plugin_instance_id & plugin_instance, const type_id & type,
    +
    790 const scollectd::type_instance & type_instance, _Args&& ... args) {
    +
    791 return create_explicit_metric(
    +
    792 type_instance_id(plugin, plugin_instance, type, type_instance),
    +
    793 std::forward<_Args>(args)...);
    +
    794}
    +
    795
    +
    796seastar::metrics::impl::metric_id to_metrics_id(const type_instance_id & id);
    +
    801template<typename Arg>
    +
    802[[deprecated("Use the metrics layer")]] static type_instance_id add_polled_metric(const type_instance_id & id, description d,
    +
    803 Arg&& arg, bool enabled = true) {
    +
    804 seastar::metrics::impl::get_local_impl()->add_registration(to_metrics_id(id), arg.type, seastar::metrics::impl::make_function(arg.value, arg.type), d, enabled);
    +
    805 return id;
    +
    806}
    +
    811template<typename Arg>
    +
    812[[deprecated("Use the metrics layer")]] static type_instance_id add_polled_metric(const type_instance_id & id,
    +
    813 Arg&& arg) {
    +
    814 return std::move(add_polled_metric(id, description(), std::forward<Arg>(arg)));
    +
    815}
    +
    816
    +
    821template<typename Args>
    +
    822[[deprecated("Use the metrics layer")]] static type_instance_id add_disabled_polled_metric(const type_instance_id & id, description d,
    +
    823 Args&& arg) {
    +
    824 return add_polled_metric(id, d, std::forward<Args>(arg), false);
    +
    825}
    +
    826
    +
    827template<typename Args>
    +
    828static type_instance_id add_disabled_polled_metric(const type_instance_id & id,
    +
    829 Args&& args) {
    +
    830 return add_disabled_polled_metric(id, description(), std::forward<Args>(args));
    +
    831}
    +
    832
    +
    833template<typename ... Args>
    +
    834static type_instance_id add_disabled_polled_metric(const type_instance_id & id,
    +
    835 Args&& ... args) {
    +
    836 return add_disabled_polled_metric(id, description(), std::forward<Args>(args)...);
    +
    837}
    +
    838
    +
    839// "Explicit" metric sends. Sends a single value list as a message.
    +
    840// Obviously not super efficient either. But maybe someone needs it sometime.
    +
    841template<typename ... _Args>
    +
    842static future<> send_explicit_metric(const type_instance_id & id,
    +
    843 _Args&& ... args) {
    +
    844 return send_metric(id, make_type_instance(std::forward<_Args>(args)...));
    +
    845}
    +
    846template<typename ... _Args>
    +
    847static notify_function create_explicit_metric(const type_instance_id & id,
    +
    848 _Args&& ... args) {
    +
    849 auto list = make_type_instance(std::forward<_Args>(args)...);
    +
    850 return [id, list=std::move(list)]() {
    +
    851 send_metric(id, list);
    +
    852 };
    +
    853}
    +
    854
    +
    855template<typename... Args>
    +
    856typed_value::typed_value(const type_id& tid, const scollectd::type_instance& ti, description d, Args&&... args)
    +
    857 : _type_id(tid)
    +
    858 , _type_instance(ti)
    +
    859 , _values(::seastar::make_shared<decltype(make_type_instance(std::move(d), std::forward<Args>(args)...))>(make_type_instance(std::move(d), std::forward<Args>(args)...)))
    +
    860{}
    +
    861
    +
    862// Send a message packet (string)
    +
    863future<> send_notification(const type_instance_id & id, const sstring & msg);
    +
    864}
    +
    865
    +
    866}
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Human-readable description of a metric/group.
    Definition: metrics.hh:133
    +
    Definition: metrics_api.hh:105
    +
    Definition: program-options.hh:292
    + + + +
    Definition: scollectd.hh:421
    +
    Definition: scollectd.hh:303
    +
    Definition: scollectd.hh:673
    +
    Definition: scollectd.hh:583
    +
    Definition: scollectd.hh:706
    + +
    future< uint64_t > file_size(std::string_view name) noexcept
    +
    sstring metric_type_def
    Definition: metrics.hh:113
    +
    sstring metric_name_type
    Definition: metrics.hh:114
    +
    sstring instance_id_type
    Definition: metrics.hh:115
    +
    header file for metric API layer (like prometheus or collectd)
    +
    sstring group_name_type
    Definition: metrics_registration.hh:64
    +
    static type_instance_id add_polled_metric(const plugin_id &plugin, const plugin_instance_id &plugin_instance, const type_id &type, const scollectd::type_instance &type_instance, _Args &&... args)
    Definition: scollectd.hh:761
    +
    typed_value_impl< known_type::total_bytes > total_bytes
    Definition: scollectd.hh:527
    +
    static type_instance_id add_disabled_polled_metric(const type_instance_id &id, description d, Args &&arg)
    Definition: scollectd.hh:822
    +
    Definition: scollectd.hh:547
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    STL namespace.
    +
    Definition: scollectd.hh:544
    +
    Definition: scollectd.hh:354
    +
    program_options::value< std::string > collectd_hostname
    Definition: scollectd.hh:369
    +
    program_options::value< unsigned > collectd_poll_period
    Poll period (ms).
    Definition: scollectd.hh:367
    +
    program_options::value< std::string > collectd_address
    Address to send/broadcast metrics to.
    Definition: scollectd.hh:362
    +
    program_options::value< bool > collectd
    Enable collectd daemon.
    Definition: scollectd.hh:358
    +
    Definition: scollectd.hh:393
    +
    Definition: scollectd.hh:506
    +
    Definition: scollectd.hh:443
    +
    typed_value(const type_id &tid, const scollectd::type_instance &ti, description, Args &&... args)
    Definition: scollectd.hh:856
    +
    Definition: scollectd.hh:279
    +
    Definition: scollectd.hh:586
    +
    Definition: unaligned.hh:58
    +
    + + + + diff --git a/master/scollectd__api_8hh_source.html b/master/scollectd__api_8hh_source.html new file mode 100644 index 000000000..e59ca18f0 --- /dev/null +++ b/master/scollectd__api_8hh_source.html @@ -0,0 +1,123 @@ + + + + + + + +Seastar: seastar/core/scollectd_api.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    scollectd_api.hh
    +
    +
    +
    1/*
    +
    2 * Copyright 2015 Cloudius Systems
    +
    3 */
    +
    4
    +
    5#pragma once
    +
    6
    +
    7#ifndef SEASTAR_MODULE
    +
    8#include <seastar/core/scollectd.hh>
    + +
    10#include <seastar/util/modules.hh>
    +
    11#include <vector>
    +
    12#endif
    +
    13
    +
    14namespace seastar {
    +
    15
    +
    16namespace scollectd {
    +
    17
    +
    18SEASTAR_MODULE_EXPORT_BEGIN
    +
    19
    +
    20using collectd_value = seastar::metrics::impl::metric_value;
    +
    21
    +
    22std::vector<collectd_value> get_collectd_value(
    +
    23 const scollectd::type_instance_id& id);
    +
    24
    +
    25std::vector<scollectd::type_instance_id> get_collectd_ids();
    +
    26
    +
    27sstring get_collectd_description_str(const scollectd::type_instance_id&);
    +
    28
    +
    29bool is_enabled(const scollectd::type_instance_id& id);
    + +
    36
    +
    37
    +
    38metrics::impl::value_map get_value_map();
    +
    39
    +
    40SEASTAR_MODULE_EXPORT_END
    +
    41
    +
    42}
    +
    43
    +
    44}
    +
    A helper class that used to return metrics value.
    Definition: metrics.hh:294
    +
    Definition: scollectd.hh:303
    +
    header file for metric API layer (like prometheus or collectd)
    +
    void enable(const scollectd::type_instance_id &id, bool enable)
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/search/all_0.html b/master/search/all_0.html new file mode 100644 index 000000000..bb9e36439 --- /dev/null +++ b/master/search/all_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_0.js b/master/search/all_0.js new file mode 100644 index 000000000..f12964cbc --- /dev/null +++ b/master/search/all_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['_5fcontent_0',['_content',['../structseastar_1_1http_1_1reply.html#ad6d8e2eb607286aa5df5c612d5849696',1,'seastar::http::reply']]], + ['_5fheaders_1',['_headers',['../structseastar_1_1http_1_1reply.html#a6de5c9ba61b189bab9c1ae253dcc915a',1,'seastar::http::reply']]] +]; diff --git a/master/search/all_1.html b/master/search/all_1.html new file mode 100644 index 000000000..8989416f2 --- /dev/null +++ b/master/search/all_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_1.js b/master/search/all_1.js new file mode 100644 index 000000000..df4764f96 --- /dev/null +++ b/master/search/all_1.js @@ -0,0 +1,84 @@ +var searchData= +[ + ['aa_0',['aa',['../structseastar_1_1smp__message__queue_1_1tx__side_1_1aa.html',1,'seastar::smp_message_queue::tx_side']]], + ['abort_1',['abort',['../classseastar_1_1queue.html#a9bc8ce9c5ed836f568f617c3da01b2c3',1,'seastar::queue']]], + ['abort_5faccept_2',['abort_accept',['../classseastar_1_1server__socket.html#ac643a2319808f4f1428cc068b9e9516e',1,'seastar::server_socket']]], + ['abort_5fconnection_3',['abort_connection',['../classseastar_1_1rpc_1_1server.html#a3ce369e0440cf9faeff7821eae640d3f',1,'seastar::rpc::server']]], + ['abort_5fon_5fexpiry_4',['abort_on_expiry',['../classseastar_1_1abort__on__expiry.html#a2b6b7cdc3abc89c338916f408e162ebe',1,'seastar::abort_on_expiry::abort_on_expiry()'],['../classseastar_1_1abort__on__expiry.html',1,'seastar::abort_on_expiry< Clock >']]], + ['abort_5fon_5fseastar_5fbad_5falloc_5',['abort_on_seastar_bad_alloc',['../structseastar_1_1reactor__options.html#a0240fdcb3d444b173abf6d2fdec42478',1,'seastar::reactor_options']]], + ['abort_5frequested_6',['abort_requested',['../classseastar_1_1abort__source.html#ae78fe95f6247f60eaabd73e8b210e5e1',1,'seastar::abort_source']]], + ['abort_5frequested_5fexception_7',['abort_requested_exception',['../classseastar_1_1abort__requested__exception.html',1,'seastar']]], + ['abort_5frequested_5fexception_5fptr_8',['abort_requested_exception_ptr',['../classseastar_1_1abort__source.html#a4601b494bad5a7dab1c8a82c6f17a1d0',1,'seastar::abort_source']]], + ['abort_5fsource_9',['abort_source',['../classseastar_1_1abort__on__expiry.html#a1c619e3a760977b9a72b5334bc4b3e23',1,'seastar::abort_on_expiry::abort_source()'],['../classseastar_1_1abort__source.html',1,'seastar::abort_source']]], + ['abstract_5fcredentials_10',['abstract_credentials',['../classseastar_1_1tls_1_1abstract__credentials.html',1,'seastar::tls']]], + ['accept_11',['accept',['../classseastar_1_1server__socket.html#a2e4e4b180cfee2de69fdd6edb0c7f5c2',1,'seastar::server_socket']]], + ['accept_5fresult_12',['accept_result',['../group__networking-module.html#structseastar_1_1accept__result',1,'seastar']]], + ['accepted_13',['accepted',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba3e4d891a5df3d6d0d7dd9432a1bc6470',1,'seastar::http::reply']]], + ['active_14',['active',['../classseastar_1_1experimental_1_1fsnotifier.html#a115ba326b546e491ce4ef82479ebb1d1',1,'seastar::experimental::fsnotifier']]], + ['add_15',['add',['../structseastar_1_1json_1_1json__base.html#ae000a9d0465335b6ac63bd61305ae309',1,'seastar::json::json_base::add()'],['../classseastar_1_1httpd_1_1routes.html#a11cf9427e24bedbe2962c963b2670480',1,'seastar::httpd::routes::add(operation_type type, const url &url, handler_base *handler)'],['../classseastar_1_1httpd_1_1routes.html#ae1badaa8e4c9b15bf944fd97d60fdf1a',1,'seastar::httpd::routes::add(match_rule *rule, operation_type type=GET)'],['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#af73e9dbd99074e1fe913eed4bfb31d68',1,'seastar::metrics::internal::approximate_exponential_histogram::add()']]], + ['add_5falias_16',['add_alias',['../classseastar_1_1httpd_1_1routes.html#a453f69c0e82a76c0ffb6b165e466fb79',1,'seastar::httpd::routes']]], + ['add_5fcookie_17',['add_cookie',['../classseastar_1_1httpd_1_1routes.html#a7d5a56c2fc0ba047036d2fa92ddf403a',1,'seastar::httpd::routes']]], + ['add_5fdefault_5fhandler_18',['add_default_handler',['../classseastar_1_1httpd_1_1routes.html#adf6c161323620807e9513f2d2fcf0912',1,'seastar::httpd::routes']]], + ['add_5fdefinition_19',['add_definition',['../classseastar_1_1httpd_1_1api__registry__builder20.html#aca6a024c56ab974ba139e8dacce48f93',1,'seastar::httpd::api_registry_builder20']]], + ['add_5fdefinitions_5ffile_20',['add_definitions_file',['../classseastar_1_1httpd_1_1api__registry__builder20.html#a5453020e6979bc5f2512956a1d1e7b7f',1,'seastar::httpd::api_registry_builder20']]], + ['add_5fdisabled_5fpolled_5fmetric_21',['add_disabled_polled_metric',['../namespaceseastar_1_1scollectd.html#af3fa470192ecc65dd38097a3aa225c7b',1,'seastar::scollectd']]], + ['add_5fgroup_22',['add_group',['../classseastar_1_1metrics_1_1metric__groups.html#aa0d3ce80b1f397d386a2af5a636fe7e5',1,'seastar::metrics::metric_groups::add_group(const group_name_type &name, const std::vector< metric_definition > &l)'],['../classseastar_1_1metrics_1_1metric__groups.html#abc5aa0b6eb665392958bcdc12eeea75a',1,'seastar::metrics::metric_groups::add_group(const group_name_type &name, const std::initializer_list< metric_definition > &l)']]], + ['add_5fmatcher_23',['add_matcher',['../classseastar_1_1httpd_1_1match__rule.html#a5f96765bc899a86f41d2c9ba03a1a9a5',1,'seastar::httpd::match_rule']]], + ['add_5fparam_24',['add_param',['../classseastar_1_1httpd_1_1match__rule.html#a5fbde4596b6c3bef2d99de75da027b45',1,'seastar::httpd::match_rule']]], + ['add_5fpolled_5fmetric_25',['add_polled_metric',['../namespaceseastar_1_1scollectd.html#adae7cdb77c9541178ab14457759a8eba',1,'seastar::scollectd::add_polled_metric(const type_instance_id &id, Arg &&arg)'],['../namespaceseastar_1_1scollectd.html#a101d10d23f23b8c92732954fedcd6dc9',1,'seastar::scollectd::add_polled_metric(const plugin_id &plugin, const plugin_instance_id &plugin_instance, const type_id &type, const scollectd::type_instance &type_instance, _Args &&... args)'],['../namespaceseastar_1_1scollectd.html#a538a5869bf8b30e4c487a5ff9bfec849',1,'seastar::scollectd::add_polled_metric(const plugin_id &plugin, const plugin_instance_id &plugin_instance, const type_id &type, const scollectd::type_instance &type_instance, description d, _Args &&... args)'],['../namespaceseastar_1_1scollectd.html#ab435895911a73a7d8a224c9b890dcd36',1,'seastar::scollectd::add_polled_metric(const type_instance_id &id, description d, Arg &&arg, bool enabled=true)']]], + ['add_5fstr_26',['add_str',['../classseastar_1_1httpd_1_1match__rule.html#adf6b2edfc905fbd9c8e533a5da57ce13',1,'seastar::httpd::match_rule']]], + ['adder_27',['adder',['../classseastar_1_1adder.html',1,'seastar']]], + ['adds_20a_20_2fmetrics_20endpoint_20that_20returns_20prometheus_20metrics_28',['adds a /metrics endpoint that returns prometheus metrics',['../group__add__prometheus__routes.html',1,'']]], + ['adopt_29',['adopt',['../classseastar_1_1semaphore__units.html#a166c81271c3e829872b7b0d0c8d52fd4',1,'seastar::semaphore_units']]], + ['aio_5ffsync_30',['aio_fsync',['../structseastar_1_1reactor__options.html#acdb4a91092ff209f6bcd8265cef09196',1,'seastar::reactor_options']]], + ['alien_31',['alien',['../classseastar_1_1reactor.html#af512728b93f1de2b21d8b652bf327933',1,'seastar::reactor']]], + ['alien_2ehh_32',['alien.hh',['../alien_8hh.html',1,'']]], + ['aligned_33',['aligned',['../classseastar_1_1temporary__buffer.html#ae2c1afa0c0f1f8ed4d6708097b121a1e',1,'seastar::temporary_buffer']]], + ['alignment_34',['alignment',['../structseastar_1_1scheduling__group__key__config.html#abfa81715fc07b2d2f6fcd5240023dc73',1,'seastar::scheduling_group_key_config']]], + ['all_35',['all',['../namespaceseastar_1_1memory.html#a2411b00801406f50acb3a8bc78f32400aa181a603769c1f98ad927e7367c7aa51',1,'seastar::memory::all()'],['../classseastar_1_1coroutine_1_1all.html',1,'seastar::coroutine::all< Futures >']]], + ['alloc_5fcount_36',['alloc_count',['../classseastar_1_1memory_1_1alloc__failure__injector.html#a739aa4af029b1285d63f02e9a8b3971e',1,'seastar::memory::alloc_failure_injector']]], + ['alloc_5ffailure_5finjector_37',['alloc_failure_injector',['../classseastar_1_1memory_1_1alloc__failure__injector.html',1,'seastar::memory']]], + ['alloc_5ffailure_5fkind_38',['alloc_failure_kind',['../namespaceseastar_1_1memory.html#a2411b00801406f50acb3a8bc78f32400',1,'seastar::memory']]], + ['allocate_39',['allocate',['../classseastar_1_1file.html#a35330cb91ea09c1c59360efc9318da74',1,'seastar::file']]], + ['allocated_5fmemory_40',['allocated_memory',['../classseastar_1_1memory_1_1statistics.html#ae72435a459692865578fb7952e4434c6',1,'seastar::memory::statistics']]], + ['allocation_5fsite_41',['allocation_site',['../structseastar_1_1memory_1_1allocation__site.html',1,'seastar::memory']]], + ['allocation_5fsize_42',['allocation_size',['../structseastar_1_1scheduling__group__key__config.html#a215dafe5eb9a9df84bf709cb5abab92e',1,'seastar::scheduling_group_key_config']]], + ['allow_5fcpus_5fin_5fremote_5fnuma_5fnodes_43',['allow_cpus_in_remote_numa_nodes',['../structseastar_1_1smp__options.html#ab3b870270819275fb8ffa4427643f7da',1,'seastar::smp_options']]], + ['any_44',['any',['../unionseastar_1_1future__state__base_1_1any.html',1,'seastar::future_state_base']]], + ['api_5fdoc_45',['api_doc',['../structseastar_1_1httpd_1_1api__doc.html',1,'seastar::httpd']]], + ['api_5fdocs_46',['api_docs',['../structseastar_1_1httpd_1_1api__docs.html',1,'seastar::httpd']]], + ['api_5fdocs_5f20_47',['api_docs_20',['../classseastar_1_1httpd_1_1api__docs__20.html',1,'seastar::httpd']]], + ['api_5fregistry_48',['api_registry',['../classseastar_1_1httpd_1_1api__registry.html',1,'seastar::httpd']]], + ['api_5fregistry_5f20_49',['api_registry_20',['../classseastar_1_1httpd_1_1api__registry__20.html',1,'seastar::httpd']]], + ['api_5fregistry_5fbase_50',['api_registry_base',['../classseastar_1_1httpd_1_1api__registry__base.html',1,'seastar::httpd']]], + ['api_5fregistry_5fbuilder_51',['api_registry_builder',['../classseastar_1_1httpd_1_1api__registry__builder.html',1,'seastar::httpd']]], + ['api_5fregistry_5fbuilder20_52',['api_registry_builder20',['../classseastar_1_1httpd_1_1api__registry__builder20.html',1,'seastar::httpd']]], + ['api_5fregistry_5fbuilder_5fbase_53',['api_registry_builder_base',['../classseastar_1_1httpd_1_1api__registry__builder__base.html',1,'seastar::httpd']]], + ['append_54',['append',['../group__memory-module.html#ga2db8c8dce75cb94656a720420c825d5f',1,'seastar::deleter::append()'],['../classseastar_1_1basic__sstring.html#ab1ac5fb610859da75abf3003075401ef',1,'seastar::basic_sstring::append()']]], + ['append_5fis_5funlikely_55',['append_is_unlikely',['../structseastar_1_1file__open__options.html#aa0b14fe6149d094d079fba13aa3145ec',1,'seastar::file_open_options']]], + ['apply_56',['apply',['../structseastar_1_1futurize.html#a1a1afa8bb14782d38bc7f9fbb2c11bfc',1,'seastar::futurize::apply(Func &&func, FuncArgs &&... args) noexcept'],['../structseastar_1_1futurize.html#a5b4d1e19072f5243378e86e7f27b12cd',1,'seastar::futurize::apply(Func &&func, std::tuple< FuncArgs... > &&args) noexcept']]], + ['approximate_5fexponential_5fhistogram_57',['approximate_exponential_histogram',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html',1,'seastar::metrics::internal']]], + ['approximate_5fexponential_5fhistogram_3c_20512_2c_2033554432_2c_204_20_3e_58',['approximate_exponential_histogram< 512, 33554432, 4 >',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html',1,'seastar::metrics::internal']]], + ['arg_59',['arg',['../structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4.html#structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4_1_1arg',1,'seastar::function_traits< Ret(Args...)>']]], + ['argv_60',['argv',['../structseastar_1_1experimental_1_1spawn__parameters.html#a3bc45e6a686c6ade3a03b697daadd00f',1,'seastar::experimental::spawn_parameters']]], + ['arm_61',['arm',['../classseastar_1_1timer.html#a408ec69f0c66ec85916621c2fb252b28',1,'seastar::timer::arm(duration delta) noexcept'],['../classseastar_1_1timer.html#a19ed4afdeb815fed0508728797f3e640',1,'seastar::timer::arm(time_point until, std::optional< duration > period={}) noexcept']]], + ['arm_5fperiodic_62',['arm_periodic',['../classseastar_1_1timer.html#a9210bfb2e250eb6eb68e3bbff035fecc',1,'seastar::timer']]], + ['armed_63',['armed',['../classseastar_1_1timer.html#a299768fac6e57901c7fe7a94ca6a02d0',1,'seastar::timer']]], + ['arp_64',['arp',['../classseastar_1_1net_1_1arp.html',1,'seastar::net']]], + ['arp_5ferror_65',['arp_error',['../classseastar_1_1net_1_1arp__error.html',1,'seastar::net']]], + ['arp_5ffor_66',['arp_for',['../classseastar_1_1net_1_1arp__for.html',1,'seastar::net']]], + ['arp_5ffor_3c_20seastar_3a_3anet_3a_3aipv4_20_3e_67',['arp_for< seastar::net::ipv4 >',['../classseastar_1_1net_1_1arp__for.html',1,'seastar::net']]], + ['arp_5ffor_5fprotocol_68',['arp_for_protocol',['../classseastar_1_1net_1_1arp__for__protocol.html',1,'seastar::net']]], + ['arp_5fqueue_5ffull_5ferror_69',['arp_queue_full_error',['../classseastar_1_1net_1_1arp__queue__full__error.html',1,'seastar::net']]], + ['arp_5ftimeout_5ferror_70',['arp_timeout_error',['../classseastar_1_1net_1_1arp__timeout__error.html',1,'seastar::net']]], + ['array_5fmap_71',['array_map',['../classseastar_1_1array__map.html',1,'seastar']]], + ['array_5fmap_3c_20seastar_3a_3anet_3a_3aip_5fprotocol_20_2a_2c_20256_20_3e_72',['array_map< seastar::net::ip_protocol *, 256 >',['../classseastar_1_1array__map.html',1,'seastar']]], + ['as_5ffuture_73',['as_future',['../classseastar_1_1coroutine_1_1as__future.html',1,'seastar::coroutine']]], + ['as_5ffuture_5fwithout_5fpreemption_5fcheck_74',['as_future_without_preemption_check',['../classseastar_1_1coroutine_1_1as__future__without__preemption__check.html',1,'seastar::coroutine']]], + ['as_5fready_5ffuture_75',['as_ready_future',['../group__future-module.html#ga300f9155bf89f2a5019d043ac0541139',1,'seastar']]], + ['async_76',['async',['../group__thread-module.html#ga32db5877f0b27b7afe8b86e81951e28d',1,'seastar::async(thread_attributes attr, Func &&func, Args &&... args) noexcept'],['../group__thread-module.html#ga662e0549aa51cba06cb33ec3e0104450',1,'seastar::async(Func &&func, Args &&... args) noexcept']]], + ['async_5fsharded_5fservice_77',['async_sharded_service',['../classseastar_1_1async__sharded__service.html',1,'seastar']]], + ['attr_78',['attr',['../classseastar_1_1posix__thread_1_1attr.html',1,'seastar::posix_thread']]], + ['available_79',['available',['../classseastar_1_1shared__future.html#a50ae4afb33b38b2cf7ba97edc5908823',1,'seastar::shared_future::available()'],['../classseastar_1_1shared__promise.html#af294c426866e2e5941b631cd3dcb4725',1,'seastar::shared_promise::available()'],['../classseastar_1_1future.html#a624fbb42c55d649348e47afba3de5ac3',1,'seastar::future::available()']]], + ['available_5funits_80',['available_units',['../classseastar_1_1basic__semaphore.html#a9339868a571ea48671f8964130985a33',1,'seastar::basic_semaphore']]] +]; diff --git a/master/search/all_10.html b/master/search/all_10.html new file mode 100644 index 000000000..a7c1f9c30 --- /dev/null +++ b/master/search/all_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_10.js b/master/search/all_10.js new file mode 100644 index 000000000..a388e9513 --- /dev/null +++ b/master/search/all_10.js @@ -0,0 +1,70 @@ +var searchData= +[ + ['packet_0',['packet',['../classseastar_1_1net_1_1packet.html',1,'seastar::net']]], + ['packet_5fdata_5fsource_1',['packet_data_source',['../classseastar_1_1net_1_1packet__data__source.html',1,'seastar::net']]], + ['packet_5fmerger_2',['packet_merger',['../classseastar_1_1net_1_1packet__merger.html',1,'seastar::net']]], + ['packet_5fmerger_3c_20tcp_5fseq_2c_20tcp_5ftag_20_3e_3',['packet_merger< tcp_seq, tcp_tag >',['../classseastar_1_1net_1_1packet__merger.html',1,'seastar::net']]], + ['packet_5fmerger_3c_20uint32_5ft_2c_20ipv4_5ftag_20_3e_4',['packet_merger< uint32_t, ipv4_tag >',['../classseastar_1_1net_1_1packet__merger.html',1,'seastar::net']]], + ['parallel_5ffor_5feach_5',['parallel_for_each',['../group__future-util.html#gac44a19efd432701bcbd2437cb804e1c9',1,'seastar::parallel_for_each()'],['../classseastar_1_1coroutine_1_1parallel__for__each.html',1,'seastar::coroutine::parallel_for_each< Func >']]], + ['param_5fmatcher_6',['param_matcher',['../classseastar_1_1httpd_1_1param__matcher.html#a6c71a816dafa3ca1fc5c40762347fb10',1,'seastar::httpd::param_matcher::param_matcher()'],['../classseastar_1_1httpd_1_1param__matcher.html',1,'seastar::httpd::param_matcher']]], + ['parameters_7',['parameters',['../classseastar_1_1httpd_1_1parameters.html',1,'seastar::httpd']]], + ['parse_5flog_5flevel_8',['parse_log_level',['../namespaceseastar_1_1log__cli.html#a5488b3f8dd15a43a9f3fe996c88745a6',1,'seastar::log_cli']]], + ['parse_5fquery_5fparam_9',['parse_query_param',['../structseastar_1_1http_1_1request.html#a237a0d057bf94dbf3279c8714a1f0c0c',1,'seastar::http::request']]], + ['path_5fdescription_10',['path_description',['../structseastar_1_1httpd_1_1path__description.html#aee9d21102547d3fd1a4133798f5fa44b',1,'seastar::httpd::path_description::path_description()=default'],['../structseastar_1_1httpd_1_1path__description.html#abc7ee73e3c7a101acb963ec1ce5e2419',1,'seastar::httpd::path_description::path_description(const sstring &path, operation_type method, const sstring &nickname, const std::vector< std::pair< sstring, bool > > &path_parameters, const std::vector< sstring > &mandatory_params)'],['../structseastar_1_1httpd_1_1path__description.html#a062d628394c1146a3f0b62f7537cd999',1,'seastar::httpd::path_description::path_description(const sstring &path, operation_type method, const sstring &nickname, const std::initializer_list< path_part > &path_parameters, const std::vector< sstring > &mandatory_params)'],['../structseastar_1_1httpd_1_1path__description.html',1,'seastar::httpd::path_description']]], + ['path_5fpart_11',['path_part',['../structseastar_1_1httpd_1_1path__description.html#structseastar_1_1httpd_1_1path__description_1_1path__part',1,'seastar::httpd::path_description']]], + ['pause_5fsampling_12',['pause_sampling',['../classsampler.html#af295f34f184e8966732765beb061f468',1,'sampler']]], + ['payload_5ftoo_5flarge_13',['payload_too_large',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba7488f008e41cae5d833edb135b1c9cbc',1,'seastar::http::reply']]], + ['payment_5frequired_14',['payment_required',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abae12f3c601bfd82e63264efe70f8b0c1f',1,'seastar::http::reply']]], + ['peering_5fsharded_5fservice_15',['peering_sharded_service',['../classseastar_1_1peering__sharded__service.html',1,'seastar']]], + ['per_5fscheduling_5fgroup_5fstats_16',['per_scheduling_group_stats',['../classseastar_1_1inheriting__execution__stage.html#structseastar_1_1inheriting__execution__stage_1_1per__scheduling__group__stats',1,'seastar::inheriting_execution_stage']]], + ['percpu_5fplugin_5finstance_5fmetrics_17',['percpu_plugin_instance_metrics',['../classseastar_1_1scollectd_1_1percpu__plugin__instance__metrics.html',1,'seastar::scollectd']]], + ['perf_5fstats_18',['perf_stats',['../classperf__tests_1_1internal_1_1perf__stats.html',1,'perf_tests::internal']]], + ['performance_5ftest_19',['performance_test',['../classperf__tests_1_1internal_1_1performance__test.html',1,'perf_tests::internal']]], + ['pipe_20',['pipe',['../classseastar_1_1pipe.html',1,'seastar']]], + ['pipe_5freader_21',['pipe_reader',['../classseastar_1_1pipe__reader.html',1,'seastar']]], + ['pipe_5fwriter_22',['pipe_writer',['../classseastar_1_1pipe__writer.html',1,'seastar']]], + ['plugin_5finstance_5fmetrics_23',['plugin_instance_metrics',['../classseastar_1_1scollectd_1_1plugin__instance__metrics.html',1,'seastar::scollectd']]], + ['pointer_24',['pointer',['../classseastar_1_1checked__ptr.html#a23542fe756685e153be8350460b21b58',1,'seastar::checked_ptr']]], + ['poll_25',['poll',['../classseastar_1_1execution__stage.html#ad5c524e82030b20968b916ad9875d15d',1,'seastar::execution_stage']]], + ['poll_5faio_26',['poll_aio',['../structseastar_1_1reactor__options.html#aaeec4ac1f44aa8c845a6ca611b767511',1,'seastar::reactor_options']]], + ['poll_5fmode_27',['poll_mode',['../structseastar_1_1reactor__options.html#a5b15e502813f51267e2b81555889e5b6',1,'seastar::reactor_options']]], + ['pollable_5ffd_28',['pollable_fd',['../classseastar_1_1pollable__fd.html',1,'seastar']]], + ['pollable_5ffd_5fstate_29',['pollable_fd_state',['../classseastar_1_1pollable__fd__state.html',1,'seastar']]], + ['pollfn_30',['pollfn',['../structseastar_1_1pollfn.html',1,'seastar']]], + ['pop_31',['pop',['../classseastar_1_1queue.html#a20c7194a0f2f12441d81c4bbf0cc9ed9',1,'seastar::queue']]], + ['pop_5feventually_32',['pop_eventually',['../classseastar_1_1queue.html#a59e7257f4088f44394b7795c8fc4b9d0',1,'seastar::queue']]], + ['pop_5ffront_33',['pop_front',['../classseastar_1_1expiring__fifo.html#a3cad027f072f55ca0e05e3c197daacd4',1,'seastar::expiring_fifo']]], + ['posix_20support_34',['POSIX Support',['../group__posix-support.html',1,'']]], + ['posix_2ehh_35',['posix.hh',['../posix_8hh.html',1,'']]], + ['posix_5fap_5fnetwork_5fstack_36',['posix_ap_network_stack',['../classseastar_1_1net_1_1posix__ap__network__stack.html',1,'seastar::net']]], + ['posix_5fap_5fserver_5fsocket_5fimpl_37',['posix_ap_server_socket_impl',['../classseastar_1_1net_1_1posix__ap__server__socket__impl.html',1,'seastar::net']]], + ['posix_5fdata_5fsink_5fimpl_38',['posix_data_sink_impl',['../classseastar_1_1net_1_1posix__data__sink__impl.html',1,'seastar::net']]], + ['posix_5fdata_5fsource_5fimpl_39',['posix_data_source_impl',['../classseastar_1_1net_1_1posix__data__source__impl.html',1,'seastar::net']]], + ['posix_5fnetwork_5fstack_40',['posix_network_stack',['../classseastar_1_1net_1_1posix__network__stack.html',1,'seastar::net']]], + ['posix_5freuseport_5fserver_5fsocket_5fimpl_41',['posix_reuseport_server_socket_impl',['../classseastar_1_1net_1_1posix__reuseport__server__socket__impl.html',1,'seastar::net']]], + ['posix_5fserver_5fsocket_5fimpl_42',['posix_server_socket_impl',['../classseastar_1_1net_1_1posix__server__socket__impl.html',1,'seastar::net']]], + ['posix_5fthread_43',['posix_thread',['../classseastar_1_1posix__thread.html',1,'seastar']]], + ['preallocation_5fsize_44',['preallocation_size',['../namespaceseastar.html#a80a192a858b33d2ba51cf504fa215757',1,'seastar::file_output_stream_options']]], + ['prefetcher_45',['prefetcher',['../structseastar_1_1prefetcher.html',1,'seastar']]], + ['prefetcher_3c_200_2c_20rw_2c_20loc_20_3e_46',['prefetcher< 0, RW, LOC >',['../structseastar_1_1prefetcher_3_010_00_01RW_00_01LOC_01_4.html',1,'seastar']]], + ['prefix_47',['prefix',['../classseastar_1_1temporary__buffer.html#afe97805b39a1e33123ce178e88178a7d',1,'seastar::temporary_buffer::prefix()'],['../structseastar_1_1prometheus_1_1config.html#aafb94a6686012cd299dadf0717378d2f',1,'seastar::prometheus::config::prefix()']]], + ['print_5favailable_5floggers_48',['print_available_loggers',['../namespaceseastar_1_1log__cli.html#aa2b717df8d7c51b0fc5cfe34d4637d6e',1,'seastar::log_cli']]], + ['print_5fslab_5fclasses_49',['print_slab_classes',['../classseastar_1_1slab__allocator.html#ae0df7f3d59ac387d57bc1b8d49c2a29a',1,'seastar::slab_allocator']]], + ['process_50',['process',['../group__websocket.html#ga15caecfb94aaf3bd34231a4bae9b801d',1,'seastar::experimental::websocket::connection::process()'],['../classseastar_1_1experimental_1_1process.html',1,'seastar::experimental::process']]], + ['program_20options_51',['Program Options',['../group__program-options.html',1,'']]], + ['promise_52',['promise',['../classseastar_1_1promise.html#ae0346287b4a3497fe8e0143dc3867d4b',1,'seastar::promise::promise()'],['../classseastar_1_1promise.html',1,'seastar::promise< T >']]], + ['promise_3c_20seastar_3a_3anet_3a_3aethernet_5faddress_20_3e_53',['promise< seastar::net::ethernet_address >',['../classseastar_1_1promise.html',1,'seastar']]], + ['promise_3c_20t_2e_2e_2e_20_3e_54',['promise< T... >',['../classseastar_1_1promise.html',1,'seastar']]], + ['promise_3c_3e_55',['promise<>',['../classseastar_1_1promise.html',1,'seastar']]], + ['promise_5fexpiry_56',['promise_expiry',['../structseastar_1_1promise__expiry.html',1,'seastar']]], + ['promise_5ftype_57',['promise_type',['../classseastar_1_1future.html#afcc1887a65ad82910d792219c9531ea6',1,'seastar::future']]], + ['protocol_58',['protocol',['../classseastar_1_1rpc_1_1protocol.html',1,'seastar::rpc']]], + ['protocol_5fbase_59',['protocol_base',['../classseastar_1_1rpc_1_1protocol__base.html',1,'seastar::rpc']]], + ['push_60',['push',['../classseastar_1_1json_1_1json__list.html#a65828b5f656eea124a829c41914b9013',1,'seastar::json::json_list::push()'],['../classseastar_1_1queue.html#a0d0ab729ca1b2c32dbc57047da2c2d86',1,'seastar::queue::push()']]], + ['push_5fback_61',['push_back',['../classseastar_1_1expiring__fifo.html#aefaa970ea650c1d0caa404aa55426016',1,'seastar::expiring_fifo::push_back(T &&payload, time_point timeout)'],['../classseastar_1_1expiring__fifo.html#ad3e6f64b8c9f04ecc30541e2e99509cb',1,'seastar::expiring_fifo::push_back(T &&payload)'],['../classseastar_1_1expiring__fifo.html#a4eddab6f2d061928b2d37b3fa662baa2',1,'seastar::expiring_fifo::push_back(const T &payload)']]], + ['push_5feventually_62',['push_eventually',['../classseastar_1_1queue.html#af57e4cc21e7998ea2a7068da4e241bd1',1,'seastar::queue']]], + ['push_5fstatic_5fpath_5fpart_63',['push_static_path_part',['../structseastar_1_1httpd_1_1path__description.html#a3b719697eeb0ed92ea0e6ed10317df31',1,'seastar::httpd::path_description']]], + ['pushmandatory_5fparam_64',['pushmandatory_param',['../structseastar_1_1httpd_1_1path__description.html#aea7655728e2212b3eb4fb47f8682e4c1',1,'seastar::httpd::path_description']]], + ['pushparam_65',['pushparam',['../structseastar_1_1httpd_1_1path__description.html#af34af61d1e8c4bcc6d63171e0f842381',1,'seastar::httpd::path_description']]], + ['put_66',['put',['../classseastar_1_1httpd_1_1routes.html#ac49ef7373855766335ce8e943daddf11',1,'seastar::httpd::routes']]] +]; diff --git a/master/search/all_11.html b/master/search/all_11.html new file mode 100644 index 000000000..8f86146b8 --- /dev/null +++ b/master/search/all_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_11.js b/master/search/all_11.js new file mode 100644 index 000000000..3bac6ada8 --- /dev/null +++ b/master/search/all_11.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['qp_0',['qp',['../classseastar_1_1net_1_1qp.html',1,'seastar::net']]], + ['qp_5fstats_1',['qp_stats',['../structseastar_1_1net_1_1qp__stats.html',1,'seastar::net']]], + ['qp_5fstats_2erx_2',['qp_stats.rx',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1qp__stats_8rx',1,'seastar::net']]], + ['qp_5fstats_2erx_2ebad_3',['qp_stats.rx.bad',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1qp__stats_8rx_8bad',1,'seastar::net']]], + ['qp_5fstats_2etx_4',['qp_stats.tx',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1qp__stats_8tx',1,'seastar::net']]], + ['qp_5fstats_5fgood_5',['qp_stats_good',['../structseastar_1_1net_1_1qp__stats__good.html',1,'seastar::net']]], + ['qs_5fdeleter_6',['qs_deleter',['../structseastar_1_1alien_1_1internal_1_1qs__deleter.html',1,'seastar::alien::internal']]], + ['quantile_7',['quantile',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#aab7b7955bac2b219af02a5926bef5d88',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['queue_8',['queue',['../classseastar_1_1fair__queue.html#a24d1d893b04669d6f26e39f9c9912ca6',1,'seastar::fair_queue::queue()'],['../classseastar_1_1queue.html',1,'seastar::queue< T >']]], + ['queue_3c_20seastar_3a_3anet_3a_3adatagram_20_3e_9',['queue< seastar::net::datagram >',['../classseastar_1_1queue.html',1,'seastar']]], + ['queue_3c_20seastar_3a_3anet_3a_3atcp_3a_3aconnection_20_3e_10',['queue< seastar::net::tcp::connection >',['../classseastar_1_1queue.html',1,'seastar']]], + ['queue_3c_20seastar_3a_3arpc_3a_3arcv_5fbuf_20_3e_11',['queue< seastar::rpc::rcv_buf >',['../classseastar_1_1queue.html',1,'seastar']]], + ['queue_3c_20seastar_3a_3atemporary_5fbuffer_3c_20char_20_3e_20_3e_12',['queue< seastar::temporary_buffer< char > >',['../classseastar_1_1queue.html',1,'seastar']]], + ['queue_3c_20std_3a_3aunique_5fptr_3c_20seastar_3a_3ahttp_3a_3areply_20_3e_20_3e_13',['queue< std::unique_ptr< seastar::http::reply > >',['../classseastar_1_1queue.html',1,'seastar']]], + ['queue_3c_20temporary_5fbuffer_3c_20char_20_3e_20_3e_14',['queue< temporary_buffer< char > >',['../classseastar_1_1queue.html',1,'seastar']]] +]; diff --git a/master/search/all_12.html b/master/search/all_12.html new file mode 100644 index 000000000..90b128ff7 --- /dev/null +++ b/master/search/all_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_12.js b/master/search/all_12.js new file mode 100644 index 000000000..59f0b8d43 --- /dev/null +++ b/master/search/all_12.js @@ -0,0 +1,99 @@ +var searchData= +[ + ['ragel_5fparser_5fbase_0',['ragel_parser_base',['../classseastar_1_1ragel__parser__base.html',1,'seastar']]], + ['rcv_5fbuf_1',['rcv_buf',['../structseastar_1_1rpc_1_1rcv__buf.html',1,'seastar::rpc']]], + ['rcv_5freply_2',['rcv_reply',['../structseastar_1_1rpc_1_1rcv__reply.html',1,'seastar::rpc']]], + ['rcv_5freply_3c_20serializer_2c_20future_3c_20t_2e_2e_2e_20_3e_20_3e_3',['rcv_reply< Serializer, future< T... > >',['../structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc']]], + ['rcv_5freply_3c_20serializer_2c_20future_3c_3e_20_3e_4',['rcv_reply< Serializer, future<> >',['../structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_4_01_4.html',1,'seastar::rpc']]], + ['rcv_5freply_3c_20serializer_2c_20void_20_3e_5',['rcv_reply< Serializer, void >',['../structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01void_01_4.html',1,'seastar::rpc']]], + ['rcv_5freply_5fbase_6',['rcv_reply_base',['../structseastar_1_1rpc_1_1rcv__reply__base.html',1,'seastar::rpc']]], + ['rcv_5freply_5fbase_3c_20std_3a_3atuple_3c_20t_2e_2e_2e_20_3e_2c_20t_2e_2e_2e_20_3e_7',['rcv_reply_base< std::tuple< T... >, T... >',['../structseastar_1_1rpc_1_1rcv__reply__base.html',1,'seastar::rpc']]], + ['rcv_5freply_5fbase_3c_20t_2c_20t_20_3e_8',['rcv_reply_base< T, T >',['../structseastar_1_1rpc_1_1rcv__reply__base.html',1,'seastar::rpc']]], + ['rcv_5freply_5fbase_3c_20void_2c_20void_20_3e_9',['rcv_reply_base< void, void >',['../structseastar_1_1rpc_1_1rcv__reply__base.html',1,'seastar::rpc']]], + ['reactor_10',['reactor',['../classseastar_1_1reactor.html',1,'seastar']]], + ['reactor_5fbackend_11',['reactor_backend',['../structseastar_1_1reactor__options.html#a93744ff0322b48ebff19493aee188267',1,'seastar::reactor_options']]], + ['reactor_5foptions_12',['reactor_options',['../structseastar_1_1reactor__options.html',1,'seastar']]], + ['read_13',['read',['../classseastar_1_1input__stream.html#a371fc294040cc66628416d9e46444f31',1,'seastar::input_stream::read()'],['../classseastar_1_1pipe__reader.html#ae3e19a4e6c99820c91372e15d846632c',1,'seastar::pipe_reader::read()'],['../classseastar_1_1httpd_1_1file__interaction__handler.html#ade8d4f448b9d88e0b70d08b0455894c3',1,'seastar::httpd::file_interaction_handler::read()']]], + ['read_5fahead_14',['read_ahead',['../namespaceseastar.html#ab0750dc210b394ba2269fba68eb4d830',1,'seastar::file_input_stream_options']]], + ['read_5fentire_5ffile_15',['read_entire_file',['../group__fileio-util.html#ga4e52b6e2f9d4410ca73d4cf1d14668ee',1,'seastar::util']]], + ['read_5fentire_5ffile_5fcontiguous_16',['read_entire_file_contiguous',['../group__fileio-util.html#ga68f47ea55e799ec3a3e5dd4fe91a1acf',1,'seastar::util']]], + ['read_5fexactly_17',['read_exactly',['../classseastar_1_1input__stream.html#a361edf18947c9a720f2e233043831b79',1,'seastar::input_stream']]], + ['read_5flock_18',['read_lock',['../classseastar_1_1basic__rwlock.html#a0231bd4641b247f5cb8d1b9f1641bc6f',1,'seastar::basic_rwlock']]], + ['read_5funlock_19',['read_unlock',['../classseastar_1_1basic__rwlock.html#a0b280f46f5ab0104c4017512c46b2f0d',1,'seastar::basic_rwlock']]], + ['read_5fup_5fto_20',['read_up_to',['../classseastar_1_1input__stream.html#a1139bacd62924e2e06e2b9903a2e2716',1,'seastar::input_stream']]], + ['readable_5feventfd_21',['readable_eventfd',['../classseastar_1_1readable__eventfd.html',1,'seastar']]], + ['ready_5ffuture_5fmarker_22',['ready_future_marker',['../group__future-module.html#structseastar_1_1ready__future__marker',1,'seastar']]], + ['real_5fcounter_5ftype_5ftraits_23',['real_counter_type_traits',['../structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits.html',1,'seastar::metrics::impl']]], + ['real_5fcounter_5ftype_5ftraits_3c_20true_2c_20t_20_3e_24',['real_counter_type_traits< true, T >',['../structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits_3_01true_00_01T_01_4.html',1,'seastar::metrics::impl']]], + ['rearm_25',['rearm',['../classseastar_1_1timer.html#a5ec87e28e78cd4e87bc068d9e481ec88',1,'seastar::timer']]], + ['rearm_5fperiodic_26',['rearm_periodic',['../classseastar_1_1timer.html#a6f37f4b913c46249b6c03156c4b830e4',1,'seastar::timer']]], + ['reclaims_27',['reclaims',['../classseastar_1_1memory_1_1statistics.html#a88dd764d686471285b5a9cfbb8d7b8c1',1,'seastar::memory::statistics']]], + ['recursive_5fremove_5fdirectory_28',['recursive_remove_directory',['../namespaceseastar.html#a704dc0d8e8effec6908449088daa6bba',1,'seastar']]], + ['recursive_5ftouch_5fdirectory_29',['recursive_touch_directory',['../group__fileio-module.html#ga5d33ffe4cbabb3b8f052232727eca06e',1,'seastar']]], + ['redirect_5fexception_30',['redirect_exception',['../classseastar_1_1httpd_1_1redirect__exception.html',1,'seastar::httpd']]], + ['redirect_5fif_5fneeded_31',['redirect_if_needed',['../classseastar_1_1httpd_1_1file__interaction__handler.html#af45e35e6ae80c88d09c0244ca60eb643',1,'seastar::httpd::file_interaction_handler']]], + ['reduce_5fscheduling_5fgroup_5fspecific_32',['reduce_scheduling_group_specific',['../classseastar_1_1scheduling__group.html#abe919740ffe514502b2b5ecc15dfa24f',1,'seastar::scheduling_group::reduce_scheduling_group_specific()'],['../namespaceseastar.html#ad3a207d29b6fd25b23ff1cfb19302a8e',1,'seastar::reduce_scheduling_group_specific(Reducer reducer, Initial initial_val, scheduling_group_key key)']]], + ['ref_33',['ref',['../group__utilities.html#ga5ba6881725ff32611b1842ca528ecc8c',1,'seastar']]], + ['reference_5fwrapper_34',['reference_wrapper',['../classseastar_1_1reference__wrapper.html',1,'seastar']]], + ['register_5fapi_5ffile_35',['register_api_file',['../classseastar_1_1httpd_1_1api__registry__builder20.html#aa1d8d2f97c87582b5394f196fa31c114',1,'seastar::httpd::api_registry_builder20']]], + ['register_5fexeption_5fhandler_36',['register_exeption_handler',['../classseastar_1_1httpd_1_1routes.html#a61189635c9c88daf8fe0d8ace48742b5',1,'seastar::httpd::routes']]], + ['register_5ffunction_37',['register_function',['../classseastar_1_1httpd_1_1api__registry__builder20.html#aac2e58f35fd558128e7ee0cd410d02c2',1,'seastar::httpd::api_registry_builder20']]], + ['register_5fhandler_38',['register_handler',['../classseastar_1_1rpc_1_1protocol.html#a77fbb6597b5ad698be3f2e42f5499c69',1,'seastar::rpc::protocol::register_handler(MsgType t, scheduling_group sg, Func &&func)'],['../classseastar_1_1rpc_1_1protocol.html#ae72396a036b321136ffb0b9d85a3ccff',1,'seastar::rpc::protocol::register_handler(MsgType t, Func &&func)']]], + ['register_5fpriority_5fclass_39',['register_priority_class',['../classseastar_1_1fair__queue.html#af18b593fe46639d9c7a919a9cc9b5745',1,'seastar::fair_queue']]], + ['registered_5fmetric_40',['registered_metric',['../classseastar_1_1metrics_1_1impl_1_1registered__metric.html',1,'seastar::metrics::impl']]], + ['registration_41',['registration',['../classseastar_1_1net_1_1ipv4__udp_1_1registration.html',1,'seastar::net::ipv4_udp::registration'],['../structseastar_1_1scollectd_1_1registration.html',1,'seastar::scollectd::registration']]], + ['registrations_42',['registrations',['../classseastar_1_1scollectd_1_1registrations.html',1,'seastar::scollectd']]], + ['relabel_5fconfig_43',['relabel_config',['../structseastar_1_1metrics_1_1relabel__config.html',1,'seastar::metrics']]], + ['relabel_5fconfig_5faction_44',['relabel_config_action',['../namespaceseastar_1_1metrics.html#a207d7e13e8aa34dd2f540299002608ae',1,'seastar::metrics']]], + ['relabel_5fconfig_5fregex_45',['relabel_config_regex',['../classseastar_1_1metrics_1_1relabel__config__regex.html',1,'seastar::metrics']]], + ['relaxed_5fdma_46',['relaxed_dma',['../structseastar_1_1reactor__options.html#a51b0696ff8a2622c1cca14d32a84c735',1,'seastar::reactor_options']]], + ['release_47',['release',['../classseastar_1_1temporary__buffer.html#a59ad6be5ce00ec88172f2e4b3534de87',1,'seastar::temporary_buffer::release()'],['../classseastar_1_1gate_1_1holder.html#aa5cc8a408b7f6ce1265cb53ad0b2c4b3',1,'seastar::gate::holder::release()'],['../classseastar_1_1experimental_1_1fsnotifier_1_1watch.html#aea7859d327237715cddb40ec3b302e9d',1,'seastar::experimental::fsnotifier::watch::release()'],['../classseastar_1_1semaphore__units.html#aa3bbcffb85b60ae5f334dc575e947326',1,'seastar::semaphore_units::release()'],['../classseastar_1_1foreign__ptr.html#ae2dc1ac67c3fb2d90da8162be31be14c',1,'seastar::foreign_ptr::release()']]], + ['reloadable_5fcredentials_48',['reloadable_credentials',['../namespaceseastar_1_1tls.html#classseastar_1_1tls_1_1reloadable__credentials',1,'seastar::tls']]], + ['remainder_49',['remainder',['../classseastar_1_1httpd_1_1url.html#adc825269ef94e9c43d5ffc2463229bbd',1,'seastar::httpd::url']]], + ['remote_5faddress_50',['remote_address',['../group__networking-module.html#aef0dd23d32e4e6d6bc7b275f2afbe03b',1,'seastar::accept_result::remote_address()'],['../classseastar_1_1connected__socket.html#accff9ff789349ba3a89ba4a0d723290b',1,'seastar::connected_socket::remote_address()']]], + ['remote_5fverb_5ferror_51',['remote_verb_error',['../classseastar_1_1rpc_1_1remote__verb__error.html',1,'seastar::rpc']]], + ['remove_52',['remove',['../classseastar_1_1timer__set.html#ab847d078ee65b32b3336719ef797d992',1,'seastar::timer_set::remove(Timer &timer, timer_list_t &expired) noexcept'],['../classseastar_1_1timer__set.html#ae636fa4ffb373ccea23566646caeeadd',1,'seastar::timer_set::remove(Timer &timer) noexcept']]], + ['remove_5ffile_53',['remove_file',['../group__fileio-module.html#ga25fb3c06a93fa9d18db5a1422c019df2',1,'seastar']]], + ['remove_5foptional_54',['remove_optional',['../structseastar_1_1rpc_1_1remove__optional.html',1,'seastar::rpc']]], + ['remove_5foptional_3c_20optional_3c_20t_20_3e_20_3e_55',['remove_optional< optional< T > >',['../structseastar_1_1rpc_1_1remove__optional_3_01optional_3_01T_01_4_01_4.html',1,'seastar::rpc']]], + ['rename_56',['rename',['../structseastar_1_1scheduling__group__key__config.html#a45d483ccd7ff6bda9acb67cade313937',1,'seastar::scheduling_group_key_config']]], + ['rename_5ffile_57',['rename_file',['../group__fileio-module.html#ga2da34ea24c98d9938351561fd988a669',1,'seastar']]], + ['rename_5fscheduling_5fgroup_58',['rename_scheduling_group',['../classseastar_1_1scheduling__group.html#a21785d261dca1e7fa244b83ca91d0920',1,'seastar::scheduling_group::rename_scheduling_group()'],['../namespaceseastar.html#a8916a5f76765498f1b33eb1ce6e5fa10',1,'seastar::rename_scheduling_group(scheduling_group sg, sstring new_name, sstring new_shortname) noexcept'],['../namespaceseastar.html#aab1838637d702e4e708cc343532fe836',1,'seastar::rename_scheduling_group(scheduling_group sg, sstring new_name) noexcept']]], + ['repeat_59',['repeat',['../group__future-util.html#gae71e13ee397debf581ac03d84c31ff25',1,'seastar']]], + ['repeat_5funtil_5fvalue_60',['repeat_until_value',['../group__future-util.html#ga7b069e34610c82cf940f271f82d92e82',1,'seastar']]], + ['replace_61',['replace',['../classseastar_1_1basic__sstring.html#a0fe941c4aa05a125c2c4afd24d87333c',1,'seastar::basic_sstring']]], + ['reply_62',['reply',['../structseastar_1_1http_1_1reply.html',1,'seastar::http']]], + ['reply_5fhandler_63',['reply_handler',['../structseastar_1_1rpc_1_1client_1_1reply__handler.html',1,'seastar::rpc::client']]], + ['request_64',['request',['../structseastar_1_1http_1_1request.html',1,'seastar::http']]], + ['request_5fabort_65',['request_abort',['../classseastar_1_1abort__source.html#ad987ae30de1c54a70c621b861b67b31e',1,'seastar::abort_source']]], + ['request_5fabort_5fex_66',['request_abort_ex',['../classseastar_1_1abort__source.html#a9aab0e3bad14b82e26cc669c25699ad5',1,'seastar::abort_source::request_abort_ex(std::exception_ptr ex) noexcept'],['../classseastar_1_1abort__source.html#aa83ccd8383e4426d312b84f9b9be1a27',1,'seastar::abort_source::request_abort_ex(Exception &&e) noexcept']]], + ['request_5flimits_67',['request_limits',['../classseastar_1_1io__queue.html#structseastar_1_1io__queue_1_1request__limits',1,'seastar::io_queue']]], + ['request_5ftimeout_68',['request_timeout',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abad3e570068c1caf02414be8c33ed0870f',1,'seastar::http::reply']]], + ['reserve_69',['reserve',['../classseastar_1_1expiring__fifo.html#a9ff09d80948427c13534604e162be2e2',1,'seastar::expiring_fifo']]], + ['reserve_5fmemory_70',['reserve_memory',['../structseastar_1_1smp__options.html#a1926ac9002b4d88681e8608a623cb47a',1,'seastar::smp_options']]], + ['reset_71',['reset',['../classseastar_1_1foreign__ptr.html#ac62a7aff5c3d7dba6be7be920c24a885',1,'seastar::foreign_ptr::reset(std::nullptr_t=nullptr) noexcept(std::is_nothrow_default_constructible_v< PtrType >)'],['../classseastar_1_1foreign__ptr.html#a9123e61c09215b924744cd84c57a2aca',1,'seastar::foreign_ptr::reset(PtrType new_ptr) noexcept(std::is_nothrow_move_constructible_v< PtrType >)']]], + ['reset_5fcontent_72',['reset_content',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba0584f56c55619f196a5db485f2681890',1,'seastar::http::reply']]], + ['resize_73',['resize',['../classseastar_1_1basic__sstring.html#a6b4c866b359f25de61c43e762013e9b6',1,'seastar::basic_sstring']]], + ['resize_5fand_5foverwrite_74',['resize_and_overwrite',['../classseastar_1_1basic__sstring.html#aef3a8396d7620c0079b61da0bbaf6eef',1,'seastar::basic_sstring']]], + ['resolve_5faddr_75',['resolve_addr',['../classseastar_1_1net_1_1dns__resolver.html#afe314b8bdb1a2f4e568b13ae7567fe5c',1,'seastar::net::dns_resolver']]], + ['resolve_5fname_76',['resolve_name',['../classseastar_1_1net_1_1dns__resolver.html#a1a4e14e0759c8467574b231a31781106',1,'seastar::net::dns_resolver']]], + ['resource_5flimits_77',['resource_limits',['../group__rpc.html#structseastar_1_1rpc_1_1resource__limits',1,'seastar::rpc']]], + ['resources_78',['resources',['../structseastar_1_1resource_1_1resources.html',1,'seastar::resource']]], + ['resources_5fcurrently_5fexecuting_79',['resources_currently_executing',['../classseastar_1_1fair__queue.html#a3768c8809a709eaa1b4108fbac24814b',1,'seastar::fair_queue']]], + ['resources_5fcurrently_5fwaiting_80',['resources_currently_waiting',['../classseastar_1_1fair__queue.html#ad338dbf0fd3b7af29397564074db1b23',1,'seastar::fair_queue']]], + ['return_5fall_81',['return_all',['../classseastar_1_1semaphore__units.html#ad40a583a8910de68debe642cd557a659',1,'seastar::semaphore_units']]], + ['return_5ftype_5fof_82',['return_type_of',['../structseastar_1_1alien_1_1internal_1_1return__type__of.html',1,'seastar::alien::internal']]], + ['return_5ftype_5fof_3c_20func_2c_20false_20_3e_83',['return_type_of< Func, false >',['../structseastar_1_1alien_1_1internal_1_1return__type__of_3_01Func_00_01false_01_4.html',1,'seastar::alien::internal']]], + ['return_5funits_84',['return_units',['../classseastar_1_1semaphore__units.html#aaf78d6a3b9eaca445d019bae870c1ddb',1,'seastar::semaphore_units']]], + ['routes_85',['routes',['../classseastar_1_1httpd_1_1routes.html',1,'seastar::httpd']]], + ['rpc_20_2d_20remote_20procedure_20call_20framework_86',['rpc - remote procedure call framework',['../group__rpc.html',1,'']]], + ['rpc_20protocol_87',['RPC protocol',['../md_rpc.html',1,'']]], + ['rpc_20provided_20compression_20infrastructure_88',['RPC provided compression infrastructure',['../md_rpc_compression.html',1,'']]], + ['rpc_20streaming_89',['RPC streaming',['../md_rpc_streaming.html',1,'']]], + ['rpc_5fhandler_90',['rpc_handler',['../structseastar_1_1rpc_1_1rpc__handler.html',1,'seastar::rpc']]], + ['rpc_5fprotocol_5ferror_91',['rpc_protocol_error',['../classseastar_1_1rpc_1_1rpc__protocol__error.html',1,'seastar::rpc']]], + ['rule_5fregistration_92',['rule_registration',['../classseastar_1_1httpd_1_1rule__registration.html#a697055445f1977f6da0190ff885fe713',1,'seastar::httpd::rule_registration::rule_registration()'],['../classseastar_1_1httpd_1_1rule__registration.html',1,'seastar::httpd::rule_registration']]], + ['run_5fon_93',['run_on',['../namespaceseastar_1_1alien.html#a3d0ce3828e58bb40dda015bec49b03a3',1,'seastar::alien::run_on(instance &instance, unsigned shard, Func func)'],['../namespaceseastar_1_1alien.html#a61bbc0faa7bc3e7cd814ba0a49574b84',1,'seastar::alien::run_on(unsigned shard, Func func)']]], + ['run_5fresult_94',['run_result',['../classperf__tests_1_1internal_1_1performance__test.html#structperf__tests_1_1internal_1_1performance__test_1_1run__result',1,'perf_tests::internal::performance_test']]], + ['run_5fwith_5fcallback_95',['run_with_callback',['../classseastar_1_1memory_1_1alloc__failure__injector.html#aff714364f6e7c6a4dd3f8d12940d7657',1,'seastar::memory::alloc_failure_injector']]] +]; diff --git a/master/search/all_13.html b/master/search/all_13.html new file mode 100644 index 000000000..272d129d7 --- /dev/null +++ b/master/search/all_13.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_13.js b/master/search/all_13.js new file mode 100644 index 000000000..f9e157b8a --- /dev/null +++ b/master/search/all_13.js @@ -0,0 +1,212 @@ +var searchData= +[ + ['alien_0',['alien',['../namespaceseastar_1_1alien.html',1,'seastar']]], + ['log_5fcli_1',['log_cli',['../namespaceseastar_1_1log__cli.html',1,'seastar']]], + ['memory_2',['memory',['../namespaceseastar_1_1memory.html',1,'seastar']]], + ['metrics_3',['metrics',['../namespaceseastar_1_1metrics.html',1,'seastar']]], + ['net_4',['net',['../namespaceseastar_1_1net.html',1,'seastar']]], + ['sack_5',['sack',['../structseastar_1_1net_1_1tcp__option_1_1sack.html',1,'seastar::net::tcp_option']]], + ['sample_5fsize_6',['sample_size',['../classsampler.html#adcf3afb7a9f783e54855325ce35b85aa',1,'sampler']]], + ['sampled_5fmemory_5fprofile_7',['sampled_memory_profile',['../namespaceseastar_1_1memory.html#a6d7859ad53351c912350436b6f6f88b5',1,'seastar::memory::sampled_memory_profile()'],['../namespaceseastar_1_1memory.html#ae12ba1fb3e83a142348912797329e783',1,'seastar::memory::sampled_memory_profile(allocation_site *output, size_t size)']]], + ['sampler_8',['sampler',['../classsampler.html',1,'']]], + ['scattered_5fmessage_9',['scattered_message',['../classseastar_1_1scattered__message.html',1,'seastar']]], + ['sched_5fgroup_10',['sched_group',['../group__rpc.html#a008fd647e3b95731fdcf38466cf38895',1,'seastar::rpc::isolation_config']]], + ['sched_5fstats_11',['sched_stats',['../classseastar_1_1reactor.html#structseastar_1_1reactor_1_1sched__stats',1,'seastar::reactor']]], + ['scheduling_2ehh_12',['scheduling.hh',['../scheduling_8hh.html',1,'']]], + ['scheduling_5fgroup_13',['scheduling_group',['../classseastar_1_1scheduling__group.html#a16b56b2638524c5f85f42f2afcdbec79',1,'seastar::scheduling_group::scheduling_group()'],['../classseastar_1_1scheduling__group.html',1,'seastar::scheduling_group']]], + ['scheduling_5fgroup_5fget_5fspecific_14',['scheduling_group_get_specific',['../namespaceseastar.html#a2c48ac3e469d35ff2d12e78fa3b443d5',1,'seastar::scheduling_group_get_specific()'],['../classseastar_1_1scheduling__group__key.html#ab44416e64e05c9cb959cbee07d6b35ba',1,'seastar::scheduling_group_key::scheduling_group_get_specific()'],['../namespaceseastar.html#a749bed52e130922b08a63352d57f8015',1,'seastar::scheduling_group_get_specific()']]], + ['scheduling_5fgroup_5fkey_15',['scheduling_group_key',['../classseastar_1_1scheduling__group__key.html#af86bcfd29e11cf88ea03be2c5a56e0e5',1,'seastar::scheduling_group_key::scheduling_group_key()'],['../classseastar_1_1scheduling__group__key.html',1,'seastar::scheduling_group_key']]], + ['scheduling_5fgroup_5fkey_5fconfig_16',['scheduling_group_key_config',['../structseastar_1_1scheduling__group__key__config.html#a72ae261d9fb33c1a3f38a370a97eb4a8',1,'seastar::scheduling_group_key_config::scheduling_group_key_config()'],['../structseastar_1_1scheduling__group__key__config.html#acca8583dca746ec90e55b0f1036cf030',1,'seastar::scheduling_group_key_config::scheduling_group_key_config(const std::type_info &type_info)'],['../structseastar_1_1scheduling__group__key__config.html',1,'seastar::scheduling_group_key_config']]], + ['scheduling_5fgroup_5fkey_5fcreate_17',['scheduling_group_key_create',['../classseastar_1_1reactor.html#a9ed208dc74b5ca647d4a8615f86009ce',1,'seastar::reactor::scheduling_group_key_create()'],['../namespaceseastar.html#aff74b815c338707eb74e9edd075a34e0',1,'seastar::scheduling_group_key_create()'],['../classseastar_1_1scheduling__group__key.html#a9ed208dc74b5ca647d4a8615f86009ce',1,'seastar::scheduling_group_key::scheduling_group_key_create()']]], + ['scollectd_18',['scollectd',['../namespaceseastar_1_1scollectd.html',1,'seastar']]], + ['scoped_5fcritical_5falloc_5fsection_19',['scoped_critical_alloc_section',['../namespaceseastar_1_1memory.html#structseastar_1_1memory_1_1scoped__critical__alloc__section',1,'seastar::memory']]], + ['scoped_5fheap_5fprofiling_20',['scoped_heap_profiling',['../classseastar_1_1memory_1_1scoped__heap__profiling.html',1,'seastar::memory']]], + ['scoped_5flarge_5fallocation_5fwarning_5fdisable_21',['scoped_large_allocation_warning_disable',['../classseastar_1_1memory_1_1scoped__large__allocation__warning__disable.html',1,'seastar::memory']]], + ['scoped_5flarge_5fallocation_5fwarning_5fthreshold_22',['scoped_large_allocation_warning_threshold',['../classseastar_1_1memory_1_1scoped__large__allocation__warning__threshold.html',1,'seastar::memory']]], + ['scoped_5fno_5fabort_5fon_5finternal_5ferror_23',['scoped_no_abort_on_internal_error',['../classseastar_1_1testing_1_1scoped__no__abort__on__internal__error.html',1,'seastar::testing']]], + ['sctp_5fkeepalive_5fparams_24',['sctp_keepalive_params',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1sctp__keepalive__params',1,'seastar::net']]], + ['seastar_25',['Seastar',['../index.html',1,'']]], + ['seastar_26',['seastar',['../namespaceseastar.html',1,'seastar'],['../namespaceseastar.html#a201fc834be922b0ebfe82792ac13c340a02a3f482219c97efb281d279650727d0',1,'seastar::seastar()']]], + ['seastar_20threads_27',['Seastar threads',['../group__thread-module.html',1,'']]], + ['seastar_5ftest_28',['seastar_test',['../classseastar_1_1testing_1_1seastar__test.html',1,'seastar::testing']]], + ['see_5fother_29',['see_other',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba5b45014f69eed6fb5420e03fdcde5c4d',1,'seastar::http::reply']]], + ['select_5fcandidate_30',['select_candidate',['../classseastar_1_1program__options_1_1selection__value.html#a959c1d350efccb87171b7c8f2a5689e3',1,'seastar::program_options::selection_value']]], + ['select_5fdefault_5fcandidate_31',['select_default_candidate',['../classseastar_1_1program__options_1_1selection__value.html#a0910a259deaec27452e8dfe6de10e847',1,'seastar::program_options::selection_value']]], + ['selection_5fvalue_32',['selection_value',['../classseastar_1_1program__options_1_1selection__value.html',1,'seastar::program_options::selection_value< T >'],['../classseastar_1_1program__options_1_1selection__value.html#ac2636c9ad2e428e8d540817ed3fd267a',1,'seastar::program_options::selection_value::selection_value(option_group &group, std::string name, candidates candidates, std::string default_candidate, std::string description)'],['../classseastar_1_1program__options_1_1selection__value.html#a46734f76b980422b283893f48b4a57d3',1,'seastar::program_options::selection_value::selection_value(option_group &group, std::string name, unused)']]], + ['selection_5fvalue_3c_20network_5fstack_5ffactory_20_3e_33',['selection_value< network_stack_factory >',['../classseastar_1_1program__options_1_1selection__value.html',1,'seastar::program_options']]], + ['selection_5fvalue_3c_20reactor_5fbackend_5fselector_20_3e_34',['selection_value< reactor_backend_selector >',['../classseastar_1_1program__options_1_1selection__value.html',1,'seastar::program_options']]], + ['semaphore_35',['semaphore',['../group__fiber-module.html#ga0f8a4046e6c0b61cde9391144c6f0029',1,'seastar']]], + ['semaphore_5faborted_36',['semaphore_aborted',['../classseastar_1_1semaphore__aborted.html',1,'seastar']]], + ['semaphore_5fdefault_5fexception_5ffactory_37',['semaphore_default_exception_factory',['../structseastar_1_1semaphore__default__exception__factory.html',1,'seastar']]], + ['semaphore_5ftimed_5fout_38',['semaphore_timed_out',['../classseastar_1_1semaphore__timed__out.html',1,'seastar']]], + ['semaphore_5funits_39',['semaphore_units',['../classseastar_1_1semaphore__units.html',1,'seastar']]], + ['send_5fdata_40',['send_data',['../group__websocket.html#ga5340a721f133d4d459a842a133fdbe39',1,'seastar::experimental::websocket::connection']]], + ['sequence_5fno_41',['sequence_no',['../classseastar_1_1experimental_1_1fsnotifier.html#a26687fd5c861953afc2a639bfa1ef459',1,'seastar::experimental::fsnotifier']]], + ['serialize_5fhelper_42',['serialize_helper',['../structseastar_1_1rpc_1_1serialize__helper.html',1,'seastar::rpc']]], + ['serialize_5fhelper_3c_20false_20_3e_43',['serialize_helper< false >',['../structseastar_1_1rpc_1_1serialize__helper_3_01false_01_4.html',1,'seastar::rpc']]], + ['serialize_5fhelper_3c_20true_20_3e_44',['serialize_helper< true >',['../structseastar_1_1rpc_1_1serialize__helper_3_01true_01_4.html',1,'seastar::rpc']]], + ['server_45',['server',['../classseastar_1_1experimental_1_1websocket_1_1server.html',1,'seastar::experimental::websocket::server'],['../classseastar_1_1rpc_1_1protocol_1_1server.html',1,'seastar::rpc::protocol< Serializer, MsgType >::server'],['../classseastar_1_1rpc_1_1server.html',1,'seastar::rpc::server']]], + ['server_5fcredentials_46',['server_credentials',['../classseastar_1_1tls_1_1server__credentials.html',1,'seastar::tls']]], + ['server_5ferror_5fexception_47',['server_error_exception',['../classseastar_1_1httpd_1_1server__error__exception.html',1,'seastar::httpd']]], + ['server_5fname_48',['server_name',['../namespaceseastar_1_1tls.html#a0641396266155003c2b4965fa3378dcf',1,'seastar::tls::tls_options']]], + ['server_5foptions_49',['server_options',['../group__rpc.html#structseastar_1_1rpc_1_1server__options',1,'seastar::rpc']]], + ['server_5fsocket_50',['server_socket',['../classseastar_1_1server__socket.html',1,'seastar::server_socket'],['../classseastar_1_1server__socket.html#aed94205408fe6e83de17ccb47ee4f390',1,'seastar::server_socket::server_socket(server_socket &&ss) noexcept'],['../classseastar_1_1server__socket.html#acc587716ec81102138ee5e51ba6565b6',1,'seastar::server_socket::server_socket() noexcept']]], + ['service_5fgroup_51',['service_group',['../structseastar_1_1smp__submit__to__options.html#a7e858a5764cd7f44ac9f238b8ad99e00',1,'seastar::smp_submit_to_options']]], + ['service_5funavailable_52',['service_unavailable',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba512d23352b911a1e9be84b5119e39095',1,'seastar::http::reply']]], + ['session_5fdn_53',['session_dn',['../group__networking-module.html#structseastar_1_1session__dn',1,'seastar']]], + ['session_5fresume_5fdata_54',['session_resume_data',['../namespaceseastar_1_1tls.html#a79f2123eae2c2f2e0c2a03f52825d1cd',1,'seastar::tls::tls_options']]], + ['session_5fresume_5fmode_55',['session_resume_mode',['../namespaceseastar_1_1tls.html#a59d793d775ea396406fe246db6f69d1e',1,'seastar::tls']]], + ['session_5ftype_56',['session_type',['../namespaceseastar_1_1tls.html#a4b5b1f69166a6b7de5fe48ae6532e20b',1,'seastar::tls']]], + ['set_5fabort_5fon_5fallocation_5ffailure_57',['set_abort_on_allocation_failure',['../namespaceseastar_1_1memory.html#a6612139edb36977f770061377a95a371',1,'seastar::memory']]], + ['set_5fabort_5fon_5febadf_58',['set_abort_on_ebadf',['../namespaceseastar.html#a1b2a68c3789e2e9f01108a4cdd725e10',1,'seastar']]], + ['set_5fabort_5fon_5finternal_5ferror_59',['set_abort_on_internal_error',['../namespaceseastar.html#a566620a3b436f692d72674b03e4c2471',1,'seastar']]], + ['set_5fadditional_5fdiagnostics_5fproducer_60',['set_additional_diagnostics_producer',['../namespaceseastar_1_1memory.html#aec131d713d157f690d3164cdc5e76b2c',1,'seastar::memory']]], + ['set_5fcallback_61',['set_callback',['../classseastar_1_1timer.html#ad9c1e7068e3a691d33ba5b42f8fd340b',1,'seastar::timer::set_callback(noncopyable_function< void()> &&callback) noexcept'],['../classseastar_1_1timer.html#afa9022c582e8d535e7a30e485c29aac1',1,'seastar::timer::set_callback(scheduling_group sg, noncopyable_function< void()> &&callback) noexcept']]], + ['set_5fcontent_5ftype_62',['set_content_type',['../structseastar_1_1http_1_1request.html#a7bc43ed0fe42a1b1cc9c6303de8368b5',1,'seastar::http::request::set_content_type()'],['../structseastar_1_1http_1_1reply.html#ad8a76e7b8c1b5b844165f529a64baf96',1,'seastar::http::reply::set_content_type()']]], + ['set_5fdn_5fverification_5fcallback_63',['set_dn_verification_callback',['../classseastar_1_1tls_1_1certificate__credentials.html#ae49e16c26e96fc44d72f3e305ec1dddc',1,'seastar::tls::certificate_credentials']]], + ['set_5fdump_5fmemory_5fdiagnostics_5fon_5falloc_5ffailure_5fkind_64',['set_dump_memory_diagnostics_on_alloc_failure_kind',['../namespaceseastar_1_1memory.html#a52e889cff8bbeaecb5231a923e3716c7',1,'seastar::memory::set_dump_memory_diagnostics_on_alloc_failure_kind(alloc_failure_kind)'],['../namespaceseastar_1_1memory.html#a63f15de0251b7488491dcf61aa028469',1,'seastar::memory::set_dump_memory_diagnostics_on_alloc_failure_kind(std::string_view)']]], + ['set_5fexception_65',['set_exception',['../classseastar_1_1shared__promise.html#a068e1670a82ae9c678d18d34bad8e979',1,'seastar::shared_promise::set_exception(Exception &&e) noexcept'],['../classseastar_1_1shared__promise.html#a35542c86a75e6533fb221aa6c2d86fa8',1,'seastar::shared_promise::set_exception(std::exception_ptr ex) noexcept'],['../classseastar_1_1promise.html#a7c4e6eedaef7e66edeb10f67bc569986',1,'seastar::promise::set_exception(Exception &&e) noexcept'],['../classseastar_1_1promise.html#acb9650b8cab53c81184d0b170bb99cb8',1,'seastar::promise::set_exception(std::exception_ptr &&ex) noexcept']]], + ['set_5fexpects_5fcontinue_66',['set_expects_continue',['../structseastar_1_1http_1_1request.html#aa3cb2a6971cb3c8e8fbf1827c1731016',1,'seastar::http::request']]], + ['set_5ffile_5flifetime_5fhint_67',['set_file_lifetime_hint',['../classseastar_1_1file.html#a6d7281ef1178f6d29f4f7364895b8292',1,'seastar::file']]], + ['set_5fheap_5fprofiling_5fsampling_5frate_68',['set_heap_profiling_sampling_rate',['../namespaceseastar_1_1memory.html#a14f30bb4a13995f54af1d98169ac28a6',1,'seastar::memory']]], + ['set_5fidle_5fcpu_5fhandler_69',['set_idle_cpu_handler',['../classseastar_1_1reactor.html#a8776ee2f3ff40f2dc26f71d0ece8d9cf',1,'seastar::reactor::set_idle_cpu_handler()'],['../namespaceseastar.html#aa4756a6fd059ce855abacd67521add72',1,'seastar::set_idle_cpu_handler()']]], + ['set_5finode_5flifetime_5fhint_70',['set_inode_lifetime_hint',['../classseastar_1_1file.html#a380dfeca0ff5524432b5866b22446d35',1,'seastar::file']]], + ['set_5fiterator_71',['set_iterator',['../classseastar_1_1bitsets_1_1set__iterator.html',1,'seastar::bitsets']]], + ['set_5fkeepalive_72',['set_keepalive',['../classseastar_1_1connected__socket.html#a2e8ce611e54b113012c6d58254744143',1,'seastar::connected_socket']]], + ['set_5fkeepalive_5fparameters_73',['set_keepalive_parameters',['../classseastar_1_1connected__socket.html#a4f180f624bd3c93a8f1cc34b92d505dd',1,'seastar::connected_socket']]], + ['set_5flarge_5fallocation_5fwarning_5fthreshold_74',['set_large_allocation_warning_threshold',['../namespaceseastar_1_1memory.html#a0f42296c2fe94f53fbdca0d62dd07679',1,'seastar::memory']]], + ['set_5flogger_75',['set_logger',['../classseastar_1_1rpc_1_1protocol.html#a1080ac03247263174a9b3b3c605f19d1',1,'seastar::rpc::protocol::set_logger(std::function< void(const sstring &)> logger)'],['../classseastar_1_1rpc_1_1protocol.html#aa1ac72d6fa744b57b2aead4245058207',1,'seastar::rpc::protocol::set_logger(::seastar::logger *logger)']]], + ['set_5fmax_5fsize_76',['set_max_size',['../classseastar_1_1queue.html#a9956de29333c1a2a115a1ef52b9a74b5',1,'seastar::queue']]], + ['set_5fmaximum_5fconnections_77',['set_maximum_connections',['../classseastar_1_1http_1_1experimental_1_1client.html#a69d4cd7e4582799cd013c9a34f64f5e0',1,'seastar::http::experimental::client']]], + ['set_5fmime_5ftype_78',['set_mime_type',['../structseastar_1_1http_1_1request.html#a62083de861851c399aff043f8cc46ff8',1,'seastar::http::request::set_mime_type()'],['../structseastar_1_1http_1_1reply.html#a79d2ca68c50891cc09206fde8be71508',1,'seastar::http::reply::set_mime_type()']]], + ['set_5fmin_5ffree_5fpages_79',['set_min_free_pages',['../namespaceseastar_1_1memory.html#a2042dcbf8cc2e53f199604f9ac4f64dd',1,'seastar::memory']]], + ['set_5fnodelay_80',['set_nodelay',['../classseastar_1_1connected__socket.html#abac356de197aaaedfe448137754fc442',1,'seastar::connected_socket']]], + ['set_5fpriority_5fstring_81',['set_priority_string',['../classseastar_1_1tls_1_1certificate__credentials.html#a3fbab878250b30e619021aed1cec21ed',1,'seastar::tls::certificate_credentials']]], + ['set_5frange_82',['set_range',['../classseastar_1_1bitsets_1_1set__range.html',1,'seastar::bitsets']]], + ['set_5frelabel_5fconfigs_83',['set_relabel_configs',['../namespaceseastar_1_1metrics.html#a99fe98b282f4949f870fd6cf46d3a785',1,'seastar::metrics']]], + ['set_5freuseaddr_84',['set_reuseaddr',['../classseastar_1_1socket.html#a5608fc68e5fe27ea78d1b56514685baa',1,'seastar::socket']]], + ['set_5fsampling_5finterval_85',['set_sampling_interval',['../classsampler.html#a29a6248b0d4bf1aedfda484d5da9624e',1,'sampler']]], + ['set_5fsession_5fresume_5fmode_86',['set_session_resume_mode',['../classseastar_1_1tls_1_1server__credentials.html#ad01a48fb227fa0cffaeaa1707daea0a9',1,'seastar::tls::server_credentials']]], + ['set_5fshares_87',['set_shares',['../classseastar_1_1scheduling__group.html#a9d8d68fed03509166d9a9265927cd8eb',1,'seastar::scheduling_group']]], + ['set_5fsockopt_88',['set_sockopt',['../classseastar_1_1connected__socket.html#a8458417e5e76b35260de14badebf1303',1,'seastar::connected_socket']]], + ['set_5fstall_5fdetector_5freport_5ffunction_89',['set_stall_detector_report_function',['../classseastar_1_1reactor_1_1test.html#a1095aedb8b253ad5c2f9b3abe8d324be',1,'seastar::reactor::test']]], + ['set_5fstrict_5fdma_90',['set_strict_dma',['../classseastar_1_1reactor.html#a5f9295803bde9c8e4e4b0e5294f29638',1,'seastar::reactor']]], + ['set_5fsystem_5ftrust_91',['set_system_trust',['../classseastar_1_1tls_1_1certificate__credentials.html#ad85ae001dd92e4f0a030db663aafd216',1,'seastar::tls::certificate_credentials']]], + ['set_5ftls_5fcredentials_92',['set_tls_credentials',['../classseastar_1_1httpd_1_1http__server.html#af98f1c3d754c28cb04173a17c07d8e75',1,'seastar::httpd::http_server']]], + ['set_5fto_5fcurrent_5fexception_93',['set_to_current_exception',['../classseastar_1_1promise.html#a3c24a3f1a3bf4c34d1ed360409ce5972',1,'seastar::promise']]], + ['set_5ftransformer_94',['set_transformer',['../classseastar_1_1httpd_1_1file__interaction__handler.html#ad82e04afa5a4e1d5b6ef79169dbe3b09',1,'seastar::httpd::file_interaction_handler']]], + ['set_5fvalue_95',['set_value',['../classseastar_1_1promise.html#a8c9a385f90d5b351fc171583fc3fb425',1,'seastar::promise::set_value()'],['../classseastar_1_1shared__promise.html#a732bf24899de335d3e88a2b55e3e17e1',1,'seastar::shared_promise::set_value(const value_tuple_type &result) noexcept(copy_noexcept)'],['../classseastar_1_1shared__promise.html#a1d5f628f0da80cf5804b870d3ff732c0',1,'seastar::shared_promise::set_value(value_tuple_type &&result) noexcept'],['../classseastar_1_1shared__promise.html#ae789297d0ed604168e2085cbc14b36fb',1,'seastar::shared_promise::set_value(A &&... a) noexcept']]], + ['shard_5fid_2ehh_96',['shard_id.hh',['../shard__id_8hh.html',1,'']]], + ['sharded_97',['sharded',['../classseastar_1_1sharded.html',1,'seastar::sharded< Service >'],['../classseastar_1_1sharded.html#a6574c605725ee45ff64a8644336c4b12',1,'seastar::sharded::sharded() noexcept'],['../classseastar_1_1sharded.html#a109d1e1d978f0522d3e2fbeaaa6ff92c',1,'seastar::sharded::sharded(sharded &&other)=delete']]], + ['sharded_3c_20seastar_3a_3ahttpd_3a_3ahttp_5fserver_20_3e_98',['sharded< seastar::httpd::http_server >',['../classseastar_1_1sharded.html',1,'seastar']]], + ['sharded_5fparameter_99',['sharded_parameter',['../classseastar_1_1sharded__parameter.html',1,'seastar::sharded_parameter< Func, Params >'],['../classseastar_1_1sharded__parameter.html#a6a51bee5587152c5d74d8d5c3f7814ce',1,'seastar::sharded_parameter::sharded_parameter()']]], + ['share_100',['share',['../group__memory-module.html#gac5f5c09758baa22ecfc99c311e68ad94',1,'seastar::deleter::share()'],['../classseastar_1_1temporary__buffer.html#a936236db3cfbcf6eb6bd708cc57951b6',1,'seastar::temporary_buffer::share()'],['../classseastar_1_1temporary__buffer.html#a9153c7b13efe07fda994dce50163a5b6',1,'seastar::temporary_buffer::share(size_t pos, size_t len)']]], + ['shared_5ffuture_101',['shared_future',['../classseastar_1_1shared__future.html',1,'seastar::shared_future< T >'],['../classseastar_1_1shared__future.html#a6309e0e6b0edf032e74a21816ad1f1f8',1,'seastar::shared_future::shared_future()']]], + ['shared_5ffuture_3c_20t_2e_2e_2e_20_3e_102',['shared_future< T... >',['../classseastar_1_1shared__future.html',1,'seastar']]], + ['shared_5fmutex_103',['shared_mutex',['../classseastar_1_1shared__mutex.html',1,'seastar']]], + ['shared_5fobject_104',['shared_object',['../namespaceseastar.html#structseastar_1_1shared__object',1,'seastar']]], + ['shared_5fpromise_105',['shared_promise',['../classseastar_1_1shared__promise.html',1,'seastar']]], + ['shared_5fptr_106',['shared_ptr',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20impl_20_3e_107',['shared_ptr< impl >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20metric_5fmetadata_20_3e_108',['shared_ptr< metric_metadata >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20net_3a_3anetwork_5finterface_5fimpl_20_3e_109',['shared_ptr< net::network_interface_impl >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20seastar_3a_3afile_5fimpl_20_3e_110',['shared_ptr< seastar::file_impl >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20seastar_3a_3ametrics_3a_3aimpl_3a_3aimpl_20_3e_111',['shared_ptr< seastar::metrics::impl::impl >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20seastar_3a_3arpc_3a_3aserver_3a_3aconnection_20_3e_112',['shared_ptr< seastar::rpc::server::connection >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20seastar_3a_3arpc_3a_3asink_3a_3aimpl_20_3e_113',['shared_ptr< seastar::rpc::sink::impl >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20seastar_3a_3arpc_3a_3asource_3a_3aimpl_20_3e_114',['shared_ptr< seastar::rpc::source::impl >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20seastar_3a_3ascollectd_3a_3avalue_5flist_20_3e_115',['shared_ptr< seastar::scollectd::value_list >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20seastar_3a_3atls_3a_3aserver_5fcredentials_20_3e_116',['shared_ptr< seastar::tls::server_credentials >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20service_20_3e_117',['shared_ptr< Service >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_5fcount_5fbase_118',['shared_ptr_count_base',['../structseastar_1_1shared__ptr__count__base.html',1,'seastar']]], + ['shared_5fptr_5fcount_5ffor_119',['shared_ptr_count_for',['../structseastar_1_1shared__ptr__count__for.html',1,'seastar']]], + ['shared_5fptr_5fincomplete_2ehh_120',['shared_ptr_incomplete.hh',['../shared__ptr__incomplete_8hh.html',1,'']]], + ['shared_5fptr_5fmake_5fhelper_121',['shared_ptr_make_helper',['../namespaceseastar.html#structseastar_1_1shared__ptr__make__helper',1,'seastar']]], + ['shared_5fptr_5fmake_5fhelper_3c_20t_2c_20false_20_3e_122',['shared_ptr_make_helper< T, false >',['../structseastar_1_1shared__ptr__make__helper_3_01T_00_01false_01_4.html',1,'seastar']]], + ['shared_5fptr_5fmake_5fhelper_3c_20t_2c_20true_20_3e_123',['shared_ptr_make_helper< T, true >',['../structseastar_1_1shared__ptr__make__helper_3_01T_00_01true_01_4.html',1,'seastar']]], + ['should_5fyield_124',['should_yield',['../classseastar_1_1thread.html#aa989b341ea9f28ba835f1b353e05c904',1,'seastar::thread']]], + ['shutdown_125',['shutdown',['../classseastar_1_1socket.html#ac0999f4b0011c56701e62b332b475176',1,'seastar::socket::shutdown()'],['../classseastar_1_1experimental_1_1fsnotifier.html#a9a3d0319a645029cc052dea0d4f2589a',1,'seastar::experimental::fsnotifier::shutdown()'],['../classseastar_1_1rpc_1_1server.html#a8384243222af4efe7ff12b4ecfaad5cf',1,'seastar::rpc::server::shutdown()']]], + ['shutdown_5finput_126',['shutdown_input',['../classseastar_1_1connected__socket.html#a3fc463f624213b73f9cd5c2e4c9b0613',1,'seastar::connected_socket::shutdown_input()'],['../classseastar_1_1net_1_1datagram__channel.html#a7c690ab18d484493e801e65ed7850729',1,'seastar::net::datagram_channel::shutdown_input()'],['../group__websocket.html#gaf08007639a114bb6cb73da2171a3799e',1,'seastar::experimental::websocket::connection::shutdown_input()']]], + ['shutdown_5foutput_127',['shutdown_output',['../classseastar_1_1net_1_1datagram__channel.html#a0895d02c70cf9806e387aa95d93a2f35',1,'seastar::net::datagram_channel::shutdown_output()'],['../classseastar_1_1connected__socket.html#a591d63195cb7901a2227b0dbf05b2a66',1,'seastar::connected_socket::shutdown_output()']]], + ['signal_128',['signal',['../classseastar_1_1condition__variable.html#a7e13de1e820b6c3627f14d4293d69bda',1,'seastar::condition_variable::signal()'],['../classseastar_1_1basic__semaphore.html#ab85ecffff17b565abfa46c3fda090c93',1,'seastar::basic_semaphore::signal()']]], + ['signature_129',['signature',['../structseastar_1_1rpc_1_1signature.html',1,'seastar::rpc']]], + ['signature_3c_20ret_28client_5finfo_20_26_2c_20in_2e_2e_2e_29_3e_130',['signature< Ret(client_info &, In...)>',['../structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01In_8_8_8_08_4.html',1,'seastar::rpc']]], + ['signature_3c_20ret_28client_5finfo_20_26_2c_20opt_5ftime_5fpoint_2c_20in_2e_2e_2e_29_3e_131',['signature< Ret(client_info &, opt_time_point, In...)>',['../structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4.html',1,'seastar::rpc']]], + ['signature_3c_20ret_28const_20client_5finfo_20_26_2c_20in_2e_2e_2e_29_3e_132',['signature< Ret(const client_info &, In...)>',['../structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01In_8_8_8_08_4.html',1,'seastar::rpc']]], + ['signature_3c_20ret_28const_20client_5finfo_20_26_2c_20opt_5ftime_5fpoint_2c_20in_2e_2e_2e_29_3e_133',['signature< Ret(const client_info &, opt_time_point, In...)>',['../structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4.html',1,'seastar::rpc']]], + ['signature_3c_20ret_28in_2e_2e_2e_29_3e_134',['signature< Ret(In...)>',['../structseastar_1_1rpc_1_1signature_3_01Ret_07In_8_8_8_08_4.html',1,'seastar::rpc']]], + ['signature_3c_20ret_28opt_5ftime_5fpoint_2c_20in_2e_2e_2e_29_3e_135',['signature< Ret(opt_time_point, In...)>',['../structseastar_1_1rpc_1_1signature_3_01Ret_07opt__time__point_00_01In_8_8_8_08_4.html',1,'seastar::rpc']]], + ['simple_5fbacktrace_136',['simple_backtrace',['../classseastar_1_1simple__backtrace.html',1,'seastar']]], + ['simple_5fmemory_5finput_5fstream_137',['simple_memory_input_stream',['../classseastar_1_1simple__memory__input__stream.html',1,'seastar']]], + ['simple_5fmemory_5foutput_5fstream_138',['simple_memory_output_stream',['../classseastar_1_1simple__memory__output__stream.html',1,'seastar']]], + ['simple_5fpollfn_139',['simple_pollfn',['../structseastar_1_1simple__pollfn.html',1,'seastar']]], + ['sink_140',['sink',['../classseastar_1_1rpc_1_1sink.html',1,'seastar::rpc']]], + ['sink_5fimpl_141',['sink_impl',['../classseastar_1_1rpc_1_1sink__impl.html',1,'seastar::rpc']]], + ['size_142',['size',['../classseastar_1_1temporary__buffer.html#ac545d36f773dc6954d2266677e0f6a42',1,'seastar::temporary_buffer::size()'],['../classseastar_1_1queue.html#a0063d1a7586c111d711b2456e5c94a9f',1,'seastar::queue::size()'],['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#aa13eedc896982d211fff1702f01a3f7f',1,'seastar::metrics::internal::approximate_exponential_histogram::size()'],['../classseastar_1_1file.html#a95e704044c29ce5a8b4633262cc43b78',1,'seastar::file::size()'],['../classseastar_1_1expiring__fifo.html#a2585fba7a6fcd084728bbacfc7ea9652',1,'seastar::expiring_fifo::size()'],['../structseastar_1_1memory_1_1allocation__site.html#a9a8e7fd710689306ab058c607ab7b19e',1,'seastar::memory::allocation_site::size()']]], + ['skip_143',['skip',['../classseastar_1_1input__stream.html#a0150cf123126fbb333edcb1b7e22eef4',1,'seastar::input_stream']]], + ['skip_5fbytes_144',['skip_bytes',['../classseastar_1_1skip__bytes.html',1,'seastar']]], + ['slab_5fallocator_145',['slab_allocator',['../classseastar_1_1slab__allocator.html',1,'seastar']]], + ['slab_5fclass_146',['slab_class',['../classseastar_1_1slab__class.html',1,'seastar']]], + ['slab_5fitem_5fbase_147',['slab_item_base',['../classseastar_1_1slab__item__base.html',1,'seastar']]], + ['slab_5fpage_5fdesc_148',['slab_page_desc',['../structseastar_1_1slab__page__desc.html',1,'seastar']]], + ['sleep_149',['sleep',['../namespaceseastar.html#a7c875a6dc5869c1f2d5e975eb34746c6',1,'seastar']]], + ['sleep_2ehh_150',['sleep.hh',['../sleep_8hh.html',1,'']]], + ['sleep_5fabortable_151',['sleep_abortable',['../namespaceseastar.html#a5e8ea0d65b285cf4678fe287b63eb422',1,'seastar::sleep_abortable(typename Clock::duration dur)'],['../namespaceseastar.html#a814016b5151c2b4d922f018f08c34930',1,'seastar::sleep_abortable(typename Clock::duration dur, abort_source &as)']]], + ['sleep_5faborted_152',['sleep_aborted',['../classseastar_1_1sleep__aborted.html',1,'seastar']]], + ['sloppy_5fsize_153',['sloppy_size',['../structseastar_1_1file__open__options.html#a48a5d18ac75c1012ed2e1fef271ab08a',1,'seastar::file_open_options']]], + ['sloppy_5fsize_5fhint_154',['sloppy_size_hint',['../structseastar_1_1file__open__options.html#a6a95076c1c190b3d431456b79de37cf8',1,'seastar::file_open_options']]], + ['smp_155',['smp',['../classseastar_1_1smp.html',1,'seastar::smp'],['../structseastar_1_1smp__options.html#a6b177e01fd9ff16f548fb4d70aaa0fdc',1,'seastar::smp_options::smp()']]], + ['smp_2ehh_156',['smp.hh',['../smp_8hh.html',1,'']]], + ['smp_5fmessage_5fqueue_157',['smp_message_queue',['../classseastar_1_1smp__message__queue.html',1,'seastar']]], + ['smp_5foptions_158',['smp_options',['../structseastar_1_1smp__options.html',1,'seastar']]], + ['smp_5foptions_2ehh_159',['smp_options.hh',['../smp__options_8hh.html',1,'']]], + ['smp_5fservice_5fgroup_160',['smp_service_group',['../classseastar_1_1smp__service__group.html',1,'seastar']]], + ['smp_5fservice_5fgroup_5fconfig_161',['smp_service_group_config',['../namespaceseastar.html#structseastar_1_1smp__service__group__config',1,'seastar']]], + ['smp_5fsubmit_5fto_5foptions_162',['smp_submit_to_options',['../structseastar_1_1smp__submit__to__options.html',1,'seastar']]], + ['snd_5fbuf_163',['snd_buf',['../structseastar_1_1rpc_1_1snd__buf.html',1,'seastar::rpc']]], + ['socket_164',['socket',['../classseastar_1_1socket.html',1,'seastar::socket'],['../namespaceseastar_1_1tls.html#aa5b67c3c8a80a8ec9429ec1ffe7624a8',1,'seastar::tls::socket()'],['../classseastar_1_1socket.html#a04ad152a4e36dd5aeb967fdcc3c0f94f',1,'seastar::socket::socket()'],['../namespaceseastar_1_1tls.html#a67ebf548673541a04d48a0ef6ac238bc',1,'seastar::tls::socket()']]], + ['socket_5faddress_165',['socket_address',['../classseastar_1_1socket__address.html',1,'seastar::socket_address'],['../classseastar_1_1socket__address.html#adf15a68a7757cf94452ca0c39938758e',1,'seastar::socket_address::socket_address()']]], + ['socket_5faddress_2eu_166',['socket_address.u',['../namespaceseastar.html#unionseastar_1_1socket__address_8u',1,'seastar']]], + ['source_167',['source',['../classseastar_1_1rpc_1_1source.html',1,'seastar::rpc']]], + ['source_5fimpl_168',['source_impl',['../classseastar_1_1rpc_1_1source__impl.html',1,'seastar::rpc']]], + ['spawn_5fparameters_169',['spawn_parameters',['../structseastar_1_1experimental_1_1spawn__parameters.html',1,'seastar::experimental']]], + ['spawn_5fprocess_170',['spawn_process',['../classseastar_1_1experimental_1_1process.html#a564e9054229d5adb7e582204e0683af6',1,'seastar::experimental::process::spawn_process()'],['../classseastar_1_1experimental_1_1process.html#aac0cb611a3d0b3fa1aa5c9185c03b996',1,'seastar::experimental::process::spawn_process()'],['../group__interprocess-module.html#gab00eeca1f55dab19fbc2dbb51be11f79',1,'seastar::experimental::spawn_process(const std::filesystem::path &pathname, spawn_parameters params)'],['../group__interprocess-module.html#ga99bbba00257877a19476a789530197d0',1,'seastar::experimental::spawn_process(const std::filesystem::path &pathname)']]], + ['speculate_5fepoll_171',['speculate_epoll',['../classseastar_1_1pollable__fd__state.html#a9c955e4a9aea6362c5768d0dd9479b3c',1,'seastar::pollable_fd_state']]], + ['speculation_172',['speculation',['../structseastar_1_1pollable__fd__state_1_1speculation.html',1,'seastar::pollable_fd_state']]], + ['spinlock_173',['spinlock',['../classseastar_1_1util_1_1spinlock.html',1,'seastar::util']]], + ['split_174',['split',['../classseastar_1_1semaphore__units.html#a94402822f654a61855eea64acd86f33b',1,'seastar::semaphore_units']]], + ['srv_5frecord_175',['srv_record',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1srv__record',1,'seastar::net']]], + ['sstring_5fbuilder_176',['sstring_builder',['../classseastar_1_1sstring__builder.html',1,'seastar']]], + ['stack_5fsize_177',['stack_size',['../classseastar_1_1posix__thread_1_1attr.html#structseastar_1_1posix__thread_1_1attr_1_1stack__size',1,'seastar::posix_thread::attr']]], + ['standard_178',['standard',['../namespaceseastar.html#a201fc834be922b0ebfe82792ac13c340ac00f0c4675b91fb8b918e4079a0b1bac',1,'seastar']]], + ['start_179',['start',['../classseastar_1_1subscription.html#ae1189eace21e50eeb244826b397cd1d1',1,'seastar::subscription::start()'],['../classseastar_1_1sharded.html#af01ed48d04ebd34957b9a47c7e5ab887',1,'seastar::sharded::start(Args &&... args) noexcept']]], + ['start_5fsingle_180',['start_single',['../classseastar_1_1sharded.html#a351463269450c6a09091f9be485ef57b',1,'seastar::sharded']]], + ['stat_181',['stat',['../classseastar_1_1file.html#a9e6fc0d04576c674306047a4f67ab82b',1,'seastar::file']]], + ['stat_5fdata_182',['stat_data',['../group__fileio-module.html#structseastar_1_1stat__data',1,'seastar']]], + ['statistics_183',['statistics',['../classseastar_1_1memory_1_1statistics.html',1,'seastar::memory']]], + ['stats_184',['stats',['../classseastar_1_1execution__stage.html#structseastar_1_1execution__stage_1_1stats',1,'seastar::execution_stage::stats'],['../structseastar_1_1rpc_1_1stats.html',1,'seastar::rpc::stats'],['../namespaceseastar_1_1memory.html#a1eab70c73ed53fe3f4b8324b16e4ca02',1,'seastar::memory::stats()'],['../classseastar_1_1memory_1_1statistics.html#aa995aeb711a39258d1ea437cf91f049b',1,'seastar::memory::statistics::stats()']]], + ['status_5ftype_185',['status_type',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529ab',1,'seastar::http::reply']]], + ['std_186',['std',['../namespacestd.html',1,'']]], + ['stop_187',['stop',['../classseastar_1_1rpc_1_1server.html#a6182f6907a977f88d0da2b3c1ab2207a',1,'seastar::rpc::server::stop()'],['../classseastar_1_1sharded.html#a78c62e6d04e6f663bc60882646147a43',1,'seastar::sharded::stop()'],['../group__websocket.html#gae8d9858b97bdf2571b0e1b34110bd3a9',1,'seastar::experimental::websocket::server::stop()']]], + ['stop_5fconsuming_188',['stop_consuming',['../classseastar_1_1stop__consuming.html',1,'seastar']]], + ['stop_5fiteration_5ftag_189',['stop_iteration_tag',['../group__future-util.html#structseastar_1_1stop__iteration__tag',1,'seastar']]], + ['stop_5fnow_190',['stop_now',['../classseastar_1_1deferred__stop.html#a3db2d0eb13344364cb969e982c7132e5',1,'seastar::deferred_stop']]], + ['str_5fmatcher_191',['str_matcher',['../classseastar_1_1httpd_1_1str__matcher.html',1,'seastar::httpd::str_matcher'],['../classseastar_1_1httpd_1_1str__matcher.html#ad13f920a777438c26fbf4f460cf51046',1,'seastar::httpd::str_matcher::str_matcher()']]], + ['stream_192',['stream',['../classseastar_1_1stream.html',1,'seastar']]], + ['stream_3c_20seastar_3a_3anet_3a_3apacket_20_3e_193',['stream< seastar::net::packet >',['../classseastar_1_1stream.html',1,'seastar']]], + ['stream_3c_20seastar_3a_3anet_3a_3apacket_2c_20seastar_3a_3anet_3a_3aethernet_5faddress_20_3e_194',['stream< seastar::net::packet, seastar::net::ethernet_address >',['../classseastar_1_1stream.html',1,'seastar']]], + ['stream_3c_20t_2e_2e_2e_20_3e_195',['stream< T... >',['../classseastar_1_1stream.html',1,'seastar']]], + ['stream_5fclosed_196',['stream_closed',['../classseastar_1_1rpc_1_1stream__closed.html',1,'seastar::rpc']]], + ['streaming_5fdomain_5ftype_197',['streaming_domain_type',['../classseastar_1_1rpc_1_1streaming__domain__type.html',1,'seastar::rpc']]], + ['string_5fmap_198',['string_map',['../classseastar_1_1program__options_1_1string__map.html',1,'seastar::program_options']]], + ['subject_5falt_5fname_199',['subject_alt_name',['../namespaceseastar_1_1tls.html#structseastar_1_1tls_1_1subject__alt__name',1,'seastar::tls']]], + ['subject_5falt_5fname_5ftype_200',['subject_alt_name_type',['../namespaceseastar_1_1tls.html#a6f98ca92c48ab663e8ad481017bb232c',1,'seastar::tls']]], + ['submit_5fto_201',['submit_to',['../classseastar_1_1smp.html#a6b3f6578eb387e64989e54ed435d7598',1,'seastar::smp::submit_to()'],['../namespaceseastar_1_1alien.html#a50d89de93339ddb7ff802f5ae6b4ffc3',1,'seastar::alien::submit_to(instance &instance, unsigned shard, Func func)'],['../namespaceseastar_1_1alien.html#a8745864426c401d3e2685a64285225a4',1,'seastar::alien::submit_to(unsigned shard, Func func)'],['../classseastar_1_1smp.html#af61582580a5d21d0cb6af8b29423b54e',1,'seastar::smp::submit_to()']]], + ['subscribe_202',['subscribe',['../classseastar_1_1abort__source.html#aa46295d8016fcd03a9a7f5c56bf11263',1,'seastar::abort_source']]], + ['subscription_203',['subscription',['../classseastar_1_1abort__source_1_1subscription.html',1,'seastar::abort_source::subscription'],['../classseastar_1_1subscription.html',1,'seastar::subscription< T >']]], + ['switch_5fto_204',['switch_to',['../structseastar_1_1coroutine_1_1switch__to.html',1,'seastar::coroutine']]], + ['switching_5fprotocols_205',['switching_protocols',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abab6f5da5e7e683947b6f2669c799a5d3b',1,'seastar::http::reply']]], + ['sync_5fdirectory_206',['sync_directory',['../group__fileio-module.html#gaf2695f61c35469c30866297b4a1dc301',1,'seastar']]], + ['syncronous_5fisolation_5ffunction_207',['syncronous_isolation_function',['../group__rpc.html#ac3e9932cb9fa23b8bf4752f907487f32',1,'seastar::rpc::resource_limits']]], + ['tls_208',['tls',['../namespaceseastar_1_1tls.html',1,'seastar']]] +]; diff --git a/master/search/all_14.html b/master/search/all_14.html new file mode 100644 index 000000000..291e0d95f --- /dev/null +++ b/master/search/all_14.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_14.js b/master/search/all_14.js new file mode 100644 index 000000000..337a2479e --- /dev/null +++ b/master/search/all_14.js @@ -0,0 +1,94 @@ +var searchData= +[ + ['take_5fspeculation_0',['take_speculation',['../classseastar_1_1pollable__fd__state.html#a578c0dcd93ef41c4b056985c576cc7ad',1,'seastar::pollable_fd_state']]], + ['tap_5fdevice_1',['tap_device',['../structseastar_1_1net_1_1native__stack__options.html#a454638ebf057924b1de844b0c8d69eb3',1,'seastar::net::native_stack_options']]], + ['task_2',['task',['../classseastar_1_1task.html',1,'seastar']]], + ['task_5fentry_3',['task_entry',['../classseastar_1_1task__entry.html',1,'seastar']]], + ['task_5fquota_5fms_4',['task_quota_ms',['../structseastar_1_1reactor__options.html#a5bca70e567985210d13ae92b8c302fc9',1,'seastar::reactor_options']]], + ['tasks_5fprocessed_5',['tasks_processed',['../classseastar_1_1reactor.html#aa902abe5a7063bee0f1654c31ac17bc1',1,'seastar::reactor::sched_stats']]], + ['tasktrace_6',['tasktrace',['../classseastar_1_1tasktrace.html',1,'seastar']]], + ['tcp_7',['tcp',['../classseastar_1_1net_1_1tcp.html',1,'seastar::net']]], + ['tcp_3c_20seastar_3a_3anet_3a_3aipv4_5ftraits_20_3e_8',['tcp< seastar::net::ipv4_traits >',['../classseastar_1_1net_1_1tcp.html',1,'seastar::net']]], + ['tcp_5fhdr_9',['tcp_hdr',['../structseastar_1_1net_1_1tcp__hdr.html',1,'seastar::net']]], + ['tcp_5fkeepalive_5fparams_10',['tcp_keepalive_params',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1tcp__keepalive__params',1,'seastar::net']]], + ['tcp_5foption_11',['tcp_option',['../structseastar_1_1net_1_1tcp__option.html',1,'seastar::net']]], + ['tcp_5fseq_12',['tcp_seq',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1tcp__seq',1,'seastar::net']]], + ['tcp_5ftag_13',['tcp_tag',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1tcp__tag',1,'seastar::net']]], + ['temporary_5fbuffer_14',['temporary_buffer',['../classseastar_1_1temporary__buffer.html',1,'seastar::temporary_buffer< CharType >'],['../classseastar_1_1temporary__buffer.html#a97c50ad71827189086704215551cf136',1,'seastar::temporary_buffer::temporary_buffer(size_t size)'],['../classseastar_1_1temporary__buffer.html#a9650c675bed80e66e952834bef0ca4d3',1,'seastar::temporary_buffer::temporary_buffer() noexcept'],['../classseastar_1_1temporary__buffer.html#a277aaab92ee17824bab6c1c835eacab0',1,'seastar::temporary_buffer::temporary_buffer(temporary_buffer &&x) noexcept'],['../classseastar_1_1temporary__buffer.html#a04252fd4326e1e0ef0f8f04df995fbde',1,'seastar::temporary_buffer::temporary_buffer(CharType *buf, size_t size, deleter d) noexcept'],['../classseastar_1_1temporary__buffer.html#aed4dd7ee507c17a0ed018fe8c41c9334',1,'seastar::temporary_buffer::temporary_buffer(const CharType *src, size_t size)']]], + ['temporary_5fbuffer_3c_20char_20_3e_15',['temporary_buffer< char >',['../classseastar_1_1temporary__buffer.html',1,'seastar']]], + ['temporary_5fredirect_16',['temporary_redirect',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba02ca453ae53baad186be51f3442cc27f',1,'seastar::http::reply']]], + ['terminate_17',['terminate',['../classseastar_1_1experimental_1_1process.html#a4695d3bec052594c4e04c1e021e4851f',1,'seastar::experimental::process']]], + ['test_18',['test',['../classseastar_1_1reactor_1_1test.html',1,'seastar::reactor']]], + ['test_5fregistrar_19',['test_registrar',['../structperf__tests_1_1internal_1_1test__registrar.html',1,'perf_tests::internal']]], + ['test_5frunner_20',['test_runner',['../classseastar_1_1testing_1_1test__runner.html',1,'seastar::testing']]], + ['then_21',['then',['../classseastar_1_1future.html#a3864e70c07aa00d54c4be2870b06847f',1,'seastar::future']]], + ['then_5funpack_22',['then_unpack',['../classseastar_1_1future.html#a601231f76d19bbcdf5b9cacdf88f3151',1,'seastar::future']]], + ['then_5fwrapped_23',['then_wrapped',['../classseastar_1_1future.html#a015e85e8e34d191b65a35f6dde26d477',1,'seastar::future']]], + ['this_5fshard_5fid_24',['this_shard_id',['../namespaceseastar.html#a6b1fb468193fee4247f1c1819cd19cf4',1,'seastar']]], + ['thread_25',['thread',['../classseastar_1_1thread.html',1,'seastar::thread'],['../classseastar_1_1thread.html#aa966562354f011ccf7fca9b80f4e8c88',1,'seastar::thread::thread()=default'],['../group__thread-module.html#ga13305b7e1b60d43907b73824327612e0',1,'seastar::thread::thread(Func func)'],['../group__thread-module.html#ga159f8c16a5d753224ad19b38d0d642ea',1,'seastar::thread::thread(thread_attributes attr, Func func)'],['../classseastar_1_1thread.html#a5728f7229818fce162d792298b26cbf4',1,'seastar::thread::thread(thread &&x) noexcept=default']]], + ['thread_5faffinity_26',['thread_affinity',['../structseastar_1_1smp__options.html#a9d7160097ab78e28a32ed2cc76afe569',1,'seastar::smp_options']]], + ['thread_5fattributes_27',['thread_attributes',['../group__thread-module.html#classseastar_1_1thread__attributes',1,'seastar']]], + ['thread_5fcputime_5fclock_28',['thread_cputime_clock',['../classseastar_1_1thread__cputime__clock.html',1,'seastar']]], + ['throw_5fwith_5fbacktrace_29',['throw_with_backtrace',['../namespaceseastar.html#a4c5b6c647938a6ef9c79fb51008f295a',1,'seastar']]], + ['time_5festimated_5fhistogram_30',['time_estimated_histogram',['../classseastar_1_1metrics_1_1internal_1_1time__estimated__histogram.html',1,'seastar::metrics::internal']]], + ['time_5fmeasurement_31',['time_measurement',['../classperf__tests_1_1internal_1_1time__measurement.html',1,'perf_tests::internal']]], + ['timed_5fout_5ferror_32',['timed_out_error',['../classseastar_1_1timed__out__error.html',1,'seastar']]], + ['timeout_33',['timeout',['../structseastar_1_1smp__submit__to__options.html#ace8bed510ddfc7b03f71c8181502cfc1',1,'seastar::smp_submit_to_options']]], + ['timeout_5ferror_34',['timeout_error',['../classseastar_1_1rpc_1_1timeout__error.html',1,'seastar::rpc']]], + ['timer_35',['timer',['../classseastar_1_1timer.html',1,'seastar::timer< Clock >'],['../classseastar_1_1timer.html#a604c208460a5a77ee217586e257b2bb0',1,'seastar::timer::timer(noncopyable_function< void()> &&callback) noexcept'],['../classseastar_1_1timer.html#ab635ae67a25477278656a0889b621565',1,'seastar::timer::timer() noexcept'],['../classseastar_1_1timer.html#ae3594a63cafa5cab0720bd65965b8db6',1,'seastar::timer::timer(timer &&t) noexcept'],['../classseastar_1_1timer.html#a507ce84d06f055929692ad058a8791e7',1,'seastar::timer::timer(scheduling_group sg, noncopyable_function< void()> &&callback) noexcept']]], + ['timer_2ehh_36',['timer.hh',['../timer_8hh.html',1,'']]], + ['timer_3c_20clock_20_3e_37',['timer< Clock >',['../classseastar_1_1timer.html',1,'seastar']]], + ['timer_3c_20lowres_5fclock_20_3e_38',['timer< lowres_clock >',['../classseastar_1_1timer.html',1,'seastar']]], + ['timer_3c_20seastar_3a_3alowres_5fclock_20_3e_39',['timer< seastar::lowres_clock >',['../classseastar_1_1timer.html',1,'seastar']]], + ['timer_3c_20seastar_3a_3amanual_5fclock_20_3e_40',['timer< seastar::manual_clock >',['../classseastar_1_1timer.html',1,'seastar']]], + ['timer_5fset_41',['timer_set',['../classseastar_1_1timer__set.html',1,'seastar']]], + ['timers_42',['Timers',['../group__timers.html',1,'']]], + ['timestamps_43',['timestamps',['../structseastar_1_1net_1_1tcp__option_1_1timestamps.html',1,'seastar::net::tcp_option']]], + ['tls_5foptions_44',['tls_options',['../namespaceseastar_1_1tls.html#structseastar_1_1tls_1_1tls__options',1,'seastar::tls']]], + ['tmp_5fdir_45',['tmp_dir',['../classseastar_1_1tmp__dir.html',1,'seastar']]], + ['tmp_5ffile_46',['tmp_file',['../classseastar_1_1tmp__file.html',1,'seastar']]], + ['to_5fabsolute_5fitimerspec_47',['to_absolute_itimerspec',['../posix_8hh.html#a85ff68df53ea80527da72441660a84ab',1,'seastar::posix']]], + ['to_5ffile_48',['to_file',['../classseastar_1_1file__handle.html#af9e6432e9d3fed7cd5b07359084bddfb',1,'seastar::file_handle::to_file() &&'],['../classseastar_1_1file__handle.html#af7230a607d5b9bf47e4a759c3f50b7ee',1,'seastar::file_handle::to_file() const &']]], + ['to_5fjson_49',['to_json',['../classseastar_1_1json_1_1formatter.html#aee5b99aaf0103f00e81c4dbda5348730',1,'seastar::json::formatter::to_json(float f)'],['../classseastar_1_1json_1_1formatter.html#a12df360614bfe66a0b3aefaceaad0552',1,'seastar::json::formatter::to_json(double d)'],['../classseastar_1_1json_1_1formatter.html#afa2c7a8dd524aea7794d54c337dcd340',1,'seastar::json::formatter::to_json(const char *str, size_t len)'],['../classseastar_1_1json_1_1formatter.html#aea6313017a15779113dec5e947db1f3e',1,'seastar::json::formatter::to_json(const char *str)'],['../classseastar_1_1json_1_1formatter.html#ad5957fff728d082de7a63c92cf9960ba',1,'seastar::json::formatter::to_json(bool d)'],['../structseastar_1_1json_1_1json__void.html#a79987ea1c752f1cba2a402da6c8b69cb',1,'seastar::json::json_void::to_json()'],['../structseastar_1_1json_1_1json__base.html#abef0550088e52bd93a2d2dd75669cff9',1,'seastar::json::json_base::to_json()'],['../classseastar_1_1json_1_1jsonable.html#ab76f0ea9851309bc4d85c8e49ee2cf11',1,'seastar::json::jsonable::to_json()'],['../classseastar_1_1json_1_1formatter.html#abf460e0884b4ac82826e17a9818d290b',1,'seastar::json::formatter::to_json(unsigned long l)'],['../classseastar_1_1json_1_1formatter.html#ad02a234a7fcc678b11f183560c1dc1ba',1,'seastar::json::formatter::to_json(const jsonable &obj)'],['../classseastar_1_1json_1_1formatter.html#a804333312e3c390157e0e1d2ade0e503',1,'seastar::json::formatter::to_json(const date_time &d)'],['../classseastar_1_1json_1_1formatter.html#a80ad29bd652f10b932550d5625ddc084',1,'seastar::json::formatter::to_json(const std::vector< Args... > &vec)'],['../classseastar_1_1json_1_1formatter.html#ad865a5df1a5954b86896eb6c8c35baee',1,'seastar::json::formatter::to_json(unsigned n)'],['../classseastar_1_1json_1_1formatter.html#a757f90f0a09815177a31735de20bd3e5',1,'seastar::json::formatter::to_json(long n)'],['../classseastar_1_1json_1_1formatter.html#a5a9b7369af0c0c432f8955255aa5034d',1,'seastar::json::formatter::to_json(const sstring &str)'],['../classseastar_1_1json_1_1formatter.html#a8dfab1f83f3bbe1e34153e32ffed1c79',1,'seastar::json::formatter::to_json(int n)']]], + ['to_5frelative_5fitimerspec_50',['to_relative_itimerspec',['../posix_8hh.html#a64f21b1a30ed389197472c59ed9b23ac',1,'seastar::posix']]], + ['to_5fstring_51',['to_string',['../classseastar_1_1json_1_1json__base__element.html#a41c0ef020393005975517fbd75eada04',1,'seastar::json::json_base_element::to_string()'],['../classseastar_1_1json_1_1json__element.html#ad425e38e4004f351f1e9292c945b5108',1,'seastar::json::json_element::to_string()'],['../classseastar_1_1json_1_1json__list.html#affefaedd512958b2e3082d1b410bd2c0',1,'seastar::json::json_list::to_string()']]], + ['to_5ftimespec_52',['to_timespec',['../posix_8hh.html#abda7d60dc449e6e299864ba015d03d8c',1,'seastar::posix']]], + ['token_53',['token',['../classseastar_1_1experimental_1_1fsnotifier_1_1watch.html#a3a8c5bbbec30cab10472f6ce0a24d2fa',1,'seastar::experimental::fsnotifier::watch']]], + ['too_5fmany_5frequests_54',['too_many_requests',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba9e293097c9191e05b40df09813aac988',1,'seastar::http::reply']]], + ['topology_5fholder_55',['topology_holder',['../structseastar_1_1resource_1_1hwloc_1_1internal_1_1topology__holder.html',1,'seastar::resource::hwloc::internal']]], + ['total_5fbytes_56',['total_bytes',['../namespaceseastar_1_1scollectd.html#a86886d3bdce16e47b128efaaa169a032',1,'seastar::scollectd']]], + ['total_5fmemory_57',['total_memory',['../classseastar_1_1memory_1_1statistics.html#a465546545a4a0945d2431f4b948abab2',1,'seastar::memory::statistics']]], + ['total_5fnew_5fconnections_5fnr_58',['total_new_connections_nr',['../classseastar_1_1http_1_1experimental_1_1client.html#a4f94d20012e4d3b527fcbbe3fef106a6',1,'seastar::http::experimental::client']]], + ['touch_59',['touch',['../classseastar_1_1slab__allocator.html#a246729a2fa6646d0bff93a173251db8a',1,'seastar::slab_allocator']]], + ['touch_5fdirectory_60',['touch_directory',['../group__fileio-module.html#ga1aa80518fe58477baa370f1991a9579d',1,'seastar']]], + ['transform_61',['transform',['../classseastar_1_1httpd_1_1content__replace.html#a53aa81933e3676855f0cc54c32145f69',1,'seastar::httpd::content_replace::transform()'],['../classseastar_1_1httpd_1_1file__transformer.html#aa13ddb896ad7dbad8d75cbe0db9f3e2f',1,'seastar::httpd::file_transformer::transform()']]], + ['transform_5fiterator_62',['transform_iterator',['../classseastar_1_1transform__iterator.html',1,'seastar']]], + ['trim_63',['trim',['../classseastar_1_1temporary__buffer.html#a47fb12f1d31db113b70f30d8222b5c52',1,'seastar::temporary_buffer']]], + ['trim_5ffront_64',['trim_front',['../classseastar_1_1temporary__buffer.html#ab82d397228a054b51b1daf6618560203',1,'seastar::temporary_buffer']]], + ['trim_5fto_5fsize_65',['trim_to_size',['../namespaceseastar.html#a6e3617a6eded8e0b87f58b52ed34ebbd',1,'seastar::output_stream_options']]], + ['truncate_66',['truncate',['../classseastar_1_1file.html#aba828225b92394e8ab07ddfbfd857380',1,'seastar::file']]], + ['try_5fenter_67',['try_enter',['../classseastar_1_1gate.html#a2d2ca58b3467f0f857d1414673776e68',1,'seastar::gate']]], + ['try_5fhold_68',['try_hold',['../classseastar_1_1gate.html#a96ba620854f1a09213f3590a20bc5316',1,'seastar::gate']]], + ['try_5flock_69',['try_lock',['../classseastar_1_1shared__mutex.html#a534a6509c7c5128cd832ae07d548f0cb',1,'seastar::shared_mutex']]], + ['try_5flock_5fshared_70',['try_lock_shared',['../classseastar_1_1shared__mutex.html#ab7fd82aad9f50bf8e54196da87a0a5f5',1,'seastar::shared_mutex']]], + ['try_5fread_5flock_71',['try_read_lock',['../classseastar_1_1basic__rwlock.html#a61020fcba43c56baab9db66ad9d34ab7',1,'seastar::basic_rwlock']]], + ['try_5fwait_72',['try_wait',['../classseastar_1_1basic__semaphore.html#aaac157ad64df05d0681372fcd83f0c8c',1,'seastar::basic_semaphore']]], + ['try_5fwith_5fgate_73',['try_with_gate',['../group__fiber-module.html#gab87704c5a6a216aea23ec12a2d193386',1,'seastar::gate']]], + ['try_5fwrite_5flock_74',['try_write_lock',['../classseastar_1_1basic__rwlock.html#a83165946f4cd04894dcebae75e128dd7',1,'seastar::basic_rwlock']]], + ['tso_75',['tso',['../structseastar_1_1net_1_1virtio__options.html#afdbdffe0a699cfd70aec37cb231cdabf',1,'seastar::net::virtio_options']]], + ['tuple_76',['tuple',['../classseastar_1_1rpc_1_1tuple.html',1,'seastar::rpc']]], + ['tuple_5felement_3c_20i_2c_20seastar_3a_3arpc_3a_3atuple_3c_20t_2e_2e_2e_20_3e_20_3e_77',['tuple_element< I, seastar::rpc::tuple< T... > >',['../structstd_1_1tuple__element_3_01I_00_01seastar_1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.html',1,'std']]], + ['tuple_5ffilter_5fby_5ftype_78',['tuple_filter_by_type',['../group__utilities.html#gabe3215208809af5dd57703084e8a4e37',1,'seastar']]], + ['tuple_5ffor_5feach_79',['tuple_for_each',['../group__utilities.html#ga56a3dd0609e574dcd283c565789da372',1,'seastar']]], + ['tuple_5fmap_80',['tuple_map',['../group__utilities.html#ga21ff9b5fd69e0506b1a028ad27a4a62f',1,'seastar']]], + ['tuple_5fmap_5ftypes_81',['tuple_map_types',['../group__utilities.html#structseastar_1_1tuple__map__types',1,'seastar']]], + ['tuple_5fmap_5ftypes_3c_20internal_3a_3awrap_5ffor_5fes_2c_20args_5ftuple_20_3e_82',['tuple_map_types< internal::wrap_for_es, args_tuple >',['../namespaceseastar.html#group__utilities',1,'seastar']]], + ['tuple_5fmap_5ftypes_3c_20mapclass_2c_20std_3a_3atuple_3c_20elements_2e_2e_2e_20_3e_20_3e_83',['tuple_map_types< MapClass, std::tuple< Elements... > >',['../namespaceseastar.html#structseastar_1_1tuple__map__types_3_01MapClass_00_01std_1_1tuple_3_01Elements_8_8_8_01_4_01_4',1,'seastar']]], + ['tuple_5fsize_3c_20seastar_3a_3arpc_3a_3atuple_3c_20t_2e_2e_2e_20_3e_20_3e_84',['tuple_size< seastar::rpc::tuple< T... > >',['../structstd_1_1tuple__size_3_01seastar_1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.html',1,'std']]], + ['type_85',['type',['../group__fileio-module.html#a578954e17f6108a186996ff7503c5f3a',1,'seastar::directory_entry']]], + ['type_5findex_86',['type_index',['../structseastar_1_1scheduling__group__key__config.html#a48a297b55835c0bad7473813df57b493',1,'seastar::scheduling_group_key_config']]], + ['type_5finstance_5fid_87',['type_instance_id',['../classseastar_1_1scollectd_1_1type__instance__id.html',1,'seastar::scollectd']]], + ['typed_88',['typed',['../structseastar_1_1scollectd_1_1typed.html',1,'seastar::scollectd']]], + ['typed_5fvalue_89',['typed_value',['../structseastar_1_1scollectd_1_1typed__value.html',1,'seastar::scollectd::typed_value'],['../structseastar_1_1scollectd_1_1typed__value.html#ab3af964852c7d4f019fe981d8d96d403',1,'seastar::scollectd::typed_value::typed_value()']]], + ['typed_5fvalue_5fimpl_90',['typed_value_impl',['../structseastar_1_1scollectd_1_1typed__value__impl.html',1,'seastar::scollectd']]] +]; diff --git a/master/search/all_15.html b/master/search/all_15.html new file mode 100644 index 000000000..5a315d6e7 --- /dev/null +++ b/master/search/all_15.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_15.js b/master/search/all_15.js new file mode 100644 index 000000000..107dc6062 --- /dev/null +++ b/master/search/all_15.js @@ -0,0 +1,39 @@ +var searchData= +[ + ['u_0',['u',['../classseastar_1_1socket__address.html#a2b7f5efe3cf1bb59172ce25737d9eb5e',1,'seastar::socket_address']]], + ['udp_5fchannel_5fstate_1',['udp_channel_state',['../structseastar_1_1net_1_1udp__channel__state.html',1,'seastar::net']]], + ['udp_5fhdr_2',['udp_hdr',['../structseastar_1_1net_1_1udp__hdr.html',1,'seastar::net']]], + ['udpv4_5fqueue_5fsize_3',['udpv4_queue_size',['../structseastar_1_1net_1_1native__stack__options.html#af1a0c1c4e7e2b3e5dfceb1b15df58ef7',1,'seastar::net::native_stack_options']]], + ['ufo_4',['ufo',['../structseastar_1_1net_1_1virtio__options.html#a84bc47f8619d34f4eab3609f08f3ae2f',1,'seastar::net::virtio_options']]], + ['unaligned_5',['unaligned',['../structseastar_1_1unaligned.html',1,'seastar']]], + ['unaligned_3c_20uint16_5ft_20_3e_6',['unaligned< uint16_t >',['../structseastar_1_1unaligned.html',1,'seastar']]], + ['unaligned_3c_20uint32_5ft_20_3e_7',['unaligned< uint32_t >',['../structseastar_1_1unaligned.html',1,'seastar']]], + ['unauthorized_8',['unauthorized',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba36fd540552b3b1b34e8f0bd8897cbf1e',1,'seastar::http::reply']]], + ['underlying_5ffile_9',['underlying_file',['../classseastar_1_1layered__file__impl.html#a9bf7de881057a3369755554a22bd57fe',1,'seastar::layered_file_impl::underlying_file() noexcept'],['../classseastar_1_1layered__file__impl.html#afffc7708f6515ab1e1a1163ed30c639a',1,'seastar::layered_file_impl::underlying_file() const noexcept']]], + ['unexpected_5fstatus_5ferror_10',['unexpected_status_error',['../classseastar_1_1httpd_1_1unexpected__status__error.html',1,'seastar::httpd']]], + ['unix_5fdomain_5faddr_11',['unix_domain_addr',['../structseastar_1_1unix__domain__addr.html',1,'seastar']]], + ['unknown_5fexception_5ferror_12',['unknown_exception_error',['../classseastar_1_1rpc_1_1unknown__exception__error.html',1,'seastar::rpc']]], + ['unknown_5fhost_13',['unknown_host',['../classseastar_1_1net_1_1unknown__host.html',1,'seastar::net']]], + ['unknown_5fverb_5ferror_14',['unknown_verb_error',['../classseastar_1_1rpc_1_1unknown__verb__error.html',1,'seastar::rpc']]], + ['unlock_15',['unlock',['../classseastar_1_1shared__mutex.html#a9fce1cfe587ead0616846ff39e1781f9',1,'seastar::shared_mutex']]], + ['unlock_5fshared_16',['unlock_shared',['../classseastar_1_1shared__mutex.html#a183d4db544d9f176bf670737ad802c09',1,'seastar::shared_mutex']]], + ['unmarshal_5fone_17',['unmarshal_one',['../structseastar_1_1rpc_1_1unmarshal__one.html',1,'seastar::rpc']]], + ['unprocessable_5fentity_18',['unprocessable_entity',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba112020964a0fdd27ac1d72290ae7435d',1,'seastar::http::reply']]], + ['unread_19',['unread',['../classseastar_1_1pipe__reader.html#a2886c129d63b527f01b591ac249446e4',1,'seastar::pipe_reader']]], + ['unread_5foverflow_5fexception_20',['unread_overflow_exception',['../classseastar_1_1unread__overflow__exception.html',1,'seastar']]], + ['unregister_5fhandler_21',['unregister_handler',['../classseastar_1_1rpc_1_1protocol.html#aea92d1b5ddbf34c72a46e9cb17eff5fe',1,'seastar::rpc::protocol']]], + ['unregister_5fpriority_5fclass_22',['unregister_priority_class',['../classseastar_1_1fair__queue.html#a2681154c8e8e08263cca450b9c4d85fb',1,'seastar::fair_queue']]], + ['unsafe_5fbypass_5ffsync_23',['unsafe_bypass_fsync',['../structseastar_1_1reactor__options.html#ad66cb23f59ed5dfa8be8189313988692',1,'seastar::reactor_options']]], + ['unsupported_5fmedia_5ftype_24',['unsupported_media_type',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba9e6b71a081dee9f212c7d7cdffb8be13',1,'seastar::http::reply']]], + ['unused_25',['unused',['../group__program-options.html#structseastar_1_1program__options_1_1unused',1,'seastar::program_options']]], + ['update_5fcopy_5fstats_26',['update_copy_stats',['../structseastar_1_1net_1_1qp__stats__good.html#a6a812b59d13abce3af5e06c9b639c92a',1,'seastar::net::qp_stats_good']]], + ['update_5ffrags_5fstats_27',['update_frags_stats',['../structseastar_1_1net_1_1qp__stats__good.html#a21f2021467e8d2001f98a5386e3d9d80',1,'seastar::net::qp_stats_good']]], + ['update_5fio_5fbandwidth_28',['update_io_bandwidth',['../classseastar_1_1scheduling__group.html#a9307b0fc51b8a09a3a0a7f79dfc0f71f',1,'seastar::scheduling_group']]], + ['update_5fpkts_5fbunch_29',['update_pkts_bunch',['../structseastar_1_1net_1_1qp__stats__good.html#af0f1a2c097a283fcde1807b03b2c8ccd',1,'seastar::net::qp_stats_good']]], + ['upgrade_5frequired_30',['upgrade_required',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba3505cc0bb37b1764487d12fd4873807e',1,'seastar::http::reply']]], + ['uri_5ftoo_5flong_31',['uri_too_long',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba8729becd956c3e9352dd9dbc4f69fb21',1,'seastar::http::reply']]], + ['url_32',['url',['../classseastar_1_1httpd_1_1url.html',1,'seastar::httpd::url'],['../classseastar_1_1httpd_1_1url.html#a2144380983b139d083381a6945bcf2d1',1,'seastar::httpd::url::url(url &&)=default'],['../classseastar_1_1httpd_1_1url.html#a7e283b51d2b6360dd97062cbb1630d81',1,'seastar::httpd::url::url(const sstring &path)']]], + ['use_5fproxy_33',['use_proxy',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba910b02467b0674ae0042a7fff67c9052',1,'seastar::http::reply']]], + ['usecfmt_5fwrapper_34',['usecfmt_wrapper',['../namespaceseastar.html#structseastar_1_1usecfmt__wrapper',1,'seastar']]], + ['utilities_35',['Utilities',['../group__utilities.html',1,'']]] +]; diff --git a/master/search/all_16.html b/master/search/all_16.html new file mode 100644 index 000000000..b712f1647 --- /dev/null +++ b/master/search/all_16.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_16.js b/master/search/all_16.js new file mode 100644 index 000000000..d8757a047 --- /dev/null +++ b/master/search/all_16.js @@ -0,0 +1,36 @@ +var searchData= +[ + ['valid_0',['valid',['../classseastar_1_1shared__future.html#aa7c645fed1afdc0cd6be57483a083a66',1,'seastar::shared_future']]], + ['value_1',['value',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options::value< T >'],['../classseastar_1_1scollectd_1_1value.html',1,'seastar::scollectd::value< T >'],['../classseastar_1_1metrics_1_1label__instance.html#ae4ea5f3f61146bd06e224ba28de488c1',1,'seastar::metrics::label_instance::value()'],['../classseastar_1_1program__options_1_1value.html#a195b1f4cc809718a04c3a679224348a5',1,'seastar::program_options::value::value(option_group &group, std::string name, std::optional< T > default_value, std::string description)'],['../classseastar_1_1program__options_1_1value.html#af6da847d833067fe2de8ad2367f47f5b',1,'seastar::program_options::value::value(option_group &group, std::string name, unused)'],['../classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4.html#ad0139a1631568020bb2f2f18cc298522',1,'seastar::program_options::value< std::monostate >::value(option_group &group, std::string name, std::string description)'],['../classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4.html#a595943bc4061c857c75493ff6828d4d0',1,'seastar::program_options::value< std::monostate >::value(option_group &group, std::string name, unused)']]], + ['value_3c_20bool_20_3e_2',['value< bool >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20double_20_3e_3',['value< double >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20float_20_3e_4',['value< float >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20int_20_3e_5',['value< int >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20log_5flevel_20_3e_6',['value< log_level >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20log_5flevel_5fmap_20_3e_7',['value< log_level_map >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20logger_5ftimestamp_5fstyle_20_3e_8',['value< logger_timestamp_style >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20memory_3a_3aalloc_5ffailure_5fkind_20_3e_9',['value< memory::alloc_failure_kind >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20resource_3a_3acpuset_20_3e_10',['value< resource::cpuset >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20seastar_3a_3alogger_5fostream_5ftype_20_3e_11',['value< seastar::logger_ostream_type >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20std_3a_3amonostate_20_3e_12',['value< std::monostate >',['../classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4.html',1,'seastar::program_options']]], + ['value_3c_20std_3a_3astring_20_3e_13',['value< std::string >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20typed_3c_20t_20_3e_20_3e_14',['value< typed< T > >',['../classseastar_1_1scollectd_1_1value_3_01typed_3_01T_01_4_01_4.html',1,'seastar::scollectd']]], + ['value_3c_20unsigned_20_3e_15',['value< unsigned >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_5flist_16',['value_list',['../classseastar_1_1scollectd_1_1value__list.html',1,'seastar::scollectd']]], + ['value_5fof_17',['value_of',['../namespaceseastar.html#a110708e8c553d540525f4b7ad0499838',1,'seastar']]], + ['value_5ftype_18',['value_type',['../classseastar_1_1future.html#a221dfd624fc12b0d5f8b58af000d7830',1,'seastar::future::value_type()'],['../structseastar_1_1futurize.html#ad0b71d52a42c43b2f068014df662b986',1,'seastar::futurize::value_type()']]], + ['values_5fcopy_19',['values_copy',['../structseastar_1_1metrics_1_1impl_1_1values__copy.html',1,'seastar::metrics::impl']]], + ['values_5fimpl_20',['values_impl',['../classseastar_1_1scollectd_1_1values__impl.html',1,'seastar::scollectd']]], + ['vector_5fdata_5fsink_21',['vector_data_sink',['../classseastar_1_1vector__data__sink.html',1,'seastar']]], + ['verification_5ferror_22',['verification_error',['../classseastar_1_1tls_1_1verification__error.html',1,'seastar::tls']]], + ['verify_5fmandatory_5fparams_23',['verify_mandatory_params',['../classseastar_1_1httpd_1_1handler__base.html#a550bd79ab5525f3087d03be7e01f7b9e',1,'seastar::httpd::handler_base']]], + ['virtio_5foptions_24',['virtio_options',['../structseastar_1_1net_1_1virtio__options.html',1,'seastar::net']]], + ['virtio_5fopts_25',['virtio_opts',['../structseastar_1_1net_1_1native__stack__options.html#a892c1330e4c535a3f09f08ba499d1512',1,'seastar::net::native_stack_options']]], + ['virtio_5fring_5fsize_26',['virtio_ring_size',['../structseastar_1_1net_1_1virtio__options.html#a80a057eff829cd765405632bb16f4862',1,'seastar::net::virtio_options']]], + ['visit_27',['visit',['../group__utilities.html#ga7542d7ac502fa07ff8de2463b4300b27',1,'seastar']]], + ['visit_5fgroup_5fend_28',['visit_group_end',['../classseastar_1_1program__options_1_1options__descriptor.html#ab139ebdb447e5325f3971ea521842cf3',1,'seastar::program_options::options_descriptor::visit_group_end()'],['../classseastar_1_1program__options_1_1options__mutator.html#a24ab00a351b6d399b66215e8f9ce7a58',1,'seastar::program_options::options_mutator::visit_group_end()=0']]], + ['visit_5fgroup_5fstart_29',['visit_group_start',['../classseastar_1_1program__options_1_1options__mutator.html#a6e560c7f9195e49b2d002279415f3086',1,'seastar::program_options::options_mutator::visit_group_start()'],['../classseastar_1_1program__options_1_1options__descriptor.html#ad29b7ff554fd4fba2992743bdf3bcd6f',1,'seastar::program_options::options_descriptor::visit_group_start(const std::string &name, bool used)=0']]], + ['visit_5fselection_5fvalue_30',['visit_selection_value',['../classseastar_1_1program__options_1_1options__descriptor.html#a5815735ecf37ec69d5a1c4f04097b05a',1,'seastar::program_options::options_descriptor::visit_selection_value()'],['../classseastar_1_1program__options_1_1options__mutator.html#a80be154ef5c3a1cefd634b0b35da2817',1,'seastar::program_options::options_mutator::visit_selection_value(const std::vector< std::string > &candidate_names, std::size_t &selected_candidate)=0']]], + ['visit_5fvalue_31',['visit_value',['../classseastar_1_1program__options_1_1options__mutator.html#afcd206ba5f4109a9c74617a9a5f9a6cd',1,'seastar::program_options::options_mutator::visit_value(bool &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#a17d784616f44a4797d4d21e2bf29e873',1,'seastar::program_options::options_mutator::visit_value(std::unordered_map< sstring, log_level > &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#ac0e212083e7f461909ab85036a749afa',1,'seastar::program_options::options_mutator::visit_value(memory::alloc_failure_kind &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#a18f9c54f03dec72966db0b8051698781',1,'seastar::program_options::options_mutator::visit_value(logger_ostream_type &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#ad15f37e5fab639308934e0f4b56be91f',1,'seastar::program_options::options_mutator::visit_value(logger_timestamp_style &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#ae5c2a3cfe238c0ec2492adfc032b86fa',1,'seastar::program_options::options_mutator::visit_value(log_level &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#a0b816d399c691692b608337d6b296c77',1,'seastar::program_options::options_mutator::visit_value(std::set< unsigned > &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#ae1bb8c8b3b02da0f75a147b981604622',1,'seastar::program_options::options_mutator::visit_value(std::string &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#a62f2dfb2e8dc1b312a37e12088d4dad1',1,'seastar::program_options::options_mutator::visit_value(double &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#a68a3e77c2656b08ead0407061b7e9185',1,'seastar::program_options::options_mutator::visit_value(float &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#a7d65cafd9f7e106df9c32e1d48becc5c',1,'seastar::program_options::options_mutator::visit_value(unsigned &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#addcd489ae9b8d6221afd9e6aab516a10',1,'seastar::program_options::options_mutator::visit_value(int &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#a405067360d8d24aa3aab71fe463602eb',1,'seastar::program_options::options_mutator::visit_value()=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#a32e3124a6463c50439bfef585606d2ab',1,'seastar::program_options::options_descriptor::visit_value(const std::unordered_map< sstring, log_level > *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#ac4026ae8d0065cd7a355acaa7dc713ee',1,'seastar::program_options::options_descriptor::visit_value(const memory::alloc_failure_kind *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#a27e85173a26230cb8d403ace9290a186',1,'seastar::program_options::options_descriptor::visit_value(const logger_ostream_type *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#ae51b82e88f592efc13653f9615b44d7d',1,'seastar::program_options::options_descriptor::visit_value(const logger_timestamp_style *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#a657bcc55c80ff99c9801dcee04891b25',1,'seastar::program_options::options_descriptor::visit_value(const log_level *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#a02a2c0636e7932c891b1f73aaf496e3f',1,'seastar::program_options::options_descriptor::visit_value(const std::set< unsigned > *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#acc6967e6be44d12a83e57f56c150c221',1,'seastar::program_options::options_descriptor::visit_value(const std::string *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#a27e9ee7d4566b2eaa8caf1ffc249c700',1,'seastar::program_options::options_descriptor::visit_value(const double *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#a90062c9fe22f5418eda46255e3daef17',1,'seastar::program_options::options_descriptor::visit_value(const float *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#acc76ccdebe2630c8f89563a6d9640619',1,'seastar::program_options::options_descriptor::visit_value(const unsigned *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#acf1dcb19fa137de97877144927a43d03',1,'seastar::program_options::options_descriptor::visit_value(const int *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#af9e37963587a6333240c9f38e1d065b3',1,'seastar::program_options::options_descriptor::visit_value(const bool *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#ae07f8904b54b0a6498e528759946ec0d',1,'seastar::program_options::options_descriptor::visit_value()=0']]], + ['visit_5fvalue_5fmetadata_32',['visit_value_metadata',['../classseastar_1_1program__options_1_1options__descriptor.html#a5ff871d31ced341995d610627ea6985a',1,'seastar::program_options::options_descriptor::visit_value_metadata()'],['../classseastar_1_1program__options_1_1options__mutator.html#a17dd40fbe5f6c2a8041ad856e0441386',1,'seastar::program_options::options_mutator::visit_value_metadata()']]] +]; diff --git a/master/search/all_17.html b/master/search/all_17.html new file mode 100644 index 000000000..7fc86ec80 --- /dev/null +++ b/master/search/all_17.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_17.js b/master/search/all_17.js new file mode 100644 index 000000000..8efd4a71f --- /dev/null +++ b/master/search/all_17.js @@ -0,0 +1,49 @@ +var searchData= +[ + ['wait_0',['wait',['../classseastar_1_1future.html#a205a73ce01247cd7a8995569dedf78b1',1,'seastar::future::wait()'],['../classseastar_1_1condition__variable.html#a472036511ce19186d8b9a6b253b83271',1,'seastar::condition_variable::wait() noexcept'],['../classseastar_1_1condition__variable.html#a69703300a8e56a520269062f062aebda',1,'seastar::condition_variable::wait(std::chrono::time_point< Clock, Duration > timeout) noexcept'],['../classseastar_1_1condition__variable.html#ae240a64c4c1ffa90ae2f0ee139b7ca93',1,'seastar::condition_variable::wait(std::chrono::duration< Rep, Period > timeout) noexcept'],['../classseastar_1_1condition__variable.html#a1d1c217051e83e2ce2c8c56596b89826',1,'seastar::condition_variable::wait(Pred &&pred) noexcept'],['../classseastar_1_1condition__variable.html#acfbb0f0ebdcb18950b26f6f0077465d0',1,'seastar::condition_variable::wait(std::chrono::time_point< Clock, Duration > timeout, Pred &&pred) noexcept'],['../classseastar_1_1condition__variable.html#a9a3099a56d8d91e48b31ad63ad2944cf',1,'seastar::condition_variable::wait(std::chrono::duration< Rep, Period > timeout, Pred &&pred) noexcept'],['../classseastar_1_1experimental_1_1fsnotifier.html#ae58c5bff08967754d36d268749aac4bd',1,'seastar::experimental::fsnotifier::wait()'],['../classseastar_1_1basic__semaphore.html#a30f599e383c15e039406500af0629083',1,'seastar::basic_semaphore::wait(size_t nr=1) noexcept'],['../classseastar_1_1basic__semaphore.html#a599504c4cbf82ecbd44c7bee64682474',1,'seastar::basic_semaphore::wait(time_point timeout, size_t nr=1) noexcept'],['../classseastar_1_1basic__semaphore.html#a07b4a958ebb11295203db8fda96a4a05',1,'seastar::basic_semaphore::wait(abort_source &as, size_t nr=1) noexcept'],['../classseastar_1_1basic__semaphore.html#a73a29789c136c0ccc3a69517a91ff9f7',1,'seastar::basic_semaphore::wait(duration timeout, size_t nr=1) noexcept'],['../classseastar_1_1experimental_1_1process.html#a55a4d51835793d1dd6fac0c83decc4bf',1,'seastar::experimental::process::wait()']]], + ['wait_5fexited_1',['wait_exited',['../classseastar_1_1experimental_1_1process.html#structseastar_1_1experimental_1_1process_1_1wait__exited',1,'seastar::experimental::process']]], + ['wait_5ffor_5feof_5fon_5fshutdown_2',['wait_for_eof_on_shutdown',['../namespaceseastar_1_1tls.html#a8bcd47d721cc8f1c05f7dd5a86970710',1,'seastar::tls::tls_options']]], + ['wait_5finput_5fshutdown_3',['wait_input_shutdown',['../classseastar_1_1connected__socket.html#afe424da1f291fec342fd150d51421051',1,'seastar::connected_socket']]], + ['wait_5fsignaled_4',['wait_signaled',['../classseastar_1_1experimental_1_1process.html#structseastar_1_1experimental_1_1process_1_1wait__signaled',1,'seastar::experimental::process']]], + ['wait_5fsignature_5',['wait_signature',['../structseastar_1_1rpc_1_1wait__signature.html',1,'seastar::rpc']]], + ['wait_5fsignature_3c_20future_3c_20no_5fwait_5ftype_20_3e_20_3e_6',['wait_signature< future< no_wait_type > >',['../structseastar_1_1rpc_1_1wait__signature_3_01future_3_01no__wait__type_01_4_01_4.html',1,'seastar::rpc']]], + ['wait_5fsignature_3c_20future_3c_20t_2e_2e_2e_20_3e_20_3e_7',['wait_signature< future< T... > >',['../structseastar_1_1rpc_1_1wait__signature_3_01future_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc']]], + ['wait_5fsignature_3c_20no_5fwait_5ftype_20_3e_8',['wait_signature< no_wait_type >',['../structseastar_1_1rpc_1_1wait__signature_3_01no__wait__type_01_4.html',1,'seastar::rpc']]], + ['wait_5ftype_9',['wait_type',['../structseastar_1_1rpc_1_1wait__type.html',1,'seastar::rpc']]], + ['waiters_10',['waiters',['../classseastar_1_1basic__semaphore.html#a94b2090cfe27436309531d42ee0d2663',1,'seastar::basic_semaphore']]], + ['waiting_5ftask_11',['waiting_task',['../classseastar_1_1task.html#a317fecc9b307fe7f82403d04ccdc4c41',1,'seastar::task::waiting_task()'],['../classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__unbuffered__promise.html#a084b0bd5ef486f96428e2956e7a29763',1,'seastar::coroutine::experimental::internal::generator_unbuffered_promise::waiting_task()'],['../structseastar_1_1coroutine_1_1switch__to.html#aac4c056f9de74753f4fb23b0baf1a2b4',1,'seastar::coroutine::switch_to::waiting_task()'],['../classseastar_1_1lambda__task.html#a699e26f1f722d9663f702d6847898260',1,'seastar::lambda_task::waiting_task()']]], + ['watch_12',['watch',['../classseastar_1_1experimental_1_1fsnotifier_1_1watch.html',1,'seastar::experimental::fsnotifier']]], + ['watch_5ftoken_13',['watch_token',['../classseastar_1_1experimental_1_1fsnotifier.html#a11d0e044c2b38fdd5b3f446dc0f7a8c1',1,'seastar::experimental::fsnotifier']]], + ['weak_5fptr_14',['weak_ptr',['../classseastar_1_1weak__ptr.html',1,'seastar']]], + ['weak_5fptr_3c_20seastar_3a_3arpc_3a_3aclient_20_3e_15',['weak_ptr< seastar::rpc::client >',['../classseastar_1_1weak__ptr.html',1,'seastar']]], + ['weakly_5freferencable_16',['weakly_referencable',['../classseastar_1_1weakly__referencable.html',1,'seastar']]], + ['weakly_5freferencable_3c_20client_20_3e_17',['weakly_referencable< client >',['../classseastar_1_1weakly__referencable.html',1,'seastar']]], + ['websocket_18',['WebSocket',['../group__websocket.html',1,'']]], + ['websocket_5fparser_19',['websocket_parser',['../classseastar_1_1experimental_1_1websocket_1_1websocket__parser.html',1,'seastar::experimental::websocket']]], + ['what_20',['what',['../classseastar_1_1broken__condition__variable.html#ad21d8bed417a7ba81cf8b7207a13464f',1,'seastar::broken_condition_variable::what()'],['../classseastar_1_1condition__variable__timed__out.html#aa464a5b2a577b52bcfe3b4720b1c5f47',1,'seastar::condition_variable_timed_out::what()'],['../classseastar_1_1broken__semaphore.html#a4823f771f89fce742cae5693aec9a69a',1,'seastar::broken_semaphore::what()'],['../classseastar_1_1semaphore__timed__out.html#a3366d49a705afdb2dbf592675c3a921f',1,'seastar::semaphore_timed_out::what()'],['../classseastar_1_1semaphore__aborted.html#a479946b00c5a215b77de513b914f35bc',1,'seastar::semaphore_aborted::what()'],['../classseastar_1_1named__semaphore__timed__out.html#aec0373c87d04ca6ebc202ee4a6211b7d',1,'seastar::named_semaphore_timed_out::what()'],['../classseastar_1_1broken__named__semaphore.html#a2fb0326d6c966e03f845eda7495f8613',1,'seastar::broken_named_semaphore::what()'],['../classseastar_1_1named__semaphore__aborted.html#a0535cd9cefbd6a02584ef5d81f0265d3',1,'seastar::named_semaphore_aborted::what()'],['../classseastar_1_1sleep__aborted.html#a2db83f15db608027c7155ff86ba5d4fe',1,'seastar::sleep_aborted::what()']]], + ['when_21',['when',['../classseastar_1_1condition__variable.html#ac33ca8831eaebe26de645295cc879dbe',1,'seastar::condition_variable::when(std::chrono::time_point< Clock, Duration > timeout, Pred &&pred) noexcept'],['../classseastar_1_1condition__variable.html#a17dc523c82989f4cd0fce471e639c9ce',1,'seastar::condition_variable::when(std::chrono::duration< Rep, Period > timeout, Pred &&pred) noexcept'],['../classseastar_1_1condition__variable.html#a6fa3fbd7e5b01d1a2aa485ca96e979e6',1,'seastar::condition_variable::when(Pred &&pred) noexcept'],['../classseastar_1_1condition__variable.html#a9718958bff92a6b27375d92221d8dfb5',1,'seastar::condition_variable::when(std::chrono::duration< Rep, Period > timeout) noexcept'],['../classseastar_1_1condition__variable.html#a17d716ed701de0789d0f826fd29187c4',1,'seastar::condition_variable::when(std::chrono::time_point< Clock, Duration > timeout) noexcept'],['../classseastar_1_1condition__variable.html#a31154d5a115066cafa5881883835d542',1,'seastar::condition_variable::when() noexcept']]], + ['when_5fall_22',['when_all',['../group__future-util.html#ga64cf7dbb446c6618955e23959ee79401',1,'seastar::when_all(FutOrFuncs &&... fut_or_funcs) noexcept'],['../group__future-util.html#ga96aa99a9ffadccc8a70971d8aff440bf',1,'seastar::when_all(FutureIterator begin, FutureIterator end) noexcept']]], + ['when_5fall_5fsucceed_23',['when_all_succeed',['../group__future-util.html#ga38a94c0a3e1ed93ff40960f985565053',1,'seastar::when_all_succeed(FutOrFuncs &&... fut_or_funcs) noexcept'],['../group__future-util.html#gafd759ba64a161713c7bdd23b973a885d',1,'seastar::when_all_succeed(FutureIterator begin, FutureIterator end) noexcept'],['../group__future-util.html#ga7e28110d0eab40f3ad5d46502b81f893',1,'seastar::when_all_succeed(std::vector< future< T > > &&futures) noexcept']]], + ['when_5fany_24',['when_any',['../namespaceseastar.html#acc349df24cae08c95c0957152b301a77',1,'seastar::when_any(FutureIterator begin, FutureIterator end) noexcept -> future< when_any_result< std::vector< std::decay_t< typename std::iterator_traits< FutureIterator >::value_type > > > >'],['../namespaceseastar.html#a1b667c111c0429ed85a583e9d2429e4d',1,'seastar::when_any(FutOrFuncs &&... fut_or_funcs) noexcept']]], + ['when_5fany_5fresult_25',['when_any_result',['../namespaceseastar.html#structseastar_1_1when__any__result',1,'seastar']]], + ['win_5fscale_26',['win_scale',['../structseastar_1_1net_1_1tcp__option_1_1win__scale.html',1,'seastar::net::tcp_option']]], + ['with_5fallocation_5ffailures_27',['with_allocation_failures',['../namespaceseastar_1_1memory.html#a1d586eb8e9aac6dcd2ad2cd686a51717',1,'seastar::memory']]], + ['with_5fclock_28',['with_clock',['../group__future-module.html#structseastar_1_1with__clock',1,'seastar']]], + ['with_5ffile_29',['with_file',['../group__fileio-module.html#gad153d18d9d9b8a859e2a13b7fa7c6289',1,'seastar']]], + ['with_5ffile_5fclose_5fon_5ffailure_30',['with_file_close_on_failure',['../group__fileio-module.html#ga6110ea7710f6a4bd6962257c7cd4ac30',1,'seastar']]], + ['with_5fgate_31',['with_gate',['../group__fiber-module.html#ga9efdca247c973194bd5f2cfcf7c78925',1,'seastar::gate']]], + ['with_5flock_32',['with_lock',['../group__future-util.html#gab8fd3e3a0e5ba88fc4aa236494c1d00b',1,'seastar::with_lock()'],['../group__fiber-module.html#ga67bfe8983445964e0c98afd6276edf19',1,'seastar::shared_mutex::with_lock()']]], + ['with_5fscheduling_5fgroup_33',['with_scheduling_group',['../group__future-util.html#ga5f4c4444e9d92e64153713838607cbbc',1,'seastar']]], + ['with_5fshared_34',['with_shared',['../group__fiber-module.html#gab41d94cc9491377a0efc4186c35bb8ec',1,'seastar::shared_mutex']]], + ['with_5ftimeout_35',['with_timeout',['../group__future-util.html#ga90966b5862e5de249200714070a8db21',1,'seastar']]], + ['without_5fpreemption_5fcheck_36',['without_preemption_check',['../structseastar_1_1coroutine_1_1without__preemption__check.html',1,'seastar::coroutine']]], + ['work_5fwaiting_5fon_5freactor_37',['work_waiting_on_reactor',['../namespaceseastar.html#a1c1b268cbc5c76258312d94b3d079556',1,'seastar']]], + ['wrap_38',['wrap',['../structseastar_1_1scollectd_1_1value_1_1wrap.html',1,'seastar::scollectd::value']]], + ['wrap_5fclient_39',['wrap_client',['../namespaceseastar_1_1tls.html#a58652acc3d22cf21afe84cd1a487e54b',1,'seastar::tls::wrap_client(shared_ptr< certificate_credentials >, connected_socket &&, tls_options options={})'],['../namespaceseastar_1_1tls.html#a24152a7cd28c5cedd55c8b9cebe2ea98',1,'seastar::tls::wrap_client(shared_ptr< certificate_credentials >, connected_socket &&, sstring name)']]], + ['write_40',['write',['../structseastar_1_1json_1_1json__base.html#a7ba722fef818ece8a3337bffd4f41826',1,'seastar::json::json_base::write()'],['../classseastar_1_1json_1_1formatter.html#a4565321b9768f6c807566434863fb249',1,'seastar::json::formatter::write(output_stream< char > &s, double d)'],['../classseastar_1_1json_1_1formatter.html#abf5fde1f25dbb81df19d417d7bf05bfa',1,'seastar::json::formatter::write(output_stream< char > &s, const char *str)'],['../classseastar_1_1json_1_1formatter.html#aaf19a28982509f9589dffa2dec9a2138',1,'seastar::json::formatter::write(output_stream< char > &s, bool d)'],['../classseastar_1_1json_1_1formatter.html#ae8233ee45a14fe9f1562ddfcebf0f0a4',1,'seastar::json::formatter::write(output_stream< char > &s, std::vector< Args... > vec)'],['../classseastar_1_1json_1_1formatter.html#a40fdfc48a86e88244dd702066a3e9820',1,'seastar::json::formatter::write(output_stream< char > &s, const date_time &d)'],['../classseastar_1_1json_1_1formatter.html#a6f97669d3678deffed3a8ef5305f60b8',1,'seastar::json::formatter::write(output_stream< char > &s, Jsonable obj)'],['../classseastar_1_1json_1_1formatter.html#a4e1611d33e2160fbc73983bbd3bf6d0a',1,'seastar::json::formatter::write(output_stream< char > &s, unsigned long l)'],['../classseastar_1_1json_1_1jsonable.html#a1304ac52e876e803fba770bd8b464be6',1,'seastar::json::jsonable::write()'],['../classseastar_1_1json_1_1formatter.html#a68e96c17fd31a040f950b4c7c242bd7d',1,'seastar::json::formatter::write(output_stream< char > &s, float f)'],['../classseastar_1_1json_1_1formatter.html#a4b39cf481feeea11ed1193959bd16666',1,'seastar::json::formatter::write(output_stream< char > &s, long n)'],['../classseastar_1_1json_1_1formatter.html#ac8ddc599709af835f8e221cd04a6db52',1,'seastar::json::formatter::write(output_stream< char > &s, int n)'],['../classseastar_1_1json_1_1formatter.html#a8f29cd5e9c79e6ef6239369a2b6f8c60',1,'seastar::json::formatter::write(output_stream< char > &s, const sstring &str)'],['../classseastar_1_1pipe__writer.html#a2f039dc48be3d09ea3507762b1da399f',1,'seastar::pipe_writer::write()'],['../structseastar_1_1json_1_1json__void.html#a57130109925b121ef9c5a29f28d1d7d7',1,'seastar::json::json_void::write()']]], + ['write_5fbehind_41',['write_behind',['../namespaceseastar.html#a24c692693885f44b3872505a56b25fc1',1,'seastar::file_output_stream_options']]], + ['write_5fbody_42',['write_body',['../structseastar_1_1http_1_1request.html#a449f34d75f98bad15df910cdb17a0316',1,'seastar::http::request::write_body(const sstring &content_type, size_t len, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)'],['../structseastar_1_1http_1_1request.html#aa8d04cf2bb5cbbc089cb8fb97a864415',1,'seastar::http::request::write_body(const sstring &content_type, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)'],['../structseastar_1_1http_1_1request.html#a8b6de236f71ff5ec74bac52d233edd24',1,'seastar::http::request::write_body(const sstring &content_type, sstring content)'],['../structseastar_1_1http_1_1reply.html#af5a4a8868b3b9e7c36033b7d3d737cfb',1,'seastar::http::reply::write_body(const sstring &content_type, sstring content)'],['../structseastar_1_1http_1_1reply.html#a0a03fbc0116a2832df3325605a5ba9e4',1,'seastar::http::reply::write_body(const sstring &content_type, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)']]], + ['write_5flock_43',['write_lock',['../classseastar_1_1basic__rwlock.html#a4398bb9b96ba08197aba88eba8e0d09d',1,'seastar::basic_rwlock']]], + ['write_5funlock_44',['write_unlock',['../classseastar_1_1basic__rwlock.html#afff43c7129ab24a675b5898368870119',1,'seastar::basic_rwlock']]], + ['writeable_5feventfd_45',['writeable_eventfd',['../classseastar_1_1writeable__eventfd.html',1,'seastar']]] +]; diff --git a/master/search/all_18.html b/master/search/all_18.html new file mode 100644 index 000000000..86a2438c1 --- /dev/null +++ b/master/search/all_18.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_18.js b/master/search/all_18.js new file mode 100644 index 000000000..73e3ab97c --- /dev/null +++ b/master/search/all_18.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['x509_5fcert_0',['x509_cert',['../classseastar_1_1tls_1_1x509__cert.html',1,'seastar::tls']]] +]; diff --git a/master/search/all_19.html b/master/search/all_19.html new file mode 100644 index 000000000..e31c8c9a2 --- /dev/null +++ b/master/search/all_19.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_19.js b/master/search/all_19.js new file mode 100644 index 000000000..9f489ae32 --- /dev/null +++ b/master/search/all_19.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['yield_0',['yield',['../classseastar_1_1thread.html#a83cd1c18fec245503dfa1c94acb0ca90',1,'seastar::thread::yield()'],['../group__future-util.html#gadf2b981c394d2c98ead6224782f7ec00',1,'seastar::yield()']]], + ['yield_5fawaiter_1',['yield_awaiter',['../structseastar_1_1coroutine_1_1experimental_1_1internal_1_1yield__awaiter.html',1,'seastar::coroutine::experimental::internal']]] +]; diff --git a/master/search/all_1a.html b/master/search/all_1a.html new file mode 100644 index 000000000..998ee74cd --- /dev/null +++ b/master/search/all_1a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_1a.js b/master/search/all_1a.js new file mode 100644 index 000000000..2e1d7c1b8 --- /dev/null +++ b/master/search/all_1a.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['_7edeferred_5fclose_0',['~deferred_close',['../classseastar_1_1deferred__close.html#a753d4c869b2b810f5b6d0efe9b03ca60',1,'seastar::deferred_close']]], + ['_7edeferred_5fstop_1',['~deferred_stop',['../classseastar_1_1deferred__stop.html#ad7e8928394dbc1b8e32737d4c5aeefbd',1,'seastar::deferred_stop']]], + ['_7edeleter_2',['~deleter',['../group__memory-module.html#ga99581e6ef59c72835ae9518b87d4e20a',1,'seastar::deleter']]], + ['_7eforeign_5fptr_3',['~foreign_ptr',['../classseastar_1_1foreign__ptr.html#ab8c06f30a042c17f1d07c35344730d05',1,'seastar::foreign_ptr']]], + ['_7ehandler_5fregistration_4',['~handler_registration',['../classseastar_1_1httpd_1_1handler__registration.html#a0454b7159261c7d2518940eff4bf2488',1,'seastar::httpd::handler_registration']]], + ['_7eholder_5',['~holder',['../classseastar_1_1gate_1_1holder.html#a333662a798624966bff6dcefd4bd3fec',1,'seastar::gate::holder']]], + ['_7ematch_5frule_6',['~match_rule',['../classseastar_1_1httpd_1_1match__rule.html#a2f1fafcc6d39398a2493644bbdba9cee',1,'seastar::httpd::match_rule']]], + ['_7eroutes_7',['~routes',['../classseastar_1_1httpd_1_1routes.html#ad9c74d0965c789af80effc259f3237f7',1,'seastar::httpd::routes']]], + ['_7erule_5fregistration_8',['~rule_registration',['../classseastar_1_1httpd_1_1rule__registration.html#a990c6489919f52425c9099dfdff5ce25',1,'seastar::httpd::rule_registration']]], + ['_7esharded_9',['~sharded',['../classseastar_1_1sharded.html#a18300a36d5bab90ba24612a5d8c6c6cf',1,'seastar::sharded']]], + ['_7ethread_10',['~thread',['../classseastar_1_1thread.html#a085b3825915b20f78c45532f684eb1d2',1,'seastar::thread']]], + ['_7etimer_11',['~timer',['../classseastar_1_1timer.html#a3305c74470aeca7ce56249210ef3248f',1,'seastar::timer']]] +]; diff --git a/master/search/all_2.html b/master/search/all_2.html new file mode 100644 index 000000000..98e648c91 --- /dev/null +++ b/master/search/all_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_2.js b/master/search/all_2.js new file mode 100644 index 000000000..a238c98f5 --- /dev/null +++ b/master/search/all_2.js @@ -0,0 +1,35 @@ +var searchData= +[ + ['back_0',['back',['../classseastar_1_1basic__sstring.html#a1bd6d002ac7a5b3a2d3cd75e91c36b29',1,'seastar::basic_sstring::back() const noexcept'],['../classseastar_1_1basic__sstring.html#a006929a484ed2d4bfa3991f0068d02fd',1,'seastar::basic_sstring::back() noexcept']]], + ['backtrace_1',['backtrace',['../structseastar_1_1memory_1_1allocation__site.html#a96ba5a2f38e86a6227989941c7f408a6',1,'seastar::memory::allocation_site']]], + ['bad_5fchunk_5fexception_2',['bad_chunk_exception',['../classseastar_1_1httpd_1_1bad__chunk__exception.html',1,'seastar::httpd']]], + ['bad_5fgateway_3',['bad_gateway',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba34b1f5a8577eed2180e10076d1aad14c',1,'seastar::http::reply']]], + ['bad_5fparam_5fexception_4',['bad_param_exception',['../classseastar_1_1httpd_1_1bad__param__exception.html',1,'seastar::httpd']]], + ['bad_5frequest_5',['bad_request',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba373d9e6e1aaf30e691dadb57eb22d7b1',1,'seastar::http::reply']]], + ['bad_5frequest_5fexception_6',['bad_request_exception',['../classseastar_1_1httpd_1_1bad__request__exception.html',1,'seastar::httpd']]], + ['base_5fexception_7',['base_exception',['../classseastar_1_1httpd_1_1base__exception.html',1,'seastar::httpd']]], + ['basic_5frequest_5fsize_8',['basic_request_size',['../group__rpc.html#acafbc7694b8af53998669702fb0b0736',1,'seastar::rpc::resource_limits']]], + ['basic_5frwlock_9',['basic_rwlock',['../classseastar_1_1basic__rwlock.html',1,'seastar']]], + ['basic_5fsemaphore_10',['basic_semaphore',['../classseastar_1_1basic__semaphore.html#ad47068098c0bd426c9eb51ce7dafd2b6',1,'seastar::basic_semaphore::basic_semaphore(basic_semaphore &&other) noexcept(std::is_nothrow_move_constructible_v< exception_factory >)'],['../classseastar_1_1basic__semaphore.html#a023e3a8263ea2cd93a26987265ddee2e',1,'seastar::basic_semaphore::basic_semaphore(size_t count) noexcept(std::is_nothrow_default_constructible_v< exception_factory >)'],['../classseastar_1_1basic__semaphore.html',1,'seastar::basic_semaphore< ExceptionFactory, Clock >']]], + ['basic_5fsemaphore_3c_20semaphore_5fdefault_5fexception_5ffactory_20_3e_11',['basic_semaphore< semaphore_default_exception_factory >',['../classseastar_1_1basic__semaphore.html',1,'seastar']]], + ['basic_5fsemaphore_3c_20semaphore_5fdefault_5fexception_5ffactory_2c_20rpc_5fclock_5ftype_20_3e_12',['basic_semaphore< semaphore_default_exception_factory, rpc_clock_type >',['../classseastar_1_1basic__semaphore.html',1,'seastar']]], + ['basic_5fsemaphore_3c_20semaphore_5fdefault_5fexception_5ffactory_2c_20typename_20timer_3c_3e_3a_3aclock_20_3e_13',['basic_semaphore< semaphore_default_exception_factory, typename timer<>::clock >',['../classseastar_1_1basic__semaphore.html',1,'seastar']]], + ['basic_5fsstring_14',['basic_sstring',['../classseastar_1_1basic__sstring.html',1,'seastar']]], + ['basic_5fvalue_15',['basic_value',['../classseastar_1_1program__options_1_1basic__value.html',1,'seastar::program_options']]], + ['batch_5fflushes_16',['batch_flushes',['../namespaceseastar.html#a4462451fc906c4570664007e559dcb54',1,'seastar::output_stream_options']]], + ['begin_17',['begin',['../classseastar_1_1temporary__buffer.html#a5a34839ca39634995e030b79bcc49565',1,'seastar::temporary_buffer']]], + ['bloat_5ffactor_18',['bloat_factor',['../group__rpc.html#ab3af1cd684fdf636242c6015d40e44ab',1,'seastar::rpc::resource_limits']]], + ['blocked_5freactor_5fnotify_5fms_19',['blocked_reactor_notify_ms',['../structseastar_1_1reactor__options.html#ab7a092b746c6f6644396f649e5126396',1,'seastar::reactor_options']]], + ['blocked_5freactor_5freport_5fformat_5foneline_20',['blocked_reactor_report_format_oneline',['../structseastar_1_1reactor__options.html#a8bcff68de76d941f51d45a80afaa8f55',1,'seastar::reactor_options']]], + ['blocked_5freactor_5freports_5fper_5fminute_21',['blocked_reactor_reports_per_minute',['../structseastar_1_1reactor__options.html#aca2a73bd33a51a691d992a7b7259717a',1,'seastar::reactor_options']]], + ['bool_5fclass_22',['bool_class',['../classseastar_1_1bool__class.html#af7545103a20094d93e46b59fc8e66d36',1,'seastar::bool_class::bool_class(bool v) noexcept'],['../classseastar_1_1bool__class.html#a23672dd3362e77389584a4ccaa113a01',1,'seastar::bool_class::bool_class() noexcept'],['../classseastar_1_1bool__class.html',1,'seastar::bool_class< Tag >']]], + ['bool_5fclass_3c_20class_20skip_5fwhen_5fempty_5ftag_20_3e_23',['bool_class< class skip_when_empty_tag >',['../classseastar_1_1bool__class.html',1,'seastar']]], + ['broadcast_24',['broadcast',['../classseastar_1_1condition__variable.html#a703ec890958f07db1af388617dec20e7',1,'seastar::condition_variable']]], + ['broken_25',['broken',['../classseastar_1_1condition__variable.html#ada910579c5a1042a1d74e13c09cd0a46',1,'seastar::condition_variable::broken()'],['../classseastar_1_1basic__semaphore.html#af627627cf8b0aa84441c4c6d0013cc53',1,'seastar::basic_semaphore::broken() noexcept'],['../classseastar_1_1basic__semaphore.html#ac246eb13e4304f74fe3bb13ada754a91',1,'seastar::basic_semaphore::broken(const Exception &ex) noexcept'],['../group__fiber-module.html#ga8926bf4790fb7886e18ee5987018d555',1,'seastar::basic_semaphore::broken(std::exception_ptr ex) noexcept']]], + ['broken_5fcondition_5fvariable_26',['broken_condition_variable',['../classseastar_1_1broken__condition__variable.html',1,'seastar']]], + ['broken_5fnamed_5fsemaphore_27',['broken_named_semaphore',['../classseastar_1_1broken__named__semaphore.html',1,'seastar']]], + ['broken_5fpipe_5fexception_28',['broken_pipe_exception',['../classseastar_1_1broken__pipe__exception.html',1,'seastar']]], + ['broken_5fpromise_29',['broken_promise',['../structseastar_1_1broken__promise.html',1,'seastar']]], + ['broken_5fsemaphore_30',['broken_semaphore',['../classseastar_1_1broken__semaphore.html',1,'seastar']]], + ['buffer_5fsize_31',['buffer_size',['../namespaceseastar.html#a4bb685a43b71439e191e780664eefe4d',1,'seastar::file_input_stream_options::buffer_size()'],['../group__networking-module.html#af6eb1309a91231fa061a0582ed10eb14',1,'seastar::connected_socket_input_stream_config::buffer_size()']]] +]; diff --git a/master/search/all_3.html b/master/search/all_3.html new file mode 100644 index 000000000..f4e8da728 --- /dev/null +++ b/master/search/all_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_3.js b/master/search/all_3.js new file mode 100644 index 000000000..c67180b4a --- /dev/null +++ b/master/search/all_3.js @@ -0,0 +1,104 @@ +var searchData= +[ + ['cancel_0',['cancel',['../classseastar_1_1deferred__stop.html#af26fd6f489611c9e4fcce0523152a1c6',1,'seastar::deferred_stop::cancel()'],['../classseastar_1_1deferred__close.html#a569bbc28d791f32567c57869dfdd2c20',1,'seastar::deferred_close::cancel()'],['../classseastar_1_1memory_1_1alloc__failure__injector.html#a62c96bd474ed61b23c626736d750b607',1,'seastar::memory::alloc_failure_injector::cancel()'],['../classseastar_1_1timer.html#a46092e11ae75680ba4c61aacef5139b6',1,'seastar::timer::cancel()'],['../classseastar_1_1io__intent.html#af2f8bbd1a9b4451a97325938169efe8e',1,'seastar::io_intent::cancel()']]], + ['canceled_5ferror_1',['canceled_error',['../classseastar_1_1rpc_1_1canceled__error.html',1,'seastar::rpc']]], + ['cancellable_2',['cancellable',['../structseastar_1_1rpc_1_1cancellable.html',1,'seastar::rpc']]], + ['cancelled_5ferror_3',['cancelled_error',['../classseastar_1_1cancelled__error.html',1,'seastar']]], + ['candidate_4',['candidate',['../classseastar_1_1program__options_1_1selection__value.html#structseastar_1_1program__options_1_1selection__value_1_1candidate',1,'seastar::program_options::selection_value']]], + ['cbiterator_5',['cbiterator',['../classseastar_1_1circular__buffer__fixed__capacity_1_1cbiterator.html',1,'seastar::circular_buffer_fixed_capacity']]], + ['cerr_6',['cerr',['../classseastar_1_1experimental_1_1process.html#a9d675ef4ac8e854450fcace49a8e9b28',1,'seastar::experimental::process']]], + ['certificate_5fcredentials_7',['certificate_credentials',['../classseastar_1_1tls_1_1certificate__credentials.html',1,'seastar::tls']]], + ['check_8',['check',['../classseastar_1_1abort__source.html#a70ffd39416741d376179d1afa7212f2b',1,'seastar::abort_source::check()'],['../classseastar_1_1gate.html#a86cedfa226ca24ce92a174b803d3a487',1,'seastar::gate::check()']]], + ['check_5fdirect_5fio_5fsupport_9',['check_direct_io_support',['../group__fileio-module.html#ga5ff6ae57c02f02b32a1236921f4cb992',1,'seastar']]], + ['check_5ffor_5fio_5fimmediately_10',['check_for_io_immediately',['../group__future-util.html#ga7eaca9fadeb65faa01a45f843201a9f0',1,'seastar']]], + ['check_5fsession_5fis_5fresumed_11',['check_session_is_resumed',['../namespaceseastar_1_1tls.html#afe24ea5add1b01a34916838cef91ba73',1,'seastar::tls']]], + ['checked_5fptr_12',['checked_ptr',['../classseastar_1_1checked__ptr.html',1,'seastar']]], + ['checked_5fptr_2ehh_13',['checked_ptr.hh',['../checked__ptr_8hh.html',1,'']]], + ['checked_5fptr_5fis_5fnull_5fexception_14',['checked_ptr_is_null_exception',['../classseastar_1_1checked__ptr__is__null__exception.html',1,'seastar']]], + ['checksummer_15',['checksummer',['../structseastar_1_1net_1_1checksummer.html',1,'seastar::net']]], + ['chmod_16',['chmod',['../group__fileio-module.html#ga481614a42f61599698f625357f55b564',1,'seastar']]], + ['chunked_5ffifo_17',['chunked_fifo',['../classseastar_1_1chunked__fifo.html',1,'seastar']]], + ['chunked_5ffifo_3c_20entry_20_3e_18',['chunked_fifo< entry >',['../classseastar_1_1chunked__fifo.html',1,'seastar']]], + ['chunked_5ffifo_3c_20waiter_20_3e_19',['chunked_fifo< waiter >',['../classseastar_1_1chunked__fifo.html',1,'seastar']]], + ['chunked_5ffifo_3c_20work_5fitem_2c_20flush_5fthreshold_20_3e_20',['chunked_fifo< work_item, flush_threshold >',['../classseastar_1_1chunked__fifo.html',1,'seastar']]], + ['chunked_5fsource_5fimpl_21',['chunked_source_impl',['../classseastar_1_1httpd_1_1internal_1_1chunked__source__impl.html',1,'seastar::httpd::internal']]], + ['cin_22',['cin',['../classseastar_1_1experimental_1_1process.html#ae2da0a8a38627a920e2eaf556910720f',1,'seastar::experimental::process']]], + ['circular_5fbuffer_23',['circular_buffer',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20double_20_3e_24',['circular_buffer< double >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20seastar_3a_3aforeign_5fptr_3c_20std_3a_3aunique_5fptr_3c_20seastar_3a_3arpc_3a_3arcv_5fbuf_20_3e_20_3e_20_3e_25',['circular_buffer< seastar::foreign_ptr< std::unique_ptr< seastar::rpc::rcv_buf > > >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20seastar_3a_3anet_3a_3aipv4_5ftraits_3a_3al4packet_20_3e_26',['circular_buffer< seastar::net::ipv4_traits::l4packet >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20seastar_3a_3anet_3a_3al3_5fprotocol_3a_3al3packet_20_3e_27',['circular_buffer< seastar::net::l3_protocol::l3packet >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20seastar_3a_3anet_3a_3apacket_20_3e_28',['circular_buffer< seastar::net::packet >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20seastar_3a_3atask_20_2a_20_3e_29',['circular_buffer< seastar::task * >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20std_3a_3apair_3c_20seastar_3a_3alw_5fshared_5fptr_3c_20tcb_20_3e_2c_20seastar_3a_3anet_3a_3aethernet_5faddress_20_3e_20_3e_30',['circular_buffer< std::pair< seastar::lw_shared_ptr< tcb >, seastar::net::ethernet_address > >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20typename_20inettraits_3a_3al4packet_20_3e_31',['circular_buffer< typename InetTraits::l4packet >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_5ffixed_5fcapacity_32',['circular_buffer_fixed_capacity',['../classseastar_1_1circular__buffer__fixed__capacity.html',1,'seastar']]], + ['circular_5fbuffer_5ffixed_5fcapacity_2ehh_33',['circular_buffer_fixed_capacity.hh',['../circular__buffer__fixed__capacity_8hh.html',1,'']]], + ['class_5fsize_34',['class_size',['../classseastar_1_1slab__allocator.html#ac2fe62b319d50975cb033f6fad4af0de',1,'seastar::slab_allocator']]], + ['clear_35',['clear',['../classseastar_1_1timer__set.html#a231e015a47e9c03e367c5d920c145aad',1,'seastar::timer_set::clear()'],['../classseastar_1_1metrics_1_1metric__groups.html#a44fb9ee80ba82e3144975a28f067d0bf',1,'seastar::metrics::metric_groups::clear()'],['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a241964865d152d0a883b3abd8264b1f1',1,'seastar::metrics::internal::approximate_exponential_histogram::clear()']]], + ['client_36',['client',['../classseastar_1_1rpc_1_1protocol_1_1client.html#a820c3554565ad35d87f6e507f8e02111',1,'seastar::rpc::protocol::client::client()'],['../classseastar_1_1rpc_1_1client.html#a4a7c2a2f2c2ad2c3f8eea799895e773c',1,'seastar::rpc::client::client(const logger &l, void *s, socket socket, const socket_address &addr, const socket_address &local={})'],['../classseastar_1_1rpc_1_1client.html#a27b3991b4320995809790f1d13ade59e',1,'seastar::rpc::client::client(const logger &l, void *s, const socket_address &addr, const socket_address &local={})'],['../classseastar_1_1http_1_1experimental_1_1client.html#a01fbdb61bc13be6c14dc91209ddf2df1',1,'seastar::http::experimental::client::client(std::unique_ptr< connection_factory > f, unsigned max_connections=default_max_connections, retry_requests retry=retry_requests::no)'],['../classseastar_1_1http_1_1experimental_1_1client.html#ac9ec73c8a3a49466683ad7e0d0f6a831',1,'seastar::http::experimental::client::client(socket_address addr, shared_ptr< tls::certificate_credentials > creds, sstring host={})'],['../classseastar_1_1http_1_1experimental_1_1client.html#aefce59137008916b52fa8fdf792741c3',1,'seastar::http::experimental::client::client(socket_address addr)'],['../classseastar_1_1http_1_1experimental_1_1client.html',1,'seastar::http::experimental::client'],['../classseastar_1_1rpc_1_1client.html',1,'seastar::rpc::client'],['../classseastar_1_1rpc_1_1protocol_1_1client.html',1,'seastar::rpc::protocol< Serializer, MsgType >::client']]], + ['client_5ffunction_5ftype_37',['client_function_type',['../classseastar_1_1rpc_1_1client__function__type.html',1,'seastar::rpc']]], + ['client_5finfo_38',['client_info',['../structseastar_1_1rpc_1_1client__info.html',1,'seastar::rpc']]], + ['client_5foptions_39',['client_options',['../group__rpc.html#structseastar_1_1rpc_1_1client__options',1,'seastar::rpc']]], + ['client_5fref_40',['client_ref',['../classseastar_1_1http_1_1internal_1_1client__ref.html',1,'seastar::http::internal']]], + ['clone_41',['clone',['../classseastar_1_1temporary__buffer.html#a26c38d0189b0da6165a31ca6b3ecf97f',1,'seastar::temporary_buffer']]], + ['close_42',['close',['../classseastar_1_1file.html#a08dc17b92b941add68a7528c8ee8a69c',1,'seastar::file::close()'],['../classseastar_1_1gate.html#a5d8c0a7d962b9d90af15bab33903375e',1,'seastar::gate::close()'],['../classseastar_1_1output__stream.html#aae81650e7a32bd892fb04863eaaf65eb',1,'seastar::output_stream::close()'],['../classseastar_1_1http_1_1experimental_1_1connection.html#ab8e9696c1413b1564b334362593806f2',1,'seastar::http::experimental::connection::close()'],['../classseastar_1_1http_1_1experimental_1_1client.html#a67d8a89b11ff9994fa4cb7d55c847f8d',1,'seastar::http::experimental::client::close()'],['../classseastar_1_1net_1_1datagram__channel.html#aa1c54b31a7eca374a35e09e7379294c0',1,'seastar::net::datagram_channel::close()'],['../classseastar_1_1net_1_1dns__resolver.html#ace1f06ec941c9aea4ebc82011bfa2376',1,'seastar::net::dns_resolver::close()'],['../classseastar_1_1input__stream.html#a3aff95b4e833ec2459ff276f9aa45b6f',1,'seastar::input_stream::close()']]], + ['close_5fnow_43',['close_now',['../classseastar_1_1deferred__close.html#a250e1c5fe5ab4dc039addcb16976df5b',1,'seastar::deferred_close']]], + ['closeable_2ehh_44',['closeable.hh',['../closeable_8hh.html',1,'']]], + ['closed_5ferror_45',['closed_error',['../classseastar_1_1rpc_1_1closed__error.html',1,'seastar::rpc']]], + ['collectd_46',['collectd',['../structseastar_1_1scollectd_1_1options.html#ae494c2870de535a7e719cc6826b27477',1,'seastar::scollectd::options']]], + ['collectd_5faddress_47',['collectd_address',['../structseastar_1_1scollectd_1_1options.html#a95e609b313abda88ff319edb0fb25305',1,'seastar::scollectd::options']]], + ['collectd_5fhostname_48',['collectd_hostname',['../structseastar_1_1scollectd_1_1options.html#a0480cd6523ceeecf6665456baa5ba9b7',1,'seastar::scollectd::options']]], + ['collectd_5fpoll_5fperiod_49',['collectd_poll_period',['../structseastar_1_1scollectd_1_1options.html#a4ec9851a887b37af5445f37ad6cb93a1',1,'seastar::scollectd::options']]], + ['compatibility_50',['Compatibility',['../md_compatibility.html',1,'']]], + ['compressor_51',['compressor',['../classseastar_1_1rpc_1_1compressor.html',1,'seastar::rpc']]], + ['concrete_5fexecution_5fstage_52',['concrete_execution_stage',['../classseastar_1_1concrete__execution__stage.html',1,'seastar']]], + ['concrete_5fperformance_5ftest_53',['concrete_performance_test',['../classperf__tests_1_1internal_1_1concrete__performance__test.html',1,'perf_tests::internal']]], + ['condition_5fvariable_54',['condition_variable',['../classseastar_1_1condition__variable.html#af45b4023e59b09e1a2c9ea55f55b12ab',1,'seastar::condition_variable::condition_variable()'],['../classseastar_1_1condition__variable.html',1,'seastar::condition_variable']]], + ['condition_5fvariable_5ftimed_5fout_55',['condition_variable_timed_out',['../classseastar_1_1condition__variable__timed__out.html',1,'seastar']]], + ['config_56',['config',['../classseastar_1_1fair__group.html#structseastar_1_1fair__group_1_1config',1,'seastar::fair_group::config'],['../classseastar_1_1fair__queue.html#structseastar_1_1fair__queue_1_1config',1,'seastar::fair_queue::config'],['../classseastar_1_1io__queue.html#structseastar_1_1io__queue_1_1config',1,'seastar::io_queue::config'],['../structseastar_1_1metrics_1_1impl_1_1config.html',1,'seastar::metrics::impl::config'],['../structseastar_1_1prometheus_1_1config.html',1,'seastar::prometheus::config']]], + ['config_5fexception_57',['config_exception',['../classseastar_1_1net_1_1config__exception.html',1,'seastar::net']]], + ['configuration_58',['configuration',['../structseastar_1_1resource_1_1configuration.html',1,'seastar::resource']]], + ['configure_59',['configure',['../namespaceseastar_1_1metrics.html#a8d21f02491508ef9514912a716dc99de',1,'seastar::metrics']]], + ['conflict_60',['conflict',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba981f1875779561e79585a2ae43a196fb',1,'seastar::http::reply']]], + ['connect_61',['connect',['../namespaceseastar_1_1tls.html#ad0a927705a0acbd6477f6a58121c8eaf',1,'seastar::tls::connect()'],['../classseastar_1_1socket.html#a03a9a02afc357d2c35dadead89b45baa',1,'seastar::socket::connect()'],['../namespaceseastar_1_1tls.html#acce870cfc83d20112915d3821399434e',1,'seastar::tls::connect()'],['../group__networking-module.html#ga91668c69d29cc76460db1b17adbcf631',1,'seastar::connect(socket_address sa)'],['../group__networking-module.html#ga181725bbbe2a376b59e4621ddc77e4b0',1,'seastar::connect(socket_address sa, socket_address local, transport proto)']]], + ['connected_5fsocket_62',['connected_socket',['../classseastar_1_1connected__socket.html#aeebe58d6f32d70afa454eb62d5aae3c8',1,'seastar::connected_socket::connected_socket(connected_socket &&cs) noexcept'],['../classseastar_1_1connected__socket.html#acd1048533706e1dfadca39b467178da4',1,'seastar::connected_socket::connected_socket() noexcept'],['../classseastar_1_1connected__socket.html',1,'seastar::connected_socket']]], + ['connected_5fsocket_5finput_5fstream_5fconfig_63',['connected_socket_input_stream_config',['../group__networking-module.html#structseastar_1_1connected__socket__input__stream__config',1,'seastar']]], + ['connection_64',['connection',['../group__networking-module.html#aeff80fcab36dbd7770e35958f3c7d1d8',1,'seastar::accept_result::connection()'],['../classseastar_1_1http_1_1experimental_1_1connection.html#acc4a0e1a7045aa9431ce86ebf4443a91',1,'seastar::http::experimental::connection::connection()'],['../group__websocket.html#ga718508a331da5163aadcca73fb881b6b',1,'seastar::experimental::websocket::connection::connection()'],['../classseastar_1_1experimental_1_1websocket_1_1connection.html',1,'seastar::experimental::websocket::connection'],['../classseastar_1_1http_1_1experimental_1_1connection.html',1,'seastar::http::experimental::connection'],['../classseastar_1_1httpd_1_1connection.html',1,'seastar::httpd::connection'],['../classseastar_1_1net_1_1tcp_1_1connection.html',1,'seastar::net::tcp< InetTraits >::connection'],['../classseastar_1_1rpc_1_1connection.html',1,'seastar::rpc::connection'],['../classseastar_1_1rpc_1_1server_1_1connection.html',1,'seastar::rpc::server::connection']]], + ['connection_5ffactory_65',['connection_factory',['../classseastar_1_1http_1_1experimental_1_1connection__factory.html',1,'seastar::http::experimental']]], + ['connection_5fid_66',['connection_id',['../classseastar_1_1rpc_1_1connection__id.html',1,'seastar::rpc']]], + ['connections_5fnr_67',['connections_nr',['../classseastar_1_1http_1_1experimental_1_1client.html#a53e814c99560e6b9558f8a3226e1ce0e',1,'seastar::http::experimental::client']]], + ['connid_5fhash_68',['connid_hash',['../structseastar_1_1net_1_1l4connid_1_1connid__hash.html',1,'seastar::net::l4connid']]], + ['conntrack_69',['conntrack',['../classseastar_1_1net_1_1conntrack.html',1,'seastar::net']]], + ['constructor_70',['constructor',['../structseastar_1_1scheduling__group__key__config.html#a3983e8cc893d4c8e81c34816ba00a2b1',1,'seastar::scheduling_group_key_config']]], + ['consume_71',['consume',['../classseastar_1_1queue.html#a3d03a1002995246ad7bbd2881d4e87bd',1,'seastar::queue::consume()'],['../classseastar_1_1basic__semaphore.html#a87eb1328a16be3c9982705147df78c8f',1,'seastar::basic_semaphore::consume()']]], + ['consume_5funits_72',['consume_units',['../group__fiber-module.html#ga5086c2f4c44c1e0940e06b0c0130caa1',1,'seastar']]], + ['consumption_5fresult_73',['consumption_result',['../classseastar_1_1consumption__result.html',1,'seastar']]], + ['content_5flength_5fsource_5fimpl_74',['content_length_source_impl',['../classseastar_1_1httpd_1_1internal_1_1content__length__source__impl.html',1,'seastar::httpd::internal']]], + ['content_5freplace_75',['content_replace',['../classseastar_1_1httpd_1_1content__replace.html#a4e7bd598d231e7e396a04bf456a8a1c4',1,'seastar::httpd::content_replace::content_replace()'],['../classseastar_1_1httpd_1_1content__replace.html',1,'seastar::httpd::content_replace']]], + ['continue_5f_76',['continue_',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba5b4404524e842940120cc65b3214d40b',1,'seastar::http::reply']]], + ['continue_5fconsuming_77',['continue_consuming',['../namespaceseastar.html#structseastar_1_1continue__consuming',1,'seastar']]], + ['copy_78',['copy',['../namespaceseastar.html#af74bd53e061a587d4f74de3419247c47',1,'seastar::copy()'],['../classseastar_1_1foreign__ptr.html#ad9b1d8e45e3f002a3a2ddd4048c6070e',1,'seastar::foreign_ptr::copy()']]], + ['coroutine_5ftraits_3c_20seastar_3a_3afuture_3c_20t_20_3e_2c_20args_2e_2e_2e_20_3e_79',['coroutine_traits< seastar::future< T >, Args... >',['../classstd_1_1coroutine__traits_3_01seastar_1_1future_3_01T_01_4_00_01Args_8_8_8_01_4.html',1,'std']]], + ['count_80',['count',['../classseastar_1_1semaphore__units.html#a20d5be8a6a457bff4c0ae7064c49819d',1,'seastar::semaphore_units::count()'],['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a6a6de62c57e57e800344fed247a7ff45',1,'seastar::metrics::internal::approximate_exponential_histogram::count()']]], + ['counter_5ftype_5ftraits_81',['counter_type_traits',['../structseastar_1_1metrics_1_1impl_1_1counter__type__traits.html',1,'seastar::metrics::impl']]], + ['cout_82',['cout',['../classseastar_1_1experimental_1_1process.html#af88faafd78c915d9d581de308723823d',1,'seastar::experimental::process']]], + ['cpu_83',['cpu',['../structseastar_1_1resource_1_1cpu.html',1,'seastar::resource']]], + ['cpuset_84',['cpuset',['../structseastar_1_1smp__options.html#a1c966e0d590aca51d8e00c2674ab9323',1,'seastar::smp_options']]], + ['create_85',['create',['../classseastar_1_1slab__allocator.html#af68f4772053336e2c2b3721a7321f2bd',1,'seastar::slab_allocator']]], + ['create_5fmetric_5fgroups_86',['create_metric_groups',['../metrics__api_8hh.html#a9969ec4e9bda0e9f38f86a43ec91c483',1,'seastar::metrics::impl']]], + ['create_5fpermissions_87',['create_permissions',['../structseastar_1_1file__open__options.html#ac49a62a5f23689021e53cc453997d3dc',1,'seastar::file_open_options']]], + ['create_5fscheduling_5fgroup_88',['create_scheduling_group',['../namespaceseastar.html#adafacb9a0a3fb17bad24d2263310cda9',1,'seastar::create_scheduling_group(sstring name, float shares) noexcept'],['../namespaceseastar.html#a3ba118daee6121819aa2f4b7d9399c1c',1,'seastar::create_scheduling_group(sstring name, sstring shortname, float shares) noexcept'],['../classseastar_1_1scheduling__group.html#a93129a7ec16ddfef854f7ff9d391210c',1,'seastar::scheduling_group::create_scheduling_group()'],['../classseastar_1_1reactor.html#a93129a7ec16ddfef854f7ff9d391210c',1,'seastar::reactor::create_scheduling_group()']]], + ['create_5fsmp_5fservice_5fgroup_89',['create_smp_service_group',['../namespaceseastar.html#af018d8dc408f9fc3318f03b43b24b129',1,'seastar::create_smp_service_group()'],['../classseastar_1_1smp__service__group.html#a4b3d35158448f3b6919cfd20e5630722',1,'seastar::smp_service_group::create_smp_service_group()']]], + ['create_5fwatch_90',['create_watch',['../classseastar_1_1experimental_1_1fsnotifier.html#a351f44c615065d0d313399a631d77ac2',1,'seastar::experimental::fsnotifier']]], + ['created_91',['created',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abae2fa538867c3830a859a5b17ab24644b',1,'seastar::http::reply']]], + ['credentials_5fbuilder_92',['credentials_builder',['../classseastar_1_1tls_1_1credentials__builder.html',1,'seastar::tls']]], + ['cref_93',['cref',['../group__utilities.html#ga69166d6b8f32c3084d3fbd5cd76608a8',1,'seastar']]], + ['critical_94',['critical',['../namespaceseastar_1_1memory.html#a2411b00801406f50acb3a8bc78f32400a7e85bcb66fb9a809d5ab4f62a8b8bea8',1,'seastar::memory']]], + ['cross_5fcpu_5ffrees_95',['cross_cpu_frees',['../classseastar_1_1memory_1_1statistics.html#a44141076e2c7ee94f3881b755865a340',1,'seastar::memory::statistics']]], + ['csum_5foffload_96',['csum_offload',['../structseastar_1_1net_1_1virtio__options.html#af1c9baaf623844f3f7473184fe84cdfe',1,'seastar::net::virtio_options']]], + ['current_97',['current',['../classseastar_1_1basic__semaphore.html#a13fcf380b0130ebf5338042b6340f27c',1,'seastar::basic_semaphore']]], + ['current_5fexception_5fas_5ffuture_98',['current_exception_as_future',['../structseastar_1_1future__state__base.html#a6bca51e2cf5a09c4aa48f0d2df357f9f',1,'seastar::future_state_base::current_exception_as_future()'],['../group__future-module.html#gaab69e9fd7a4e5f0a91c9f96eef1851ae',1,'seastar::current_exception_as_future() noexcept'],['../group__future-module.html#gae9582867583d21316c4dc295a0da3d5e',1,'seastar::current_exception_as_future() noexcept']]], + ['current_5fexception_5ffuture_5fmarker_99',['current_exception_future_marker',['../structseastar_1_1future__state__base.html#structseastar_1_1future__state__base_1_1current__exception__future__marker',1,'seastar::future_state_base']]], + ['current_5fscheduling_5fgroup_100',['current_scheduling_group',['../namespaceseastar.html#a67d1258ebbd7b5a4f9c1488ac6ea96b3',1,'seastar']]] +]; diff --git a/master/search/all_4.html b/master/search/all_4.html new file mode 100644 index 000000000..678d3a2e0 --- /dev/null +++ b/master/search/all_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_4.js b/master/search/all_4.js new file mode 100644 index 000000000..9a8ef5b77 --- /dev/null +++ b/master/search/all_4.js @@ -0,0 +1,81 @@ +var searchData= +[ + ['data_5fsink_0',['data_sink',['../classseastar_1_1data__sink.html',1,'seastar']]], + ['data_5fsink_5fimpl_1',['data_sink_impl',['../classseastar_1_1data__sink__impl.html',1,'seastar']]], + ['data_5fsource_2',['data_source',['../classseastar_1_1data__source.html',1,'seastar']]], + ['data_5fsource_5fimpl_3',['data_source_impl',['../classseastar_1_1data__source__impl.html',1,'seastar']]], + ['data_5ftype_5ffor_4',['data_type_for',['../structseastar_1_1scollectd_1_1data__type__for.html',1,'seastar::scollectd']]], + ['data_5ftype_5ffor_3c_20std_3a_3ainvoke_5fresult_5ft_3c_20t_20_3e_20_3e_5',['data_type_for< std::invoke_result_t< T > >',['../structseastar_1_1scollectd_1_1data__type__for.html',1,'seastar::scollectd']]], + ['data_5ftype_5ffor_3c_20t_2c_20std_3a_3aenable_5fif_5ft_3c_20is_5fcallable_3c_20t_20_3e_3a_3avalue_2c_20void_20_3e_20_3e_6',['data_type_for< T, std::enable_if_t< is_callable< T >::value, void > >',['../structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01is__callable_35c0ca2f0a42f3af2902b730a47b963e6.html',1,'seastar::scollectd']]], + ['data_5ftype_5ffor_3c_20t_2c_20std_3a_3aenable_5fif_5ft_3c_20std_3a_3ais_5ffloating_5fpoint_5fv_3c_20t_20_3e_2c_20void_20_3e_20_3e_7',['data_type_for< T, std::enable_if_t< std::is_floating_point_v< T >, void > >',['../structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__floefb1fea89ef879d2424c4cbcbf5c1652.html',1,'seastar::scollectd']]], + ['data_5ftype_5ffor_3c_20t_2c_20std_3a_3aenable_5fif_5ft_3c_20std_3a_3ais_5fintegral_5fv_3c_20t_20_3e_20_26_26std_3a_3ais_5funsigned_5fv_3c_20t_20_3e_2c_20void_20_3e_20_3e_8',['data_type_for< T, std::enable_if_t< std::is_integral_v< T > &&std::is_unsigned_v< T >, void > >',['../structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__int8bb9c47ea63565f41486d8397e60995d.html',1,'seastar::scollectd']]], + ['data_5ftype_5ffor_3c_20typed_3c_20t_20_3e_20_3e_9',['data_type_for< typed< T > >',['../structseastar_1_1scollectd_1_1data__type__for_3_01typed_3_01T_01_4_01_4.html',1,'seastar::scollectd']]], + ['datagram_10',['datagram',['../classseastar_1_1net_1_1datagram.html',1,'seastar::net']]], + ['datagram_5fchannel_11',['datagram_channel',['../classseastar_1_1net_1_1datagram__channel.html',1,'seastar::net']]], + ['datagram_5fimpl_12',['datagram_impl',['../classseastar_1_1net_1_1datagram__impl.html',1,'seastar::net']]], + ['default_5fisolate_5fconnection_13',['default_isolate_connection',['../group__rpc.html#ga4bcc6887c3b9f6cb6afc5f64b02e0868',1,'seastar::rpc']]], + ['default_5flog_5flevel_14',['default_log_level',['../structseastar_1_1log__cli_1_1options.html#ab12d73cfa95f13065ed19154a0fa471a',1,'seastar::log_cli::options']]], + ['default_5fnull_5fderef_5faction_15',['default_null_deref_action',['../structseastar_1_1default__null__deref__action.html',1,'seastar']]], + ['default_5fsmp_5fservice_5fgroup_16',['default_smp_service_group',['../namespaceseastar.html#ad5a5b9924fe24aff9f3786f5706cf82c',1,'seastar::default_smp_service_group()'],['../classseastar_1_1smp__service__group.html#a87787279c7ad263573f3db370add951c',1,'seastar::smp_service_group::default_smp_service_group()']]], + ['default_5ftimeout_5fexception_5ffactory_17',['default_timeout_exception_factory',['../structseastar_1_1default__timeout__exception__factory.html',1,'seastar']]], + ['defaulted_18',['defaulted',['../classseastar_1_1program__options_1_1selection__value.html#ab44d54a3079a3d7c1c2535569571b6d0',1,'seastar::program_options::selection_value::defaulted()'],['../classseastar_1_1program__options_1_1value.html#a46c2cbb9678f0e462cf4ba95f0c6733b',1,'seastar::program_options::value::defaulted()']]], + ['deferred_5faction_19',['deferred_action',['../classseastar_1_1deferred__action.html',1,'seastar']]], + ['deferred_5fclose_20',['deferred_close',['../classseastar_1_1deferred__close.html#a711e21bf6697e42886df2480dc0db786',1,'seastar::deferred_close::deferred_close(deferred_close &&x) noexcept'],['../classseastar_1_1deferred__close.html#adaf57aec2be1f3de0be34e9e208ca87a',1,'seastar::deferred_close::deferred_close(Object &obj) noexcept'],['../classseastar_1_1deferred__close.html',1,'seastar::deferred_close< Object >']]], + ['deferred_5fsnd_5fbuf_21',['deferred_snd_buf',['../structseastar_1_1rpc_1_1deferred__snd__buf.html',1,'seastar::rpc']]], + ['deferred_5fstop_22',['deferred_stop',['../classseastar_1_1deferred__stop.html#aa4c844b39cef5c195ae43d23ea46ca10',1,'seastar::deferred_stop::deferred_stop(deferred_stop &&x) noexcept'],['../classseastar_1_1deferred__stop.html#a3025fb6d2f914cd294bd9ae58d1719e1',1,'seastar::deferred_stop::deferred_stop(Object &obj) noexcept'],['../classseastar_1_1deferred__stop.html',1,'seastar::deferred_stop< Object >']]], + ['definitely_5fsample_23',['definitely_sample',['../classsampler.html#a8f2da6016163acfc517db2a6f7c5b58c',1,'sampler']]], + ['del_5fcookie_24',['del_cookie',['../classseastar_1_1httpd_1_1routes.html#acca5ba5aa853a466828da35fea8216a9',1,'seastar::httpd::routes']]], + ['deleter_25',['deleter',['../classseastar_1_1deleter.html#a6bb0a5eb0d84b65b169d77a1499e3c47',1,'seastar::deleter::deleter(deleter &&x) noexcept'],['../classseastar_1_1deleter.html#a331645c176bc561a728dfd42eecb8458',1,'seastar::deleter::deleter() noexcept=default'],['../classseastar_1_1deleter.html',1,'seastar::deleter']]], + ['deprecated_20list_26',['Deprecated List',['../deprecated.html',1,'']]], + ['describe_27',['describe',['../classseastar_1_1program__options_1_1option__group.html#ab5b62e6d6d5df183098344aabc15288b',1,'seastar::program_options::option_group']]], + ['description_28',['description',['../classseastar_1_1metrics_1_1description.html',1,'seastar::metrics']]], + ['destroy_29',['destroy',['../classseastar_1_1foreign__ptr.html#ae22c46096a4d3090f171c21389bfc934',1,'seastar::foreign_ptr']]], + ['destroy_5fscheduling_5fgroup_30',['destroy_scheduling_group',['../namespaceseastar.html#aa62ddf7fbb801ec1f92d9f9b8d0a7eed',1,'seastar::destroy_scheduling_group()'],['../classseastar_1_1scheduling__group.html#a8b5cd69daba83a54f9dcf6ad1a79be88',1,'seastar::scheduling_group::destroy_scheduling_group()']]], + ['destroy_5fsmp_5fservice_5fgroup_31',['destroy_smp_service_group',['../namespaceseastar.html#ae0830bde63c7a9383d13f1b396e1a982',1,'seastar::destroy_smp_service_group()'],['../classseastar_1_1smp__service__group.html#ab2165a827050139def3b4321d39d8cf7',1,'seastar::smp_service_group::destroy_smp_service_group()']]], + ['destructor_32',['destructor',['../structseastar_1_1scheduling__group__key__config.html#af1642873be54c5baf7d0185415573b59',1,'seastar::scheduling_group_key_config']]], + ['detach_33',['detach',['../classseastar_1_1output__stream.html#a0c44818d630b2f03829f45bd8da339ec',1,'seastar::output_stream::detach()'],['../classseastar_1_1input__stream.html#a762a710e39d69169a00112e184a29e5e',1,'seastar::input_stream::detach()']]], + ['device_34',['device',['../classseastar_1_1net_1_1device.html',1,'seastar::net']]], + ['device_5fconfig_35',['device_config',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1device__config',1,'seastar::net']]], + ['dh_5fparams_36',['dh_params',['../classseastar_1_1tls_1_1dh__params.html',1,'seastar::tls']]], + ['dhcp_37',['dhcp',['../structseastar_1_1net_1_1native__stack__options.html#adb3660d9209c118b63786e23029758ea',1,'seastar::net::native_stack_options::dhcp()'],['../classseastar_1_1net_1_1dhcp.html',1,'seastar::net::dhcp']]], + ['directory_5fentry_38',['directory_entry',['../group__fileio-module.html#structseastar_1_1directory__entry',1,'seastar']]], + ['directory_5fentry_5ftype_39',['directory_entry_type',['../group__fileio-module.html#ga27cf091d97c38f5b9696cd61ec815e72',1,'seastar']]], + ['directory_5fhandler_40',['directory_handler',['../classseastar_1_1httpd_1_1directory__handler.html#ac0e20c20b0df3460abaade933e07c94f',1,'seastar::httpd::directory_handler::directory_handler()'],['../classseastar_1_1httpd_1_1directory__handler.html',1,'seastar::httpd::directory_handler']]], + ['disable_5ffailure_5fguard_41',['disable_failure_guard',['../namespaceseastar_1_1memory.html#structseastar_1_1memory_1_1disable__failure__guard',1,'seastar::memory']]], + ['disable_5flarge_5fallocation_5fwarning_42',['disable_large_allocation_warning',['../namespaceseastar_1_1memory.html#a9af07da9a57aa714469426706c69d876',1,'seastar::memory']]], + ['disable_5fsampling_5ftemporarily_43',['disable_sampling_temporarily',['../structsampler_1_1disable__sampling__temporarily.html',1,'sampler']]], + ['discard_44',['discard',['../classseastar_1_1file.html#a976e4ddac3867fba16b0aa801d5e09e1',1,'seastar::file']]], + ['discard_5fresult_45',['discard_result',['../classseastar_1_1future.html#ae4a82e541cc18efbdb0903924276e9be',1,'seastar::future']]], + ['discover_46',['discover',['../classseastar_1_1net_1_1dhcp.html#a82700f830bfa1695e9865bd783e0b21c',1,'seastar::net::dhcp']]], + ['disk_5foverwrite_5fdma_5falignment_47',['disk_overwrite_dma_alignment',['../classseastar_1_1file.html#aadbd1fe3a8240f7b4e53f74c8444d834',1,'seastar::file']]], + ['disk_5fread_5fdma_5falignment_48',['disk_read_dma_alignment',['../classseastar_1_1file.html#a8174308a81e6a497624321e55cc11fb4',1,'seastar::file']]], + ['disk_5fread_5fmax_5flength_49',['disk_read_max_length',['../classseastar_1_1file.html#a5ca4c63b1c643bd070c3c99840048511',1,'seastar::file']]], + ['disk_5fwrite_5fdma_5falignment_50',['disk_write_dma_alignment',['../classseastar_1_1file.html#acbda81bf7a46eb870d452969a3f55728',1,'seastar::file']]], + ['disk_5fwrite_5fmax_5flength_51',['disk_write_max_length',['../classseastar_1_1file.html#ac9b737bd62458b69dde8f050d559ec30',1,'seastar::file']]], + ['dispatch_5frequests_52',['dispatch_requests',['../classseastar_1_1fair__queue.html#ab6d479bcdd9ee465be1ff485497072ac',1,'seastar::fair_queue']]], + ['disposer_53',['disposer',['../classseastar_1_1lw__shared__ptr_1_1disposer.html',1,'seastar::lw_shared_ptr']]], + ['dma_5fread_54',['dma_read',['../classseastar_1_1file.html#ab7045cc2729b1bca1c8fdcea37e99960',1,'seastar::file::dma_read(uint64_t aligned_pos, CharType *aligned_buffer, size_t aligned_len, io_intent *intent=nullptr) noexcept'],['../classseastar_1_1file.html#a1c77e3f78e9fc0f790a05b4d3c4b9ab2',1,'seastar::file::dma_read(uint64_t pos, size_t len, io_intent *intent=nullptr) noexcept'],['../classseastar_1_1file.html#a613b764b90cbcb2d6208adc1cf9aea5c',1,'seastar::file::dma_read(uint64_t pos, std::vector< iovec > iov, io_intent *intent=nullptr) noexcept']]], + ['dma_5fread_5fbulk_55',['dma_read_bulk',['../classseastar_1_1file.html#a2506894dd0f844c72d689e26eef504b2',1,'seastar::file']]], + ['dma_5fread_5fexactly_56',['dma_read_exactly',['../classseastar_1_1file.html#afe9844bf9bf93b9d3210b86b981e69cf',1,'seastar::file']]], + ['dma_5fwrite_57',['dma_write',['../classseastar_1_1file.html#a504d959f534c1b1d9de1502a7f6b3670',1,'seastar::file::dma_write(uint64_t pos, const CharType *buffer, size_t len, io_intent *intent=nullptr) noexcept'],['../classseastar_1_1file.html#a31907e002391fd2605d4087c1040304c',1,'seastar::file::dma_write(uint64_t pos, std::vector< iovec > iov, io_intent *intent=nullptr) noexcept']]], + ['dn_5fcallback_58',['dn_callback',['../namespaceseastar_1_1tls.html#a4f46edc6c448a7412305dc9273c96cbd',1,'seastar::tls']]], + ['dns_5fresolver_59',['dns_resolver',['../classseastar_1_1net_1_1dns__resolver.html',1,'seastar::net']]], + ['do_5ffor_5feach_60',['do_for_each',['../group__future-util.html#ga0517e0f7decd3737d960e8443ce55664',1,'seastar::do_for_each(Container &c, AsyncAction action) noexcept'],['../group__future-util.html#gabaddceae4f57b8ecaf20b6c35e185734',1,'seastar::do_for_each(Iterator begin, Iterator end, AsyncAction action) noexcept']]], + ['do_5funtil_61',['do_until',['../group__future-util.html#ga3d11cfca2d48c5cb21821a3268673970',1,'seastar']]], + ['do_5fwant_5fclient_5finfo_62',['do_want_client_info',['../structseastar_1_1rpc_1_1do__want__client__info.html',1,'seastar::rpc']]], + ['do_5fwant_5ftime_5fpoint_63',['do_want_time_point',['../structseastar_1_1rpc_1_1do__want__time__point.html',1,'seastar::rpc']]], + ['do_5fwith_64',['do_with',['../group__future-util.html#ga3983004a3a79b563b0609146d008ff6b',1,'seastar']]], + ['done_65',['done',['../structseastar_1_1http_1_1reply.html#a9fcb466a8c4b4fca08d6dce71f5c3252',1,'seastar::http::reply']]], + ['dont_5fwant_5fclient_5finfo_66',['dont_want_client_info',['../structseastar_1_1rpc_1_1dont__want__client__info.html',1,'seastar::rpc']]], + ['dont_5fwant_5ftime_5fpoint_67',['dont_want_time_point',['../structseastar_1_1rpc_1_1dont__want__time__point.html',1,'seastar::rpc']]], + ['double_5fregistration_68',['double_registration',['../classseastar_1_1metrics_1_1double__registration.html',1,'seastar::metrics']]], + ['dpdk_5foptions_69',['dpdk_options',['../structseastar_1_1net_1_1dpdk__options.html',1,'seastar::net']]], + ['dpdk_5fopts_70',['dpdk_opts',['../structseastar_1_1net_1_1native__stack__options.html#a90bb60b4ade6be66d3720c93211aa745',1,'seastar::net::native_stack_options']]], + ['dpdk_5fpmd_71',['dpdk_pmd',['../structseastar_1_1net_1_1native__stack__options.html#a53085c4f11dfe8cd5ecf386e93aa5f28',1,'seastar::net::native_stack_options']]], + ['dpdk_5fport_5findex_72',['dpdk_port_index',['../structseastar_1_1net_1_1dpdk__options.html#a53b66411543b792e992eab047203bdbc',1,'seastar::net::dpdk_options']]], + ['drop_73',['drop',['../classseastar_1_1httpd_1_1routes.html#afdae0a6321882339820227c06e864e6d',1,'seastar::httpd::routes']]], + ['dummy_5fexpiry_74',['dummy_expiry',['../structseastar_1_1dummy__expiry.html',1,'seastar']]], + ['dump_5fmemory_5fdiagnostics_5fon_5falloc_5ffailure_5fkind_75',['dump_memory_diagnostics_on_alloc_failure_kind',['../structseastar_1_1reactor__options.html#a56e4b212a93a6c421c2ab177730d0ae7',1,'seastar::reactor_options']]], + ['dup_76',['dup',['../classseastar_1_1file.html#a73bcbe570f08db361719338178a36675',1,'seastar::file']]], + ['dynamic_5fadjustments_77',['dynamic_adjustments',['../namespaceseastar.html#af73169cf5109f7f05e6c4d742157744b',1,'seastar::file_input_stream_options']]] +]; diff --git a/master/search/all_5.html b/master/search/all_5.html new file mode 100644 index 000000000..aa9af7820 --- /dev/null +++ b/master/search/all_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_5.js b/master/search/all_5.js new file mode 100644 index 000000000..38c5f1aad --- /dev/null +++ b/master/search/all_5.js @@ -0,0 +1,41 @@ +var searchData= +[ + ['element_5ftype_0',['element_type',['../classseastar_1_1checked__ptr.html#ad557cfdae13626979fa63421f4007368',1,'seastar::checked_ptr']]], + ['empty_1',['empty',['../classseastar_1_1timer__set.html#ae84405da6e95e7e50f9f0af33a28443d',1,'seastar::timer_set::empty()'],['../classseastar_1_1temporary__buffer.html#a6e414c417ec7eea1d0af32e30b9c3159',1,'seastar::temporary_buffer::empty()'],['../classseastar_1_1queue.html#acc22c686650979c4fbdfa7ef914302b4',1,'seastar::queue::empty()'],['../classseastar_1_1expiring__fifo.html#a20a8eb384fdacf08156aab607fcab4e8',1,'seastar::expiring_fifo::empty()']]], + ['enable_2',['enable',['../namespaceseastar_1_1scollectd.html#a68631e3d63e8b7ecb119a782fe28c1a6',1,'seastar::scollectd']]], + ['enable_5fglibc_5fexception_5fscaling_5fworkaround_3',['enable_glibc_exception_scaling_workaround',['../structseastar_1_1smp__options.html#ab104a2dd2c6a90e439a6fec3721035a3',1,'seastar::smp_options']]], + ['enable_5flw_5fshared_5ffrom_5fthis_4',['enable_lw_shared_from_this',['../classseastar_1_1enable__lw__shared__from__this.html',1,'seastar']]], + ['enable_5flw_5fshared_5ffrom_5fthis_3c_20tcb_20_3e_5',['enable_lw_shared_from_this< tcb >',['../classseastar_1_1enable__lw__shared__from__this.html',1,'seastar']]], + ['enable_5fshared_5ffrom_5fthis_6',['enable_shared_from_this',['../classseastar_1_1enable__shared__from__this.html',1,'seastar']]], + ['enable_5fshared_5ffrom_5fthis_3c_20connection_20_3e_7',['enable_shared_from_this< connection >',['../classseastar_1_1enable__shared__from__this.html',1,'seastar']]], + ['end_8',['end',['../classseastar_1_1temporary__buffer.html#a7b77b0e679282a55f233d049b63e629c',1,'seastar::temporary_buffer']]], + ['ensure_5fspace_5ffor_5fwaiters_9',['ensure_space_for_waiters',['../classseastar_1_1basic__semaphore.html#a4a7f9ea75bb8b77550636401d8e91bde',1,'seastar::basic_semaphore']]], + ['enter_10',['enter',['../classseastar_1_1gate.html#ad1428b9acbe39dd1a4f8c318833599b2',1,'seastar::gate']]], + ['enum_5fhash_11',['enum_hash',['../classseastar_1_1enum__hash.html',1,'seastar']]], + ['env_12',['env',['../structseastar_1_1experimental_1_1spawn__parameters.html#a041fb05186d2c6c00f40cd555ea28387',1,'seastar::experimental::spawn_parameters']]], + ['eof_13',['eof',['../classseastar_1_1input__stream.html#aaad512a115e4ab8b534c322d157a82f1',1,'seastar::input_stream']]], + ['eof_5ferror_14',['eof_error',['../classseastar_1_1file_1_1eof__error.html',1,'seastar::file']]], + ['eol_15',['eol',['../structseastar_1_1net_1_1tcp__option_1_1eol.html',1,'seastar::net::tcp_option']]], + ['error_16',['error',['../classseastar_1_1rpc_1_1error.html',1,'seastar::rpc']]], + ['error_5fcategory_17',['error_category',['../namespaceseastar_1_1tls.html#abe77c9cbfc5057a929aeae1d5d58f9b1',1,'seastar::tls']]], + ['error_5funknown_5fcompression_5falgorithm_18',['ERROR_UNKNOWN_COMPRESSION_ALGORITHM',['../namespaceseastar_1_1tls.html#aeca27a48c1de29abb8d51acfff202206',1,'seastar::tls']]], + ['eth_5fhdr_19',['eth_hdr',['../structseastar_1_1net_1_1eth__hdr.html',1,'seastar::net']]], + ['ethernet_20',['ethernet',['../structseastar_1_1net_1_1ethernet.html',1,'seastar::net']]], + ['ethernet_5faddress_21',['ethernet_address',['../structseastar_1_1net_1_1ethernet__address.html',1,'seastar::net']]], + ['event_22',['event',['../classseastar_1_1experimental_1_1fsnotifier.html#structseastar_1_1experimental_1_1fsnotifier_1_1event',1,'seastar::experimental::fsnotifier']]], + ['event_5findex_23',['event_index',['../structseastar_1_1net_1_1virtio__options.html#aa1f396108ff64129fa0763dabac7f27c',1,'seastar::net::virtio_options']]], + ['exception_24',['exception',['../structseastar_1_1coroutine_1_1exception.html',1,'seastar::coroutine::exception'],['../classseastar_1_1experimental_1_1websocket_1_1exception.html',1,'seastar::experimental::websocket::exception']]], + ['exception_5ffuture_5fmarker_25',['exception_future_marker',['../group__future-module.html#structseastar_1_1exception__future__marker',1,'seastar']]], + ['exchanger_26',['exchanger',['../classseastar_1_1testing_1_1exchanger.html',1,'seastar::testing']]], + ['exchanger_3c_20std_3a_3afunction_3c_20seastar_3a_3afuture_3c_3e_28_29_3e_20_3e_27',['exchanger< std::function< seastar::future<>()> >',['../classseastar_1_1testing_1_1exchanger.html',1,'seastar::testing']]], + ['exchanger_5fbase_28',['exchanger_base',['../classseastar_1_1testing_1_1exchanger__base.html',1,'seastar::testing']]], + ['execution_20stages_29',['Execution Stages',['../group__execution-stages.html',1,'']]], + ['execution_5fstage_30',['execution_stage',['../classseastar_1_1execution__stage.html#a7e0694b3677cbb6f78dcf07ba2c1294d',1,'seastar::execution_stage::execution_stage()'],['../classseastar_1_1execution__stage.html',1,'seastar::execution_stage']]], + ['expectation_5ffailed_31',['expectation_failed',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba9367b0c5f17fb21bb2758cfd6607d98e',1,'seastar::http::reply']]], + ['experimental_5flist_5fdirectory_32',['experimental_list_directory',['../classseastar_1_1file.html#ac9642a470af5d032ff1aa029ef2db936',1,'seastar::file']]], + ['expire_33',['expire',['../classseastar_1_1timer__set.html#ae2ca3a4973d95ea21af136abe84e20c0',1,'seastar::timer_set']]], + ['expiring_5ffifo_34',['expiring_fifo',['../classseastar_1_1expiring__fifo.html',1,'seastar']]], + ['extent_5fallocation_5fsize_5fhint_35',['extent_allocation_size_hint',['../structseastar_1_1file__open__options.html#ad41179fe450ba65b2d3987173622a984',1,'seastar::file_open_options']]], + ['external_5ftype_36',['external_type',['../structseastar_1_1basic__sstring_1_1contents_1_1external__type.html',1,'seastar::basic_sstring::contents']]], + ['extract_5fsettings_37',['extract_settings',['../namespaceseastar_1_1log__cli.html#a5b523213c8a878fed2ac5930aa926135',1,'seastar::log_cli::extract_settings(const boost::program_options::variables_map &)'],['../namespaceseastar_1_1log__cli.html#a8f1dc98ad9de90572af199dc1403d4ed',1,'seastar::log_cli::extract_settings(const options &)']]] +]; diff --git a/master/search/all_6.html b/master/search/all_6.html new file mode 100644 index 000000000..d3026a776 --- /dev/null +++ b/master/search/all_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_6.js b/master/search/all_6.js new file mode 100644 index 000000000..280293ef0 --- /dev/null +++ b/master/search/all_6.js @@ -0,0 +1,108 @@ +var searchData= +[ + ['factory_0',['factory',['../classseastar_1_1rpc_1_1compressor_1_1factory.html',1,'seastar::rpc::compressor::factory'],['../classseastar_1_1rpc_1_1lz4__compressor_1_1factory.html',1,'seastar::rpc::lz4_compressor::factory'],['../classseastar_1_1rpc_1_1lz4__fragmented__compressor_1_1factory.html',1,'seastar::rpc::lz4_fragmented_compressor::factory']]], + ['fail_5fafter_1',['fail_after',['../classseastar_1_1memory_1_1alloc__failure__injector.html#a11630f8fc18b3a3ba9f8c3b2c3107213',1,'seastar::memory::alloc_failure_injector']]], + ['failed_2',['failed',['../classseastar_1_1shared__future.html#a99a5ea9b0af772b8bfad02f84476fb0c',1,'seastar::shared_future::failed()'],['../classseastar_1_1memory_1_1alloc__failure__injector.html#a1fce2a092f654c6c7c85cf2bedc48663',1,'seastar::memory::alloc_failure_injector::failed()'],['../classseastar_1_1shared__promise.html#a271e5e7ff35c7580b1a5e4002ef67a18',1,'seastar::shared_promise::failed()'],['../classseastar_1_1future.html#a5a82ea2b06f018fa8fbf6a45511ffa72',1,'seastar::future::failed()']]], + ['failed_5fallocations_3',['failed_allocations',['../classseastar_1_1memory_1_1statistics.html#a1bf3b292ec732cb79b7bb8938e58718f',1,'seastar::memory::statistics']]], + ['fair_5fgroup_4',['fair_group',['../classseastar_1_1fair__group.html',1,'seastar']]], + ['fair_5fqueue_5',['fair_queue',['../classseastar_1_1fair__queue.html#a55976dbc0641babb07df1a6d4df9d3af',1,'seastar::fair_queue::fair_queue()'],['../classseastar_1_1fair__queue.html',1,'seastar::fair_queue']]], + ['fair_5fqueue_5fentry_6',['fair_queue_entry',['../classseastar_1_1fair__queue__entry.html',1,'seastar']]], + ['fair_5fqueue_5fticket_7',['fair_queue_ticket',['../classseastar_1_1fair__queue__ticket.html#a184eb62ca7310b68b577d6d16b82db1c',1,'seastar::fair_queue_ticket::fair_queue_ticket()'],['../classseastar_1_1fair__queue__ticket.html',1,'seastar::fair_queue_ticket']]], + ['fcntl_8',['fcntl',['../classseastar_1_1file.html#ad087e991042b92cda704930735833673',1,'seastar::file']]], + ['fcntl_5fshort_9',['fcntl_short',['../classseastar_1_1file.html#a58f9d8eb545276534dcc7eb1344b457d',1,'seastar::file']]], + ['fibers_10',['Fibers',['../group__fiber-module.html',1,'']]], + ['file_11',['file',['../classseastar_1_1file.html#a7f10ba394cfe36491117965a1a8cdef8',1,'seastar::file::file(file &&x) noexcept'],['../classseastar_1_1file.html#af666b1e2d7b90922c7fe5239f37e1bc7',1,'seastar::file::file(const file &x)=default'],['../classseastar_1_1file.html#a48fffa1fe72fd20fdf138dfcf8a5a4e3',1,'seastar::file::file(file_handle &&handle) noexcept'],['../classseastar_1_1file.html#aef4789ec26f694711d6d94cf406d5b61',1,'seastar::file::file() noexcept'],['../classseastar_1_1file.html',1,'seastar::file']]], + ['file_20and_20stream_20utilities_12',['File and Stream Utilities',['../group__fileio-util.html',1,'']]], + ['file_20input_2foutput_13',['File Input/Output',['../group__fileio-module.html',1,'']]], + ['file_5faccessible_14',['file_accessible',['../group__fileio-module.html#gab96da76804eb57f9de469be0e1c619d1',1,'seastar']]], + ['file_5fdesc_15',['file_desc',['../classseastar_1_1file__desc.html',1,'seastar']]], + ['file_5fexists_16',['file_exists',['../group__fileio-module.html#ga5b3c83778c8c0f53ec532abf68cdd8b1',1,'seastar']]], + ['file_5fhandle_17',['file_handle',['../classseastar_1_1file__handle.html#a678ffea20a515f3bc8c89e5926f41a39',1,'seastar::file_handle::file_handle(const file_handle &)'],['../classseastar_1_1file__handle.html#a14a5b28e44662598c88f13b11975761e',1,'seastar::file_handle::file_handle(file_handle &&) noexcept'],['../classseastar_1_1file__handle.html',1,'seastar::file_handle']]], + ['file_5fhandle_5fimpl_18',['file_handle_impl',['../classseastar_1_1file__handle__impl.html',1,'seastar']]], + ['file_5fhandler_19',['file_handler',['../classseastar_1_1httpd_1_1file__handler.html#aa97c95aba7c8097a15f32e2e848ff6b2',1,'seastar::httpd::file_handler::file_handler()'],['../classseastar_1_1httpd_1_1file__handler.html',1,'seastar::httpd::file_handler']]], + ['file_5fimpl_20',['file_impl',['../classseastar_1_1file__impl.html',1,'seastar']]], + ['file_5finput_5fstream_5fhistory_21',['file_input_stream_history',['../classseastar_1_1file__input__stream__history.html',1,'seastar']]], + ['file_5finput_5fstream_5foptions_22',['file_input_stream_options',['../namespaceseastar.html#structseastar_1_1file__input__stream__options',1,'seastar']]], + ['file_5finteraction_5fhandler_23',['file_interaction_handler',['../classseastar_1_1httpd_1_1file__interaction__handler.html',1,'seastar::httpd']]], + ['file_5fopen_5foptions_24',['file_open_options',['../structseastar_1_1file__open__options.html',1,'seastar']]], + ['file_5foutput_5fstream_5foptions_25',['file_output_stream_options',['../namespaceseastar.html#structseastar_1_1file__output__stream__options',1,'seastar']]], + ['file_5fsize_26',['file_size',['../group__fileio-module.html#ga495c053a6cfbf3aec6e371e4bc79fc1a',1,'seastar']]], + ['file_5fstat_27',['file_stat',['../group__fileio-module.html#gaf019a0fa580dc2effc05f53234b89dd0',1,'seastar']]], + ['file_5fsystem_5fat_28',['file_system_at',['../group__fileio-module.html#gaa792977175759ed309fff1cf7d55c0dc',1,'seastar']]], + ['file_5ftransformer_29',['file_transformer',['../classseastar_1_1httpd_1_1file__transformer.html',1,'seastar::httpd']]], + ['file_5ftype_30',['file_type',['../group__fileio-module.html#gad99589025149a6565db5545eedb93922',1,'seastar']]], + ['filesystem_20notifier_31',['FileSystem Notifier',['../group__fsnotifier.html',1,'']]], + ['finally_32',['finally',['../classseastar_1_1future.html#acb80c71ce4866f7d48894e97340801ce',1,'seastar::future']]], + ['finally_5fbody_33',['finally_body',['../classseastar_1_1future.html#structseastar_1_1future_1_1finally__body',1,'seastar::future']]], + ['finally_5fbody_3c_20func_2c_20false_20_3e_34',['finally_body< Func, false >',['../structseastar_1_1future_1_1finally__body_3_01Func_00_01false_01_4.html',1,'seastar::future']]], + ['finally_5fbody_3c_20func_2c_20true_20_3e_35',['finally_body< Func, true >',['../structseastar_1_1future_1_1finally__body_3_01Func_00_01true_01_4.html',1,'seastar::future']]], + ['find_5fbucket_5findex_36',['find_bucket_index',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#af7ad7aed2f77cd7693cf628a64333f21',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['find_5flast_5fof_37',['find_last_of',['../classseastar_1_1basic__sstring.html#acbcfe26639efa77d871a979f96f3414c',1,'seastar::basic_sstring']]], + ['flags_38',['flags',['../classseastar_1_1experimental_1_1fsnotifier.html#a7803e30e6a6871710ded6a5d8b201d2e',1,'seastar::experimental::fsnotifier']]], + ['flush_39',['flush',['../classseastar_1_1execution__stage.html#a9279dc5e02457b3d896e1f53b8d3a85b',1,'seastar::execution_stage::flush()'],['../classseastar_1_1file.html#a6f76ffea65fe5cd8cf842b1ee1270ce3',1,'seastar::file::flush()']]], + ['follow_5fsymlink_5ftag_40',['follow_symlink_tag',['../group__fileio-module.html#structseastar_1_1follow__symlink__tag',1,'seastar']]], + ['for_5fread_41',['for_read',['../classseastar_1_1basic__rwlock.html#a9f7932d14a6a368a8c90a98130d06d29',1,'seastar::basic_rwlock']]], + ['for_5fwrite_42',['for_write',['../classseastar_1_1basic__rwlock.html#a8538659f8a3408bf5a96c0505b8cc2ef',1,'seastar::basic_rwlock']]], + ['forbidden_43',['forbidden',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba350f9d68221a0db19024ee40cfc3c7f8',1,'seastar::http::reply']]], + ['force_5faio_5fsyscalls_44',['force_aio_syscalls',['../structseastar_1_1reactor__options.html#a7e0726d8ea4c464ec0474de3e5fec857',1,'seastar::reactor_options']]], + ['foreign_5fcross_5ffrees_45',['foreign_cross_frees',['../classseastar_1_1memory_1_1statistics.html#af186a1a468ef4c953ff158326e79d1c1',1,'seastar::memory::statistics']]], + ['foreign_5ffrees_46',['foreign_frees',['../classseastar_1_1memory_1_1statistics.html#a3badcb880a5f24a21c3a69791121d8a8',1,'seastar::memory::statistics']]], + ['foreign_5fmallocs_47',['foreign_mallocs',['../classseastar_1_1memory_1_1statistics.html#aad9f6aef72bc73467f9daf33e747e295',1,'seastar::memory::statistics']]], + ['foreign_5fptr_48',['foreign_ptr',['../classseastar_1_1foreign__ptr.html#ab8f59485c72c8da014f65ec95295f8bf',1,'seastar::foreign_ptr::foreign_ptr(PtrType value) noexcept(std::is_nothrow_move_constructible_v< PtrType >)'],['../classseastar_1_1foreign__ptr.html#a3908bdc78b06e1cf8c8f080d4e7bed1a',1,'seastar::foreign_ptr::foreign_ptr(std::nullptr_t) noexcept(std::is_nothrow_default_constructible_v< foreign_ptr >)'],['../classseastar_1_1foreign__ptr.html#ad240c184c7e9c5b83827f7409256c080',1,'seastar::foreign_ptr::foreign_ptr() noexcept(std::is_nothrow_default_constructible_v< PtrType >)'],['../classseastar_1_1foreign__ptr.html#abe0b9eaaf4251b249496282c6be21e89',1,'seastar::foreign_ptr::foreign_ptr(foreign_ptr &&other) noexcept(std::is_nothrow_move_constructible_v< PtrType >)=default'],['../classseastar_1_1foreign__ptr.html',1,'seastar::foreign_ptr< PtrType >']]], + ['foreign_5fptr_3c_20seastar_3a_3alw_5fshared_5fptr_3c_20load_5fbalancer_20_3e_20_3e_49',['foreign_ptr< seastar::lw_shared_ptr< load_balancer > >',['../classseastar_1_1foreign__ptr.html',1,'seastar']]], + ['format_50',['format',['../namespaceseastar.html#a67f610bd460716ea64fc99b43a637415',1,'seastar']]], + ['format_5fas_51',['format_as',['../namespaceseastar_1_1tls.html#a4e9aa881582158f2705fcaf79cd47a74',1,'seastar::tls']]], + ['format_5furl_52',['format_url',['../structseastar_1_1http_1_1request.html#a01d7279c4114e412aaef10c1b0b5d7fe',1,'seastar::http::request']]], + ['formatter_53',['formatter',['../classseastar_1_1json_1_1formatter.html',1,'seastar::json']]], + ['formatter_3c_20seastar_3a_3aabort_5frequested_5fexception_20_3e_54',['formatter< seastar::abort_requested_exception >',['../structfmt_1_1formatter_3_01seastar_1_1abort__requested__exception_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3abool_5fclass_3c_20tag_20_3e_20_3e_55',['formatter< seastar::bool_class< Tag > >',['../structfmt_1_1formatter_3_01seastar_1_1bool__class_3_01Tag_01_4_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3ahttpd_3a_3abase_5fexception_20_3e_56',['formatter< seastar::httpd::base_exception >',['../structfmt_1_1formatter_3_01seastar_1_1httpd_1_1base__exception_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3alazy_5fderef_5fwrapper_3c_20t_20_3e_20_3e_57',['formatter< seastar::lazy_deref_wrapper< T > >',['../structfmt_1_1formatter_3_01seastar_1_1lazy__deref__wrapper_3_01T_01_4_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3alazy_5feval_3c_20func_20_3e_20_3e_58',['formatter< seastar::lazy_eval< Func > >',['../structfmt_1_1formatter_3_01seastar_1_1lazy__eval_3_01Func_01_4_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3alog_5flevel_20_3e_59',['formatter< seastar::log_level >',['../structfmt_1_1formatter_3_01seastar_1_1log__level_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3alw_5fshared_5fptr_3c_20t_20_3e_20_3e_60',['formatter< seastar::lw_shared_ptr< T > >',['../structfmt_1_1formatter_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3aoptimized_5foptional_3c_20t_20_3e_20_3e_61',['formatter< seastar::optimized_optional< T > >',['../structfmt_1_1formatter_3_01seastar_1_1optimized__optional_3_01T_01_4_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3arpc_3a_3aoptional_3c_20t_20_3e_20_3e_62',['formatter< seastar::rpc::optional< T > >',['../structfmt_1_1formatter_3_01seastar_1_1rpc_1_1optional_3_01T_01_4_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3ashared_5fptr_3c_20t_20_3e_20_3e_63',['formatter< seastar::shared_ptr< T > >',['../structfmt_1_1formatter_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3atimed_5fout_5ferror_20_3e_64',['formatter< seastar::timed_out_error >',['../structfmt_1_1formatter_3_01seastar_1_1timed__out__error_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3atls_3a_3asubject_5falt_5fname_20_3e_65',['formatter< seastar::tls::subject_alt_name >',['../structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3atls_3a_3asubject_5falt_5fname_3a_3avalue_5ftype_20_3e_66',['formatter< seastar::tls::subject_alt_name::value_type >',['../structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_1_1value__type_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3atls_3a_3asubject_5falt_5fname_5ftype_20_3e_67',['formatter< seastar::tls::subject_alt_name_type >',['../structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name__type_01_4.html',1,'fmt']]], + ['formatter_3c_20t_20_3e_68',['formatter< T >',['../structfmt_1_1formatter_3_01T_01_4.html',1,'fmt']]], + ['forward_5fhash_69',['forward_hash',['../classseastar_1_1net_1_1forward__hash.html',1,'seastar::net']]], + ['forward_5fto_70',['forward_to',['../classseastar_1_1future.html#a939d1f4da42f5c21715ce3d9382defc5',1,'seastar::future']]], + ['fragment_71',['fragment',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1fragment',1,'seastar::net']]], + ['fragmented_5fmemory_5finput_5fstream_72',['fragmented_memory_input_stream',['../classseastar_1_1fragmented__memory__input__stream.html',1,'seastar']]], + ['fragmented_5fmemory_5foutput_5fstream_73',['fragmented_memory_output_stream',['../classseastar_1_1fragmented__memory__output__stream.html',1,'seastar']]], + ['frame_74',['frame',['../namespaceseastar.html#structseastar_1_1frame',1,'seastar']]], + ['frame_5fheader_75',['frame_header',['../structseastar_1_1experimental_1_1websocket_1_1frame__header.html',1,'seastar::experimental::websocket']]], + ['free_76',['free',['../classseastar_1_1slab__allocator.html#a3d20a458c9a85a4e270d19a7f788389d',1,'seastar::slab_allocator']]], + ['free_5fdeleter_77',['free_deleter',['../structseastar_1_1free__deleter.html',1,'seastar']]], + ['free_5fmemory_78',['free_memory',['../namespaceseastar_1_1memory.html#a0c92bd57e61960c5f568ebeb31ebccea',1,'seastar::memory::free_memory()'],['../classseastar_1_1memory_1_1statistics.html#abbe3ac1507a514c92dbab4302b591508',1,'seastar::memory::statistics::free_memory() const']]], + ['frees_79',['frees',['../classseastar_1_1memory_1_1statistics.html#aa4070c013a40a7989d8619384256842f',1,'seastar::memory::statistics']]], + ['from_5ffile_80',['from_file',['../classseastar_1_1tls_1_1dh__params.html#ad04256aec9b18edbad1679c47ab375a8',1,'seastar::tls::dh_params']]], + ['from_5ftuple_81',['from_tuple',['../structseastar_1_1futurize.html#a6c03f45fe76ff31c61f52681b8879863',1,'seastar::futurize::from_tuple(const value_type &value)'],['../structseastar_1_1futurize.html#ab640a81af5819caeb450ccfbaa8f5575',1,'seastar::futurize::from_tuple(const tuple_type &value)'],['../structseastar_1_1futurize.html#a2ac8c2196cf13da54892c3aa70670c9b',1,'seastar::futurize::from_tuple(value_type &&value)'],['../structseastar_1_1futurize.html#a248ab96f76a8fe990fab0ecddfb5e039',1,'seastar::futurize::from_tuple(tuple_type &&value)']]], + ['front_82',['front',['../classseastar_1_1expiring__fifo.html#abff52845d3350c403e8510f621f90df5',1,'seastar::expiring_fifo::front() noexcept'],['../classseastar_1_1expiring__fifo.html#a8f07546ce9aa7fcd4ebb71512a6b2907',1,'seastar::expiring_fifo::front() const noexcept'],['../classseastar_1_1queue.html#a99ad2cb82b1444cf2d20266ab2db75b7',1,'seastar::queue::front()'],['../classseastar_1_1basic__sstring.html#a6efaea5238742a63ce3244313d26598c',1,'seastar::basic_sstring::front() noexcept'],['../classseastar_1_1basic__sstring.html#a6507bdad66d62996a365e3aa0709eea5',1,'seastar::basic_sstring::front() const noexcept']]], + ['fs_5favail_83',['fs_avail',['../group__fileio-module.html#ga3631194fbb5e87deda5fc9c20c712033',1,'seastar']]], + ['fs_5ffree_84',['fs_free',['../group__fileio-module.html#ga5dc83e4534c9227406139c91f5db3c23',1,'seastar']]], + ['fs_5ftype_85',['fs_type',['../group__fileio-module.html#ga4314f8690e5b436d3d2be53f0336dec3',1,'seastar']]], + ['fsnotifier_86',['fsnotifier',['../classseastar_1_1experimental_1_1fsnotifier.html',1,'seastar::experimental']]], + ['fstream_2ehh_87',['fstream.hh',['../fstream_8hh.html',1,'']]], + ['full_88',['full',['../classseastar_1_1queue.html#a1cc9b318aad8f68042a108cc2c8f724e',1,'seastar::queue']]], + ['function_5fhandler_89',['function_handler',['../classseastar_1_1httpd_1_1function__handler.html',1,'seastar::httpd']]], + ['function_5finput_5fiterator_90',['function_input_iterator',['../structseastar_1_1function__input__iterator.html',1,'seastar']]], + ['function_5ftraits_91',['function_traits',['../namespaceseastar.html#structseastar_1_1function__traits',1,'seastar']]], + ['function_5ftraits_3c_20ret_28_2a_29_28args_2e_2e_2e_29_3e_92',['function_traits< Ret(*)(Args...)>',['../structseastar_1_1function__traits_3_01Ret_07_5_08_07Args_8_8_8_08_4.html',1,'seastar']]], + ['function_5ftraits_3c_20ret_28args_2e_2e_2e_29_3e_93',['function_traits< Ret(Args...)>',['../structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4.html',1,'seastar']]], + ['function_5ftraits_3c_20ret_28t_3a_3a_2a_29_28args_2e_2e_2e_29_20const_20_3e_94',['function_traits< Ret(T::*)(Args...) const >',['../structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_01const_01_4.html',1,'seastar']]], + ['function_5ftraits_3c_20ret_28t_3a_3a_2a_29_28args_2e_2e_2e_29_3e_95',['function_traits< Ret(T::*)(Args...)>',['../structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_4.html',1,'seastar']]], + ['function_5ftraits_3c_20std_3a_3aremove_5freference_5ft_3c_20t_20_3e_20_3e_96',['function_traits< std::remove_reference_t< T > >',['../namespaceseastar.html',1,'seastar']]], + ['function_5ftraits_3c_20t_20_26_20_3e_97',['function_traits< T & >',['../structseastar_1_1function__traits_3_01T_01_6_01_4.html',1,'seastar']]], + ['future_98',['future',['../classseastar_1_1future.html#abe3ad61384e690666b0e7b325d46d88b',1,'seastar::future::future()'],['../classseastar_1_1future.html',1,'seastar::future< T >']]], + ['future_20utilities_99',['Future Utilities',['../group__future-util.html',1,'']]], + ['future_3c_20bool_20_3e_100',['future< bool >',['../classseastar_1_1future.html',1,'seastar']]], + ['future_5ffor_5fget_5fpromise_5fmarker_101',['future_for_get_promise_marker',['../group__future-module.html#structseastar_1_1future__for__get__promise__marker',1,'seastar']]], + ['future_5fstate_5fbase_102',['future_state_base',['../structseastar_1_1future__state__base.html',1,'seastar']]], + ['futures_20and_20promises_103',['Futures and Promises',['../group__future-module.html',1,'']]], + ['futurize_104',['futurize',['../structseastar_1_1futurize.html',1,'seastar']]] +]; diff --git a/master/search/all_7.html b/master/search/all_7.html new file mode 100644 index 000000000..b2ee042e0 --- /dev/null +++ b/master/search/all_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_7.js b/master/search/all_7.js new file mode 100644 index 000000000..d87f18445 --- /dev/null +++ b/master/search/all_7.js @@ -0,0 +1,63 @@ +var searchData= +[ + ['gate_0',['gate',['../classseastar_1_1gate.html',1,'seastar']]], + ['gate_5fclosed_5fexception_1',['gate_closed_exception',['../classseastar_1_1gate__closed__exception.html',1,'seastar']]], + ['gateway_5ftimeout_2',['gateway_timeout',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abaa96a18d998411ddbef3e3734de136504',1,'seastar::http::reply']]], + ['generate_5fmemory_5fdiagnostics_5freport_3',['generate_memory_diagnostics_report',['../namespaceseastar_1_1memory.html#a862d31943a98710575e7df67396f984b',1,'seastar::memory']]], + ['generator_4',['generator',['../classseastar_1_1coroutine_1_1experimental_1_1generator.html',1,'seastar::coroutine::experimental']]], + ['generator_5fbuffered_5fpromise_5',['generator_buffered_promise',['../classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__buffered__promise.html',1,'seastar::coroutine::experimental::internal']]], + ['generator_5funbuffered_5fpromise_6',['generator_unbuffered_promise',['../classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__unbuffered__promise.html',1,'seastar::coroutine::experimental::internal']]], + ['get_7',['get',['../classseastar_1_1checked__ptr.html#ad75acc062fe0e6cfabd7a5cc99f0dfdf',1,'seastar::checked_ptr::get()'],['../classseastar_1_1future.html#a50bfeff0acccd2f365cce40f9954218c',1,'seastar::future::get()'],['../classseastar_1_1foreign__ptr.html#a38fe2adbd683c524d6ce0d85bec66e4d',1,'seastar::foreign_ptr::get()'],['../classseastar_1_1temporary__buffer.html#ac63de48ff94355ecd7c07cd988cd679f',1,'seastar::temporary_buffer::get()'],['../classseastar_1_1httpd_1_1match__rule.html#a1846f10deaa2923011bacd0de6c39a11',1,'seastar::httpd::match_rule::get()']]], + ['get0_5freturn_5ftype_8',['get0_return_type',['../classseastar_1_1future.html#a76cf6847252d419e5241b0efc851e7e2',1,'seastar::future']]], + ['get_5falt_5fname_5finformation_9',['get_alt_name_information',['../namespaceseastar_1_1tls.html#a968421c0a3be02b61999d1979b834996',1,'seastar::tls']]], + ['get_5fbucket_5flower_5flimit_10',['get_bucket_lower_limit',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a4d99f87037e8784a5eae44b7660a4d36',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['get_5fbucket_5fupper_5flimit_11',['get_bucket_upper_limit',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a2cacaa7a411d33254dc39cbed2e8ef69',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['get_5fclient_5faddress_12',['get_client_address',['../structseastar_1_1http_1_1request.html#a7b95b50ee0af4e505cdcc1c6e19dad47',1,'seastar::http::request']]], + ['get_5fcount_13',['get_count',['../classseastar_1_1gate.html#a69f05b40df82f06eaba0cfa798b81d76',1,'seastar::gate']]], + ['get_5fdefault_5fexception_14',['get_default_exception',['../classseastar_1_1abort__source.html#a3a177f92729996fb515b61cece7b7d89',1,'seastar::abort_source']]], + ['get_5fdn_5finformation_15',['get_dn_information',['../namespaceseastar_1_1tls.html#a8b4504eb12fdfb0993e1a8c7e3a2acf1',1,'seastar::tls']]], + ['get_5fexact_5fmatch_16',['get_exact_match',['../classseastar_1_1httpd_1_1routes.html#a6283e637dc9a953a33a2d131631266b3',1,'seastar::httpd::routes']]], + ['get_5fextension_17',['get_extension',['../classseastar_1_1httpd_1_1file__interaction__handler.html#ab7d7b9978357074142b17ac5527cd4e1',1,'seastar::httpd::file_interaction_handler']]], + ['get_5ffile_5flifetime_5fhint_18',['get_file_lifetime_hint',['../classseastar_1_1file.html#ae05a32113c89bfa83b62cad321367986',1,'seastar::file']]], + ['get_5ffuture_19',['get_future',['../group__future-module.html#ga2161021ff06a3deb3673b10d3963fbe5',1,'seastar::promise::get_future()'],['../classseastar_1_1shared__future.html#aaf056ec5cbf64347845513e356742788',1,'seastar::shared_future::get_future(time_point timeout=time_point::max()) const noexcept'],['../classseastar_1_1shared__future.html#a63c964b0893d9fdb6d0206a3860590b9',1,'seastar::shared_future::get_future(abort_source &as) const noexcept']]], + ['get_5fhandler_20',['get_handler',['../classseastar_1_1httpd_1_1routes.html#ad95f33786b67b01a9cc7e320a251e4e8',1,'seastar::httpd::routes']]], + ['get_5fheader_21',['get_header',['../structseastar_1_1http_1_1reply.html#a8ade746ba0cb78a618ad404df4dfd27e',1,'seastar::http::reply::get_header()'],['../structseastar_1_1http_1_1request.html#a327ce68bff0bbff06c8823edea54f83b',1,'seastar::http::request::get_header()']]], + ['get_5fheap_5fprofiling_5fsample_5frate_22',['get_heap_profiling_sample_rate',['../namespaceseastar_1_1memory.html#a0150191bed4177dca974f490b8d44f93',1,'seastar::memory']]], + ['get_5fhost_5fby_5faddr_23',['get_host_by_addr',['../classseastar_1_1net_1_1dns__resolver.html#a45d8a40e6460f7654c1e316563ad60e7',1,'seastar::net::dns_resolver']]], + ['get_5fhost_5fby_5fname_24',['get_host_by_name',['../classseastar_1_1net_1_1dns__resolver.html#a508934f829ca4dc6f5c45fec73508d05',1,'seastar::net::dns_resolver']]], + ['get_5finode_5flifetime_5fhint_25',['get_inode_lifetime_hint',['../classseastar_1_1file.html#a76e43c89d361a00751833b9fcf17519d',1,'seastar::file']]], + ['get_5fkeepalive_26',['get_keepalive',['../classseastar_1_1connected__socket.html#aafea9452ea06310a7dc198825c977238',1,'seastar::connected_socket']]], + ['get_5fkeepalive_5fparameters_27',['get_keepalive_parameters',['../classseastar_1_1connected__socket.html#ae3e161e7d39ee3e711dd36f244b8a06a',1,'seastar::connected_socket']]], + ['get_5flarge_5fallocation_5fwarning_5fthreshold_28',['get_large_allocation_warning_threshold',['../namespaceseastar_1_1memory.html#a17e2e9ff7c849acc4b9a4cb49c65e906',1,'seastar::memory']]], + ['get_5fnext_5ftimeout_29',['get_next_timeout',['../classseastar_1_1timer__set.html#a6bb87553e4462729c5832d67fcc2a19e',1,'seastar::timer_set']]], + ['get_5fnodelay_30',['get_nodelay',['../classseastar_1_1connected__socket.html#a8d750c3e2f77d8d85e353c74167b6202',1,'seastar::connected_socket']]], + ['get_5foptions_5fdescription_31',['get_options_description',['../namespaceseastar_1_1log__cli.html#a8a757c4e9dfb6603ad6566454b6d30cf',1,'seastar::log_cli']]], + ['get_5fowner_5fshard_32',['get_owner_shard',['../classseastar_1_1foreign__ptr.html#ab480a42ec8bacd09ef0734c7c07dc291',1,'seastar::foreign_ptr']]], + ['get_5fpath_5fparam_33',['get_path_param',['../structseastar_1_1http_1_1request.html#a26c918514214508fd06d44166ef44e38',1,'seastar::http::request']]], + ['get_5fprotocol_5fname_34',['get_protocol_name',['../structseastar_1_1http_1_1request.html#ae153fecd05275e96fdc2dc9549cb5549',1,'seastar::http::request']]], + ['get_5fquery_5fparam_35',['get_query_param',['../structseastar_1_1http_1_1request.html#ae0f849a8293591150f50f93c65f9b537',1,'seastar::http::request']]], + ['get_5freuseaddr_36',['get_reuseaddr',['../classseastar_1_1socket.html#ad80d13819962eff0962462240798e271',1,'seastar::socket']]], + ['get_5fsched_5fstats_37',['get_sched_stats',['../classseastar_1_1reactor.html#a4da41487c775504154efb70da8d44885',1,'seastar::reactor']]], + ['get_5fschema_38',['get_schema',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a40cb77fca5df5c48d63f138d570103d0',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['get_5fselected_5fcandidate_5fname_39',['get_selected_candidate_name',['../classseastar_1_1program__options_1_1selection__value.html#ac81ddf818ef45bf3651e1a533f0d5589',1,'seastar::program_options::selection_value']]], + ['get_5fselected_5fcandidate_5fopts_40',['get_selected_candidate_opts',['../classseastar_1_1program__options_1_1selection__value.html#ac2ddc3eea700212fcb9036cd0020c6c1',1,'seastar::program_options::selection_value::get_selected_candidate_opts() const'],['../classseastar_1_1program__options_1_1selection__value.html#a4eb10cbaba971256ff7c37be770f0864',1,'seastar::program_options::selection_value::get_selected_candidate_opts()']]], + ['get_5fserver_5faddress_41',['get_server_address',['../structseastar_1_1http_1_1request.html#adcd4004fe9cb1d85997a84fbb24320a6',1,'seastar::http::request']]], + ['get_5fsession_5fresume_5fdata_42',['get_session_resume_data',['../namespaceseastar_1_1tls.html#a7389b1aed7a2e8ef2fcd16aec2107c3d',1,'seastar::tls']]], + ['get_5fshared_5ffuture_43',['get_shared_future',['../classseastar_1_1shared__promise.html#a9dbb284691dd5e6869d8f18dbf63939f',1,'seastar::shared_promise::get_shared_future(abort_source &as) const noexcept'],['../classseastar_1_1shared__promise.html#a829129947b0cb5a15ca6922f95ce413b',1,'seastar::shared_promise::get_shared_future(time_point timeout=time_point::max()) const noexcept']]], + ['get_5fshared_5flock_44',['get_shared_lock',['../group__fiber-module.html#ga3c79f9530628bb32697905ad40a3179b',1,'seastar']]], + ['get_5fshares_45',['get_shares',['../classseastar_1_1scheduling__group.html#a01c8aa958c5b91f4722570f1a02cbcdb',1,'seastar::scheduling_group']]], + ['get_5fsockopt_46',['get_sockopt',['../classseastar_1_1connected__socket.html#a7a26747842e0b9758711b15ebb5245de',1,'seastar::connected_socket']]], + ['get_5fspecific_47',['get_specific',['../classseastar_1_1scheduling__group.html#af06ace9db9a79353988b5fb8c781ea69',1,'seastar::scheduling_group']]], + ['get_5fsrv_5frecords_48',['get_srv_records',['../classseastar_1_1net_1_1dns__resolver.html#a324987a1d7752150eeed06d7065c104b',1,'seastar::net::dns_resolver']]], + ['get_5fstats_49',['get_stats',['../classseastar_1_1execution__stage.html#a747a093ddfbd0728457af90bd381c823',1,'seastar::execution_stage::get_stats()'],['../classseastar_1_1inheriting__concrete__execution__stage.html#a3f6f8df13e74c11be637eccd3732f986',1,'seastar::inheriting_concrete_execution_stage::get_stats()']]], + ['get_5ftimeout_50',['get_timeout',['../classseastar_1_1timer.html#a023b75691ff4ed583bc03fe49e166637',1,'seastar::timer']]], + ['get_5funique_5flock_51',['get_unique_lock',['../group__fiber-module.html#ga500e43bc4ee43d84232176f1c386ee0d',1,'seastar']]], + ['get_5furl_52',['get_url',['../structseastar_1_1http_1_1request.html#ad9d6f5bcc30be8f02a320d875c185244',1,'seastar::http::request']]], + ['get_5fvalue_53',['get_value',['../classseastar_1_1program__options_1_1value.html#a3f20f489a302466d292fb9e70cfb8c3f',1,'seastar::program_options::value']]], + ['get_5fwrite_54',['get_write',['../classseastar_1_1temporary__buffer.html#acae89f29207c310305b77c99e6e80ea1',1,'seastar::temporary_buffer']]], + ['gone_55',['gone',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba50c1f58be7f5e47e0f53d64c094783c2',1,'seastar::http::reply']]], + ['group_5fname_56',['group_name',['../namespaceseastar.html#a364045bbb1951f7e88c5625dacb84a08',1,'seastar::smp_service_group_config']]], + ['group_5fname_5ftype_57',['group_name_type',['../namespaceseastar_1_1metrics.html#a7b14aa8a3d48b1d16c6cb92b8f12aae7',1,'seastar::metrics']]], + ['guard_58',['guard',['../classseastar_1_1sstring__builder_1_1guard.html',1,'seastar::sstring_builder']]], + ['gw_5fipv4_5faddr_59',['gw_ipv4_addr',['../structseastar_1_1net_1_1native__stack__options.html#a2b733aed031e09d0426c6b1cc408363b',1,'seastar::net::native_stack_options']]] +]; diff --git a/master/search/all_8.html b/master/search/all_8.html new file mode 100644 index 000000000..40a0b3f81 --- /dev/null +++ b/master/search/all_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_8.js b/master/search/all_8.js new file mode 100644 index 000000000..e109a807c --- /dev/null +++ b/master/search/all_8.js @@ -0,0 +1,61 @@ +var searchData= +[ + ['handle_0',['handle',['../classseastar_1_1httpd_1_1routes.html#a793059deb65a8e8b24227aa7854d1996',1,'seastar::httpd::routes::handle()'],['../classseastar_1_1httpd_1_1handler__base.html#a971c158608cf9507b2d65e6a1b7c6d78',1,'seastar::httpd::handler_base::handle()'],['../classseastar_1_1httpd_1_1function__handler.html#a90971f0d8a4fe6911135c15472dc368b',1,'seastar::httpd::function_handler::handle()'],['../classseastar_1_1httpd_1_1file__handler.html#a4c4624825ddfb91db55c8c5508c556b6',1,'seastar::httpd::file_handler::handle()'],['../classseastar_1_1httpd_1_1directory__handler.html#a7d85264ac0449cec194f1ec0ccc73656',1,'seastar::httpd::directory_handler::handle()'],['../classseastar_1_1httpd_1_1api__registry__20.html#a0c0ccec2a3777a0ba882d269caa03ef2',1,'seastar::httpd::api_registry_20::handle()'],['../classseastar_1_1httpd_1_1api__registry.html#a08cd7d7032b7384df75fed07d2029293',1,'seastar::httpd::api_registry::handle()'],['../classseastar_1_1net_1_1conntrack_1_1handle.html',1,'seastar::net::conntrack::handle']]], + ['handle_5fexception_1',['handle_exception',['../classseastar_1_1future.html#a31bac5674ad78c48dba6455bf2f3aff6',1,'seastar::future']]], + ['handle_5fexception_5ftype_2',['handle_exception_type',['../classseastar_1_1future.html#a073280706c9379ec1120789132b86818',1,'seastar::future']]], + ['handle_5fsignal_3',['handle_signal',['../classseastar_1_1reactor.html#a5416935ef294ca51f252d428f65ccb4c',1,'seastar::reactor']]], + ['handler_5fbase_4',['handler_base',['../classseastar_1_1httpd_1_1handler__base.html',1,'seastar::httpd']]], + ['handler_5fregistration_5',['handler_registration',['../classseastar_1_1httpd_1_1handler__registration.html#ac84e7093d9b66dbdc5df415ee09872ad',1,'seastar::httpd::handler_registration::handler_registration()'],['../classseastar_1_1httpd_1_1handler__registration.html',1,'seastar::httpd::handler_registration']]], + ['handler_5fwith_5fholder_6',['handler_with_holder',['../classseastar_1_1rpc_1_1protocol__base.html#structseastar_1_1rpc_1_1protocol__base_1_1handler__with__holder',1,'seastar::rpc::protocol_base']]], + ['has_5fblocked_5fconsumer_7',['has_blocked_consumer',['../classseastar_1_1queue.html#ae07bb45b964fba876a0d38567e4f52b1',1,'seastar::queue']]], + ['has_5fhandlers_8',['has_handlers',['../classseastar_1_1rpc_1_1protocol.html#a197731a86477497af43b8650b3327079',1,'seastar::rpc::protocol']]], + ['has_5fwaiters_9',['has_waiters',['../classseastar_1_1condition__variable.html#a2d21da29dd7339996c1441e4c2d6a279',1,'seastar::condition_variable']]], + ['hash_10',['hash',['../classseastar_1_1checked__ptr.html#a50fb79b8aae07a78d752ba34758a0ddf',1,'seastar::checked_ptr::hash()'],['../structseastar_1_1net_1_1ipv4__frag__id_1_1hash.html',1,'seastar::net::ipv4_frag_id::hash']]], + ['hash_3c_20seastar_3a_3abasic_5fsstring_3c_20char_5ftype_2c_20size_5ftype_2c_20max_5fsize_2c_20nulterminate_20_3e_20_3e_11',['hash< seastar::basic_sstring< char_type, size_type, max_size, NulTerminate > >',['../structstd_1_1hash_3_01seastar_1_1basic__sstring_3_01char__type_00_01size__type_00_01max__size_00_01NulTerminate_01_4_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3achecked_5fptr_3c_20t_20_3e_20_3e_12',['hash< seastar::checked_ptr< T > >',['../structstd_1_1hash_3_01seastar_1_1checked__ptr_3_01T_01_4_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3aipv4_5faddr_20_3e_13',['hash< seastar::ipv4_addr >',['../structstd_1_1hash_3_01seastar_1_1ipv4__addr_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3alw_5fshared_5fptr_3c_20t_20_3e_20_3e_14',['hash< seastar::lw_shared_ptr< T > >',['../structstd_1_1hash_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3amemory_3a_3aallocation_5fsite_20_3e_15',['hash< seastar::memory::allocation_site >',['../structstd_1_1hash_3_01seastar_1_1memory_1_1allocation__site_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3ametrics_3a_3aimpl_3a_3alabels_5ftype_20_3e_16',['hash< seastar::metrics::impl::labels_type >',['../structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1labels__type_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3ametrics_3a_3aimpl_3a_3ametric_5fid_20_3e_17',['hash< seastar::metrics::impl::metric_id >',['../structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1metric__id_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3anet_3a_3ainet_5faddress_20_3e_18',['hash< seastar::net::inet_address >',['../structstd_1_1hash_3_01seastar_1_1net_1_1inet__address_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3anet_3a_3aipv4_5faddress_20_3e_19',['hash< seastar::net::ipv4_address >',['../structstd_1_1hash_3_01seastar_1_1net_1_1ipv4__address_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3anet_3a_3aipv6_5faddress_20_3e_20',['hash< seastar::net::ipv6_address >',['../structstd_1_1hash_3_01seastar_1_1net_1_1ipv6__address_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3arpc_3a_3aconnection_5fid_20_3e_21',['hash< seastar::rpc::connection_id >',['../structstd_1_1hash_3_01seastar_1_1rpc_1_1connection__id_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3arpc_3a_3astreaming_5fdomain_5ftype_20_3e_22',['hash< seastar::rpc::streaming_domain_type >',['../structstd_1_1hash_3_01seastar_1_1rpc_1_1streaming__domain__type_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3ascheduling_5fgroup_20_3e_23',['hash< seastar::scheduling_group >',['../structstd_1_1hash_3_01seastar_1_1scheduling__group_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3ashared_5fptr_3c_20t_20_3e_20_3e_24',['hash< seastar::shared_ptr< T > >',['../structstd_1_1hash_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3asimple_5fbacktrace_20_3e_25',['hash< seastar::simple_backtrace >',['../structstd_1_1hash_3_01seastar_1_1simple__backtrace_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3asocket_5faddress_20_3e_26',['hash< seastar::socket_address >',['../structstd_1_1hash_3_01seastar_1_1socket__address_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3atasktrace_20_3e_27',['hash< seastar::tasktrace >',['../structstd_1_1hash_3_01seastar_1_1tasktrace_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3atransport_20_3e_28',['hash< seastar::transport >',['../structstd_1_1hash_3_01seastar_1_1transport_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3aunix_5fdomain_5faddr_20_3e_29',['hash< seastar::unix_domain_addr >',['../structstd_1_1hash_3_01seastar_1_1unix__domain__addr_01_4.html',1,'std']]], + ['hash_3c_3a_3asockaddr_5fin_20_3e_30',['hash<::sockaddr_in >',['../structstd_1_1hash_3_1_1sockaddr__in_01_4.html',1,'std']]], + ['hash_3c_3a_3asockaddr_5fun_20_3e_31',['hash<::sockaddr_un >',['../structstd_1_1hash_3_1_1sockaddr__un_01_4.html',1,'std']]], + ['heapprof_32',['heapprof',['../structseastar_1_1reactor__options.html#aaaedd24ed4ca13f6d1f4f7b7740b515a',1,'seastar::reactor_options']]], + ['helper_33',['helper',['../structseastar_1_1rpc_1_1marshall__one_1_1helper.html',1,'seastar::rpc::marshall_one< Serializer, Output >::helper< T >'],['../structseastar_1_1rpc_1_1unmarshal__one_1_1helper.html',1,'seastar::rpc::unmarshal_one< Serializer, Input >::helper< T >']]], + ['helper_3c_20optional_3c_20t_20_3e_20_3e_34',['helper< optional< T > >',['../structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01optional_3_01T_01_4_01_4.html',1,'seastar::rpc::unmarshal_one']]], + ['helper_3c_20sink_3c_20t_2e_2e_2e_20_3e_20_3e_35',['helper< sink< T... > >',['../structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc::marshall_one< Serializer, Output >::helper< sink< T... > >'],['../structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc::unmarshal_one< Serializer, Input >::helper< sink< T... > >']]], + ['helper_3c_20source_3c_20t_2e_2e_2e_20_3e_20_3e_36',['helper< source< T... > >',['../structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc::marshall_one< Serializer, Output >::helper< source< T... > >'],['../structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc::unmarshal_one< Serializer, Input >::helper< source< T... > >']]], + ['helper_3c_20std_3a_3areference_5fwrapper_3c_20const_20t_20_3e_20_3e_37',['helper< std::reference_wrapper< const T > >',['../structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4.html',1,'seastar::rpc::marshall_one< Serializer, Output >::helper< std::reference_wrapper< const T > >'],['../structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4.html',1,'seastar::rpc::unmarshal_one< Serializer, Input >::helper< std::reference_wrapper< const T > >']]], + ['helper_3c_20tuple_3c_20t_2e_2e_2e_20_3e_20_3e_38',['helper< tuple< T... > >',['../structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc::marshall_one< Serializer, Output >::helper< tuple< T... > >'],['../structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc::unmarshal_one< Serializer, Input >::helper< tuple< T... > >']]], + ['histogram_39',['histogram',['../structseastar_1_1metrics_1_1histogram.html',1,'seastar::metrics']]], + ['histogram_5fbucket_40',['histogram_bucket',['../namespaceseastar_1_1metrics.html#structseastar_1_1metrics_1_1histogram__bucket',1,'seastar::metrics']]], + ['hold_41',['hold',['../classseastar_1_1gate.html#acede2f3029c9d88ab7125e33ce0452d3',1,'seastar::gate']]], + ['hold_5fread_5flock_42',['hold_read_lock',['../classseastar_1_1basic__rwlock.html#aa703d97200570e03894afc30f7d345a6',1,'seastar::basic_rwlock']]], + ['hold_5fwrite_5flock_43',['hold_write_lock',['../classseastar_1_1basic__rwlock.html#ac43c2f1e0e5615657be0d0963ad7f7c9',1,'seastar::basic_rwlock']]], + ['holder_44',['holder',['../classseastar_1_1gate_1_1holder.html#ad79b9fe8aae2faf54cb38c36854432e9',1,'seastar::gate::holder::holder() noexcept'],['../classseastar_1_1gate_1_1holder.html#a0061f014da3f35f88a764b3405bf79cb',1,'seastar::gate::holder::holder(gate &g)'],['../classseastar_1_1gate_1_1holder.html#aa2bfab030bf87f12aea8e1322e33dde2',1,'seastar::gate::holder::holder(const holder &x) noexcept'],['../classseastar_1_1gate_1_1holder.html#a7e999a418ab6b33fd5bd6cc13c7bdb17',1,'seastar::gate::holder::holder(holder &&x) noexcept'],['../classseastar_1_1gate_1_1holder.html',1,'seastar::gate::holder']]], + ['host_5fipv4_5faddr_45',['host_ipv4_addr',['../structseastar_1_1net_1_1native__stack__options.html#a0ab99edac3d1efcbd7716f44bb562e3d',1,'seastar::net::native_stack_options']]], + ['hostent_46',['hostent',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1hostent',1,'seastar::net']]], + ['hostname_47',['hostname',['../structseastar_1_1prometheus_1_1config.html#aecd03cf9d7bee3d0d002a6c55a71ad84',1,'seastar::prometheus::config']]], + ['http_5fserver_48',['http_server',['../classseastar_1_1httpd_1_1http__server.html',1,'seastar::httpd']]], + ['http_5fserver_5fcontrol_49',['http_server_control',['../classseastar_1_1httpd_1_1http__server__control.html',1,'seastar::httpd']]], + ['http_5fserver_5ftester_50',['http_server_tester',['../classseastar_1_1httpd_1_1http__server__tester.html',1,'seastar::httpd']]], + ['http_5fstats_51',['http_stats',['../classseastar_1_1httpd_1_1http__stats.html',1,'seastar::httpd']]], + ['http_5fversion_5fnot_5fsupported_52',['http_version_not_supported',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abafd476d25163868fcc2d5a6800b844ee2',1,'seastar::http::reply']]], + ['hugepages_53',['hugepages',['../structseastar_1_1smp__options.html#a7a741a77d26ee6efa6d79b9c52ca192a',1,'seastar::smp_options']]], + ['hw_5fconfig_54',['hw_config',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1hw__config',1,'seastar::net']]], + ['hw_5ffc_55',['hw_fc',['../structseastar_1_1net_1_1dpdk__options.html#ac5d4b8b029eef1c87d00621f1b8597ca',1,'seastar::net::dpdk_options']]], + ['hw_5ffeatures_56',['hw_features',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1hw__features',1,'seastar::net']]], + ['hw_5fqueue_5fweight_57',['hw_queue_weight',['../structseastar_1_1net_1_1native__stack__options.html#ab32e44687495242d0a10c790915ae97d',1,'seastar::net::native_stack_options']]] +]; diff --git a/master/search/all_9.html b/master/search/all_9.html new file mode 100644 index 000000000..7c49144a8 --- /dev/null +++ b/master/search/all_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_9.js b/master/search/all_9.js new file mode 100644 index 000000000..fc20002f6 --- /dev/null +++ b/master/search/all_9.js @@ -0,0 +1,84 @@ +var searchData= +[ + ['icmp_0',['icmp',['../classseastar_1_1net_1_1icmp.html',1,'seastar::net']]], + ['icmp_5fhdr_1',['icmp_hdr',['../structseastar_1_1net_1_1icmp__hdr.html',1,'seastar::net']]], + ['idle_5fconnections_5fnr_2',['idle_connections_nr',['../classseastar_1_1http_1_1experimental_1_1client.html#a1ccc7e4fa961d76893913af74c23ab6b',1,'seastar::http::experimental::client']]], + ['idle_5fcpu_5fhandler_3',['idle_cpu_handler',['../namespaceseastar.html#abf634765970430360d353d2a6e99182f',1,'seastar']]], + ['idle_5fcpu_5fhandler_2ehh_4',['idle_cpu_handler.hh',['../idle__cpu__handler_8hh.html',1,'']]], + ['idle_5fcpu_5fhandler_5fresult_5',['idle_cpu_handler_result',['../namespaceseastar.html#aabff6d897c4e569b6f2bd55a155406f3',1,'seastar']]], + ['idle_5fpoll_5ftime_5fus_6',['idle_poll_time_us',['../structseastar_1_1reactor__options.html#aefa70b811e7277577c5de3cd33b9eda5',1,'seastar::reactor_options']]], + ['ignore_5fready_5ffuture_7',['ignore_ready_future',['../classseastar_1_1future.html#af25110829fc2dfc1d21e7d153743f416',1,'seastar::future']]], + ['impl_8',['impl',['../namespaceimpl.html',1,'impl'],['../classseastar_1_1metrics_1_1impl_1_1impl.html',1,'seastar::metrics::impl::impl'],['../classseastar_1_1rpc_1_1sink_1_1impl.html',1,'seastar::rpc::sink< Out >::impl'],['../classseastar_1_1rpc_1_1source_1_1impl.html',1,'seastar::rpc::source< In >::impl']]], + ['implementation_20overview_9',['Implementation overview',['../group__future-module-impl.html',1,'']]], + ['in_10',['in',['../classseastar_1_1http_1_1experimental_1_1connection.html#aa0ac583bedd018d11e155c8741be9b27',1,'seastar::http::experimental::connection']]], + ['indirect_5fequal_5fto_11',['indirect_equal_to',['../structseastar_1_1indirect__equal__to.html',1,'seastar']]], + ['indirect_5fhash_12',['indirect_hash',['../structseastar_1_1indirect__hash.html',1,'seastar']]], + ['indirect_5fless_13',['indirect_less',['../structseastar_1_1indirect__less.html',1,'seastar']]], + ['inet_5faddress_14',['inet_address',['../classseastar_1_1net_1_1inet__address.html',1,'seastar::net']]], + ['inheriting_5fconcrete_5fexecution_5fstage_15',['inheriting_concrete_execution_stage',['../classseastar_1_1inheriting__concrete__execution__stage.html#a2d4b548345baef1a3dd3befb9a4cc585',1,'seastar::inheriting_concrete_execution_stage::inheriting_concrete_execution_stage()'],['../classseastar_1_1inheriting__concrete__execution__stage.html',1,'seastar::inheriting_concrete_execution_stage< ReturnType, Args >']]], + ['inheriting_5fexecution_5fstage_16',['inheriting_execution_stage',['../classseastar_1_1inheriting__execution__stage.html',1,'seastar']]], + ['initialized_5flater_17',['initialized_later',['../classseastar_1_1basic__sstring.html#structseastar_1_1basic__sstring_1_1initialized__later',1,'seastar::basic_sstring']]], + ['input_18',['input',['../classseastar_1_1connected__socket.html#a331aa39e476b6f658f7d16ec277af23a',1,'seastar::connected_socket']]], + ['input_5fstream_19',['input_stream',['../classseastar_1_1input__stream.html',1,'seastar']]], + ['input_5fstream_3c_20char_20_3e_20',['input_stream< char >',['../classseastar_1_1input__stream.html',1,'seastar']]], + ['insert_21',['insert',['../classseastar_1_1basic__sstring.html#a66137e173a25ce58c5c7967c27487045',1,'seastar::basic_sstring::insert()'],['../classseastar_1_1timer__set.html#a109e6dc2889a72715906a38acd618099',1,'seastar::timer_set::insert()']]], + ['instance_22',['instance',['../classseastar_1_1alien_1_1instance.html',1,'seastar::alien']]], + ['instance_5fid_5ftype_23',['instance_id_type',['../group__metrics.html#gab58cfa335a5dd1aab1540831ab7a826f',1,'seastar::metrics']]], + ['insufficient_5fstorage_24',['insufficient_storage',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba869ba42fda9fabbbc350b57fcf22e81f',1,'seastar::http::reply']]], + ['interface_25',['interface',['../classseastar_1_1net_1_1interface.html',1,'seastar::net']]], + ['internal_5fserver_5ferror_26',['internal_server_error',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abace0ad649797c3b15fbed0b35850fa92a',1,'seastar::http::reply']]], + ['internal_5ftype_27',['internal_type',['../structseastar_1_1basic__sstring_1_1contents_1_1internal__type.html',1,'seastar::basic_sstring::contents']]], + ['interprocess_20communication_28',['Interprocess Communication',['../group__interprocess-module.html',1,'']]], + ['interrupted_5fby_5fhigher_5fpriority_5ftask_29',['interrupted_by_higher_priority_task',['../namespaceseastar.html#aabff6d897c4e569b6f2bd55a155406f3a3be6f16ddb1ad3f891462dd73c06c93c',1,'seastar']]], + ['invoke_30',['invoke',['../structseastar_1_1futurize.html#af250889a32f11a21a54d3a15ab8aa76f',1,'seastar::futurize']]], + ['invoke_5fon_31',['invoke_on',['../classseastar_1_1sharded.html#a1e0b4e9ac9bf07f795039fd0a4627e61',1,'seastar::sharded::invoke_on(unsigned id, Func &&func, Args &&... args)'],['../classseastar_1_1sharded.html#ad52bb04af6b3a20e318b17062f7784a8',1,'seastar::sharded::invoke_on(unsigned id, smp_submit_to_options options, Func &&func, Args &&... args)']]], + ['invoke_5fon_5fall_32',['invoke_on_all',['../classseastar_1_1smp.html#ab85dd7f081592f62a3e0e09fe553b8a7',1,'seastar::smp::invoke_on_all()'],['../classseastar_1_1sharded.html#a24e43c429a9f7f64d282c375d30c7269',1,'seastar::sharded::invoke_on_all(smp_submit_to_options options, std::function< future<>(Service &)> func) noexcept'],['../classseastar_1_1sharded.html#ad8cafb989fc24339f50736d77554ec48',1,'seastar::sharded::invoke_on_all(std::function< future<>(Service &)> func) noexcept'],['../classseastar_1_1sharded.html#a1cef49ae17cf7782282895a5ce83b8e9',1,'seastar::sharded::invoke_on_all(smp_submit_to_options options, Func func, Args... args) noexcept'],['../classseastar_1_1sharded.html#af119f256acd237432860099480759f4e',1,'seastar::sharded::invoke_on_all(Func func, Args... args) noexcept'],['../classseastar_1_1smp.html#ad5cb9ba3ad49821a618a96ccee38b37b',1,'seastar::smp::invoke_on_all()']]], + ['invoke_5fon_5fothers_33',['invoke_on_others',['../classseastar_1_1sharded.html#a557ee36dbf5b17ff16845f24ffbbf2dd',1,'seastar::sharded::invoke_on_others(smp_submit_to_options options, Func func, Args... args) noexcept'],['../classseastar_1_1sharded.html#ab6a3a223a178e2fd0d345cd31eb717c8',1,'seastar::sharded::invoke_on_others(Func func, Args... args) noexcept'],['../classseastar_1_1smp.html#a2addd75af4a58dac93fe385c2b298130',1,'seastar::smp::invoke_on_others(unsigned cpu_id, smp_submit_to_options options, Func func) noexcept'],['../classseastar_1_1smp.html#a66f34737209b097146a07fe52f4b175d',1,'seastar::smp::invoke_on_others(unsigned cpu_id, Func func) noexcept'],['../classseastar_1_1smp.html#a617fcde60995722435d19d4772a53114',1,'seastar::smp::invoke_on_others(Func func) noexcept']]], + ['io_2dmodule_34',['Io-module',['../group__io-module.html',1,'']]], + ['io_5fcompletion_35',['io_completion',['../classseastar_1_1io__completion.html',1,'seastar']]], + ['io_5fflow_5fratio_5fthreshold_36',['io_flow_ratio_threshold',['../structseastar_1_1reactor__options.html#a8c6dc1517a4f8a37bdec67e196c350fd',1,'seastar::reactor_options']]], + ['io_5fgroup_37',['io_group',['../classseastar_1_1io__group.html',1,'seastar']]], + ['io_5fintent_38',['io_intent',['../classseastar_1_1io__intent.html',1,'seastar']]], + ['io_5flatency_5fgoal_5fms_39',['io_latency_goal_ms',['../structseastar_1_1reactor__options.html#a4de41752b262f996707ca6c290dc4280',1,'seastar::reactor_options']]], + ['io_5fproperties_40',['io_properties',['../structseastar_1_1smp__options.html#a76216784ecfaabfa388e359e93fa3429',1,'seastar::smp_options']]], + ['io_5fproperties_5ffile_41',['io_properties_file',['../structseastar_1_1smp__options.html#ad0e7db9b3d2a5de572eb290f1def096b',1,'seastar::smp_options']]], + ['io_5fqueue_42',['io_queue',['../classseastar_1_1io__queue.html',1,'seastar']]], + ['io_5fqueue_5ftopology_43',['io_queue_topology',['../structseastar_1_1resource_1_1io__queue__topology.html',1,'seastar::resource']]], + ['io_5fstats_44',['io_stats',['../classseastar_1_1reactor.html#structseastar_1_1reactor_1_1io__stats',1,'seastar::reactor']]], + ['ioctl_45',['ioctl',['../classseastar_1_1file.html#a15e4eeb9ae9a75fd0455246a7b070dc2',1,'seastar::file']]], + ['ioctl_5fshort_46',['ioctl_short',['../classseastar_1_1file.html#ac93a87910ccb6ce55068bd87d050f5b4',1,'seastar::file']]], + ['ip_5fhdr_47',['ip_hdr',['../structseastar_1_1net_1_1ip__hdr.html',1,'seastar::net']]], + ['ip_5fpacket_5ffilter_48',['ip_packet_filter',['../structseastar_1_1net_1_1ip__packet__filter.html',1,'seastar::net']]], + ['ip_5fprotocol_49',['ip_protocol',['../classseastar_1_1net_1_1ip__protocol.html',1,'seastar::net']]], + ['ipv4_50',['ipv4',['../classseastar_1_1net_1_1ipv4.html',1,'seastar::net']]], + ['ipv4_5faddr_51',['ipv4_addr',['../structseastar_1_1ipv4__addr.html',1,'seastar']]], + ['ipv4_5faddress_52',['ipv4_address',['../structseastar_1_1net_1_1ipv4__address.html',1,'seastar::net']]], + ['ipv4_5fconfig_53',['ipv4_config',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1ipv4__config',1,'seastar::net']]], + ['ipv4_5ffrag_5fid_54',['ipv4_frag_id',['../structseastar_1_1net_1_1ipv4__frag__id.html',1,'seastar::net']]], + ['ipv4_5ficmp_55',['ipv4_icmp',['../classseastar_1_1net_1_1ipv4__icmp.html',1,'seastar::net']]], + ['ipv4_5fl4_56',['ipv4_l4',['../classseastar_1_1net_1_1ipv4__l4.html',1,'seastar::net']]], + ['ipv4_5fl4_3c_20ip_5fprotocol_5fnum_3a_3aicmp_20_3e_57',['ipv4_l4< ip_protocol_num::icmp >',['../classseastar_1_1net_1_1ipv4__l4.html',1,'seastar::net']]], + ['ipv4_5fl4_3c_20ip_5fprotocol_5fnum_3a_3atcp_20_3e_58',['ipv4_l4< ip_protocol_num::tcp >',['../classseastar_1_1net_1_1ipv4__l4.html',1,'seastar::net']]], + ['ipv4_5ftag_59',['ipv4_tag',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1ipv4__tag',1,'seastar::net']]], + ['ipv4_5ftcp_60',['ipv4_tcp',['../classseastar_1_1net_1_1ipv4__tcp.html',1,'seastar::net']]], + ['ipv4_5ftraits_61',['ipv4_traits',['../structseastar_1_1net_1_1ipv4__traits.html',1,'seastar::net']]], + ['ipv4_5fudp_62',['ipv4_udp',['../classseastar_1_1net_1_1ipv4__udp.html',1,'seastar::net']]], + ['ipv6_5faddr_63',['ipv6_addr',['../structseastar_1_1ipv6__addr.html',1,'seastar']]], + ['ipv6_5faddress_64',['ipv6_address',['../structseastar_1_1net_1_1ipv6__address.html',1,'seastar::net']]], + ['is_5fabort_5fon_5fallocation_5ffailure_65',['is_abort_on_allocation_failure',['../namespaceseastar_1_1memory.html#a736d66a55005b21df25d239f955f9bfd',1,'seastar::memory']]], + ['is_5fabort_5fon_5febadf_5fenabled_66',['is_abort_on_ebadf_enabled',['../namespaceseastar.html#ae37887bed24c66674d425af3a46799dc',1,'seastar']]], + ['is_5fcallable_67',['is_callable',['../namespaceseastar_1_1scollectd.html#structseastar_1_1scollectd_1_1is__callable',1,'seastar::scollectd']]], + ['is_5fcallable_3c_20t_2c_20std_3a_3aenable_5fif_5ft_3c_20std_3a_3ais_5ffundamental_5fv_3c_20t_20_3e_2c_20void_20_3e_20_3e_68',['is_callable< T, std::enable_if_t< std::is_fundamental_v< T >, void > >',['../structseastar_1_1scollectd_1_1is__callable_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__fundam691d139f22c6f61584588d14c6b15105.html',1,'seastar::scollectd']]], + ['is_5fcallable_3c_20t_2c_20std_3a_3aenable_5fif_5ft_3c_21std_3a_3ais_5fvoid_5fv_3c_20std_3a_3ainvoke_5fresult_5ft_3c_20t_20_3e_20_3e_2c_20void_20_3e_20_3e_69',['is_callable< T, std::enable_if_t<!std::is_void_v< std::invoke_result_t< T > >, void > >',['../structseastar_1_1scollectd_1_1is__callable_3_01T_00_01std_1_1enable__if__t_3_9std_1_1is__void__v6ef63c309456a52af7019db17223ca10.html',1,'seastar::scollectd']]], + ['is_5fclosed_70',['is_closed',['../classseastar_1_1gate.html#a317bcdf5665219c42f80c9ff59100770',1,'seastar::gate']]], + ['is_5fempty_71',['is_empty',['../classseastar_1_1metrics_1_1impl_1_1metric__value.html#a87b19e9c3da7cb1680fc6faf20e23e7d',1,'seastar::metrics::impl::metric_value']]], + ['is_5ffuture_72',['is_future',['../structseastar_1_1is__future.html',1,'seastar']]], + ['is_5fsmart_5fptr_73',['is_smart_ptr',['../structseastar_1_1is__smart__ptr.html',1,'seastar']]], + ['is_5fsmart_5fptr_3c_20foreign_5fptr_3c_20t_20_3e_20_3e_74',['is_smart_ptr< foreign_ptr< T > >',['../structseastar_1_1is__smart__ptr_3_01foreign__ptr_3_01T_01_4_01_4.html',1,'seastar']]], + ['is_5fsmart_5fptr_3c_20lw_5fshared_5fptr_3c_20t_20_3e_20_3e_75',['is_smart_ptr< lw_shared_ptr< T > >',['../structseastar_1_1is__smart__ptr_3_01lw__shared__ptr_3_01T_01_4_01_4.html',1,'seastar']]], + ['is_5fsmart_5fptr_3c_20shared_5fptr_3c_20t_20_3e_20_3e_76',['is_smart_ptr< shared_ptr< T > >',['../structseastar_1_1is__smart__ptr_3_01shared__ptr_3_01T_01_4_01_4.html',1,'seastar']]], + ['is_5fsmart_5fptr_3c_20std_3a_3aunique_5fptr_3c_20t_20_3e_20_3e_77',['is_smart_ptr< std::unique_ptr< T > >',['../structseastar_1_1is__smart__ptr_3_01std_1_1unique__ptr_3_01T_01_4_01_4.html',1,'seastar']]], + ['is_5fverify_78',['is_verify',['../classseastar_1_1json_1_1json__base__element.html#a2dd57d8fb2603d16399fa4d4133534cf',1,'seastar::json::json_base_element::is_verify()'],['../structseastar_1_1json_1_1json__base.html#a2847dc82ba1d517a558e017ee6f43455',1,'seastar::json::json_base::is_verify()']]], + ['isolation_5fconfig_79',['isolation_config',['../group__rpc.html#structseastar_1_1rpc_1_1isolation__config',1,'seastar::rpc']]], + ['isolation_5fcookie_80',['isolation_cookie',['../group__rpc.html#acd3e23c31cb27aa7af0099e758d6b733',1,'seastar::rpc::client_options']]] +]; diff --git a/master/search/all_a.html b/master/search/all_a.html new file mode 100644 index 000000000..fc9d79cdf --- /dev/null +++ b/master/search/all_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_a.js b/master/search/all_a.js new file mode 100644 index 000000000..964d7a2a3 --- /dev/null +++ b/master/search/all_a.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['join_0',['join',['../group__thread-module.html#ga3945d98e757fcdc25c193822b73fef9f',1,'seastar::thread']]], + ['json_5fbase_1',['json_base',['../structseastar_1_1json_1_1json__base.html',1,'seastar::json']]], + ['json_5fbase_5felement_2',['json_base_element',['../classseastar_1_1json_1_1json__base__element.html#a078f32f3feeab754507938236a478c8c',1,'seastar::json::json_base_element::json_base_element()'],['../classseastar_1_1json_1_1json__base__element.html',1,'seastar::json::json_base_element']]], + ['json_5felement_3',['json_element',['../classseastar_1_1json_1_1json__element.html',1,'seastar::json']]], + ['json_5felement_3c_20int_20_3e_4',['json_element< int >',['../classseastar_1_1json_1_1json__element.html',1,'seastar::json']]], + ['json_5felement_3c_20std_3a_3astring_20_3e_5',['json_element< std::string >',['../classseastar_1_1json_1_1json__element.html',1,'seastar::json']]], + ['json_5fexception_6',['json_exception',['../classseastar_1_1httpd_1_1json__exception.html',1,'seastar::httpd']]], + ['json_5flist_7',['json_list',['../classseastar_1_1json_1_1json__list.html',1,'seastar::json']]], + ['json_5flist_3c_20seastar_3a_3ahttpd_3a_3aapi_5fdoc_20_3e_8',['json_list< seastar::httpd::api_doc >',['../classseastar_1_1json_1_1json__list.html',1,'seastar::json']]], + ['json_5foperation_9',['json_operation',['../structseastar_1_1httpd_1_1json__operation.html#ae69bfd11391087b976a97290304c6be1',1,'seastar::httpd::json_operation::json_operation()'],['../structseastar_1_1httpd_1_1json__operation.html#a9472dce643c8702dbad975998fdbb431',1,'seastar::httpd::json_operation::json_operation(operation_type method, const sstring &nickname)'],['../structseastar_1_1httpd_1_1json__operation.html',1,'seastar::httpd::json_operation']]], + ['json_5freturn_5ftype_10',['json_return_type',['../structseastar_1_1json_1_1json__return__type.html',1,'seastar::json']]], + ['json_5fvoid_11',['json_void',['../structseastar_1_1json_1_1json__void.html',1,'seastar::json']]], + ['jsonable_12',['jsonable',['../classseastar_1_1json_1_1jsonable.html',1,'seastar::json']]] +]; diff --git a/master/search/all_b.html b/master/search/all_b.html new file mode 100644 index 000000000..dafb1fad5 --- /dev/null +++ b/master/search/all_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_b.js b/master/search/all_b.js new file mode 100644 index 000000000..f9315437b --- /dev/null +++ b/master/search/all_b.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['keep_5fdoing_0',['keep_doing',['../group__future-util.html#ga5c4d6338e081ba5ee5d982ea7773769d',1,'seastar']]], + ['kernel_5fcompletion_1',['kernel_completion',['../classseastar_1_1kernel__completion.html',1,'seastar']]], + ['kernel_5fpage_5fcache_2',['kernel_page_cache',['../structseastar_1_1reactor__options.html#ab4dc65b16372f4254bcda79878aeb56b',1,'seastar::reactor_options']]], + ['key_3',['key',['../classseastar_1_1metrics_1_1label__instance.html#a057063c45f1fba180aa3955e4f4aaae0',1,'seastar::metrics::label_instance']]], + ['kill_4',['kill',['../classseastar_1_1experimental_1_1process.html#a876f260e8b0036a9bbe39c416ee02ac8',1,'seastar::experimental::process']]] +]; diff --git a/master/search/all_c.html b/master/search/all_c.html new file mode 100644 index 000000000..9df619d21 --- /dev/null +++ b/master/search/all_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_c.js b/master/search/all_c.js new file mode 100644 index 000000000..465590187 --- /dev/null +++ b/master/search/all_c.js @@ -0,0 +1,61 @@ +var searchData= +[ + ['l3_5fprotocol_0',['l3_protocol',['../classseastar_1_1net_1_1l3__protocol.html',1,'seastar::net']]], + ['l3packet_1',['l3packet',['../classseastar_1_1net_1_1l3__protocol.html#structseastar_1_1net_1_1l3__protocol_1_1l3packet',1,'seastar::net::l3_protocol']]], + ['l4connid_2',['l4connid',['../structseastar_1_1net_1_1l4connid.html',1,'seastar::net']]], + ['l4packet_3',['l4packet',['../structseastar_1_1net_1_1ipv4__traits.html#structseastar_1_1net_1_1ipv4__traits_1_1l4packet',1,'seastar::net::ipv4_traits']]], + ['label_4',['label',['../classseastar_1_1metrics_1_1label.html#aa7b7118feb1b3fa254c9c55f99537eb8',1,'seastar::metrics::label::label()'],['../structseastar_1_1prometheus_1_1config.html#a2e22255a950330c12ca73fb1c9e637ef',1,'seastar::prometheus::config::label()'],['../classseastar_1_1metrics_1_1label.html',1,'seastar::metrics::label']]], + ['label_5finstance_5',['label_instance',['../classseastar_1_1metrics_1_1label__instance.html#ace823baab39b7697a3ee583b3afbe82c',1,'seastar::metrics::label_instance::label_instance()'],['../classseastar_1_1metrics_1_1label__instance.html',1,'seastar::metrics::label_instance']]], + ['lambda_6',['lambda',['../classseastar_1_1coroutine_1_1lambda.html#a09881f7f91ab36e680930c96c7533644',1,'seastar::coroutine::lambda::lambda()'],['../classseastar_1_1coroutine_1_1lambda.html',1,'seastar::coroutine::lambda< Func >']]], + ['lambda_5ftask_7',['lambda_task',['../classseastar_1_1lambda__task.html',1,'seastar']]], + ['large_5fallocations_8',['large_allocations',['../classseastar_1_1memory_1_1statistics.html#a4a518e6c41ec8d0b02b5a50c6b4f38f3',1,'seastar::memory::statistics']]], + ['later_9',['later',['../group__future-util.html#gae9104fe28893794e962776d8a79c4324',1,'seastar']]], + ['layered_5ffile_5fimpl_10',['layered_file_impl',['../classseastar_1_1layered__file__impl.html#a7a8cf95c4f361038561c57af2bb1d25b',1,'seastar::layered_file_impl::layered_file_impl()'],['../classseastar_1_1layered__file__impl.html',1,'seastar::layered_file_impl']]], + ['lazy_5fderef_11',['lazy_deref',['../namespaceseastar.html#aecc7f3ee11f76b0667a1eb97a2dde0a5',1,'seastar']]], + ['lazy_5fderef_5fwrapper_12',['lazy_deref_wrapper',['../structseastar_1_1lazy__deref__wrapper.html',1,'seastar']]], + ['lazy_5feval_13',['lazy_eval',['../classseastar_1_1lazy__eval.html',1,'seastar']]], + ['lease_14',['lease',['../classseastar_1_1net_1_1dhcp.html#structseastar_1_1net_1_1dhcp_1_1lease',1,'seastar::net::dhcp']]], + ['leave_15',['leave',['../classseastar_1_1gate.html#ad5c16b469c80b3ee87ef5d9bb94e2675',1,'seastar::gate']]], + ['length_5frequired_16',['length_required',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abac4aa8246cb30b35b6f4e8a199c972d27',1,'seastar::http::reply']]], + ['link_5ffile_17',['link_file',['../group__fileio-module.html#gac54bac52eb8830c25703e1faf1dbda54',1,'seastar']]], + ['linux_5faio_5fnowait_18',['linux_aio_nowait',['../structseastar_1_1reactor__options.html#a11a718020079692cde2c3dfa35dd87a6',1,'seastar::reactor_options']]], + ['linux_5fperf_5fevent_19',['linux_perf_event',['../classlinux__perf__event.html',1,'']]], + ['list_5fdirectory_20',['list_directory',['../classseastar_1_1file.html#a2aa464b83d383966f0a37b3189bd03be',1,'seastar::file']]], + ['listen_21',['listen',['../group__websocket.html#ga1912a8385ba19b97c7057b3df0122f8a',1,'seastar::experimental::websocket::server::listen(socket_address addr)'],['../group__websocket.html#ga971e79c47630a7104937daf343df20fb',1,'seastar::experimental::websocket::server::listen(socket_address addr, listen_options lo)'],['../group__networking-module.html#ga08a994e9ad626edf808807238dc8a0c2',1,'seastar::listen(socket_address sa)'],['../group__networking-module.html#ga5e56f9b882539331f2195aa3f018d08a',1,'seastar::listen(socket_address sa, listen_options opts)'],['../namespaceseastar_1_1tls.html#ae62996df4a053aedc8544860d24762c6',1,'seastar::tls::listen()']]], + ['listen_5foptions_22',['listen_options',['../structseastar_1_1listen__options.html',1,'seastar']]], + ['listener_23',['listener',['../classseastar_1_1net_1_1tcp_1_1listener.html',1,'seastar::net::tcp']]], + ['live_5fobjects_24',['live_objects',['../classseastar_1_1memory_1_1statistics.html#a97135283d408e2c14c2eeecdfe07d7c7',1,'seastar::memory::statistics']]], + ['local_25',['local',['../classseastar_1_1sharded.html#a3f110028ecc127b0ad325653284d6b5a',1,'seastar::sharded::local() const noexcept'],['../classseastar_1_1sharded.html#a090d5158ace89c48cada63527954ef75',1,'seastar::sharded::local() noexcept']]], + ['local_5faddress_26',['local_address',['../classseastar_1_1server__socket.html#a15a62313222a172c78457e26e895d38c',1,'seastar::server_socket::local_address()'],['../classseastar_1_1connected__socket.html#a561a4ad256696d9bceb4e08d440d37d7',1,'seastar::connected_socket::local_address()']]], + ['local_5ffailure_5finjector_27',['local_failure_injector',['../namespaceseastar_1_1memory.html#a9b085dbb3af4005ea872262f162f4fee',1,'seastar::memory']]], + ['local_5fis_5finitialized_28',['local_is_initialized',['../classseastar_1_1sharded.html#a19ac7930e186446a0eeffc28a4541e73',1,'seastar::sharded']]], + ['local_5fshared_29',['local_shared',['../classseastar_1_1sharded.html#a4236dc613fd0fba9d12371d791adf4a4',1,'seastar::sharded']]], + ['lock_30',['lock',['../classseastar_1_1shared__mutex.html#a3aef1797967b983bdabbbe22787a0511',1,'seastar::shared_mutex']]], + ['lock_5fmemory_31',['lock_memory',['../structseastar_1_1smp__options.html#ad40522943b80c1d6b87c6b5baf54b157',1,'seastar::smp_options']]], + ['lock_5fshared_32',['lock_shared',['../classseastar_1_1shared__mutex.html#ac4bdc3d6f6731b96ac0b6030b1d6f631',1,'seastar::shared_mutex']]], + ['locked_33',['locked',['../classseastar_1_1basic__rwlock.html#abf3e135f9983ef093c27d6ba2517a1e8',1,'seastar::basic_rwlock']]], + ['log_5flevel_34',['log_level',['../group__logging.html#gabd9863960b1a4009d2e1542349be4f0f',1,'seastar']]], + ['log_5fto_5fstdout_35',['log_to_stdout',['../structseastar_1_1log__cli_1_1options.html#a05cfc5a125c813b4730aba1484af7721',1,'seastar::log_cli::options']]], + ['log_5fto_5fsyslog_36',['log_to_syslog',['../structseastar_1_1log__cli_1_1options.html#ae23bcd062c92f5f91c6ff037589c83c5',1,'seastar::log_cli::options']]], + ['log_5fwith_5fcolor_37',['log_with_color',['../structseastar_1_1log__cli_1_1options.html#a4c3a43fe72a76c21de5873a35d1f4bca',1,'seastar::log_cli::options']]], + ['logger_38',['logger',['../classseastar_1_1rpc_1_1logger.html',1,'seastar::rpc']]], + ['logger_5flog_5flevel_39',['logger_log_level',['../structseastar_1_1log__cli_1_1options.html#a397708be4bd607caa12d183ac8d4df2d',1,'seastar::log_cli::options']]], + ['logger_5fostream_5ftype_40',['logger_ostream_type',['../structseastar_1_1log__cli_1_1options.html#a2cfd46c6e6340ba7792a0faa9a6824f2',1,'seastar::log_cli::options']]], + ['logger_5fstdout_5ftimestamps_41',['logger_stdout_timestamps',['../structseastar_1_1log__cli_1_1options.html#aac5149a07eda206c7d530acc7f2c0511',1,'seastar::log_cli::options']]], + ['logging_42',['Logging',['../group__logging.html',1,'']]], + ['lowres_5fclock_43',['lowres_clock',['../classseastar_1_1lowres__clock.html',1,'seastar']]], + ['lowres_5fsystem_5fclock_44',['lowres_system_clock',['../classseastar_1_1lowres__system__clock.html',1,'seastar']]], + ['lro_45',['lro',['../structseastar_1_1net_1_1native__stack__options.html#ac8207763adaba6127f5d253536090dfa',1,'seastar::net::native_stack_options']]], + ['lw_5fshared_5fptr_46',['lw_shared_ptr',['../classseastar_1_1lw__shared__ptr.html',1,'seastar']]], + ['lw_5fshared_5fptr_3c_20foreign_5fptr_3c_20shared_5fptr_3c_20connection_20_3e_20_3e_20_3e_47',['lw_shared_ptr< foreign_ptr< shared_ptr< connection > > >',['../classseastar_1_1lw__shared__ptr.html',1,'seastar']]], + ['lw_5fshared_5fptr_3c_20load_5fbalancer_20_3e_48',['lw_shared_ptr< load_balancer >',['../classseastar_1_1lw__shared__ptr.html',1,'seastar']]], + ['lw_5fshared_5fptr_3c_20seastar_3a_3afile_5finput_5fstream_5fhistory_20_3e_49',['lw_shared_ptr< seastar::file_input_stream_history >',['../classseastar_1_1lw__shared__ptr.html',1,'seastar']]], + ['lw_5fshared_5fptr_3c_20seastar_3a_3anet_3a_3audp_5fchannel_5fstate_20_3e_50',['lw_shared_ptr< seastar::net::udp_channel_state >',['../classseastar_1_1lw__shared__ptr.html',1,'seastar']]], + ['lw_5fshared_5fptr_3c_20shared_5fstate_20_3e_51',['lw_shared_ptr< shared_state >',['../classseastar_1_1lw__shared__ptr.html',1,'seastar']]], + ['lw_5fshared_5fptr_3c_20tcb_20_3e_52',['lw_shared_ptr< tcb >',['../classseastar_1_1lw__shared__ptr.html',1,'seastar']]], + ['lw_5fshared_5fptr_5fcounter_5fbase_53',['lw_shared_ptr_counter_base',['../structseastar_1_1lw__shared__ptr__counter__base.html',1,'seastar']]], + ['lw_5fshared_5fptr_5fdeleter_54',['lw_shared_ptr_deleter',['../namespaceseastar.html#structseastar_1_1lw__shared__ptr__deleter',1,'seastar']]], + ['lw_5fshared_5fptr_5fno_5fesft_55',['lw_shared_ptr_no_esft',['../structseastar_1_1lw__shared__ptr__no__esft.html',1,'seastar']]], + ['lz4_5fcompressor_56',['lz4_compressor',['../classseastar_1_1rpc_1_1lz4__compressor.html',1,'seastar::rpc']]], + ['lz4_5ffragmented_5fcompressor_57',['lz4_fragmented_compressor',['../classseastar_1_1rpc_1_1lz4__fragmented__compressor.html',1,'seastar::rpc']]] +]; diff --git a/master/search/all_d.html b/master/search/all_d.html new file mode 100644 index 000000000..95d8eec55 --- /dev/null +++ b/master/search/all_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_d.js b/master/search/all_d.js new file mode 100644 index 000000000..70c3f9d61 --- /dev/null +++ b/master/search/all_d.js @@ -0,0 +1,115 @@ +var searchData= +[ + ['make_0',['make',['../structseastar_1_1http_1_1request.html#a9e946968e5959936dca8cfd3a682195a',1,'seastar::http::request::make()'],['../classseastar_1_1http_1_1experimental_1_1connection__factory.html#ac72157b59adc48996792f5f33babce27',1,'seastar::http::experimental::connection_factory::make()'],['../structseastar_1_1http_1_1request.html#aa656bbbcb08ab18eb3161722a20b2c75',1,'seastar::http::request::make()']]], + ['make_5fabsolute_1',['make_absolute',['../group__metrics.html#gad74ba618605afa5b9ad4857f72dd37a0',1,'seastar::metrics']]], + ['make_5fbacktraced_5fexception_5fptr_2',['make_backtraced_exception_ptr',['../namespaceseastar.html#ae8d4cf8e5edb3230f8cd5be1ffd737e8',1,'seastar']]], + ['make_5fbound_5fdatagram_5fchannel_3',['make_bound_datagram_channel',['../group__networking-module.html#gab2cc14d3d75b885c5a3af8d3cf4dbc87',1,'seastar']]], + ['make_5fclient_4',['make_client',['../classseastar_1_1rpc_1_1protocol.html#aa0fa06b9b1b27f9b12f65f0fc2f3a847',1,'seastar::rpc::protocol']]], + ['make_5fcounter_5',['make_counter',['../group__metrics.html#gad8971c478a5524f7411847301b09af6d',1,'seastar::metrics::make_counter(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})'],['../group__metrics.html#gae07c74165ab4f2738a16dc8e40701473',1,'seastar::metrics::make_counter(metric_name_type name, description d, T &&val)'],['../group__metrics.html#ga71e353f1f932cd001eb06237a97a8f9b',1,'seastar::metrics::make_counter(metric_name_type name, description d, std::vector< label_instance > labels, T &&val)']]], + ['make_5fcurrent_5fbytes_6',['make_current_bytes',['../group__metrics.html#gac7d330221ab1bd9c6cb25d73319d8bab',1,'seastar::metrics']]], + ['make_5fdeleter_7',['make_deleter',['../group__memory-module.html#ga8a3eb323c7e666c1dbe8f05f1eae9ec7',1,'seastar::deleter::make_deleter(Object o)'],['../group__memory-module.html#gae36cce0e1479f90d26980123d648ff30',1,'seastar::deleter::make_deleter(deleter next, Object o)']]], + ['make_5fderive_8',['make_derive',['../group__metrics.html#gabf355eaea56afaf1160338b93c9be5bf',1,'seastar::metrics::make_derive(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})'],['../group__metrics.html#ga96c1f27cf5a7036c35fa08538afc4ac3',1,'seastar::metrics::make_derive(metric_name_type name, description d, T &&val)'],['../group__metrics.html#ga72a3fbf8bcdf51ed43f6758e8cb7f4a7',1,'seastar::metrics::make_derive(metric_name_type name, description d, std::vector< label_instance > labels, T &&val)']]], + ['make_5fdirectory_9',['make_directory',['../group__fileio-module.html#gaf8677b370610efda74e075df2544f019',1,'seastar']]], + ['make_5fexception_5ffuture_10',['make_exception_future',['../group__future-module.html#ga60a5421c944cd120a0c2c9000a3a8272',1,'seastar::make_exception_future(std::exception_ptr &&value) noexcept'],['../group__future-module.html#ga80fbf1e5027b6a3acc126f133b584938',1,'seastar::make_exception_future(Exception &&ex) noexcept']]], + ['make_5fexecution_5fstage_11',['make_execution_stage',['../group__execution-stages.html#ga670deeba65414630039868da3ce09250',1,'seastar::make_execution_stage(const sstring &name, Function &&fn)'],['../group__execution-stages.html#gaa89678cc474f0762c266953ef5c758c5',1,'seastar::make_execution_stage(const sstring &name, scheduling_group sg, Ret(Object::*fn)(Args...))'],['../group__execution-stages.html#gaeb24d9990bf6b8ee2332d2a1652be304',1,'seastar::make_execution_stage(const sstring &name, scheduling_group sg, Function &&fn)']]], + ['make_5ffile_5fdata_5fsink_12',['make_file_data_sink',['../namespaceseastar.html#a19f21201afe13992f66a152573260bc0',1,'seastar']]], + ['make_5ffile_5finput_5fstream_13',['make_file_input_stream',['../namespaceseastar.html#ab42e9db5e576c1fa2875b5f8d8f5d21f',1,'seastar::make_file_input_stream(file file, uint64_t offset, uint64_t len, file_input_stream_options options={})'],['../namespaceseastar.html#a531d1622d0fa6b5d4a54b157f3bc8288',1,'seastar::make_file_input_stream(file file, file_input_stream_options={})'],['../namespaceseastar.html#ac990d9c7d95d86ff793c4eabf9bac571',1,'seastar::make_file_input_stream(file file, uint64_t offset, file_input_stream_options={})']]], + ['make_5ffile_5foutput_5fstream_14',['make_file_output_stream',['../namespaceseastar.html#aeb9fe82845fe3563e7280ab3291e7a4d',1,'seastar::make_file_output_stream(file file, file_output_stream_options options) noexcept'],['../namespaceseastar.html#a10c39658b60b6e650e17301accec5d1a',1,'seastar::make_file_output_stream(file file, uint64_t buffer_size=8192) noexcept']]], + ['make_5ffilesystem_5ferror_15',['make_filesystem_error',['../namespaceseastar.html#a94a888bb6dc27e74f53a712b5603a3c0',1,'seastar::make_filesystem_error(const std::string &what, std::filesystem::path path1, std::filesystem::path path2, int error)'],['../namespaceseastar.html#aac007772d15f464f72d507c6a0c959c2',1,'seastar::make_filesystem_error(const std::string &what, std::filesystem::path path, int error)']]], + ['make_5fforeign_16',['make_foreign',['../group__smp-module.html#ga66f11a099b72fc44ce40874fa9e535e2',1,'seastar::foreign_ptr']]], + ['make_5ffree_5fdeleter_17',['make_free_deleter',['../group__memory-module.html#ga0e475d5973afd4c4a8103133bc2b9db0',1,'seastar::deleter::make_free_deleter(deleter next, void *obj)'],['../group__memory-module.html#gacd9ec07d8a04f1eac892b6dee2f1370e',1,'seastar::deleter::make_free_deleter(void *obj)']]], + ['make_5fgauge_18',['make_gauge',['../group__metrics.html#gacc7f22de184d239a726c14d943ebdcc4',1,'seastar::metrics::make_gauge(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})'],['../group__metrics.html#ga79ea0501bd2b4eeff4e04e2cc65f826c',1,'seastar::metrics::make_gauge(metric_name_type name, description d, T &&val)'],['../group__metrics.html#ga605924bed731d8afd10441d50bb50df6',1,'seastar::metrics::make_gauge(metric_name_type name, description d, std::vector< label_instance > labels, T &&val)']]], + ['make_5fhelper_19',['make_helper',['../classseastar_1_1shared__ptr.html#structseastar_1_1shared__ptr_1_1make__helper',1,'seastar::shared_ptr']]], + ['make_5fhistogram_20',['make_histogram',['../group__metrics.html#gaf7b5b5b8326ad56e88cc1fd94fa645ab',1,'seastar::metrics::make_histogram(metric_name_type name, description d, T &&val)'],['../group__metrics.html#gaa334f9e7327f48dcaf3e621691476d0c',1,'seastar::metrics::make_histogram(metric_name_type name, description d, std::vector< label_instance > labels, T &&val)'],['../group__metrics.html#gafe334f31b113b744a3d5a23a92d4f152',1,'seastar::metrics::make_histogram(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})']]], + ['make_5fobject_5fdeleter_21',['make_object_deleter',['../group__memory-module.html#ga4b4dc8940a76096aefb10a8815d6b091',1,'seastar::deleter::make_object_deleter(deleter d, T &&obj)'],['../group__memory-module.html#ga1534b761b13c8aa56a31edbd9736614b',1,'seastar::deleter::make_object_deleter(T &&obj)']]], + ['make_5fpipe_22',['make_pipe',['../group__interprocess-module.html#ga8f5153ec7adfc0e4df631a7020866e94',1,'seastar::experimental']]], + ['make_5fqueue_5flength_23',['make_queue_length',['../group__metrics.html#ga1b7784846ed5a12ce7528852bd5f2fe5',1,'seastar::metrics']]], + ['make_5fready_5ffuture_24',['make_ready_future',['../group__future-module.html#ga1276c421f1d371494803c41bdfdf71ab',1,'seastar']]], + ['make_5frequest_25',['make_request',['../classseastar_1_1http_1_1experimental_1_1connection.html#aed78529bc405b77f490a3ea29d51a3fc',1,'seastar::http::experimental::connection::make_request()'],['../classseastar_1_1http_1_1experimental_1_1client.html#a3f2cf52ff13609e6eea037b1b4847c16',1,'seastar::http::experimental::client::make_request()']]], + ['make_5fscheduling_5fgroup_5fkey_5fconfig_26',['make_scheduling_group_key_config',['../namespaceseastar.html#af4342d3f0f1757547e6a512d6d4eab3d',1,'seastar']]], + ['make_5fsocket_27',['make_socket',['../group__networking-module.html#ga36e41d350711e715366638466d45d8b8',1,'seastar']]], + ['make_5fsummary_28',['make_summary',['../group__metrics.html#gac92e8f2c8f8497bbff758b6f9181267d',1,'seastar::metrics']]], + ['make_5ftemporary_5fbuffer_29',['make_temporary_buffer',['../namespaceseastar.html#a606ed2bc89f419247c49d06eb91ef232',1,'seastar']]], + ['make_5ftmp_5fdir_30',['make_tmp_dir',['../namespaceseastar.html#a79f432769a2b17a370d1d4e6d582f231',1,'seastar']]], + ['make_5ftmp_5ffile_31',['make_tmp_file',['../namespaceseastar.html#a8163fdf34636b54911cbebfba760d503',1,'seastar']]], + ['make_5ftotal_5fbytes_32',['make_total_bytes',['../group__metrics.html#gab62d9a48be1fb8d1c393a7d6df4bf631',1,'seastar::metrics']]], + ['make_5ftotal_5foperations_33',['make_total_operations',['../group__metrics.html#ga869993c87742e53818eaffc54884d0b4',1,'seastar::metrics']]], + ['make_5fudp_5fchannel_34',['make_udp_channel',['../group__networking-module.html#ga14edad0c875a1a3c031f6d2dabfd63ff',1,'seastar::make_udp_channel()'],['../group__networking-module.html#gab506583863d4f6a0d18ea1e48bbe76fa',1,'seastar::make_udp_channel(const socket_address &local)']]], + ['make_5funbound_5fdatagram_5fchannel_35',['make_unbound_datagram_channel',['../group__networking-module.html#ga18498ed2e7622eaad5c2ca5484f6ade3',1,'seastar']]], + ['make_5fvisitor_36',['make_visitor',['../group__utilities.html#ga2ea3cafdeb41ff4c31beda2839cf2eaf',1,'seastar']]], + ['mallocs_37',['mallocs',['../classseastar_1_1memory_1_1statistics.html#a784827d2af511815b8c91a6268602a2a',1,'seastar::memory::statistics']]], + ['mandatory_38',['mandatory',['../classseastar_1_1httpd_1_1handler__base.html#a813fac886c22a339e1d1052c69797c84',1,'seastar::httpd::handler_base']]], + ['manual_5fclock_39',['manual_clock',['../classseastar_1_1manual__clock.html',1,'seastar']]], + ['map_40',['map',['../classseastar_1_1sharded.html#a3f647fe7aa88c5d61e73953148171e11',1,'seastar::sharded']]], + ['map_5freduce_41',['map_reduce',['../classseastar_1_1sharded.html#a4a1f3ec18e3dbdb4216f45c540be5510',1,'seastar::sharded::map_reduce(Reducer &&r, Func &&func, Args &&... args) const -> typename reducer_traits< Reducer >::future_type'],['../classseastar_1_1sharded.html#abf9782b54f3a3e684a50058bda32e22c',1,'seastar::sharded::map_reduce(Reducer &&r, Func &&func, Args &&... args) -> typename reducer_traits< Reducer >::future_type'],['../group__future-util.html#gac3e26aa6f2dad010d28286203be16b82',1,'seastar::map_reduce(Iterator begin, Iterator end, Mapper &&mapper, Reducer &&r) -> typename reducer_traits< Reducer >::future_type'],['../group__future-util.html#ga51354660d09492158d6ea3afbbcacd18',1,'seastar::map_reduce(Iterator begin, Iterator end, Mapper &&mapper, Initial initial, Reduce reduce)'],['../group__future-util.html#gad0a691f9eed4a60e938a243d3514dc74',1,'seastar::map_reduce(Range &&range, Mapper &&mapper, Initial initial, Reduce reduce)']]], + ['map_5freduce0_42',['map_reduce0',['../classseastar_1_1sharded.html#acd7ad58469b65bd4e43a4e0f6d8722c6',1,'seastar::sharded::map_reduce0(Mapper map, Initial initial, Reduce reduce)'],['../classseastar_1_1sharded.html#a457be77e0c2e1f301ecd99a4674ff1a6',1,'seastar::sharded::map_reduce0(Mapper map, Initial initial, Reduce reduce) const']]], + ['map_5freduce_5fscheduling_5fgroup_5fspecific_43',['map_reduce_scheduling_group_specific',['../namespaceseastar.html#a50963f1bd02d655f4b957393d2370c23',1,'seastar::map_reduce_scheduling_group_specific()'],['../classseastar_1_1scheduling__group.html#ac9b32070963efbdddef9c9fa577e45dd',1,'seastar::scheduling_group::map_reduce_scheduling_group_specific()']]], + ['marshall_5fone_44',['marshall_one',['../structseastar_1_1rpc_1_1marshall__one.html',1,'seastar::rpc']]], + ['match_45',['match',['../classseastar_1_1httpd_1_1matcher.html#acdf3b7dfe47de2f4ef30b3af790c0571',1,'seastar::httpd::matcher::match()'],['../classseastar_1_1httpd_1_1str__matcher.html#ae806ec5c3f2fa61037471d7d2a76f5e4',1,'seastar::httpd::str_matcher::match()'],['../classseastar_1_1httpd_1_1param__matcher.html#ac8c4f95d64d3c55a992d2267a881970e',1,'seastar::httpd::param_matcher::match()']]], + ['match_5frule_46',['match_rule',['../classseastar_1_1httpd_1_1match__rule.html#a890e6ac7bcf5a1e8ff84ce09a753c0ae',1,'seastar::httpd::match_rule::match_rule()'],['../classseastar_1_1httpd_1_1match__rule.html',1,'seastar::httpd::match_rule']]], + ['matcher_47',['matcher',['../classseastar_1_1httpd_1_1matcher.html',1,'seastar::httpd']]], + ['max_48',['max',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a456f318965bd103fe039c0a9665d92c2',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['max_5fbuffer_5fsize_49',['max_buffer_size',['../group__networking-module.html#aeb9e8ff33844cf73bfa68fa1fd36665f',1,'seastar::connected_socket_input_stream_config']]], + ['max_5fconcurrent_5ffor_5feach_50',['max_concurrent_for_each',['../group__future-util.html#ga082a1e5d06988d26f01aa8e1d86e19d2',1,'seastar::max_concurrent_for_each(Iterator begin, Sentinel end, size_t max_concurrent, Func &&func) noexcept'],['../group__future-util.html#gaee07006fd34fd6e38b72e629da1c7620',1,'seastar::max_concurrent_for_each(Range &&range, size_t max_concurrent, Func &&func) noexcept']]], + ['max_5fcounter_51',['max_counter',['../classseastar_1_1basic__semaphore.html#a0c27f5be57cacf4e4b81ca4a17f8db49',1,'seastar::basic_semaphore']]], + ['max_5fmemory_52',['max_memory',['../group__rpc.html#a823342c1a3b0d20fc549b7a334d1a775',1,'seastar::rpc::resource_limits']]], + ['max_5fnetworking_5fio_5fcontrol_5fblocks_53',['max_networking_io_control_blocks',['../structseastar_1_1reactor__options.html#a66d9c2f79a0ca59983f6b323dfbf3a5f',1,'seastar::reactor_options']]], + ['max_5fnonlocal_5frequests_54',['max_nonlocal_requests',['../namespaceseastar.html#ab8e9be7831f0a1cc99a70c424566607f',1,'seastar::smp_service_group_config']]], + ['max_5fsize_55',['max_size',['../classseastar_1_1queue.html#a5d7c841e0f37fc4a256966b38ec029a5',1,'seastar::queue']]], + ['max_5ftask_5fbacklog_56',['max_task_backlog',['../structseastar_1_1reactor__options.html#ae8e139f1e407ec17429be5e4fc015c97',1,'seastar::reactor_options']]], + ['maybe_5fsample_57',['maybe_sample',['../classsampler.html#a00c8ced7cf0ea176531b56dd7ebbbf7a',1,'sampler']]], + ['maybe_5fyield_58',['maybe_yield',['../classseastar_1_1thread.html#a7b0335e4e9ad618b351554b39665cd29',1,'seastar::thread::maybe_yield()'],['../group__future-util.html#ga272066fe79441c0f854d2b753a0eea5a',1,'seastar::maybe_yield()'],['../classseastar_1_1coroutine_1_1maybe__yield.html',1,'seastar::coroutine::maybe_yield']]], + ['mbind_59',['mbind',['../structseastar_1_1smp__options.html#a651fcf60034f075e3ffca98f370f9a2d',1,'seastar::smp_options']]], + ['mean_60',['mean',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a06d4878222d27f502a1d729bca31f5e4',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['measuring_5foutput_5fstream_61',['measuring_output_stream',['../classseastar_1_1measuring__output__stream.html',1,'seastar']]], + ['memory_62',['memory',['../structseastar_1_1smp__options.html#a47b039ccbd270a16fed64e1138352f3a',1,'seastar::smp_options::memory()'],['../structseastar_1_1resource_1_1memory.html',1,'seastar::resource::memory']]], + ['memory_20management_63',['Memory management',['../group__memory-module.html',1,'']]], + ['memory_5fallocator_64',['memory_allocator',['../structseastar_1_1smp__options.html#adc3aa8f3ead5601b58d5c680fb37b4ba',1,'seastar::smp_options::memory_allocator()'],['../namespaceseastar.html#a201fc834be922b0ebfe82792ac13c340',1,'seastar::memory_allocator()']]], + ['memory_5fdiagnostics_5fwriter_65',['memory_diagnostics_writer',['../namespaceseastar_1_1memory.html#a0d4cda76b87090a734ce3f2cfd19f1d8',1,'seastar::memory']]], + ['memory_5fdma_5falignment_66',['memory_dma_alignment',['../classseastar_1_1file.html#a42a4cc862d721ca090ac5a3c1c3f0c5e',1,'seastar::file']]], + ['memory_5finput_5fstream_67',['memory_input_stream',['../classseastar_1_1memory__input__stream.html',1,'seastar']]], + ['memory_5flayout_68',['memory_layout',['../namespaceseastar_1_1memory.html#structseastar_1_1memory_1_1memory__layout',1,'seastar::memory']]], + ['memory_5foutput_5fstream_69',['memory_output_stream',['../classseastar_1_1memory__output__stream.html',1,'seastar']]], + ['merge_70',['merge',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a72b4adabdbb7b44e18dcc72ced424df5',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['message_5fqueue_71',['message_queue',['../classseastar_1_1alien_1_1message__queue.html',1,'seastar::alien']]], + ['method_5fnot_5fallowed_72',['method_not_allowed',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abadd115df9e077388e1b70b344325094f3',1,'seastar::http::reply']]], + ['metric_5fdefinition_73',['metric_definition',['../classseastar_1_1metrics_1_1metric__definition.html',1,'seastar::metrics']]], + ['metric_5fdefinition_5fimpl_74',['metric_definition_impl',['../structseastar_1_1metrics_1_1impl_1_1metric__definition__impl.html',1,'seastar::metrics::impl']]], + ['metric_5ffamily_75',['metric_family',['../classseastar_1_1metrics_1_1impl_1_1metric__family.html',1,'seastar::metrics::impl']]], + ['metric_5ffamily_5fconfig_76',['metric_family_config',['../namespaceseastar_1_1metrics.html#structseastar_1_1metrics_1_1metric__family__config',1,'seastar::metrics']]], + ['metric_5ffamily_5finfo_77',['metric_family_info',['../structseastar_1_1metrics_1_1impl_1_1metric__family__info.html',1,'seastar::metrics::impl']]], + ['metric_5ffamily_5fmetadata_78',['metric_family_metadata',['../structseastar_1_1metrics_1_1impl_1_1metric__family__metadata.html',1,'seastar::metrics::impl']]], + ['metric_5fgroup_79',['metric_group',['../classseastar_1_1metrics_1_1metric__group.html#ae806aae0c42ddaa1b9643d148586d0b4',1,'seastar::metrics::metric_group::metric_group()'],['../classseastar_1_1metrics_1_1metric__group.html',1,'seastar::metrics::metric_group']]], + ['metric_5fgroup_5fdefinition_80',['metric_group_definition',['../classseastar_1_1metrics_1_1metric__group__definition.html',1,'seastar::metrics']]], + ['metric_5fgroups_81',['metric_groups',['../classseastar_1_1metrics_1_1metric__groups.html#a8cef17d13e8f7e791f94485b404c9e4a',1,'seastar::metrics::metric_groups::metric_groups()'],['../classseastar_1_1metrics_1_1metric__groups.html',1,'seastar::metrics::metric_groups']]], + ['metric_5fgroups_5fdef_82',['metric_groups_def',['../classseastar_1_1metrics_1_1impl_1_1metric__groups__def.html',1,'seastar::metrics::impl']]], + ['metric_5fgroups_5fimpl_83',['metric_groups_impl',['../classseastar_1_1metrics_1_1impl_1_1metric__groups__impl.html',1,'seastar::metrics::impl']]], + ['metric_5fhelp_84',['metric_help',['../structseastar_1_1prometheus_1_1config.html#a32e482d973cc67b346e286b4e0d21d7f',1,'seastar::prometheus::config']]], + ['metric_5fid_85',['metric_id',['../classseastar_1_1metrics_1_1impl_1_1metric__id.html',1,'seastar::metrics::impl']]], + ['metric_5finfo_86',['metric_info',['../structseastar_1_1metrics_1_1impl_1_1metric__info.html',1,'seastar::metrics::impl']]], + ['metric_5fname_5ftype_87',['metric_name_type',['../group__metrics.html#ga517900c3a099cf524ba032fb4907145d',1,'seastar::metrics']]], + ['metric_5frelabeling_5fresult_88',['metric_relabeling_result',['../namespaceseastar_1_1metrics.html#structseastar_1_1metrics_1_1metric__relabeling__result',1,'seastar::metrics']]], + ['metric_5ftype_89',['metric_type',['../structseastar_1_1metrics_1_1impl_1_1metric__type.html',1,'seastar::metrics::impl']]], + ['metric_5ftype_5fdef_90',['metric_type_def',['../group__metrics.html#ga4cff2db11c17ac1014d236177b8dccee',1,'seastar::metrics']]], + ['metric_5fvalue_91',['metric_value',['../classseastar_1_1metrics_1_1impl_1_1metric__value.html',1,'seastar::metrics::impl']]], + ['metrics_92',['Metrics',['../group__metrics.html',1,'']]], + ['metrics_20type_20definitions_93',['metrics type definitions',['../group__metrics__types.html',1,'']]], + ['metrics_2ehh_94',['metrics.hh',['../metrics_8hh.html',1,'']]], + ['metrics_5fapi_2ehh_95',['metrics_api.hh',['../metrics__api_8hh.html',1,'']]], + ['metrics_5fhostname_96',['metrics_hostname',['../structseastar_1_1metrics_1_1options.html#ab8403e52603f14707cca88dc40b98a55',1,'seastar::metrics::options']]], + ['metrics_5fregistration_2ehh_97',['metrics_registration.hh',['../metrics__registration_8hh.html',1,'']]], + ['min_98',['min',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a8d344b2c6ad00c1b180357c55646a23c',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['min_5fas_5fnative_5fhistogram_5fid_99',['min_as_native_histogram_id',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a68aae2dd88319a3476abadd331e7c165',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['min_5fbuffer_5fsize_100',['min_buffer_size',['../group__networking-module.html#aa0c48abf8e46898b750810fad8b78288',1,'seastar::connected_socket_input_stream_config']]], + ['min_5ffree_5fmemory_101',['min_free_memory',['../namespaceseastar_1_1memory.html#a252f7b05a03f6dd410951c1109f17ad9',1,'seastar::memory']]], + ['missing_5fparam_5fexception_102',['missing_param_exception',['../classseastar_1_1httpd_1_1missing__param__exception.html',1,'seastar::httpd']]], + ['mmap_5fdeleter_103',['mmap_deleter',['../structseastar_1_1mmap__deleter.html',1,'seastar']]], + ['move_5fit_104',['move_it',['../group__future-module.html#gaf0818ecd7660d04710f08f0ee709268b',1,'seastar::promise']]], + ['moved_5fpermanently_105',['moved_permanently',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba522c7a01a5f0022064cc90149c179fa7',1,'seastar::http::reply']]], + ['moved_5ftemporarily_106',['moved_temporarily',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba14e3761228bfc71752251125a5f11087',1,'seastar::http::reply']]], + ['mss_107',['mss',['../structseastar_1_1net_1_1tcp__option_1_1mss.html',1,'seastar::net::tcp_option']]], + ['multi_5falgo_5fcompressor_5ffactory_108',['multi_algo_compressor_factory',['../classseastar_1_1rpc_1_1multi__algo__compressor__factory.html',1,'seastar::rpc']]], + ['multicore_109',['Multicore',['../group__smp-module.html',1,'']]], + ['multiple_5fchoices_110',['multiple_choices',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba9aeba7eb915334acd922761566c2ac86',1,'seastar::http::reply']]], + ['mutate_111',['mutate',['../classseastar_1_1program__options_1_1option__group.html#a9436d883e8c98a2e9b852b57155fbc6b',1,'seastar::program_options::option_group']]] +]; diff --git a/master/search/all_e.html b/master/search/all_e.html new file mode 100644 index 000000000..a54e12060 --- /dev/null +++ b/master/search/all_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_e.js b/master/search/all_e.js new file mode 100644 index 000000000..a85e6b453 --- /dev/null +++ b/master/search/all_e.js @@ -0,0 +1,48 @@ +var searchData= +[ + ['name_0',['name',['../classseastar_1_1metrics_1_1label.html#afac29459b94e77684fb428be94a856c4',1,'seastar::metrics::label::name()'],['../classseastar_1_1execution__stage.html#a0c52a4b29265448777d74028c3344f23',1,'seastar::execution_stage::name()'],['../group__fileio-module.html#af1afa86f4347d2258dccd0c076c2a413',1,'seastar::directory_entry::name()']]], + ['named_5fsemaphore_5faborted_1',['named_semaphore_aborted',['../classseastar_1_1named__semaphore__aborted.html',1,'seastar']]], + ['named_5fsemaphore_5fexception_5ffactory_2',['named_semaphore_exception_factory',['../structseastar_1_1named__semaphore__exception__factory.html',1,'seastar']]], + ['named_5fsemaphore_5ftimed_5fout_3',['named_semaphore_timed_out',['../classseastar_1_1named__semaphore__timed__out.html',1,'seastar']]], + ['native_5fhistogram_5finfo_4',['native_histogram_info',['../namespaceseastar_1_1metrics.html#structseastar_1_1metrics_1_1native__histogram__info',1,'seastar::metrics']]], + ['native_5fstack_5foptions_5',['native_stack_options',['../structseastar_1_1net_1_1native__stack__options.html',1,'seastar::net']]], + ['negotiation_5fframe_6',['negotiation_frame',['../structseastar_1_1rpc_1_1negotiation__frame.html',1,'seastar::rpc']]], + ['nested_5fexception_7',['nested_exception',['../structseastar_1_1nested__exception.html',1,'seastar']]], + ['nested_5fexception_5fmarker_8',['nested_exception_marker',['../structseastar_1_1future__state__base.html#structseastar_1_1future__state__base_1_1nested__exception__marker',1,'seastar::future_state_base']]], + ['netmask_5fipv4_5faddr_9',['netmask_ipv4_addr',['../structseastar_1_1net_1_1native__stack__options.html#ac61a6fc380eb659215abdfeb885ef487',1,'seastar::net::native_stack_options']]], + ['network_5finterface_10',['network_interface',['../classseastar_1_1network__interface.html',1,'seastar']]], + ['network_5finterfaces_11',['network_interfaces',['../classseastar_1_1net_1_1posix__network__stack.html#af9d3f508c34e29c1daea444c805b7740',1,'seastar::net::posix_network_stack::network_interfaces()'],['../classseastar_1_1network__stack.html#a6b03fb29717de7912860d877e56cbf1f',1,'seastar::network_stack::network_interfaces()']]], + ['network_5fstack_12',['network_stack',['../structseastar_1_1reactor__options.html#af54c79df9f2dabae4b280d9f2c10acba',1,'seastar::reactor_options::network_stack()'],['../classseastar_1_1network__stack.html',1,'seastar::network_stack']]], + ['network_5fstack_5fentry_13',['network_stack_entry',['../namespaceseastar.html#structseastar_1_1network__stack__entry',1,'seastar']]], + ['networking_14',['Networking',['../group__networking-module.html',1,'']]], + ['next_15',['next',['../structseastar_1_1memory_1_1allocation__site.html#a8a4c2a4804aa46614d03426f6406d0eb',1,'seastar::memory::allocation_site']]], + ['next_5fawaiter_16',['next_awaiter',['../structseastar_1_1coroutine_1_1experimental_1_1internal_1_1next__awaiter.html',1,'seastar::coroutine::experimental::internal']]], + ['no_5fcontent_17',['no_content',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba7d1e27253ac06e307e599edb2b0558bd',1,'seastar::http::reply']]], + ['no_5fhandle_5finterrupt_18',['no_handle_interrupt',['../structseastar_1_1reactor__options.html#a7d2e12b9cd7b1a7e886a879863ff780a',1,'seastar::reactor_options']]], + ['no_5fmore_5fwork_19',['no_more_work',['../namespaceseastar.html#aabff6d897c4e569b6f2bd55a155406f3abe65965bb9ac02d6c07a786c6beb821c',1,'seastar']]], + ['no_5fsharded_5finstance_5fexception_20',['no_sharded_instance_exception',['../classseastar_1_1no__sharded__instance__exception.html',1,'seastar']]], + ['no_5fwait_5ftype_21',['no_wait_type',['../structseastar_1_1rpc_1_1no__wait__type.html',1,'seastar::rpc']]], + ['nonauthoritative_5finformation_22',['nonauthoritative_information',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba3bb3bdf633b73c3d6407199df0074900',1,'seastar::http::reply']]], + ['noncopyable_5ffunction_23',['noncopyable_function',['../namespaceseastar.html#classseastar_1_1noncopyable__function',1,'seastar']]], + ['noncopyable_5ffunction_3c_20future_3c_20std_3a_3aunique_5fptr_3c_20network_5fstack_20_3e_20_3e_28const_20program_5foptions_3a_3aoption_5fgroup_20_26_29_3e_24',['noncopyable_function< future< std::unique_ptr< network_stack > >(const program_options::option_group &)>',['../namespaceseastar.html#namespaceseastar',1,'seastar']]], + ['noncopyable_5ffunction_3c_20future_3c_3e_28t_2e_2e_2e_29_3e_25',['noncopyable_function< future<>(T...)>',['../namespaceseastar.html#namespaceseastar',1,'seastar']]], + ['noncopyable_5ffunction_3c_20ret_28args_2e_2e_2e_29_20noexcept_28noexcept_29_3e_26',['noncopyable_function< Ret(Args...) noexcept(Noexcept)>',['../classseastar_1_1noncopyable__function_3_01Ret_07Args_8_8_8_08_01noexcept_07Noexcept_08_4.html',1,'seastar']]], + ['noncopyable_5ffunction_3c_20returntype_28args_2e_2e_2e_29_3e_27',['noncopyable_function< ReturnType(Args...)>',['../namespaceseastar.html#namespaceseastar',1,'seastar']]], + ['noncopyable_5ffunction_3c_20seastar_3a_3afuture_3c_3e_28_29_3e_28',['noncopyable_function< seastar::future<>()>',['../namespaceseastar.html#namespaceseastar',1,'seastar']]], + ['noncopyable_5ffunction_3c_20seastar_3a_3afuture_3c_3e_28seastar_3a_3aoutput_5fstream_3c_20char_20_3e_20_26_26_29_3e_29',['noncopyable_function< seastar::future<>(seastar::output_stream< char > &&)>',['../namespaceseastar.html#namespaceseastar',1,'seastar']]], + ['noncopyable_5ffunction_3c_20void_28_29_3e_30',['noncopyable_function< void()>',['../namespaceseastar.html#namespaceseastar',1,'seastar']]], + ['noncopyable_5ffunction_3c_20void_28const_20std_3a_3aoptional_3c_20std_3a_3aexception_5fptr_20_3e_20_26_29_20noexcept_20_3e_31',['noncopyable_function< void(const std::optional< std::exception_ptr > &) noexcept >',['../namespaceseastar.html#namespaceseastar',1,'seastar']]], + ['none_32',['none',['../namespaceseastar_1_1memory.html#a2411b00801406f50acb3a8bc78f32400a334c4a4c42fdb79d7ebc3e73b517e6f8',1,'seastar::memory']]], + ['nop_33',['nop',['../structseastar_1_1net_1_1tcp__option_1_1nop.html',1,'seastar::net::tcp_option']]], + ['normalize_34',['normalize',['../classseastar_1_1fair__queue__ticket.html#a63d94e7b30fc06f7c781f48325b1729c',1,'seastar::fair_queue_ticket']]], + ['not_5facceptable_35',['not_acceptable',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba5537536f902d3acf25821aded362cdc9',1,'seastar::http::reply']]], + ['not_5fempty_36',['not_empty',['../classseastar_1_1queue.html#a4d8297ef1f3e5fccb5f7cd9a96c05f6d',1,'seastar::queue']]], + ['not_5ffound_37',['not_found',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba7500611bf7030bc99d25c354e7b64714',1,'seastar::http::reply']]], + ['not_5ffound_5fexception_38',['not_found_exception',['../classseastar_1_1httpd_1_1not__found__exception.html',1,'seastar::httpd']]], + ['not_5ffull_39',['not_full',['../classseastar_1_1queue.html#a12a8edf04831ce14e1bb2054d581d5dc',1,'seastar::queue']]], + ['not_5fimplemented_40',['not_implemented',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba63877363c706f5095d05a54f8b57b0ae',1,'seastar::http::reply']]], + ['not_5fmodified_41',['not_modified',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba72d9cf8a74038672b394991359756c35',1,'seastar::http::reply']]], + ['notify_5frequest_5ffinished_42',['notify_request_finished',['../classseastar_1_1fair__queue.html#a689d7cc8b2770105fa5be73ff1659e96',1,'seastar::fair_queue']]], + ['now_43',['now',['../classseastar_1_1lowres__clock.html#a653be334402d3bf0ddc9d7f3d32df98a',1,'seastar::lowres_clock::now()'],['../classseastar_1_1lowres__system__clock.html#a33e247635e9bd2b0a1a6d46db446d13a',1,'seastar::lowres_system_clock::now()'],['../group__future-util.html#gaaf2f3bb42cb988d4a93ced1e8bf78d64',1,'seastar::now()']]], + ['num_5fio_5fgroups_44',['num_io_groups',['../structseastar_1_1smp__options.html#aeb1854d4982015411af36b526bf9416f',1,'seastar::smp_options']]] +]; diff --git a/master/search/all_f.html b/master/search/all_f.html new file mode 100644 index 000000000..8d0aed39f --- /dev/null +++ b/master/search/all_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/all_f.js b/master/search/all_f.js new file mode 100644 index 000000000..56ccff045 --- /dev/null +++ b/master/search/all_f.js @@ -0,0 +1,51 @@ +var searchData= +[ + ['offload_5finfo_0',['offload_info',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1offload__info',1,'seastar::net']]], + ['ok_1',['ok',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba444bcb3a3fcf8389296c49467f27e1d6',1,'seastar::http::reply']]], + ['on_5fabort_2',['on_abort',['../classseastar_1_1abort__source_1_1subscription.html#a37c2c53647c8a29d2b1c99ac30574dcf',1,'seastar::abort_source::subscription']]], + ['on_5falloc_5fpoint_3',['on_alloc_point',['../namespaceseastar_1_1memory.html#a2bff02cb23c550cd501bd59d718c0afe',1,'seastar::memory::on_alloc_point()'],['../classseastar_1_1memory_1_1alloc__failure__injector.html#a225ed8bedc07ae4e30fdc6472a26f791',1,'seastar::memory::alloc_failure_injector::on_alloc_point()']]], + ['on_5ffatal_5finternal_5ferror_4',['on_fatal_internal_error',['../namespaceseastar.html#a4de0d52308ca71d10c9f2cb2e917f273',1,'seastar']]], + ['on_5finternal_5ferror_5',['on_internal_error',['../namespaceseastar.html#afdd60c9738b3dd98505c6cfdce23bf46',1,'seastar::on_internal_error(logger &logger, std::exception_ptr ex)'],['../namespaceseastar.html#a5d52f9d2e3435b3bf1f2480dd17d1815',1,'seastar::on_internal_error(logger &logger, std::string_view reason)']]], + ['on_5finternal_5ferror_5fnoexcept_6',['on_internal_error_noexcept',['../namespaceseastar.html#a2cce978b0a117e1d86d05d9e81827cde',1,'seastar']]], + ['opcodes_7',['opcodes',['../group__websocket.html#ga65c866f434e25824e46ba607724c00fe',1,'seastar::experimental::websocket']]], + ['open_5fdirectory_8',['open_directory',['../group__fileio-module.html#ga7498bd576259a0fae9df11783027e06a',1,'seastar::file']]], + ['open_5ffile_5fdma_9',['open_file_dma',['../group__fileio-module.html#ga1f6a704fa34458895885bc514ebf37d5',1,'seastar::file::open_file_dma(std::string_view name, open_flags flags, file_open_options options) noexcept'],['../group__fileio-module.html#gaa16add8cf99e35e461f37094eb6f4acc',1,'seastar::file::open_file_dma(std::string_view name, open_flags flags) noexcept']]], + ['open_5fflags_10',['open_flags',['../group__fileio-module.html#gaea600c024cd71494c9560efb34ab45be',1,'seastar']]], + ['operator_20bool_11',['operator bool',['../classseastar_1_1program__options_1_1value.html#ab5113571df604eb21b280b1fea2bcb45',1,'seastar::program_options::value::operator bool()'],['../classseastar_1_1experimental_1_1fsnotifier.html#aa6b80eb4dd6191c21995ae07e65c059a',1,'seastar::experimental::fsnotifier::operator bool()'],['../classseastar_1_1semaphore__units.html#abe5f230ef9be20b46ed01e159ee51bc2',1,'seastar::semaphore_units::operator bool()'],['../classseastar_1_1foreign__ptr.html#a606f979c808c99b096411256f4d89840',1,'seastar::foreign_ptr::operator bool()'],['../classseastar_1_1temporary__buffer.html#a3efdd0696765d2e297e80e1a3864c36a',1,'seastar::temporary_buffer::operator bool()'],['../classseastar_1_1connected__socket.html#a56ffe0a91f3a745eede7ce7988f5fbb5',1,'seastar::connected_socket::operator bool()'],['../classseastar_1_1program__options_1_1selection__value.html#acdfd81d5b9b1f6d6dc524960e3d30247',1,'seastar::program_options::selection_value::operator bool()'],['../classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4.html#ae3c5796ee31bc54ebf7dc043ccc1ab32',1,'seastar::program_options::value< std::monostate >::operator bool()'],['../classseastar_1_1program__options_1_1option__group.html#a888c7df80ecfe7480e70c61bed36fa03',1,'seastar::program_options::option_group::operator bool()'],['../classseastar_1_1server__socket.html#abbcec6e90be4f15d92bf472ae0e992cd',1,'seastar::server_socket::operator bool()'],['../classseastar_1_1deleter.html#a04b07e7dcb254664ab001d7ee05ba306',1,'seastar::deleter::operator bool()'],['../classseastar_1_1bool__class.html#a85101c5c29041802a147ed1ab8543b55',1,'seastar::bool_class::operator bool()'],['../classseastar_1_1fair__queue__ticket.html#a2a0ae04a1538295bd8b8074c2df7e05f',1,'seastar::fair_queue_ticket::operator bool()'],['../classseastar_1_1expiring__fifo.html#a659dc293d90e19a0bdc7bf95b054bf5c',1,'seastar::expiring_fifo::operator bool()'],['../classseastar_1_1file.html#a8f7d9a350192816a45bd54cc0dcc50c3',1,'seastar::file::operator bool()'],['../classseastar_1_1checked__ptr.html#a9f5e8810e6a3507d3257cf9d9df1d8d5',1,'seastar::checked_ptr::operator bool()']]], + ['operator_20co_5fawait_12',['operator co_await',['../namespaceseastar.html#ac5b7486da3d3a5b860194c79a04f022b',1,'seastar']]], + ['operator_20future_5ftype_13',['operator future_type',['../classseastar_1_1shared__future.html#ab31f07d987f2ea47dc6d9320b81d9799',1,'seastar::shared_future']]], + ['operator_20watch_5ftoken_14',['operator watch_token',['../classseastar_1_1experimental_1_1fsnotifier_1_1watch.html#a76ecbdef14728ec2740b024512930f18',1,'seastar::experimental::fsnotifier::watch']]], + ['operator_21_15',['operator!',['../classseastar_1_1bool__class.html#a8d50be93eea178bbcb4f06e807cca5da',1,'seastar::bool_class']]], + ['operator_21_3d_16',['operator!=',['../classseastar_1_1temporary__buffer.html#af95b74b842905aab9fdb7ea15e215ee7',1,'seastar::temporary_buffer']]], + ['operator_26_17',['operator&',['../group__fsnotifier.html#gad4f3c0468840ef36b3293ca8533982ed',1,'seastar::experimental']]], + ['operator_26_26_18',['operator&&',['../classseastar_1_1bool__class.html#a1e5f8160062ffaf935a8e805f3a4d5f8',1,'seastar::bool_class']]], + ['operator_26_3d_19',['operator&=',['../group__fsnotifier.html#ga5996b677d47a1ddcc269d15113e2015b',1,'seastar::experimental']]], + ['operator_28_29_20',['operator()',['../classseastar_1_1concrete__execution__stage.html#a8ae90f114f11600f892b599d7e4a331c',1,'seastar::concrete_execution_stage::operator()()'],['../classseastar_1_1inheriting__concrete__execution__stage.html#acdb70eb98f9783b39a7f6cf6b0c7f10f',1,'seastar::inheriting_concrete_execution_stage::operator()()'],['../classseastar_1_1metrics_1_1label.html#aa02e0e95bdc77880ddc5ab5e97b73771',1,'seastar::metrics::label::operator()()'],['../classseastar_1_1lazy__eval.html#a80a0af13c65d35cff0aa03554dc9857c',1,'seastar::lazy_eval::operator()() const'],['../classseastar_1_1lazy__eval.html#a8ceb73b597afa7bc5e9aa1e08a7d971a',1,'seastar::lazy_eval::operator()()'],['../classseastar_1_1json_1_1json__element.html#a656fd83d4f90c872db34fc10fabee258',1,'seastar::json::json_element::operator()()'],['../structseastar_1_1default__null__deref__action.html#a5600f3eebed7d249b35b1f9dfa3ab290',1,'seastar::default_null_deref_action::operator()()'],['../structstd_1_1hash_3_01seastar_1_1checked__ptr_3_01T_01_4_01_4.html#afb31d01b10bf4bfb023875eb2c24dca9',1,'std::hash< seastar::checked_ptr< T > >::operator()()'],['../classseastar_1_1coroutine_1_1lambda.html#af4e4cb8987ddbc19419a87c9337a7fa8',1,'seastar::coroutine::lambda::operator()()']]], + ['operator_2a_21',['operator*',['../classseastar_1_1checked__ptr.html#a4c69cc2dc17a6a79a7f9ae6e1af57f06',1,'seastar::checked_ptr::operator*() const'],['../classseastar_1_1checked__ptr.html#a19dd0f8091c9029f9720bc94b7b428eb',1,'seastar::checked_ptr::operator*()'],['../classseastar_1_1foreign__ptr.html#affc9ac20bfc9caf7e8bd49ece12f8f35',1,'seastar::foreign_ptr::operator*()']]], + ['operator_2a_3d_22',['operator*=',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a840e16536e2d510315df23166e13c974',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['operator_2b_23',['operator+',['../structseastar_1_1metrics_1_1histogram.html#a2c26af80e171892515a538db101df6ec',1,'seastar::metrics::histogram::operator+(histogram &&h) const'],['../structseastar_1_1metrics_1_1histogram.html#a8bf413ccdcbac0e956392690a19b8677',1,'seastar::metrics::histogram::operator+(const histogram &h) const']]], + ['operator_2b_3d_24',['operator+=',['../structseastar_1_1metrics_1_1histogram.html#af1db16ca09ceea6a8b890ecf0ef1595f',1,'seastar::metrics::histogram::operator+=()'],['../classseastar_1_1fair__queue__ticket.html#a927d294f9d29e64deb2a0e843e0d9987',1,'seastar::fair_queue_ticket::operator+=(fair_queue_ticket desc) noexcept']]], + ['operator_2d_3d_25',['operator-=',['../classseastar_1_1fair__queue__ticket.html#a23f8d38850bee72926452ec97585313e',1,'seastar::fair_queue_ticket']]], + ['operator_2d_3e_26',['operator->',['../classseastar_1_1foreign__ptr.html#a5c90bd440233341cea507fbdbdd8aa8d',1,'seastar::foreign_ptr::operator->()'],['../classseastar_1_1checked__ptr.html#a32fe1a69545831150402da032b6b4a1f',1,'seastar::checked_ptr::operator->()'],['../classseastar_1_1checked__ptr.html#aa47f21e17cf68e32f2915150fc72388e',1,'seastar::checked_ptr::operator->() const']]], + ['operator_3c_3c_27',['operator<<',['../namespacestd.html#a00b4ce612ea3dc99695a52649ddb9472',1,'std::operator<<()'],['../classseastar_1_1bool__class.html#a29d8252aa7e132b8d30db4bb1cf00fe4',1,'seastar::bool_class::operator<<()']]], + ['operator_3d_28',['operator=',['../classseastar_1_1file.html#a1f7d5f9c4487c657647341242cc60726',1,'seastar::file::operator=()'],['../classseastar_1_1deferred__close.html#a2618fec71263aecbd4a399805e39a785',1,'seastar::deferred_close::operator=()'],['../classseastar_1_1server__socket.html#aa63649753fb7530b998c6ec22711b792',1,'seastar::server_socket::operator=()'],['../classseastar_1_1socket.html#adda308a26b373113f00321341420f7c3',1,'seastar::socket::operator=()'],['../classseastar_1_1deferred__stop.html#afb1aa22bedf2b0e34af851da83aa069b',1,'seastar::deferred_stop::operator=()'],['../classseastar_1_1connected__socket.html#ab5cd88471e0fea6a7edb8beb0b3ec139',1,'seastar::connected_socket::operator=()'],['../classseastar_1_1json_1_1json__list.html#a3b1a45421ef8a3e2c99f051e0114f9a9',1,'seastar::json::json_list::operator=()'],['../classseastar_1_1json_1_1json__element.html#a5237654e932fb6d187adc37d5005ac4f',1,'seastar::json::json_element::operator=(const C &new_value)'],['../classseastar_1_1json_1_1json__element.html#a7f0aaa18fab6e566086841db4b63dd1b',1,'seastar::json::json_element::operator=(const T &new_value)'],['../classseastar_1_1thread.html#acad2d3ddf73dc38e3684a532c8d6ab4f',1,'seastar::thread::operator=()'],['../classseastar_1_1temporary__buffer.html#a934209027c5d3a1aafffb0c97fd4a9c9',1,'seastar::temporary_buffer::operator=()'],['../classseastar_1_1foreign__ptr.html#ad3db1c99e4600b2aace4f0dec0ea76c7',1,'seastar::foreign_ptr::operator=()'],['../classseastar_1_1basic__semaphore.html#a847e5751b4092ac84f659575b27ad032',1,'seastar::basic_semaphore::operator=()'],['../classseastar_1_1gate_1_1holder.html#afef43bc447ce99b301db413a52dfe188',1,'seastar::gate::holder::operator=(holder &&x) noexcept'],['../classseastar_1_1gate_1_1holder.html#a5513177ff3417c023b52ddca1affe3a7',1,'seastar::gate::holder::operator=(const holder &x) noexcept'],['../classseastar_1_1file__handle.html#a6fd732bfc3a12ae532b53a123f93b129',1,'seastar::file_handle::operator=(file_handle &&) noexcept'],['../classseastar_1_1file__handle.html#ac59c4f9e35e850badbd0eb2750c8dda0',1,'seastar::file_handle::operator=(const file_handle &)'],['../classseastar_1_1file.html#a3092d1fe25fe99a976497c5fcb48fa4d',1,'seastar::file::operator=()']]], + ['operator_3d_3d_29',['operator==',['../classseastar_1_1fair__queue__ticket.html#a1d9816112c35d7f0d7c2110825c6cc64',1,'seastar::fair_queue_ticket::operator==()'],['../classseastar_1_1temporary__buffer.html#a81579eac40ca011fa63cb57b7b87f285',1,'seastar::temporary_buffer::operator==()'],['../classseastar_1_1bool__class.html#a2631d0b9a590330cdcef4c6cde37f8ff',1,'seastar::bool_class::operator==()']]], + ['operator_5b_5d_30',['operator[]',['../classseastar_1_1temporary__buffer.html#ad2f0577539b7abe22096383df687a137',1,'seastar::temporary_buffer']]], + ['operator_7c_31',['operator|',['../group__fsnotifier.html#ga56f7cf5f275cfa3675c7a8fee50f60da',1,'seastar::experimental']]], + ['operator_7c_3d_32',['operator|=',['../group__fsnotifier.html#gabf8d646c7affb4cd4f67f4ba7d47c59e',1,'seastar::experimental']]], + ['operator_7c_7c_33',['operator||',['../classseastar_1_1bool__class.html#a91653e9597305448b78019033e5f4a29',1,'seastar::bool_class']]], + ['opt_5ftime_5fpoint_34',['opt_time_point',['../classseastar_1_1rpc_1_1opt__time__point.html',1,'seastar::rpc']]], + ['optimized_5foptional_35',['optimized_optional',['../classseastar_1_1optimized__optional.html',1,'seastar']]], + ['option_5fgroup_36',['option_group',['../classseastar_1_1program__options_1_1option__group.html#ab410b1eccf6d0cd56f65a1d3185680b7',1,'seastar::program_options::option_group::option_group(option_group *parent, std::string name, unused)'],['../classseastar_1_1program__options_1_1option__group.html#abbf4c7aa4a8e91d67ac0993eac9eb509',1,'seastar::program_options::option_group::option_group(option_group *parent, std::string name)'],['../classseastar_1_1program__options_1_1option__group.html',1,'seastar::program_options::option_group']]], + ['optional_37',['optional',['../classseastar_1_1rpc_1_1optional.html',1,'seastar::rpc']]], + ['options_38',['options',['../structseastar_1_1log__cli_1_1options.html',1,'seastar::log_cli::options'],['../structseastar_1_1metrics_1_1options.html',1,'seastar::metrics::options'],['../classseastar_1_1net_1_1dns__resolver.html#structseastar_1_1net_1_1dns__resolver_1_1options',1,'seastar::net::dns_resolver::options'],['../structseastar_1_1scollectd_1_1options.html',1,'seastar::scollectd::options']]], + ['options_5fdescriptor_39',['options_descriptor',['../classseastar_1_1program__options_1_1options__descriptor.html',1,'seastar::program_options']]], + ['options_5fmutator_40',['options_mutator',['../classseastar_1_1program__options_1_1options__mutator.html',1,'seastar::program_options']]], + ['or_5fterminate_41',['or_terminate',['../classseastar_1_1future.html#ae89c68b8e980afd9a381c229b986086c',1,'seastar::future']]], + ['outgoing_5fentry_42',['outgoing_entry',['../structseastar_1_1rpc_1_1connection_1_1outgoing__entry.html',1,'seastar::rpc::connection']]], + ['output_43',['output',['../classseastar_1_1connected__socket.html#a168f11dbc02b0b313e63dae1b145bb89',1,'seastar::connected_socket']]], + ['output_5fstream_44',['output_stream',['../classseastar_1_1output__stream.html',1,'seastar']]], + ['output_5fstream_3c_20char_20_3e_45',['output_stream< char >',['../classseastar_1_1output__stream.html',1,'seastar']]], + ['output_5fstream_5foptions_46',['output_stream_options',['../namespaceseastar.html#structseastar_1_1output__stream__options',1,'seastar']]], + ['overprovisioned_47',['overprovisioned',['../structseastar_1_1reactor__options.html#a0caf6c2ad579b8c22e1352d796ec3c1d',1,'seastar::reactor_options']]] +]; diff --git a/master/search/classes_0.html b/master/search/classes_0.html new file mode 100644 index 000000000..9d4f871a1 --- /dev/null +++ b/master/search/classes_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_0.js b/master/search/classes_0.js new file mode 100644 index 000000000..d51fc03d1 --- /dev/null +++ b/master/search/classes_0.js @@ -0,0 +1,39 @@ +var searchData= +[ + ['aa_0',['aa',['../structseastar_1_1smp__message__queue_1_1tx__side_1_1aa.html',1,'seastar::smp_message_queue::tx_side']]], + ['abort_5fon_5fexpiry_1',['abort_on_expiry',['../classseastar_1_1abort__on__expiry.html',1,'seastar']]], + ['abort_5frequested_5fexception_2',['abort_requested_exception',['../classseastar_1_1abort__requested__exception.html',1,'seastar']]], + ['abort_5fsource_3',['abort_source',['../classseastar_1_1abort__source.html',1,'seastar']]], + ['abstract_5fcredentials_4',['abstract_credentials',['../classseastar_1_1tls_1_1abstract__credentials.html',1,'seastar::tls']]], + ['accept_5fresult_5',['accept_result',['../group__networking-module.html#structseastar_1_1accept__result',1,'seastar']]], + ['adder_6',['adder',['../classseastar_1_1adder.html',1,'seastar']]], + ['all_7',['all',['../classseastar_1_1coroutine_1_1all.html',1,'seastar::coroutine']]], + ['alloc_5ffailure_5finjector_8',['alloc_failure_injector',['../classseastar_1_1memory_1_1alloc__failure__injector.html',1,'seastar::memory']]], + ['allocation_5fsite_9',['allocation_site',['../structseastar_1_1memory_1_1allocation__site.html',1,'seastar::memory']]], + ['any_10',['any',['../unionseastar_1_1future__state__base_1_1any.html',1,'seastar::future_state_base']]], + ['api_5fdoc_11',['api_doc',['../structseastar_1_1httpd_1_1api__doc.html',1,'seastar::httpd']]], + ['api_5fdocs_12',['api_docs',['../structseastar_1_1httpd_1_1api__docs.html',1,'seastar::httpd']]], + ['api_5fdocs_5f20_13',['api_docs_20',['../classseastar_1_1httpd_1_1api__docs__20.html',1,'seastar::httpd']]], + ['api_5fregistry_14',['api_registry',['../classseastar_1_1httpd_1_1api__registry.html',1,'seastar::httpd']]], + ['api_5fregistry_5f20_15',['api_registry_20',['../classseastar_1_1httpd_1_1api__registry__20.html',1,'seastar::httpd']]], + ['api_5fregistry_5fbase_16',['api_registry_base',['../classseastar_1_1httpd_1_1api__registry__base.html',1,'seastar::httpd']]], + ['api_5fregistry_5fbuilder_17',['api_registry_builder',['../classseastar_1_1httpd_1_1api__registry__builder.html',1,'seastar::httpd']]], + ['api_5fregistry_5fbuilder20_18',['api_registry_builder20',['../classseastar_1_1httpd_1_1api__registry__builder20.html',1,'seastar::httpd']]], + ['api_5fregistry_5fbuilder_5fbase_19',['api_registry_builder_base',['../classseastar_1_1httpd_1_1api__registry__builder__base.html',1,'seastar::httpd']]], + ['approximate_5fexponential_5fhistogram_20',['approximate_exponential_histogram',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html',1,'seastar::metrics::internal']]], + ['approximate_5fexponential_5fhistogram_3c_20512_2c_2033554432_2c_204_20_3e_21',['approximate_exponential_histogram< 512, 33554432, 4 >',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html',1,'seastar::metrics::internal']]], + ['arg_22',['arg',['../structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4.html#structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4_1_1arg',1,'seastar::function_traits< Ret(Args...)>']]], + ['arp_23',['arp',['../classseastar_1_1net_1_1arp.html',1,'seastar::net']]], + ['arp_5ferror_24',['arp_error',['../classseastar_1_1net_1_1arp__error.html',1,'seastar::net']]], + ['arp_5ffor_25',['arp_for',['../classseastar_1_1net_1_1arp__for.html',1,'seastar::net']]], + ['arp_5ffor_3c_20seastar_3a_3anet_3a_3aipv4_20_3e_26',['arp_for< seastar::net::ipv4 >',['../classseastar_1_1net_1_1arp__for.html',1,'seastar::net']]], + ['arp_5ffor_5fprotocol_27',['arp_for_protocol',['../classseastar_1_1net_1_1arp__for__protocol.html',1,'seastar::net']]], + ['arp_5fqueue_5ffull_5ferror_28',['arp_queue_full_error',['../classseastar_1_1net_1_1arp__queue__full__error.html',1,'seastar::net']]], + ['arp_5ftimeout_5ferror_29',['arp_timeout_error',['../classseastar_1_1net_1_1arp__timeout__error.html',1,'seastar::net']]], + ['array_5fmap_30',['array_map',['../classseastar_1_1array__map.html',1,'seastar']]], + ['array_5fmap_3c_20seastar_3a_3anet_3a_3aip_5fprotocol_20_2a_2c_20256_20_3e_31',['array_map< seastar::net::ip_protocol *, 256 >',['../classseastar_1_1array__map.html',1,'seastar']]], + ['as_5ffuture_32',['as_future',['../classseastar_1_1coroutine_1_1as__future.html',1,'seastar::coroutine']]], + ['as_5ffuture_5fwithout_5fpreemption_5fcheck_33',['as_future_without_preemption_check',['../classseastar_1_1coroutine_1_1as__future__without__preemption__check.html',1,'seastar::coroutine']]], + ['async_5fsharded_5fservice_34',['async_sharded_service',['../classseastar_1_1async__sharded__service.html',1,'seastar']]], + ['attr_35',['attr',['../classseastar_1_1posix__thread_1_1attr.html',1,'seastar::posix_thread']]] +]; diff --git a/master/search/classes_1.html b/master/search/classes_1.html new file mode 100644 index 000000000..0557f9fb4 --- /dev/null +++ b/master/search/classes_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_1.js b/master/search/classes_1.js new file mode 100644 index 000000000..ba5b729ce --- /dev/null +++ b/master/search/classes_1.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['bad_5fchunk_5fexception_0',['bad_chunk_exception',['../classseastar_1_1httpd_1_1bad__chunk__exception.html',1,'seastar::httpd']]], + ['bad_5fparam_5fexception_1',['bad_param_exception',['../classseastar_1_1httpd_1_1bad__param__exception.html',1,'seastar::httpd']]], + ['bad_5frequest_5fexception_2',['bad_request_exception',['../classseastar_1_1httpd_1_1bad__request__exception.html',1,'seastar::httpd']]], + ['base_5fexception_3',['base_exception',['../classseastar_1_1httpd_1_1base__exception.html',1,'seastar::httpd']]], + ['basic_5frwlock_4',['basic_rwlock',['../classseastar_1_1basic__rwlock.html',1,'seastar']]], + ['basic_5fsemaphore_5',['basic_semaphore',['../classseastar_1_1basic__semaphore.html',1,'seastar']]], + ['basic_5fsemaphore_3c_20semaphore_5fdefault_5fexception_5ffactory_20_3e_6',['basic_semaphore< semaphore_default_exception_factory >',['../classseastar_1_1basic__semaphore.html',1,'seastar']]], + ['basic_5fsemaphore_3c_20semaphore_5fdefault_5fexception_5ffactory_2c_20rpc_5fclock_5ftype_20_3e_7',['basic_semaphore< semaphore_default_exception_factory, rpc_clock_type >',['../classseastar_1_1basic__semaphore.html',1,'seastar']]], + ['basic_5fsemaphore_3c_20semaphore_5fdefault_5fexception_5ffactory_2c_20typename_20timer_3c_3e_3a_3aclock_20_3e_8',['basic_semaphore< semaphore_default_exception_factory, typename timer<>::clock >',['../classseastar_1_1basic__semaphore.html',1,'seastar']]], + ['basic_5fsstring_9',['basic_sstring',['../classseastar_1_1basic__sstring.html',1,'seastar']]], + ['basic_5fvalue_10',['basic_value',['../classseastar_1_1program__options_1_1basic__value.html',1,'seastar::program_options']]], + ['bool_5fclass_11',['bool_class',['../classseastar_1_1bool__class.html',1,'seastar']]], + ['bool_5fclass_3c_20class_20skip_5fwhen_5fempty_5ftag_20_3e_12',['bool_class< class skip_when_empty_tag >',['../classseastar_1_1bool__class.html',1,'seastar']]], + ['broken_5fcondition_5fvariable_13',['broken_condition_variable',['../classseastar_1_1broken__condition__variable.html',1,'seastar']]], + ['broken_5fnamed_5fsemaphore_14',['broken_named_semaphore',['../classseastar_1_1broken__named__semaphore.html',1,'seastar']]], + ['broken_5fpipe_5fexception_15',['broken_pipe_exception',['../classseastar_1_1broken__pipe__exception.html',1,'seastar']]], + ['broken_5fpromise_16',['broken_promise',['../structseastar_1_1broken__promise.html',1,'seastar']]], + ['broken_5fsemaphore_17',['broken_semaphore',['../classseastar_1_1broken__semaphore.html',1,'seastar']]] +]; diff --git a/master/search/classes_10.html b/master/search/classes_10.html new file mode 100644 index 000000000..57ff55328 --- /dev/null +++ b/master/search/classes_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_10.js b/master/search/classes_10.js new file mode 100644 index 000000000..fb85dd680 --- /dev/null +++ b/master/search/classes_10.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['qp_0',['qp',['../classseastar_1_1net_1_1qp.html',1,'seastar::net']]], + ['qp_5fstats_1',['qp_stats',['../structseastar_1_1net_1_1qp__stats.html',1,'seastar::net']]], + ['qp_5fstats_2erx_2',['qp_stats.rx',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1qp__stats_8rx',1,'seastar::net']]], + ['qp_5fstats_2erx_2ebad_3',['qp_stats.rx.bad',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1qp__stats_8rx_8bad',1,'seastar::net']]], + ['qp_5fstats_2etx_4',['qp_stats.tx',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1qp__stats_8tx',1,'seastar::net']]], + ['qp_5fstats_5fgood_5',['qp_stats_good',['../structseastar_1_1net_1_1qp__stats__good.html',1,'seastar::net']]], + ['qs_5fdeleter_6',['qs_deleter',['../structseastar_1_1alien_1_1internal_1_1qs__deleter.html',1,'seastar::alien::internal']]], + ['queue_7',['queue',['../classseastar_1_1queue.html',1,'seastar']]], + ['queue_3c_20seastar_3a_3anet_3a_3adatagram_20_3e_8',['queue< seastar::net::datagram >',['../classseastar_1_1queue.html',1,'seastar']]], + ['queue_3c_20seastar_3a_3anet_3a_3atcp_3a_3aconnection_20_3e_9',['queue< seastar::net::tcp::connection >',['../classseastar_1_1queue.html',1,'seastar']]], + ['queue_3c_20seastar_3a_3arpc_3a_3arcv_5fbuf_20_3e_10',['queue< seastar::rpc::rcv_buf >',['../classseastar_1_1queue.html',1,'seastar']]], + ['queue_3c_20seastar_3a_3atemporary_5fbuffer_3c_20char_20_3e_20_3e_11',['queue< seastar::temporary_buffer< char > >',['../classseastar_1_1queue.html',1,'seastar']]], + ['queue_3c_20std_3a_3aunique_5fptr_3c_20seastar_3a_3ahttp_3a_3areply_20_3e_20_3e_12',['queue< std::unique_ptr< seastar::http::reply > >',['../classseastar_1_1queue.html',1,'seastar']]], + ['queue_3c_20temporary_5fbuffer_3c_20char_20_3e_20_3e_13',['queue< temporary_buffer< char > >',['../classseastar_1_1queue.html',1,'seastar']]] +]; diff --git a/master/search/classes_11.html b/master/search/classes_11.html new file mode 100644 index 000000000..e00cc57b7 --- /dev/null +++ b/master/search/classes_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_11.js b/master/search/classes_11.js new file mode 100644 index 000000000..c6f2e319b --- /dev/null +++ b/master/search/classes_11.js @@ -0,0 +1,43 @@ +var searchData= +[ + ['ragel_5fparser_5fbase_0',['ragel_parser_base',['../classseastar_1_1ragel__parser__base.html',1,'seastar']]], + ['rcv_5fbuf_1',['rcv_buf',['../structseastar_1_1rpc_1_1rcv__buf.html',1,'seastar::rpc']]], + ['rcv_5freply_2',['rcv_reply',['../structseastar_1_1rpc_1_1rcv__reply.html',1,'seastar::rpc']]], + ['rcv_5freply_3c_20serializer_2c_20future_3c_20t_2e_2e_2e_20_3e_20_3e_3',['rcv_reply< Serializer, future< T... > >',['../structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc']]], + ['rcv_5freply_3c_20serializer_2c_20future_3c_3e_20_3e_4',['rcv_reply< Serializer, future<> >',['../structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_4_01_4.html',1,'seastar::rpc']]], + ['rcv_5freply_3c_20serializer_2c_20void_20_3e_5',['rcv_reply< Serializer, void >',['../structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01void_01_4.html',1,'seastar::rpc']]], + ['rcv_5freply_5fbase_6',['rcv_reply_base',['../structseastar_1_1rpc_1_1rcv__reply__base.html',1,'seastar::rpc']]], + ['rcv_5freply_5fbase_3c_20std_3a_3atuple_3c_20t_2e_2e_2e_20_3e_2c_20t_2e_2e_2e_20_3e_7',['rcv_reply_base< std::tuple< T... >, T... >',['../structseastar_1_1rpc_1_1rcv__reply__base.html',1,'seastar::rpc']]], + ['rcv_5freply_5fbase_3c_20t_2c_20t_20_3e_8',['rcv_reply_base< T, T >',['../structseastar_1_1rpc_1_1rcv__reply__base.html',1,'seastar::rpc']]], + ['rcv_5freply_5fbase_3c_20void_2c_20void_20_3e_9',['rcv_reply_base< void, void >',['../structseastar_1_1rpc_1_1rcv__reply__base.html',1,'seastar::rpc']]], + ['reactor_10',['reactor',['../classseastar_1_1reactor.html',1,'seastar']]], + ['reactor_5foptions_11',['reactor_options',['../structseastar_1_1reactor__options.html',1,'seastar']]], + ['readable_5feventfd_12',['readable_eventfd',['../classseastar_1_1readable__eventfd.html',1,'seastar']]], + ['ready_5ffuture_5fmarker_13',['ready_future_marker',['../group__future-module.html#structseastar_1_1ready__future__marker',1,'seastar']]], + ['real_5fcounter_5ftype_5ftraits_14',['real_counter_type_traits',['../structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits.html',1,'seastar::metrics::impl']]], + ['real_5fcounter_5ftype_5ftraits_3c_20true_2c_20t_20_3e_15',['real_counter_type_traits< true, T >',['../structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits_3_01true_00_01T_01_4.html',1,'seastar::metrics::impl']]], + ['redirect_5fexception_16',['redirect_exception',['../classseastar_1_1httpd_1_1redirect__exception.html',1,'seastar::httpd']]], + ['reference_5fwrapper_17',['reference_wrapper',['../classseastar_1_1reference__wrapper.html',1,'seastar']]], + ['registered_5fmetric_18',['registered_metric',['../classseastar_1_1metrics_1_1impl_1_1registered__metric.html',1,'seastar::metrics::impl']]], + ['registration_19',['registration',['../classseastar_1_1net_1_1ipv4__udp_1_1registration.html',1,'seastar::net::ipv4_udp::registration'],['../structseastar_1_1scollectd_1_1registration.html',1,'seastar::scollectd::registration']]], + ['registrations_20',['registrations',['../classseastar_1_1scollectd_1_1registrations.html',1,'seastar::scollectd']]], + ['relabel_5fconfig_21',['relabel_config',['../structseastar_1_1metrics_1_1relabel__config.html',1,'seastar::metrics']]], + ['relabel_5fconfig_5fregex_22',['relabel_config_regex',['../classseastar_1_1metrics_1_1relabel__config__regex.html',1,'seastar::metrics']]], + ['reloadable_5fcredentials_23',['reloadable_credentials',['../namespaceseastar_1_1tls.html#classseastar_1_1tls_1_1reloadable__credentials',1,'seastar::tls']]], + ['remote_5fverb_5ferror_24',['remote_verb_error',['../classseastar_1_1rpc_1_1remote__verb__error.html',1,'seastar::rpc']]], + ['remove_5foptional_25',['remove_optional',['../structseastar_1_1rpc_1_1remove__optional.html',1,'seastar::rpc']]], + ['remove_5foptional_3c_20optional_3c_20t_20_3e_20_3e_26',['remove_optional< optional< T > >',['../structseastar_1_1rpc_1_1remove__optional_3_01optional_3_01T_01_4_01_4.html',1,'seastar::rpc']]], + ['reply_27',['reply',['../structseastar_1_1http_1_1reply.html',1,'seastar::http']]], + ['reply_5fhandler_28',['reply_handler',['../structseastar_1_1rpc_1_1client_1_1reply__handler.html',1,'seastar::rpc::client']]], + ['request_29',['request',['../structseastar_1_1http_1_1request.html',1,'seastar::http']]], + ['request_5flimits_30',['request_limits',['../classseastar_1_1io__queue.html#structseastar_1_1io__queue_1_1request__limits',1,'seastar::io_queue']]], + ['resource_5flimits_31',['resource_limits',['../group__rpc.html#structseastar_1_1rpc_1_1resource__limits',1,'seastar::rpc']]], + ['resources_32',['resources',['../structseastar_1_1resource_1_1resources.html',1,'seastar::resource']]], + ['return_5ftype_5fof_33',['return_type_of',['../structseastar_1_1alien_1_1internal_1_1return__type__of.html',1,'seastar::alien::internal']]], + ['return_5ftype_5fof_3c_20func_2c_20false_20_3e_34',['return_type_of< Func, false >',['../structseastar_1_1alien_1_1internal_1_1return__type__of_3_01Func_00_01false_01_4.html',1,'seastar::alien::internal']]], + ['routes_35',['routes',['../classseastar_1_1httpd_1_1routes.html',1,'seastar::httpd']]], + ['rpc_5fhandler_36',['rpc_handler',['../structseastar_1_1rpc_1_1rpc__handler.html',1,'seastar::rpc']]], + ['rpc_5fprotocol_5ferror_37',['rpc_protocol_error',['../classseastar_1_1rpc_1_1rpc__protocol__error.html',1,'seastar::rpc']]], + ['rule_5fregistration_38',['rule_registration',['../classseastar_1_1httpd_1_1rule__registration.html',1,'seastar::httpd']]], + ['run_5fresult_39',['run_result',['../classperf__tests_1_1internal_1_1performance__test.html#structperf__tests_1_1internal_1_1performance__test_1_1run__result',1,'perf_tests::internal::performance_test']]] +]; diff --git a/master/search/classes_12.html b/master/search/classes_12.html new file mode 100644 index 000000000..e9ac03763 --- /dev/null +++ b/master/search/classes_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_12.js b/master/search/classes_12.js new file mode 100644 index 000000000..c2edee07b --- /dev/null +++ b/master/search/classes_12.js @@ -0,0 +1,113 @@ +var searchData= +[ + ['sack_0',['sack',['../structseastar_1_1net_1_1tcp__option_1_1sack.html',1,'seastar::net::tcp_option']]], + ['sampler_1',['sampler',['../classsampler.html',1,'']]], + ['scattered_5fmessage_2',['scattered_message',['../classseastar_1_1scattered__message.html',1,'seastar']]], + ['sched_5fstats_3',['sched_stats',['../classseastar_1_1reactor.html#structseastar_1_1reactor_1_1sched__stats',1,'seastar::reactor']]], + ['scheduling_5fgroup_4',['scheduling_group',['../classseastar_1_1scheduling__group.html',1,'seastar']]], + ['scheduling_5fgroup_5fkey_5',['scheduling_group_key',['../classseastar_1_1scheduling__group__key.html',1,'seastar']]], + ['scheduling_5fgroup_5fkey_5fconfig_6',['scheduling_group_key_config',['../structseastar_1_1scheduling__group__key__config.html',1,'seastar']]], + ['scoped_5fcritical_5falloc_5fsection_7',['scoped_critical_alloc_section',['../namespaceseastar_1_1memory.html#structseastar_1_1memory_1_1scoped__critical__alloc__section',1,'seastar::memory']]], + ['scoped_5fheap_5fprofiling_8',['scoped_heap_profiling',['../classseastar_1_1memory_1_1scoped__heap__profiling.html',1,'seastar::memory']]], + ['scoped_5flarge_5fallocation_5fwarning_5fdisable_9',['scoped_large_allocation_warning_disable',['../classseastar_1_1memory_1_1scoped__large__allocation__warning__disable.html',1,'seastar::memory']]], + ['scoped_5flarge_5fallocation_5fwarning_5fthreshold_10',['scoped_large_allocation_warning_threshold',['../classseastar_1_1memory_1_1scoped__large__allocation__warning__threshold.html',1,'seastar::memory']]], + ['scoped_5fno_5fabort_5fon_5finternal_5ferror_11',['scoped_no_abort_on_internal_error',['../classseastar_1_1testing_1_1scoped__no__abort__on__internal__error.html',1,'seastar::testing']]], + ['sctp_5fkeepalive_5fparams_12',['sctp_keepalive_params',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1sctp__keepalive__params',1,'seastar::net']]], + ['seastar_5ftest_13',['seastar_test',['../classseastar_1_1testing_1_1seastar__test.html',1,'seastar::testing']]], + ['selection_5fvalue_14',['selection_value',['../classseastar_1_1program__options_1_1selection__value.html',1,'seastar::program_options']]], + ['selection_5fvalue_3c_20network_5fstack_5ffactory_20_3e_15',['selection_value< network_stack_factory >',['../classseastar_1_1program__options_1_1selection__value.html',1,'seastar::program_options']]], + ['selection_5fvalue_3c_20reactor_5fbackend_5fselector_20_3e_16',['selection_value< reactor_backend_selector >',['../classseastar_1_1program__options_1_1selection__value.html',1,'seastar::program_options']]], + ['semaphore_5faborted_17',['semaphore_aborted',['../classseastar_1_1semaphore__aborted.html',1,'seastar']]], + ['semaphore_5fdefault_5fexception_5ffactory_18',['semaphore_default_exception_factory',['../structseastar_1_1semaphore__default__exception__factory.html',1,'seastar']]], + ['semaphore_5ftimed_5fout_19',['semaphore_timed_out',['../classseastar_1_1semaphore__timed__out.html',1,'seastar']]], + ['semaphore_5funits_20',['semaphore_units',['../classseastar_1_1semaphore__units.html',1,'seastar']]], + ['serialize_5fhelper_21',['serialize_helper',['../structseastar_1_1rpc_1_1serialize__helper.html',1,'seastar::rpc']]], + ['serialize_5fhelper_3c_20false_20_3e_22',['serialize_helper< false >',['../structseastar_1_1rpc_1_1serialize__helper_3_01false_01_4.html',1,'seastar::rpc']]], + ['serialize_5fhelper_3c_20true_20_3e_23',['serialize_helper< true >',['../structseastar_1_1rpc_1_1serialize__helper_3_01true_01_4.html',1,'seastar::rpc']]], + ['server_24',['server',['../classseastar_1_1experimental_1_1websocket_1_1server.html',1,'seastar::experimental::websocket::server'],['../classseastar_1_1rpc_1_1protocol_1_1server.html',1,'seastar::rpc::protocol< Serializer, MsgType >::server'],['../classseastar_1_1rpc_1_1server.html',1,'seastar::rpc::server']]], + ['server_5fcredentials_25',['server_credentials',['../classseastar_1_1tls_1_1server__credentials.html',1,'seastar::tls']]], + ['server_5ferror_5fexception_26',['server_error_exception',['../classseastar_1_1httpd_1_1server__error__exception.html',1,'seastar::httpd']]], + ['server_5foptions_27',['server_options',['../group__rpc.html#structseastar_1_1rpc_1_1server__options',1,'seastar::rpc']]], + ['server_5fsocket_28',['server_socket',['../classseastar_1_1server__socket.html',1,'seastar']]], + ['session_5fdn_29',['session_dn',['../group__networking-module.html#structseastar_1_1session__dn',1,'seastar']]], + ['set_5fiterator_30',['set_iterator',['../classseastar_1_1bitsets_1_1set__iterator.html',1,'seastar::bitsets']]], + ['set_5frange_31',['set_range',['../classseastar_1_1bitsets_1_1set__range.html',1,'seastar::bitsets']]], + ['sharded_32',['sharded',['../classseastar_1_1sharded.html',1,'seastar']]], + ['sharded_3c_20seastar_3a_3ahttpd_3a_3ahttp_5fserver_20_3e_33',['sharded< seastar::httpd::http_server >',['../classseastar_1_1sharded.html',1,'seastar']]], + ['sharded_5fparameter_34',['sharded_parameter',['../classseastar_1_1sharded__parameter.html',1,'seastar']]], + ['shared_5ffuture_35',['shared_future',['../classseastar_1_1shared__future.html',1,'seastar']]], + ['shared_5ffuture_3c_20t_2e_2e_2e_20_3e_36',['shared_future< T... >',['../classseastar_1_1shared__future.html',1,'seastar']]], + ['shared_5fmutex_37',['shared_mutex',['../classseastar_1_1shared__mutex.html',1,'seastar']]], + ['shared_5fobject_38',['shared_object',['../namespaceseastar.html#structseastar_1_1shared__object',1,'seastar']]], + ['shared_5fpromise_39',['shared_promise',['../classseastar_1_1shared__promise.html',1,'seastar']]], + ['shared_5fptr_40',['shared_ptr',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20impl_20_3e_41',['shared_ptr< impl >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20metric_5fmetadata_20_3e_42',['shared_ptr< metric_metadata >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20net_3a_3anetwork_5finterface_5fimpl_20_3e_43',['shared_ptr< net::network_interface_impl >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20seastar_3a_3afile_5fimpl_20_3e_44',['shared_ptr< seastar::file_impl >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20seastar_3a_3ametrics_3a_3aimpl_3a_3aimpl_20_3e_45',['shared_ptr< seastar::metrics::impl::impl >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20seastar_3a_3arpc_3a_3aserver_3a_3aconnection_20_3e_46',['shared_ptr< seastar::rpc::server::connection >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20seastar_3a_3arpc_3a_3asink_3a_3aimpl_20_3e_47',['shared_ptr< seastar::rpc::sink::impl >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20seastar_3a_3arpc_3a_3asource_3a_3aimpl_20_3e_48',['shared_ptr< seastar::rpc::source::impl >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20seastar_3a_3ascollectd_3a_3avalue_5flist_20_3e_49',['shared_ptr< seastar::scollectd::value_list >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20seastar_3a_3atls_3a_3aserver_5fcredentials_20_3e_50',['shared_ptr< seastar::tls::server_credentials >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_3c_20service_20_3e_51',['shared_ptr< Service >',['../classseastar_1_1shared__ptr.html',1,'seastar']]], + ['shared_5fptr_5fcount_5fbase_52',['shared_ptr_count_base',['../structseastar_1_1shared__ptr__count__base.html',1,'seastar']]], + ['shared_5fptr_5fcount_5ffor_53',['shared_ptr_count_for',['../structseastar_1_1shared__ptr__count__for.html',1,'seastar']]], + ['shared_5fptr_5fmake_5fhelper_54',['shared_ptr_make_helper',['../namespaceseastar.html#structseastar_1_1shared__ptr__make__helper',1,'seastar']]], + ['shared_5fptr_5fmake_5fhelper_3c_20t_2c_20false_20_3e_55',['shared_ptr_make_helper< T, false >',['../structseastar_1_1shared__ptr__make__helper_3_01T_00_01false_01_4.html',1,'seastar']]], + ['shared_5fptr_5fmake_5fhelper_3c_20t_2c_20true_20_3e_56',['shared_ptr_make_helper< T, true >',['../structseastar_1_1shared__ptr__make__helper_3_01T_00_01true_01_4.html',1,'seastar']]], + ['signature_57',['signature',['../structseastar_1_1rpc_1_1signature.html',1,'seastar::rpc']]], + ['signature_3c_20ret_28client_5finfo_20_26_2c_20in_2e_2e_2e_29_3e_58',['signature< Ret(client_info &, In...)>',['../structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01In_8_8_8_08_4.html',1,'seastar::rpc']]], + ['signature_3c_20ret_28client_5finfo_20_26_2c_20opt_5ftime_5fpoint_2c_20in_2e_2e_2e_29_3e_59',['signature< Ret(client_info &, opt_time_point, In...)>',['../structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4.html',1,'seastar::rpc']]], + ['signature_3c_20ret_28const_20client_5finfo_20_26_2c_20in_2e_2e_2e_29_3e_60',['signature< Ret(const client_info &, In...)>',['../structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01In_8_8_8_08_4.html',1,'seastar::rpc']]], + ['signature_3c_20ret_28const_20client_5finfo_20_26_2c_20opt_5ftime_5fpoint_2c_20in_2e_2e_2e_29_3e_61',['signature< Ret(const client_info &, opt_time_point, In...)>',['../structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4.html',1,'seastar::rpc']]], + ['signature_3c_20ret_28in_2e_2e_2e_29_3e_62',['signature< Ret(In...)>',['../structseastar_1_1rpc_1_1signature_3_01Ret_07In_8_8_8_08_4.html',1,'seastar::rpc']]], + ['signature_3c_20ret_28opt_5ftime_5fpoint_2c_20in_2e_2e_2e_29_3e_63',['signature< Ret(opt_time_point, In...)>',['../structseastar_1_1rpc_1_1signature_3_01Ret_07opt__time__point_00_01In_8_8_8_08_4.html',1,'seastar::rpc']]], + ['simple_5fbacktrace_64',['simple_backtrace',['../classseastar_1_1simple__backtrace.html',1,'seastar']]], + ['simple_5fmemory_5finput_5fstream_65',['simple_memory_input_stream',['../classseastar_1_1simple__memory__input__stream.html',1,'seastar']]], + ['simple_5fmemory_5foutput_5fstream_66',['simple_memory_output_stream',['../classseastar_1_1simple__memory__output__stream.html',1,'seastar']]], + ['simple_5fpollfn_67',['simple_pollfn',['../structseastar_1_1simple__pollfn.html',1,'seastar']]], + ['sink_68',['sink',['../classseastar_1_1rpc_1_1sink.html',1,'seastar::rpc']]], + ['sink_5fimpl_69',['sink_impl',['../classseastar_1_1rpc_1_1sink__impl.html',1,'seastar::rpc']]], + ['skip_5fbytes_70',['skip_bytes',['../classseastar_1_1skip__bytes.html',1,'seastar']]], + ['slab_5fallocator_71',['slab_allocator',['../classseastar_1_1slab__allocator.html',1,'seastar']]], + ['slab_5fclass_72',['slab_class',['../classseastar_1_1slab__class.html',1,'seastar']]], + ['slab_5fitem_5fbase_73',['slab_item_base',['../classseastar_1_1slab__item__base.html',1,'seastar']]], + ['slab_5fpage_5fdesc_74',['slab_page_desc',['../structseastar_1_1slab__page__desc.html',1,'seastar']]], + ['sleep_5faborted_75',['sleep_aborted',['../classseastar_1_1sleep__aborted.html',1,'seastar']]], + ['smp_76',['smp',['../classseastar_1_1smp.html',1,'seastar']]], + ['smp_5fmessage_5fqueue_77',['smp_message_queue',['../classseastar_1_1smp__message__queue.html',1,'seastar']]], + ['smp_5foptions_78',['smp_options',['../structseastar_1_1smp__options.html',1,'seastar']]], + ['smp_5fservice_5fgroup_79',['smp_service_group',['../classseastar_1_1smp__service__group.html',1,'seastar']]], + ['smp_5fservice_5fgroup_5fconfig_80',['smp_service_group_config',['../namespaceseastar.html#structseastar_1_1smp__service__group__config',1,'seastar']]], + ['smp_5fsubmit_5fto_5foptions_81',['smp_submit_to_options',['../structseastar_1_1smp__submit__to__options.html',1,'seastar']]], + ['snd_5fbuf_82',['snd_buf',['../structseastar_1_1rpc_1_1snd__buf.html',1,'seastar::rpc']]], + ['socket_83',['socket',['../classseastar_1_1socket.html',1,'seastar']]], + ['socket_5faddress_84',['socket_address',['../classseastar_1_1socket__address.html',1,'seastar']]], + ['socket_5faddress_2eu_85',['socket_address.u',['../namespaceseastar.html#unionseastar_1_1socket__address_8u',1,'seastar']]], + ['source_86',['source',['../classseastar_1_1rpc_1_1source.html',1,'seastar::rpc']]], + ['source_5fimpl_87',['source_impl',['../classseastar_1_1rpc_1_1source__impl.html',1,'seastar::rpc']]], + ['spawn_5fparameters_88',['spawn_parameters',['../structseastar_1_1experimental_1_1spawn__parameters.html',1,'seastar::experimental']]], + ['speculation_89',['speculation',['../structseastar_1_1pollable__fd__state_1_1speculation.html',1,'seastar::pollable_fd_state']]], + ['spinlock_90',['spinlock',['../classseastar_1_1util_1_1spinlock.html',1,'seastar::util']]], + ['srv_5frecord_91',['srv_record',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1srv__record',1,'seastar::net']]], + ['sstring_5fbuilder_92',['sstring_builder',['../classseastar_1_1sstring__builder.html',1,'seastar']]], + ['stack_5fsize_93',['stack_size',['../classseastar_1_1posix__thread_1_1attr.html#structseastar_1_1posix__thread_1_1attr_1_1stack__size',1,'seastar::posix_thread::attr']]], + ['stat_5fdata_94',['stat_data',['../group__fileio-module.html#structseastar_1_1stat__data',1,'seastar']]], + ['statistics_95',['statistics',['../classseastar_1_1memory_1_1statistics.html',1,'seastar::memory']]], + ['stats_96',['stats',['../classseastar_1_1execution__stage.html#structseastar_1_1execution__stage_1_1stats',1,'seastar::execution_stage::stats'],['../structseastar_1_1rpc_1_1stats.html',1,'seastar::rpc::stats']]], + ['stop_5fconsuming_97',['stop_consuming',['../classseastar_1_1stop__consuming.html',1,'seastar']]], + ['stop_5fiteration_5ftag_98',['stop_iteration_tag',['../group__future-util.html#structseastar_1_1stop__iteration__tag',1,'seastar']]], + ['str_5fmatcher_99',['str_matcher',['../classseastar_1_1httpd_1_1str__matcher.html',1,'seastar::httpd']]], + ['stream_100',['stream',['../classseastar_1_1stream.html',1,'seastar']]], + ['stream_3c_20seastar_3a_3anet_3a_3apacket_20_3e_101',['stream< seastar::net::packet >',['../classseastar_1_1stream.html',1,'seastar']]], + ['stream_3c_20seastar_3a_3anet_3a_3apacket_2c_20seastar_3a_3anet_3a_3aethernet_5faddress_20_3e_102',['stream< seastar::net::packet, seastar::net::ethernet_address >',['../classseastar_1_1stream.html',1,'seastar']]], + ['stream_3c_20t_2e_2e_2e_20_3e_103',['stream< T... >',['../classseastar_1_1stream.html',1,'seastar']]], + ['stream_5fclosed_104',['stream_closed',['../classseastar_1_1rpc_1_1stream__closed.html',1,'seastar::rpc']]], + ['streaming_5fdomain_5ftype_105',['streaming_domain_type',['../classseastar_1_1rpc_1_1streaming__domain__type.html',1,'seastar::rpc']]], + ['string_5fmap_106',['string_map',['../classseastar_1_1program__options_1_1string__map.html',1,'seastar::program_options']]], + ['subject_5falt_5fname_107',['subject_alt_name',['../namespaceseastar_1_1tls.html#structseastar_1_1tls_1_1subject__alt__name',1,'seastar::tls']]], + ['subscription_108',['subscription',['../classseastar_1_1abort__source_1_1subscription.html',1,'seastar::abort_source::subscription'],['../classseastar_1_1subscription.html',1,'seastar::subscription< T >']]], + ['switch_5fto_109',['switch_to',['../structseastar_1_1coroutine_1_1switch__to.html',1,'seastar::coroutine']]] +]; diff --git a/master/search/classes_13.html b/master/search/classes_13.html new file mode 100644 index 000000000..47991aa5f --- /dev/null +++ b/master/search/classes_13.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_13.js b/master/search/classes_13.js new file mode 100644 index 000000000..c004ce64d --- /dev/null +++ b/master/search/classes_13.js @@ -0,0 +1,47 @@ +var searchData= +[ + ['task_0',['task',['../classseastar_1_1task.html',1,'seastar']]], + ['task_5fentry_1',['task_entry',['../classseastar_1_1task__entry.html',1,'seastar']]], + ['tasktrace_2',['tasktrace',['../classseastar_1_1tasktrace.html',1,'seastar']]], + ['tcp_3',['tcp',['../classseastar_1_1net_1_1tcp.html',1,'seastar::net']]], + ['tcp_3c_20seastar_3a_3anet_3a_3aipv4_5ftraits_20_3e_4',['tcp< seastar::net::ipv4_traits >',['../classseastar_1_1net_1_1tcp.html',1,'seastar::net']]], + ['tcp_5fhdr_5',['tcp_hdr',['../structseastar_1_1net_1_1tcp__hdr.html',1,'seastar::net']]], + ['tcp_5fkeepalive_5fparams_6',['tcp_keepalive_params',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1tcp__keepalive__params',1,'seastar::net']]], + ['tcp_5foption_7',['tcp_option',['../structseastar_1_1net_1_1tcp__option.html',1,'seastar::net']]], + ['tcp_5fseq_8',['tcp_seq',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1tcp__seq',1,'seastar::net']]], + ['tcp_5ftag_9',['tcp_tag',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1tcp__tag',1,'seastar::net']]], + ['temporary_5fbuffer_10',['temporary_buffer',['../classseastar_1_1temporary__buffer.html',1,'seastar']]], + ['temporary_5fbuffer_3c_20char_20_3e_11',['temporary_buffer< char >',['../classseastar_1_1temporary__buffer.html',1,'seastar']]], + ['test_12',['test',['../classseastar_1_1reactor_1_1test.html',1,'seastar::reactor']]], + ['test_5fregistrar_13',['test_registrar',['../structperf__tests_1_1internal_1_1test__registrar.html',1,'perf_tests::internal']]], + ['test_5frunner_14',['test_runner',['../classseastar_1_1testing_1_1test__runner.html',1,'seastar::testing']]], + ['thread_15',['thread',['../classseastar_1_1thread.html',1,'seastar']]], + ['thread_5fattributes_16',['thread_attributes',['../group__thread-module.html#classseastar_1_1thread__attributes',1,'seastar']]], + ['thread_5fcputime_5fclock_17',['thread_cputime_clock',['../classseastar_1_1thread__cputime__clock.html',1,'seastar']]], + ['time_5festimated_5fhistogram_18',['time_estimated_histogram',['../classseastar_1_1metrics_1_1internal_1_1time__estimated__histogram.html',1,'seastar::metrics::internal']]], + ['time_5fmeasurement_19',['time_measurement',['../classperf__tests_1_1internal_1_1time__measurement.html',1,'perf_tests::internal']]], + ['timed_5fout_5ferror_20',['timed_out_error',['../classseastar_1_1timed__out__error.html',1,'seastar']]], + ['timeout_5ferror_21',['timeout_error',['../classseastar_1_1rpc_1_1timeout__error.html',1,'seastar::rpc']]], + ['timer_22',['timer',['../classseastar_1_1timer.html',1,'seastar']]], + ['timer_3c_20clock_20_3e_23',['timer< Clock >',['../classseastar_1_1timer.html',1,'seastar']]], + ['timer_3c_20lowres_5fclock_20_3e_24',['timer< lowres_clock >',['../classseastar_1_1timer.html',1,'seastar']]], + ['timer_3c_20seastar_3a_3alowres_5fclock_20_3e_25',['timer< seastar::lowres_clock >',['../classseastar_1_1timer.html',1,'seastar']]], + ['timer_3c_20seastar_3a_3amanual_5fclock_20_3e_26',['timer< seastar::manual_clock >',['../classseastar_1_1timer.html',1,'seastar']]], + ['timer_5fset_27',['timer_set',['../classseastar_1_1timer__set.html',1,'seastar']]], + ['timestamps_28',['timestamps',['../structseastar_1_1net_1_1tcp__option_1_1timestamps.html',1,'seastar::net::tcp_option']]], + ['tls_5foptions_29',['tls_options',['../namespaceseastar_1_1tls.html#structseastar_1_1tls_1_1tls__options',1,'seastar::tls']]], + ['tmp_5fdir_30',['tmp_dir',['../classseastar_1_1tmp__dir.html',1,'seastar']]], + ['tmp_5ffile_31',['tmp_file',['../classseastar_1_1tmp__file.html',1,'seastar']]], + ['topology_5fholder_32',['topology_holder',['../structseastar_1_1resource_1_1hwloc_1_1internal_1_1topology__holder.html',1,'seastar::resource::hwloc::internal']]], + ['transform_5fiterator_33',['transform_iterator',['../classseastar_1_1transform__iterator.html',1,'seastar']]], + ['tuple_34',['tuple',['../classseastar_1_1rpc_1_1tuple.html',1,'seastar::rpc']]], + ['tuple_5felement_3c_20i_2c_20seastar_3a_3arpc_3a_3atuple_3c_20t_2e_2e_2e_20_3e_20_3e_35',['tuple_element< I, seastar::rpc::tuple< T... > >',['../structstd_1_1tuple__element_3_01I_00_01seastar_1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.html',1,'std']]], + ['tuple_5fmap_5ftypes_36',['tuple_map_types',['../group__utilities.html#structseastar_1_1tuple__map__types',1,'seastar']]], + ['tuple_5fmap_5ftypes_3c_20internal_3a_3awrap_5ffor_5fes_2c_20args_5ftuple_20_3e_37',['tuple_map_types< internal::wrap_for_es, args_tuple >',['../namespaceseastar.html#group__utilities',1,'seastar']]], + ['tuple_5fmap_5ftypes_3c_20mapclass_2c_20std_3a_3atuple_3c_20elements_2e_2e_2e_20_3e_20_3e_38',['tuple_map_types< MapClass, std::tuple< Elements... > >',['../namespaceseastar.html#structseastar_1_1tuple__map__types_3_01MapClass_00_01std_1_1tuple_3_01Elements_8_8_8_01_4_01_4',1,'seastar']]], + ['tuple_5fsize_3c_20seastar_3a_3arpc_3a_3atuple_3c_20t_2e_2e_2e_20_3e_20_3e_39',['tuple_size< seastar::rpc::tuple< T... > >',['../structstd_1_1tuple__size_3_01seastar_1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.html',1,'std']]], + ['type_5finstance_5fid_40',['type_instance_id',['../classseastar_1_1scollectd_1_1type__instance__id.html',1,'seastar::scollectd']]], + ['typed_41',['typed',['../structseastar_1_1scollectd_1_1typed.html',1,'seastar::scollectd']]], + ['typed_5fvalue_42',['typed_value',['../structseastar_1_1scollectd_1_1typed__value.html',1,'seastar::scollectd']]], + ['typed_5fvalue_5fimpl_43',['typed_value_impl',['../structseastar_1_1scollectd_1_1typed__value__impl.html',1,'seastar::scollectd']]] +]; diff --git a/master/search/classes_14.html b/master/search/classes_14.html new file mode 100644 index 000000000..aee9c1c3e --- /dev/null +++ b/master/search/classes_14.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_14.js b/master/search/classes_14.js new file mode 100644 index 000000000..716491f4c --- /dev/null +++ b/master/search/classes_14.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['udp_5fchannel_5fstate_0',['udp_channel_state',['../structseastar_1_1net_1_1udp__channel__state.html',1,'seastar::net']]], + ['udp_5fhdr_1',['udp_hdr',['../structseastar_1_1net_1_1udp__hdr.html',1,'seastar::net']]], + ['unaligned_2',['unaligned',['../structseastar_1_1unaligned.html',1,'seastar']]], + ['unaligned_3c_20uint16_5ft_20_3e_3',['unaligned< uint16_t >',['../structseastar_1_1unaligned.html',1,'seastar']]], + ['unaligned_3c_20uint32_5ft_20_3e_4',['unaligned< uint32_t >',['../structseastar_1_1unaligned.html',1,'seastar']]], + ['unexpected_5fstatus_5ferror_5',['unexpected_status_error',['../classseastar_1_1httpd_1_1unexpected__status__error.html',1,'seastar::httpd']]], + ['unix_5fdomain_5faddr_6',['unix_domain_addr',['../structseastar_1_1unix__domain__addr.html',1,'seastar']]], + ['unknown_5fexception_5ferror_7',['unknown_exception_error',['../classseastar_1_1rpc_1_1unknown__exception__error.html',1,'seastar::rpc']]], + ['unknown_5fhost_8',['unknown_host',['../classseastar_1_1net_1_1unknown__host.html',1,'seastar::net']]], + ['unknown_5fverb_5ferror_9',['unknown_verb_error',['../classseastar_1_1rpc_1_1unknown__verb__error.html',1,'seastar::rpc']]], + ['unmarshal_5fone_10',['unmarshal_one',['../structseastar_1_1rpc_1_1unmarshal__one.html',1,'seastar::rpc']]], + ['unread_5foverflow_5fexception_11',['unread_overflow_exception',['../classseastar_1_1unread__overflow__exception.html',1,'seastar']]], + ['unused_12',['unused',['../group__program-options.html#structseastar_1_1program__options_1_1unused',1,'seastar::program_options']]], + ['url_13',['url',['../classseastar_1_1httpd_1_1url.html',1,'seastar::httpd']]], + ['usecfmt_5fwrapper_14',['usecfmt_wrapper',['../namespaceseastar.html#structseastar_1_1usecfmt__wrapper',1,'seastar']]] +]; diff --git a/master/search/classes_15.html b/master/search/classes_15.html new file mode 100644 index 000000000..61db24ea6 --- /dev/null +++ b/master/search/classes_15.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_15.js b/master/search/classes_15.js new file mode 100644 index 000000000..feffc9f00 --- /dev/null +++ b/master/search/classes_15.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['value_0',['value',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options::value< T >'],['../classseastar_1_1scollectd_1_1value.html',1,'seastar::scollectd::value< T >']]], + ['value_3c_20bool_20_3e_1',['value< bool >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20double_20_3e_2',['value< double >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20float_20_3e_3',['value< float >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20int_20_3e_4',['value< int >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20log_5flevel_20_3e_5',['value< log_level >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20log_5flevel_5fmap_20_3e_6',['value< log_level_map >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20logger_5ftimestamp_5fstyle_20_3e_7',['value< logger_timestamp_style >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20memory_3a_3aalloc_5ffailure_5fkind_20_3e_8',['value< memory::alloc_failure_kind >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20resource_3a_3acpuset_20_3e_9',['value< resource::cpuset >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20seastar_3a_3alogger_5fostream_5ftype_20_3e_10',['value< seastar::logger_ostream_type >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20std_3a_3amonostate_20_3e_11',['value< std::monostate >',['../classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4.html',1,'seastar::program_options']]], + ['value_3c_20std_3a_3astring_20_3e_12',['value< std::string >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_3c_20typed_3c_20t_20_3e_20_3e_13',['value< typed< T > >',['../classseastar_1_1scollectd_1_1value_3_01typed_3_01T_01_4_01_4.html',1,'seastar::scollectd']]], + ['value_3c_20unsigned_20_3e_14',['value< unsigned >',['../classseastar_1_1program__options_1_1value.html',1,'seastar::program_options']]], + ['value_5flist_15',['value_list',['../classseastar_1_1scollectd_1_1value__list.html',1,'seastar::scollectd']]], + ['values_5fcopy_16',['values_copy',['../structseastar_1_1metrics_1_1impl_1_1values__copy.html',1,'seastar::metrics::impl']]], + ['values_5fimpl_17',['values_impl',['../classseastar_1_1scollectd_1_1values__impl.html',1,'seastar::scollectd']]], + ['vector_5fdata_5fsink_18',['vector_data_sink',['../classseastar_1_1vector__data__sink.html',1,'seastar']]], + ['verification_5ferror_19',['verification_error',['../classseastar_1_1tls_1_1verification__error.html',1,'seastar::tls']]], + ['virtio_5foptions_20',['virtio_options',['../structseastar_1_1net_1_1virtio__options.html',1,'seastar::net']]] +]; diff --git a/master/search/classes_16.html b/master/search/classes_16.html new file mode 100644 index 000000000..c21cbc1ed --- /dev/null +++ b/master/search/classes_16.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_16.js b/master/search/classes_16.js new file mode 100644 index 000000000..b77f2dc13 --- /dev/null +++ b/master/search/classes_16.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['wait_5fexited_0',['wait_exited',['../classseastar_1_1experimental_1_1process.html#structseastar_1_1experimental_1_1process_1_1wait__exited',1,'seastar::experimental::process']]], + ['wait_5fsignaled_1',['wait_signaled',['../classseastar_1_1experimental_1_1process.html#structseastar_1_1experimental_1_1process_1_1wait__signaled',1,'seastar::experimental::process']]], + ['wait_5fsignature_2',['wait_signature',['../structseastar_1_1rpc_1_1wait__signature.html',1,'seastar::rpc']]], + ['wait_5fsignature_3c_20future_3c_20no_5fwait_5ftype_20_3e_20_3e_3',['wait_signature< future< no_wait_type > >',['../structseastar_1_1rpc_1_1wait__signature_3_01future_3_01no__wait__type_01_4_01_4.html',1,'seastar::rpc']]], + ['wait_5fsignature_3c_20future_3c_20t_2e_2e_2e_20_3e_20_3e_4',['wait_signature< future< T... > >',['../structseastar_1_1rpc_1_1wait__signature_3_01future_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc']]], + ['wait_5fsignature_3c_20no_5fwait_5ftype_20_3e_5',['wait_signature< no_wait_type >',['../structseastar_1_1rpc_1_1wait__signature_3_01no__wait__type_01_4.html',1,'seastar::rpc']]], + ['wait_5ftype_6',['wait_type',['../structseastar_1_1rpc_1_1wait__type.html',1,'seastar::rpc']]], + ['watch_7',['watch',['../classseastar_1_1experimental_1_1fsnotifier_1_1watch.html',1,'seastar::experimental::fsnotifier']]], + ['weak_5fptr_8',['weak_ptr',['../classseastar_1_1weak__ptr.html',1,'seastar']]], + ['weak_5fptr_3c_20seastar_3a_3arpc_3a_3aclient_20_3e_9',['weak_ptr< seastar::rpc::client >',['../classseastar_1_1weak__ptr.html',1,'seastar']]], + ['weakly_5freferencable_10',['weakly_referencable',['../classseastar_1_1weakly__referencable.html',1,'seastar']]], + ['weakly_5freferencable_3c_20client_20_3e_11',['weakly_referencable< client >',['../classseastar_1_1weakly__referencable.html',1,'seastar']]], + ['websocket_5fparser_12',['websocket_parser',['../classseastar_1_1experimental_1_1websocket_1_1websocket__parser.html',1,'seastar::experimental::websocket']]], + ['when_5fany_5fresult_13',['when_any_result',['../namespaceseastar.html#structseastar_1_1when__any__result',1,'seastar']]], + ['win_5fscale_14',['win_scale',['../structseastar_1_1net_1_1tcp__option_1_1win__scale.html',1,'seastar::net::tcp_option']]], + ['with_5fclock_15',['with_clock',['../group__future-module.html#structseastar_1_1with__clock',1,'seastar']]], + ['without_5fpreemption_5fcheck_16',['without_preemption_check',['../structseastar_1_1coroutine_1_1without__preemption__check.html',1,'seastar::coroutine']]], + ['wrap_17',['wrap',['../structseastar_1_1scollectd_1_1value_1_1wrap.html',1,'seastar::scollectd::value']]], + ['writeable_5feventfd_18',['writeable_eventfd',['../classseastar_1_1writeable__eventfd.html',1,'seastar']]] +]; diff --git a/master/search/classes_17.html b/master/search/classes_17.html new file mode 100644 index 000000000..8f12a7c17 --- /dev/null +++ b/master/search/classes_17.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_17.js b/master/search/classes_17.js new file mode 100644 index 000000000..73e3ab97c --- /dev/null +++ b/master/search/classes_17.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['x509_5fcert_0',['x509_cert',['../classseastar_1_1tls_1_1x509__cert.html',1,'seastar::tls']]] +]; diff --git a/master/search/classes_18.html b/master/search/classes_18.html new file mode 100644 index 000000000..7c79be89f --- /dev/null +++ b/master/search/classes_18.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_18.js b/master/search/classes_18.js new file mode 100644 index 000000000..826729ca8 --- /dev/null +++ b/master/search/classes_18.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['yield_5fawaiter_0',['yield_awaiter',['../structseastar_1_1coroutine_1_1experimental_1_1internal_1_1yield__awaiter.html',1,'seastar::coroutine::experimental::internal']]] +]; diff --git a/master/search/classes_2.html b/master/search/classes_2.html new file mode 100644 index 000000000..fa2086157 --- /dev/null +++ b/master/search/classes_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_2.js b/master/search/classes_2.js new file mode 100644 index 000000000..01df7d56f --- /dev/null +++ b/master/search/classes_2.js @@ -0,0 +1,57 @@ +var searchData= +[ + ['canceled_5ferror_0',['canceled_error',['../classseastar_1_1rpc_1_1canceled__error.html',1,'seastar::rpc']]], + ['cancellable_1',['cancellable',['../structseastar_1_1rpc_1_1cancellable.html',1,'seastar::rpc']]], + ['cancelled_5ferror_2',['cancelled_error',['../classseastar_1_1cancelled__error.html',1,'seastar']]], + ['candidate_3',['candidate',['../classseastar_1_1program__options_1_1selection__value.html#structseastar_1_1program__options_1_1selection__value_1_1candidate',1,'seastar::program_options::selection_value']]], + ['cbiterator_4',['cbiterator',['../classseastar_1_1circular__buffer__fixed__capacity_1_1cbiterator.html',1,'seastar::circular_buffer_fixed_capacity']]], + ['certificate_5fcredentials_5',['certificate_credentials',['../classseastar_1_1tls_1_1certificate__credentials.html',1,'seastar::tls']]], + ['checked_5fptr_6',['checked_ptr',['../classseastar_1_1checked__ptr.html',1,'seastar']]], + ['checked_5fptr_5fis_5fnull_5fexception_7',['checked_ptr_is_null_exception',['../classseastar_1_1checked__ptr__is__null__exception.html',1,'seastar']]], + ['checksummer_8',['checksummer',['../structseastar_1_1net_1_1checksummer.html',1,'seastar::net']]], + ['chunked_5ffifo_9',['chunked_fifo',['../classseastar_1_1chunked__fifo.html',1,'seastar']]], + ['chunked_5ffifo_3c_20entry_20_3e_10',['chunked_fifo< entry >',['../classseastar_1_1chunked__fifo.html',1,'seastar']]], + ['chunked_5ffifo_3c_20waiter_20_3e_11',['chunked_fifo< waiter >',['../classseastar_1_1chunked__fifo.html',1,'seastar']]], + ['chunked_5ffifo_3c_20work_5fitem_2c_20flush_5fthreshold_20_3e_12',['chunked_fifo< work_item, flush_threshold >',['../classseastar_1_1chunked__fifo.html',1,'seastar']]], + ['chunked_5fsource_5fimpl_13',['chunked_source_impl',['../classseastar_1_1httpd_1_1internal_1_1chunked__source__impl.html',1,'seastar::httpd::internal']]], + ['circular_5fbuffer_14',['circular_buffer',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20double_20_3e_15',['circular_buffer< double >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20seastar_3a_3aforeign_5fptr_3c_20std_3a_3aunique_5fptr_3c_20seastar_3a_3arpc_3a_3arcv_5fbuf_20_3e_20_3e_20_3e_16',['circular_buffer< seastar::foreign_ptr< std::unique_ptr< seastar::rpc::rcv_buf > > >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20seastar_3a_3anet_3a_3aipv4_5ftraits_3a_3al4packet_20_3e_17',['circular_buffer< seastar::net::ipv4_traits::l4packet >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20seastar_3a_3anet_3a_3al3_5fprotocol_3a_3al3packet_20_3e_18',['circular_buffer< seastar::net::l3_protocol::l3packet >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20seastar_3a_3anet_3a_3apacket_20_3e_19',['circular_buffer< seastar::net::packet >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20seastar_3a_3atask_20_2a_20_3e_20',['circular_buffer< seastar::task * >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20std_3a_3apair_3c_20seastar_3a_3alw_5fshared_5fptr_3c_20tcb_20_3e_2c_20seastar_3a_3anet_3a_3aethernet_5faddress_20_3e_20_3e_21',['circular_buffer< std::pair< seastar::lw_shared_ptr< tcb >, seastar::net::ethernet_address > >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_3c_20typename_20inettraits_3a_3al4packet_20_3e_22',['circular_buffer< typename InetTraits::l4packet >',['../classseastar_1_1circular__buffer.html',1,'seastar']]], + ['circular_5fbuffer_5ffixed_5fcapacity_23',['circular_buffer_fixed_capacity',['../classseastar_1_1circular__buffer__fixed__capacity.html',1,'seastar']]], + ['client_24',['client',['../classseastar_1_1http_1_1experimental_1_1client.html',1,'seastar::http::experimental::client'],['../classseastar_1_1rpc_1_1client.html',1,'seastar::rpc::client'],['../classseastar_1_1rpc_1_1protocol_1_1client.html',1,'seastar::rpc::protocol< Serializer, MsgType >::client']]], + ['client_5ffunction_5ftype_25',['client_function_type',['../classseastar_1_1rpc_1_1client__function__type.html',1,'seastar::rpc']]], + ['client_5finfo_26',['client_info',['../structseastar_1_1rpc_1_1client__info.html',1,'seastar::rpc']]], + ['client_5foptions_27',['client_options',['../group__rpc.html#structseastar_1_1rpc_1_1client__options',1,'seastar::rpc']]], + ['client_5fref_28',['client_ref',['../classseastar_1_1http_1_1internal_1_1client__ref.html',1,'seastar::http::internal']]], + ['closed_5ferror_29',['closed_error',['../classseastar_1_1rpc_1_1closed__error.html',1,'seastar::rpc']]], + ['compressor_30',['compressor',['../classseastar_1_1rpc_1_1compressor.html',1,'seastar::rpc']]], + ['concrete_5fexecution_5fstage_31',['concrete_execution_stage',['../classseastar_1_1concrete__execution__stage.html',1,'seastar']]], + ['concrete_5fperformance_5ftest_32',['concrete_performance_test',['../classperf__tests_1_1internal_1_1concrete__performance__test.html',1,'perf_tests::internal']]], + ['condition_5fvariable_33',['condition_variable',['../classseastar_1_1condition__variable.html',1,'seastar']]], + ['condition_5fvariable_5ftimed_5fout_34',['condition_variable_timed_out',['../classseastar_1_1condition__variable__timed__out.html',1,'seastar']]], + ['config_35',['config',['../classseastar_1_1fair__group.html#structseastar_1_1fair__group_1_1config',1,'seastar::fair_group::config'],['../classseastar_1_1fair__queue.html#structseastar_1_1fair__queue_1_1config',1,'seastar::fair_queue::config'],['../classseastar_1_1io__queue.html#structseastar_1_1io__queue_1_1config',1,'seastar::io_queue::config'],['../structseastar_1_1metrics_1_1impl_1_1config.html',1,'seastar::metrics::impl::config'],['../structseastar_1_1prometheus_1_1config.html',1,'seastar::prometheus::config']]], + ['config_5fexception_36',['config_exception',['../classseastar_1_1net_1_1config__exception.html',1,'seastar::net']]], + ['configuration_37',['configuration',['../structseastar_1_1resource_1_1configuration.html',1,'seastar::resource']]], + ['connected_5fsocket_38',['connected_socket',['../classseastar_1_1connected__socket.html',1,'seastar']]], + ['connected_5fsocket_5finput_5fstream_5fconfig_39',['connected_socket_input_stream_config',['../group__networking-module.html#structseastar_1_1connected__socket__input__stream__config',1,'seastar']]], + ['connection_40',['connection',['../classseastar_1_1experimental_1_1websocket_1_1connection.html',1,'seastar::experimental::websocket::connection'],['../classseastar_1_1http_1_1experimental_1_1connection.html',1,'seastar::http::experimental::connection'],['../classseastar_1_1httpd_1_1connection.html',1,'seastar::httpd::connection'],['../classseastar_1_1net_1_1tcp_1_1connection.html',1,'seastar::net::tcp< InetTraits >::connection'],['../classseastar_1_1rpc_1_1connection.html',1,'seastar::rpc::connection'],['../classseastar_1_1rpc_1_1server_1_1connection.html',1,'seastar::rpc::server::connection']]], + ['connection_5ffactory_41',['connection_factory',['../classseastar_1_1http_1_1experimental_1_1connection__factory.html',1,'seastar::http::experimental']]], + ['connection_5fid_42',['connection_id',['../classseastar_1_1rpc_1_1connection__id.html',1,'seastar::rpc']]], + ['connid_5fhash_43',['connid_hash',['../structseastar_1_1net_1_1l4connid_1_1connid__hash.html',1,'seastar::net::l4connid']]], + ['conntrack_44',['conntrack',['../classseastar_1_1net_1_1conntrack.html',1,'seastar::net']]], + ['consumption_5fresult_45',['consumption_result',['../classseastar_1_1consumption__result.html',1,'seastar']]], + ['content_5flength_5fsource_5fimpl_46',['content_length_source_impl',['../classseastar_1_1httpd_1_1internal_1_1content__length__source__impl.html',1,'seastar::httpd::internal']]], + ['content_5freplace_47',['content_replace',['../classseastar_1_1httpd_1_1content__replace.html',1,'seastar::httpd']]], + ['continue_5fconsuming_48',['continue_consuming',['../namespaceseastar.html#structseastar_1_1continue__consuming',1,'seastar']]], + ['coroutine_5ftraits_3c_20seastar_3a_3afuture_3c_20t_20_3e_2c_20args_2e_2e_2e_20_3e_49',['coroutine_traits< seastar::future< T >, Args... >',['../classstd_1_1coroutine__traits_3_01seastar_1_1future_3_01T_01_4_00_01Args_8_8_8_01_4.html',1,'std']]], + ['counter_5ftype_5ftraits_50',['counter_type_traits',['../structseastar_1_1metrics_1_1impl_1_1counter__type__traits.html',1,'seastar::metrics::impl']]], + ['cpu_51',['cpu',['../structseastar_1_1resource_1_1cpu.html',1,'seastar::resource']]], + ['credentials_5fbuilder_52',['credentials_builder',['../classseastar_1_1tls_1_1credentials__builder.html',1,'seastar::tls']]], + ['current_5fexception_5ffuture_5fmarker_53',['current_exception_future_marker',['../structseastar_1_1future__state__base.html#structseastar_1_1future__state__base_1_1current__exception__future__marker',1,'seastar::future_state_base']]] +]; diff --git a/master/search/classes_3.html b/master/search/classes_3.html new file mode 100644 index 000000000..98fbc8766 --- /dev/null +++ b/master/search/classes_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_3.js b/master/search/classes_3.js new file mode 100644 index 000000000..fedbe358e --- /dev/null +++ b/master/search/classes_3.js @@ -0,0 +1,41 @@ +var searchData= +[ + ['data_5fsink_0',['data_sink',['../classseastar_1_1data__sink.html',1,'seastar']]], + ['data_5fsink_5fimpl_1',['data_sink_impl',['../classseastar_1_1data__sink__impl.html',1,'seastar']]], + ['data_5fsource_2',['data_source',['../classseastar_1_1data__source.html',1,'seastar']]], + ['data_5fsource_5fimpl_3',['data_source_impl',['../classseastar_1_1data__source__impl.html',1,'seastar']]], + ['data_5ftype_5ffor_4',['data_type_for',['../structseastar_1_1scollectd_1_1data__type__for.html',1,'seastar::scollectd']]], + ['data_5ftype_5ffor_3c_20std_3a_3ainvoke_5fresult_5ft_3c_20t_20_3e_20_3e_5',['data_type_for< std::invoke_result_t< T > >',['../structseastar_1_1scollectd_1_1data__type__for.html',1,'seastar::scollectd']]], + ['data_5ftype_5ffor_3c_20t_2c_20std_3a_3aenable_5fif_5ft_3c_20is_5fcallable_3c_20t_20_3e_3a_3avalue_2c_20void_20_3e_20_3e_6',['data_type_for< T, std::enable_if_t< is_callable< T >::value, void > >',['../structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01is__callable_35c0ca2f0a42f3af2902b730a47b963e6.html',1,'seastar::scollectd']]], + ['data_5ftype_5ffor_3c_20t_2c_20std_3a_3aenable_5fif_5ft_3c_20std_3a_3ais_5ffloating_5fpoint_5fv_3c_20t_20_3e_2c_20void_20_3e_20_3e_7',['data_type_for< T, std::enable_if_t< std::is_floating_point_v< T >, void > >',['../structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__floefb1fea89ef879d2424c4cbcbf5c1652.html',1,'seastar::scollectd']]], + ['data_5ftype_5ffor_3c_20t_2c_20std_3a_3aenable_5fif_5ft_3c_20std_3a_3ais_5fintegral_5fv_3c_20t_20_3e_20_26_26std_3a_3ais_5funsigned_5fv_3c_20t_20_3e_2c_20void_20_3e_20_3e_8',['data_type_for< T, std::enable_if_t< std::is_integral_v< T > &&std::is_unsigned_v< T >, void > >',['../structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__int8bb9c47ea63565f41486d8397e60995d.html',1,'seastar::scollectd']]], + ['data_5ftype_5ffor_3c_20typed_3c_20t_20_3e_20_3e_9',['data_type_for< typed< T > >',['../structseastar_1_1scollectd_1_1data__type__for_3_01typed_3_01T_01_4_01_4.html',1,'seastar::scollectd']]], + ['datagram_10',['datagram',['../classseastar_1_1net_1_1datagram.html',1,'seastar::net']]], + ['datagram_5fchannel_11',['datagram_channel',['../classseastar_1_1net_1_1datagram__channel.html',1,'seastar::net']]], + ['datagram_5fimpl_12',['datagram_impl',['../classseastar_1_1net_1_1datagram__impl.html',1,'seastar::net']]], + ['default_5fnull_5fderef_5faction_13',['default_null_deref_action',['../structseastar_1_1default__null__deref__action.html',1,'seastar']]], + ['default_5ftimeout_5fexception_5ffactory_14',['default_timeout_exception_factory',['../structseastar_1_1default__timeout__exception__factory.html',1,'seastar']]], + ['deferred_5faction_15',['deferred_action',['../classseastar_1_1deferred__action.html',1,'seastar']]], + ['deferred_5fclose_16',['deferred_close',['../classseastar_1_1deferred__close.html',1,'seastar']]], + ['deferred_5fsnd_5fbuf_17',['deferred_snd_buf',['../structseastar_1_1rpc_1_1deferred__snd__buf.html',1,'seastar::rpc']]], + ['deferred_5fstop_18',['deferred_stop',['../classseastar_1_1deferred__stop.html',1,'seastar']]], + ['deleter_19',['deleter',['../classseastar_1_1deleter.html',1,'seastar']]], + ['description_20',['description',['../classseastar_1_1metrics_1_1description.html',1,'seastar::metrics']]], + ['device_21',['device',['../classseastar_1_1net_1_1device.html',1,'seastar::net']]], + ['device_5fconfig_22',['device_config',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1device__config',1,'seastar::net']]], + ['dh_5fparams_23',['dh_params',['../classseastar_1_1tls_1_1dh__params.html',1,'seastar::tls']]], + ['dhcp_24',['dhcp',['../classseastar_1_1net_1_1dhcp.html',1,'seastar::net']]], + ['directory_5fentry_25',['directory_entry',['../group__fileio-module.html#structseastar_1_1directory__entry',1,'seastar']]], + ['directory_5fhandler_26',['directory_handler',['../classseastar_1_1httpd_1_1directory__handler.html',1,'seastar::httpd']]], + ['disable_5ffailure_5fguard_27',['disable_failure_guard',['../namespaceseastar_1_1memory.html#structseastar_1_1memory_1_1disable__failure__guard',1,'seastar::memory']]], + ['disable_5fsampling_5ftemporarily_28',['disable_sampling_temporarily',['../structsampler_1_1disable__sampling__temporarily.html',1,'sampler']]], + ['disposer_29',['disposer',['../classseastar_1_1lw__shared__ptr_1_1disposer.html',1,'seastar::lw_shared_ptr']]], + ['dns_5fresolver_30',['dns_resolver',['../classseastar_1_1net_1_1dns__resolver.html',1,'seastar::net']]], + ['do_5fwant_5fclient_5finfo_31',['do_want_client_info',['../structseastar_1_1rpc_1_1do__want__client__info.html',1,'seastar::rpc']]], + ['do_5fwant_5ftime_5fpoint_32',['do_want_time_point',['../structseastar_1_1rpc_1_1do__want__time__point.html',1,'seastar::rpc']]], + ['dont_5fwant_5fclient_5finfo_33',['dont_want_client_info',['../structseastar_1_1rpc_1_1dont__want__client__info.html',1,'seastar::rpc']]], + ['dont_5fwant_5ftime_5fpoint_34',['dont_want_time_point',['../structseastar_1_1rpc_1_1dont__want__time__point.html',1,'seastar::rpc']]], + ['double_5fregistration_35',['double_registration',['../classseastar_1_1metrics_1_1double__registration.html',1,'seastar::metrics']]], + ['dpdk_5foptions_36',['dpdk_options',['../structseastar_1_1net_1_1dpdk__options.html',1,'seastar::net']]], + ['dummy_5fexpiry_37',['dummy_expiry',['../structseastar_1_1dummy__expiry.html',1,'seastar']]] +]; diff --git a/master/search/classes_4.html b/master/search/classes_4.html new file mode 100644 index 000000000..3b6c51eb4 --- /dev/null +++ b/master/search/classes_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_4.js b/master/search/classes_4.js new file mode 100644 index 000000000..bc67200a7 --- /dev/null +++ b/master/search/classes_4.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['enable_5flw_5fshared_5ffrom_5fthis_0',['enable_lw_shared_from_this',['../classseastar_1_1enable__lw__shared__from__this.html',1,'seastar']]], + ['enable_5flw_5fshared_5ffrom_5fthis_3c_20tcb_20_3e_1',['enable_lw_shared_from_this< tcb >',['../classseastar_1_1enable__lw__shared__from__this.html',1,'seastar']]], + ['enable_5fshared_5ffrom_5fthis_2',['enable_shared_from_this',['../classseastar_1_1enable__shared__from__this.html',1,'seastar']]], + ['enable_5fshared_5ffrom_5fthis_3c_20connection_20_3e_3',['enable_shared_from_this< connection >',['../classseastar_1_1enable__shared__from__this.html',1,'seastar']]], + ['enum_5fhash_4',['enum_hash',['../classseastar_1_1enum__hash.html',1,'seastar']]], + ['eof_5ferror_5',['eof_error',['../classseastar_1_1file_1_1eof__error.html',1,'seastar::file']]], + ['eol_6',['eol',['../structseastar_1_1net_1_1tcp__option_1_1eol.html',1,'seastar::net::tcp_option']]], + ['error_7',['error',['../classseastar_1_1rpc_1_1error.html',1,'seastar::rpc']]], + ['eth_5fhdr_8',['eth_hdr',['../structseastar_1_1net_1_1eth__hdr.html',1,'seastar::net']]], + ['ethernet_9',['ethernet',['../structseastar_1_1net_1_1ethernet.html',1,'seastar::net']]], + ['ethernet_5faddress_10',['ethernet_address',['../structseastar_1_1net_1_1ethernet__address.html',1,'seastar::net']]], + ['event_11',['event',['../classseastar_1_1experimental_1_1fsnotifier.html#structseastar_1_1experimental_1_1fsnotifier_1_1event',1,'seastar::experimental::fsnotifier']]], + ['exception_12',['exception',['../structseastar_1_1coroutine_1_1exception.html',1,'seastar::coroutine::exception'],['../classseastar_1_1experimental_1_1websocket_1_1exception.html',1,'seastar::experimental::websocket::exception']]], + ['exception_5ffuture_5fmarker_13',['exception_future_marker',['../group__future-module.html#structseastar_1_1exception__future__marker',1,'seastar']]], + ['exchanger_14',['exchanger',['../classseastar_1_1testing_1_1exchanger.html',1,'seastar::testing']]], + ['exchanger_3c_20std_3a_3afunction_3c_20seastar_3a_3afuture_3c_3e_28_29_3e_20_3e_15',['exchanger< std::function< seastar::future<>()> >',['../classseastar_1_1testing_1_1exchanger.html',1,'seastar::testing']]], + ['exchanger_5fbase_16',['exchanger_base',['../classseastar_1_1testing_1_1exchanger__base.html',1,'seastar::testing']]], + ['execution_5fstage_17',['execution_stage',['../classseastar_1_1execution__stage.html',1,'seastar']]], + ['expiring_5ffifo_18',['expiring_fifo',['../classseastar_1_1expiring__fifo.html',1,'seastar']]], + ['external_5ftype_19',['external_type',['../structseastar_1_1basic__sstring_1_1contents_1_1external__type.html',1,'seastar::basic_sstring::contents']]] +]; diff --git a/master/search/classes_5.html b/master/search/classes_5.html new file mode 100644 index 000000000..51c2b307c --- /dev/null +++ b/master/search/classes_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_5.js b/master/search/classes_5.js new file mode 100644 index 000000000..f29153184 --- /dev/null +++ b/master/search/classes_5.js @@ -0,0 +1,64 @@ +var searchData= +[ + ['factory_0',['factory',['../classseastar_1_1rpc_1_1compressor_1_1factory.html',1,'seastar::rpc::compressor::factory'],['../classseastar_1_1rpc_1_1lz4__compressor_1_1factory.html',1,'seastar::rpc::lz4_compressor::factory'],['../classseastar_1_1rpc_1_1lz4__fragmented__compressor_1_1factory.html',1,'seastar::rpc::lz4_fragmented_compressor::factory']]], + ['fair_5fgroup_1',['fair_group',['../classseastar_1_1fair__group.html',1,'seastar']]], + ['fair_5fqueue_2',['fair_queue',['../classseastar_1_1fair__queue.html',1,'seastar']]], + ['fair_5fqueue_5fentry_3',['fair_queue_entry',['../classseastar_1_1fair__queue__entry.html',1,'seastar']]], + ['fair_5fqueue_5fticket_4',['fair_queue_ticket',['../classseastar_1_1fair__queue__ticket.html',1,'seastar']]], + ['file_5',['file',['../classseastar_1_1file.html',1,'seastar']]], + ['file_5fdesc_6',['file_desc',['../classseastar_1_1file__desc.html',1,'seastar']]], + ['file_5fhandle_7',['file_handle',['../classseastar_1_1file__handle.html',1,'seastar']]], + ['file_5fhandle_5fimpl_8',['file_handle_impl',['../classseastar_1_1file__handle__impl.html',1,'seastar']]], + ['file_5fhandler_9',['file_handler',['../classseastar_1_1httpd_1_1file__handler.html',1,'seastar::httpd']]], + ['file_5fimpl_10',['file_impl',['../classseastar_1_1file__impl.html',1,'seastar']]], + ['file_5finput_5fstream_5fhistory_11',['file_input_stream_history',['../classseastar_1_1file__input__stream__history.html',1,'seastar']]], + ['file_5finput_5fstream_5foptions_12',['file_input_stream_options',['../namespaceseastar.html#structseastar_1_1file__input__stream__options',1,'seastar']]], + ['file_5finteraction_5fhandler_13',['file_interaction_handler',['../classseastar_1_1httpd_1_1file__interaction__handler.html',1,'seastar::httpd']]], + ['file_5fopen_5foptions_14',['file_open_options',['../structseastar_1_1file__open__options.html',1,'seastar']]], + ['file_5foutput_5fstream_5foptions_15',['file_output_stream_options',['../namespaceseastar.html#structseastar_1_1file__output__stream__options',1,'seastar']]], + ['file_5ftransformer_16',['file_transformer',['../classseastar_1_1httpd_1_1file__transformer.html',1,'seastar::httpd']]], + ['finally_5fbody_17',['finally_body',['../classseastar_1_1future.html#structseastar_1_1future_1_1finally__body',1,'seastar::future']]], + ['finally_5fbody_3c_20func_2c_20false_20_3e_18',['finally_body< Func, false >',['../structseastar_1_1future_1_1finally__body_3_01Func_00_01false_01_4.html',1,'seastar::future']]], + ['finally_5fbody_3c_20func_2c_20true_20_3e_19',['finally_body< Func, true >',['../structseastar_1_1future_1_1finally__body_3_01Func_00_01true_01_4.html',1,'seastar::future']]], + ['follow_5fsymlink_5ftag_20',['follow_symlink_tag',['../group__fileio-module.html#structseastar_1_1follow__symlink__tag',1,'seastar']]], + ['foreign_5fptr_21',['foreign_ptr',['../classseastar_1_1foreign__ptr.html',1,'seastar']]], + ['foreign_5fptr_3c_20seastar_3a_3alw_5fshared_5fptr_3c_20load_5fbalancer_20_3e_20_3e_22',['foreign_ptr< seastar::lw_shared_ptr< load_balancer > >',['../classseastar_1_1foreign__ptr.html',1,'seastar']]], + ['formatter_23',['formatter',['../classseastar_1_1json_1_1formatter.html',1,'seastar::json']]], + ['formatter_3c_20seastar_3a_3aabort_5frequested_5fexception_20_3e_24',['formatter< seastar::abort_requested_exception >',['../structfmt_1_1formatter_3_01seastar_1_1abort__requested__exception_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3abool_5fclass_3c_20tag_20_3e_20_3e_25',['formatter< seastar::bool_class< Tag > >',['../structfmt_1_1formatter_3_01seastar_1_1bool__class_3_01Tag_01_4_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3ahttpd_3a_3abase_5fexception_20_3e_26',['formatter< seastar::httpd::base_exception >',['../structfmt_1_1formatter_3_01seastar_1_1httpd_1_1base__exception_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3alazy_5fderef_5fwrapper_3c_20t_20_3e_20_3e_27',['formatter< seastar::lazy_deref_wrapper< T > >',['../structfmt_1_1formatter_3_01seastar_1_1lazy__deref__wrapper_3_01T_01_4_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3alazy_5feval_3c_20func_20_3e_20_3e_28',['formatter< seastar::lazy_eval< Func > >',['../structfmt_1_1formatter_3_01seastar_1_1lazy__eval_3_01Func_01_4_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3alog_5flevel_20_3e_29',['formatter< seastar::log_level >',['../structfmt_1_1formatter_3_01seastar_1_1log__level_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3alw_5fshared_5fptr_3c_20t_20_3e_20_3e_30',['formatter< seastar::lw_shared_ptr< T > >',['../structfmt_1_1formatter_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3aoptimized_5foptional_3c_20t_20_3e_20_3e_31',['formatter< seastar::optimized_optional< T > >',['../structfmt_1_1formatter_3_01seastar_1_1optimized__optional_3_01T_01_4_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3arpc_3a_3aoptional_3c_20t_20_3e_20_3e_32',['formatter< seastar::rpc::optional< T > >',['../structfmt_1_1formatter_3_01seastar_1_1rpc_1_1optional_3_01T_01_4_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3ashared_5fptr_3c_20t_20_3e_20_3e_33',['formatter< seastar::shared_ptr< T > >',['../structfmt_1_1formatter_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3atimed_5fout_5ferror_20_3e_34',['formatter< seastar::timed_out_error >',['../structfmt_1_1formatter_3_01seastar_1_1timed__out__error_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3atls_3a_3asubject_5falt_5fname_20_3e_35',['formatter< seastar::tls::subject_alt_name >',['../structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3atls_3a_3asubject_5falt_5fname_3a_3avalue_5ftype_20_3e_36',['formatter< seastar::tls::subject_alt_name::value_type >',['../structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_1_1value__type_01_4.html',1,'fmt']]], + ['formatter_3c_20seastar_3a_3atls_3a_3asubject_5falt_5fname_5ftype_20_3e_37',['formatter< seastar::tls::subject_alt_name_type >',['../structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name__type_01_4.html',1,'fmt']]], + ['formatter_3c_20t_20_3e_38',['formatter< T >',['../structfmt_1_1formatter_3_01T_01_4.html',1,'fmt']]], + ['forward_5fhash_39',['forward_hash',['../classseastar_1_1net_1_1forward__hash.html',1,'seastar::net']]], + ['fragment_40',['fragment',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1fragment',1,'seastar::net']]], + ['fragmented_5fmemory_5finput_5fstream_41',['fragmented_memory_input_stream',['../classseastar_1_1fragmented__memory__input__stream.html',1,'seastar']]], + ['fragmented_5fmemory_5foutput_5fstream_42',['fragmented_memory_output_stream',['../classseastar_1_1fragmented__memory__output__stream.html',1,'seastar']]], + ['frame_43',['frame',['../namespaceseastar.html#structseastar_1_1frame',1,'seastar']]], + ['frame_5fheader_44',['frame_header',['../structseastar_1_1experimental_1_1websocket_1_1frame__header.html',1,'seastar::experimental::websocket']]], + ['free_5fdeleter_45',['free_deleter',['../structseastar_1_1free__deleter.html',1,'seastar']]], + ['fsnotifier_46',['fsnotifier',['../classseastar_1_1experimental_1_1fsnotifier.html',1,'seastar::experimental']]], + ['function_5fhandler_47',['function_handler',['../classseastar_1_1httpd_1_1function__handler.html',1,'seastar::httpd']]], + ['function_5finput_5fiterator_48',['function_input_iterator',['../structseastar_1_1function__input__iterator.html',1,'seastar']]], + ['function_5ftraits_49',['function_traits',['../namespaceseastar.html#structseastar_1_1function__traits',1,'seastar']]], + ['function_5ftraits_3c_20ret_28_2a_29_28args_2e_2e_2e_29_3e_50',['function_traits< Ret(*)(Args...)>',['../structseastar_1_1function__traits_3_01Ret_07_5_08_07Args_8_8_8_08_4.html',1,'seastar']]], + ['function_5ftraits_3c_20ret_28args_2e_2e_2e_29_3e_51',['function_traits< Ret(Args...)>',['../structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4.html',1,'seastar']]], + ['function_5ftraits_3c_20ret_28t_3a_3a_2a_29_28args_2e_2e_2e_29_20const_20_3e_52',['function_traits< Ret(T::*)(Args...) const >',['../structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_01const_01_4.html',1,'seastar']]], + ['function_5ftraits_3c_20ret_28t_3a_3a_2a_29_28args_2e_2e_2e_29_3e_53',['function_traits< Ret(T::*)(Args...)>',['../structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_4.html',1,'seastar']]], + ['function_5ftraits_3c_20std_3a_3aremove_5freference_5ft_3c_20t_20_3e_20_3e_54',['function_traits< std::remove_reference_t< T > >',['../namespaceseastar.html',1,'seastar']]], + ['function_5ftraits_3c_20t_20_26_20_3e_55',['function_traits< T & >',['../structseastar_1_1function__traits_3_01T_01_6_01_4.html',1,'seastar']]], + ['future_56',['future',['../classseastar_1_1future.html',1,'seastar']]], + ['future_3c_20bool_20_3e_57',['future< bool >',['../classseastar_1_1future.html',1,'seastar']]], + ['future_5ffor_5fget_5fpromise_5fmarker_58',['future_for_get_promise_marker',['../group__future-module.html#structseastar_1_1future__for__get__promise__marker',1,'seastar']]], + ['future_5fstate_5fbase_59',['future_state_base',['../structseastar_1_1future__state__base.html',1,'seastar']]], + ['futurize_60',['futurize',['../structseastar_1_1futurize.html',1,'seastar']]] +]; diff --git a/master/search/classes_6.html b/master/search/classes_6.html new file mode 100644 index 000000000..431fb052a --- /dev/null +++ b/master/search/classes_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_6.js b/master/search/classes_6.js new file mode 100644 index 000000000..f746dc82e --- /dev/null +++ b/master/search/classes_6.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['gate_0',['gate',['../classseastar_1_1gate.html',1,'seastar']]], + ['gate_5fclosed_5fexception_1',['gate_closed_exception',['../classseastar_1_1gate__closed__exception.html',1,'seastar']]], + ['generator_2',['generator',['../classseastar_1_1coroutine_1_1experimental_1_1generator.html',1,'seastar::coroutine::experimental']]], + ['generator_5fbuffered_5fpromise_3',['generator_buffered_promise',['../classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__buffered__promise.html',1,'seastar::coroutine::experimental::internal']]], + ['generator_5funbuffered_5fpromise_4',['generator_unbuffered_promise',['../classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__unbuffered__promise.html',1,'seastar::coroutine::experimental::internal']]], + ['guard_5',['guard',['../classseastar_1_1sstring__builder_1_1guard.html',1,'seastar::sstring_builder']]] +]; diff --git a/master/search/classes_7.html b/master/search/classes_7.html new file mode 100644 index 000000000..0c76bf53f --- /dev/null +++ b/master/search/classes_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_7.js b/master/search/classes_7.js new file mode 100644 index 000000000..fd1ef5ce9 --- /dev/null +++ b/master/search/classes_7.js @@ -0,0 +1,45 @@ +var searchData= +[ + ['handle_0',['handle',['../classseastar_1_1net_1_1conntrack_1_1handle.html',1,'seastar::net::conntrack']]], + ['handler_5fbase_1',['handler_base',['../classseastar_1_1httpd_1_1handler__base.html',1,'seastar::httpd']]], + ['handler_5fregistration_2',['handler_registration',['../classseastar_1_1httpd_1_1handler__registration.html',1,'seastar::httpd']]], + ['handler_5fwith_5fholder_3',['handler_with_holder',['../classseastar_1_1rpc_1_1protocol__base.html#structseastar_1_1rpc_1_1protocol__base_1_1handler__with__holder',1,'seastar::rpc::protocol_base']]], + ['hash_4',['hash',['../structseastar_1_1net_1_1ipv4__frag__id_1_1hash.html',1,'seastar::net::ipv4_frag_id']]], + ['hash_3c_20seastar_3a_3abasic_5fsstring_3c_20char_5ftype_2c_20size_5ftype_2c_20max_5fsize_2c_20nulterminate_20_3e_20_3e_5',['hash< seastar::basic_sstring< char_type, size_type, max_size, NulTerminate > >',['../structstd_1_1hash_3_01seastar_1_1basic__sstring_3_01char__type_00_01size__type_00_01max__size_00_01NulTerminate_01_4_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3achecked_5fptr_3c_20t_20_3e_20_3e_6',['hash< seastar::checked_ptr< T > >',['../structstd_1_1hash_3_01seastar_1_1checked__ptr_3_01T_01_4_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3aipv4_5faddr_20_3e_7',['hash< seastar::ipv4_addr >',['../structstd_1_1hash_3_01seastar_1_1ipv4__addr_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3alw_5fshared_5fptr_3c_20t_20_3e_20_3e_8',['hash< seastar::lw_shared_ptr< T > >',['../structstd_1_1hash_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3amemory_3a_3aallocation_5fsite_20_3e_9',['hash< seastar::memory::allocation_site >',['../structstd_1_1hash_3_01seastar_1_1memory_1_1allocation__site_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3ametrics_3a_3aimpl_3a_3alabels_5ftype_20_3e_10',['hash< seastar::metrics::impl::labels_type >',['../structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1labels__type_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3ametrics_3a_3aimpl_3a_3ametric_5fid_20_3e_11',['hash< seastar::metrics::impl::metric_id >',['../structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1metric__id_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3anet_3a_3ainet_5faddress_20_3e_12',['hash< seastar::net::inet_address >',['../structstd_1_1hash_3_01seastar_1_1net_1_1inet__address_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3anet_3a_3aipv4_5faddress_20_3e_13',['hash< seastar::net::ipv4_address >',['../structstd_1_1hash_3_01seastar_1_1net_1_1ipv4__address_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3anet_3a_3aipv6_5faddress_20_3e_14',['hash< seastar::net::ipv6_address >',['../structstd_1_1hash_3_01seastar_1_1net_1_1ipv6__address_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3arpc_3a_3aconnection_5fid_20_3e_15',['hash< seastar::rpc::connection_id >',['../structstd_1_1hash_3_01seastar_1_1rpc_1_1connection__id_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3arpc_3a_3astreaming_5fdomain_5ftype_20_3e_16',['hash< seastar::rpc::streaming_domain_type >',['../structstd_1_1hash_3_01seastar_1_1rpc_1_1streaming__domain__type_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3ascheduling_5fgroup_20_3e_17',['hash< seastar::scheduling_group >',['../structstd_1_1hash_3_01seastar_1_1scheduling__group_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3ashared_5fptr_3c_20t_20_3e_20_3e_18',['hash< seastar::shared_ptr< T > >',['../structstd_1_1hash_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3asimple_5fbacktrace_20_3e_19',['hash< seastar::simple_backtrace >',['../structstd_1_1hash_3_01seastar_1_1simple__backtrace_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3asocket_5faddress_20_3e_20',['hash< seastar::socket_address >',['../structstd_1_1hash_3_01seastar_1_1socket__address_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3atasktrace_20_3e_21',['hash< seastar::tasktrace >',['../structstd_1_1hash_3_01seastar_1_1tasktrace_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3atransport_20_3e_22',['hash< seastar::transport >',['../structstd_1_1hash_3_01seastar_1_1transport_01_4.html',1,'std']]], + ['hash_3c_20seastar_3a_3aunix_5fdomain_5faddr_20_3e_23',['hash< seastar::unix_domain_addr >',['../structstd_1_1hash_3_01seastar_1_1unix__domain__addr_01_4.html',1,'std']]], + ['hash_3c_3a_3asockaddr_5fin_20_3e_24',['hash<::sockaddr_in >',['../structstd_1_1hash_3_1_1sockaddr__in_01_4.html',1,'std']]], + ['hash_3c_3a_3asockaddr_5fun_20_3e_25',['hash<::sockaddr_un >',['../structstd_1_1hash_3_1_1sockaddr__un_01_4.html',1,'std']]], + ['helper_26',['helper',['../structseastar_1_1rpc_1_1marshall__one_1_1helper.html',1,'seastar::rpc::marshall_one< Serializer, Output >::helper< T >'],['../structseastar_1_1rpc_1_1unmarshal__one_1_1helper.html',1,'seastar::rpc::unmarshal_one< Serializer, Input >::helper< T >']]], + ['helper_3c_20optional_3c_20t_20_3e_20_3e_27',['helper< optional< T > >',['../structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01optional_3_01T_01_4_01_4.html',1,'seastar::rpc::unmarshal_one']]], + ['helper_3c_20sink_3c_20t_2e_2e_2e_20_3e_20_3e_28',['helper< sink< T... > >',['../structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc::marshall_one< Serializer, Output >::helper< sink< T... > >'],['../structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc::unmarshal_one< Serializer, Input >::helper< sink< T... > >']]], + ['helper_3c_20source_3c_20t_2e_2e_2e_20_3e_20_3e_29',['helper< source< T... > >',['../structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc::marshall_one< Serializer, Output >::helper< source< T... > >'],['../structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc::unmarshal_one< Serializer, Input >::helper< source< T... > >']]], + ['helper_3c_20std_3a_3areference_5fwrapper_3c_20const_20t_20_3e_20_3e_30',['helper< std::reference_wrapper< const T > >',['../structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4.html',1,'seastar::rpc::marshall_one< Serializer, Output >::helper< std::reference_wrapper< const T > >'],['../structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4.html',1,'seastar::rpc::unmarshal_one< Serializer, Input >::helper< std::reference_wrapper< const T > >']]], + ['helper_3c_20tuple_3c_20t_2e_2e_2e_20_3e_20_3e_31',['helper< tuple< T... > >',['../structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc::marshall_one< Serializer, Output >::helper< tuple< T... > >'],['../structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4.html',1,'seastar::rpc::unmarshal_one< Serializer, Input >::helper< tuple< T... > >']]], + ['histogram_32',['histogram',['../structseastar_1_1metrics_1_1histogram.html',1,'seastar::metrics']]], + ['histogram_5fbucket_33',['histogram_bucket',['../namespaceseastar_1_1metrics.html#structseastar_1_1metrics_1_1histogram__bucket',1,'seastar::metrics']]], + ['holder_34',['holder',['../classseastar_1_1gate_1_1holder.html',1,'seastar::gate']]], + ['hostent_35',['hostent',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1hostent',1,'seastar::net']]], + ['http_5fserver_36',['http_server',['../classseastar_1_1httpd_1_1http__server.html',1,'seastar::httpd']]], + ['http_5fserver_5fcontrol_37',['http_server_control',['../classseastar_1_1httpd_1_1http__server__control.html',1,'seastar::httpd']]], + ['http_5fserver_5ftester_38',['http_server_tester',['../classseastar_1_1httpd_1_1http__server__tester.html',1,'seastar::httpd']]], + ['http_5fstats_39',['http_stats',['../classseastar_1_1httpd_1_1http__stats.html',1,'seastar::httpd']]], + ['hw_5fconfig_40',['hw_config',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1hw__config',1,'seastar::net']]], + ['hw_5ffeatures_41',['hw_features',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1hw__features',1,'seastar::net']]] +]; diff --git a/master/search/classes_8.html b/master/search/classes_8.html new file mode 100644 index 000000000..5a392ee09 --- /dev/null +++ b/master/search/classes_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_8.js b/master/search/classes_8.js new file mode 100644 index 000000000..2318e2395 --- /dev/null +++ b/master/search/classes_8.js @@ -0,0 +1,52 @@ +var searchData= +[ + ['icmp_0',['icmp',['../classseastar_1_1net_1_1icmp.html',1,'seastar::net']]], + ['icmp_5fhdr_1',['icmp_hdr',['../structseastar_1_1net_1_1icmp__hdr.html',1,'seastar::net']]], + ['impl_2',['impl',['../classseastar_1_1metrics_1_1impl_1_1impl.html',1,'seastar::metrics::impl::impl'],['../classseastar_1_1rpc_1_1sink_1_1impl.html',1,'seastar::rpc::sink< Out >::impl'],['../classseastar_1_1rpc_1_1source_1_1impl.html',1,'seastar::rpc::source< In >::impl']]], + ['indirect_5fequal_5fto_3',['indirect_equal_to',['../structseastar_1_1indirect__equal__to.html',1,'seastar']]], + ['indirect_5fhash_4',['indirect_hash',['../structseastar_1_1indirect__hash.html',1,'seastar']]], + ['indirect_5fless_5',['indirect_less',['../structseastar_1_1indirect__less.html',1,'seastar']]], + ['inet_5faddress_6',['inet_address',['../classseastar_1_1net_1_1inet__address.html',1,'seastar::net']]], + ['inheriting_5fconcrete_5fexecution_5fstage_7',['inheriting_concrete_execution_stage',['../classseastar_1_1inheriting__concrete__execution__stage.html',1,'seastar']]], + ['inheriting_5fexecution_5fstage_8',['inheriting_execution_stage',['../classseastar_1_1inheriting__execution__stage.html',1,'seastar']]], + ['initialized_5flater_9',['initialized_later',['../classseastar_1_1basic__sstring.html#structseastar_1_1basic__sstring_1_1initialized__later',1,'seastar::basic_sstring']]], + ['input_5fstream_10',['input_stream',['../classseastar_1_1input__stream.html',1,'seastar']]], + ['input_5fstream_3c_20char_20_3e_11',['input_stream< char >',['../classseastar_1_1input__stream.html',1,'seastar']]], + ['instance_12',['instance',['../classseastar_1_1alien_1_1instance.html',1,'seastar::alien']]], + ['interface_13',['interface',['../classseastar_1_1net_1_1interface.html',1,'seastar::net']]], + ['internal_5ftype_14',['internal_type',['../structseastar_1_1basic__sstring_1_1contents_1_1internal__type.html',1,'seastar::basic_sstring::contents']]], + ['io_5fcompletion_15',['io_completion',['../classseastar_1_1io__completion.html',1,'seastar']]], + ['io_5fgroup_16',['io_group',['../classseastar_1_1io__group.html',1,'seastar']]], + ['io_5fintent_17',['io_intent',['../classseastar_1_1io__intent.html',1,'seastar']]], + ['io_5fqueue_18',['io_queue',['../classseastar_1_1io__queue.html',1,'seastar']]], + ['io_5fqueue_5ftopology_19',['io_queue_topology',['../structseastar_1_1resource_1_1io__queue__topology.html',1,'seastar::resource']]], + ['io_5fstats_20',['io_stats',['../classseastar_1_1reactor.html#structseastar_1_1reactor_1_1io__stats',1,'seastar::reactor']]], + ['ip_5fhdr_21',['ip_hdr',['../structseastar_1_1net_1_1ip__hdr.html',1,'seastar::net']]], + ['ip_5fpacket_5ffilter_22',['ip_packet_filter',['../structseastar_1_1net_1_1ip__packet__filter.html',1,'seastar::net']]], + ['ip_5fprotocol_23',['ip_protocol',['../classseastar_1_1net_1_1ip__protocol.html',1,'seastar::net']]], + ['ipv4_24',['ipv4',['../classseastar_1_1net_1_1ipv4.html',1,'seastar::net']]], + ['ipv4_5faddr_25',['ipv4_addr',['../structseastar_1_1ipv4__addr.html',1,'seastar']]], + ['ipv4_5faddress_26',['ipv4_address',['../structseastar_1_1net_1_1ipv4__address.html',1,'seastar::net']]], + ['ipv4_5fconfig_27',['ipv4_config',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1ipv4__config',1,'seastar::net']]], + ['ipv4_5ffrag_5fid_28',['ipv4_frag_id',['../structseastar_1_1net_1_1ipv4__frag__id.html',1,'seastar::net']]], + ['ipv4_5ficmp_29',['ipv4_icmp',['../classseastar_1_1net_1_1ipv4__icmp.html',1,'seastar::net']]], + ['ipv4_5fl4_30',['ipv4_l4',['../classseastar_1_1net_1_1ipv4__l4.html',1,'seastar::net']]], + ['ipv4_5fl4_3c_20ip_5fprotocol_5fnum_3a_3aicmp_20_3e_31',['ipv4_l4< ip_protocol_num::icmp >',['../classseastar_1_1net_1_1ipv4__l4.html',1,'seastar::net']]], + ['ipv4_5fl4_3c_20ip_5fprotocol_5fnum_3a_3atcp_20_3e_32',['ipv4_l4< ip_protocol_num::tcp >',['../classseastar_1_1net_1_1ipv4__l4.html',1,'seastar::net']]], + ['ipv4_5ftag_33',['ipv4_tag',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1ipv4__tag',1,'seastar::net']]], + ['ipv4_5ftcp_34',['ipv4_tcp',['../classseastar_1_1net_1_1ipv4__tcp.html',1,'seastar::net']]], + ['ipv4_5ftraits_35',['ipv4_traits',['../structseastar_1_1net_1_1ipv4__traits.html',1,'seastar::net']]], + ['ipv4_5fudp_36',['ipv4_udp',['../classseastar_1_1net_1_1ipv4__udp.html',1,'seastar::net']]], + ['ipv6_5faddr_37',['ipv6_addr',['../structseastar_1_1ipv6__addr.html',1,'seastar']]], + ['ipv6_5faddress_38',['ipv6_address',['../structseastar_1_1net_1_1ipv6__address.html',1,'seastar::net']]], + ['is_5fcallable_39',['is_callable',['../namespaceseastar_1_1scollectd.html#structseastar_1_1scollectd_1_1is__callable',1,'seastar::scollectd']]], + ['is_5fcallable_3c_20t_2c_20std_3a_3aenable_5fif_5ft_3c_20std_3a_3ais_5ffundamental_5fv_3c_20t_20_3e_2c_20void_20_3e_20_3e_40',['is_callable< T, std::enable_if_t< std::is_fundamental_v< T >, void > >',['../structseastar_1_1scollectd_1_1is__callable_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__fundam691d139f22c6f61584588d14c6b15105.html',1,'seastar::scollectd']]], + ['is_5fcallable_3c_20t_2c_20std_3a_3aenable_5fif_5ft_3c_21std_3a_3ais_5fvoid_5fv_3c_20std_3a_3ainvoke_5fresult_5ft_3c_20t_20_3e_20_3e_2c_20void_20_3e_20_3e_41',['is_callable< T, std::enable_if_t<!std::is_void_v< std::invoke_result_t< T > >, void > >',['../structseastar_1_1scollectd_1_1is__callable_3_01T_00_01std_1_1enable__if__t_3_9std_1_1is__void__v6ef63c309456a52af7019db17223ca10.html',1,'seastar::scollectd']]], + ['is_5ffuture_42',['is_future',['../structseastar_1_1is__future.html',1,'seastar']]], + ['is_5fsmart_5fptr_43',['is_smart_ptr',['../structseastar_1_1is__smart__ptr.html',1,'seastar']]], + ['is_5fsmart_5fptr_3c_20foreign_5fptr_3c_20t_20_3e_20_3e_44',['is_smart_ptr< foreign_ptr< T > >',['../structseastar_1_1is__smart__ptr_3_01foreign__ptr_3_01T_01_4_01_4.html',1,'seastar']]], + ['is_5fsmart_5fptr_3c_20lw_5fshared_5fptr_3c_20t_20_3e_20_3e_45',['is_smart_ptr< lw_shared_ptr< T > >',['../structseastar_1_1is__smart__ptr_3_01lw__shared__ptr_3_01T_01_4_01_4.html',1,'seastar']]], + ['is_5fsmart_5fptr_3c_20shared_5fptr_3c_20t_20_3e_20_3e_46',['is_smart_ptr< shared_ptr< T > >',['../structseastar_1_1is__smart__ptr_3_01shared__ptr_3_01T_01_4_01_4.html',1,'seastar']]], + ['is_5fsmart_5fptr_3c_20std_3a_3aunique_5fptr_3c_20t_20_3e_20_3e_47',['is_smart_ptr< std::unique_ptr< T > >',['../structseastar_1_1is__smart__ptr_3_01std_1_1unique__ptr_3_01T_01_4_01_4.html',1,'seastar']]], + ['isolation_5fconfig_48',['isolation_config',['../group__rpc.html#structseastar_1_1rpc_1_1isolation__config',1,'seastar::rpc']]] +]; diff --git a/master/search/classes_9.html b/master/search/classes_9.html new file mode 100644 index 000000000..72fb64980 --- /dev/null +++ b/master/search/classes_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_9.js b/master/search/classes_9.js new file mode 100644 index 000000000..753f7121f --- /dev/null +++ b/master/search/classes_9.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['json_5fbase_0',['json_base',['../structseastar_1_1json_1_1json__base.html',1,'seastar::json']]], + ['json_5fbase_5felement_1',['json_base_element',['../classseastar_1_1json_1_1json__base__element.html',1,'seastar::json']]], + ['json_5felement_2',['json_element',['../classseastar_1_1json_1_1json__element.html',1,'seastar::json']]], + ['json_5felement_3c_20int_20_3e_3',['json_element< int >',['../classseastar_1_1json_1_1json__element.html',1,'seastar::json']]], + ['json_5felement_3c_20std_3a_3astring_20_3e_4',['json_element< std::string >',['../classseastar_1_1json_1_1json__element.html',1,'seastar::json']]], + ['json_5fexception_5',['json_exception',['../classseastar_1_1httpd_1_1json__exception.html',1,'seastar::httpd']]], + ['json_5flist_6',['json_list',['../classseastar_1_1json_1_1json__list.html',1,'seastar::json']]], + ['json_5flist_3c_20seastar_3a_3ahttpd_3a_3aapi_5fdoc_20_3e_7',['json_list< seastar::httpd::api_doc >',['../classseastar_1_1json_1_1json__list.html',1,'seastar::json']]], + ['json_5foperation_8',['json_operation',['../structseastar_1_1httpd_1_1json__operation.html',1,'seastar::httpd']]], + ['json_5freturn_5ftype_9',['json_return_type',['../structseastar_1_1json_1_1json__return__type.html',1,'seastar::json']]], + ['json_5fvoid_10',['json_void',['../structseastar_1_1json_1_1json__void.html',1,'seastar::json']]], + ['jsonable_11',['jsonable',['../classseastar_1_1json_1_1jsonable.html',1,'seastar::json']]] +]; diff --git a/master/search/classes_a.html b/master/search/classes_a.html new file mode 100644 index 000000000..f9b8459ce --- /dev/null +++ b/master/search/classes_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_a.js b/master/search/classes_a.js new file mode 100644 index 000000000..f11aa96cd --- /dev/null +++ b/master/search/classes_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['kernel_5fcompletion_0',['kernel_completion',['../classseastar_1_1kernel__completion.html',1,'seastar']]] +]; diff --git a/master/search/classes_b.html b/master/search/classes_b.html new file mode 100644 index 000000000..27f8840c7 --- /dev/null +++ b/master/search/classes_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_b.js b/master/search/classes_b.js new file mode 100644 index 000000000..f6e12070a --- /dev/null +++ b/master/search/classes_b.js @@ -0,0 +1,33 @@ +var searchData= +[ + ['l3_5fprotocol_0',['l3_protocol',['../classseastar_1_1net_1_1l3__protocol.html',1,'seastar::net']]], + ['l3packet_1',['l3packet',['../classseastar_1_1net_1_1l3__protocol.html#structseastar_1_1net_1_1l3__protocol_1_1l3packet',1,'seastar::net::l3_protocol']]], + ['l4connid_2',['l4connid',['../structseastar_1_1net_1_1l4connid.html',1,'seastar::net']]], + ['l4packet_3',['l4packet',['../structseastar_1_1net_1_1ipv4__traits.html#structseastar_1_1net_1_1ipv4__traits_1_1l4packet',1,'seastar::net::ipv4_traits']]], + ['label_4',['label',['../classseastar_1_1metrics_1_1label.html',1,'seastar::metrics']]], + ['label_5finstance_5',['label_instance',['../classseastar_1_1metrics_1_1label__instance.html',1,'seastar::metrics']]], + ['lambda_6',['lambda',['../classseastar_1_1coroutine_1_1lambda.html',1,'seastar::coroutine']]], + ['lambda_5ftask_7',['lambda_task',['../classseastar_1_1lambda__task.html',1,'seastar']]], + ['layered_5ffile_5fimpl_8',['layered_file_impl',['../classseastar_1_1layered__file__impl.html',1,'seastar']]], + ['lazy_5fderef_5fwrapper_9',['lazy_deref_wrapper',['../structseastar_1_1lazy__deref__wrapper.html',1,'seastar']]], + ['lazy_5feval_10',['lazy_eval',['../classseastar_1_1lazy__eval.html',1,'seastar']]], + ['lease_11',['lease',['../classseastar_1_1net_1_1dhcp.html#structseastar_1_1net_1_1dhcp_1_1lease',1,'seastar::net::dhcp']]], + ['linux_5fperf_5fevent_12',['linux_perf_event',['../classlinux__perf__event.html',1,'']]], + ['listen_5foptions_13',['listen_options',['../structseastar_1_1listen__options.html',1,'seastar']]], + ['listener_14',['listener',['../classseastar_1_1net_1_1tcp_1_1listener.html',1,'seastar::net::tcp']]], + ['logger_15',['logger',['../classseastar_1_1rpc_1_1logger.html',1,'seastar::rpc']]], + ['lowres_5fclock_16',['lowres_clock',['../classseastar_1_1lowres__clock.html',1,'seastar']]], + ['lowres_5fsystem_5fclock_17',['lowres_system_clock',['../classseastar_1_1lowres__system__clock.html',1,'seastar']]], + ['lw_5fshared_5fptr_18',['lw_shared_ptr',['../classseastar_1_1lw__shared__ptr.html',1,'seastar']]], + ['lw_5fshared_5fptr_3c_20foreign_5fptr_3c_20shared_5fptr_3c_20connection_20_3e_20_3e_20_3e_19',['lw_shared_ptr< foreign_ptr< shared_ptr< connection > > >',['../classseastar_1_1lw__shared__ptr.html',1,'seastar']]], + ['lw_5fshared_5fptr_3c_20load_5fbalancer_20_3e_20',['lw_shared_ptr< load_balancer >',['../classseastar_1_1lw__shared__ptr.html',1,'seastar']]], + ['lw_5fshared_5fptr_3c_20seastar_3a_3afile_5finput_5fstream_5fhistory_20_3e_21',['lw_shared_ptr< seastar::file_input_stream_history >',['../classseastar_1_1lw__shared__ptr.html',1,'seastar']]], + ['lw_5fshared_5fptr_3c_20seastar_3a_3anet_3a_3audp_5fchannel_5fstate_20_3e_22',['lw_shared_ptr< seastar::net::udp_channel_state >',['../classseastar_1_1lw__shared__ptr.html',1,'seastar']]], + ['lw_5fshared_5fptr_3c_20shared_5fstate_20_3e_23',['lw_shared_ptr< shared_state >',['../classseastar_1_1lw__shared__ptr.html',1,'seastar']]], + ['lw_5fshared_5fptr_3c_20tcb_20_3e_24',['lw_shared_ptr< tcb >',['../classseastar_1_1lw__shared__ptr.html',1,'seastar']]], + ['lw_5fshared_5fptr_5fcounter_5fbase_25',['lw_shared_ptr_counter_base',['../structseastar_1_1lw__shared__ptr__counter__base.html',1,'seastar']]], + ['lw_5fshared_5fptr_5fdeleter_26',['lw_shared_ptr_deleter',['../namespaceseastar.html#structseastar_1_1lw__shared__ptr__deleter',1,'seastar']]], + ['lw_5fshared_5fptr_5fno_5fesft_27',['lw_shared_ptr_no_esft',['../structseastar_1_1lw__shared__ptr__no__esft.html',1,'seastar']]], + ['lz4_5fcompressor_28',['lz4_compressor',['../classseastar_1_1rpc_1_1lz4__compressor.html',1,'seastar::rpc']]], + ['lz4_5ffragmented_5fcompressor_29',['lz4_fragmented_compressor',['../classseastar_1_1rpc_1_1lz4__fragmented__compressor.html',1,'seastar::rpc']]] +]; diff --git a/master/search/classes_c.html b/master/search/classes_c.html new file mode 100644 index 000000000..d6559bbd1 --- /dev/null +++ b/master/search/classes_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_c.js b/master/search/classes_c.js new file mode 100644 index 000000000..0be9e7514 --- /dev/null +++ b/master/search/classes_c.js @@ -0,0 +1,35 @@ +var searchData= +[ + ['make_5fhelper_0',['make_helper',['../classseastar_1_1shared__ptr.html#structseastar_1_1shared__ptr_1_1make__helper',1,'seastar::shared_ptr']]], + ['manual_5fclock_1',['manual_clock',['../classseastar_1_1manual__clock.html',1,'seastar']]], + ['marshall_5fone_2',['marshall_one',['../structseastar_1_1rpc_1_1marshall__one.html',1,'seastar::rpc']]], + ['match_5frule_3',['match_rule',['../classseastar_1_1httpd_1_1match__rule.html',1,'seastar::httpd']]], + ['matcher_4',['matcher',['../classseastar_1_1httpd_1_1matcher.html',1,'seastar::httpd']]], + ['maybe_5fyield_5',['maybe_yield',['../classseastar_1_1coroutine_1_1maybe__yield.html',1,'seastar::coroutine']]], + ['measuring_5foutput_5fstream_6',['measuring_output_stream',['../classseastar_1_1measuring__output__stream.html',1,'seastar']]], + ['memory_7',['memory',['../structseastar_1_1resource_1_1memory.html',1,'seastar::resource']]], + ['memory_5finput_5fstream_8',['memory_input_stream',['../classseastar_1_1memory__input__stream.html',1,'seastar']]], + ['memory_5flayout_9',['memory_layout',['../namespaceseastar_1_1memory.html#structseastar_1_1memory_1_1memory__layout',1,'seastar::memory']]], + ['memory_5foutput_5fstream_10',['memory_output_stream',['../classseastar_1_1memory__output__stream.html',1,'seastar']]], + ['message_5fqueue_11',['message_queue',['../classseastar_1_1alien_1_1message__queue.html',1,'seastar::alien']]], + ['metric_5fdefinition_12',['metric_definition',['../classseastar_1_1metrics_1_1metric__definition.html',1,'seastar::metrics']]], + ['metric_5fdefinition_5fimpl_13',['metric_definition_impl',['../structseastar_1_1metrics_1_1impl_1_1metric__definition__impl.html',1,'seastar::metrics::impl']]], + ['metric_5ffamily_14',['metric_family',['../classseastar_1_1metrics_1_1impl_1_1metric__family.html',1,'seastar::metrics::impl']]], + ['metric_5ffamily_5fconfig_15',['metric_family_config',['../namespaceseastar_1_1metrics.html#structseastar_1_1metrics_1_1metric__family__config',1,'seastar::metrics']]], + ['metric_5ffamily_5finfo_16',['metric_family_info',['../structseastar_1_1metrics_1_1impl_1_1metric__family__info.html',1,'seastar::metrics::impl']]], + ['metric_5ffamily_5fmetadata_17',['metric_family_metadata',['../structseastar_1_1metrics_1_1impl_1_1metric__family__metadata.html',1,'seastar::metrics::impl']]], + ['metric_5fgroup_18',['metric_group',['../classseastar_1_1metrics_1_1metric__group.html',1,'seastar::metrics']]], + ['metric_5fgroup_5fdefinition_19',['metric_group_definition',['../classseastar_1_1metrics_1_1metric__group__definition.html',1,'seastar::metrics']]], + ['metric_5fgroups_20',['metric_groups',['../classseastar_1_1metrics_1_1metric__groups.html',1,'seastar::metrics']]], + ['metric_5fgroups_5fdef_21',['metric_groups_def',['../classseastar_1_1metrics_1_1impl_1_1metric__groups__def.html',1,'seastar::metrics::impl']]], + ['metric_5fgroups_5fimpl_22',['metric_groups_impl',['../classseastar_1_1metrics_1_1impl_1_1metric__groups__impl.html',1,'seastar::metrics::impl']]], + ['metric_5fid_23',['metric_id',['../classseastar_1_1metrics_1_1impl_1_1metric__id.html',1,'seastar::metrics::impl']]], + ['metric_5finfo_24',['metric_info',['../structseastar_1_1metrics_1_1impl_1_1metric__info.html',1,'seastar::metrics::impl']]], + ['metric_5frelabeling_5fresult_25',['metric_relabeling_result',['../namespaceseastar_1_1metrics.html#structseastar_1_1metrics_1_1metric__relabeling__result',1,'seastar::metrics']]], + ['metric_5ftype_26',['metric_type',['../structseastar_1_1metrics_1_1impl_1_1metric__type.html',1,'seastar::metrics::impl']]], + ['metric_5fvalue_27',['metric_value',['../classseastar_1_1metrics_1_1impl_1_1metric__value.html',1,'seastar::metrics::impl']]], + ['missing_5fparam_5fexception_28',['missing_param_exception',['../classseastar_1_1httpd_1_1missing__param__exception.html',1,'seastar::httpd']]], + ['mmap_5fdeleter_29',['mmap_deleter',['../structseastar_1_1mmap__deleter.html',1,'seastar']]], + ['mss_30',['mss',['../structseastar_1_1net_1_1tcp__option_1_1mss.html',1,'seastar::net::tcp_option']]], + ['multi_5falgo_5fcompressor_5ffactory_31',['multi_algo_compressor_factory',['../classseastar_1_1rpc_1_1multi__algo__compressor__factory.html',1,'seastar::rpc']]] +]; diff --git a/master/search/classes_d.html b/master/search/classes_d.html new file mode 100644 index 000000000..4adb6a88b --- /dev/null +++ b/master/search/classes_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_d.js b/master/search/classes_d.js new file mode 100644 index 000000000..08a692d04 --- /dev/null +++ b/master/search/classes_d.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['named_5fsemaphore_5faborted_0',['named_semaphore_aborted',['../classseastar_1_1named__semaphore__aborted.html',1,'seastar']]], + ['named_5fsemaphore_5fexception_5ffactory_1',['named_semaphore_exception_factory',['../structseastar_1_1named__semaphore__exception__factory.html',1,'seastar']]], + ['named_5fsemaphore_5ftimed_5fout_2',['named_semaphore_timed_out',['../classseastar_1_1named__semaphore__timed__out.html',1,'seastar']]], + ['native_5fhistogram_5finfo_3',['native_histogram_info',['../namespaceseastar_1_1metrics.html#structseastar_1_1metrics_1_1native__histogram__info',1,'seastar::metrics']]], + ['native_5fstack_5foptions_4',['native_stack_options',['../structseastar_1_1net_1_1native__stack__options.html',1,'seastar::net']]], + ['negotiation_5fframe_5',['negotiation_frame',['../structseastar_1_1rpc_1_1negotiation__frame.html',1,'seastar::rpc']]], + ['nested_5fexception_6',['nested_exception',['../structseastar_1_1nested__exception.html',1,'seastar']]], + ['nested_5fexception_5fmarker_7',['nested_exception_marker',['../structseastar_1_1future__state__base.html#structseastar_1_1future__state__base_1_1nested__exception__marker',1,'seastar::future_state_base']]], + ['network_5finterface_8',['network_interface',['../classseastar_1_1network__interface.html',1,'seastar']]], + ['network_5fstack_9',['network_stack',['../classseastar_1_1network__stack.html',1,'seastar']]], + ['network_5fstack_5fentry_10',['network_stack_entry',['../namespaceseastar.html#structseastar_1_1network__stack__entry',1,'seastar']]], + ['next_5fawaiter_11',['next_awaiter',['../structseastar_1_1coroutine_1_1experimental_1_1internal_1_1next__awaiter.html',1,'seastar::coroutine::experimental::internal']]], + ['no_5fsharded_5finstance_5fexception_12',['no_sharded_instance_exception',['../classseastar_1_1no__sharded__instance__exception.html',1,'seastar']]], + ['no_5fwait_5ftype_13',['no_wait_type',['../structseastar_1_1rpc_1_1no__wait__type.html',1,'seastar::rpc']]], + ['noncopyable_5ffunction_14',['noncopyable_function',['../namespaceseastar.html#classseastar_1_1noncopyable__function',1,'seastar']]], + ['noncopyable_5ffunction_3c_20future_3c_20std_3a_3aunique_5fptr_3c_20network_5fstack_20_3e_20_3e_28const_20program_5foptions_3a_3aoption_5fgroup_20_26_29_3e_15',['noncopyable_function< future< std::unique_ptr< network_stack > >(const program_options::option_group &)>',['../namespaceseastar.html#namespaceseastar',1,'seastar']]], + ['noncopyable_5ffunction_3c_20future_3c_3e_28t_2e_2e_2e_29_3e_16',['noncopyable_function< future<>(T...)>',['../namespaceseastar.html#namespaceseastar',1,'seastar']]], + ['noncopyable_5ffunction_3c_20ret_28args_2e_2e_2e_29_20noexcept_28noexcept_29_3e_17',['noncopyable_function< Ret(Args...) noexcept(Noexcept)>',['../classseastar_1_1noncopyable__function_3_01Ret_07Args_8_8_8_08_01noexcept_07Noexcept_08_4.html',1,'seastar']]], + ['noncopyable_5ffunction_3c_20returntype_28args_2e_2e_2e_29_3e_18',['noncopyable_function< ReturnType(Args...)>',['../namespaceseastar.html#namespaceseastar',1,'seastar']]], + ['noncopyable_5ffunction_3c_20seastar_3a_3afuture_3c_3e_28_29_3e_19',['noncopyable_function< seastar::future<>()>',['../namespaceseastar.html#namespaceseastar',1,'seastar']]], + ['noncopyable_5ffunction_3c_20seastar_3a_3afuture_3c_3e_28seastar_3a_3aoutput_5fstream_3c_20char_20_3e_20_26_26_29_3e_20',['noncopyable_function< seastar::future<>(seastar::output_stream< char > &&)>',['../namespaceseastar.html#namespaceseastar',1,'seastar']]], + ['noncopyable_5ffunction_3c_20void_28_29_3e_21',['noncopyable_function< void()>',['../namespaceseastar.html#namespaceseastar',1,'seastar']]], + ['noncopyable_5ffunction_3c_20void_28const_20std_3a_3aoptional_3c_20std_3a_3aexception_5fptr_20_3e_20_26_29_20noexcept_20_3e_22',['noncopyable_function< void(const std::optional< std::exception_ptr > &) noexcept >',['../namespaceseastar.html#namespaceseastar',1,'seastar']]], + ['nop_23',['nop',['../structseastar_1_1net_1_1tcp__option_1_1nop.html',1,'seastar::net::tcp_option']]], + ['not_5ffound_5fexception_24',['not_found_exception',['../classseastar_1_1httpd_1_1not__found__exception.html',1,'seastar::httpd']]] +]; diff --git a/master/search/classes_e.html b/master/search/classes_e.html new file mode 100644 index 000000000..fb3ecdeab --- /dev/null +++ b/master/search/classes_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_e.js b/master/search/classes_e.js new file mode 100644 index 000000000..a527c3c73 --- /dev/null +++ b/master/search/classes_e.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['offload_5finfo_0',['offload_info',['../namespaceseastar_1_1net.html#structseastar_1_1net_1_1offload__info',1,'seastar::net']]], + ['opt_5ftime_5fpoint_1',['opt_time_point',['../classseastar_1_1rpc_1_1opt__time__point.html',1,'seastar::rpc']]], + ['optimized_5foptional_2',['optimized_optional',['../classseastar_1_1optimized__optional.html',1,'seastar']]], + ['option_5fgroup_3',['option_group',['../classseastar_1_1program__options_1_1option__group.html',1,'seastar::program_options']]], + ['optional_4',['optional',['../classseastar_1_1rpc_1_1optional.html',1,'seastar::rpc']]], + ['options_5',['options',['../structseastar_1_1log__cli_1_1options.html',1,'seastar::log_cli::options'],['../structseastar_1_1metrics_1_1options.html',1,'seastar::metrics::options'],['../classseastar_1_1net_1_1dns__resolver.html#structseastar_1_1net_1_1dns__resolver_1_1options',1,'seastar::net::dns_resolver::options'],['../structseastar_1_1scollectd_1_1options.html',1,'seastar::scollectd::options']]], + ['options_5fdescriptor_6',['options_descriptor',['../classseastar_1_1program__options_1_1options__descriptor.html',1,'seastar::program_options']]], + ['options_5fmutator_7',['options_mutator',['../classseastar_1_1program__options_1_1options__mutator.html',1,'seastar::program_options']]], + ['outgoing_5fentry_8',['outgoing_entry',['../structseastar_1_1rpc_1_1connection_1_1outgoing__entry.html',1,'seastar::rpc::connection']]], + ['output_5fstream_9',['output_stream',['../classseastar_1_1output__stream.html',1,'seastar']]], + ['output_5fstream_3c_20char_20_3e_10',['output_stream< char >',['../classseastar_1_1output__stream.html',1,'seastar']]], + ['output_5fstream_5foptions_11',['output_stream_options',['../namespaceseastar.html#structseastar_1_1output__stream__options',1,'seastar']]] +]; diff --git a/master/search/classes_f.html b/master/search/classes_f.html new file mode 100644 index 000000000..5a6fbe897 --- /dev/null +++ b/master/search/classes_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/classes_f.js b/master/search/classes_f.js new file mode 100644 index 000000000..4f3d7cd95 --- /dev/null +++ b/master/search/classes_f.js @@ -0,0 +1,43 @@ +var searchData= +[ + ['packet_0',['packet',['../classseastar_1_1net_1_1packet.html',1,'seastar::net']]], + ['packet_5fdata_5fsource_1',['packet_data_source',['../classseastar_1_1net_1_1packet__data__source.html',1,'seastar::net']]], + ['packet_5fmerger_2',['packet_merger',['../classseastar_1_1net_1_1packet__merger.html',1,'seastar::net']]], + ['packet_5fmerger_3c_20tcp_5fseq_2c_20tcp_5ftag_20_3e_3',['packet_merger< tcp_seq, tcp_tag >',['../classseastar_1_1net_1_1packet__merger.html',1,'seastar::net']]], + ['packet_5fmerger_3c_20uint32_5ft_2c_20ipv4_5ftag_20_3e_4',['packet_merger< uint32_t, ipv4_tag >',['../classseastar_1_1net_1_1packet__merger.html',1,'seastar::net']]], + ['parallel_5ffor_5feach_5',['parallel_for_each',['../classseastar_1_1coroutine_1_1parallel__for__each.html',1,'seastar::coroutine']]], + ['param_5fmatcher_6',['param_matcher',['../classseastar_1_1httpd_1_1param__matcher.html',1,'seastar::httpd']]], + ['parameters_7',['parameters',['../classseastar_1_1httpd_1_1parameters.html',1,'seastar::httpd']]], + ['path_5fdescription_8',['path_description',['../structseastar_1_1httpd_1_1path__description.html',1,'seastar::httpd']]], + ['path_5fpart_9',['path_part',['../structseastar_1_1httpd_1_1path__description.html#structseastar_1_1httpd_1_1path__description_1_1path__part',1,'seastar::httpd::path_description']]], + ['peering_5fsharded_5fservice_10',['peering_sharded_service',['../classseastar_1_1peering__sharded__service.html',1,'seastar']]], + ['per_5fscheduling_5fgroup_5fstats_11',['per_scheduling_group_stats',['../classseastar_1_1inheriting__execution__stage.html#structseastar_1_1inheriting__execution__stage_1_1per__scheduling__group__stats',1,'seastar::inheriting_execution_stage']]], + ['percpu_5fplugin_5finstance_5fmetrics_12',['percpu_plugin_instance_metrics',['../classseastar_1_1scollectd_1_1percpu__plugin__instance__metrics.html',1,'seastar::scollectd']]], + ['perf_5fstats_13',['perf_stats',['../classperf__tests_1_1internal_1_1perf__stats.html',1,'perf_tests::internal']]], + ['performance_5ftest_14',['performance_test',['../classperf__tests_1_1internal_1_1performance__test.html',1,'perf_tests::internal']]], + ['pipe_15',['pipe',['../classseastar_1_1pipe.html',1,'seastar']]], + ['pipe_5freader_16',['pipe_reader',['../classseastar_1_1pipe__reader.html',1,'seastar']]], + ['pipe_5fwriter_17',['pipe_writer',['../classseastar_1_1pipe__writer.html',1,'seastar']]], + ['plugin_5finstance_5fmetrics_18',['plugin_instance_metrics',['../classseastar_1_1scollectd_1_1plugin__instance__metrics.html',1,'seastar::scollectd']]], + ['pollable_5ffd_19',['pollable_fd',['../classseastar_1_1pollable__fd.html',1,'seastar']]], + ['pollable_5ffd_5fstate_20',['pollable_fd_state',['../classseastar_1_1pollable__fd__state.html',1,'seastar']]], + ['pollfn_21',['pollfn',['../structseastar_1_1pollfn.html',1,'seastar']]], + ['posix_5fap_5fnetwork_5fstack_22',['posix_ap_network_stack',['../classseastar_1_1net_1_1posix__ap__network__stack.html',1,'seastar::net']]], + ['posix_5fap_5fserver_5fsocket_5fimpl_23',['posix_ap_server_socket_impl',['../classseastar_1_1net_1_1posix__ap__server__socket__impl.html',1,'seastar::net']]], + ['posix_5fdata_5fsink_5fimpl_24',['posix_data_sink_impl',['../classseastar_1_1net_1_1posix__data__sink__impl.html',1,'seastar::net']]], + ['posix_5fdata_5fsource_5fimpl_25',['posix_data_source_impl',['../classseastar_1_1net_1_1posix__data__source__impl.html',1,'seastar::net']]], + ['posix_5fnetwork_5fstack_26',['posix_network_stack',['../classseastar_1_1net_1_1posix__network__stack.html',1,'seastar::net']]], + ['posix_5freuseport_5fserver_5fsocket_5fimpl_27',['posix_reuseport_server_socket_impl',['../classseastar_1_1net_1_1posix__reuseport__server__socket__impl.html',1,'seastar::net']]], + ['posix_5fserver_5fsocket_5fimpl_28',['posix_server_socket_impl',['../classseastar_1_1net_1_1posix__server__socket__impl.html',1,'seastar::net']]], + ['posix_5fthread_29',['posix_thread',['../classseastar_1_1posix__thread.html',1,'seastar']]], + ['prefetcher_30',['prefetcher',['../structseastar_1_1prefetcher.html',1,'seastar']]], + ['prefetcher_3c_200_2c_20rw_2c_20loc_20_3e_31',['prefetcher< 0, RW, LOC >',['../structseastar_1_1prefetcher_3_010_00_01RW_00_01LOC_01_4.html',1,'seastar']]], + ['process_32',['process',['../classseastar_1_1experimental_1_1process.html',1,'seastar::experimental']]], + ['promise_33',['promise',['../classseastar_1_1promise.html',1,'seastar']]], + ['promise_3c_20seastar_3a_3anet_3a_3aethernet_5faddress_20_3e_34',['promise< seastar::net::ethernet_address >',['../classseastar_1_1promise.html',1,'seastar']]], + ['promise_3c_20t_2e_2e_2e_20_3e_35',['promise< T... >',['../classseastar_1_1promise.html',1,'seastar']]], + ['promise_3c_3e_36',['promise<>',['../classseastar_1_1promise.html',1,'seastar']]], + ['promise_5fexpiry_37',['promise_expiry',['../structseastar_1_1promise__expiry.html',1,'seastar']]], + ['protocol_38',['protocol',['../classseastar_1_1rpc_1_1protocol.html',1,'seastar::rpc']]], + ['protocol_5fbase_39',['protocol_base',['../classseastar_1_1rpc_1_1protocol__base.html',1,'seastar::rpc']]] +]; diff --git a/master/search/close.svg b/master/search/close.svg new file mode 100644 index 000000000..a933eea1a --- /dev/null +++ b/master/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/master/search/enums_0.html b/master/search/enums_0.html new file mode 100644 index 000000000..ec25efde4 --- /dev/null +++ b/master/search/enums_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enums_0.js b/master/search/enums_0.js new file mode 100644 index 000000000..faa345581 --- /dev/null +++ b/master/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['alloc_5ffailure_5fkind_0',['alloc_failure_kind',['../namespaceseastar_1_1memory.html#a2411b00801406f50acb3a8bc78f32400',1,'seastar::memory']]] +]; diff --git a/master/search/enums_1.html b/master/search/enums_1.html new file mode 100644 index 000000000..cc99a33be --- /dev/null +++ b/master/search/enums_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enums_1.js b/master/search/enums_1.js new file mode 100644 index 000000000..b80454451 --- /dev/null +++ b/master/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['directory_5fentry_5ftype_0',['directory_entry_type',['../group__fileio-module.html#ga27cf091d97c38f5b9696cd61ec815e72',1,'seastar']]] +]; diff --git a/master/search/enums_2.html b/master/search/enums_2.html new file mode 100644 index 000000000..cd5e77128 --- /dev/null +++ b/master/search/enums_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enums_2.js b/master/search/enums_2.js new file mode 100644 index 000000000..424191ae5 --- /dev/null +++ b/master/search/enums_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['flags_0',['flags',['../classseastar_1_1experimental_1_1fsnotifier.html#a7803e30e6a6871710ded6a5d8b201d2e',1,'seastar::experimental::fsnotifier']]], + ['fs_5ftype_1',['fs_type',['../group__fileio-module.html#ga4314f8690e5b436d3d2be53f0336dec3',1,'seastar']]] +]; diff --git a/master/search/enums_3.html b/master/search/enums_3.html new file mode 100644 index 000000000..007101d33 --- /dev/null +++ b/master/search/enums_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enums_3.js b/master/search/enums_3.js new file mode 100644 index 000000000..9dcb3748e --- /dev/null +++ b/master/search/enums_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['idle_5fcpu_5fhandler_5fresult_0',['idle_cpu_handler_result',['../namespaceseastar.html#aabff6d897c4e569b6f2bd55a155406f3',1,'seastar']]] +]; diff --git a/master/search/enums_4.html b/master/search/enums_4.html new file mode 100644 index 000000000..b03e8b8bc --- /dev/null +++ b/master/search/enums_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enums_4.js b/master/search/enums_4.js new file mode 100644 index 000000000..616841931 --- /dev/null +++ b/master/search/enums_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['log_5flevel_0',['log_level',['../group__logging.html#gabd9863960b1a4009d2e1542349be4f0f',1,'seastar']]] +]; diff --git a/master/search/enums_5.html b/master/search/enums_5.html new file mode 100644 index 000000000..98071527e --- /dev/null +++ b/master/search/enums_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enums_5.js b/master/search/enums_5.js new file mode 100644 index 000000000..13274ede8 --- /dev/null +++ b/master/search/enums_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['memory_5fallocator_0',['memory_allocator',['../namespaceseastar.html#a201fc834be922b0ebfe82792ac13c340',1,'seastar']]] +]; diff --git a/master/search/enums_6.html b/master/search/enums_6.html new file mode 100644 index 000000000..712577c29 --- /dev/null +++ b/master/search/enums_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enums_6.js b/master/search/enums_6.js new file mode 100644 index 000000000..6bfc8ea14 --- /dev/null +++ b/master/search/enums_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['opcodes_0',['opcodes',['../group__websocket.html#ga65c866f434e25824e46ba607724c00fe',1,'seastar::experimental::websocket']]], + ['open_5fflags_1',['open_flags',['../group__fileio-module.html#gaea600c024cd71494c9560efb34ab45be',1,'seastar']]] +]; diff --git a/master/search/enums_7.html b/master/search/enums_7.html new file mode 100644 index 000000000..3c4792c6e --- /dev/null +++ b/master/search/enums_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enums_7.js b/master/search/enums_7.js new file mode 100644 index 000000000..d994fd992 --- /dev/null +++ b/master/search/enums_7.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['session_5fresume_5fmode_0',['session_resume_mode',['../namespaceseastar_1_1tls.html#a59d793d775ea396406fe246db6f69d1e',1,'seastar::tls']]], + ['session_5ftype_1',['session_type',['../namespaceseastar_1_1tls.html#a4b5b1f69166a6b7de5fe48ae6532e20b',1,'seastar::tls']]], + ['status_5ftype_2',['status_type',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529ab',1,'seastar::http::reply']]], + ['subject_5falt_5fname_5ftype_3',['subject_alt_name_type',['../namespaceseastar_1_1tls.html#a6f98ca92c48ab663e8ad481017bb232c',1,'seastar::tls']]] +]; diff --git a/master/search/enumvalues_0.html b/master/search/enumvalues_0.html new file mode 100644 index 000000000..71e9b7c95 --- /dev/null +++ b/master/search/enumvalues_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_0.js b/master/search/enumvalues_0.js new file mode 100644 index 000000000..e8a8f3cdd --- /dev/null +++ b/master/search/enumvalues_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['accepted_0',['accepted',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba3e4d891a5df3d6d0d7dd9432a1bc6470',1,'seastar::http::reply']]], + ['all_1',['all',['../namespaceseastar_1_1memory.html#a2411b00801406f50acb3a8bc78f32400aa181a603769c1f98ad927e7367c7aa51',1,'seastar::memory']]] +]; diff --git a/master/search/enumvalues_1.html b/master/search/enumvalues_1.html new file mode 100644 index 000000000..595aa8cb1 --- /dev/null +++ b/master/search/enumvalues_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_1.js b/master/search/enumvalues_1.js new file mode 100644 index 000000000..287b20c84 --- /dev/null +++ b/master/search/enumvalues_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['bad_5fgateway_0',['bad_gateway',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba34b1f5a8577eed2180e10076d1aad14c',1,'seastar::http::reply']]], + ['bad_5frequest_1',['bad_request',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba373d9e6e1aaf30e691dadb57eb22d7b1',1,'seastar::http::reply']]] +]; diff --git a/master/search/enumvalues_10.html b/master/search/enumvalues_10.html new file mode 100644 index 000000000..4a8b0b57a --- /dev/null +++ b/master/search/enumvalues_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_10.js b/master/search/enumvalues_10.js new file mode 100644 index 000000000..cbbc9e19a --- /dev/null +++ b/master/search/enumvalues_10.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['unauthorized_0',['unauthorized',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba36fd540552b3b1b34e8f0bd8897cbf1e',1,'seastar::http::reply']]], + ['unprocessable_5fentity_1',['unprocessable_entity',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba112020964a0fdd27ac1d72290ae7435d',1,'seastar::http::reply']]], + ['unsupported_5fmedia_5ftype_2',['unsupported_media_type',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba9e6b71a081dee9f212c7d7cdffb8be13',1,'seastar::http::reply']]], + ['upgrade_5frequired_3',['upgrade_required',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba3505cc0bb37b1764487d12fd4873807e',1,'seastar::http::reply']]], + ['uri_5ftoo_5flong_4',['uri_too_long',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba8729becd956c3e9352dd9dbc4f69fb21',1,'seastar::http::reply']]], + ['use_5fproxy_5',['use_proxy',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba910b02467b0674ae0042a7fff67c9052',1,'seastar::http::reply']]] +]; diff --git a/master/search/enumvalues_2.html b/master/search/enumvalues_2.html new file mode 100644 index 000000000..53435046a --- /dev/null +++ b/master/search/enumvalues_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_2.js b/master/search/enumvalues_2.js new file mode 100644 index 000000000..a8b1c1f06 --- /dev/null +++ b/master/search/enumvalues_2.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['conflict_0',['conflict',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba981f1875779561e79585a2ae43a196fb',1,'seastar::http::reply']]], + ['continue_5f_1',['continue_',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba5b4404524e842940120cc65b3214d40b',1,'seastar::http::reply']]], + ['created_2',['created',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abae2fa538867c3830a859a5b17ab24644b',1,'seastar::http::reply']]], + ['critical_3',['critical',['../namespaceseastar_1_1memory.html#a2411b00801406f50acb3a8bc78f32400a7e85bcb66fb9a809d5ab4f62a8b8bea8',1,'seastar::memory']]] +]; diff --git a/master/search/enumvalues_3.html b/master/search/enumvalues_3.html new file mode 100644 index 000000000..5a7d0de69 --- /dev/null +++ b/master/search/enumvalues_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_3.js b/master/search/enumvalues_3.js new file mode 100644 index 000000000..a9388b972 --- /dev/null +++ b/master/search/enumvalues_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['expectation_5ffailed_0',['expectation_failed',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba9367b0c5f17fb21bb2758cfd6607d98e',1,'seastar::http::reply']]] +]; diff --git a/master/search/enumvalues_4.html b/master/search/enumvalues_4.html new file mode 100644 index 000000000..4b4a76351 --- /dev/null +++ b/master/search/enumvalues_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_4.js b/master/search/enumvalues_4.js new file mode 100644 index 000000000..32988d57e --- /dev/null +++ b/master/search/enumvalues_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['forbidden_0',['forbidden',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba350f9d68221a0db19024ee40cfc3c7f8',1,'seastar::http::reply']]] +]; diff --git a/master/search/enumvalues_5.html b/master/search/enumvalues_5.html new file mode 100644 index 000000000..5cc61bf5f --- /dev/null +++ b/master/search/enumvalues_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_5.js b/master/search/enumvalues_5.js new file mode 100644 index 000000000..f8d18779a --- /dev/null +++ b/master/search/enumvalues_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['gateway_5ftimeout_0',['gateway_timeout',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abaa96a18d998411ddbef3e3734de136504',1,'seastar::http::reply']]], + ['gone_1',['gone',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba50c1f58be7f5e47e0f53d64c094783c2',1,'seastar::http::reply']]] +]; diff --git a/master/search/enumvalues_6.html b/master/search/enumvalues_6.html new file mode 100644 index 000000000..34a4cadab --- /dev/null +++ b/master/search/enumvalues_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_6.js b/master/search/enumvalues_6.js new file mode 100644 index 000000000..bf60d0b9a --- /dev/null +++ b/master/search/enumvalues_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['http_5fversion_5fnot_5fsupported_0',['http_version_not_supported',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abafd476d25163868fcc2d5a6800b844ee2',1,'seastar::http::reply']]] +]; diff --git a/master/search/enumvalues_7.html b/master/search/enumvalues_7.html new file mode 100644 index 000000000..3a94d0655 --- /dev/null +++ b/master/search/enumvalues_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_7.js b/master/search/enumvalues_7.js new file mode 100644 index 000000000..8d51db93d --- /dev/null +++ b/master/search/enumvalues_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['insufficient_5fstorage_0',['insufficient_storage',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba869ba42fda9fabbbc350b57fcf22e81f',1,'seastar::http::reply']]], + ['internal_5fserver_5ferror_1',['internal_server_error',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abace0ad649797c3b15fbed0b35850fa92a',1,'seastar::http::reply']]], + ['interrupted_5fby_5fhigher_5fpriority_5ftask_2',['interrupted_by_higher_priority_task',['../namespaceseastar.html#aabff6d897c4e569b6f2bd55a155406f3a3be6f16ddb1ad3f891462dd73c06c93c',1,'seastar']]] +]; diff --git a/master/search/enumvalues_8.html b/master/search/enumvalues_8.html new file mode 100644 index 000000000..9ca4205d7 --- /dev/null +++ b/master/search/enumvalues_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_8.js b/master/search/enumvalues_8.js new file mode 100644 index 000000000..13f309796 --- /dev/null +++ b/master/search/enumvalues_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['length_5frequired_0',['length_required',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abac4aa8246cb30b35b6f4e8a199c972d27',1,'seastar::http::reply']]] +]; diff --git a/master/search/enumvalues_9.html b/master/search/enumvalues_9.html new file mode 100644 index 000000000..37f6d021b --- /dev/null +++ b/master/search/enumvalues_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_9.js b/master/search/enumvalues_9.js new file mode 100644 index 000000000..f655312d4 --- /dev/null +++ b/master/search/enumvalues_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['method_5fnot_5fallowed_0',['method_not_allowed',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abadd115df9e077388e1b70b344325094f3',1,'seastar::http::reply']]], + ['moved_5fpermanently_1',['moved_permanently',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba522c7a01a5f0022064cc90149c179fa7',1,'seastar::http::reply']]], + ['moved_5ftemporarily_2',['moved_temporarily',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba14e3761228bfc71752251125a5f11087',1,'seastar::http::reply']]], + ['multiple_5fchoices_3',['multiple_choices',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba9aeba7eb915334acd922761566c2ac86',1,'seastar::http::reply']]] +]; diff --git a/master/search/enumvalues_a.html b/master/search/enumvalues_a.html new file mode 100644 index 000000000..1e1ccd212 --- /dev/null +++ b/master/search/enumvalues_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_a.js b/master/search/enumvalues_a.js new file mode 100644 index 000000000..df184f009 --- /dev/null +++ b/master/search/enumvalues_a.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['no_5fcontent_0',['no_content',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba7d1e27253ac06e307e599edb2b0558bd',1,'seastar::http::reply']]], + ['no_5fmore_5fwork_1',['no_more_work',['../namespaceseastar.html#aabff6d897c4e569b6f2bd55a155406f3abe65965bb9ac02d6c07a786c6beb821c',1,'seastar']]], + ['nonauthoritative_5finformation_2',['nonauthoritative_information',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba3bb3bdf633b73c3d6407199df0074900',1,'seastar::http::reply']]], + ['none_3',['none',['../namespaceseastar_1_1memory.html#a2411b00801406f50acb3a8bc78f32400a334c4a4c42fdb79d7ebc3e73b517e6f8',1,'seastar::memory']]], + ['not_5facceptable_4',['not_acceptable',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba5537536f902d3acf25821aded362cdc9',1,'seastar::http::reply']]], + ['not_5ffound_5',['not_found',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba7500611bf7030bc99d25c354e7b64714',1,'seastar::http::reply']]], + ['not_5fimplemented_6',['not_implemented',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba63877363c706f5095d05a54f8b57b0ae',1,'seastar::http::reply']]], + ['not_5fmodified_7',['not_modified',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba72d9cf8a74038672b394991359756c35',1,'seastar::http::reply']]] +]; diff --git a/master/search/enumvalues_b.html b/master/search/enumvalues_b.html new file mode 100644 index 000000000..5bc4a1ea5 --- /dev/null +++ b/master/search/enumvalues_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_b.js b/master/search/enumvalues_b.js new file mode 100644 index 000000000..67b9b0cdd --- /dev/null +++ b/master/search/enumvalues_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ok_0',['ok',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba444bcb3a3fcf8389296c49467f27e1d6',1,'seastar::http::reply']]] +]; diff --git a/master/search/enumvalues_c.html b/master/search/enumvalues_c.html new file mode 100644 index 000000000..194b773f4 --- /dev/null +++ b/master/search/enumvalues_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_c.js b/master/search/enumvalues_c.js new file mode 100644 index 000000000..64df0aef8 --- /dev/null +++ b/master/search/enumvalues_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['payload_5ftoo_5flarge_0',['payload_too_large',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba7488f008e41cae5d833edb135b1c9cbc',1,'seastar::http::reply']]], + ['payment_5frequired_1',['payment_required',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abae12f3c601bfd82e63264efe70f8b0c1f',1,'seastar::http::reply']]] +]; diff --git a/master/search/enumvalues_d.html b/master/search/enumvalues_d.html new file mode 100644 index 000000000..c9c4874a1 --- /dev/null +++ b/master/search/enumvalues_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_d.js b/master/search/enumvalues_d.js new file mode 100644 index 000000000..7bcf361bd --- /dev/null +++ b/master/search/enumvalues_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['request_5ftimeout_0',['request_timeout',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abad3e570068c1caf02414be8c33ed0870f',1,'seastar::http::reply']]], + ['reset_5fcontent_1',['reset_content',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba0584f56c55619f196a5db485f2681890',1,'seastar::http::reply']]] +]; diff --git a/master/search/enumvalues_e.html b/master/search/enumvalues_e.html new file mode 100644 index 000000000..3a8412fc0 --- /dev/null +++ b/master/search/enumvalues_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_e.js b/master/search/enumvalues_e.js new file mode 100644 index 000000000..f7de53dce --- /dev/null +++ b/master/search/enumvalues_e.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['seastar_0',['seastar',['../namespaceseastar.html#a201fc834be922b0ebfe82792ac13c340a02a3f482219c97efb281d279650727d0',1,'seastar']]], + ['see_5fother_1',['see_other',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba5b45014f69eed6fb5420e03fdcde5c4d',1,'seastar::http::reply']]], + ['service_5funavailable_2',['service_unavailable',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba512d23352b911a1e9be84b5119e39095',1,'seastar::http::reply']]], + ['standard_3',['standard',['../namespaceseastar.html#a201fc834be922b0ebfe82792ac13c340ac00f0c4675b91fb8b918e4079a0b1bac',1,'seastar']]], + ['switching_5fprotocols_4',['switching_protocols',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529abab6f5da5e7e683947b6f2669c799a5d3b',1,'seastar::http::reply']]] +]; diff --git a/master/search/enumvalues_f.html b/master/search/enumvalues_f.html new file mode 100644 index 000000000..1a002564c --- /dev/null +++ b/master/search/enumvalues_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/enumvalues_f.js b/master/search/enumvalues_f.js new file mode 100644 index 000000000..d72c90280 --- /dev/null +++ b/master/search/enumvalues_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['temporary_5fredirect_0',['temporary_redirect',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba02ca453ae53baad186be51f3442cc27f',1,'seastar::http::reply']]], + ['too_5fmany_5frequests_1',['too_many_requests',['../structseastar_1_1http_1_1reply.html#a936edc91a0e30d78a43fc0203e0529aba9e293097c9191e05b40df09813aac988',1,'seastar::http::reply']]] +]; diff --git a/master/search/files_0.html b/master/search/files_0.html new file mode 100644 index 000000000..2dbb4c2f6 --- /dev/null +++ b/master/search/files_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/files_0.js b/master/search/files_0.js new file mode 100644 index 000000000..2f6c4f99b --- /dev/null +++ b/master/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['alien_2ehh_0',['alien.hh',['../alien_8hh.html',1,'']]] +]; diff --git a/master/search/files_1.html b/master/search/files_1.html new file mode 100644 index 000000000..18ccd15a9 --- /dev/null +++ b/master/search/files_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/files_1.js b/master/search/files_1.js new file mode 100644 index 000000000..25bf91a15 --- /dev/null +++ b/master/search/files_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['checked_5fptr_2ehh_0',['checked_ptr.hh',['../checked__ptr_8hh.html',1,'']]], + ['circular_5fbuffer_5ffixed_5fcapacity_2ehh_1',['circular_buffer_fixed_capacity.hh',['../circular__buffer__fixed__capacity_8hh.html',1,'']]], + ['closeable_2ehh_2',['closeable.hh',['../closeable_8hh.html',1,'']]] +]; diff --git a/master/search/files_2.html b/master/search/files_2.html new file mode 100644 index 000000000..a4c2be4d1 --- /dev/null +++ b/master/search/files_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/files_2.js b/master/search/files_2.js new file mode 100644 index 000000000..6ff94b825 --- /dev/null +++ b/master/search/files_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['fstream_2ehh_0',['fstream.hh',['../fstream_8hh.html',1,'']]] +]; diff --git a/master/search/files_3.html b/master/search/files_3.html new file mode 100644 index 000000000..3ac4cfba1 --- /dev/null +++ b/master/search/files_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/files_3.js b/master/search/files_3.js new file mode 100644 index 000000000..87d676849 --- /dev/null +++ b/master/search/files_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['idle_5fcpu_5fhandler_2ehh_0',['idle_cpu_handler.hh',['../idle__cpu__handler_8hh.html',1,'']]] +]; diff --git a/master/search/files_4.html b/master/search/files_4.html new file mode 100644 index 000000000..eb19ecf79 --- /dev/null +++ b/master/search/files_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/files_4.js b/master/search/files_4.js new file mode 100644 index 000000000..c07078f31 --- /dev/null +++ b/master/search/files_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['metrics_2ehh_0',['metrics.hh',['../metrics_8hh.html',1,'']]], + ['metrics_5fapi_2ehh_1',['metrics_api.hh',['../metrics__api_8hh.html',1,'']]], + ['metrics_5fregistration_2ehh_2',['metrics_registration.hh',['../metrics__registration_8hh.html',1,'']]] +]; diff --git a/master/search/files_5.html b/master/search/files_5.html new file mode 100644 index 000000000..61d86d0ef --- /dev/null +++ b/master/search/files_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/files_5.js b/master/search/files_5.js new file mode 100644 index 000000000..dc7cdfd1b --- /dev/null +++ b/master/search/files_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['posix_2ehh_0',['posix.hh',['../posix_8hh.html',1,'']]] +]; diff --git a/master/search/files_6.html b/master/search/files_6.html new file mode 100644 index 000000000..333517d86 --- /dev/null +++ b/master/search/files_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/files_6.js b/master/search/files_6.js new file mode 100644 index 000000000..95d4f904b --- /dev/null +++ b/master/search/files_6.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['scheduling_2ehh_0',['scheduling.hh',['../scheduling_8hh.html',1,'']]], + ['shard_5fid_2ehh_1',['shard_id.hh',['../shard__id_8hh.html',1,'']]], + ['shared_5fptr_5fincomplete_2ehh_2',['shared_ptr_incomplete.hh',['../shared__ptr__incomplete_8hh.html',1,'']]], + ['sleep_2ehh_3',['sleep.hh',['../sleep_8hh.html',1,'']]], + ['smp_2ehh_4',['smp.hh',['../smp_8hh.html',1,'']]], + ['smp_5foptions_2ehh_5',['smp_options.hh',['../smp__options_8hh.html',1,'']]] +]; diff --git a/master/search/files_7.html b/master/search/files_7.html new file mode 100644 index 000000000..ad481b0c1 --- /dev/null +++ b/master/search/files_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/files_7.js b/master/search/files_7.js new file mode 100644 index 000000000..2e6daa720 --- /dev/null +++ b/master/search/files_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['timer_2ehh_0',['timer.hh',['../timer_8hh.html',1,'']]] +]; diff --git a/master/search/functions_0.html b/master/search/functions_0.html new file mode 100644 index 000000000..3b739c7f4 --- /dev/null +++ b/master/search/functions_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_0.js b/master/search/functions_0.js new file mode 100644 index 000000000..43e3483f2 --- /dev/null +++ b/master/search/functions_0.js @@ -0,0 +1,39 @@ +var searchData= +[ + ['abort_0',['abort',['../classseastar_1_1queue.html#a9bc8ce9c5ed836f568f617c3da01b2c3',1,'seastar::queue']]], + ['abort_5faccept_1',['abort_accept',['../classseastar_1_1server__socket.html#ac643a2319808f4f1428cc068b9e9516e',1,'seastar::server_socket']]], + ['abort_5fconnection_2',['abort_connection',['../classseastar_1_1rpc_1_1server.html#a3ce369e0440cf9faeff7821eae640d3f',1,'seastar::rpc::server']]], + ['abort_5fon_5fexpiry_3',['abort_on_expiry',['../classseastar_1_1abort__on__expiry.html#a2b6b7cdc3abc89c338916f408e162ebe',1,'seastar::abort_on_expiry']]], + ['abort_5frequested_4',['abort_requested',['../classseastar_1_1abort__source.html#ae78fe95f6247f60eaabd73e8b210e5e1',1,'seastar::abort_source']]], + ['abort_5frequested_5fexception_5fptr_5',['abort_requested_exception_ptr',['../classseastar_1_1abort__source.html#a4601b494bad5a7dab1c8a82c6f17a1d0',1,'seastar::abort_source']]], + ['abort_5fsource_6',['abort_source',['../classseastar_1_1abort__on__expiry.html#a1c619e3a760977b9a72b5334bc4b3e23',1,'seastar::abort_on_expiry']]], + ['accept_7',['accept',['../classseastar_1_1server__socket.html#a2e4e4b180cfee2de69fdd6edb0c7f5c2',1,'seastar::server_socket']]], + ['active_8',['active',['../classseastar_1_1experimental_1_1fsnotifier.html#a115ba326b546e491ce4ef82479ebb1d1',1,'seastar::experimental::fsnotifier']]], + ['add_9',['add',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#af73e9dbd99074e1fe913eed4bfb31d68',1,'seastar::metrics::internal::approximate_exponential_histogram::add()'],['../classseastar_1_1httpd_1_1routes.html#ae1badaa8e4c9b15bf944fd97d60fdf1a',1,'seastar::httpd::routes::add(match_rule *rule, operation_type type=GET)'],['../classseastar_1_1httpd_1_1routes.html#a11cf9427e24bedbe2962c963b2670480',1,'seastar::httpd::routes::add(operation_type type, const url &url, handler_base *handler)'],['../structseastar_1_1json_1_1json__base.html#ae000a9d0465335b6ac63bd61305ae309',1,'seastar::json::json_base::add()']]], + ['add_5falias_10',['add_alias',['../classseastar_1_1httpd_1_1routes.html#a453f69c0e82a76c0ffb6b165e466fb79',1,'seastar::httpd::routes']]], + ['add_5fcookie_11',['add_cookie',['../classseastar_1_1httpd_1_1routes.html#a7d5a56c2fc0ba047036d2fa92ddf403a',1,'seastar::httpd::routes']]], + ['add_5fdefault_5fhandler_12',['add_default_handler',['../classseastar_1_1httpd_1_1routes.html#adf6c161323620807e9513f2d2fcf0912',1,'seastar::httpd::routes']]], + ['add_5fdefinition_13',['add_definition',['../classseastar_1_1httpd_1_1api__registry__builder20.html#aca6a024c56ab974ba139e8dacce48f93',1,'seastar::httpd::api_registry_builder20']]], + ['add_5fdefinitions_5ffile_14',['add_definitions_file',['../classseastar_1_1httpd_1_1api__registry__builder20.html#a5453020e6979bc5f2512956a1d1e7b7f',1,'seastar::httpd::api_registry_builder20']]], + ['add_5fdisabled_5fpolled_5fmetric_15',['add_disabled_polled_metric',['../namespaceseastar_1_1scollectd.html#af3fa470192ecc65dd38097a3aa225c7b',1,'seastar::scollectd']]], + ['add_5fgroup_16',['add_group',['../classseastar_1_1metrics_1_1metric__groups.html#abc5aa0b6eb665392958bcdc12eeea75a',1,'seastar::metrics::metric_groups::add_group(const group_name_type &name, const std::initializer_list< metric_definition > &l)'],['../classseastar_1_1metrics_1_1metric__groups.html#aa0d3ce80b1f397d386a2af5a636fe7e5',1,'seastar::metrics::metric_groups::add_group(const group_name_type &name, const std::vector< metric_definition > &l)']]], + ['add_5fmatcher_17',['add_matcher',['../classseastar_1_1httpd_1_1match__rule.html#a5f96765bc899a86f41d2c9ba03a1a9a5',1,'seastar::httpd::match_rule']]], + ['add_5fparam_18',['add_param',['../classseastar_1_1httpd_1_1match__rule.html#a5fbde4596b6c3bef2d99de75da027b45',1,'seastar::httpd::match_rule']]], + ['add_5fpolled_5fmetric_19',['add_polled_metric',['../namespaceseastar_1_1scollectd.html#adae7cdb77c9541178ab14457759a8eba',1,'seastar::scollectd::add_polled_metric(const type_instance_id &id, Arg &&arg)'],['../namespaceseastar_1_1scollectd.html#ab435895911a73a7d8a224c9b890dcd36',1,'seastar::scollectd::add_polled_metric(const type_instance_id &id, description d, Arg &&arg, bool enabled=true)'],['../namespaceseastar_1_1scollectd.html#a538a5869bf8b30e4c487a5ff9bfec849',1,'seastar::scollectd::add_polled_metric(const plugin_id &plugin, const plugin_instance_id &plugin_instance, const type_id &type, const scollectd::type_instance &type_instance, description d, _Args &&... args)'],['../namespaceseastar_1_1scollectd.html#a101d10d23f23b8c92732954fedcd6dc9',1,'seastar::scollectd::add_polled_metric(const plugin_id &plugin, const plugin_instance_id &plugin_instance, const type_id &type, const scollectd::type_instance &type_instance, _Args &&... args)']]], + ['add_5fstr_20',['add_str',['../classseastar_1_1httpd_1_1match__rule.html#adf6b2edfc905fbd9c8e533a5da57ce13',1,'seastar::httpd::match_rule']]], + ['adopt_21',['adopt',['../classseastar_1_1semaphore__units.html#a166c81271c3e829872b7b0d0c8d52fd4',1,'seastar::semaphore_units']]], + ['alien_22',['alien',['../classseastar_1_1reactor.html#af512728b93f1de2b21d8b652bf327933',1,'seastar::reactor']]], + ['aligned_23',['aligned',['../classseastar_1_1temporary__buffer.html#ae2c1afa0c0f1f8ed4d6708097b121a1e',1,'seastar::temporary_buffer']]], + ['alloc_5fcount_24',['alloc_count',['../classseastar_1_1memory_1_1alloc__failure__injector.html#a739aa4af029b1285d63f02e9a8b3971e',1,'seastar::memory::alloc_failure_injector']]], + ['allocate_25',['allocate',['../classseastar_1_1file.html#a35330cb91ea09c1c59360efc9318da74',1,'seastar::file']]], + ['allocated_5fmemory_26',['allocated_memory',['../classseastar_1_1memory_1_1statistics.html#ae72435a459692865578fb7952e4434c6',1,'seastar::memory::statistics']]], + ['append_27',['append',['../classseastar_1_1basic__sstring.html#ab1ac5fb610859da75abf3003075401ef',1,'seastar::basic_sstring::append()'],['../group__memory-module.html#ga2db8c8dce75cb94656a720420c825d5f',1,'seastar::deleter::append()']]], + ['apply_28',['apply',['../structseastar_1_1futurize.html#a5b4d1e19072f5243378e86e7f27b12cd',1,'seastar::futurize::apply(Func &&func, std::tuple< FuncArgs... > &&args) noexcept'],['../structseastar_1_1futurize.html#a1a1afa8bb14782d38bc7f9fbb2c11bfc',1,'seastar::futurize::apply(Func &&func, FuncArgs &&... args) noexcept']]], + ['arm_29',['arm',['../classseastar_1_1timer.html#a19ed4afdeb815fed0508728797f3e640',1,'seastar::timer::arm(time_point until, std::optional< duration > period={}) noexcept'],['../classseastar_1_1timer.html#a408ec69f0c66ec85916621c2fb252b28',1,'seastar::timer::arm(duration delta) noexcept']]], + ['arm_5fperiodic_30',['arm_periodic',['../classseastar_1_1timer.html#a9210bfb2e250eb6eb68e3bbff035fecc',1,'seastar::timer']]], + ['armed_31',['armed',['../classseastar_1_1timer.html#a299768fac6e57901c7fe7a94ca6a02d0',1,'seastar::timer']]], + ['as_5fready_5ffuture_32',['as_ready_future',['../group__future-module.html#ga300f9155bf89f2a5019d043ac0541139',1,'seastar']]], + ['async_33',['async',['../group__thread-module.html#ga662e0549aa51cba06cb33ec3e0104450',1,'seastar::async(Func &&func, Args &&... args) noexcept'],['../group__thread-module.html#ga32db5877f0b27b7afe8b86e81951e28d',1,'seastar::async(thread_attributes attr, Func &&func, Args &&... args) noexcept']]], + ['available_34',['available',['../classseastar_1_1shared__promise.html#af294c426866e2e5941b631cd3dcb4725',1,'seastar::shared_promise::available()'],['../classseastar_1_1shared__future.html#a50ae4afb33b38b2cf7ba97edc5908823',1,'seastar::shared_future::available()'],['../classseastar_1_1future.html#a624fbb42c55d649348e47afba3de5ac3',1,'seastar::future::available()']]], + ['available_5funits_35',['available_units',['../classseastar_1_1basic__semaphore.html#a9339868a571ea48671f8964130985a33',1,'seastar::basic_semaphore']]] +]; diff --git a/master/search/functions_1.html b/master/search/functions_1.html new file mode 100644 index 000000000..2cef5e315 --- /dev/null +++ b/master/search/functions_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_1.js b/master/search/functions_1.js new file mode 100644 index 000000000..8b2984697 --- /dev/null +++ b/master/search/functions_1.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['back_0',['back',['../classseastar_1_1basic__sstring.html#a006929a484ed2d4bfa3991f0068d02fd',1,'seastar::basic_sstring::back() noexcept'],['../classseastar_1_1basic__sstring.html#a1bd6d002ac7a5b3a2d3cd75e91c36b29',1,'seastar::basic_sstring::back() const noexcept']]], + ['basic_5fsemaphore_1',['basic_semaphore',['../classseastar_1_1basic__semaphore.html#a023e3a8263ea2cd93a26987265ddee2e',1,'seastar::basic_semaphore::basic_semaphore(size_t count) noexcept(std::is_nothrow_default_constructible_v< exception_factory >)'],['../classseastar_1_1basic__semaphore.html#ad47068098c0bd426c9eb51ce7dafd2b6',1,'seastar::basic_semaphore::basic_semaphore(basic_semaphore &&other) noexcept(std::is_nothrow_move_constructible_v< exception_factory >)']]], + ['begin_2',['begin',['../classseastar_1_1temporary__buffer.html#a5a34839ca39634995e030b79bcc49565',1,'seastar::temporary_buffer']]], + ['bool_5fclass_3',['bool_class',['../classseastar_1_1bool__class.html#a23672dd3362e77389584a4ccaa113a01',1,'seastar::bool_class::bool_class() noexcept'],['../classseastar_1_1bool__class.html#af7545103a20094d93e46b59fc8e66d36',1,'seastar::bool_class::bool_class(bool v) noexcept']]], + ['broadcast_4',['broadcast',['../classseastar_1_1condition__variable.html#a703ec890958f07db1af388617dec20e7',1,'seastar::condition_variable']]], + ['broken_5',['broken',['../classseastar_1_1condition__variable.html#ada910579c5a1042a1d74e13c09cd0a46',1,'seastar::condition_variable::broken()'],['../classseastar_1_1basic__semaphore.html#af627627cf8b0aa84441c4c6d0013cc53',1,'seastar::basic_semaphore::broken() noexcept'],['../classseastar_1_1basic__semaphore.html#ac246eb13e4304f74fe3bb13ada754a91',1,'seastar::basic_semaphore::broken(const Exception &ex) noexcept'],['../group__fiber-module.html#ga8926bf4790fb7886e18ee5987018d555',1,'seastar::basic_semaphore::broken(std::exception_ptr ex) noexcept']]] +]; diff --git a/master/search/functions_10.html b/master/search/functions_10.html new file mode 100644 index 000000000..237d285b4 --- /dev/null +++ b/master/search/functions_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_10.js b/master/search/functions_10.js new file mode 100644 index 000000000..0e3a6e04b --- /dev/null +++ b/master/search/functions_10.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['quantile_0',['quantile',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#aab7b7955bac2b219af02a5926bef5d88',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['queue_1',['queue',['../classseastar_1_1fair__queue.html#a24d1d893b04669d6f26e39f9c9912ca6',1,'seastar::fair_queue']]] +]; diff --git a/master/search/functions_11.html b/master/search/functions_11.html new file mode 100644 index 000000000..6a5176a5e --- /dev/null +++ b/master/search/functions_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_11.js b/master/search/functions_11.js new file mode 100644 index 000000000..94f781bf7 --- /dev/null +++ b/master/search/functions_11.js @@ -0,0 +1,49 @@ +var searchData= +[ + ['read_0',['read',['../classseastar_1_1pipe__reader.html#ae3e19a4e6c99820c91372e15d846632c',1,'seastar::pipe_reader::read()'],['../classseastar_1_1httpd_1_1file__interaction__handler.html#ade8d4f448b9d88e0b70d08b0455894c3',1,'seastar::httpd::file_interaction_handler::read()'],['../classseastar_1_1input__stream.html#a371fc294040cc66628416d9e46444f31',1,'seastar::input_stream::read()']]], + ['read_5fentire_5ffile_1',['read_entire_file',['../group__fileio-util.html#ga4e52b6e2f9d4410ca73d4cf1d14668ee',1,'seastar::util']]], + ['read_5fentire_5ffile_5fcontiguous_2',['read_entire_file_contiguous',['../group__fileio-util.html#ga68f47ea55e799ec3a3e5dd4fe91a1acf',1,'seastar::util']]], + ['read_5fexactly_3',['read_exactly',['../classseastar_1_1input__stream.html#a361edf18947c9a720f2e233043831b79',1,'seastar::input_stream']]], + ['read_5flock_4',['read_lock',['../classseastar_1_1basic__rwlock.html#a0231bd4641b247f5cb8d1b9f1641bc6f',1,'seastar::basic_rwlock']]], + ['read_5funlock_5',['read_unlock',['../classseastar_1_1basic__rwlock.html#a0b280f46f5ab0104c4017512c46b2f0d',1,'seastar::basic_rwlock']]], + ['read_5fup_5fto_6',['read_up_to',['../classseastar_1_1input__stream.html#a1139bacd62924e2e06e2b9903a2e2716',1,'seastar::input_stream']]], + ['rearm_7',['rearm',['../classseastar_1_1timer.html#a5ec87e28e78cd4e87bc068d9e481ec88',1,'seastar::timer']]], + ['rearm_5fperiodic_8',['rearm_periodic',['../classseastar_1_1timer.html#a6f37f4b913c46249b6c03156c4b830e4',1,'seastar::timer']]], + ['reclaims_9',['reclaims',['../classseastar_1_1memory_1_1statistics.html#a88dd764d686471285b5a9cfbb8d7b8c1',1,'seastar::memory::statistics']]], + ['recursive_5fremove_5fdirectory_10',['recursive_remove_directory',['../namespaceseastar.html#a704dc0d8e8effec6908449088daa6bba',1,'seastar']]], + ['recursive_5ftouch_5fdirectory_11',['recursive_touch_directory',['../group__fileio-module.html#ga5d33ffe4cbabb3b8f052232727eca06e',1,'seastar']]], + ['redirect_5fif_5fneeded_12',['redirect_if_needed',['../classseastar_1_1httpd_1_1file__interaction__handler.html#af45e35e6ae80c88d09c0244ca60eb643',1,'seastar::httpd::file_interaction_handler']]], + ['reduce_5fscheduling_5fgroup_5fspecific_13',['reduce_scheduling_group_specific',['../namespaceseastar.html#ad3a207d29b6fd25b23ff1cfb19302a8e',1,'seastar']]], + ['ref_14',['ref',['../group__utilities.html#ga5ba6881725ff32611b1842ca528ecc8c',1,'seastar']]], + ['register_5fapi_5ffile_15',['register_api_file',['../classseastar_1_1httpd_1_1api__registry__builder20.html#aa1d8d2f97c87582b5394f196fa31c114',1,'seastar::httpd::api_registry_builder20']]], + ['register_5fexeption_5fhandler_16',['register_exeption_handler',['../classseastar_1_1httpd_1_1routes.html#a61189635c9c88daf8fe0d8ace48742b5',1,'seastar::httpd::routes']]], + ['register_5ffunction_17',['register_function',['../classseastar_1_1httpd_1_1api__registry__builder20.html#aac2e58f35fd558128e7ee0cd410d02c2',1,'seastar::httpd::api_registry_builder20']]], + ['register_5fhandler_18',['register_handler',['../classseastar_1_1rpc_1_1protocol.html#ae72396a036b321136ffb0b9d85a3ccff',1,'seastar::rpc::protocol::register_handler(MsgType t, Func &&func)'],['../classseastar_1_1rpc_1_1protocol.html#a77fbb6597b5ad698be3f2e42f5499c69',1,'seastar::rpc::protocol::register_handler(MsgType t, scheduling_group sg, Func &&func)']]], + ['register_5fpriority_5fclass_19',['register_priority_class',['../classseastar_1_1fair__queue.html#af18b593fe46639d9c7a919a9cc9b5745',1,'seastar::fair_queue']]], + ['relabel_5fconfig_5faction_20',['relabel_config_action',['../namespaceseastar_1_1metrics.html#a207d7e13e8aa34dd2f540299002608ae',1,'seastar::metrics']]], + ['release_21',['release',['../classseastar_1_1temporary__buffer.html#a59ad6be5ce00ec88172f2e4b3534de87',1,'seastar::temporary_buffer::release()'],['../classseastar_1_1foreign__ptr.html#ae2dc1ac67c3fb2d90da8162be31be14c',1,'seastar::foreign_ptr::release()'],['../classseastar_1_1semaphore__units.html#aa3bbcffb85b60ae5f334dc575e947326',1,'seastar::semaphore_units::release()'],['../classseastar_1_1gate_1_1holder.html#aa5cc8a408b7f6ce1265cb53ad0b2c4b3',1,'seastar::gate::holder::release()'],['../classseastar_1_1experimental_1_1fsnotifier_1_1watch.html#aea7859d327237715cddb40ec3b302e9d',1,'seastar::experimental::fsnotifier::watch::release()']]], + ['remainder_22',['remainder',['../classseastar_1_1httpd_1_1url.html#adc825269ef94e9c43d5ffc2463229bbd',1,'seastar::httpd::url']]], + ['remote_5faddress_23',['remote_address',['../classseastar_1_1connected__socket.html#accff9ff789349ba3a89ba4a0d723290b',1,'seastar::connected_socket']]], + ['remove_24',['remove',['../classseastar_1_1timer__set.html#ab847d078ee65b32b3336719ef797d992',1,'seastar::timer_set::remove(Timer &timer, timer_list_t &expired) noexcept'],['../classseastar_1_1timer__set.html#ae636fa4ffb373ccea23566646caeeadd',1,'seastar::timer_set::remove(Timer &timer) noexcept']]], + ['remove_5ffile_25',['remove_file',['../group__fileio-module.html#ga25fb3c06a93fa9d18db5a1422c019df2',1,'seastar']]], + ['rename_5ffile_26',['rename_file',['../group__fileio-module.html#ga2da34ea24c98d9938351561fd988a669',1,'seastar']]], + ['rename_5fscheduling_5fgroup_27',['rename_scheduling_group',['../namespaceseastar.html#a8916a5f76765498f1b33eb1ce6e5fa10',1,'seastar::rename_scheduling_group(scheduling_group sg, sstring new_name, sstring new_shortname) noexcept'],['../namespaceseastar.html#aab1838637d702e4e708cc343532fe836',1,'seastar::rename_scheduling_group(scheduling_group sg, sstring new_name) noexcept']]], + ['repeat_28',['repeat',['../group__future-util.html#gae71e13ee397debf581ac03d84c31ff25',1,'seastar']]], + ['repeat_5funtil_5fvalue_29',['repeat_until_value',['../group__future-util.html#ga7b069e34610c82cf940f271f82d92e82',1,'seastar']]], + ['replace_30',['replace',['../classseastar_1_1basic__sstring.html#a0fe941c4aa05a125c2c4afd24d87333c',1,'seastar::basic_sstring']]], + ['request_5fabort_31',['request_abort',['../classseastar_1_1abort__source.html#ad987ae30de1c54a70c621b861b67b31e',1,'seastar::abort_source']]], + ['request_5fabort_5fex_32',['request_abort_ex',['../classseastar_1_1abort__source.html#aa83ccd8383e4426d312b84f9b9be1a27',1,'seastar::abort_source::request_abort_ex(Exception &&e) noexcept'],['../classseastar_1_1abort__source.html#a9aab0e3bad14b82e26cc669c25699ad5',1,'seastar::abort_source::request_abort_ex(std::exception_ptr ex) noexcept']]], + ['reserve_33',['reserve',['../classseastar_1_1expiring__fifo.html#a9ff09d80948427c13534604e162be2e2',1,'seastar::expiring_fifo']]], + ['reset_34',['reset',['../classseastar_1_1foreign__ptr.html#ac62a7aff5c3d7dba6be7be920c24a885',1,'seastar::foreign_ptr::reset(std::nullptr_t=nullptr) noexcept(std::is_nothrow_default_constructible_v< PtrType >)'],['../classseastar_1_1foreign__ptr.html#a9123e61c09215b924744cd84c57a2aca',1,'seastar::foreign_ptr::reset(PtrType new_ptr) noexcept(std::is_nothrow_move_constructible_v< PtrType >)']]], + ['resize_35',['resize',['../classseastar_1_1basic__sstring.html#a6b4c866b359f25de61c43e762013e9b6',1,'seastar::basic_sstring']]], + ['resize_5fand_5foverwrite_36',['resize_and_overwrite',['../classseastar_1_1basic__sstring.html#aef3a8396d7620c0079b61da0bbaf6eef',1,'seastar::basic_sstring']]], + ['resolve_5faddr_37',['resolve_addr',['../classseastar_1_1net_1_1dns__resolver.html#afe314b8bdb1a2f4e568b13ae7567fe5c',1,'seastar::net::dns_resolver']]], + ['resolve_5fname_38',['resolve_name',['../classseastar_1_1net_1_1dns__resolver.html#a1a4e14e0759c8467574b231a31781106',1,'seastar::net::dns_resolver']]], + ['resources_5fcurrently_5fexecuting_39',['resources_currently_executing',['../classseastar_1_1fair__queue.html#a3768c8809a709eaa1b4108fbac24814b',1,'seastar::fair_queue']]], + ['resources_5fcurrently_5fwaiting_40',['resources_currently_waiting',['../classseastar_1_1fair__queue.html#ad338dbf0fd3b7af29397564074db1b23',1,'seastar::fair_queue']]], + ['return_5fall_41',['return_all',['../classseastar_1_1semaphore__units.html#ad40a583a8910de68debe642cd557a659',1,'seastar::semaphore_units']]], + ['return_5funits_42',['return_units',['../classseastar_1_1semaphore__units.html#aaf78d6a3b9eaca445d019bae870c1ddb',1,'seastar::semaphore_units']]], + ['rule_5fregistration_43',['rule_registration',['../classseastar_1_1httpd_1_1rule__registration.html#a697055445f1977f6da0190ff885fe713',1,'seastar::httpd::rule_registration']]], + ['run_5fon_44',['run_on',['../namespaceseastar_1_1alien.html#a3d0ce3828e58bb40dda015bec49b03a3',1,'seastar::alien::run_on(instance &instance, unsigned shard, Func func)'],['../namespaceseastar_1_1alien.html#a61bbc0faa7bc3e7cd814ba0a49574b84',1,'seastar::alien::run_on(unsigned shard, Func func)']]], + ['run_5fwith_5fcallback_45',['run_with_callback',['../classseastar_1_1memory_1_1alloc__failure__injector.html#aff714364f6e7c6a4dd3f8d12940d7657',1,'seastar::memory::alloc_failure_injector']]] +]; diff --git a/master/search/functions_12.html b/master/search/functions_12.html new file mode 100644 index 000000000..8d0ce95c4 --- /dev/null +++ b/master/search/functions_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_12.js b/master/search/functions_12.js new file mode 100644 index 000000000..fb651cc80 --- /dev/null +++ b/master/search/functions_12.js @@ -0,0 +1,80 @@ +var searchData= +[ + ['sample_5fsize_0',['sample_size',['../classsampler.html#adcf3afb7a9f783e54855325ce35b85aa',1,'sampler']]], + ['sampled_5fmemory_5fprofile_1',['sampled_memory_profile',['../namespaceseastar_1_1memory.html#a6d7859ad53351c912350436b6f6f88b5',1,'seastar::memory::sampled_memory_profile()'],['../namespaceseastar_1_1memory.html#ae12ba1fb3e83a142348912797329e783',1,'seastar::memory::sampled_memory_profile(allocation_site *output, size_t size)']]], + ['scheduling_5fgroup_2',['scheduling_group',['../classseastar_1_1scheduling__group.html#a16b56b2638524c5f85f42f2afcdbec79',1,'seastar::scheduling_group']]], + ['scheduling_5fgroup_5fget_5fspecific_3',['scheduling_group_get_specific',['../namespaceseastar.html#a2c48ac3e469d35ff2d12e78fa3b443d5',1,'seastar::scheduling_group_get_specific(scheduling_group_key key) noexcept'],['../namespaceseastar.html#a749bed52e130922b08a63352d57f8015',1,'seastar::scheduling_group_get_specific(scheduling_group sg, scheduling_group_key key)']]], + ['scheduling_5fgroup_5fkey_4',['scheduling_group_key',['../classseastar_1_1scheduling__group__key.html#af86bcfd29e11cf88ea03be2c5a56e0e5',1,'seastar::scheduling_group_key']]], + ['scheduling_5fgroup_5fkey_5fconfig_5',['scheduling_group_key_config',['../structseastar_1_1scheduling__group__key__config.html#a72ae261d9fb33c1a3f38a370a97eb4a8',1,'seastar::scheduling_group_key_config::scheduling_group_key_config()'],['../structseastar_1_1scheduling__group__key__config.html#acca8583dca746ec90e55b0f1036cf030',1,'seastar::scheduling_group_key_config::scheduling_group_key_config(const std::type_info &type_info)']]], + ['scheduling_5fgroup_5fkey_5fcreate_6',['scheduling_group_key_create',['../namespaceseastar.html#aff74b815c338707eb74e9edd075a34e0',1,'seastar']]], + ['select_5fcandidate_7',['select_candidate',['../classseastar_1_1program__options_1_1selection__value.html#a959c1d350efccb87171b7c8f2a5689e3',1,'seastar::program_options::selection_value']]], + ['select_5fdefault_5fcandidate_8',['select_default_candidate',['../classseastar_1_1program__options_1_1selection__value.html#a0910a259deaec27452e8dfe6de10e847',1,'seastar::program_options::selection_value']]], + ['selection_5fvalue_9',['selection_value',['../classseastar_1_1program__options_1_1selection__value.html#a46734f76b980422b283893f48b4a57d3',1,'seastar::program_options::selection_value::selection_value(option_group &group, std::string name, unused)'],['../classseastar_1_1program__options_1_1selection__value.html#ac2636c9ad2e428e8d540817ed3fd267a',1,'seastar::program_options::selection_value::selection_value(option_group &group, std::string name, candidates candidates, std::string default_candidate, std::string description)']]], + ['send_5fdata_10',['send_data',['../group__websocket.html#ga5340a721f133d4d459a842a133fdbe39',1,'seastar::experimental::websocket::connection']]], + ['server_5fsocket_11',['server_socket',['../classseastar_1_1server__socket.html#aed94205408fe6e83de17ccb47ee4f390',1,'seastar::server_socket::server_socket(server_socket &&ss) noexcept'],['../classseastar_1_1server__socket.html#acc587716ec81102138ee5e51ba6565b6',1,'seastar::server_socket::server_socket() noexcept']]], + ['set_5fabort_5fon_5fallocation_5ffailure_12',['set_abort_on_allocation_failure',['../namespaceseastar_1_1memory.html#a6612139edb36977f770061377a95a371',1,'seastar::memory']]], + ['set_5fabort_5fon_5febadf_13',['set_abort_on_ebadf',['../namespaceseastar.html#a1b2a68c3789e2e9f01108a4cdd725e10',1,'seastar']]], + ['set_5fabort_5fon_5finternal_5ferror_14',['set_abort_on_internal_error',['../namespaceseastar.html#a566620a3b436f692d72674b03e4c2471',1,'seastar']]], + ['set_5fadditional_5fdiagnostics_5fproducer_15',['set_additional_diagnostics_producer',['../namespaceseastar_1_1memory.html#aec131d713d157f690d3164cdc5e76b2c',1,'seastar::memory']]], + ['set_5fcallback_16',['set_callback',['../classseastar_1_1timer.html#ad9c1e7068e3a691d33ba5b42f8fd340b',1,'seastar::timer::set_callback(noncopyable_function< void()> &&callback) noexcept'],['../classseastar_1_1timer.html#afa9022c582e8d535e7a30e485c29aac1',1,'seastar::timer::set_callback(scheduling_group sg, noncopyable_function< void()> &&callback) noexcept']]], + ['set_5fcontent_5ftype_17',['set_content_type',['../structseastar_1_1http_1_1request.html#a7bc43ed0fe42a1b1cc9c6303de8368b5',1,'seastar::http::request::set_content_type()'],['../structseastar_1_1http_1_1reply.html#ad8a76e7b8c1b5b844165f529a64baf96',1,'seastar::http::reply::set_content_type()']]], + ['set_5fdn_5fverification_5fcallback_18',['set_dn_verification_callback',['../classseastar_1_1tls_1_1certificate__credentials.html#ae49e16c26e96fc44d72f3e305ec1dddc',1,'seastar::tls::certificate_credentials']]], + ['set_5fdump_5fmemory_5fdiagnostics_5fon_5falloc_5ffailure_5fkind_19',['set_dump_memory_diagnostics_on_alloc_failure_kind',['../namespaceseastar_1_1memory.html#a52e889cff8bbeaecb5231a923e3716c7',1,'seastar::memory::set_dump_memory_diagnostics_on_alloc_failure_kind(alloc_failure_kind)'],['../namespaceseastar_1_1memory.html#a63f15de0251b7488491dcf61aa028469',1,'seastar::memory::set_dump_memory_diagnostics_on_alloc_failure_kind(std::string_view)']]], + ['set_5fexception_20',['set_exception',['../classseastar_1_1promise.html#acb9650b8cab53c81184d0b170bb99cb8',1,'seastar::promise::set_exception(std::exception_ptr &&ex) noexcept'],['../classseastar_1_1promise.html#a7c4e6eedaef7e66edeb10f67bc569986',1,'seastar::promise::set_exception(Exception &&e) noexcept'],['../classseastar_1_1shared__promise.html#a35542c86a75e6533fb221aa6c2d86fa8',1,'seastar::shared_promise::set_exception(std::exception_ptr ex) noexcept'],['../classseastar_1_1shared__promise.html#a068e1670a82ae9c678d18d34bad8e979',1,'seastar::shared_promise::set_exception(Exception &&e) noexcept']]], + ['set_5fexpects_5fcontinue_21',['set_expects_continue',['../structseastar_1_1http_1_1request.html#aa3cb2a6971cb3c8e8fbf1827c1731016',1,'seastar::http::request']]], + ['set_5ffile_5flifetime_5fhint_22',['set_file_lifetime_hint',['../classseastar_1_1file.html#a6d7281ef1178f6d29f4f7364895b8292',1,'seastar::file']]], + ['set_5fheap_5fprofiling_5fsampling_5frate_23',['set_heap_profiling_sampling_rate',['../namespaceseastar_1_1memory.html#a14f30bb4a13995f54af1d98169ac28a6',1,'seastar::memory']]], + ['set_5fidle_5fcpu_5fhandler_24',['set_idle_cpu_handler',['../namespaceseastar.html#aa4756a6fd059ce855abacd67521add72',1,'seastar::set_idle_cpu_handler()'],['../classseastar_1_1reactor.html#a8776ee2f3ff40f2dc26f71d0ece8d9cf',1,'seastar::reactor::set_idle_cpu_handler()']]], + ['set_5finode_5flifetime_5fhint_25',['set_inode_lifetime_hint',['../classseastar_1_1file.html#a380dfeca0ff5524432b5866b22446d35',1,'seastar::file']]], + ['set_5fkeepalive_26',['set_keepalive',['../classseastar_1_1connected__socket.html#a2e8ce611e54b113012c6d58254744143',1,'seastar::connected_socket']]], + ['set_5fkeepalive_5fparameters_27',['set_keepalive_parameters',['../classseastar_1_1connected__socket.html#a4f180f624bd3c93a8f1cc34b92d505dd',1,'seastar::connected_socket']]], + ['set_5flarge_5fallocation_5fwarning_5fthreshold_28',['set_large_allocation_warning_threshold',['../namespaceseastar_1_1memory.html#a0f42296c2fe94f53fbdca0d62dd07679',1,'seastar::memory']]], + ['set_5flogger_29',['set_logger',['../classseastar_1_1rpc_1_1protocol.html#aa1ac72d6fa744b57b2aead4245058207',1,'seastar::rpc::protocol::set_logger(::seastar::logger *logger)'],['../classseastar_1_1rpc_1_1protocol.html#a1080ac03247263174a9b3b3c605f19d1',1,'seastar::rpc::protocol::set_logger(std::function< void(const sstring &)> logger)']]], + ['set_5fmax_5fsize_30',['set_max_size',['../classseastar_1_1queue.html#a9956de29333c1a2a115a1ef52b9a74b5',1,'seastar::queue']]], + ['set_5fmaximum_5fconnections_31',['set_maximum_connections',['../classseastar_1_1http_1_1experimental_1_1client.html#a69d4cd7e4582799cd013c9a34f64f5e0',1,'seastar::http::experimental::client']]], + ['set_5fmime_5ftype_32',['set_mime_type',['../structseastar_1_1http_1_1request.html#a62083de861851c399aff043f8cc46ff8',1,'seastar::http::request::set_mime_type()'],['../structseastar_1_1http_1_1reply.html#a79d2ca68c50891cc09206fde8be71508',1,'seastar::http::reply::set_mime_type()']]], + ['set_5fmin_5ffree_5fpages_33',['set_min_free_pages',['../namespaceseastar_1_1memory.html#a2042dcbf8cc2e53f199604f9ac4f64dd',1,'seastar::memory']]], + ['set_5fnodelay_34',['set_nodelay',['../classseastar_1_1connected__socket.html#abac356de197aaaedfe448137754fc442',1,'seastar::connected_socket']]], + ['set_5fpriority_5fstring_35',['set_priority_string',['../classseastar_1_1tls_1_1certificate__credentials.html#a3fbab878250b30e619021aed1cec21ed',1,'seastar::tls::certificate_credentials']]], + ['set_5frelabel_5fconfigs_36',['set_relabel_configs',['../namespaceseastar_1_1metrics.html#a99fe98b282f4949f870fd6cf46d3a785',1,'seastar::metrics']]], + ['set_5freuseaddr_37',['set_reuseaddr',['../classseastar_1_1socket.html#a5608fc68e5fe27ea78d1b56514685baa',1,'seastar::socket']]], + ['set_5fsampling_5finterval_38',['set_sampling_interval',['../classsampler.html#a29a6248b0d4bf1aedfda484d5da9624e',1,'sampler']]], + ['set_5fsession_5fresume_5fmode_39',['set_session_resume_mode',['../classseastar_1_1tls_1_1server__credentials.html#ad01a48fb227fa0cffaeaa1707daea0a9',1,'seastar::tls::server_credentials']]], + ['set_5fshares_40',['set_shares',['../classseastar_1_1scheduling__group.html#a9d8d68fed03509166d9a9265927cd8eb',1,'seastar::scheduling_group']]], + ['set_5fsockopt_41',['set_sockopt',['../classseastar_1_1connected__socket.html#a8458417e5e76b35260de14badebf1303',1,'seastar::connected_socket']]], + ['set_5fstall_5fdetector_5freport_5ffunction_42',['set_stall_detector_report_function',['../classseastar_1_1reactor_1_1test.html#a1095aedb8b253ad5c2f9b3abe8d324be',1,'seastar::reactor::test']]], + ['set_5fstrict_5fdma_43',['set_strict_dma',['../classseastar_1_1reactor.html#a5f9295803bde9c8e4e4b0e5294f29638',1,'seastar::reactor']]], + ['set_5fsystem_5ftrust_44',['set_system_trust',['../classseastar_1_1tls_1_1certificate__credentials.html#ad85ae001dd92e4f0a030db663aafd216',1,'seastar::tls::certificate_credentials']]], + ['set_5ftls_5fcredentials_45',['set_tls_credentials',['../classseastar_1_1httpd_1_1http__server.html#af98f1c3d754c28cb04173a17c07d8e75',1,'seastar::httpd::http_server']]], + ['set_5fto_5fcurrent_5fexception_46',['set_to_current_exception',['../classseastar_1_1promise.html#a3c24a3f1a3bf4c34d1ed360409ce5972',1,'seastar::promise']]], + ['set_5ftransformer_47',['set_transformer',['../classseastar_1_1httpd_1_1file__interaction__handler.html#ad82e04afa5a4e1d5b6ef79169dbe3b09',1,'seastar::httpd::file_interaction_handler']]], + ['set_5fvalue_48',['set_value',['../classseastar_1_1shared__promise.html#a1d5f628f0da80cf5804b870d3ff732c0',1,'seastar::shared_promise::set_value()'],['../classseastar_1_1promise.html#a8c9a385f90d5b351fc171583fc3fb425',1,'seastar::promise::set_value()'],['../classseastar_1_1shared__promise.html#a732bf24899de335d3e88a2b55e3e17e1',1,'seastar::shared_promise::set_value(const value_tuple_type &result) noexcept(copy_noexcept)'],['../classseastar_1_1shared__promise.html#ae789297d0ed604168e2085cbc14b36fb',1,'seastar::shared_promise::set_value(A &&... a) noexcept']]], + ['sharded_49',['sharded',['../classseastar_1_1sharded.html#a6574c605725ee45ff64a8644336c4b12',1,'seastar::sharded::sharded() noexcept'],['../classseastar_1_1sharded.html#a109d1e1d978f0522d3e2fbeaaa6ff92c',1,'seastar::sharded::sharded(sharded &&other)=delete']]], + ['sharded_5fparameter_50',['sharded_parameter',['../classseastar_1_1sharded__parameter.html#a6a51bee5587152c5d74d8d5c3f7814ce',1,'seastar::sharded_parameter']]], + ['share_51',['share',['../group__memory-module.html#gac5f5c09758baa22ecfc99c311e68ad94',1,'seastar::deleter::share()'],['../classseastar_1_1temporary__buffer.html#a936236db3cfbcf6eb6bd708cc57951b6',1,'seastar::temporary_buffer::share()'],['../classseastar_1_1temporary__buffer.html#a9153c7b13efe07fda994dce50163a5b6',1,'seastar::temporary_buffer::share(size_t pos, size_t len)']]], + ['shared_5ffuture_52',['shared_future',['../classseastar_1_1shared__future.html#a6309e0e6b0edf032e74a21816ad1f1f8',1,'seastar::shared_future']]], + ['should_5fyield_53',['should_yield',['../classseastar_1_1thread.html#aa989b341ea9f28ba835f1b353e05c904',1,'seastar::thread']]], + ['shutdown_54',['shutdown',['../classseastar_1_1experimental_1_1fsnotifier.html#a9a3d0319a645029cc052dea0d4f2589a',1,'seastar::experimental::fsnotifier::shutdown()'],['../classseastar_1_1rpc_1_1server.html#a8384243222af4efe7ff12b4ecfaad5cf',1,'seastar::rpc::server::shutdown()'],['../classseastar_1_1socket.html#ac0999f4b0011c56701e62b332b475176',1,'seastar::socket::shutdown()']]], + ['shutdown_5finput_55',['shutdown_input',['../group__websocket.html#gaf08007639a114bb6cb73da2171a3799e',1,'seastar::experimental::websocket::connection::shutdown_input()'],['../classseastar_1_1connected__socket.html#a3fc463f624213b73f9cd5c2e4c9b0613',1,'seastar::connected_socket::shutdown_input()'],['../classseastar_1_1net_1_1datagram__channel.html#a7c690ab18d484493e801e65ed7850729',1,'seastar::net::datagram_channel::shutdown_input()']]], + ['shutdown_5foutput_56',['shutdown_output',['../classseastar_1_1connected__socket.html#a591d63195cb7901a2227b0dbf05b2a66',1,'seastar::connected_socket::shutdown_output()'],['../classseastar_1_1net_1_1datagram__channel.html#a0895d02c70cf9806e387aa95d93a2f35',1,'seastar::net::datagram_channel::shutdown_output()']]], + ['signal_57',['signal',['../classseastar_1_1condition__variable.html#a7e13de1e820b6c3627f14d4293d69bda',1,'seastar::condition_variable::signal()'],['../classseastar_1_1basic__semaphore.html#ab85ecffff17b565abfa46c3fda090c93',1,'seastar::basic_semaphore::signal()']]], + ['size_58',['size',['../classseastar_1_1expiring__fifo.html#a2585fba7a6fcd084728bbacfc7ea9652',1,'seastar::expiring_fifo::size()'],['../classseastar_1_1file.html#a95e704044c29ce5a8b4633262cc43b78',1,'seastar::file::size()'],['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#aa13eedc896982d211fff1702f01a3f7f',1,'seastar::metrics::internal::approximate_exponential_histogram::size()'],['../classseastar_1_1queue.html#a0063d1a7586c111d711b2456e5c94a9f',1,'seastar::queue::size()'],['../classseastar_1_1temporary__buffer.html#ac545d36f773dc6954d2266677e0f6a42',1,'seastar::temporary_buffer::size()']]], + ['skip_59',['skip',['../classseastar_1_1input__stream.html#a0150cf123126fbb333edcb1b7e22eef4',1,'seastar::input_stream']]], + ['sleep_60',['sleep',['../namespaceseastar.html#a7c875a6dc5869c1f2d5e975eb34746c6',1,'seastar']]], + ['sleep_5fabortable_61',['sleep_abortable',['../namespaceseastar.html#a814016b5151c2b4d922f018f08c34930',1,'seastar::sleep_abortable(typename Clock::duration dur, abort_source &as)'],['../namespaceseastar.html#a5e8ea0d65b285cf4678fe287b63eb422',1,'seastar::sleep_abortable(typename Clock::duration dur)']]], + ['socket_62',['socket',['../classseastar_1_1socket.html#a04ad152a4e36dd5aeb967fdcc3c0f94f',1,'seastar::socket::socket()'],['../namespaceseastar_1_1tls.html#a67ebf548673541a04d48a0ef6ac238bc',1,'seastar::tls::socket(shared_ptr< certificate_credentials >, tls_options options={})'],['../namespaceseastar_1_1tls.html#aa5b67c3c8a80a8ec9429ec1ffe7624a8',1,'seastar::tls::socket(shared_ptr< certificate_credentials >, sstring name)']]], + ['socket_5faddress_63',['socket_address',['../classseastar_1_1socket__address.html#adf15a68a7757cf94452ca0c39938758e',1,'seastar::socket_address']]], + ['spawn_5fprocess_64',['spawn_process',['../group__interprocess-module.html#ga99bbba00257877a19476a789530197d0',1,'seastar::experimental::spawn_process(const std::filesystem::path &pathname)'],['../group__interprocess-module.html#gab00eeca1f55dab19fbc2dbb51be11f79',1,'seastar::experimental::spawn_process(const std::filesystem::path &pathname, spawn_parameters params)']]], + ['speculate_5fepoll_65',['speculate_epoll',['../classseastar_1_1pollable__fd__state.html#a9c955e4a9aea6362c5768d0dd9479b3c',1,'seastar::pollable_fd_state']]], + ['split_66',['split',['../classseastar_1_1semaphore__units.html#a94402822f654a61855eea64acd86f33b',1,'seastar::semaphore_units']]], + ['start_67',['start',['../classseastar_1_1subscription.html#ae1189eace21e50eeb244826b397cd1d1',1,'seastar::subscription::start()'],['../classseastar_1_1sharded.html#af01ed48d04ebd34957b9a47c7e5ab887',1,'seastar::sharded::start(Args &&... args) noexcept']]], + ['start_5fsingle_68',['start_single',['../classseastar_1_1sharded.html#a351463269450c6a09091f9be485ef57b',1,'seastar::sharded']]], + ['stat_69',['stat',['../classseastar_1_1file.html#a9e6fc0d04576c674306047a4f67ab82b',1,'seastar::file']]], + ['stats_70',['stats',['../namespaceseastar_1_1memory.html#a1eab70c73ed53fe3f4b8324b16e4ca02',1,'seastar::memory']]], + ['stop_71',['stop',['../group__websocket.html#gae8d9858b97bdf2571b0e1b34110bd3a9',1,'seastar::experimental::websocket::server::stop()'],['../classseastar_1_1rpc_1_1server.html#a6182f6907a977f88d0da2b3c1ab2207a',1,'seastar::rpc::server::stop()'],['../classseastar_1_1sharded.html#a78c62e6d04e6f663bc60882646147a43',1,'seastar::sharded::stop()']]], + ['stop_5fnow_72',['stop_now',['../classseastar_1_1deferred__stop.html#a3db2d0eb13344364cb969e982c7132e5',1,'seastar::deferred_stop']]], + ['str_5fmatcher_73',['str_matcher',['../classseastar_1_1httpd_1_1str__matcher.html#ad13f920a777438c26fbf4f460cf51046',1,'seastar::httpd::str_matcher']]], + ['submit_5fto_74',['submit_to',['../classseastar_1_1smp.html#af61582580a5d21d0cb6af8b29423b54e',1,'seastar::smp::submit_to()'],['../namespaceseastar_1_1alien.html#a8745864426c401d3e2685a64285225a4',1,'seastar::alien::submit_to(unsigned shard, Func func)'],['../namespaceseastar_1_1alien.html#a50d89de93339ddb7ff802f5ae6b4ffc3',1,'seastar::alien::submit_to(instance &instance, unsigned shard, Func func)'],['../classseastar_1_1smp.html#a6b3f6578eb387e64989e54ed435d7598',1,'seastar::smp::submit_to()']]], + ['subscribe_75',['subscribe',['../classseastar_1_1abort__source.html#aa46295d8016fcd03a9a7f5c56bf11263',1,'seastar::abort_source']]], + ['sync_5fdirectory_76',['sync_directory',['../group__fileio-module.html#gaf2695f61c35469c30866297b4a1dc301',1,'seastar']]] +]; diff --git a/master/search/functions_13.html b/master/search/functions_13.html new file mode 100644 index 000000000..70c843074 --- /dev/null +++ b/master/search/functions_13.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_13.js b/master/search/functions_13.js new file mode 100644 index 000000000..1ed38f6f5 --- /dev/null +++ b/master/search/functions_13.js @@ -0,0 +1,40 @@ +var searchData= +[ + ['take_5fspeculation_0',['take_speculation',['../classseastar_1_1pollable__fd__state.html#a578c0dcd93ef41c4b056985c576cc7ad',1,'seastar::pollable_fd_state']]], + ['temporary_5fbuffer_1',['temporary_buffer',['../classseastar_1_1temporary__buffer.html#a97c50ad71827189086704215551cf136',1,'seastar::temporary_buffer::temporary_buffer(size_t size)'],['../classseastar_1_1temporary__buffer.html#a9650c675bed80e66e952834bef0ca4d3',1,'seastar::temporary_buffer::temporary_buffer() noexcept'],['../classseastar_1_1temporary__buffer.html#a277aaab92ee17824bab6c1c835eacab0',1,'seastar::temporary_buffer::temporary_buffer(temporary_buffer &&x) noexcept'],['../classseastar_1_1temporary__buffer.html#a04252fd4326e1e0ef0f8f04df995fbde',1,'seastar::temporary_buffer::temporary_buffer(CharType *buf, size_t size, deleter d) noexcept'],['../classseastar_1_1temporary__buffer.html#aed4dd7ee507c17a0ed018fe8c41c9334',1,'seastar::temporary_buffer::temporary_buffer(const CharType *src, size_t size)']]], + ['terminate_2',['terminate',['../classseastar_1_1experimental_1_1process.html#a4695d3bec052594c4e04c1e021e4851f',1,'seastar::experimental::process']]], + ['then_3',['then',['../classseastar_1_1future.html#a3864e70c07aa00d54c4be2870b06847f',1,'seastar::future']]], + ['then_5funpack_4',['then_unpack',['../classseastar_1_1future.html#a601231f76d19bbcdf5b9cacdf88f3151',1,'seastar::future']]], + ['then_5fwrapped_5',['then_wrapped',['../classseastar_1_1future.html#a015e85e8e34d191b65a35f6dde26d477',1,'seastar::future']]], + ['this_5fshard_5fid_6',['this_shard_id',['../namespaceseastar.html#a6b1fb468193fee4247f1c1819cd19cf4',1,'seastar']]], + ['thread_7',['thread',['../classseastar_1_1thread.html#aa966562354f011ccf7fca9b80f4e8c88',1,'seastar::thread::thread()=default'],['../group__thread-module.html#ga13305b7e1b60d43907b73824327612e0',1,'seastar::thread::thread(Func func)'],['../group__thread-module.html#ga159f8c16a5d753224ad19b38d0d642ea',1,'seastar::thread::thread(thread_attributes attr, Func func)'],['../classseastar_1_1thread.html#a5728f7229818fce162d792298b26cbf4',1,'seastar::thread::thread(thread &&x) noexcept=default']]], + ['throw_5fwith_5fbacktrace_8',['throw_with_backtrace',['../namespaceseastar.html#a4c5b6c647938a6ef9c79fb51008f295a',1,'seastar']]], + ['timer_9',['timer',['../classseastar_1_1timer.html#ab635ae67a25477278656a0889b621565',1,'seastar::timer::timer() noexcept'],['../classseastar_1_1timer.html#a604c208460a5a77ee217586e257b2bb0',1,'seastar::timer::timer(noncopyable_function< void()> &&callback) noexcept'],['../classseastar_1_1timer.html#a507ce84d06f055929692ad058a8791e7',1,'seastar::timer::timer(scheduling_group sg, noncopyable_function< void()> &&callback) noexcept'],['../classseastar_1_1timer.html#ae3594a63cafa5cab0720bd65965b8db6',1,'seastar::timer::timer(timer &&t) noexcept']]], + ['to_5fabsolute_5fitimerspec_10',['to_absolute_itimerspec',['../posix_8hh.html#a85ff68df53ea80527da72441660a84ab',1,'seastar::posix']]], + ['to_5ffile_11',['to_file',['../classseastar_1_1file__handle.html#af7230a607d5b9bf47e4a759c3f50b7ee',1,'seastar::file_handle::to_file() const &'],['../classseastar_1_1file__handle.html#af9e6432e9d3fed7cd5b07359084bddfb',1,'seastar::file_handle::to_file() &&']]], + ['to_5fjson_12',['to_json',['../structseastar_1_1json_1_1json__void.html#a79987ea1c752f1cba2a402da6c8b69cb',1,'seastar::json::json_void::to_json()'],['../structseastar_1_1json_1_1json__base.html#abef0550088e52bd93a2d2dd75669cff9',1,'seastar::json::json_base::to_json()'],['../classseastar_1_1json_1_1jsonable.html#ab76f0ea9851309bc4d85c8e49ee2cf11',1,'seastar::json::jsonable::to_json()'],['../classseastar_1_1json_1_1formatter.html#abf460e0884b4ac82826e17a9818d290b',1,'seastar::json::formatter::to_json(unsigned long l)'],['../classseastar_1_1json_1_1formatter.html#ad02a234a7fcc678b11f183560c1dc1ba',1,'seastar::json::formatter::to_json(const jsonable &obj)'],['../classseastar_1_1json_1_1formatter.html#a804333312e3c390157e0e1d2ade0e503',1,'seastar::json::formatter::to_json(const date_time &d)'],['../classseastar_1_1json_1_1formatter.html#ad5957fff728d082de7a63c92cf9960ba',1,'seastar::json::formatter::to_json(bool d)'],['../classseastar_1_1json_1_1formatter.html#ad865a5df1a5954b86896eb6c8c35baee',1,'seastar::json::formatter::to_json(unsigned n)'],['../classseastar_1_1json_1_1formatter.html#a8dfab1f83f3bbe1e34153e32ffed1c79',1,'seastar::json::formatter::to_json(int n)'],['../classseastar_1_1json_1_1formatter.html#a5a9b7369af0c0c432f8955255aa5034d',1,'seastar::json::formatter::to_json(const sstring &str)'],['../classseastar_1_1json_1_1formatter.html#a80ad29bd652f10b932550d5625ddc084',1,'seastar::json::formatter::to_json(const std::vector< Args... > &vec)'],['../classseastar_1_1json_1_1formatter.html#a757f90f0a09815177a31735de20bd3e5',1,'seastar::json::formatter::to_json(long n)'],['../classseastar_1_1json_1_1formatter.html#aea6313017a15779113dec5e947db1f3e',1,'seastar::json::formatter::to_json(const char *str)'],['../classseastar_1_1json_1_1formatter.html#aee5b99aaf0103f00e81c4dbda5348730',1,'seastar::json::formatter::to_json(float f)'],['../classseastar_1_1json_1_1formatter.html#afa2c7a8dd524aea7794d54c337dcd340',1,'seastar::json::formatter::to_json(const char *str, size_t len)'],['../classseastar_1_1json_1_1formatter.html#a12df360614bfe66a0b3aefaceaad0552',1,'seastar::json::formatter::to_json(double d)']]], + ['to_5frelative_5fitimerspec_13',['to_relative_itimerspec',['../posix_8hh.html#a64f21b1a30ed389197472c59ed9b23ac',1,'seastar::posix']]], + ['to_5fstring_14',['to_string',['../classseastar_1_1json_1_1json__base__element.html#a41c0ef020393005975517fbd75eada04',1,'seastar::json::json_base_element::to_string()'],['../classseastar_1_1json_1_1json__element.html#ad425e38e4004f351f1e9292c945b5108',1,'seastar::json::json_element::to_string()'],['../classseastar_1_1json_1_1json__list.html#affefaedd512958b2e3082d1b410bd2c0',1,'seastar::json::json_list::to_string()']]], + ['to_5ftimespec_15',['to_timespec',['../posix_8hh.html#abda7d60dc449e6e299864ba015d03d8c',1,'seastar::posix']]], + ['token_16',['token',['../classseastar_1_1experimental_1_1fsnotifier_1_1watch.html#a3a8c5bbbec30cab10472f6ce0a24d2fa',1,'seastar::experimental::fsnotifier::watch']]], + ['total_5fmemory_17',['total_memory',['../classseastar_1_1memory_1_1statistics.html#a465546545a4a0945d2431f4b948abab2',1,'seastar::memory::statistics']]], + ['total_5fnew_5fconnections_5fnr_18',['total_new_connections_nr',['../classseastar_1_1http_1_1experimental_1_1client.html#a4f94d20012e4d3b527fcbbe3fef106a6',1,'seastar::http::experimental::client']]], + ['touch_19',['touch',['../classseastar_1_1slab__allocator.html#a246729a2fa6646d0bff93a173251db8a',1,'seastar::slab_allocator']]], + ['touch_5fdirectory_20',['touch_directory',['../group__fileio-module.html#ga1aa80518fe58477baa370f1991a9579d',1,'seastar']]], + ['transform_21',['transform',['../classseastar_1_1httpd_1_1content__replace.html#a53aa81933e3676855f0cc54c32145f69',1,'seastar::httpd::content_replace::transform()'],['../classseastar_1_1httpd_1_1file__transformer.html#aa13ddb896ad7dbad8d75cbe0db9f3e2f',1,'seastar::httpd::file_transformer::transform()']]], + ['trim_22',['trim',['../classseastar_1_1temporary__buffer.html#a47fb12f1d31db113b70f30d8222b5c52',1,'seastar::temporary_buffer']]], + ['trim_5ffront_23',['trim_front',['../classseastar_1_1temporary__buffer.html#ab82d397228a054b51b1daf6618560203',1,'seastar::temporary_buffer']]], + ['truncate_24',['truncate',['../classseastar_1_1file.html#aba828225b92394e8ab07ddfbfd857380',1,'seastar::file']]], + ['try_5fenter_25',['try_enter',['../classseastar_1_1gate.html#a2d2ca58b3467f0f857d1414673776e68',1,'seastar::gate']]], + ['try_5fhold_26',['try_hold',['../classseastar_1_1gate.html#a96ba620854f1a09213f3590a20bc5316',1,'seastar::gate']]], + ['try_5flock_27',['try_lock',['../classseastar_1_1shared__mutex.html#a534a6509c7c5128cd832ae07d548f0cb',1,'seastar::shared_mutex']]], + ['try_5flock_5fshared_28',['try_lock_shared',['../classseastar_1_1shared__mutex.html#ab7fd82aad9f50bf8e54196da87a0a5f5',1,'seastar::shared_mutex']]], + ['try_5fread_5flock_29',['try_read_lock',['../classseastar_1_1basic__rwlock.html#a61020fcba43c56baab9db66ad9d34ab7',1,'seastar::basic_rwlock']]], + ['try_5fwait_30',['try_wait',['../classseastar_1_1basic__semaphore.html#aaac157ad64df05d0681372fcd83f0c8c',1,'seastar::basic_semaphore']]], + ['try_5fwith_5fgate_31',['try_with_gate',['../group__fiber-module.html#gab87704c5a6a216aea23ec12a2d193386',1,'seastar::gate']]], + ['try_5fwrite_5flock_32',['try_write_lock',['../classseastar_1_1basic__rwlock.html#a83165946f4cd04894dcebae75e128dd7',1,'seastar::basic_rwlock']]], + ['tuple_5ffilter_5fby_5ftype_33',['tuple_filter_by_type',['../group__utilities.html#gabe3215208809af5dd57703084e8a4e37',1,'seastar']]], + ['tuple_5ffor_5feach_34',['tuple_for_each',['../group__utilities.html#ga56a3dd0609e574dcd283c565789da372',1,'seastar']]], + ['tuple_5fmap_35',['tuple_map',['../group__utilities.html#ga21ff9b5fd69e0506b1a028ad27a4a62f',1,'seastar']]], + ['typed_5fvalue_36',['typed_value',['../structseastar_1_1scollectd_1_1typed__value.html#ab3af964852c7d4f019fe981d8d96d403',1,'seastar::scollectd::typed_value']]] +]; diff --git a/master/search/functions_14.html b/master/search/functions_14.html new file mode 100644 index 000000000..fde206460 --- /dev/null +++ b/master/search/functions_14.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_14.js b/master/search/functions_14.js new file mode 100644 index 000000000..05ae4d1f1 --- /dev/null +++ b/master/search/functions_14.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['underlying_5ffile_0',['underlying_file',['../classseastar_1_1layered__file__impl.html#a9bf7de881057a3369755554a22bd57fe',1,'seastar::layered_file_impl::underlying_file() noexcept'],['../classseastar_1_1layered__file__impl.html#afffc7708f6515ab1e1a1163ed30c639a',1,'seastar::layered_file_impl::underlying_file() const noexcept']]], + ['unlock_1',['unlock',['../classseastar_1_1shared__mutex.html#a9fce1cfe587ead0616846ff39e1781f9',1,'seastar::shared_mutex']]], + ['unlock_5fshared_2',['unlock_shared',['../classseastar_1_1shared__mutex.html#a183d4db544d9f176bf670737ad802c09',1,'seastar::shared_mutex']]], + ['unread_3',['unread',['../classseastar_1_1pipe__reader.html#a2886c129d63b527f01b591ac249446e4',1,'seastar::pipe_reader']]], + ['unregister_5fhandler_4',['unregister_handler',['../classseastar_1_1rpc_1_1protocol.html#aea92d1b5ddbf34c72a46e9cb17eff5fe',1,'seastar::rpc::protocol']]], + ['unregister_5fpriority_5fclass_5',['unregister_priority_class',['../classseastar_1_1fair__queue.html#a2681154c8e8e08263cca450b9c4d85fb',1,'seastar::fair_queue']]], + ['update_5fcopy_5fstats_6',['update_copy_stats',['../structseastar_1_1net_1_1qp__stats__good.html#a6a812b59d13abce3af5e06c9b639c92a',1,'seastar::net::qp_stats_good']]], + ['update_5ffrags_5fstats_7',['update_frags_stats',['../structseastar_1_1net_1_1qp__stats__good.html#a21f2021467e8d2001f98a5386e3d9d80',1,'seastar::net::qp_stats_good']]], + ['update_5fio_5fbandwidth_8',['update_io_bandwidth',['../classseastar_1_1scheduling__group.html#a9307b0fc51b8a09a3a0a7f79dfc0f71f',1,'seastar::scheduling_group']]], + ['update_5fpkts_5fbunch_9',['update_pkts_bunch',['../structseastar_1_1net_1_1qp__stats__good.html#af0f1a2c097a283fcde1807b03b2c8ccd',1,'seastar::net::qp_stats_good']]], + ['url_10',['url',['../classseastar_1_1httpd_1_1url.html#a2144380983b139d083381a6945bcf2d1',1,'seastar::httpd::url::url(url &&)=default'],['../classseastar_1_1httpd_1_1url.html#a7e283b51d2b6360dd97062cbb1630d81',1,'seastar::httpd::url::url(const sstring &path)']]] +]; diff --git a/master/search/functions_15.html b/master/search/functions_15.html new file mode 100644 index 000000000..1a5307d12 --- /dev/null +++ b/master/search/functions_15.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_15.js b/master/search/functions_15.js new file mode 100644 index 000000000..24f9c0899 --- /dev/null +++ b/master/search/functions_15.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['valid_0',['valid',['../classseastar_1_1shared__future.html#aa7c645fed1afdc0cd6be57483a083a66',1,'seastar::shared_future']]], + ['value_1',['value',['../classseastar_1_1metrics_1_1label__instance.html#ae4ea5f3f61146bd06e224ba28de488c1',1,'seastar::metrics::label_instance::value()'],['../classseastar_1_1program__options_1_1value.html#a195b1f4cc809718a04c3a679224348a5',1,'seastar::program_options::value::value(option_group &group, std::string name, std::optional< T > default_value, std::string description)'],['../classseastar_1_1program__options_1_1value.html#af6da847d833067fe2de8ad2367f47f5b',1,'seastar::program_options::value::value(option_group &group, std::string name, unused)'],['../classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4.html#ad0139a1631568020bb2f2f18cc298522',1,'seastar::program_options::value< std::monostate >::value(option_group &group, std::string name, std::string description)'],['../classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4.html#a595943bc4061c857c75493ff6828d4d0',1,'seastar::program_options::value< std::monostate >::value(option_group &group, std::string name, unused)']]], + ['value_5fof_2',['value_of',['../namespaceseastar.html#a110708e8c553d540525f4b7ad0499838',1,'seastar']]], + ['verify_5fmandatory_5fparams_3',['verify_mandatory_params',['../classseastar_1_1httpd_1_1handler__base.html#a550bd79ab5525f3087d03be7e01f7b9e',1,'seastar::httpd::handler_base']]], + ['visit_4',['visit',['../group__utilities.html#ga7542d7ac502fa07ff8de2463b4300b27',1,'seastar']]], + ['visit_5fgroup_5fend_5',['visit_group_end',['../classseastar_1_1program__options_1_1options__descriptor.html#ab139ebdb447e5325f3971ea521842cf3',1,'seastar::program_options::options_descriptor::visit_group_end()'],['../classseastar_1_1program__options_1_1options__mutator.html#a24ab00a351b6d399b66215e8f9ce7a58',1,'seastar::program_options::options_mutator::visit_group_end()=0']]], + ['visit_5fgroup_5fstart_6',['visit_group_start',['../classseastar_1_1program__options_1_1options__mutator.html#a6e560c7f9195e49b2d002279415f3086',1,'seastar::program_options::options_mutator::visit_group_start()'],['../classseastar_1_1program__options_1_1options__descriptor.html#ad29b7ff554fd4fba2992743bdf3bcd6f',1,'seastar::program_options::options_descriptor::visit_group_start(const std::string &name, bool used)=0']]], + ['visit_5fselection_5fvalue_7',['visit_selection_value',['../classseastar_1_1program__options_1_1options__descriptor.html#a5815735ecf37ec69d5a1c4f04097b05a',1,'seastar::program_options::options_descriptor::visit_selection_value()'],['../classseastar_1_1program__options_1_1options__mutator.html#a80be154ef5c3a1cefd634b0b35da2817',1,'seastar::program_options::options_mutator::visit_selection_value(const std::vector< std::string > &candidate_names, std::size_t &selected_candidate)=0']]], + ['visit_5fvalue_8',['visit_value',['../classseastar_1_1program__options_1_1options__mutator.html#afcd206ba5f4109a9c74617a9a5f9a6cd',1,'seastar::program_options::options_mutator::visit_value(bool &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#a17d784616f44a4797d4d21e2bf29e873',1,'seastar::program_options::options_mutator::visit_value(std::unordered_map< sstring, log_level > &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#ac0e212083e7f461909ab85036a749afa',1,'seastar::program_options::options_mutator::visit_value(memory::alloc_failure_kind &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#a18f9c54f03dec72966db0b8051698781',1,'seastar::program_options::options_mutator::visit_value(logger_ostream_type &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#ad15f37e5fab639308934e0f4b56be91f',1,'seastar::program_options::options_mutator::visit_value(logger_timestamp_style &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#ae5c2a3cfe238c0ec2492adfc032b86fa',1,'seastar::program_options::options_mutator::visit_value(log_level &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#a0b816d399c691692b608337d6b296c77',1,'seastar::program_options::options_mutator::visit_value(std::set< unsigned > &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#ae1bb8c8b3b02da0f75a147b981604622',1,'seastar::program_options::options_mutator::visit_value(std::string &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#a62f2dfb2e8dc1b312a37e12088d4dad1',1,'seastar::program_options::options_mutator::visit_value(double &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#a68a3e77c2656b08ead0407061b7e9185',1,'seastar::program_options::options_mutator::visit_value(float &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#a7d65cafd9f7e106df9c32e1d48becc5c',1,'seastar::program_options::options_mutator::visit_value(unsigned &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#addcd489ae9b8d6221afd9e6aab516a10',1,'seastar::program_options::options_mutator::visit_value(int &val)=0'],['../classseastar_1_1program__options_1_1options__mutator.html#a405067360d8d24aa3aab71fe463602eb',1,'seastar::program_options::options_mutator::visit_value()=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#a32e3124a6463c50439bfef585606d2ab',1,'seastar::program_options::options_descriptor::visit_value(const std::unordered_map< sstring, log_level > *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#ac4026ae8d0065cd7a355acaa7dc713ee',1,'seastar::program_options::options_descriptor::visit_value(const memory::alloc_failure_kind *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#a27e85173a26230cb8d403ace9290a186',1,'seastar::program_options::options_descriptor::visit_value(const logger_ostream_type *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#ae51b82e88f592efc13653f9615b44d7d',1,'seastar::program_options::options_descriptor::visit_value(const logger_timestamp_style *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#a657bcc55c80ff99c9801dcee04891b25',1,'seastar::program_options::options_descriptor::visit_value(const log_level *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#a02a2c0636e7932c891b1f73aaf496e3f',1,'seastar::program_options::options_descriptor::visit_value(const std::set< unsigned > *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#acc6967e6be44d12a83e57f56c150c221',1,'seastar::program_options::options_descriptor::visit_value(const std::string *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#a27e9ee7d4566b2eaa8caf1ffc249c700',1,'seastar::program_options::options_descriptor::visit_value(const double *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#a90062c9fe22f5418eda46255e3daef17',1,'seastar::program_options::options_descriptor::visit_value(const float *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#acc76ccdebe2630c8f89563a6d9640619',1,'seastar::program_options::options_descriptor::visit_value(const unsigned *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#acf1dcb19fa137de97877144927a43d03',1,'seastar::program_options::options_descriptor::visit_value(const int *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#af9e37963587a6333240c9f38e1d065b3',1,'seastar::program_options::options_descriptor::visit_value(const bool *default_val)=0'],['../classseastar_1_1program__options_1_1options__descriptor.html#ae07f8904b54b0a6498e528759946ec0d',1,'seastar::program_options::options_descriptor::visit_value()=0']]], + ['visit_5fvalue_5fmetadata_9',['visit_value_metadata',['../classseastar_1_1program__options_1_1options__descriptor.html#a5ff871d31ced341995d610627ea6985a',1,'seastar::program_options::options_descriptor::visit_value_metadata()'],['../classseastar_1_1program__options_1_1options__mutator.html#a17dd40fbe5f6c2a8041ad856e0441386',1,'seastar::program_options::options_mutator::visit_value_metadata()']]] +]; diff --git a/master/search/functions_16.html b/master/search/functions_16.html new file mode 100644 index 000000000..2452a6a1b --- /dev/null +++ b/master/search/functions_16.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_16.js b/master/search/functions_16.js new file mode 100644 index 000000000..d8604e793 --- /dev/null +++ b/master/search/functions_16.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['wait_0',['wait',['../classseastar_1_1condition__variable.html#a69703300a8e56a520269062f062aebda',1,'seastar::condition_variable::wait(std::chrono::time_point< Clock, Duration > timeout) noexcept'],['../classseastar_1_1condition__variable.html#a472036511ce19186d8b9a6b253b83271',1,'seastar::condition_variable::wait() noexcept'],['../classseastar_1_1experimental_1_1process.html#a55a4d51835793d1dd6fac0c83decc4bf',1,'seastar::experimental::process::wait()'],['../classseastar_1_1basic__semaphore.html#a73a29789c136c0ccc3a69517a91ff9f7',1,'seastar::basic_semaphore::wait(duration timeout, size_t nr=1) noexcept'],['../classseastar_1_1basic__semaphore.html#a07b4a958ebb11295203db8fda96a4a05',1,'seastar::basic_semaphore::wait(abort_source &as, size_t nr=1) noexcept'],['../classseastar_1_1basic__semaphore.html#a599504c4cbf82ecbd44c7bee64682474',1,'seastar::basic_semaphore::wait(time_point timeout, size_t nr=1) noexcept'],['../classseastar_1_1basic__semaphore.html#a30f599e383c15e039406500af0629083',1,'seastar::basic_semaphore::wait(size_t nr=1) noexcept'],['../classseastar_1_1future.html#a205a73ce01247cd7a8995569dedf78b1',1,'seastar::future::wait()'],['../classseastar_1_1experimental_1_1fsnotifier.html#ae58c5bff08967754d36d268749aac4bd',1,'seastar::experimental::fsnotifier::wait()'],['../classseastar_1_1condition__variable.html#a9a3099a56d8d91e48b31ad63ad2944cf',1,'seastar::condition_variable::wait(std::chrono::duration< Rep, Period > timeout, Pred &&pred) noexcept'],['../classseastar_1_1condition__variable.html#acfbb0f0ebdcb18950b26f6f0077465d0',1,'seastar::condition_variable::wait(std::chrono::time_point< Clock, Duration > timeout, Pred &&pred) noexcept'],['../classseastar_1_1condition__variable.html#a1d1c217051e83e2ce2c8c56596b89826',1,'seastar::condition_variable::wait(Pred &&pred) noexcept'],['../classseastar_1_1condition__variable.html#ae240a64c4c1ffa90ae2f0ee139b7ca93',1,'seastar::condition_variable::wait(std::chrono::duration< Rep, Period > timeout) noexcept']]], + ['wait_5finput_5fshutdown_1',['wait_input_shutdown',['../classseastar_1_1connected__socket.html#afe424da1f291fec342fd150d51421051',1,'seastar::connected_socket']]], + ['waiters_2',['waiters',['../classseastar_1_1basic__semaphore.html#a94b2090cfe27436309531d42ee0d2663',1,'seastar::basic_semaphore']]], + ['waiting_5ftask_3',['waiting_task',['../classseastar_1_1lambda__task.html#a699e26f1f722d9663f702d6847898260',1,'seastar::lambda_task::waiting_task()'],['../classseastar_1_1task.html#a317fecc9b307fe7f82403d04ccdc4c41',1,'seastar::task::waiting_task()'],['../classseastar_1_1coroutine_1_1experimental_1_1internal_1_1generator__unbuffered__promise.html#a084b0bd5ef486f96428e2956e7a29763',1,'seastar::coroutine::experimental::internal::generator_unbuffered_promise::waiting_task()'],['../structseastar_1_1coroutine_1_1switch__to.html#aac4c056f9de74753f4fb23b0baf1a2b4',1,'seastar::coroutine::switch_to::waiting_task()']]], + ['what_4',['what',['../classseastar_1_1named__semaphore__aborted.html#a0535cd9cefbd6a02584ef5d81f0265d3',1,'seastar::named_semaphore_aborted::what()'],['../classseastar_1_1sleep__aborted.html#a2db83f15db608027c7155ff86ba5d4fe',1,'seastar::sleep_aborted::what()'],['../classseastar_1_1broken__named__semaphore.html#a2fb0326d6c966e03f845eda7495f8613',1,'seastar::broken_named_semaphore::what()'],['../classseastar_1_1named__semaphore__timed__out.html#aec0373c87d04ca6ebc202ee4a6211b7d',1,'seastar::named_semaphore_timed_out::what()'],['../classseastar_1_1semaphore__timed__out.html#a3366d49a705afdb2dbf592675c3a921f',1,'seastar::semaphore_timed_out::what()'],['../classseastar_1_1broken__condition__variable.html#ad21d8bed417a7ba81cf8b7207a13464f',1,'seastar::broken_condition_variable::what()'],['../classseastar_1_1condition__variable__timed__out.html#aa464a5b2a577b52bcfe3b4720b1c5f47',1,'seastar::condition_variable_timed_out::what()'],['../classseastar_1_1broken__semaphore.html#a4823f771f89fce742cae5693aec9a69a',1,'seastar::broken_semaphore::what()'],['../classseastar_1_1semaphore__aborted.html#a479946b00c5a215b77de513b914f35bc',1,'seastar::semaphore_aborted::what()']]], + ['when_5',['when',['../classseastar_1_1condition__variable.html#a31154d5a115066cafa5881883835d542',1,'seastar::condition_variable::when() noexcept'],['../classseastar_1_1condition__variable.html#a17d716ed701de0789d0f826fd29187c4',1,'seastar::condition_variable::when(std::chrono::time_point< Clock, Duration > timeout) noexcept'],['../classseastar_1_1condition__variable.html#a9718958bff92a6b27375d92221d8dfb5',1,'seastar::condition_variable::when(std::chrono::duration< Rep, Period > timeout) noexcept'],['../classseastar_1_1condition__variable.html#a6fa3fbd7e5b01d1a2aa485ca96e979e6',1,'seastar::condition_variable::when(Pred &&pred) noexcept'],['../classseastar_1_1condition__variable.html#ac33ca8831eaebe26de645295cc879dbe',1,'seastar::condition_variable::when(std::chrono::time_point< Clock, Duration > timeout, Pred &&pred) noexcept'],['../classseastar_1_1condition__variable.html#a17dc523c82989f4cd0fce471e639c9ce',1,'seastar::condition_variable::when(std::chrono::duration< Rep, Period > timeout, Pred &&pred) noexcept']]], + ['when_5fall_6',['when_all',['../group__future-util.html#ga64cf7dbb446c6618955e23959ee79401',1,'seastar::when_all(FutOrFuncs &&... fut_or_funcs) noexcept'],['../group__future-util.html#ga96aa99a9ffadccc8a70971d8aff440bf',1,'seastar::when_all(FutureIterator begin, FutureIterator end) noexcept']]], + ['when_5fall_5fsucceed_7',['when_all_succeed',['../group__future-util.html#ga7e28110d0eab40f3ad5d46502b81f893',1,'seastar::when_all_succeed(std::vector< future< T > > &&futures) noexcept'],['../group__future-util.html#gafd759ba64a161713c7bdd23b973a885d',1,'seastar::when_all_succeed(FutureIterator begin, FutureIterator end) noexcept'],['../group__future-util.html#ga38a94c0a3e1ed93ff40960f985565053',1,'seastar::when_all_succeed(FutOrFuncs &&... fut_or_funcs) noexcept']]], + ['when_5fany_8',['when_any',['../namespaceseastar.html#a1b667c111c0429ed85a583e9d2429e4d',1,'seastar::when_any(FutOrFuncs &&... fut_or_funcs) noexcept'],['../namespaceseastar.html#acc349df24cae08c95c0957152b301a77',1,'seastar::when_any(FutureIterator begin, FutureIterator end) noexcept -> future< when_any_result< std::vector< std::decay_t< typename std::iterator_traits< FutureIterator >::value_type > > > >']]], + ['with_5fallocation_5ffailures_9',['with_allocation_failures',['../namespaceseastar_1_1memory.html#a1d586eb8e9aac6dcd2ad2cd686a51717',1,'seastar::memory']]], + ['with_5ffile_10',['with_file',['../group__fileio-module.html#gad153d18d9d9b8a859e2a13b7fa7c6289',1,'seastar']]], + ['with_5ffile_5fclose_5fon_5ffailure_11',['with_file_close_on_failure',['../group__fileio-module.html#ga6110ea7710f6a4bd6962257c7cd4ac30',1,'seastar']]], + ['with_5fgate_12',['with_gate',['../group__fiber-module.html#ga9efdca247c973194bd5f2cfcf7c78925',1,'seastar::gate']]], + ['with_5flock_13',['with_lock',['../group__fiber-module.html#ga67bfe8983445964e0c98afd6276edf19',1,'seastar::shared_mutex::with_lock()'],['../group__future-util.html#gab8fd3e3a0e5ba88fc4aa236494c1d00b',1,'seastar::with_lock(Lock &lock, Func &&func)']]], + ['with_5fscheduling_5fgroup_14',['with_scheduling_group',['../group__future-util.html#ga5f4c4444e9d92e64153713838607cbbc',1,'seastar']]], + ['with_5fshared_15',['with_shared',['../group__fiber-module.html#gab41d94cc9491377a0efc4186c35bb8ec',1,'seastar::shared_mutex']]], + ['with_5ftimeout_16',['with_timeout',['../group__future-util.html#ga90966b5862e5de249200714070a8db21',1,'seastar']]], + ['wrap_5fclient_17',['wrap_client',['../namespaceseastar_1_1tls.html#a24152a7cd28c5cedd55c8b9cebe2ea98',1,'seastar::tls::wrap_client(shared_ptr< certificate_credentials >, connected_socket &&, sstring name)'],['../namespaceseastar_1_1tls.html#a58652acc3d22cf21afe84cd1a487e54b',1,'seastar::tls::wrap_client(shared_ptr< certificate_credentials >, connected_socket &&, tls_options options={})']]], + ['write_18',['write',['../classseastar_1_1json_1_1formatter.html#a6f97669d3678deffed3a8ef5305f60b8',1,'seastar::json::formatter::write()'],['../classseastar_1_1pipe__writer.html#a2f039dc48be3d09ea3507762b1da399f',1,'seastar::pipe_writer::write()'],['../classseastar_1_1json_1_1formatter.html#a8f29cd5e9c79e6ef6239369a2b6f8c60',1,'seastar::json::formatter::write(output_stream< char > &s, const sstring &str)'],['../classseastar_1_1json_1_1formatter.html#ac8ddc599709af835f8e221cd04a6db52',1,'seastar::json::formatter::write(output_stream< char > &s, int n)'],['../classseastar_1_1json_1_1formatter.html#a4b39cf481feeea11ed1193959bd16666',1,'seastar::json::formatter::write(output_stream< char > &s, long n)'],['../classseastar_1_1json_1_1formatter.html#a68e96c17fd31a040f950b4c7c242bd7d',1,'seastar::json::formatter::write(output_stream< char > &s, float f)'],['../classseastar_1_1json_1_1formatter.html#a4565321b9768f6c807566434863fb249',1,'seastar::json::formatter::write(output_stream< char > &s, double d)'],['../classseastar_1_1json_1_1formatter.html#abf5fde1f25dbb81df19d417d7bf05bfa',1,'seastar::json::formatter::write(output_stream< char > &s, const char *str)'],['../classseastar_1_1json_1_1formatter.html#aaf19a28982509f9589dffa2dec9a2138',1,'seastar::json::formatter::write(output_stream< char > &s, bool d)'],['../classseastar_1_1json_1_1formatter.html#ae8233ee45a14fe9f1562ddfcebf0f0a4',1,'seastar::json::formatter::write(output_stream< char > &s, std::vector< Args... > vec)'],['../classseastar_1_1json_1_1formatter.html#a40fdfc48a86e88244dd702066a3e9820',1,'seastar::json::formatter::write(output_stream< char > &s, const date_time &d)'],['../classseastar_1_1json_1_1formatter.html#a4e1611d33e2160fbc73983bbd3bf6d0a',1,'seastar::json::formatter::write(output_stream< char > &s, unsigned long l)'],['../classseastar_1_1json_1_1jsonable.html#a1304ac52e876e803fba770bd8b464be6',1,'seastar::json::jsonable::write()'],['../structseastar_1_1json_1_1json__base.html#a7ba722fef818ece8a3337bffd4f41826',1,'seastar::json::json_base::write()'],['../structseastar_1_1json_1_1json__void.html#a57130109925b121ef9c5a29f28d1d7d7',1,'seastar::json::json_void::write()']]], + ['write_5fbody_19',['write_body',['../structseastar_1_1http_1_1reply.html#a0a03fbc0116a2832df3325605a5ba9e4',1,'seastar::http::reply::write_body()'],['../structseastar_1_1http_1_1request.html#a449f34d75f98bad15df910cdb17a0316',1,'seastar::http::request::write_body(const sstring &content_type, size_t len, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)'],['../structseastar_1_1http_1_1request.html#aa8d04cf2bb5cbbc089cb8fb97a864415',1,'seastar::http::request::write_body(const sstring &content_type, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)'],['../structseastar_1_1http_1_1request.html#a8b6de236f71ff5ec74bac52d233edd24',1,'seastar::http::request::write_body(const sstring &content_type, sstring content)'],['../structseastar_1_1http_1_1reply.html#af5a4a8868b3b9e7c36033b7d3d737cfb',1,'seastar::http::reply::write_body()']]], + ['write_5flock_20',['write_lock',['../classseastar_1_1basic__rwlock.html#a4398bb9b96ba08197aba88eba8e0d09d',1,'seastar::basic_rwlock']]], + ['write_5funlock_21',['write_unlock',['../classseastar_1_1basic__rwlock.html#afff43c7129ab24a675b5898368870119',1,'seastar::basic_rwlock']]] +]; diff --git a/master/search/functions_17.html b/master/search/functions_17.html new file mode 100644 index 000000000..6d0e7b5b7 --- /dev/null +++ b/master/search/functions_17.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_17.js b/master/search/functions_17.js new file mode 100644 index 000000000..1460b25dc --- /dev/null +++ b/master/search/functions_17.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['yield_0',['yield',['../classseastar_1_1thread.html#a83cd1c18fec245503dfa1c94acb0ca90',1,'seastar::thread::yield()'],['../group__future-util.html#gadf2b981c394d2c98ead6224782f7ec00',1,'seastar::yield()']]] +]; diff --git a/master/search/functions_18.html b/master/search/functions_18.html new file mode 100644 index 000000000..192d636a9 --- /dev/null +++ b/master/search/functions_18.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_18.js b/master/search/functions_18.js new file mode 100644 index 000000000..2e1d7c1b8 --- /dev/null +++ b/master/search/functions_18.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['_7edeferred_5fclose_0',['~deferred_close',['../classseastar_1_1deferred__close.html#a753d4c869b2b810f5b6d0efe9b03ca60',1,'seastar::deferred_close']]], + ['_7edeferred_5fstop_1',['~deferred_stop',['../classseastar_1_1deferred__stop.html#ad7e8928394dbc1b8e32737d4c5aeefbd',1,'seastar::deferred_stop']]], + ['_7edeleter_2',['~deleter',['../group__memory-module.html#ga99581e6ef59c72835ae9518b87d4e20a',1,'seastar::deleter']]], + ['_7eforeign_5fptr_3',['~foreign_ptr',['../classseastar_1_1foreign__ptr.html#ab8c06f30a042c17f1d07c35344730d05',1,'seastar::foreign_ptr']]], + ['_7ehandler_5fregistration_4',['~handler_registration',['../classseastar_1_1httpd_1_1handler__registration.html#a0454b7159261c7d2518940eff4bf2488',1,'seastar::httpd::handler_registration']]], + ['_7eholder_5',['~holder',['../classseastar_1_1gate_1_1holder.html#a333662a798624966bff6dcefd4bd3fec',1,'seastar::gate::holder']]], + ['_7ematch_5frule_6',['~match_rule',['../classseastar_1_1httpd_1_1match__rule.html#a2f1fafcc6d39398a2493644bbdba9cee',1,'seastar::httpd::match_rule']]], + ['_7eroutes_7',['~routes',['../classseastar_1_1httpd_1_1routes.html#ad9c74d0965c789af80effc259f3237f7',1,'seastar::httpd::routes']]], + ['_7erule_5fregistration_8',['~rule_registration',['../classseastar_1_1httpd_1_1rule__registration.html#a990c6489919f52425c9099dfdff5ce25',1,'seastar::httpd::rule_registration']]], + ['_7esharded_9',['~sharded',['../classseastar_1_1sharded.html#a18300a36d5bab90ba24612a5d8c6c6cf',1,'seastar::sharded']]], + ['_7ethread_10',['~thread',['../classseastar_1_1thread.html#a085b3825915b20f78c45532f684eb1d2',1,'seastar::thread']]], + ['_7etimer_11',['~timer',['../classseastar_1_1timer.html#a3305c74470aeca7ce56249210ef3248f',1,'seastar::timer']]] +]; diff --git a/master/search/functions_2.html b/master/search/functions_2.html new file mode 100644 index 000000000..3308c6515 --- /dev/null +++ b/master/search/functions_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_2.js b/master/search/functions_2.js new file mode 100644 index 000000000..2785d3a48 --- /dev/null +++ b/master/search/functions_2.js @@ -0,0 +1,39 @@ +var searchData= +[ + ['cancel_0',['cancel',['../classseastar_1_1timer.html#a46092e11ae75680ba4c61aacef5139b6',1,'seastar::timer::cancel()'],['../classseastar_1_1memory_1_1alloc__failure__injector.html#a62c96bd474ed61b23c626736d750b607',1,'seastar::memory::alloc_failure_injector::cancel()'],['../classseastar_1_1deferred__close.html#a569bbc28d791f32567c57869dfdd2c20',1,'seastar::deferred_close::cancel()'],['../classseastar_1_1deferred__stop.html#af26fd6f489611c9e4fcce0523152a1c6',1,'seastar::deferred_stop::cancel()'],['../classseastar_1_1io__intent.html#af2f8bbd1a9b4451a97325938169efe8e',1,'seastar::io_intent::cancel()']]], + ['cerr_1',['cerr',['../classseastar_1_1experimental_1_1process.html#a9d675ef4ac8e854450fcace49a8e9b28',1,'seastar::experimental::process']]], + ['check_2',['check',['../classseastar_1_1abort__source.html#a70ffd39416741d376179d1afa7212f2b',1,'seastar::abort_source::check()'],['../classseastar_1_1gate.html#a86cedfa226ca24ce92a174b803d3a487',1,'seastar::gate::check()']]], + ['check_5fdirect_5fio_5fsupport_3',['check_direct_io_support',['../group__fileio-module.html#ga5ff6ae57c02f02b32a1236921f4cb992',1,'seastar']]], + ['check_5ffor_5fio_5fimmediately_4',['check_for_io_immediately',['../group__future-util.html#ga7eaca9fadeb65faa01a45f843201a9f0',1,'seastar']]], + ['check_5fsession_5fis_5fresumed_5',['check_session_is_resumed',['../namespaceseastar_1_1tls.html#afe24ea5add1b01a34916838cef91ba73',1,'seastar::tls']]], + ['chmod_6',['chmod',['../group__fileio-module.html#ga481614a42f61599698f625357f55b564',1,'seastar']]], + ['cin_7',['cin',['../classseastar_1_1experimental_1_1process.html#ae2da0a8a38627a920e2eaf556910720f',1,'seastar::experimental::process']]], + ['class_5fsize_8',['class_size',['../classseastar_1_1slab__allocator.html#ac2fe62b319d50975cb033f6fad4af0de',1,'seastar::slab_allocator']]], + ['clear_9',['clear',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a241964865d152d0a883b3abd8264b1f1',1,'seastar::metrics::internal::approximate_exponential_histogram::clear()'],['../classseastar_1_1timer__set.html#a231e015a47e9c03e367c5d920c145aad',1,'seastar::timer_set::clear()'],['../classseastar_1_1metrics_1_1metric__groups.html#a44fb9ee80ba82e3144975a28f067d0bf',1,'seastar::metrics::metric_groups::clear()']]], + ['client_10',['client',['../classseastar_1_1http_1_1experimental_1_1client.html#a01fbdb61bc13be6c14dc91209ddf2df1',1,'seastar::http::experimental::client::client()'],['../classseastar_1_1rpc_1_1client.html#a27b3991b4320995809790f1d13ade59e',1,'seastar::rpc::client::client(const logger &l, void *s, const socket_address &addr, const socket_address &local={})'],['../classseastar_1_1rpc_1_1client.html#a4a7c2a2f2c2ad2c3f8eea799895e773c',1,'seastar::rpc::client::client(const logger &l, void *s, socket socket, const socket_address &addr, const socket_address &local={})'],['../classseastar_1_1rpc_1_1protocol_1_1client.html#a820c3554565ad35d87f6e507f8e02111',1,'seastar::rpc::protocol::client::client()'],['../classseastar_1_1http_1_1experimental_1_1client.html#ac9ec73c8a3a49466683ad7e0d0f6a831',1,'seastar::http::experimental::client::client(socket_address addr, shared_ptr< tls::certificate_credentials > creds, sstring host={})'],['../classseastar_1_1http_1_1experimental_1_1client.html#aefce59137008916b52fa8fdf792741c3',1,'seastar::http::experimental::client::client(socket_address addr)']]], + ['clone_11',['clone',['../classseastar_1_1temporary__buffer.html#a26c38d0189b0da6165a31ca6b3ecf97f',1,'seastar::temporary_buffer']]], + ['close_12',['close',['../classseastar_1_1net_1_1dns__resolver.html#ace1f06ec941c9aea4ebc82011bfa2376',1,'seastar::net::dns_resolver::close()'],['../classseastar_1_1net_1_1datagram__channel.html#aa1c54b31a7eca374a35e09e7379294c0',1,'seastar::net::datagram_channel::close()'],['../classseastar_1_1http_1_1experimental_1_1connection.html#ab8e9696c1413b1564b334362593806f2',1,'seastar::http::experimental::connection::close()'],['../classseastar_1_1file.html#a08dc17b92b941add68a7528c8ee8a69c',1,'seastar::file::close()'],['../classseastar_1_1gate.html#a5d8c0a7d962b9d90af15bab33903375e',1,'seastar::gate::close()'],['../classseastar_1_1input__stream.html#a3aff95b4e833ec2459ff276f9aa45b6f',1,'seastar::input_stream::close()'],['../classseastar_1_1output__stream.html#aae81650e7a32bd892fb04863eaaf65eb',1,'seastar::output_stream::close()'],['../classseastar_1_1http_1_1experimental_1_1client.html#a67d8a89b11ff9994fa4cb7d55c847f8d',1,'seastar::http::experimental::client::close()']]], + ['close_5fnow_13',['close_now',['../classseastar_1_1deferred__close.html#a250e1c5fe5ab4dc039addcb16976df5b',1,'seastar::deferred_close']]], + ['condition_5fvariable_14',['condition_variable',['../classseastar_1_1condition__variable.html#af45b4023e59b09e1a2c9ea55f55b12ab',1,'seastar::condition_variable']]], + ['configure_15',['configure',['../namespaceseastar_1_1metrics.html#a8d21f02491508ef9514912a716dc99de',1,'seastar::metrics']]], + ['connect_16',['connect',['../namespaceseastar_1_1tls.html#acce870cfc83d20112915d3821399434e',1,'seastar::tls::connect()'],['../group__networking-module.html#ga91668c69d29cc76460db1b17adbcf631',1,'seastar::connect(socket_address sa)'],['../group__networking-module.html#ga181725bbbe2a376b59e4621ddc77e4b0',1,'seastar::connect(socket_address sa, socket_address local, transport proto)'],['../namespaceseastar_1_1tls.html#ad0a927705a0acbd6477f6a58121c8eaf',1,'seastar::tls::connect()'],['../classseastar_1_1socket.html#a03a9a02afc357d2c35dadead89b45baa',1,'seastar::socket::connect()']]], + ['connected_5fsocket_17',['connected_socket',['../classseastar_1_1connected__socket.html#aeebe58d6f32d70afa454eb62d5aae3c8',1,'seastar::connected_socket::connected_socket(connected_socket &&cs) noexcept'],['../classseastar_1_1connected__socket.html#acd1048533706e1dfadca39b467178da4',1,'seastar::connected_socket::connected_socket() noexcept']]], + ['connection_18',['connection',['../classseastar_1_1http_1_1experimental_1_1connection.html#acc4a0e1a7045aa9431ce86ebf4443a91',1,'seastar::http::experimental::connection::connection()'],['../group__websocket.html#ga718508a331da5163aadcca73fb881b6b',1,'seastar::experimental::websocket::connection::connection()']]], + ['connections_5fnr_19',['connections_nr',['../classseastar_1_1http_1_1experimental_1_1client.html#a53e814c99560e6b9558f8a3226e1ce0e',1,'seastar::http::experimental::client']]], + ['consume_20',['consume',['../classseastar_1_1basic__semaphore.html#a87eb1328a16be3c9982705147df78c8f',1,'seastar::basic_semaphore::consume()'],['../classseastar_1_1queue.html#a3d03a1002995246ad7bbd2881d4e87bd',1,'seastar::queue::consume()']]], + ['consume_5funits_21',['consume_units',['../group__fiber-module.html#ga5086c2f4c44c1e0940e06b0c0130caa1',1,'seastar']]], + ['content_5freplace_22',['content_replace',['../classseastar_1_1httpd_1_1content__replace.html#a4e7bd598d231e7e396a04bf456a8a1c4',1,'seastar::httpd::content_replace']]], + ['copy_23',['copy',['../namespaceseastar.html#af74bd53e061a587d4f74de3419247c47',1,'seastar::copy()'],['../classseastar_1_1foreign__ptr.html#ad9b1d8e45e3f002a3a2ddd4048c6070e',1,'seastar::foreign_ptr::copy()']]], + ['count_24',['count',['../classseastar_1_1semaphore__units.html#a20d5be8a6a457bff4c0ae7064c49819d',1,'seastar::semaphore_units::count()'],['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a6a6de62c57e57e800344fed247a7ff45',1,'seastar::metrics::internal::approximate_exponential_histogram::count()']]], + ['cout_25',['cout',['../classseastar_1_1experimental_1_1process.html#af88faafd78c915d9d581de308723823d',1,'seastar::experimental::process']]], + ['create_26',['create',['../classseastar_1_1slab__allocator.html#af68f4772053336e2c2b3721a7321f2bd',1,'seastar::slab_allocator']]], + ['create_5fmetric_5fgroups_27',['create_metric_groups',['../metrics__api_8hh.html#a9969ec4e9bda0e9f38f86a43ec91c483',1,'seastar::metrics::impl']]], + ['create_5fscheduling_5fgroup_28',['create_scheduling_group',['../namespaceseastar.html#a3ba118daee6121819aa2f4b7d9399c1c',1,'seastar::create_scheduling_group(sstring name, sstring shortname, float shares) noexcept'],['../namespaceseastar.html#adafacb9a0a3fb17bad24d2263310cda9',1,'seastar::create_scheduling_group(sstring name, float shares) noexcept']]], + ['create_5fsmp_5fservice_5fgroup_29',['create_smp_service_group',['../namespaceseastar.html#af018d8dc408f9fc3318f03b43b24b129',1,'seastar']]], + ['create_5fwatch_30',['create_watch',['../classseastar_1_1experimental_1_1fsnotifier.html#a351f44c615065d0d313399a631d77ac2',1,'seastar::experimental::fsnotifier']]], + ['cref_31',['cref',['../group__utilities.html#ga69166d6b8f32c3084d3fbd5cd76608a8',1,'seastar']]], + ['cross_5fcpu_5ffrees_32',['cross_cpu_frees',['../classseastar_1_1memory_1_1statistics.html#a44141076e2c7ee94f3881b755865a340',1,'seastar::memory::statistics']]], + ['current_33',['current',['../classseastar_1_1basic__semaphore.html#a13fcf380b0130ebf5338042b6340f27c',1,'seastar::basic_semaphore']]], + ['current_5fexception_5fas_5ffuture_34',['current_exception_as_future',['../group__future-module.html#gaab69e9fd7a4e5f0a91c9f96eef1851ae',1,'seastar::current_exception_as_future() noexcept'],['../group__future-module.html#gae9582867583d21316c4dc295a0da3d5e',1,'seastar::current_exception_as_future() noexcept']]], + ['current_5fscheduling_5fgroup_35',['current_scheduling_group',['../namespaceseastar.html#a67d1258ebbd7b5a4f9c1488ac6ea96b3',1,'seastar']]] +]; diff --git a/master/search/functions_3.html b/master/search/functions_3.html new file mode 100644 index 000000000..43ac69761 --- /dev/null +++ b/master/search/functions_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_3.js b/master/search/functions_3.js new file mode 100644 index 000000000..dd0cbea82 --- /dev/null +++ b/master/search/functions_3.js @@ -0,0 +1,37 @@ +var searchData= +[ + ['default_5fisolate_5fconnection_0',['default_isolate_connection',['../group__rpc.html#ga4bcc6887c3b9f6cb6afc5f64b02e0868',1,'seastar::rpc']]], + ['default_5fsmp_5fservice_5fgroup_1',['default_smp_service_group',['../namespaceseastar.html#ad5a5b9924fe24aff9f3786f5706cf82c',1,'seastar']]], + ['defaulted_2',['defaulted',['../classseastar_1_1program__options_1_1selection__value.html#ab44d54a3079a3d7c1c2535569571b6d0',1,'seastar::program_options::selection_value::defaulted()'],['../classseastar_1_1program__options_1_1value.html#a46c2cbb9678f0e462cf4ba95f0c6733b',1,'seastar::program_options::value::defaulted()']]], + ['deferred_5fclose_3',['deferred_close',['../classseastar_1_1deferred__close.html#a711e21bf6697e42886df2480dc0db786',1,'seastar::deferred_close::deferred_close(deferred_close &&x) noexcept'],['../classseastar_1_1deferred__close.html#adaf57aec2be1f3de0be34e9e208ca87a',1,'seastar::deferred_close::deferred_close(Object &obj) noexcept']]], + ['deferred_5fstop_4',['deferred_stop',['../classseastar_1_1deferred__stop.html#aa4c844b39cef5c195ae43d23ea46ca10',1,'seastar::deferred_stop::deferred_stop(deferred_stop &&x) noexcept'],['../classseastar_1_1deferred__stop.html#a3025fb6d2f914cd294bd9ae58d1719e1',1,'seastar::deferred_stop::deferred_stop(Object &obj) noexcept']]], + ['definitely_5fsample_5',['definitely_sample',['../classsampler.html#a8f2da6016163acfc517db2a6f7c5b58c',1,'sampler']]], + ['del_5fcookie_6',['del_cookie',['../classseastar_1_1httpd_1_1routes.html#acca5ba5aa853a466828da35fea8216a9',1,'seastar::httpd::routes']]], + ['deleter_7',['deleter',['../classseastar_1_1deleter.html#a331645c176bc561a728dfd42eecb8458',1,'seastar::deleter::deleter() noexcept=default'],['../classseastar_1_1deleter.html#a6bb0a5eb0d84b65b169d77a1499e3c47',1,'seastar::deleter::deleter(deleter &&x) noexcept']]], + ['describe_8',['describe',['../classseastar_1_1program__options_1_1option__group.html#ab5b62e6d6d5df183098344aabc15288b',1,'seastar::program_options::option_group']]], + ['destroy_9',['destroy',['../classseastar_1_1foreign__ptr.html#ae22c46096a4d3090f171c21389bfc934',1,'seastar::foreign_ptr']]], + ['destroy_5fscheduling_5fgroup_10',['destroy_scheduling_group',['../namespaceseastar.html#aa62ddf7fbb801ec1f92d9f9b8d0a7eed',1,'seastar']]], + ['destroy_5fsmp_5fservice_5fgroup_11',['destroy_smp_service_group',['../namespaceseastar.html#ae0830bde63c7a9383d13f1b396e1a982',1,'seastar']]], + ['detach_12',['detach',['../classseastar_1_1input__stream.html#a762a710e39d69169a00112e184a29e5e',1,'seastar::input_stream::detach()'],['../classseastar_1_1output__stream.html#a0c44818d630b2f03829f45bd8da339ec',1,'seastar::output_stream::detach()']]], + ['directory_5fhandler_13',['directory_handler',['../classseastar_1_1httpd_1_1directory__handler.html#ac0e20c20b0df3460abaade933e07c94f',1,'seastar::httpd::directory_handler']]], + ['disable_5flarge_5fallocation_5fwarning_14',['disable_large_allocation_warning',['../namespaceseastar_1_1memory.html#a9af07da9a57aa714469426706c69d876',1,'seastar::memory']]], + ['discard_15',['discard',['../classseastar_1_1file.html#a976e4ddac3867fba16b0aa801d5e09e1',1,'seastar::file']]], + ['discard_5fresult_16',['discard_result',['../classseastar_1_1future.html#ae4a82e541cc18efbdb0903924276e9be',1,'seastar::future']]], + ['discover_17',['discover',['../classseastar_1_1net_1_1dhcp.html#a82700f830bfa1695e9865bd783e0b21c',1,'seastar::net::dhcp']]], + ['disk_5foverwrite_5fdma_5falignment_18',['disk_overwrite_dma_alignment',['../classseastar_1_1file.html#aadbd1fe3a8240f7b4e53f74c8444d834',1,'seastar::file']]], + ['disk_5fread_5fdma_5falignment_19',['disk_read_dma_alignment',['../classseastar_1_1file.html#a8174308a81e6a497624321e55cc11fb4',1,'seastar::file']]], + ['disk_5fread_5fmax_5flength_20',['disk_read_max_length',['../classseastar_1_1file.html#a5ca4c63b1c643bd070c3c99840048511',1,'seastar::file']]], + ['disk_5fwrite_5fdma_5falignment_21',['disk_write_dma_alignment',['../classseastar_1_1file.html#acbda81bf7a46eb870d452969a3f55728',1,'seastar::file']]], + ['disk_5fwrite_5fmax_5flength_22',['disk_write_max_length',['../classseastar_1_1file.html#ac9b737bd62458b69dde8f050d559ec30',1,'seastar::file']]], + ['dispatch_5frequests_23',['dispatch_requests',['../classseastar_1_1fair__queue.html#ab6d479bcdd9ee465be1ff485497072ac',1,'seastar::fair_queue']]], + ['dma_5fread_24',['dma_read',['../classseastar_1_1file.html#a613b764b90cbcb2d6208adc1cf9aea5c',1,'seastar::file::dma_read(uint64_t pos, std::vector< iovec > iov, io_intent *intent=nullptr) noexcept'],['../classseastar_1_1file.html#a1c77e3f78e9fc0f790a05b4d3c4b9ab2',1,'seastar::file::dma_read(uint64_t pos, size_t len, io_intent *intent=nullptr) noexcept'],['../classseastar_1_1file.html#ab7045cc2729b1bca1c8fdcea37e99960',1,'seastar::file::dma_read(uint64_t aligned_pos, CharType *aligned_buffer, size_t aligned_len, io_intent *intent=nullptr) noexcept']]], + ['dma_5fread_5fbulk_25',['dma_read_bulk',['../classseastar_1_1file.html#a2506894dd0f844c72d689e26eef504b2',1,'seastar::file']]], + ['dma_5fread_5fexactly_26',['dma_read_exactly',['../classseastar_1_1file.html#afe9844bf9bf93b9d3210b86b981e69cf',1,'seastar::file']]], + ['dma_5fwrite_27',['dma_write',['../classseastar_1_1file.html#a504d959f534c1b1d9de1502a7f6b3670',1,'seastar::file::dma_write(uint64_t pos, const CharType *buffer, size_t len, io_intent *intent=nullptr) noexcept'],['../classseastar_1_1file.html#a31907e002391fd2605d4087c1040304c',1,'seastar::file::dma_write(uint64_t pos, std::vector< iovec > iov, io_intent *intent=nullptr) noexcept']]], + ['do_5ffor_5feach_28',['do_for_each',['../group__future-util.html#gabaddceae4f57b8ecaf20b6c35e185734',1,'seastar::do_for_each(Iterator begin, Iterator end, AsyncAction action) noexcept'],['../group__future-util.html#ga0517e0f7decd3737d960e8443ce55664',1,'seastar::do_for_each(Container &c, AsyncAction action) noexcept']]], + ['do_5funtil_29',['do_until',['../group__future-util.html#ga3d11cfca2d48c5cb21821a3268673970',1,'seastar']]], + ['do_5fwith_30',['do_with',['../group__future-util.html#ga3983004a3a79b563b0609146d008ff6b',1,'seastar']]], + ['done_31',['done',['../structseastar_1_1http_1_1reply.html#a9fcb466a8c4b4fca08d6dce71f5c3252',1,'seastar::http::reply']]], + ['drop_32',['drop',['../classseastar_1_1httpd_1_1routes.html#afdae0a6321882339820227c06e864e6d',1,'seastar::httpd::routes']]], + ['dup_33',['dup',['../classseastar_1_1file.html#a73bcbe570f08db361719338178a36675',1,'seastar::file']]] +]; diff --git a/master/search/functions_4.html b/master/search/functions_4.html new file mode 100644 index 000000000..d12c2dfcb --- /dev/null +++ b/master/search/functions_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_4.js b/master/search/functions_4.js new file mode 100644 index 000000000..cdbf81d90 --- /dev/null +++ b/master/search/functions_4.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['empty_0',['empty',['../classseastar_1_1expiring__fifo.html#a20a8eb384fdacf08156aab607fcab4e8',1,'seastar::expiring_fifo::empty()'],['../classseastar_1_1queue.html#acc22c686650979c4fbdfa7ef914302b4',1,'seastar::queue::empty()'],['../classseastar_1_1temporary__buffer.html#a6e414c417ec7eea1d0af32e30b9c3159',1,'seastar::temporary_buffer::empty()'],['../classseastar_1_1timer__set.html#ae84405da6e95e7e50f9f0af33a28443d',1,'seastar::timer_set::empty()']]], + ['enable_1',['enable',['../namespaceseastar_1_1scollectd.html#a68631e3d63e8b7ecb119a782fe28c1a6',1,'seastar::scollectd']]], + ['end_2',['end',['../classseastar_1_1temporary__buffer.html#a7b77b0e679282a55f233d049b63e629c',1,'seastar::temporary_buffer']]], + ['ensure_5fspace_5ffor_5fwaiters_3',['ensure_space_for_waiters',['../classseastar_1_1basic__semaphore.html#a4a7f9ea75bb8b77550636401d8e91bde',1,'seastar::basic_semaphore']]], + ['enter_4',['enter',['../classseastar_1_1gate.html#ad1428b9acbe39dd1a4f8c318833599b2',1,'seastar::gate']]], + ['eof_5',['eof',['../classseastar_1_1input__stream.html#aaad512a115e4ab8b534c322d157a82f1',1,'seastar::input_stream']]], + ['error_5fcategory_6',['error_category',['../namespaceseastar_1_1tls.html#abe77c9cbfc5057a929aeae1d5d58f9b1',1,'seastar::tls']]], + ['execution_5fstage_7',['execution_stage',['../classseastar_1_1execution__stage.html#a7e0694b3677cbb6f78dcf07ba2c1294d',1,'seastar::execution_stage']]], + ['experimental_5flist_5fdirectory_8',['experimental_list_directory',['../classseastar_1_1file.html#ac9642a470af5d032ff1aa029ef2db936',1,'seastar::file']]], + ['expire_9',['expire',['../classseastar_1_1timer__set.html#ae2ca3a4973d95ea21af136abe84e20c0',1,'seastar::timer_set']]], + ['extract_5fsettings_10',['extract_settings',['../namespaceseastar_1_1log__cli.html#a5b523213c8a878fed2ac5930aa926135',1,'seastar::log_cli::extract_settings(const boost::program_options::variables_map &)'],['../namespaceseastar_1_1log__cli.html#a8f1dc98ad9de90572af199dc1403d4ed',1,'seastar::log_cli::extract_settings(const options &)']]] +]; diff --git a/master/search/functions_5.html b/master/search/functions_5.html new file mode 100644 index 000000000..7266236c2 --- /dev/null +++ b/master/search/functions_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_5.js b/master/search/functions_5.js new file mode 100644 index 000000000..7226d97cf --- /dev/null +++ b/master/search/functions_5.js @@ -0,0 +1,43 @@ +var searchData= +[ + ['fail_5fafter_0',['fail_after',['../classseastar_1_1memory_1_1alloc__failure__injector.html#a11630f8fc18b3a3ba9f8c3b2c3107213',1,'seastar::memory::alloc_failure_injector']]], + ['failed_1',['failed',['../classseastar_1_1future.html#a5a82ea2b06f018fa8fbf6a45511ffa72',1,'seastar::future::failed()'],['../classseastar_1_1shared__future.html#a99a5ea9b0af772b8bfad02f84476fb0c',1,'seastar::shared_future::failed()'],['../classseastar_1_1shared__promise.html#a271e5e7ff35c7580b1a5e4002ef67a18',1,'seastar::shared_promise::failed()'],['../classseastar_1_1memory_1_1alloc__failure__injector.html#a1fce2a092f654c6c7c85cf2bedc48663',1,'seastar::memory::alloc_failure_injector::failed()']]], + ['failed_5fallocations_2',['failed_allocations',['../classseastar_1_1memory_1_1statistics.html#a1bf3b292ec732cb79b7bb8938e58718f',1,'seastar::memory::statistics']]], + ['fair_5fqueue_3',['fair_queue',['../classseastar_1_1fair__queue.html#a55976dbc0641babb07df1a6d4df9d3af',1,'seastar::fair_queue']]], + ['fair_5fqueue_5fticket_4',['fair_queue_ticket',['../classseastar_1_1fair__queue__ticket.html#a184eb62ca7310b68b577d6d16b82db1c',1,'seastar::fair_queue_ticket']]], + ['fcntl_5',['fcntl',['../classseastar_1_1file.html#ad087e991042b92cda704930735833673',1,'seastar::file']]], + ['fcntl_5fshort_6',['fcntl_short',['../classseastar_1_1file.html#a58f9d8eb545276534dcc7eb1344b457d',1,'seastar::file']]], + ['file_7',['file',['../classseastar_1_1file.html#aef4789ec26f694711d6d94cf406d5b61',1,'seastar::file::file() noexcept'],['../classseastar_1_1file.html#a48fffa1fe72fd20fdf138dfcf8a5a4e3',1,'seastar::file::file(file_handle &&handle) noexcept'],['../classseastar_1_1file.html#af666b1e2d7b90922c7fe5239f37e1bc7',1,'seastar::file::file(const file &x)=default'],['../classseastar_1_1file.html#a7f10ba394cfe36491117965a1a8cdef8',1,'seastar::file::file(file &&x) noexcept']]], + ['file_5faccessible_8',['file_accessible',['../group__fileio-module.html#gab96da76804eb57f9de469be0e1c619d1',1,'seastar']]], + ['file_5fexists_9',['file_exists',['../group__fileio-module.html#ga5b3c83778c8c0f53ec532abf68cdd8b1',1,'seastar']]], + ['file_5fhandle_10',['file_handle',['../classseastar_1_1file__handle.html#a14a5b28e44662598c88f13b11975761e',1,'seastar::file_handle::file_handle(file_handle &&) noexcept'],['../classseastar_1_1file__handle.html#a678ffea20a515f3bc8c89e5926f41a39',1,'seastar::file_handle::file_handle(const file_handle &)']]], + ['file_5fhandler_11',['file_handler',['../classseastar_1_1httpd_1_1file__handler.html#aa97c95aba7c8097a15f32e2e848ff6b2',1,'seastar::httpd::file_handler']]], + ['file_5fsize_12',['file_size',['../group__fileio-module.html#ga495c053a6cfbf3aec6e371e4bc79fc1a',1,'seastar']]], + ['file_5fstat_13',['file_stat',['../group__fileio-module.html#gaf019a0fa580dc2effc05f53234b89dd0',1,'seastar']]], + ['file_5fsystem_5fat_14',['file_system_at',['../group__fileio-module.html#gaa792977175759ed309fff1cf7d55c0dc',1,'seastar']]], + ['file_5ftype_15',['file_type',['../group__fileio-module.html#gad99589025149a6565db5545eedb93922',1,'seastar']]], + ['finally_16',['finally',['../classseastar_1_1future.html#acb80c71ce4866f7d48894e97340801ce',1,'seastar::future']]], + ['find_5fbucket_5findex_17',['find_bucket_index',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#af7ad7aed2f77cd7693cf628a64333f21',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['find_5flast_5fof_18',['find_last_of',['../classseastar_1_1basic__sstring.html#acbcfe26639efa77d871a979f96f3414c',1,'seastar::basic_sstring']]], + ['flush_19',['flush',['../classseastar_1_1execution__stage.html#a9279dc5e02457b3d896e1f53b8d3a85b',1,'seastar::execution_stage::flush()'],['../classseastar_1_1file.html#a6f76ffea65fe5cd8cf842b1ee1270ce3',1,'seastar::file::flush()']]], + ['for_5fread_20',['for_read',['../classseastar_1_1basic__rwlock.html#a9f7932d14a6a368a8c90a98130d06d29',1,'seastar::basic_rwlock']]], + ['for_5fwrite_21',['for_write',['../classseastar_1_1basic__rwlock.html#a8538659f8a3408bf5a96c0505b8cc2ef',1,'seastar::basic_rwlock']]], + ['foreign_5fcross_5ffrees_22',['foreign_cross_frees',['../classseastar_1_1memory_1_1statistics.html#af186a1a468ef4c953ff158326e79d1c1',1,'seastar::memory::statistics']]], + ['foreign_5ffrees_23',['foreign_frees',['../classseastar_1_1memory_1_1statistics.html#a3badcb880a5f24a21c3a69791121d8a8',1,'seastar::memory::statistics']]], + ['foreign_5fmallocs_24',['foreign_mallocs',['../classseastar_1_1memory_1_1statistics.html#aad9f6aef72bc73467f9daf33e747e295',1,'seastar::memory::statistics']]], + ['foreign_5fptr_25',['foreign_ptr',['../classseastar_1_1foreign__ptr.html#ab8f59485c72c8da014f65ec95295f8bf',1,'seastar::foreign_ptr::foreign_ptr(PtrType value) noexcept(std::is_nothrow_move_constructible_v< PtrType >)'],['../classseastar_1_1foreign__ptr.html#ad240c184c7e9c5b83827f7409256c080',1,'seastar::foreign_ptr::foreign_ptr() noexcept(std::is_nothrow_default_constructible_v< PtrType >)'],['../classseastar_1_1foreign__ptr.html#a3908bdc78b06e1cf8c8f080d4e7bed1a',1,'seastar::foreign_ptr::foreign_ptr(std::nullptr_t) noexcept(std::is_nothrow_default_constructible_v< foreign_ptr >)'],['../classseastar_1_1foreign__ptr.html#abe0b9eaaf4251b249496282c6be21e89',1,'seastar::foreign_ptr::foreign_ptr(foreign_ptr &&other) noexcept(std::is_nothrow_move_constructible_v< PtrType >)=default']]], + ['format_26',['format',['../namespaceseastar.html#a67f610bd460716ea64fc99b43a637415',1,'seastar']]], + ['format_5fas_27',['format_as',['../namespaceseastar_1_1tls.html#a4e9aa881582158f2705fcaf79cd47a74',1,'seastar::tls']]], + ['format_5furl_28',['format_url',['../structseastar_1_1http_1_1request.html#a01d7279c4114e412aaef10c1b0b5d7fe',1,'seastar::http::request']]], + ['forward_5fto_29',['forward_to',['../classseastar_1_1future.html#a939d1f4da42f5c21715ce3d9382defc5',1,'seastar::future']]], + ['free_30',['free',['../classseastar_1_1slab__allocator.html#a3d20a458c9a85a4e270d19a7f788389d',1,'seastar::slab_allocator']]], + ['free_5fmemory_31',['free_memory',['../namespaceseastar_1_1memory.html#a0c92bd57e61960c5f568ebeb31ebccea',1,'seastar::memory::free_memory()'],['../classseastar_1_1memory_1_1statistics.html#abbe3ac1507a514c92dbab4302b591508',1,'seastar::memory::statistics::free_memory() const']]], + ['frees_32',['frees',['../classseastar_1_1memory_1_1statistics.html#aa4070c013a40a7989d8619384256842f',1,'seastar::memory::statistics']]], + ['from_5ffile_33',['from_file',['../classseastar_1_1tls_1_1dh__params.html#ad04256aec9b18edbad1679c47ab375a8',1,'seastar::tls::dh_params']]], + ['from_5ftuple_34',['from_tuple',['../structseastar_1_1futurize.html#a6c03f45fe76ff31c61f52681b8879863',1,'seastar::futurize::from_tuple(const value_type &value)'],['../structseastar_1_1futurize.html#a2ac8c2196cf13da54892c3aa70670c9b',1,'seastar::futurize::from_tuple(value_type &&value)'],['../structseastar_1_1futurize.html#ab640a81af5819caeb450ccfbaa8f5575',1,'seastar::futurize::from_tuple(const tuple_type &value)'],['../structseastar_1_1futurize.html#a248ab96f76a8fe990fab0ecddfb5e039',1,'seastar::futurize::from_tuple(tuple_type &&value)']]], + ['front_35',['front',['../classseastar_1_1basic__sstring.html#a6507bdad66d62996a365e3aa0709eea5',1,'seastar::basic_sstring::front() const noexcept'],['../classseastar_1_1basic__sstring.html#a6efaea5238742a63ce3244313d26598c',1,'seastar::basic_sstring::front() noexcept'],['../classseastar_1_1queue.html#a99ad2cb82b1444cf2d20266ab2db75b7',1,'seastar::queue::front()'],['../classseastar_1_1expiring__fifo.html#a8f07546ce9aa7fcd4ebb71512a6b2907',1,'seastar::expiring_fifo::front() const noexcept'],['../classseastar_1_1expiring__fifo.html#abff52845d3350c403e8510f621f90df5',1,'seastar::expiring_fifo::front() noexcept']]], + ['fs_5favail_36',['fs_avail',['../group__fileio-module.html#ga3631194fbb5e87deda5fc9c20c712033',1,'seastar']]], + ['fs_5ffree_37',['fs_free',['../group__fileio-module.html#ga5dc83e4534c9227406139c91f5db3c23',1,'seastar']]], + ['full_38',['full',['../classseastar_1_1queue.html#a1cc9b318aad8f68042a108cc2c8f724e',1,'seastar::queue']]], + ['future_39',['future',['../classseastar_1_1future.html#abe3ad61384e690666b0e7b325d46d88b',1,'seastar::future']]] +]; diff --git a/master/search/functions_6.html b/master/search/functions_6.html new file mode 100644 index 000000000..7f9fc45b6 --- /dev/null +++ b/master/search/functions_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_6.js b/master/search/functions_6.js new file mode 100644 index 000000000..76cef135b --- /dev/null +++ b/master/search/functions_6.js @@ -0,0 +1,51 @@ +var searchData= +[ + ['generate_5fmemory_5fdiagnostics_5freport_0',['generate_memory_diagnostics_report',['../namespaceseastar_1_1memory.html#a862d31943a98710575e7df67396f984b',1,'seastar::memory']]], + ['get_1',['get',['../classseastar_1_1future.html#a50bfeff0acccd2f365cce40f9954218c',1,'seastar::future::get()'],['../classseastar_1_1checked__ptr.html#ad75acc062fe0e6cfabd7a5cc99f0dfdf',1,'seastar::checked_ptr::get()'],['../classseastar_1_1httpd_1_1match__rule.html#a1846f10deaa2923011bacd0de6c39a11',1,'seastar::httpd::match_rule::get()'],['../classseastar_1_1foreign__ptr.html#a38fe2adbd683c524d6ce0d85bec66e4d',1,'seastar::foreign_ptr::get()'],['../classseastar_1_1temporary__buffer.html#ac63de48ff94355ecd7c07cd988cd679f',1,'seastar::temporary_buffer::get()']]], + ['get_5falt_5fname_5finformation_2',['get_alt_name_information',['../namespaceseastar_1_1tls.html#a968421c0a3be02b61999d1979b834996',1,'seastar::tls']]], + ['get_5fbucket_5flower_5flimit_3',['get_bucket_lower_limit',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a4d99f87037e8784a5eae44b7660a4d36',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['get_5fbucket_5fupper_5flimit_4',['get_bucket_upper_limit',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a2cacaa7a411d33254dc39cbed2e8ef69',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['get_5fclient_5faddress_5',['get_client_address',['../structseastar_1_1http_1_1request.html#a7b95b50ee0af4e505cdcc1c6e19dad47',1,'seastar::http::request']]], + ['get_5fcount_6',['get_count',['../classseastar_1_1gate.html#a69f05b40df82f06eaba0cfa798b81d76',1,'seastar::gate']]], + ['get_5fdefault_5fexception_7',['get_default_exception',['../classseastar_1_1abort__source.html#a3a177f92729996fb515b61cece7b7d89',1,'seastar::abort_source']]], + ['get_5fdn_5finformation_8',['get_dn_information',['../namespaceseastar_1_1tls.html#a8b4504eb12fdfb0993e1a8c7e3a2acf1',1,'seastar::tls']]], + ['get_5fexact_5fmatch_9',['get_exact_match',['../classseastar_1_1httpd_1_1routes.html#a6283e637dc9a953a33a2d131631266b3',1,'seastar::httpd::routes']]], + ['get_5fextension_10',['get_extension',['../classseastar_1_1httpd_1_1file__interaction__handler.html#ab7d7b9978357074142b17ac5527cd4e1',1,'seastar::httpd::file_interaction_handler']]], + ['get_5ffile_5flifetime_5fhint_11',['get_file_lifetime_hint',['../classseastar_1_1file.html#ae05a32113c89bfa83b62cad321367986',1,'seastar::file']]], + ['get_5ffuture_12',['get_future',['../group__future-module.html#ga2161021ff06a3deb3673b10d3963fbe5',1,'seastar::promise::get_future()'],['../classseastar_1_1shared__future.html#aaf056ec5cbf64347845513e356742788',1,'seastar::shared_future::get_future(time_point timeout=time_point::max()) const noexcept'],['../classseastar_1_1shared__future.html#a63c964b0893d9fdb6d0206a3860590b9',1,'seastar::shared_future::get_future(abort_source &as) const noexcept']]], + ['get_5fhandler_13',['get_handler',['../classseastar_1_1httpd_1_1routes.html#ad95f33786b67b01a9cc7e320a251e4e8',1,'seastar::httpd::routes']]], + ['get_5fheader_14',['get_header',['../structseastar_1_1http_1_1request.html#a327ce68bff0bbff06c8823edea54f83b',1,'seastar::http::request::get_header()'],['../structseastar_1_1http_1_1reply.html#a8ade746ba0cb78a618ad404df4dfd27e',1,'seastar::http::reply::get_header()']]], + ['get_5fheap_5fprofiling_5fsample_5frate_15',['get_heap_profiling_sample_rate',['../namespaceseastar_1_1memory.html#a0150191bed4177dca974f490b8d44f93',1,'seastar::memory']]], + ['get_5fhost_5fby_5faddr_16',['get_host_by_addr',['../classseastar_1_1net_1_1dns__resolver.html#a45d8a40e6460f7654c1e316563ad60e7',1,'seastar::net::dns_resolver']]], + ['get_5fhost_5fby_5fname_17',['get_host_by_name',['../classseastar_1_1net_1_1dns__resolver.html#a508934f829ca4dc6f5c45fec73508d05',1,'seastar::net::dns_resolver']]], + ['get_5finode_5flifetime_5fhint_18',['get_inode_lifetime_hint',['../classseastar_1_1file.html#a76e43c89d361a00751833b9fcf17519d',1,'seastar::file']]], + ['get_5fkeepalive_19',['get_keepalive',['../classseastar_1_1connected__socket.html#aafea9452ea06310a7dc198825c977238',1,'seastar::connected_socket']]], + ['get_5fkeepalive_5fparameters_20',['get_keepalive_parameters',['../classseastar_1_1connected__socket.html#ae3e161e7d39ee3e711dd36f244b8a06a',1,'seastar::connected_socket']]], + ['get_5flarge_5fallocation_5fwarning_5fthreshold_21',['get_large_allocation_warning_threshold',['../namespaceseastar_1_1memory.html#a17e2e9ff7c849acc4b9a4cb49c65e906',1,'seastar::memory']]], + ['get_5fnext_5ftimeout_22',['get_next_timeout',['../classseastar_1_1timer__set.html#a6bb87553e4462729c5832d67fcc2a19e',1,'seastar::timer_set']]], + ['get_5fnodelay_23',['get_nodelay',['../classseastar_1_1connected__socket.html#a8d750c3e2f77d8d85e353c74167b6202',1,'seastar::connected_socket']]], + ['get_5foptions_5fdescription_24',['get_options_description',['../namespaceseastar_1_1log__cli.html#a8a757c4e9dfb6603ad6566454b6d30cf',1,'seastar::log_cli']]], + ['get_5fowner_5fshard_25',['get_owner_shard',['../classseastar_1_1foreign__ptr.html#ab480a42ec8bacd09ef0734c7c07dc291',1,'seastar::foreign_ptr']]], + ['get_5fpath_5fparam_26',['get_path_param',['../structseastar_1_1http_1_1request.html#a26c918514214508fd06d44166ef44e38',1,'seastar::http::request']]], + ['get_5fprotocol_5fname_27',['get_protocol_name',['../structseastar_1_1http_1_1request.html#ae153fecd05275e96fdc2dc9549cb5549',1,'seastar::http::request']]], + ['get_5fquery_5fparam_28',['get_query_param',['../structseastar_1_1http_1_1request.html#ae0f849a8293591150f50f93c65f9b537',1,'seastar::http::request']]], + ['get_5freuseaddr_29',['get_reuseaddr',['../classseastar_1_1socket.html#ad80d13819962eff0962462240798e271',1,'seastar::socket']]], + ['get_5fsched_5fstats_30',['get_sched_stats',['../classseastar_1_1reactor.html#a4da41487c775504154efb70da8d44885',1,'seastar::reactor']]], + ['get_5fschema_31',['get_schema',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a40cb77fca5df5c48d63f138d570103d0',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['get_5fselected_5fcandidate_5fname_32',['get_selected_candidate_name',['../classseastar_1_1program__options_1_1selection__value.html#ac81ddf818ef45bf3651e1a533f0d5589',1,'seastar::program_options::selection_value']]], + ['get_5fselected_5fcandidate_5fopts_33',['get_selected_candidate_opts',['../classseastar_1_1program__options_1_1selection__value.html#ac2ddc3eea700212fcb9036cd0020c6c1',1,'seastar::program_options::selection_value::get_selected_candidate_opts() const'],['../classseastar_1_1program__options_1_1selection__value.html#a4eb10cbaba971256ff7c37be770f0864',1,'seastar::program_options::selection_value::get_selected_candidate_opts()']]], + ['get_5fserver_5faddress_34',['get_server_address',['../structseastar_1_1http_1_1request.html#adcd4004fe9cb1d85997a84fbb24320a6',1,'seastar::http::request']]], + ['get_5fsession_5fresume_5fdata_35',['get_session_resume_data',['../namespaceseastar_1_1tls.html#a7389b1aed7a2e8ef2fcd16aec2107c3d',1,'seastar::tls']]], + ['get_5fshared_5ffuture_36',['get_shared_future',['../classseastar_1_1shared__promise.html#a829129947b0cb5a15ca6922f95ce413b',1,'seastar::shared_promise::get_shared_future(time_point timeout=time_point::max()) const noexcept'],['../classseastar_1_1shared__promise.html#a9dbb284691dd5e6869d8f18dbf63939f',1,'seastar::shared_promise::get_shared_future(abort_source &as) const noexcept']]], + ['get_5fshared_5flock_37',['get_shared_lock',['../group__fiber-module.html#ga3c79f9530628bb32697905ad40a3179b',1,'seastar']]], + ['get_5fshares_38',['get_shares',['../classseastar_1_1scheduling__group.html#a01c8aa958c5b91f4722570f1a02cbcdb',1,'seastar::scheduling_group']]], + ['get_5fsockopt_39',['get_sockopt',['../classseastar_1_1connected__socket.html#a7a26747842e0b9758711b15ebb5245de',1,'seastar::connected_socket']]], + ['get_5fspecific_40',['get_specific',['../classseastar_1_1scheduling__group.html#af06ace9db9a79353988b5fb8c781ea69',1,'seastar::scheduling_group']]], + ['get_5fsrv_5frecords_41',['get_srv_records',['../classseastar_1_1net_1_1dns__resolver.html#a324987a1d7752150eeed06d7065c104b',1,'seastar::net::dns_resolver']]], + ['get_5fstats_42',['get_stats',['../classseastar_1_1inheriting__concrete__execution__stage.html#a3f6f8df13e74c11be637eccd3732f986',1,'seastar::inheriting_concrete_execution_stage::get_stats()'],['../classseastar_1_1execution__stage.html#a747a093ddfbd0728457af90bd381c823',1,'seastar::execution_stage::get_stats()']]], + ['get_5ftimeout_43',['get_timeout',['../classseastar_1_1timer.html#a023b75691ff4ed583bc03fe49e166637',1,'seastar::timer']]], + ['get_5funique_5flock_44',['get_unique_lock',['../group__fiber-module.html#ga500e43bc4ee43d84232176f1c386ee0d',1,'seastar']]], + ['get_5furl_45',['get_url',['../structseastar_1_1http_1_1request.html#ad9d6f5bcc30be8f02a320d875c185244',1,'seastar::http::request']]], + ['get_5fvalue_46',['get_value',['../classseastar_1_1program__options_1_1value.html#a3f20f489a302466d292fb9e70cfb8c3f',1,'seastar::program_options::value']]], + ['get_5fwrite_47',['get_write',['../classseastar_1_1temporary__buffer.html#acae89f29207c310305b77c99e6e80ea1',1,'seastar::temporary_buffer']]] +]; diff --git a/master/search/functions_7.html b/master/search/functions_7.html new file mode 100644 index 000000000..ad0f88be3 --- /dev/null +++ b/master/search/functions_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_7.js b/master/search/functions_7.js new file mode 100644 index 000000000..c9e10fa87 --- /dev/null +++ b/master/search/functions_7.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['handle_0',['handle',['../classseastar_1_1httpd_1_1api__registry__20.html#a0c0ccec2a3777a0ba882d269caa03ef2',1,'seastar::httpd::api_registry_20::handle()'],['../classseastar_1_1httpd_1_1directory__handler.html#a7d85264ac0449cec194f1ec0ccc73656',1,'seastar::httpd::directory_handler::handle()'],['../classseastar_1_1httpd_1_1file__handler.html#a4c4624825ddfb91db55c8c5508c556b6',1,'seastar::httpd::file_handler::handle()'],['../classseastar_1_1httpd_1_1function__handler.html#a90971f0d8a4fe6911135c15472dc368b',1,'seastar::httpd::function_handler::handle()'],['../classseastar_1_1httpd_1_1handler__base.html#a971c158608cf9507b2d65e6a1b7c6d78',1,'seastar::httpd::handler_base::handle()'],['../classseastar_1_1httpd_1_1routes.html#a793059deb65a8e8b24227aa7854d1996',1,'seastar::httpd::routes::handle()'],['../classseastar_1_1httpd_1_1api__registry.html#a08cd7d7032b7384df75fed07d2029293',1,'seastar::httpd::api_registry::handle()']]], + ['handle_5fexception_1',['handle_exception',['../classseastar_1_1future.html#a31bac5674ad78c48dba6455bf2f3aff6',1,'seastar::future']]], + ['handle_5fexception_5ftype_2',['handle_exception_type',['../classseastar_1_1future.html#a073280706c9379ec1120789132b86818',1,'seastar::future']]], + ['handle_5fsignal_3',['handle_signal',['../classseastar_1_1reactor.html#a5416935ef294ca51f252d428f65ccb4c',1,'seastar::reactor']]], + ['handler_5fregistration_4',['handler_registration',['../classseastar_1_1httpd_1_1handler__registration.html#ac84e7093d9b66dbdc5df415ee09872ad',1,'seastar::httpd::handler_registration']]], + ['has_5fblocked_5fconsumer_5',['has_blocked_consumer',['../classseastar_1_1queue.html#ae07bb45b964fba876a0d38567e4f52b1',1,'seastar::queue']]], + ['has_5fhandlers_6',['has_handlers',['../classseastar_1_1rpc_1_1protocol.html#a197731a86477497af43b8650b3327079',1,'seastar::rpc::protocol']]], + ['has_5fwaiters_7',['has_waiters',['../classseastar_1_1condition__variable.html#a2d21da29dd7339996c1441e4c2d6a279',1,'seastar::condition_variable']]], + ['hash_8',['hash',['../classseastar_1_1checked__ptr.html#a50fb79b8aae07a78d752ba34758a0ddf',1,'seastar::checked_ptr']]], + ['hold_9',['hold',['../classseastar_1_1gate.html#acede2f3029c9d88ab7125e33ce0452d3',1,'seastar::gate']]], + ['hold_5fread_5flock_10',['hold_read_lock',['../classseastar_1_1basic__rwlock.html#aa703d97200570e03894afc30f7d345a6',1,'seastar::basic_rwlock']]], + ['hold_5fwrite_5flock_11',['hold_write_lock',['../classseastar_1_1basic__rwlock.html#ac43c2f1e0e5615657be0d0963ad7f7c9',1,'seastar::basic_rwlock']]], + ['holder_12',['holder',['../classseastar_1_1gate_1_1holder.html#ad79b9fe8aae2faf54cb38c36854432e9',1,'seastar::gate::holder::holder() noexcept'],['../classseastar_1_1gate_1_1holder.html#a0061f014da3f35f88a764b3405bf79cb',1,'seastar::gate::holder::holder(gate &g)'],['../classseastar_1_1gate_1_1holder.html#aa2bfab030bf87f12aea8e1322e33dde2',1,'seastar::gate::holder::holder(const holder &x) noexcept'],['../classseastar_1_1gate_1_1holder.html#a7e999a418ab6b33fd5bd6cc13c7bdb17',1,'seastar::gate::holder::holder(holder &&x) noexcept']]] +]; diff --git a/master/search/functions_8.html b/master/search/functions_8.html new file mode 100644 index 000000000..ea7fa7423 --- /dev/null +++ b/master/search/functions_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_8.js b/master/search/functions_8.js new file mode 100644 index 000000000..8e0d61e17 --- /dev/null +++ b/master/search/functions_8.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['idle_5fconnections_5fnr_0',['idle_connections_nr',['../classseastar_1_1http_1_1experimental_1_1client.html#a1ccc7e4fa961d76893913af74c23ab6b',1,'seastar::http::experimental::client']]], + ['ignore_5fready_5ffuture_1',['ignore_ready_future',['../classseastar_1_1future.html#af25110829fc2dfc1d21e7d153743f416',1,'seastar::future']]], + ['in_2',['in',['../classseastar_1_1http_1_1experimental_1_1connection.html#aa0ac583bedd018d11e155c8741be9b27',1,'seastar::http::experimental::connection']]], + ['inheriting_5fconcrete_5fexecution_5fstage_3',['inheriting_concrete_execution_stage',['../classseastar_1_1inheriting__concrete__execution__stage.html#a2d4b548345baef1a3dd3befb9a4cc585',1,'seastar::inheriting_concrete_execution_stage']]], + ['input_4',['input',['../classseastar_1_1connected__socket.html#a331aa39e476b6f658f7d16ec277af23a',1,'seastar::connected_socket']]], + ['insert_5',['insert',['../classseastar_1_1basic__sstring.html#a66137e173a25ce58c5c7967c27487045',1,'seastar::basic_sstring::insert()'],['../classseastar_1_1timer__set.html#a109e6dc2889a72715906a38acd618099',1,'seastar::timer_set::insert()']]], + ['invoke_6',['invoke',['../structseastar_1_1futurize.html#af250889a32f11a21a54d3a15ab8aa76f',1,'seastar::futurize']]], + ['invoke_5fon_7',['invoke_on',['../classseastar_1_1sharded.html#ad52bb04af6b3a20e318b17062f7784a8',1,'seastar::sharded::invoke_on(unsigned id, smp_submit_to_options options, Func &&func, Args &&... args)'],['../classseastar_1_1sharded.html#a1e0b4e9ac9bf07f795039fd0a4627e61',1,'seastar::sharded::invoke_on(unsigned id, Func &&func, Args &&... args)']]], + ['invoke_5fon_5fall_8',['invoke_on_all',['../classseastar_1_1smp.html#ad5cb9ba3ad49821a618a96ccee38b37b',1,'seastar::smp::invoke_on_all(smp_submit_to_options options, Func &&func) noexcept'],['../classseastar_1_1smp.html#ab85dd7f081592f62a3e0e09fe553b8a7',1,'seastar::smp::invoke_on_all(Func &&func) noexcept'],['../classseastar_1_1sharded.html#af119f256acd237432860099480759f4e',1,'seastar::sharded::invoke_on_all(Func func, Args... args) noexcept'],['../classseastar_1_1sharded.html#a1cef49ae17cf7782282895a5ce83b8e9',1,'seastar::sharded::invoke_on_all(smp_submit_to_options options, Func func, Args... args) noexcept'],['../classseastar_1_1sharded.html#ad8cafb989fc24339f50736d77554ec48',1,'seastar::sharded::invoke_on_all(std::function< future<>(Service &)> func) noexcept'],['../classseastar_1_1sharded.html#a24e43c429a9f7f64d282c375d30c7269',1,'seastar::sharded::invoke_on_all(smp_submit_to_options options, std::function< future<>(Service &)> func) noexcept']]], + ['invoke_5fon_5fothers_9',['invoke_on_others',['../classseastar_1_1sharded.html#a557ee36dbf5b17ff16845f24ffbbf2dd',1,'seastar::sharded::invoke_on_others(smp_submit_to_options options, Func func, Args... args) noexcept'],['../classseastar_1_1sharded.html#ab6a3a223a178e2fd0d345cd31eb717c8',1,'seastar::sharded::invoke_on_others(Func func, Args... args) noexcept'],['../classseastar_1_1smp.html#a2addd75af4a58dac93fe385c2b298130',1,'seastar::smp::invoke_on_others(unsigned cpu_id, smp_submit_to_options options, Func func) noexcept'],['../classseastar_1_1smp.html#a66f34737209b097146a07fe52f4b175d',1,'seastar::smp::invoke_on_others(unsigned cpu_id, Func func) noexcept'],['../classseastar_1_1smp.html#a617fcde60995722435d19d4772a53114',1,'seastar::smp::invoke_on_others(Func func) noexcept']]], + ['ioctl_10',['ioctl',['../classseastar_1_1file.html#a15e4eeb9ae9a75fd0455246a7b070dc2',1,'seastar::file']]], + ['ioctl_5fshort_11',['ioctl_short',['../classseastar_1_1file.html#ac93a87910ccb6ce55068bd87d050f5b4',1,'seastar::file']]], + ['is_5fabort_5fon_5fallocation_5ffailure_12',['is_abort_on_allocation_failure',['../namespaceseastar_1_1memory.html#a736d66a55005b21df25d239f955f9bfd',1,'seastar::memory']]], + ['is_5fabort_5fon_5febadf_5fenabled_13',['is_abort_on_ebadf_enabled',['../namespaceseastar.html#ae37887bed24c66674d425af3a46799dc',1,'seastar']]], + ['is_5fclosed_14',['is_closed',['../classseastar_1_1gate.html#a317bcdf5665219c42f80c9ff59100770',1,'seastar::gate']]], + ['is_5fempty_15',['is_empty',['../classseastar_1_1metrics_1_1impl_1_1metric__value.html#a87b19e9c3da7cb1680fc6faf20e23e7d',1,'seastar::metrics::impl::metric_value']]], + ['is_5fverify_16',['is_verify',['../classseastar_1_1json_1_1json__base__element.html#a2dd57d8fb2603d16399fa4d4133534cf',1,'seastar::json::json_base_element::is_verify()'],['../structseastar_1_1json_1_1json__base.html#a2847dc82ba1d517a558e017ee6f43455',1,'seastar::json::json_base::is_verify()']]] +]; diff --git a/master/search/functions_9.html b/master/search/functions_9.html new file mode 100644 index 000000000..d831dc72f --- /dev/null +++ b/master/search/functions_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_9.js b/master/search/functions_9.js new file mode 100644 index 000000000..16136349a --- /dev/null +++ b/master/search/functions_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['join_0',['join',['../group__thread-module.html#ga3945d98e757fcdc25c193822b73fef9f',1,'seastar::thread']]], + ['json_5fbase_5felement_1',['json_base_element',['../classseastar_1_1json_1_1json__base__element.html#a078f32f3feeab754507938236a478c8c',1,'seastar::json::json_base_element']]], + ['json_5foperation_2',['json_operation',['../structseastar_1_1httpd_1_1json__operation.html#ae69bfd11391087b976a97290304c6be1',1,'seastar::httpd::json_operation::json_operation()'],['../structseastar_1_1httpd_1_1json__operation.html#a9472dce643c8702dbad975998fdbb431',1,'seastar::httpd::json_operation::json_operation(operation_type method, const sstring &nickname)']]] +]; diff --git a/master/search/functions_a.html b/master/search/functions_a.html new file mode 100644 index 000000000..7018fc6db --- /dev/null +++ b/master/search/functions_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_a.js b/master/search/functions_a.js new file mode 100644 index 000000000..b17175bb9 --- /dev/null +++ b/master/search/functions_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['keep_5fdoing_0',['keep_doing',['../group__future-util.html#ga5c4d6338e081ba5ee5d982ea7773769d',1,'seastar']]], + ['key_1',['key',['../classseastar_1_1metrics_1_1label__instance.html#a057063c45f1fba180aa3955e4f4aaae0',1,'seastar::metrics::label_instance']]], + ['kill_2',['kill',['../classseastar_1_1experimental_1_1process.html#a876f260e8b0036a9bbe39c416ee02ac8',1,'seastar::experimental::process']]] +]; diff --git a/master/search/functions_b.html b/master/search/functions_b.html new file mode 100644 index 000000000..c0660b003 --- /dev/null +++ b/master/search/functions_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_b.js b/master/search/functions_b.js new file mode 100644 index 000000000..014fdc8ae --- /dev/null +++ b/master/search/functions_b.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['label_0',['label',['../classseastar_1_1metrics_1_1label.html#aa7b7118feb1b3fa254c9c55f99537eb8',1,'seastar::metrics::label']]], + ['label_5finstance_1',['label_instance',['../classseastar_1_1metrics_1_1label__instance.html#ace823baab39b7697a3ee583b3afbe82c',1,'seastar::metrics::label_instance']]], + ['lambda_2',['lambda',['../classseastar_1_1coroutine_1_1lambda.html#a09881f7f91ab36e680930c96c7533644',1,'seastar::coroutine::lambda']]], + ['large_5fallocations_3',['large_allocations',['../classseastar_1_1memory_1_1statistics.html#a4a518e6c41ec8d0b02b5a50c6b4f38f3',1,'seastar::memory::statistics']]], + ['later_4',['later',['../group__future-util.html#gae9104fe28893794e962776d8a79c4324',1,'seastar']]], + ['layered_5ffile_5fimpl_5',['layered_file_impl',['../classseastar_1_1layered__file__impl.html#a7a8cf95c4f361038561c57af2bb1d25b',1,'seastar::layered_file_impl']]], + ['lazy_5fderef_6',['lazy_deref',['../namespaceseastar.html#aecc7f3ee11f76b0667a1eb97a2dde0a5',1,'seastar']]], + ['leave_7',['leave',['../classseastar_1_1gate.html#ad5c16b469c80b3ee87ef5d9bb94e2675',1,'seastar::gate']]], + ['link_5ffile_8',['link_file',['../group__fileio-module.html#gac54bac52eb8830c25703e1faf1dbda54',1,'seastar']]], + ['list_5fdirectory_9',['list_directory',['../classseastar_1_1file.html#a2aa464b83d383966f0a37b3189bd03be',1,'seastar::file']]], + ['listen_10',['listen',['../group__websocket.html#ga1912a8385ba19b97c7057b3df0122f8a',1,'seastar::experimental::websocket::server::listen(socket_address addr)'],['../group__websocket.html#ga971e79c47630a7104937daf343df20fb',1,'seastar::experimental::websocket::server::listen(socket_address addr, listen_options lo)'],['../namespaceseastar_1_1tls.html#ae62996df4a053aedc8544860d24762c6',1,'seastar::tls::listen()'],['../group__networking-module.html#ga5e56f9b882539331f2195aa3f018d08a',1,'seastar::listen(socket_address sa, listen_options opts)'],['../group__networking-module.html#ga08a994e9ad626edf808807238dc8a0c2',1,'seastar::listen(socket_address sa)']]], + ['live_5fobjects_11',['live_objects',['../classseastar_1_1memory_1_1statistics.html#a97135283d408e2c14c2eeecdfe07d7c7',1,'seastar::memory::statistics']]], + ['local_12',['local',['../classseastar_1_1sharded.html#a3f110028ecc127b0ad325653284d6b5a',1,'seastar::sharded::local() const noexcept'],['../classseastar_1_1sharded.html#a090d5158ace89c48cada63527954ef75',1,'seastar::sharded::local() noexcept']]], + ['local_5faddress_13',['local_address',['../classseastar_1_1server__socket.html#a15a62313222a172c78457e26e895d38c',1,'seastar::server_socket::local_address()'],['../classseastar_1_1connected__socket.html#a561a4ad256696d9bceb4e08d440d37d7',1,'seastar::connected_socket::local_address()']]], + ['local_5ffailure_5finjector_14',['local_failure_injector',['../namespaceseastar_1_1memory.html#a9b085dbb3af4005ea872262f162f4fee',1,'seastar::memory']]], + ['local_5fis_5finitialized_15',['local_is_initialized',['../classseastar_1_1sharded.html#a19ac7930e186446a0eeffc28a4541e73',1,'seastar::sharded']]], + ['local_5fshared_16',['local_shared',['../classseastar_1_1sharded.html#a4236dc613fd0fba9d12371d791adf4a4',1,'seastar::sharded']]], + ['lock_17',['lock',['../classseastar_1_1shared__mutex.html#a3aef1797967b983bdabbbe22787a0511',1,'seastar::shared_mutex']]], + ['lock_5fshared_18',['lock_shared',['../classseastar_1_1shared__mutex.html#ac4bdc3d6f6731b96ac0b6030b1d6f631',1,'seastar::shared_mutex']]], + ['locked_19',['locked',['../classseastar_1_1basic__rwlock.html#abf3e135f9983ef093c27d6ba2517a1e8',1,'seastar::basic_rwlock']]] +]; diff --git a/master/search/functions_c.html b/master/search/functions_c.html new file mode 100644 index 000000000..b642767e4 --- /dev/null +++ b/master/search/functions_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_c.js b/master/search/functions_c.js new file mode 100644 index 000000000..a7772314d --- /dev/null +++ b/master/search/functions_c.js @@ -0,0 +1,63 @@ +var searchData= +[ + ['make_0',['make',['../structseastar_1_1http_1_1request.html#a9e946968e5959936dca8cfd3a682195a',1,'seastar::http::request::make(sstring method, sstring host, sstring path)'],['../structseastar_1_1http_1_1request.html#aa656bbbcb08ab18eb3161722a20b2c75',1,'seastar::http::request::make(httpd::operation_type type, sstring host, sstring path)'],['../classseastar_1_1http_1_1experimental_1_1connection__factory.html#ac72157b59adc48996792f5f33babce27',1,'seastar::http::experimental::connection_factory::make()']]], + ['make_5fabsolute_1',['make_absolute',['../group__metrics.html#gad74ba618605afa5b9ad4857f72dd37a0',1,'seastar::metrics']]], + ['make_5fbacktraced_5fexception_5fptr_2',['make_backtraced_exception_ptr',['../namespaceseastar.html#ae8d4cf8e5edb3230f8cd5be1ffd737e8',1,'seastar']]], + ['make_5fbound_5fdatagram_5fchannel_3',['make_bound_datagram_channel',['../group__networking-module.html#gab2cc14d3d75b885c5a3af8d3cf4dbc87',1,'seastar']]], + ['make_5fclient_4',['make_client',['../classseastar_1_1rpc_1_1protocol.html#aa0fa06b9b1b27f9b12f65f0fc2f3a847',1,'seastar::rpc::protocol']]], + ['make_5fcounter_5',['make_counter',['../group__metrics.html#ga71e353f1f932cd001eb06237a97a8f9b',1,'seastar::metrics::make_counter(metric_name_type name, description d, std::vector< label_instance > labels, T &&val)'],['../group__metrics.html#gae07c74165ab4f2738a16dc8e40701473',1,'seastar::metrics::make_counter(metric_name_type name, description d, T &&val)'],['../group__metrics.html#gad8971c478a5524f7411847301b09af6d',1,'seastar::metrics::make_counter(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})']]], + ['make_5fcurrent_5fbytes_6',['make_current_bytes',['../group__metrics.html#gac7d330221ab1bd9c6cb25d73319d8bab',1,'seastar::metrics']]], + ['make_5fdeleter_7',['make_deleter',['../group__memory-module.html#gae36cce0e1479f90d26980123d648ff30',1,'seastar::deleter::make_deleter(deleter next, Object o)'],['../group__memory-module.html#ga8a3eb323c7e666c1dbe8f05f1eae9ec7',1,'seastar::deleter::make_deleter(Object o)']]], + ['make_5fderive_8',['make_derive',['../group__metrics.html#gabf355eaea56afaf1160338b93c9be5bf',1,'seastar::metrics::make_derive(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})'],['../group__metrics.html#ga72a3fbf8bcdf51ed43f6758e8cb7f4a7',1,'seastar::metrics::make_derive(metric_name_type name, description d, std::vector< label_instance > labels, T &&val)'],['../group__metrics.html#ga96c1f27cf5a7036c35fa08538afc4ac3',1,'seastar::metrics::make_derive(metric_name_type name, description d, T &&val)']]], + ['make_5fdirectory_9',['make_directory',['../group__fileio-module.html#gaf8677b370610efda74e075df2544f019',1,'seastar']]], + ['make_5fexception_5ffuture_10',['make_exception_future',['../group__future-module.html#ga80fbf1e5027b6a3acc126f133b584938',1,'seastar::make_exception_future(Exception &&ex) noexcept'],['../group__future-module.html#ga60a5421c944cd120a0c2c9000a3a8272',1,'seastar::make_exception_future(std::exception_ptr &&value) noexcept']]], + ['make_5fexecution_5fstage_11',['make_execution_stage',['../group__execution-stages.html#gaa89678cc474f0762c266953ef5c758c5',1,'seastar::make_execution_stage(const sstring &name, scheduling_group sg, Ret(Object::*fn)(Args...))'],['../group__execution-stages.html#ga670deeba65414630039868da3ce09250',1,'seastar::make_execution_stage(const sstring &name, Function &&fn)'],['../group__execution-stages.html#gaeb24d9990bf6b8ee2332d2a1652be304',1,'seastar::make_execution_stage(const sstring &name, scheduling_group sg, Function &&fn)']]], + ['make_5ffile_5fdata_5fsink_12',['make_file_data_sink',['../namespaceseastar.html#a19f21201afe13992f66a152573260bc0',1,'seastar']]], + ['make_5ffile_5finput_5fstream_13',['make_file_input_stream',['../namespaceseastar.html#a531d1622d0fa6b5d4a54b157f3bc8288',1,'seastar::make_file_input_stream(file file, file_input_stream_options={})'],['../namespaceseastar.html#ac990d9c7d95d86ff793c4eabf9bac571',1,'seastar::make_file_input_stream(file file, uint64_t offset, file_input_stream_options={})'],['../namespaceseastar.html#ab42e9db5e576c1fa2875b5f8d8f5d21f',1,'seastar::make_file_input_stream(file file, uint64_t offset, uint64_t len, file_input_stream_options options={})']]], + ['make_5ffile_5foutput_5fstream_14',['make_file_output_stream',['../namespaceseastar.html#a10c39658b60b6e650e17301accec5d1a',1,'seastar::make_file_output_stream(file file, uint64_t buffer_size=8192) noexcept'],['../namespaceseastar.html#aeb9fe82845fe3563e7280ab3291e7a4d',1,'seastar::make_file_output_stream(file file, file_output_stream_options options) noexcept']]], + ['make_5ffilesystem_5ferror_15',['make_filesystem_error',['../namespaceseastar.html#aac007772d15f464f72d507c6a0c959c2',1,'seastar::make_filesystem_error(const std::string &what, std::filesystem::path path, int error)'],['../namespaceseastar.html#a94a888bb6dc27e74f53a712b5603a3c0',1,'seastar::make_filesystem_error(const std::string &what, std::filesystem::path path1, std::filesystem::path path2, int error)']]], + ['make_5fforeign_16',['make_foreign',['../group__smp-module.html#ga66f11a099b72fc44ce40874fa9e535e2',1,'seastar::foreign_ptr']]], + ['make_5ffree_5fdeleter_17',['make_free_deleter',['../group__memory-module.html#gacd9ec07d8a04f1eac892b6dee2f1370e',1,'seastar::deleter::make_free_deleter(void *obj)'],['../group__memory-module.html#ga0e475d5973afd4c4a8103133bc2b9db0',1,'seastar::deleter::make_free_deleter(deleter next, void *obj)']]], + ['make_5fgauge_18',['make_gauge',['../group__metrics.html#ga605924bed731d8afd10441d50bb50df6',1,'seastar::metrics::make_gauge(metric_name_type name, description d, std::vector< label_instance > labels, T &&val)'],['../group__metrics.html#ga79ea0501bd2b4eeff4e04e2cc65f826c',1,'seastar::metrics::make_gauge(metric_name_type name, description d, T &&val)'],['../group__metrics.html#gacc7f22de184d239a726c14d943ebdcc4',1,'seastar::metrics::make_gauge(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})']]], + ['make_5fhistogram_19',['make_histogram',['../group__metrics.html#gaf7b5b5b8326ad56e88cc1fd94fa645ab',1,'seastar::metrics::make_histogram(metric_name_type name, description d, T &&val)'],['../group__metrics.html#gaa334f9e7327f48dcaf3e621691476d0c',1,'seastar::metrics::make_histogram(metric_name_type name, description d, std::vector< label_instance > labels, T &&val)'],['../group__metrics.html#gafe334f31b113b744a3d5a23a92d4f152',1,'seastar::metrics::make_histogram(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})']]], + ['make_5fobject_5fdeleter_20',['make_object_deleter',['../group__memory-module.html#ga4b4dc8940a76096aefb10a8815d6b091',1,'seastar::deleter::make_object_deleter(deleter d, T &&obj)'],['../group__memory-module.html#ga1534b761b13c8aa56a31edbd9736614b',1,'seastar::deleter::make_object_deleter(T &&obj)']]], + ['make_5fpipe_21',['make_pipe',['../group__interprocess-module.html#ga8f5153ec7adfc0e4df631a7020866e94',1,'seastar::experimental']]], + ['make_5fqueue_5flength_22',['make_queue_length',['../group__metrics.html#ga1b7784846ed5a12ce7528852bd5f2fe5',1,'seastar::metrics']]], + ['make_5fready_5ffuture_23',['make_ready_future',['../group__future-module.html#ga1276c421f1d371494803c41bdfdf71ab',1,'seastar']]], + ['make_5frequest_24',['make_request',['../classseastar_1_1http_1_1experimental_1_1client.html#a3f2cf52ff13609e6eea037b1b4847c16',1,'seastar::http::experimental::client::make_request()'],['../classseastar_1_1http_1_1experimental_1_1connection.html#aed78529bc405b77f490a3ea29d51a3fc',1,'seastar::http::experimental::connection::make_request()']]], + ['make_5fscheduling_5fgroup_5fkey_5fconfig_25',['make_scheduling_group_key_config',['../namespaceseastar.html#af4342d3f0f1757547e6a512d6d4eab3d',1,'seastar']]], + ['make_5fsocket_26',['make_socket',['../group__networking-module.html#ga36e41d350711e715366638466d45d8b8',1,'seastar']]], + ['make_5fsummary_27',['make_summary',['../group__metrics.html#gac92e8f2c8f8497bbff758b6f9181267d',1,'seastar::metrics']]], + ['make_5ftemporary_5fbuffer_28',['make_temporary_buffer',['../namespaceseastar.html#a606ed2bc89f419247c49d06eb91ef232',1,'seastar']]], + ['make_5ftmp_5fdir_29',['make_tmp_dir',['../namespaceseastar.html#a79f432769a2b17a370d1d4e6d582f231',1,'seastar']]], + ['make_5ftmp_5ffile_30',['make_tmp_file',['../namespaceseastar.html#a8163fdf34636b54911cbebfba760d503',1,'seastar']]], + ['make_5ftotal_5fbytes_31',['make_total_bytes',['../group__metrics.html#gab62d9a48be1fb8d1c393a7d6df4bf631',1,'seastar::metrics']]], + ['make_5ftotal_5foperations_32',['make_total_operations',['../group__metrics.html#ga869993c87742e53818eaffc54884d0b4',1,'seastar::metrics']]], + ['make_5fudp_5fchannel_33',['make_udp_channel',['../group__networking-module.html#ga14edad0c875a1a3c031f6d2dabfd63ff',1,'seastar::make_udp_channel()'],['../group__networking-module.html#gab506583863d4f6a0d18ea1e48bbe76fa',1,'seastar::make_udp_channel(const socket_address &local)']]], + ['make_5funbound_5fdatagram_5fchannel_34',['make_unbound_datagram_channel',['../group__networking-module.html#ga18498ed2e7622eaad5c2ca5484f6ade3',1,'seastar']]], + ['make_5fvisitor_35',['make_visitor',['../group__utilities.html#ga2ea3cafdeb41ff4c31beda2839cf2eaf',1,'seastar']]], + ['mallocs_36',['mallocs',['../classseastar_1_1memory_1_1statistics.html#a784827d2af511815b8c91a6268602a2a',1,'seastar::memory::statistics']]], + ['mandatory_37',['mandatory',['../classseastar_1_1httpd_1_1handler__base.html#a813fac886c22a339e1d1052c69797c84',1,'seastar::httpd::handler_base']]], + ['map_38',['map',['../classseastar_1_1sharded.html#a3f647fe7aa88c5d61e73953148171e11',1,'seastar::sharded']]], + ['map_5freduce_39',['map_reduce',['../classseastar_1_1sharded.html#a4a1f3ec18e3dbdb4216f45c540be5510',1,'seastar::sharded::map_reduce()'],['../group__future-util.html#gac3e26aa6f2dad010d28286203be16b82',1,'seastar::map_reduce(Iterator begin, Iterator end, Mapper &&mapper, Reducer &&r) -> typename reducer_traits< Reducer >::future_type'],['../group__future-util.html#ga51354660d09492158d6ea3afbbcacd18',1,'seastar::map_reduce(Iterator begin, Iterator end, Mapper &&mapper, Initial initial, Reduce reduce)'],['../group__future-util.html#gad0a691f9eed4a60e938a243d3514dc74',1,'seastar::map_reduce(Range &&range, Mapper &&mapper, Initial initial, Reduce reduce)'],['../classseastar_1_1sharded.html#abf9782b54f3a3e684a50058bda32e22c',1,'seastar::sharded::map_reduce(Reducer &&r, Func &&func, Args &&... args) -> typename reducer_traits< Reducer >::future_type']]], + ['map_5freduce0_40',['map_reduce0',['../classseastar_1_1sharded.html#acd7ad58469b65bd4e43a4e0f6d8722c6',1,'seastar::sharded::map_reduce0(Mapper map, Initial initial, Reduce reduce)'],['../classseastar_1_1sharded.html#a457be77e0c2e1f301ecd99a4674ff1a6',1,'seastar::sharded::map_reduce0(Mapper map, Initial initial, Reduce reduce) const']]], + ['map_5freduce_5fscheduling_5fgroup_5fspecific_41',['map_reduce_scheduling_group_specific',['../namespaceseastar.html#a50963f1bd02d655f4b957393d2370c23',1,'seastar']]], + ['match_42',['match',['../classseastar_1_1httpd_1_1matcher.html#acdf3b7dfe47de2f4ef30b3af790c0571',1,'seastar::httpd::matcher::match()'],['../classseastar_1_1httpd_1_1param__matcher.html#ac8c4f95d64d3c55a992d2267a881970e',1,'seastar::httpd::param_matcher::match()'],['../classseastar_1_1httpd_1_1str__matcher.html#ae806ec5c3f2fa61037471d7d2a76f5e4',1,'seastar::httpd::str_matcher::match()']]], + ['match_5frule_43',['match_rule',['../classseastar_1_1httpd_1_1match__rule.html#a890e6ac7bcf5a1e8ff84ce09a753c0ae',1,'seastar::httpd::match_rule']]], + ['max_44',['max',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a456f318965bd103fe039c0a9665d92c2',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['max_5fconcurrent_5ffor_5feach_45',['max_concurrent_for_each',['../group__future-util.html#gaee07006fd34fd6e38b72e629da1c7620',1,'seastar::max_concurrent_for_each(Range &&range, size_t max_concurrent, Func &&func) noexcept'],['../group__future-util.html#ga082a1e5d06988d26f01aa8e1d86e19d2',1,'seastar::max_concurrent_for_each(Iterator begin, Sentinel end, size_t max_concurrent, Func &&func) noexcept']]], + ['max_5fcounter_46',['max_counter',['../classseastar_1_1basic__semaphore.html#a0c27f5be57cacf4e4b81ca4a17f8db49',1,'seastar::basic_semaphore']]], + ['max_5fsize_47',['max_size',['../classseastar_1_1queue.html#a5d7c841e0f37fc4a256966b38ec029a5',1,'seastar::queue']]], + ['maybe_5fsample_48',['maybe_sample',['../classsampler.html#a00c8ced7cf0ea176531b56dd7ebbbf7a',1,'sampler']]], + ['maybe_5fyield_49',['maybe_yield',['../classseastar_1_1thread.html#a7b0335e4e9ad618b351554b39665cd29',1,'seastar::thread::maybe_yield()'],['../group__future-util.html#ga272066fe79441c0f854d2b753a0eea5a',1,'seastar::maybe_yield()']]], + ['mean_50',['mean',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a06d4878222d27f502a1d729bca31f5e4',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['memory_5fdma_5falignment_51',['memory_dma_alignment',['../classseastar_1_1file.html#a42a4cc862d721ca090ac5a3c1c3f0c5e',1,'seastar::file']]], + ['merge_52',['merge',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a72b4adabdbb7b44e18dcc72ced424df5',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['metric_5fgroup_53',['metric_group',['../classseastar_1_1metrics_1_1metric__group.html#ae806aae0c42ddaa1b9643d148586d0b4',1,'seastar::metrics::metric_group']]], + ['metric_5fgroups_54',['metric_groups',['../classseastar_1_1metrics_1_1metric__groups.html#a8cef17d13e8f7e791f94485b404c9e4a',1,'seastar::metrics::metric_groups']]], + ['min_55',['min',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a8d344b2c6ad00c1b180357c55646a23c',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['min_5fas_5fnative_5fhistogram_5fid_56',['min_as_native_histogram_id',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a68aae2dd88319a3476abadd331e7c165',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['min_5ffree_5fmemory_57',['min_free_memory',['../namespaceseastar_1_1memory.html#a252f7b05a03f6dd410951c1109f17ad9',1,'seastar::memory']]], + ['move_5fit_58',['move_it',['../group__future-module.html#gaf0818ecd7660d04710f08f0ee709268b',1,'seastar::promise']]], + ['mutate_59',['mutate',['../classseastar_1_1program__options_1_1option__group.html#a9436d883e8c98a2e9b852b57155fbc6b',1,'seastar::program_options::option_group']]] +]; diff --git a/master/search/functions_d.html b/master/search/functions_d.html new file mode 100644 index 000000000..16464b42d --- /dev/null +++ b/master/search/functions_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_d.js b/master/search/functions_d.js new file mode 100644 index 000000000..18da71a04 --- /dev/null +++ b/master/search/functions_d.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['name_0',['name',['../classseastar_1_1execution__stage.html#a0c52a4b29265448777d74028c3344f23',1,'seastar::execution_stage::name()'],['../classseastar_1_1metrics_1_1label.html#afac29459b94e77684fb428be94a856c4',1,'seastar::metrics::label::name()']]], + ['network_5finterfaces_1',['network_interfaces',['../classseastar_1_1network__stack.html#a6b03fb29717de7912860d877e56cbf1f',1,'seastar::network_stack::network_interfaces()'],['../classseastar_1_1net_1_1posix__network__stack.html#af9d3f508c34e29c1daea444c805b7740',1,'seastar::net::posix_network_stack::network_interfaces()']]], + ['normalize_2',['normalize',['../classseastar_1_1fair__queue__ticket.html#a63d94e7b30fc06f7c781f48325b1729c',1,'seastar::fair_queue_ticket']]], + ['not_5fempty_3',['not_empty',['../classseastar_1_1queue.html#a4d8297ef1f3e5fccb5f7cd9a96c05f6d',1,'seastar::queue']]], + ['not_5ffull_4',['not_full',['../classseastar_1_1queue.html#a12a8edf04831ce14e1bb2054d581d5dc',1,'seastar::queue']]], + ['notify_5frequest_5ffinished_5',['notify_request_finished',['../classseastar_1_1fair__queue.html#a689d7cc8b2770105fa5be73ff1659e96',1,'seastar::fair_queue']]], + ['now_6',['now',['../classseastar_1_1lowres__clock.html#a653be334402d3bf0ddc9d7f3d32df98a',1,'seastar::lowres_clock::now()'],['../classseastar_1_1lowres__system__clock.html#a33e247635e9bd2b0a1a6d46db446d13a',1,'seastar::lowres_system_clock::now()'],['../group__future-util.html#gaaf2f3bb42cb988d4a93ced1e8bf78d64',1,'seastar::now()']]] +]; diff --git a/master/search/functions_e.html b/master/search/functions_e.html new file mode 100644 index 000000000..e55bbf1bb --- /dev/null +++ b/master/search/functions_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_e.js b/master/search/functions_e.js new file mode 100644 index 000000000..83609b753 --- /dev/null +++ b/master/search/functions_e.js @@ -0,0 +1,33 @@ +var searchData= +[ + ['on_5fabort_0',['on_abort',['../classseastar_1_1abort__source_1_1subscription.html#a37c2c53647c8a29d2b1c99ac30574dcf',1,'seastar::abort_source::subscription']]], + ['on_5falloc_5fpoint_1',['on_alloc_point',['../classseastar_1_1memory_1_1alloc__failure__injector.html#a225ed8bedc07ae4e30fdc6472a26f791',1,'seastar::memory::alloc_failure_injector::on_alloc_point()'],['../namespaceseastar_1_1memory.html#a2bff02cb23c550cd501bd59d718c0afe',1,'seastar::memory::on_alloc_point()']]], + ['on_5ffatal_5finternal_5ferror_2',['on_fatal_internal_error',['../namespaceseastar.html#a4de0d52308ca71d10c9f2cb2e917f273',1,'seastar']]], + ['on_5finternal_5ferror_3',['on_internal_error',['../namespaceseastar.html#afdd60c9738b3dd98505c6cfdce23bf46',1,'seastar::on_internal_error(logger &logger, std::exception_ptr ex)'],['../namespaceseastar.html#a5d52f9d2e3435b3bf1f2480dd17d1815',1,'seastar::on_internal_error(logger &logger, std::string_view reason)']]], + ['on_5finternal_5ferror_5fnoexcept_4',['on_internal_error_noexcept',['../namespaceseastar.html#a2cce978b0a117e1d86d05d9e81827cde',1,'seastar']]], + ['open_5fdirectory_5',['open_directory',['../group__fileio-module.html#ga7498bd576259a0fae9df11783027e06a',1,'seastar::file']]], + ['open_5ffile_5fdma_6',['open_file_dma',['../group__fileio-module.html#ga1f6a704fa34458895885bc514ebf37d5',1,'seastar::file::open_file_dma(std::string_view name, open_flags flags, file_open_options options) noexcept'],['../group__fileio-module.html#gaa16add8cf99e35e461f37094eb6f4acc',1,'seastar::file::open_file_dma(std::string_view name, open_flags flags) noexcept']]], + ['operator_20bool_7',['operator bool',['../classseastar_1_1program__options_1_1value.html#ab5113571df604eb21b280b1fea2bcb45',1,'seastar::program_options::value::operator bool()'],['../classseastar_1_1program__options_1_1selection__value.html#acdfd81d5b9b1f6d6dc524960e3d30247',1,'seastar::program_options::selection_value::operator bool()'],['../classseastar_1_1program__options_1_1value_3_01std_1_1monostate_01_4.html#ae3c5796ee31bc54ebf7dc043ccc1ab32',1,'seastar::program_options::value< std::monostate >::operator bool()'],['../classseastar_1_1program__options_1_1option__group.html#a888c7df80ecfe7480e70c61bed36fa03',1,'seastar::program_options::option_group::operator bool()'],['../classseastar_1_1bool__class.html#a85101c5c29041802a147ed1ab8543b55',1,'seastar::bool_class::operator bool()'],['../classseastar_1_1connected__socket.html#a56ffe0a91f3a745eede7ce7988f5fbb5',1,'seastar::connected_socket::operator bool()'],['../classseastar_1_1checked__ptr.html#a9f5e8810e6a3507d3257cf9d9df1d8d5',1,'seastar::checked_ptr::operator bool()'],['../classseastar_1_1deleter.html#a04b07e7dcb254664ab001d7ee05ba306',1,'seastar::deleter::operator bool()'],['../classseastar_1_1expiring__fifo.html#a659dc293d90e19a0bdc7bf95b054bf5c',1,'seastar::expiring_fifo::operator bool()'],['../classseastar_1_1fair__queue__ticket.html#a2a0ae04a1538295bd8b8074c2df7e05f',1,'seastar::fair_queue_ticket::operator bool()'],['../classseastar_1_1file.html#a8f7d9a350192816a45bd54cc0dcc50c3',1,'seastar::file::operator bool()'],['../classseastar_1_1experimental_1_1fsnotifier.html#aa6b80eb4dd6191c21995ae07e65c059a',1,'seastar::experimental::fsnotifier::operator bool()'],['../classseastar_1_1semaphore__units.html#abe5f230ef9be20b46ed01e159ee51bc2',1,'seastar::semaphore_units::operator bool()'],['../classseastar_1_1foreign__ptr.html#a606f979c808c99b096411256f4d89840',1,'seastar::foreign_ptr::operator bool()'],['../classseastar_1_1temporary__buffer.html#a3efdd0696765d2e297e80e1a3864c36a',1,'seastar::temporary_buffer::operator bool()'],['../classseastar_1_1server__socket.html#abbcec6e90be4f15d92bf472ae0e992cd',1,'seastar::server_socket::operator bool()']]], + ['operator_20co_5fawait_8',['operator co_await',['../namespaceseastar.html#ac5b7486da3d3a5b860194c79a04f022b',1,'seastar']]], + ['operator_20future_5ftype_9',['operator future_type',['../classseastar_1_1shared__future.html#ab31f07d987f2ea47dc6d9320b81d9799',1,'seastar::shared_future']]], + ['operator_20watch_5ftoken_10',['operator watch_token',['../classseastar_1_1experimental_1_1fsnotifier_1_1watch.html#a76ecbdef14728ec2740b024512930f18',1,'seastar::experimental::fsnotifier::watch']]], + ['operator_21_3d_11',['operator!=',['../classseastar_1_1temporary__buffer.html#af95b74b842905aab9fdb7ea15e215ee7',1,'seastar::temporary_buffer']]], + ['operator_26_12',['operator&',['../group__fsnotifier.html#gad4f3c0468840ef36b3293ca8533982ed',1,'seastar::experimental']]], + ['operator_26_3d_13',['operator&=',['../group__fsnotifier.html#ga5996b677d47a1ddcc269d15113e2015b',1,'seastar::experimental']]], + ['operator_28_29_14',['operator()',['../structstd_1_1hash_3_01seastar_1_1checked__ptr_3_01T_01_4_01_4.html#afb31d01b10bf4bfb023875eb2c24dca9',1,'std::hash< seastar::checked_ptr< T > >::operator()()'],['../classseastar_1_1lazy__eval.html#a80a0af13c65d35cff0aa03554dc9857c',1,'seastar::lazy_eval::operator()() const'],['../classseastar_1_1lazy__eval.html#a8ceb73b597afa7bc5e9aa1e08a7d971a',1,'seastar::lazy_eval::operator()()'],['../classseastar_1_1json_1_1json__element.html#a656fd83d4f90c872db34fc10fabee258',1,'seastar::json::json_element::operator()()'],['../classseastar_1_1metrics_1_1label.html#aa02e0e95bdc77880ddc5ab5e97b73771',1,'seastar::metrics::label::operator()()'],['../classseastar_1_1inheriting__concrete__execution__stage.html#acdb70eb98f9783b39a7f6cf6b0c7f10f',1,'seastar::inheriting_concrete_execution_stage::operator()()'],['../classseastar_1_1concrete__execution__stage.html#a8ae90f114f11600f892b599d7e4a331c',1,'seastar::concrete_execution_stage::operator()()'],['../classseastar_1_1coroutine_1_1lambda.html#af4e4cb8987ddbc19419a87c9337a7fa8',1,'seastar::coroutine::lambda::operator()()'],['../structseastar_1_1default__null__deref__action.html#a5600f3eebed7d249b35b1f9dfa3ab290',1,'seastar::default_null_deref_action::operator()()']]], + ['operator_2a_15',['operator*',['../classseastar_1_1checked__ptr.html#a4c69cc2dc17a6a79a7f9ae6e1af57f06',1,'seastar::checked_ptr::operator*() const'],['../classseastar_1_1checked__ptr.html#a19dd0f8091c9029f9720bc94b7b428eb',1,'seastar::checked_ptr::operator*()'],['../classseastar_1_1foreign__ptr.html#affc9ac20bfc9caf7e8bd49ece12f8f35',1,'seastar::foreign_ptr::operator*()']]], + ['operator_2a_3d_16',['operator*=',['../classseastar_1_1metrics_1_1internal_1_1approximate__exponential__histogram.html#a840e16536e2d510315df23166e13c974',1,'seastar::metrics::internal::approximate_exponential_histogram']]], + ['operator_2b_17',['operator+',['../structseastar_1_1metrics_1_1histogram.html#a8bf413ccdcbac0e956392690a19b8677',1,'seastar::metrics::histogram::operator+(const histogram &h) const'],['../structseastar_1_1metrics_1_1histogram.html#a2c26af80e171892515a538db101df6ec',1,'seastar::metrics::histogram::operator+(histogram &&h) const']]], + ['operator_2b_3d_18',['operator+=',['../structseastar_1_1metrics_1_1histogram.html#af1db16ca09ceea6a8b890ecf0ef1595f',1,'seastar::metrics::histogram::operator+=()'],['../classseastar_1_1fair__queue__ticket.html#a927d294f9d29e64deb2a0e843e0d9987',1,'seastar::fair_queue_ticket::operator+=(fair_queue_ticket desc) noexcept']]], + ['operator_2d_3d_19',['operator-=',['../classseastar_1_1fair__queue__ticket.html#a23f8d38850bee72926452ec97585313e',1,'seastar::fair_queue_ticket']]], + ['operator_2d_3e_20',['operator->',['../classseastar_1_1foreign__ptr.html#a5c90bd440233341cea507fbdbdd8aa8d',1,'seastar::foreign_ptr::operator->()'],['../classseastar_1_1checked__ptr.html#a32fe1a69545831150402da032b6b4a1f',1,'seastar::checked_ptr::operator->()'],['../classseastar_1_1checked__ptr.html#aa47f21e17cf68e32f2915150fc72388e',1,'seastar::checked_ptr::operator->() const']]], + ['operator_3c_3c_21',['operator<<',['../namespacestd.html#a00b4ce612ea3dc99695a52649ddb9472',1,'std']]], + ['operator_3d_22',['operator=',['../classseastar_1_1server__socket.html#aa63649753fb7530b998c6ec22711b792',1,'seastar::server_socket::operator=()'],['../classseastar_1_1file.html#a3092d1fe25fe99a976497c5fcb48fa4d',1,'seastar::file::operator=(const file &x) noexcept=default'],['../classseastar_1_1file.html#a1f7d5f9c4487c657647341242cc60726',1,'seastar::file::operator=(file &&x) noexcept=default'],['../classseastar_1_1file__handle.html#ac59c4f9e35e850badbd0eb2750c8dda0',1,'seastar::file_handle::operator=(const file_handle &)'],['../classseastar_1_1file__handle.html#a6fd732bfc3a12ae532b53a123f93b129',1,'seastar::file_handle::operator=(file_handle &&) noexcept'],['../classseastar_1_1deferred__stop.html#afb1aa22bedf2b0e34af851da83aa069b',1,'seastar::deferred_stop::operator=()'],['../classseastar_1_1deferred__close.html#a2618fec71263aecbd4a399805e39a785',1,'seastar::deferred_close::operator=()'],['../classseastar_1_1socket.html#adda308a26b373113f00321341420f7c3',1,'seastar::socket::operator=()'],['../classseastar_1_1connected__socket.html#ab5cd88471e0fea6a7edb8beb0b3ec139',1,'seastar::connected_socket::operator=()'],['../classseastar_1_1json_1_1json__list.html#a3b1a45421ef8a3e2c99f051e0114f9a9',1,'seastar::json::json_list::operator=()'],['../classseastar_1_1json_1_1json__element.html#a5237654e932fb6d187adc37d5005ac4f',1,'seastar::json::json_element::operator=(const C &new_value)'],['../classseastar_1_1json_1_1json__element.html#a7f0aaa18fab6e566086841db4b63dd1b',1,'seastar::json::json_element::operator=(const T &new_value)'],['../classseastar_1_1thread.html#acad2d3ddf73dc38e3684a532c8d6ab4f',1,'seastar::thread::operator=()'],['../classseastar_1_1temporary__buffer.html#a934209027c5d3a1aafffb0c97fd4a9c9',1,'seastar::temporary_buffer::operator=()'],['../classseastar_1_1foreign__ptr.html#ad3db1c99e4600b2aace4f0dec0ea76c7',1,'seastar::foreign_ptr::operator=()'],['../classseastar_1_1basic__semaphore.html#a847e5751b4092ac84f659575b27ad032',1,'seastar::basic_semaphore::operator=()'],['../classseastar_1_1gate_1_1holder.html#afef43bc447ce99b301db413a52dfe188',1,'seastar::gate::holder::operator=(holder &&x) noexcept'],['../classseastar_1_1gate_1_1holder.html#a5513177ff3417c023b52ddca1affe3a7',1,'seastar::gate::holder::operator=(const holder &x) noexcept']]], + ['operator_3d_3d_23',['operator==',['../classseastar_1_1temporary__buffer.html#a81579eac40ca011fa63cb57b7b87f285',1,'seastar::temporary_buffer::operator==()'],['../classseastar_1_1fair__queue__ticket.html#a1d9816112c35d7f0d7c2110825c6cc64',1,'seastar::fair_queue_ticket::operator==()']]], + ['operator_5b_5d_24',['operator[]',['../classseastar_1_1temporary__buffer.html#ad2f0577539b7abe22096383df687a137',1,'seastar::temporary_buffer']]], + ['operator_7c_25',['operator|',['../group__fsnotifier.html#ga56f7cf5f275cfa3675c7a8fee50f60da',1,'seastar::experimental']]], + ['operator_7c_3d_26',['operator|=',['../group__fsnotifier.html#gabf8d646c7affb4cd4f67f4ba7d47c59e',1,'seastar::experimental']]], + ['option_5fgroup_27',['option_group',['../classseastar_1_1program__options_1_1option__group.html#ab410b1eccf6d0cd56f65a1d3185680b7',1,'seastar::program_options::option_group::option_group(option_group *parent, std::string name, unused)'],['../classseastar_1_1program__options_1_1option__group.html#abbf4c7aa4a8e91d67ac0993eac9eb509',1,'seastar::program_options::option_group::option_group(option_group *parent, std::string name)']]], + ['or_5fterminate_28',['or_terminate',['../classseastar_1_1future.html#ae89c68b8e980afd9a381c229b986086c',1,'seastar::future']]], + ['output_29',['output',['../classseastar_1_1connected__socket.html#a168f11dbc02b0b313e63dae1b145bb89',1,'seastar::connected_socket']]] +]; diff --git a/master/search/functions_f.html b/master/search/functions_f.html new file mode 100644 index 000000000..07020a3f0 --- /dev/null +++ b/master/search/functions_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/functions_f.js b/master/search/functions_f.js new file mode 100644 index 000000000..64b9e45f0 --- /dev/null +++ b/master/search/functions_f.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['parallel_5ffor_5feach_0',['parallel_for_each',['../group__future-util.html#gac44a19efd432701bcbd2437cb804e1c9',1,'seastar']]], + ['param_5fmatcher_1',['param_matcher',['../classseastar_1_1httpd_1_1param__matcher.html#a6c71a816dafa3ca1fc5c40762347fb10',1,'seastar::httpd::param_matcher']]], + ['parse_5flog_5flevel_2',['parse_log_level',['../namespaceseastar_1_1log__cli.html#a5488b3f8dd15a43a9f3fe996c88745a6',1,'seastar::log_cli']]], + ['parse_5fquery_5fparam_3',['parse_query_param',['../structseastar_1_1http_1_1request.html#a237a0d057bf94dbf3279c8714a1f0c0c',1,'seastar::http::request']]], + ['path_5fdescription_4',['path_description',['../structseastar_1_1httpd_1_1path__description.html#aee9d21102547d3fd1a4133798f5fa44b',1,'seastar::httpd::path_description::path_description()=default'],['../structseastar_1_1httpd_1_1path__description.html#abc7ee73e3c7a101acb963ec1ce5e2419',1,'seastar::httpd::path_description::path_description(const sstring &path, operation_type method, const sstring &nickname, const std::vector< std::pair< sstring, bool > > &path_parameters, const std::vector< sstring > &mandatory_params)'],['../structseastar_1_1httpd_1_1path__description.html#a062d628394c1146a3f0b62f7537cd999',1,'seastar::httpd::path_description::path_description(const sstring &path, operation_type method, const sstring &nickname, const std::initializer_list< path_part > &path_parameters, const std::vector< sstring > &mandatory_params)']]], + ['pause_5fsampling_5',['pause_sampling',['../classsampler.html#af295f34f184e8966732765beb061f468',1,'sampler']]], + ['poll_6',['poll',['../classseastar_1_1execution__stage.html#ad5c524e82030b20968b916ad9875d15d',1,'seastar::execution_stage']]], + ['pop_7',['pop',['../classseastar_1_1queue.html#a20c7194a0f2f12441d81c4bbf0cc9ed9',1,'seastar::queue']]], + ['pop_5feventually_8',['pop_eventually',['../classseastar_1_1queue.html#a59e7257f4088f44394b7795c8fc4b9d0',1,'seastar::queue']]], + ['pop_5ffront_9',['pop_front',['../classseastar_1_1expiring__fifo.html#a3cad027f072f55ca0e05e3c197daacd4',1,'seastar::expiring_fifo']]], + ['prefix_10',['prefix',['../classseastar_1_1temporary__buffer.html#afe97805b39a1e33123ce178e88178a7d',1,'seastar::temporary_buffer']]], + ['print_5favailable_5floggers_11',['print_available_loggers',['../namespaceseastar_1_1log__cli.html#aa2b717df8d7c51b0fc5cfe34d4637d6e',1,'seastar::log_cli']]], + ['print_5fslab_5fclasses_12',['print_slab_classes',['../classseastar_1_1slab__allocator.html#ae0df7f3d59ac387d57bc1b8d49c2a29a',1,'seastar::slab_allocator']]], + ['process_13',['process',['../group__websocket.html#ga15caecfb94aaf3bd34231a4bae9b801d',1,'seastar::experimental::websocket::connection']]], + ['promise_14',['promise',['../classseastar_1_1promise.html#ae0346287b4a3497fe8e0143dc3867d4b',1,'seastar::promise']]], + ['push_15',['push',['../classseastar_1_1queue.html#a0d0ab729ca1b2c32dbc57047da2c2d86',1,'seastar::queue::push()'],['../classseastar_1_1json_1_1json__list.html#a65828b5f656eea124a829c41914b9013',1,'seastar::json::json_list::push()']]], + ['push_5fback_16',['push_back',['../classseastar_1_1expiring__fifo.html#a4eddab6f2d061928b2d37b3fa662baa2',1,'seastar::expiring_fifo::push_back(const T &payload)'],['../classseastar_1_1expiring__fifo.html#ad3e6f64b8c9f04ecc30541e2e99509cb',1,'seastar::expiring_fifo::push_back(T &&payload)'],['../classseastar_1_1expiring__fifo.html#aefaa970ea650c1d0caa404aa55426016',1,'seastar::expiring_fifo::push_back(T &&payload, time_point timeout)']]], + ['push_5feventually_17',['push_eventually',['../classseastar_1_1queue.html#af57e4cc21e7998ea2a7068da4e241bd1',1,'seastar::queue']]], + ['push_5fstatic_5fpath_5fpart_18',['push_static_path_part',['../structseastar_1_1httpd_1_1path__description.html#a3b719697eeb0ed92ea0e6ed10317df31',1,'seastar::httpd::path_description']]], + ['pushmandatory_5fparam_19',['pushmandatory_param',['../structseastar_1_1httpd_1_1path__description.html#aea7655728e2212b3eb4fb47f8682e4c1',1,'seastar::httpd::path_description']]], + ['pushparam_20',['pushparam',['../structseastar_1_1httpd_1_1path__description.html#af34af61d1e8c4bcc6d63171e0f842381',1,'seastar::httpd::path_description']]], + ['put_21',['put',['../classseastar_1_1httpd_1_1routes.html#ac49ef7373855766335ce8e943daddf11',1,'seastar::httpd::routes']]] +]; diff --git a/master/search/groups_0.html b/master/search/groups_0.html new file mode 100644 index 000000000..76e992a94 --- /dev/null +++ b/master/search/groups_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/groups_0.js b/master/search/groups_0.js new file mode 100644 index 000000000..c00ac9fb7 --- /dev/null +++ b/master/search/groups_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['adds_20a_20_2fmetrics_20endpoint_20that_20returns_20prometheus_20metrics_0',['adds a /metrics endpoint that returns prometheus metrics',['../group__add__prometheus__routes.html',1,'']]] +]; diff --git a/master/search/groups_1.html b/master/search/groups_1.html new file mode 100644 index 000000000..38ad74be8 --- /dev/null +++ b/master/search/groups_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/groups_1.js b/master/search/groups_1.js new file mode 100644 index 000000000..5ea188cbb --- /dev/null +++ b/master/search/groups_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['execution_20stages_0',['Execution Stages',['../group__execution-stages.html',1,'']]] +]; diff --git a/master/search/groups_2.html b/master/search/groups_2.html new file mode 100644 index 000000000..8152426da --- /dev/null +++ b/master/search/groups_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/groups_2.js b/master/search/groups_2.js new file mode 100644 index 000000000..e9b37907e --- /dev/null +++ b/master/search/groups_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['fibers_0',['Fibers',['../group__fiber-module.html',1,'']]], + ['file_20and_20stream_20utilities_1',['File and Stream Utilities',['../group__fileio-util.html',1,'']]], + ['file_20input_2foutput_2',['File Input/Output',['../group__fileio-module.html',1,'']]], + ['filesystem_20notifier_3',['FileSystem Notifier',['../group__fsnotifier.html',1,'']]], + ['future_20utilities_4',['Future Utilities',['../group__future-util.html',1,'']]], + ['futures_20and_20promises_5',['Futures and Promises',['../group__future-module.html',1,'']]] +]; diff --git a/master/search/groups_3.html b/master/search/groups_3.html new file mode 100644 index 000000000..c73a37c19 --- /dev/null +++ b/master/search/groups_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/groups_3.js b/master/search/groups_3.js new file mode 100644 index 000000000..467e45a03 --- /dev/null +++ b/master/search/groups_3.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['implementation_20overview_0',['Implementation overview',['../group__future-module-impl.html',1,'']]], + ['interprocess_20communication_1',['Interprocess Communication',['../group__interprocess-module.html',1,'']]], + ['io_2dmodule_2',['Io-module',['../group__io-module.html',1,'']]] +]; diff --git a/master/search/groups_4.html b/master/search/groups_4.html new file mode 100644 index 000000000..d42aefb9f --- /dev/null +++ b/master/search/groups_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/groups_4.js b/master/search/groups_4.js new file mode 100644 index 000000000..3d66614d1 --- /dev/null +++ b/master/search/groups_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['logging_0',['Logging',['../group__logging.html',1,'']]] +]; diff --git a/master/search/groups_5.html b/master/search/groups_5.html new file mode 100644 index 000000000..cf1d61ac3 --- /dev/null +++ b/master/search/groups_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/groups_5.js b/master/search/groups_5.js new file mode 100644 index 000000000..d7f587315 --- /dev/null +++ b/master/search/groups_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['memory_20management_0',['Memory management',['../group__memory-module.html',1,'']]], + ['metrics_1',['Metrics',['../group__metrics.html',1,'']]], + ['metrics_20type_20definitions_2',['metrics type definitions',['../group__metrics__types.html',1,'']]], + ['multicore_3',['Multicore',['../group__smp-module.html',1,'']]] +]; diff --git a/master/search/groups_6.html b/master/search/groups_6.html new file mode 100644 index 000000000..16ccc00ed --- /dev/null +++ b/master/search/groups_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/groups_6.js b/master/search/groups_6.js new file mode 100644 index 000000000..d1ac07d2c --- /dev/null +++ b/master/search/groups_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['networking_0',['Networking',['../group__networking-module.html',1,'']]] +]; diff --git a/master/search/groups_7.html b/master/search/groups_7.html new file mode 100644 index 000000000..3e24bea1b --- /dev/null +++ b/master/search/groups_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/groups_7.js b/master/search/groups_7.js new file mode 100644 index 000000000..63d732443 --- /dev/null +++ b/master/search/groups_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['posix_20support_0',['POSIX Support',['../group__posix-support.html',1,'']]], + ['program_20options_1',['Program Options',['../group__program-options.html',1,'']]] +]; diff --git a/master/search/groups_8.html b/master/search/groups_8.html new file mode 100644 index 000000000..7c2c28677 --- /dev/null +++ b/master/search/groups_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/groups_8.js b/master/search/groups_8.js new file mode 100644 index 000000000..2b1c910d9 --- /dev/null +++ b/master/search/groups_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rpc_20_2d_20remote_20procedure_20call_20framework_0',['rpc - remote procedure call framework',['../group__rpc.html',1,'']]] +]; diff --git a/master/search/groups_9.html b/master/search/groups_9.html new file mode 100644 index 000000000..c7d679922 --- /dev/null +++ b/master/search/groups_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/groups_9.js b/master/search/groups_9.js new file mode 100644 index 000000000..88217bb96 --- /dev/null +++ b/master/search/groups_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['seastar_20threads_0',['Seastar threads',['../group__thread-module.html',1,'']]] +]; diff --git a/master/search/groups_a.html b/master/search/groups_a.html new file mode 100644 index 000000000..7abe5e775 --- /dev/null +++ b/master/search/groups_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/groups_a.js b/master/search/groups_a.js new file mode 100644 index 000000000..0593e1132 --- /dev/null +++ b/master/search/groups_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['timers_0',['Timers',['../group__timers.html',1,'']]] +]; diff --git a/master/search/groups_b.html b/master/search/groups_b.html new file mode 100644 index 000000000..b46e046db --- /dev/null +++ b/master/search/groups_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/groups_b.js b/master/search/groups_b.js new file mode 100644 index 000000000..ee24cd107 --- /dev/null +++ b/master/search/groups_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['utilities_0',['Utilities',['../group__utilities.html',1,'']]] +]; diff --git a/master/search/groups_c.html b/master/search/groups_c.html new file mode 100644 index 000000000..aefa81dab --- /dev/null +++ b/master/search/groups_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/groups_c.js b/master/search/groups_c.js new file mode 100644 index 000000000..83651f9cf --- /dev/null +++ b/master/search/groups_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['websocket_0',['WebSocket',['../group__websocket.html',1,'']]] +]; diff --git a/master/search/mag_sel.svg b/master/search/mag_sel.svg new file mode 100644 index 000000000..03626f64a --- /dev/null +++ b/master/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/master/search/namespaces_0.html b/master/search/namespaces_0.html new file mode 100644 index 000000000..b2d68fee6 --- /dev/null +++ b/master/search/namespaces_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/namespaces_0.js b/master/search/namespaces_0.js new file mode 100644 index 000000000..0db5f0223 --- /dev/null +++ b/master/search/namespaces_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['impl_0',['impl',['../namespaceimpl.html',1,'']]] +]; diff --git a/master/search/namespaces_1.html b/master/search/namespaces_1.html new file mode 100644 index 000000000..a4b1530e6 --- /dev/null +++ b/master/search/namespaces_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/namespaces_1.js b/master/search/namespaces_1.js new file mode 100644 index 000000000..4424569f9 --- /dev/null +++ b/master/search/namespaces_1.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['alien_0',['alien',['../namespaceseastar_1_1alien.html',1,'seastar']]], + ['log_5fcli_1',['log_cli',['../namespaceseastar_1_1log__cli.html',1,'seastar']]], + ['memory_2',['memory',['../namespaceseastar_1_1memory.html',1,'seastar']]], + ['metrics_3',['metrics',['../namespaceseastar_1_1metrics.html',1,'seastar']]], + ['net_4',['net',['../namespaceseastar_1_1net.html',1,'seastar']]], + ['scollectd_5',['scollectd',['../namespaceseastar_1_1scollectd.html',1,'seastar']]], + ['seastar_6',['seastar',['../namespaceseastar.html',1,'']]], + ['std_7',['std',['../namespacestd.html',1,'']]], + ['tls_8',['tls',['../namespaceseastar_1_1tls.html',1,'seastar']]] +]; diff --git a/master/search/nomatches.html b/master/search/nomatches.html new file mode 100644 index 000000000..2b9360b6b --- /dev/null +++ b/master/search/nomatches.html @@ -0,0 +1,13 @@ + + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/master/search/pages_0.html b/master/search/pages_0.html new file mode 100644 index 000000000..198171258 --- /dev/null +++ b/master/search/pages_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/pages_0.js b/master/search/pages_0.js new file mode 100644 index 000000000..b44ef02c2 --- /dev/null +++ b/master/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['compatibility_0',['Compatibility',['../md_compatibility.html',1,'']]] +]; diff --git a/master/search/pages_1.html b/master/search/pages_1.html new file mode 100644 index 000000000..320e4a48f --- /dev/null +++ b/master/search/pages_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/pages_1.js b/master/search/pages_1.js new file mode 100644 index 000000000..4d858458c --- /dev/null +++ b/master/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['deprecated_20list_0',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/master/search/pages_2.html b/master/search/pages_2.html new file mode 100644 index 000000000..396bc1803 --- /dev/null +++ b/master/search/pages_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/pages_2.js b/master/search/pages_2.js new file mode 100644 index 000000000..e6dcdeeed --- /dev/null +++ b/master/search/pages_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['rpc_20protocol_0',['RPC protocol',['../md_rpc.html',1,'']]], + ['rpc_20provided_20compression_20infrastructure_1',['RPC provided compression infrastructure',['../md_rpc_compression.html',1,'']]], + ['rpc_20streaming_2',['RPC streaming',['../md_rpc_streaming.html',1,'']]] +]; diff --git a/master/search/pages_3.html b/master/search/pages_3.html new file mode 100644 index 000000000..7a708562c --- /dev/null +++ b/master/search/pages_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/pages_3.js b/master/search/pages_3.js new file mode 100644 index 000000000..de6a10e67 --- /dev/null +++ b/master/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['seastar_0',['Seastar',['../index.html',1,'']]] +]; diff --git a/master/search/related_0.html b/master/search/related_0.html new file mode 100644 index 000000000..9ec0faeb3 --- /dev/null +++ b/master/search/related_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/related_0.js b/master/search/related_0.js new file mode 100644 index 000000000..6cb039160 --- /dev/null +++ b/master/search/related_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['create_5fscheduling_5fgroup_0',['create_scheduling_group',['../classseastar_1_1reactor.html#a93129a7ec16ddfef854f7ff9d391210c',1,'seastar::reactor::create_scheduling_group()'],['../classseastar_1_1scheduling__group.html#a93129a7ec16ddfef854f7ff9d391210c',1,'seastar::scheduling_group::create_scheduling_group()']]], + ['create_5fsmp_5fservice_5fgroup_1',['create_smp_service_group',['../classseastar_1_1smp__service__group.html#a4b3d35158448f3b6919cfd20e5630722',1,'seastar::smp_service_group']]], + ['current_5fexception_5fas_5ffuture_2',['current_exception_as_future',['../structseastar_1_1future__state__base.html#a6bca51e2cf5a09c4aa48f0d2df357f9f',1,'seastar::future_state_base']]] +]; diff --git a/master/search/related_1.html b/master/search/related_1.html new file mode 100644 index 000000000..3cc7a2a46 --- /dev/null +++ b/master/search/related_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/related_1.js b/master/search/related_1.js new file mode 100644 index 000000000..6fba26628 --- /dev/null +++ b/master/search/related_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['default_5fsmp_5fservice_5fgroup_0',['default_smp_service_group',['../classseastar_1_1smp__service__group.html#a87787279c7ad263573f3db370add951c',1,'seastar::smp_service_group']]], + ['destroy_5fscheduling_5fgroup_1',['destroy_scheduling_group',['../classseastar_1_1scheduling__group.html#a8b5cd69daba83a54f9dcf6ad1a79be88',1,'seastar::scheduling_group']]], + ['destroy_5fsmp_5fservice_5fgroup_2',['destroy_smp_service_group',['../classseastar_1_1smp__service__group.html#ab2165a827050139def3b4321d39d8cf7',1,'seastar::smp_service_group']]] +]; diff --git a/master/search/related_2.html b/master/search/related_2.html new file mode 100644 index 000000000..0acb56726 --- /dev/null +++ b/master/search/related_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/related_2.js b/master/search/related_2.js new file mode 100644 index 000000000..08ca31ea4 --- /dev/null +++ b/master/search/related_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['map_5freduce_5fscheduling_5fgroup_5fspecific_0',['map_reduce_scheduling_group_specific',['../classseastar_1_1scheduling__group.html#ac9b32070963efbdddef9c9fa577e45dd',1,'seastar::scheduling_group']]] +]; diff --git a/master/search/related_3.html b/master/search/related_3.html new file mode 100644 index 000000000..2e3558c70 --- /dev/null +++ b/master/search/related_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/related_3.js b/master/search/related_3.js new file mode 100644 index 000000000..b54eedee7 --- /dev/null +++ b/master/search/related_3.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['operator_21_0',['operator!',['../classseastar_1_1bool__class.html#a8d50be93eea178bbcb4f06e807cca5da',1,'seastar::bool_class']]], + ['operator_26_26_1',['operator&&',['../classseastar_1_1bool__class.html#a1e5f8160062ffaf935a8e805f3a4d5f8',1,'seastar::bool_class']]], + ['operator_3c_3c_2',['operator<<',['../classseastar_1_1bool__class.html#a29d8252aa7e132b8d30db4bb1cf00fe4',1,'seastar::bool_class']]], + ['operator_3d_3d_3',['operator==',['../classseastar_1_1bool__class.html#a2631d0b9a590330cdcef4c6cde37f8ff',1,'seastar::bool_class']]], + ['operator_7c_7c_4',['operator||',['../classseastar_1_1bool__class.html#a91653e9597305448b78019033e5f4a29',1,'seastar::bool_class']]] +]; diff --git a/master/search/related_4.html b/master/search/related_4.html new file mode 100644 index 000000000..e9de0231b --- /dev/null +++ b/master/search/related_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/related_4.js b/master/search/related_4.js new file mode 100644 index 000000000..d57356de0 --- /dev/null +++ b/master/search/related_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['reduce_5fscheduling_5fgroup_5fspecific_0',['reduce_scheduling_group_specific',['../classseastar_1_1scheduling__group.html#abe919740ffe514502b2b5ecc15dfa24f',1,'seastar::scheduling_group']]], + ['rename_5fscheduling_5fgroup_1',['rename_scheduling_group',['../classseastar_1_1scheduling__group.html#a21785d261dca1e7fa244b83ca91d0920',1,'seastar::scheduling_group']]] +]; diff --git a/master/search/related_5.html b/master/search/related_5.html new file mode 100644 index 000000000..43977a058 --- /dev/null +++ b/master/search/related_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/related_5.js b/master/search/related_5.js new file mode 100644 index 000000000..01a0c8c9e --- /dev/null +++ b/master/search/related_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['scheduling_5fgroup_5fget_5fspecific_0',['scheduling_group_get_specific',['../classseastar_1_1scheduling__group__key.html#ab44416e64e05c9cb959cbee07d6b35ba',1,'seastar::scheduling_group_key']]], + ['scheduling_5fgroup_5fkey_5fcreate_1',['scheduling_group_key_create',['../classseastar_1_1reactor.html#a9ed208dc74b5ca647d4a8615f86009ce',1,'seastar::reactor::scheduling_group_key_create()'],['../classseastar_1_1scheduling__group__key.html#a9ed208dc74b5ca647d4a8615f86009ce',1,'seastar::scheduling_group_key::scheduling_group_key_create()']]], + ['spawn_5fprocess_2',['spawn_process',['../classseastar_1_1experimental_1_1process.html#a564e9054229d5adb7e582204e0683af6',1,'seastar::experimental::process::spawn_process()'],['../classseastar_1_1experimental_1_1process.html#aac0cb611a3d0b3fa1aa5c9185c03b996',1,'seastar::experimental::process::spawn_process()']]], + ['stats_3',['stats',['../classseastar_1_1memory_1_1statistics.html#aa995aeb711a39258d1ea437cf91f049b',1,'seastar::memory::statistics']]] +]; diff --git a/master/search/search.css b/master/search/search.css new file mode 100644 index 000000000..648a792f5 --- /dev/null +++ b/master/search/search.css @@ -0,0 +1,263 @@ +/*---------------- Search Box */ + +#MSearchBox { + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + height: 19px; + padding: 0 0 0 0.3em; + margin: 0; +} + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + height: 1.4em; + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial, Verdana, sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial, Verdana, sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/master/search/search.js b/master/search/search.js new file mode 100644 index 000000000..607f4e10c --- /dev/null +++ b/master/search/search.js @@ -0,0 +1,802 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches' + this.extension; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline-block'; + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var width = 400; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e(R!W8j_r#qQ#gnr4kAxdU#F0+OBry$Z+ z_0PMi;P|#{d%mw(dnw=jM%@$onTJa%@6Nm3`;2S#nwtVFJI#`U@2Q@@JCCctagvF- z8H=anvo~dTmJ2YA%wA6IHRv%{vxvUm|R)kgZeo zmX%Zb;mpflGZdXCTAgit`||AFzkI#z&(3d4(htA?U2FOL4WF6wY&TB#n3n*I4+hl| z*NBpo#FA92vEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/master/search/search_r.png b/master/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..1af5d21ee13e070d7600f1c4657fde843b953a69 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9c!2%@BXHTsJQY`6?zK#qG8~eHcB(ehe3dtTp zz6=bxGZ+|(`xqD=STHa&U1eaXVrO7DwS|Gf*oA>XrmV$GYcEhOQT(QLuS{~ooZ2P@v=Xc@RKW@Irliv8_;wroU0*)0O?temdsA~70jrdux+`@W7 z-N(<(C)L?hOO?KV{>8(jC{hpKsws)#Fh zvsO>IB+gb@b+rGWaO&!a9Z{!U+fV*s7TS>fdt&j$L%^U@Epd$~Nl7e8wMs5Z1yT$~ z28I^8hDN#u<{^fLRz?<9hUVG^237_Jy7tbuQ8eV{r(~v8;?@w8^gA7>fx*+&&t;uc GLK6VEQpiUD literal 0 HcmV?d00001 diff --git a/master/search/searchdata.js b/master/search/searchdata.js new file mode 100644 index 000000000..de6b65f0b --- /dev/null +++ b/master/search/searchdata.js @@ -0,0 +1,48 @@ +var indexSectionsWithContent = +{ + 0: "_abcdefghijklmnopqrstuvwxy~", + 1: "abcdefghijklmnopqrstuvwxy", + 2: "is", + 3: "acfimpst", + 4: "abcdefghijklmnopqrstuvwy~", + 5: "_abcdefghiklmnoprstuvw", + 6: "degimpstvw", + 7: "adfilmos", + 8: "abcefghilmnoprstu", + 9: "cdmors", + 10: "aefilmnprstuw", + 11: "cdrs" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "namespaces", + 3: "files", + 4: "functions", + 5: "variables", + 6: "typedefs", + 7: "enums", + 8: "enumvalues", + 9: "related", + 10: "groups", + 11: "pages" +}; + +var indexSectionLabels = +{ + 0: "All", + 1: "Classes", + 2: "Namespaces", + 3: "Files", + 4: "Functions", + 5: "Variables", + 6: "Typedefs", + 7: "Enumerations", + 8: "Enumerator", + 9: "Friends", + 10: "Modules", + 11: "Pages" +}; + diff --git a/master/search/typedefs_0.html b/master/search/typedefs_0.html new file mode 100644 index 000000000..ee21dad57 --- /dev/null +++ b/master/search/typedefs_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/typedefs_0.js b/master/search/typedefs_0.js new file mode 100644 index 000000000..f4d3a6f3f --- /dev/null +++ b/master/search/typedefs_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['dn_5fcallback_0',['dn_callback',['../namespaceseastar_1_1tls.html#a4f46edc6c448a7412305dc9273c96cbd',1,'seastar::tls']]] +]; diff --git a/master/search/typedefs_1.html b/master/search/typedefs_1.html new file mode 100644 index 000000000..9837c688b --- /dev/null +++ b/master/search/typedefs_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/typedefs_1.js b/master/search/typedefs_1.js new file mode 100644 index 000000000..9f6fb8060 --- /dev/null +++ b/master/search/typedefs_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['element_5ftype_0',['element_type',['../classseastar_1_1checked__ptr.html#ad557cfdae13626979fa63421f4007368',1,'seastar::checked_ptr']]] +]; diff --git a/master/search/typedefs_2.html b/master/search/typedefs_2.html new file mode 100644 index 000000000..a0a03eb84 --- /dev/null +++ b/master/search/typedefs_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/typedefs_2.js b/master/search/typedefs_2.js new file mode 100644 index 000000000..9a67814cb --- /dev/null +++ b/master/search/typedefs_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['get0_5freturn_5ftype_0',['get0_return_type',['../classseastar_1_1future.html#a76cf6847252d419e5241b0efc851e7e2',1,'seastar::future']]], + ['group_5fname_5ftype_1',['group_name_type',['../namespaceseastar_1_1metrics.html#a7b14aa8a3d48b1d16c6cb92b8f12aae7',1,'seastar::metrics']]] +]; diff --git a/master/search/typedefs_3.html b/master/search/typedefs_3.html new file mode 100644 index 000000000..171611a37 --- /dev/null +++ b/master/search/typedefs_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/typedefs_3.js b/master/search/typedefs_3.js new file mode 100644 index 000000000..8a9a866d2 --- /dev/null +++ b/master/search/typedefs_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['idle_5fcpu_5fhandler_0',['idle_cpu_handler',['../namespaceseastar.html#abf634765970430360d353d2a6e99182f',1,'seastar']]], + ['instance_5fid_5ftype_1',['instance_id_type',['../group__metrics.html#gab58cfa335a5dd1aab1540831ab7a826f',1,'seastar::metrics']]] +]; diff --git a/master/search/typedefs_4.html b/master/search/typedefs_4.html new file mode 100644 index 000000000..1ed4afd6f --- /dev/null +++ b/master/search/typedefs_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/typedefs_4.js b/master/search/typedefs_4.js new file mode 100644 index 000000000..ff9961cf3 --- /dev/null +++ b/master/search/typedefs_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['memory_5fdiagnostics_5fwriter_0',['memory_diagnostics_writer',['../namespaceseastar_1_1memory.html#a0d4cda76b87090a734ce3f2cfd19f1d8',1,'seastar::memory']]], + ['metric_5fname_5ftype_1',['metric_name_type',['../group__metrics.html#ga517900c3a099cf524ba032fb4907145d',1,'seastar::metrics']]], + ['metric_5ftype_5fdef_2',['metric_type_def',['../group__metrics.html#ga4cff2db11c17ac1014d236177b8dccee',1,'seastar::metrics']]] +]; diff --git a/master/search/typedefs_5.html b/master/search/typedefs_5.html new file mode 100644 index 000000000..62f69652b --- /dev/null +++ b/master/search/typedefs_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/typedefs_5.js b/master/search/typedefs_5.js new file mode 100644 index 000000000..df075506a --- /dev/null +++ b/master/search/typedefs_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['pointer_0',['pointer',['../classseastar_1_1checked__ptr.html#a23542fe756685e153be8350460b21b58',1,'seastar::checked_ptr']]], + ['promise_5ftype_1',['promise_type',['../classseastar_1_1future.html#afcc1887a65ad82910d792219c9531ea6',1,'seastar::future']]] +]; diff --git a/master/search/typedefs_6.html b/master/search/typedefs_6.html new file mode 100644 index 000000000..5ef6eb503 --- /dev/null +++ b/master/search/typedefs_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/typedefs_6.js b/master/search/typedefs_6.js new file mode 100644 index 000000000..287e82ee8 --- /dev/null +++ b/master/search/typedefs_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['semaphore_0',['semaphore',['../group__fiber-module.html#ga0f8a4046e6c0b61cde9391144c6f0029',1,'seastar']]], + ['sequence_5fno_1',['sequence_no',['../classseastar_1_1experimental_1_1fsnotifier.html#a26687fd5c861953afc2a639bfa1ef459',1,'seastar::experimental::fsnotifier']]], + ['syncronous_5fisolation_5ffunction_2',['syncronous_isolation_function',['../group__rpc.html#ac3e9932cb9fa23b8bf4752f907487f32',1,'seastar::rpc::resource_limits']]] +]; diff --git a/master/search/typedefs_7.html b/master/search/typedefs_7.html new file mode 100644 index 000000000..6b14f930f --- /dev/null +++ b/master/search/typedefs_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/typedefs_7.js b/master/search/typedefs_7.js new file mode 100644 index 000000000..7b11671af --- /dev/null +++ b/master/search/typedefs_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['total_5fbytes_0',['total_bytes',['../namespaceseastar_1_1scollectd.html#a86886d3bdce16e47b128efaaa169a032',1,'seastar::scollectd']]] +]; diff --git a/master/search/typedefs_8.html b/master/search/typedefs_8.html new file mode 100644 index 000000000..75c9777f7 --- /dev/null +++ b/master/search/typedefs_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/typedefs_8.js b/master/search/typedefs_8.js new file mode 100644 index 000000000..c3758ed7b --- /dev/null +++ b/master/search/typedefs_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['value_5ftype_0',['value_type',['../classseastar_1_1future.html#a221dfd624fc12b0d5f8b58af000d7830',1,'seastar::future::value_type()'],['../structseastar_1_1futurize.html#ad0b71d52a42c43b2f068014df662b986',1,'seastar::futurize::value_type()']]] +]; diff --git a/master/search/typedefs_9.html b/master/search/typedefs_9.html new file mode 100644 index 000000000..fe0c0ebea --- /dev/null +++ b/master/search/typedefs_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/typedefs_9.js b/master/search/typedefs_9.js new file mode 100644 index 000000000..af75d8482 --- /dev/null +++ b/master/search/typedefs_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['watch_5ftoken_0',['watch_token',['../classseastar_1_1experimental_1_1fsnotifier.html#a11d0e044c2b38fdd5b3f446dc0f7a8c1',1,'seastar::experimental::fsnotifier']]], + ['work_5fwaiting_5fon_5freactor_1',['work_waiting_on_reactor',['../namespaceseastar.html#a1c1b268cbc5c76258312d94b3d079556',1,'seastar']]] +]; diff --git a/master/search/variables_0.html b/master/search/variables_0.html new file mode 100644 index 000000000..fd893a69f --- /dev/null +++ b/master/search/variables_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_0.js b/master/search/variables_0.js new file mode 100644 index 000000000..f12964cbc --- /dev/null +++ b/master/search/variables_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['_5fcontent_0',['_content',['../structseastar_1_1http_1_1reply.html#ad6d8e2eb607286aa5df5c612d5849696',1,'seastar::http::reply']]], + ['_5fheaders_1',['_headers',['../structseastar_1_1http_1_1reply.html#a6de5c9ba61b189bab9c1ae253dcc915a',1,'seastar::http::reply']]] +]; diff --git a/master/search/variables_1.html b/master/search/variables_1.html new file mode 100644 index 000000000..5f8e44002 --- /dev/null +++ b/master/search/variables_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_1.js b/master/search/variables_1.js new file mode 100644 index 000000000..4ad15b92c --- /dev/null +++ b/master/search/variables_1.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['abort_5fon_5fseastar_5fbad_5falloc_0',['abort_on_seastar_bad_alloc',['../structseastar_1_1reactor__options.html#a0240fdcb3d444b173abf6d2fdec42478',1,'seastar::reactor_options']]], + ['aio_5ffsync_1',['aio_fsync',['../structseastar_1_1reactor__options.html#acdb4a91092ff209f6bcd8265cef09196',1,'seastar::reactor_options']]], + ['alignment_2',['alignment',['../structseastar_1_1scheduling__group__key__config.html#abfa81715fc07b2d2f6fcd5240023dc73',1,'seastar::scheduling_group_key_config']]], + ['allocation_5fsize_3',['allocation_size',['../structseastar_1_1scheduling__group__key__config.html#a215dafe5eb9a9df84bf709cb5abab92e',1,'seastar::scheduling_group_key_config']]], + ['allow_5fcpus_5fin_5fremote_5fnuma_5fnodes_4',['allow_cpus_in_remote_numa_nodes',['../structseastar_1_1smp__options.html#ab3b870270819275fb8ffa4427643f7da',1,'seastar::smp_options']]], + ['append_5fis_5funlikely_5',['append_is_unlikely',['../structseastar_1_1file__open__options.html#aa0b14fe6149d094d079fba13aa3145ec',1,'seastar::file_open_options']]], + ['argv_6',['argv',['../structseastar_1_1experimental_1_1spawn__parameters.html#a3bc45e6a686c6ade3a03b697daadd00f',1,'seastar::experimental::spawn_parameters']]] +]; diff --git a/master/search/variables_10.html b/master/search/variables_10.html new file mode 100644 index 000000000..943cbd128 --- /dev/null +++ b/master/search/variables_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_10.js b/master/search/variables_10.js new file mode 100644 index 000000000..9531e37eb --- /dev/null +++ b/master/search/variables_10.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['reactor_5fbackend_0',['reactor_backend',['../structseastar_1_1reactor__options.html#a93744ff0322b48ebff19493aee188267',1,'seastar::reactor_options']]], + ['read_5fahead_1',['read_ahead',['../namespaceseastar.html#ab0750dc210b394ba2269fba68eb4d830',1,'seastar::file_input_stream_options']]], + ['relaxed_5fdma_2',['relaxed_dma',['../structseastar_1_1reactor__options.html#a51b0696ff8a2622c1cca14d32a84c735',1,'seastar::reactor_options']]], + ['remote_5faddress_3',['remote_address',['../group__networking-module.html#aef0dd23d32e4e6d6bc7b275f2afbe03b',1,'seastar::accept_result']]], + ['rename_4',['rename',['../structseastar_1_1scheduling__group__key__config.html#a45d483ccd7ff6bda9acb67cade313937',1,'seastar::scheduling_group_key_config']]], + ['reserve_5fmemory_5',['reserve_memory',['../structseastar_1_1smp__options.html#a1926ac9002b4d88681e8608a623cb47a',1,'seastar::smp_options']]] +]; diff --git a/master/search/variables_11.html b/master/search/variables_11.html new file mode 100644 index 000000000..47f1ec5c4 --- /dev/null +++ b/master/search/variables_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_11.js b/master/search/variables_11.js new file mode 100644 index 000000000..7ab6a0765 --- /dev/null +++ b/master/search/variables_11.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['sched_5fgroup_0',['sched_group',['../group__rpc.html#a008fd647e3b95731fdcf38466cf38895',1,'seastar::rpc::isolation_config']]], + ['server_5fname_1',['server_name',['../namespaceseastar_1_1tls.html#a0641396266155003c2b4965fa3378dcf',1,'seastar::tls::tls_options']]], + ['service_5fgroup_2',['service_group',['../structseastar_1_1smp__submit__to__options.html#a7e858a5764cd7f44ac9f238b8ad99e00',1,'seastar::smp_submit_to_options']]], + ['session_5fresume_5fdata_3',['session_resume_data',['../namespaceseastar_1_1tls.html#a79f2123eae2c2f2e0c2a03f52825d1cd',1,'seastar::tls::tls_options']]], + ['size_4',['size',['../structseastar_1_1memory_1_1allocation__site.html#a9a8e7fd710689306ab058c607ab7b19e',1,'seastar::memory::allocation_site']]], + ['sloppy_5fsize_5',['sloppy_size',['../structseastar_1_1file__open__options.html#a48a5d18ac75c1012ed2e1fef271ab08a',1,'seastar::file_open_options']]], + ['sloppy_5fsize_5fhint_6',['sloppy_size_hint',['../structseastar_1_1file__open__options.html#a6a95076c1c190b3d431456b79de37cf8',1,'seastar::file_open_options']]], + ['smp_7',['smp',['../structseastar_1_1smp__options.html#a6b177e01fd9ff16f548fb4d70aaa0fdc',1,'seastar::smp_options']]] +]; diff --git a/master/search/variables_12.html b/master/search/variables_12.html new file mode 100644 index 000000000..2842f6648 --- /dev/null +++ b/master/search/variables_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_12.js b/master/search/variables_12.js new file mode 100644 index 000000000..062230088 --- /dev/null +++ b/master/search/variables_12.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['tap_5fdevice_0',['tap_device',['../structseastar_1_1net_1_1native__stack__options.html#a454638ebf057924b1de844b0c8d69eb3',1,'seastar::net::native_stack_options']]], + ['task_5fquota_5fms_1',['task_quota_ms',['../structseastar_1_1reactor__options.html#a5bca70e567985210d13ae92b8c302fc9',1,'seastar::reactor_options']]], + ['tasks_5fprocessed_2',['tasks_processed',['../classseastar_1_1reactor.html#aa902abe5a7063bee0f1654c31ac17bc1',1,'seastar::reactor::sched_stats']]], + ['thread_5faffinity_3',['thread_affinity',['../structseastar_1_1smp__options.html#a9d7160097ab78e28a32ed2cc76afe569',1,'seastar::smp_options']]], + ['timeout_4',['timeout',['../structseastar_1_1smp__submit__to__options.html#ace8bed510ddfc7b03f71c8181502cfc1',1,'seastar::smp_submit_to_options']]], + ['trim_5fto_5fsize_5',['trim_to_size',['../namespaceseastar.html#a6e3617a6eded8e0b87f58b52ed34ebbd',1,'seastar::output_stream_options']]], + ['tso_6',['tso',['../structseastar_1_1net_1_1virtio__options.html#afdbdffe0a699cfd70aec37cb231cdabf',1,'seastar::net::virtio_options']]], + ['type_7',['type',['../group__fileio-module.html#a578954e17f6108a186996ff7503c5f3a',1,'seastar::directory_entry']]], + ['type_5findex_8',['type_index',['../structseastar_1_1scheduling__group__key__config.html#a48a297b55835c0bad7473813df57b493',1,'seastar::scheduling_group_key_config']]] +]; diff --git a/master/search/variables_13.html b/master/search/variables_13.html new file mode 100644 index 000000000..c66470575 --- /dev/null +++ b/master/search/variables_13.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_13.js b/master/search/variables_13.js new file mode 100644 index 000000000..b1e54cc51 --- /dev/null +++ b/master/search/variables_13.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['u_0',['u',['../classseastar_1_1socket__address.html#a2b7f5efe3cf1bb59172ce25737d9eb5e',1,'seastar::socket_address']]], + ['udpv4_5fqueue_5fsize_1',['udpv4_queue_size',['../structseastar_1_1net_1_1native__stack__options.html#af1a0c1c4e7e2b3e5dfceb1b15df58ef7',1,'seastar::net::native_stack_options']]], + ['ufo_2',['ufo',['../structseastar_1_1net_1_1virtio__options.html#a84bc47f8619d34f4eab3609f08f3ae2f',1,'seastar::net::virtio_options']]], + ['unsafe_5fbypass_5ffsync_3',['unsafe_bypass_fsync',['../structseastar_1_1reactor__options.html#ad66cb23f59ed5dfa8be8189313988692',1,'seastar::reactor_options']]] +]; diff --git a/master/search/variables_14.html b/master/search/variables_14.html new file mode 100644 index 000000000..02b2384c0 --- /dev/null +++ b/master/search/variables_14.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_14.js b/master/search/variables_14.js new file mode 100644 index 000000000..75dda1272 --- /dev/null +++ b/master/search/variables_14.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['virtio_5fopts_0',['virtio_opts',['../structseastar_1_1net_1_1native__stack__options.html#a892c1330e4c535a3f09f08ba499d1512',1,'seastar::net::native_stack_options']]], + ['virtio_5fring_5fsize_1',['virtio_ring_size',['../structseastar_1_1net_1_1virtio__options.html#a80a057eff829cd765405632bb16f4862',1,'seastar::net::virtio_options']]] +]; diff --git a/master/search/variables_15.html b/master/search/variables_15.html new file mode 100644 index 000000000..e635f67c7 --- /dev/null +++ b/master/search/variables_15.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_15.js b/master/search/variables_15.js new file mode 100644 index 000000000..2aeade4ba --- /dev/null +++ b/master/search/variables_15.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['wait_5ffor_5feof_5fon_5fshutdown_0',['wait_for_eof_on_shutdown',['../namespaceseastar_1_1tls.html#a8bcd47d721cc8f1c05f7dd5a86970710',1,'seastar::tls::tls_options']]], + ['write_5fbehind_1',['write_behind',['../namespaceseastar.html#a24c692693885f44b3872505a56b25fc1',1,'seastar::file_output_stream_options']]] +]; diff --git a/master/search/variables_2.html b/master/search/variables_2.html new file mode 100644 index 000000000..77a7f4812 --- /dev/null +++ b/master/search/variables_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_2.js b/master/search/variables_2.js new file mode 100644 index 000000000..3f7eb9fa9 --- /dev/null +++ b/master/search/variables_2.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['backtrace_0',['backtrace',['../structseastar_1_1memory_1_1allocation__site.html#a96ba5a2f38e86a6227989941c7f408a6',1,'seastar::memory::allocation_site']]], + ['basic_5frequest_5fsize_1',['basic_request_size',['../group__rpc.html#acafbc7694b8af53998669702fb0b0736',1,'seastar::rpc::resource_limits']]], + ['batch_5fflushes_2',['batch_flushes',['../namespaceseastar.html#a4462451fc906c4570664007e559dcb54',1,'seastar::output_stream_options']]], + ['bloat_5ffactor_3',['bloat_factor',['../group__rpc.html#ab3af1cd684fdf636242c6015d40e44ab',1,'seastar::rpc::resource_limits']]], + ['blocked_5freactor_5fnotify_5fms_4',['blocked_reactor_notify_ms',['../structseastar_1_1reactor__options.html#ab7a092b746c6f6644396f649e5126396',1,'seastar::reactor_options']]], + ['blocked_5freactor_5freport_5fformat_5foneline_5',['blocked_reactor_report_format_oneline',['../structseastar_1_1reactor__options.html#a8bcff68de76d941f51d45a80afaa8f55',1,'seastar::reactor_options']]], + ['blocked_5freactor_5freports_5fper_5fminute_6',['blocked_reactor_reports_per_minute',['../structseastar_1_1reactor__options.html#aca2a73bd33a51a691d992a7b7259717a',1,'seastar::reactor_options']]], + ['buffer_5fsize_7',['buffer_size',['../namespaceseastar.html#a4bb685a43b71439e191e780664eefe4d',1,'seastar::file_input_stream_options::buffer_size()'],['../group__networking-module.html#af6eb1309a91231fa061a0582ed10eb14',1,'seastar::connected_socket_input_stream_config::buffer_size()']]] +]; diff --git a/master/search/variables_3.html b/master/search/variables_3.html new file mode 100644 index 000000000..3ee62baa9 --- /dev/null +++ b/master/search/variables_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_3.js b/master/search/variables_3.js new file mode 100644 index 000000000..09834e33a --- /dev/null +++ b/master/search/variables_3.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['collectd_0',['collectd',['../structseastar_1_1scollectd_1_1options.html#ae494c2870de535a7e719cc6826b27477',1,'seastar::scollectd::options']]], + ['collectd_5faddress_1',['collectd_address',['../structseastar_1_1scollectd_1_1options.html#a95e609b313abda88ff319edb0fb25305',1,'seastar::scollectd::options']]], + ['collectd_5fhostname_2',['collectd_hostname',['../structseastar_1_1scollectd_1_1options.html#a0480cd6523ceeecf6665456baa5ba9b7',1,'seastar::scollectd::options']]], + ['collectd_5fpoll_5fperiod_3',['collectd_poll_period',['../structseastar_1_1scollectd_1_1options.html#a4ec9851a887b37af5445f37ad6cb93a1',1,'seastar::scollectd::options']]], + ['connection_4',['connection',['../group__networking-module.html#aeff80fcab36dbd7770e35958f3c7d1d8',1,'seastar::accept_result']]], + ['constructor_5',['constructor',['../structseastar_1_1scheduling__group__key__config.html#a3983e8cc893d4c8e81c34816ba00a2b1',1,'seastar::scheduling_group_key_config']]], + ['cpuset_6',['cpuset',['../structseastar_1_1smp__options.html#a1c966e0d590aca51d8e00c2674ab9323',1,'seastar::smp_options']]], + ['create_5fpermissions_7',['create_permissions',['../structseastar_1_1file__open__options.html#ac49a62a5f23689021e53cc453997d3dc',1,'seastar::file_open_options']]], + ['csum_5foffload_8',['csum_offload',['../structseastar_1_1net_1_1virtio__options.html#af1c9baaf623844f3f7473184fe84cdfe',1,'seastar::net::virtio_options']]] +]; diff --git a/master/search/variables_4.html b/master/search/variables_4.html new file mode 100644 index 000000000..640713f6f --- /dev/null +++ b/master/search/variables_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_4.js b/master/search/variables_4.js new file mode 100644 index 000000000..a2f3c7b61 --- /dev/null +++ b/master/search/variables_4.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['default_5flog_5flevel_0',['default_log_level',['../structseastar_1_1log__cli_1_1options.html#ab12d73cfa95f13065ed19154a0fa471a',1,'seastar::log_cli::options']]], + ['destructor_1',['destructor',['../structseastar_1_1scheduling__group__key__config.html#af1642873be54c5baf7d0185415573b59',1,'seastar::scheduling_group_key_config']]], + ['dhcp_2',['dhcp',['../structseastar_1_1net_1_1native__stack__options.html#adb3660d9209c118b63786e23029758ea',1,'seastar::net::native_stack_options']]], + ['dpdk_5fopts_3',['dpdk_opts',['../structseastar_1_1net_1_1native__stack__options.html#a90bb60b4ade6be66d3720c93211aa745',1,'seastar::net::native_stack_options']]], + ['dpdk_5fpmd_4',['dpdk_pmd',['../structseastar_1_1net_1_1native__stack__options.html#a53085c4f11dfe8cd5ecf386e93aa5f28',1,'seastar::net::native_stack_options']]], + ['dpdk_5fport_5findex_5',['dpdk_port_index',['../structseastar_1_1net_1_1dpdk__options.html#a53b66411543b792e992eab047203bdbc',1,'seastar::net::dpdk_options']]], + ['dump_5fmemory_5fdiagnostics_5fon_5falloc_5ffailure_5fkind_6',['dump_memory_diagnostics_on_alloc_failure_kind',['../structseastar_1_1reactor__options.html#a56e4b212a93a6c421c2ab177730d0ae7',1,'seastar::reactor_options']]], + ['dynamic_5fadjustments_7',['dynamic_adjustments',['../namespaceseastar.html#af73169cf5109f7f05e6c4d742157744b',1,'seastar::file_input_stream_options']]] +]; diff --git a/master/search/variables_5.html b/master/search/variables_5.html new file mode 100644 index 000000000..7b2ba970a --- /dev/null +++ b/master/search/variables_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_5.js b/master/search/variables_5.js new file mode 100644 index 000000000..7600ac63a --- /dev/null +++ b/master/search/variables_5.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['enable_5fglibc_5fexception_5fscaling_5fworkaround_0',['enable_glibc_exception_scaling_workaround',['../structseastar_1_1smp__options.html#ab104a2dd2c6a90e439a6fec3721035a3',1,'seastar::smp_options']]], + ['env_1',['env',['../structseastar_1_1experimental_1_1spawn__parameters.html#a041fb05186d2c6c00f40cd555ea28387',1,'seastar::experimental::spawn_parameters']]], + ['error_5funknown_5fcompression_5falgorithm_2',['ERROR_UNKNOWN_COMPRESSION_ALGORITHM',['../namespaceseastar_1_1tls.html#aeca27a48c1de29abb8d51acfff202206',1,'seastar::tls']]], + ['event_5findex_3',['event_index',['../structseastar_1_1net_1_1virtio__options.html#aa1f396108ff64129fa0763dabac7f27c',1,'seastar::net::virtio_options']]], + ['extent_5fallocation_5fsize_5fhint_4',['extent_allocation_size_hint',['../structseastar_1_1file__open__options.html#ad41179fe450ba65b2d3987173622a984',1,'seastar::file_open_options']]] +]; diff --git a/master/search/variables_6.html b/master/search/variables_6.html new file mode 100644 index 000000000..fb1de8f88 --- /dev/null +++ b/master/search/variables_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_6.js b/master/search/variables_6.js new file mode 100644 index 000000000..a0d18e39b --- /dev/null +++ b/master/search/variables_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['force_5faio_5fsyscalls_0',['force_aio_syscalls',['../structseastar_1_1reactor__options.html#a7e0726d8ea4c464ec0474de3e5fec857',1,'seastar::reactor_options']]] +]; diff --git a/master/search/variables_7.html b/master/search/variables_7.html new file mode 100644 index 000000000..cf8dcf42d --- /dev/null +++ b/master/search/variables_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_7.js b/master/search/variables_7.js new file mode 100644 index 000000000..95150bce0 --- /dev/null +++ b/master/search/variables_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['group_5fname_0',['group_name',['../namespaceseastar.html#a364045bbb1951f7e88c5625dacb84a08',1,'seastar::smp_service_group_config']]], + ['gw_5fipv4_5faddr_1',['gw_ipv4_addr',['../structseastar_1_1net_1_1native__stack__options.html#a2b733aed031e09d0426c6b1cc408363b',1,'seastar::net::native_stack_options']]] +]; diff --git a/master/search/variables_8.html b/master/search/variables_8.html new file mode 100644 index 000000000..88cbb01e8 --- /dev/null +++ b/master/search/variables_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_8.js b/master/search/variables_8.js new file mode 100644 index 000000000..980fe4852 --- /dev/null +++ b/master/search/variables_8.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['heapprof_0',['heapprof',['../structseastar_1_1reactor__options.html#aaaedd24ed4ca13f6d1f4f7b7740b515a',1,'seastar::reactor_options']]], + ['host_5fipv4_5faddr_1',['host_ipv4_addr',['../structseastar_1_1net_1_1native__stack__options.html#a0ab99edac3d1efcbd7716f44bb562e3d',1,'seastar::net::native_stack_options']]], + ['hostname_2',['hostname',['../structseastar_1_1prometheus_1_1config.html#aecd03cf9d7bee3d0d002a6c55a71ad84',1,'seastar::prometheus::config']]], + ['hugepages_3',['hugepages',['../structseastar_1_1smp__options.html#a7a741a77d26ee6efa6d79b9c52ca192a',1,'seastar::smp_options']]], + ['hw_5ffc_4',['hw_fc',['../structseastar_1_1net_1_1dpdk__options.html#ac5d4b8b029eef1c87d00621f1b8597ca',1,'seastar::net::dpdk_options']]], + ['hw_5fqueue_5fweight_5',['hw_queue_weight',['../structseastar_1_1net_1_1native__stack__options.html#ab32e44687495242d0a10c790915ae97d',1,'seastar::net::native_stack_options']]] +]; diff --git a/master/search/variables_9.html b/master/search/variables_9.html new file mode 100644 index 000000000..36c49bdd6 --- /dev/null +++ b/master/search/variables_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_9.js b/master/search/variables_9.js new file mode 100644 index 000000000..b655c3b9f --- /dev/null +++ b/master/search/variables_9.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['idle_5fpoll_5ftime_5fus_0',['idle_poll_time_us',['../structseastar_1_1reactor__options.html#aefa70b811e7277577c5de3cd33b9eda5',1,'seastar::reactor_options']]], + ['io_5fflow_5fratio_5fthreshold_1',['io_flow_ratio_threshold',['../structseastar_1_1reactor__options.html#a8c6dc1517a4f8a37bdec67e196c350fd',1,'seastar::reactor_options']]], + ['io_5flatency_5fgoal_5fms_2',['io_latency_goal_ms',['../structseastar_1_1reactor__options.html#a4de41752b262f996707ca6c290dc4280',1,'seastar::reactor_options']]], + ['io_5fproperties_3',['io_properties',['../structseastar_1_1smp__options.html#a76216784ecfaabfa388e359e93fa3429',1,'seastar::smp_options']]], + ['io_5fproperties_5ffile_4',['io_properties_file',['../structseastar_1_1smp__options.html#ad0e7db9b3d2a5de572eb290f1def096b',1,'seastar::smp_options']]], + ['isolation_5fcookie_5',['isolation_cookie',['../group__rpc.html#acd3e23c31cb27aa7af0099e758d6b733',1,'seastar::rpc::client_options']]] +]; diff --git a/master/search/variables_a.html b/master/search/variables_a.html new file mode 100644 index 000000000..0005c6aa6 --- /dev/null +++ b/master/search/variables_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_a.js b/master/search/variables_a.js new file mode 100644 index 000000000..7e36068a7 --- /dev/null +++ b/master/search/variables_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['kernel_5fpage_5fcache_0',['kernel_page_cache',['../structseastar_1_1reactor__options.html#ab4dc65b16372f4254bcda79878aeb56b',1,'seastar::reactor_options']]] +]; diff --git a/master/search/variables_b.html b/master/search/variables_b.html new file mode 100644 index 000000000..757c0680a --- /dev/null +++ b/master/search/variables_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_b.js b/master/search/variables_b.js new file mode 100644 index 000000000..b23404b4e --- /dev/null +++ b/master/search/variables_b.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['label_0',['label',['../structseastar_1_1prometheus_1_1config.html#a2e22255a950330c12ca73fb1c9e637ef',1,'seastar::prometheus::config']]], + ['linux_5faio_5fnowait_1',['linux_aio_nowait',['../structseastar_1_1reactor__options.html#a11a718020079692cde2c3dfa35dd87a6',1,'seastar::reactor_options']]], + ['lock_5fmemory_2',['lock_memory',['../structseastar_1_1smp__options.html#ad40522943b80c1d6b87c6b5baf54b157',1,'seastar::smp_options']]], + ['log_5fto_5fstdout_3',['log_to_stdout',['../structseastar_1_1log__cli_1_1options.html#a05cfc5a125c813b4730aba1484af7721',1,'seastar::log_cli::options']]], + ['log_5fto_5fsyslog_4',['log_to_syslog',['../structseastar_1_1log__cli_1_1options.html#ae23bcd062c92f5f91c6ff037589c83c5',1,'seastar::log_cli::options']]], + ['log_5fwith_5fcolor_5',['log_with_color',['../structseastar_1_1log__cli_1_1options.html#a4c3a43fe72a76c21de5873a35d1f4bca',1,'seastar::log_cli::options']]], + ['logger_5flog_5flevel_6',['logger_log_level',['../structseastar_1_1log__cli_1_1options.html#a397708be4bd607caa12d183ac8d4df2d',1,'seastar::log_cli::options']]], + ['logger_5fostream_5ftype_7',['logger_ostream_type',['../structseastar_1_1log__cli_1_1options.html#a2cfd46c6e6340ba7792a0faa9a6824f2',1,'seastar::log_cli::options']]], + ['logger_5fstdout_5ftimestamps_8',['logger_stdout_timestamps',['../structseastar_1_1log__cli_1_1options.html#aac5149a07eda206c7d530acc7f2c0511',1,'seastar::log_cli::options']]], + ['lro_9',['lro',['../structseastar_1_1net_1_1native__stack__options.html#ac8207763adaba6127f5d253536090dfa',1,'seastar::net::native_stack_options']]] +]; diff --git a/master/search/variables_c.html b/master/search/variables_c.html new file mode 100644 index 000000000..451a1369b --- /dev/null +++ b/master/search/variables_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_c.js b/master/search/variables_c.js new file mode 100644 index 000000000..d5eb0a57b --- /dev/null +++ b/master/search/variables_c.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['max_5fbuffer_5fsize_0',['max_buffer_size',['../group__networking-module.html#aeb9e8ff33844cf73bfa68fa1fd36665f',1,'seastar::connected_socket_input_stream_config']]], + ['max_5fmemory_1',['max_memory',['../group__rpc.html#a823342c1a3b0d20fc549b7a334d1a775',1,'seastar::rpc::resource_limits']]], + ['max_5fnetworking_5fio_5fcontrol_5fblocks_2',['max_networking_io_control_blocks',['../structseastar_1_1reactor__options.html#a66d9c2f79a0ca59983f6b323dfbf3a5f',1,'seastar::reactor_options']]], + ['max_5fnonlocal_5frequests_3',['max_nonlocal_requests',['../namespaceseastar.html#ab8e9be7831f0a1cc99a70c424566607f',1,'seastar::smp_service_group_config']]], + ['max_5ftask_5fbacklog_4',['max_task_backlog',['../structseastar_1_1reactor__options.html#ae8e139f1e407ec17429be5e4fc015c97',1,'seastar::reactor_options']]], + ['mbind_5',['mbind',['../structseastar_1_1smp__options.html#a651fcf60034f075e3ffca98f370f9a2d',1,'seastar::smp_options']]], + ['memory_6',['memory',['../structseastar_1_1smp__options.html#a47b039ccbd270a16fed64e1138352f3a',1,'seastar::smp_options']]], + ['memory_5fallocator_7',['memory_allocator',['../structseastar_1_1smp__options.html#adc3aa8f3ead5601b58d5c680fb37b4ba',1,'seastar::smp_options']]], + ['metric_5fhelp_8',['metric_help',['../structseastar_1_1prometheus_1_1config.html#a32e482d973cc67b346e286b4e0d21d7f',1,'seastar::prometheus::config']]], + ['metrics_5fhostname_9',['metrics_hostname',['../structseastar_1_1metrics_1_1options.html#ab8403e52603f14707cca88dc40b98a55',1,'seastar::metrics::options']]], + ['min_5fbuffer_5fsize_10',['min_buffer_size',['../group__networking-module.html#aa0c48abf8e46898b750810fad8b78288',1,'seastar::connected_socket_input_stream_config']]] +]; diff --git a/master/search/variables_d.html b/master/search/variables_d.html new file mode 100644 index 000000000..aea428628 --- /dev/null +++ b/master/search/variables_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_d.js b/master/search/variables_d.js new file mode 100644 index 000000000..f1837eab2 --- /dev/null +++ b/master/search/variables_d.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['name_0',['name',['../group__fileio-module.html#af1afa86f4347d2258dccd0c076c2a413',1,'seastar::directory_entry']]], + ['netmask_5fipv4_5faddr_1',['netmask_ipv4_addr',['../structseastar_1_1net_1_1native__stack__options.html#ac61a6fc380eb659215abdfeb885ef487',1,'seastar::net::native_stack_options']]], + ['network_5fstack_2',['network_stack',['../structseastar_1_1reactor__options.html#af54c79df9f2dabae4b280d9f2c10acba',1,'seastar::reactor_options']]], + ['next_3',['next',['../structseastar_1_1memory_1_1allocation__site.html#a8a4c2a4804aa46614d03426f6406d0eb',1,'seastar::memory::allocation_site']]], + ['no_5fhandle_5finterrupt_4',['no_handle_interrupt',['../structseastar_1_1reactor__options.html#a7d2e12b9cd7b1a7e886a879863ff780a',1,'seastar::reactor_options']]], + ['num_5fio_5fgroups_5',['num_io_groups',['../structseastar_1_1smp__options.html#aeb1854d4982015411af36b526bf9416f',1,'seastar::smp_options']]] +]; diff --git a/master/search/variables_e.html b/master/search/variables_e.html new file mode 100644 index 000000000..ec3793e4c --- /dev/null +++ b/master/search/variables_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_e.js b/master/search/variables_e.js new file mode 100644 index 000000000..5786e5a7b --- /dev/null +++ b/master/search/variables_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['overprovisioned_0',['overprovisioned',['../structseastar_1_1reactor__options.html#a0caf6c2ad579b8c22e1352d796ec3c1d',1,'seastar::reactor_options']]] +]; diff --git a/master/search/variables_f.html b/master/search/variables_f.html new file mode 100644 index 000000000..ee82fcea7 --- /dev/null +++ b/master/search/variables_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/master/search/variables_f.js b/master/search/variables_f.js new file mode 100644 index 000000000..d029578d3 --- /dev/null +++ b/master/search/variables_f.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['poll_5faio_0',['poll_aio',['../structseastar_1_1reactor__options.html#aaeec4ac1f44aa8c845a6ca611b767511',1,'seastar::reactor_options']]], + ['poll_5fmode_1',['poll_mode',['../structseastar_1_1reactor__options.html#a5b15e502813f51267e2b81555889e5b6',1,'seastar::reactor_options']]], + ['preallocation_5fsize_2',['preallocation_size',['../namespaceseastar.html#a80a192a858b33d2ba51cf504fa215757',1,'seastar::file_output_stream_options']]], + ['prefix_3',['prefix',['../structseastar_1_1prometheus_1_1config.html#aafb94a6686012cd299dadf0717378d2f',1,'seastar::prometheus::config']]] +]; diff --git a/master/seastar_8hh_source.html b/master/seastar_8hh_source.html new file mode 100644 index 000000000..238f9f391 --- /dev/null +++ b/master/seastar_8hh_source.html @@ -0,0 +1,280 @@ + + + + + + + +Seastar: seastar/core/seastar.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright (C) 2015 Cloudius Systems, Ltd.
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    49
    +
    50#include <seastar/core/sstring.hh>
    +
    51#include <seastar/core/future.hh>
    +
    52#include <seastar/core/file-types.hh>
    +
    53#include <seastar/core/posix.hh>
    +
    54#include <seastar/util/bool_class.hh>
    +
    55#include <seastar/util/std-compat.hh>
    +
    56#include <seastar/util/modules.hh>
    +
    57#include "./internal/api-level.hh"
    +
    58#ifndef SEASTAR_MODULE
    +
    59#include <cstdint>
    +
    60#include <filesystem>
    +
    61#include <optional>
    +
    62#include <string_view>
    +
    63#endif
    +
    64
    +
    65namespace seastar {
    +
    66
    +
    67SEASTAR_MODULE_EXPORT_BEGIN
    +
    68
    +
    69// iostream.hh
    +
    70template <class CharType> class input_stream;
    +
    71template <class CharType> class output_stream;
    +
    72
    +
    73class server_socket;
    +
    74class socket;
    +
    75class connected_socket;
    +
    76class socket_address;
    +
    77struct listen_options;
    +
    78enum class transport;
    +
    79
    +
    80// file.hh
    +
    81class file;
    +
    82struct file_open_options;
    +
    83struct stat_data;
    +
    84
    +
    85namespace net {
    +
    86
    +
    87using udp_channel = class datagram_channel;
    +
    88
    +
    89}
    +
    90
    +
    91namespace experimental {
    +
    92// process.hh
    +
    93class process;
    +
    94struct spawn_parameters;
    +
    95}
    +
    96
    +
    97// Networking API
    +
    98
    +
    110
    +
    113
    + +
    124
    + +
    136
    + +
    145
    + +
    156
    +
    157
    + +
    162
    +
    169[[deprecated("Use `make_unbound_datagram_channel` instead")]]
    + +
    171
    +
    172
    +
    178[[deprecated("Use `make_bound_datagram_channel` instead")]]
    + +
    180
    + +
    197
    + +
    207
    +
    209
    +
    222
    +
    225
    +
    238future<file> open_file_dma(std::string_view name, open_flags flags) noexcept;
    +
    239
    +
    253future<file> open_file_dma(std::string_view name, open_flags flags, file_open_options options) noexcept;
    +
    254
    +
    269future<> check_direct_io_support(std::string_view path) noexcept;
    +
    270
    +
    280future<file> open_directory(std::string_view name) noexcept;
    +
    281
    +
    290future<> make_directory(std::string_view name, file_permissions permissions = file_permissions::default_dir_permissions) noexcept;
    +
    291
    +
    304future<> touch_directory(std::string_view name, file_permissions permissions = file_permissions::default_dir_permissions) noexcept;
    +
    305
    +
    318future<> recursive_touch_directory(std::string_view name, file_permissions permissions = file_permissions::default_dir_permissions) noexcept;
    +
    319
    +
    327future<> sync_directory(std::string_view name) noexcept;
    +
    328
    +
    329
    +
    337future<> remove_file(std::string_view name) noexcept;
    +
    338
    +
    347future<> rename_file(std::string_view old_name, std::string_view new_name) noexcept;
    +
    348
    + + +
    351
    +
    360future<stat_data> file_stat(std::string_view name, follow_symlink fs = follow_symlink::yes) noexcept;
    +
    361
    +
    369future<uint64_t> file_size(std::string_view name) noexcept;
    +
    370
    +
    385future<bool> file_accessible(std::string_view name, access_flags flags) noexcept;
    +
    386
    +
    390future<bool> file_exists(std::string_view name) noexcept;
    +
    391
    +
    400future<std::optional<directory_entry_type>> file_type(std::string_view name, follow_symlink follow = follow_symlink::yes) noexcept;
    +
    401
    +
    402
    +
    408future<> link_file(std::string_view oldpath, std::string_view newpath) noexcept;
    +
    409
    +
    415future<> chmod(std::string_view name, file_permissions permissions) noexcept;
    +
    416
    +
    420future<fs_type> file_system_at(std::string_view name) noexcept;
    +
    421
    +
    425future<uint64_t> fs_avail(std::string_view name) noexcept;
    +
    426
    +
    430future<uint64_t> fs_free(std::string_view name) noexcept;
    +
    432
    +
    433namespace experimental {
    +
    437
    +
    440
    + +
    446
    +
    456future<process> spawn_process(const std::filesystem::path& pathname,
    +
    457 spawn_parameters params);
    +
    466future<process> spawn_process(const std::filesystem::path& pathname);
    +
    468}
    +
    469
    +
    470SEASTAR_MODULE_EXPORT_END
    +
    471
    +
    472}
    +
    Type-safe boolean.
    Definition: bool_class.hh:58
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: api.hh:116
    +
    A listening socket, waiting to accept incoming network connections.
    Definition: api.hh:326
    +
    Definition: socket_defs.hh:47
    +
    Definition: api.hh:283
    +
    future touch_directory(std::string_view name, file_permissions permissions=file_permissions::default_dir_permissions) noexcept
    +
    future< file > open_file_dma(std::string_view name, open_flags flags, file_open_options options) noexcept
    +
    future remove_file(std::string_view name) noexcept
    +
    future rename_file(std::string_view old_name, std::string_view new_name) noexcept
    +
    future< uint64_t > fs_avail(std::string_view name) noexcept
    +
    future chmod(std::string_view name, file_permissions permissions) noexcept
    +
    future< uint64_t > file_size(std::string_view name) noexcept
    +
    future< bool > file_exists(std::string_view name) noexcept
    +
    future recursive_touch_directory(std::string_view name, file_permissions permissions=file_permissions::default_dir_permissions) noexcept
    +
    future< uint64_t > fs_free(std::string_view name) noexcept
    +
    future check_direct_io_support(std::string_view path) noexcept
    +
    future< file > open_directory(std::string_view name) noexcept
    +
    future< file > open_file_dma(std::string_view name, open_flags flags) noexcept
    +
    future< fs_type > file_system_at(std::string_view name) noexcept
    +
    future< bool > file_accessible(std::string_view name, access_flags flags) noexcept
    +
    future link_file(std::string_view oldpath, std::string_view newpath) noexcept
    +
    future< std::optional< directory_entry_type > > file_type(std::string_view name, follow_symlink follow=follow_symlink::yes) noexcept
    +
    open_flags
    Definition: file-types.hh:41
    +
    future< stat_data > file_stat(std::string_view name, follow_symlink fs=follow_symlink::yes) noexcept
    +
    future sync_directory(std::string_view name) noexcept
    +
    future make_directory(std::string_view name, file_permissions permissions=file_permissions::default_dir_permissions) noexcept
    + +
    future< std::tuple< file_desc, file_desc > > make_pipe()
    +
    future< process > spawn_process(const std::filesystem::path &pathname)
    +
    server_socket listen(socket_address sa)
    +
    net::udp_channel make_udp_channel()
    +
    net::datagram_channel make_unbound_datagram_channel(sa_family_t family)
    +
    socket make_socket()
    +
    future< connected_socket > connect(socket_address sa)
    +
    net::datagram_channel make_bound_datagram_channel(const socket_address &local)
    +
    ::seastar::socket socket(shared_ptr< certificate_credentials >, sstring name)
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    + + +
    Definition: file.hh:88
    +
    Definition: api.hh:392
    +
    + + + + diff --git a/master/seastar__test_8hh_source.html b/master/seastar__test_8hh_source.html new file mode 100644 index 000000000..0f76571f1 --- /dev/null +++ b/master/seastar__test_8hh_source.html @@ -0,0 +1,160 @@ + + + + + + + +Seastar: seastar/testing/seastar_test.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar_test.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#include <vector>
    +
    26
    +
    27#include <boost/test/unit_test.hpp>
    +
    28
    +
    29#include <seastar/core/future.hh>
    +
    30#include <seastar/util/std-compat.hh>
    +
    31#include <seastar/testing/entry_point.hh>
    +
    32
    +
    33#define SEASTAR_TEST_INVOKE(func, ...) func(__VA_ARGS__)
    +
    34
    +
    35namespace boost::unit_test::decorator {
    +
    36
    +
    37class collector_t;
    +
    38
    +
    39}
    +
    40
    +
    41namespace seastar {
    +
    42
    +
    43namespace testing {
    +
    44
    + +
    46 const std::string _test_file;
    +
    47public:
    +
    48 seastar_test(const char* test_name, const char* test_file, int test_line);
    +
    49 seastar_test(const char* test_name, const char* test_file, int test_line,
    +
    50 boost::unit_test::decorator::collector_t& decorators);
    +
    51 virtual ~seastar_test() {}
    +
    52 const std::string& get_test_file() const {
    +
    53 return _test_file;
    +
    54 }
    +
    55 static const std::string& get_name();
    +
    56 virtual future<> run_test_case() const = 0;
    +
    57 void run();
    +
    58};
    +
    59
    +
    60// BOOST_REQUIRE_EXCEPTION predicates
    +
    61namespace exception_predicate {
    +
    62
    +
    63std::function<bool(const std::exception&)> message_equals(std::string_view expected_message);
    +
    64std::function<bool(const std::exception&)> message_contains(std::string_view expected_message);
    +
    65
    +
    66} // exception_predicate
    +
    67
    +
    68}
    +
    69
    +
    70}
    +
    71
    +
    72#ifdef SEASTAR_TESTING_MAIN
    +
    73
    +
    74int main(int argc, char** argv) {
    +
    75 return seastar::testing::entry_point(argc, argv);
    +
    76}
    +
    77
    +
    78#endif // SEASTAR_TESTING_MAIN
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: seastar_test.hh:45
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/semaphore_8hh_source.html b/master/semaphore_8hh_source.html new file mode 100644 index 000000000..c62399345 --- /dev/null +++ b/master/semaphore_8hh_source.html @@ -0,0 +1,625 @@ + + + + + + + +Seastar: seastar/core/semaphore.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    semaphore.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include "future.hh"
    +
    25#include <seastar/core/future.hh>
    +
    26#include <seastar/core/chunked_fifo.hh>
    +
    27#include <seastar/core/timer.hh>
    +
    28#include <seastar/core/abortable_fifo.hh>
    +
    29#include <seastar/core/timed_out_error.hh>
    +
    30#include <seastar/core/abort_on_expiry.hh>
    +
    31#include <seastar/util/modules.hh>
    +
    32#ifndef SEASTAR_MODULE
    +
    33#include <cassert>
    +
    34#include <exception>
    +
    35#include <optional>
    +
    36#include <stdexcept>
    +
    37#include <utility>
    +
    38#endif
    +
    39
    +
    40namespace seastar {
    +
    41
    +
    42namespace internal {
    +
    43// Test if a class T has member function broken()
    +
    44template <typename T>
    +
    45class has_broken {
    +
    46 template <typename U> constexpr static bool check(decltype(&U::broken)) { return true; }
    +
    47 template <typename U> constexpr static bool check(...) { return false; }
    +
    48
    +
    49public:
    +
    50 constexpr static bool value = check<T>(nullptr);
    +
    51};
    +
    52// Test if a class T has member function aborted()
    +
    53template <typename T>
    +
    54class has_aborted {
    +
    55 template <typename U> constexpr static bool check(decltype(&U::aborted)) { return true; }
    +
    56 template <typename U> constexpr static bool check(...) { return false; }
    +
    57
    +
    58public:
    +
    59 constexpr static bool value = check<T>(nullptr);
    +
    60};
    +
    61}
    +
    62
    +
    65SEASTAR_MODULE_EXPORT_BEGIN
    +
    68class broken_semaphore : public std::exception {
    +
    69public:
    +
    71 virtual const char* what() const noexcept;
    +
    72};
    +
    73
    + +
    79public:
    +
    81 virtual const char* what() const noexcept;
    +
    82};
    +
    83
    + +
    89public:
    +
    91 virtual const char* what() const noexcept;
    +
    92};
    +
    93
    + +
    99 static semaphore_timed_out timeout() noexcept;
    +
    100 static broken_semaphore broken() noexcept;
    +
    101 static semaphore_aborted aborted() noexcept;
    +
    102};
    +
    103
    + +
    105 sstring _msg;
    +
    106public:
    +
    107 named_semaphore_timed_out(std::string_view msg) noexcept;
    +
    108 virtual const char* what() const noexcept;
    +
    109};
    +
    110
    + +
    112 sstring _msg;
    +
    113public:
    +
    114 broken_named_semaphore(std::string_view msg) noexcept;
    +
    115 virtual const char* what() const noexcept;
    +
    116};
    +
    117
    + +
    119 sstring _msg;
    +
    120public:
    +
    121 named_semaphore_aborted(std::string_view msg) noexcept;
    +
    122 virtual const char* what() const noexcept;
    +
    123};
    +
    124
    +
    125// A factory of semaphore exceptions that contain additional context: the semaphore name
    +
    126// auto sem = named_semaphore(0, named_semaphore_exception_factory{"file_opening_limit_semaphore"});
    + +
    128 sstring name;
    +
    129 named_semaphore_timed_out timeout() const noexcept;
    +
    130 broken_named_semaphore broken() const noexcept;
    +
    131 named_semaphore_aborted aborted() const noexcept;
    +
    132};
    +
    133
    +
    153template<typename ExceptionFactory, typename Clock = typename timer<>::clock>
    +
    154class basic_semaphore : private ExceptionFactory {
    +
    155public:
    +
    156 using duration = typename timer<Clock>::duration;
    +
    157 using clock = typename timer<Clock>::clock;
    +
    158 using time_point = typename timer<Clock>::time_point;
    +
    159 using exception_factory = ExceptionFactory;
    +
    160private:
    +
    161 ssize_t _count;
    +
    162 std::exception_ptr _ex;
    +
    163 struct entry {
    +
    164 promise<> pr;
    +
    165 size_t nr;
    +
    166 std::optional<abort_on_expiry<clock>> timer;
    +
    167 entry(promise<>&& pr_, size_t nr_) noexcept : pr(std::move(pr_)), nr(nr_) {}
    +
    168 };
    +
    169 struct expiry_handler {
    +
    170 basic_semaphore& sem;
    +
    171 void operator()(entry& e) noexcept {
    +
    172 if (e.timer) {
    +
    173 try {
    +
    174 e.pr.set_exception(sem.timeout());
    +
    175 } catch (...) {
    +
    176 e.pr.set_exception(semaphore_timed_out());
    +
    177 }
    +
    178 } else if (sem._ex) {
    +
    179 e.pr.set_exception(sem._ex);
    +
    180 } else {
    +
    181 if constexpr (internal::has_aborted<exception_factory>::value) {
    +
    182 try {
    +
    183 e.pr.set_exception(static_cast<exception_factory>(sem).aborted());
    +
    184 } catch (...) {
    +
    185 e.pr.set_exception(semaphore_aborted());
    +
    186 }
    +
    187 } else {
    +
    188 e.pr.set_exception(semaphore_aborted());
    +
    189 }
    +
    190 }
    +
    191 }
    +
    192 };
    +
    193 internal::abortable_fifo<entry, expiry_handler> _wait_list;
    +
    194
    +
    195#ifdef SEASTAR_SEMAPHORE_DEBUG
    +
    196 struct used_flag {
    +
    197 // set to true from the wait path
    +
    198 // prevents the semaphore from being moved or move-reassigned when _used
    +
    199 bool _used = false;
    +
    200
    +
    201 used_flag() = default;
    +
    202 used_flag(used_flag&& o) noexcept {
    +
    203 assert(!_used && "semaphore cannot be moved after it has been used");
    +
    204 }
    +
    205 used_flag& operator=(used_flag&& o) noexcept {
    +
    206 if (this != &o) {
    +
    207 assert(!_used && !o._used && "semaphore cannot be moved after it has been used");
    +
    208 }
    +
    209 return *this;
    +
    210 }
    +
    211 void use() noexcept {
    +
    212 _used = true;
    +
    213 }
    +
    214 };
    +
    215#else
    +
    216 struct used_flag {
    +
    217 void use() noexcept {}
    +
    218 };
    +
    219#endif
    +
    220
    +
    221 [[no_unique_address]] used_flag _used;
    +
    222
    +
    223 bool has_available_units(size_t nr) const noexcept {
    +
    224 return _count >= 0 && (static_cast<size_t>(_count) >= nr);
    +
    225 }
    +
    226 bool may_proceed(size_t nr) const noexcept {
    +
    227 return has_available_units(nr) && _wait_list.empty();
    +
    228 }
    +
    229public:
    +
    231 static constexpr size_t max_counter() noexcept {
    +
    232 return std::numeric_limits<decltype(_count)>::max();
    +
    233 }
    +
    234
    +
    240 basic_semaphore(size_t count) noexcept(std::is_nothrow_default_constructible_v<exception_factory>)
    +
    241 : exception_factory()
    +
    242 , _count(count),
    +
    243 _wait_list(expiry_handler{*this})
    +
    244 {}
    +
    245 basic_semaphore(size_t count, exception_factory&& factory) noexcept(std::is_nothrow_move_constructible_v<exception_factory>)
    +
    246 : exception_factory(std::move(factory))
    +
    247 , _count(count)
    +
    248 , _wait_list(expiry_handler{*this})
    +
    249 {
    +
    250 static_assert(std::is_nothrow_move_constructible_v<expiry_handler>);
    +
    251 }
    +
    252
    +
    258 basic_semaphore(basic_semaphore&& other) noexcept(std::is_nothrow_move_constructible_v<exception_factory>)
    +
    259 : exception_factory(other)
    +
    260 , _count(other._count)
    +
    261 , _ex(std::exchange(other._ex, std::exception_ptr()))
    +
    262 , _wait_list(expiry_handler{*this})
    +
    263 , _used(std::move(other._used))
    +
    264 {
    +
    265 // semaphore cannot be moved with non-empty waiting list
    +
    266 assert(other._wait_list.empty());
    +
    267 }
    +
    268
    +
    276 basic_semaphore& operator=(basic_semaphore&& other) noexcept(std::is_nothrow_move_assignable_v<exception_factory>) {
    +
    277 // semaphore cannot be moved with non-empty waiting list
    +
    278 assert(_wait_list.empty());
    +
    279 assert(other._wait_list.empty());
    +
    280 if (this != &other) {
    +
    281 exception_factory::operator=(other);
    +
    282 _count = other._count;
    +
    283 _ex = std::exchange(other._ex, std::exception_ptr());
    +
    284 _used = std::move(other._used);
    +
    285 }
    +
    286 return *this;
    +
    287 }
    +
    288
    +
    299 future<> wait(size_t nr = 1) noexcept {
    +
    300 return wait(time_point::max(), nr);
    +
    301 }
    +
    315 future<> wait(time_point timeout, size_t nr = 1) noexcept {
    +
    316 _used.use();
    +
    317 if (may_proceed(nr)) {
    +
    318 _count -= nr;
    +
    319 return make_ready_future<>();
    +
    320 }
    +
    321 if (_ex) {
    +
    322 return make_exception_future(_ex);
    +
    323 }
    +
    324 try {
    +
    325 entry& e = _wait_list.emplace_back(promise<>(), nr);
    +
    326 auto f = e.pr.get_future();
    +
    327 if (timeout != time_point::max()) {
    +
    328 e.timer.emplace(timeout);
    +
    329 abort_source& as = e.timer->abort_source();
    +
    330 _wait_list.make_back_abortable(as);
    +
    331 }
    +
    332 return f;
    +
    333 } catch (...) {
    +
    334 return make_exception_future(std::current_exception());
    +
    335 }
    +
    336 }
    +
    337
    +
    351 future<> wait(abort_source& as, size_t nr = 1) noexcept {
    +
    352 _used.use();
    +
    353 if (may_proceed(nr)) {
    +
    354 _count -= nr;
    +
    355 return make_ready_future<>();
    +
    356 }
    +
    357 if (_ex) {
    +
    358 return make_exception_future(_ex);
    +
    359 }
    +
    360 try {
    +
    361 entry& e = _wait_list.emplace_back(promise<>(), nr);
    +
    362 // taking future here since make_back_abortable may expire the entry
    +
    363 auto f = e.pr.get_future();
    +
    364 _wait_list.make_back_abortable(as);
    +
    365 return f;
    +
    366 } catch (...) {
    +
    367 return make_exception_future(std::current_exception());
    +
    368 }
    +
    369 }
    +
    370
    +
    384 future<> wait(duration timeout, size_t nr = 1) noexcept {
    +
    385 return wait(clock::now() + timeout, nr);
    +
    386 }
    +
    396 void signal(size_t nr = 1) noexcept {
    +
    397 if (_ex) {
    +
    398 return;
    +
    399 }
    +
    400 _count += nr;
    +
    401 while (!_wait_list.empty() && has_available_units(_wait_list.front().nr)) {
    +
    402 auto& x = _wait_list.front();
    +
    403 _count -= x.nr;
    +
    404 x.pr.set_value();
    +
    405 _wait_list.pop_front();
    +
    406 }
    +
    407 }
    +
    408
    +
    410 //
    +
    416 void consume(size_t nr = 1) noexcept {
    +
    417 _used.use();
    +
    418 if (_ex) {
    +
    419 return;
    +
    420 }
    +
    421 _count -= nr;
    +
    422 }
    +
    423
    +
    434 bool try_wait(size_t nr = 1) noexcept {
    +
    435 _used.use();
    +
    436 if (may_proceed(nr)) {
    +
    437 _count -= nr;
    +
    438 return true;
    +
    439 } else {
    +
    440 return false;
    +
    441 }
    +
    442 }
    +
    446 size_t current() const noexcept { return std::max(_count, ssize_t(0)); }
    +
    447
    +
    452 ssize_t available_units() const noexcept { return _count; }
    +
    453
    +
    455 size_t waiters() const noexcept { return _wait_list.size(); }
    +
    456
    +
    460 void broken() noexcept {
    +
    461 std::exception_ptr ep;
    +
    462 if constexpr (internal::has_broken<exception_factory>::value) {
    +
    463 try {
    +
    464 ep = std::make_exception_ptr(exception_factory::broken());
    +
    465 } catch (...) {
    +
    466 ep = std::make_exception_ptr(broken_semaphore());
    +
    467 }
    +
    468 } else {
    +
    469 ep = std::make_exception_ptr(broken_semaphore());
    +
    470 }
    +
    471 broken(std::move(ep));
    +
    472 }
    +
    473
    +
    477 template <typename Exception>
    +
    478 void broken(const Exception& ex) noexcept {
    +
    479 broken(std::make_exception_ptr(ex));
    +
    480 }
    +
    481
    +
    485 void broken(std::exception_ptr ex) noexcept;
    +
    486
    + +
    489 _wait_list.reserve(n);
    +
    490 }
    +
    491};
    +
    492SEASTAR_MODULE_EXPORT_END
    +
    493
    +
    494template<typename ExceptionFactory, typename Clock>
    +
    495inline
    +
    496void
    + +
    498 static_assert(std::is_nothrow_copy_constructible_v<std::exception_ptr>);
    +
    499 _ex = xp;
    +
    500 _count = 0;
    +
    501 while (!_wait_list.empty()) {
    +
    502 auto& x = _wait_list.front();
    +
    503 x.pr.set_exception(xp);
    +
    504 _wait_list.pop_front();
    +
    505 }
    +
    506}
    +
    507
    +
    508SEASTAR_MODULE_EXPORT_BEGIN
    +
    509
    +
    510template<typename ExceptionFactory = semaphore_default_exception_factory, typename Clock = typename timer<>::clock>
    + + +
    513 size_t _n;
    +
    514
    +
    515 semaphore_units(basic_semaphore<ExceptionFactory, Clock>* sem, size_t n) noexcept : _sem(sem), _n(n) {}
    +
    516public:
    +
    517 semaphore_units() noexcept : semaphore_units(nullptr, 0) {}
    + +
    519 semaphore_units(semaphore_units&& o) noexcept : _sem(o._sem), _n(std::exchange(o._n, 0)) {
    +
    520 }
    +
    521 semaphore_units& operator=(semaphore_units&& o) noexcept {
    +
    522 if (this != &o) {
    +
    523 return_all();
    +
    524 _sem = o._sem;
    +
    525 _n = std::exchange(o._n, 0);
    +
    526 }
    +
    527 return *this;
    +
    528 }
    +
    529 semaphore_units(const semaphore_units&) = delete;
    +
    530 ~semaphore_units() noexcept {
    +
    531 return_all();
    +
    532 }
    +
    540 size_t return_units(size_t units) {
    +
    541 if (units > _n) {
    +
    542 throw std::invalid_argument("Cannot take more units than those protected by the semaphore");
    +
    543 }
    +
    544 _n -= units;
    +
    545 _sem->signal(units);
    +
    546 return _n;
    +
    547 }
    +
    549 void return_all() noexcept {
    +
    550 if (_n) {
    +
    551 _sem->signal(_n);
    +
    552 _n = 0;
    +
    553 }
    +
    554 }
    +
    558 size_t release() noexcept {
    +
    559 return std::exchange(_n, 0);
    +
    560 }
    +
    569 semaphore_units split(size_t units) {
    +
    570 if (units > _n) {
    +
    571 throw std::invalid_argument("Cannot take more units than those protected by the semaphore");
    +
    572 }
    +
    573 _n -= units;
    +
    574 return semaphore_units(_sem, units);
    +
    575 }
    +
    581 void adopt(semaphore_units&& other) noexcept {
    +
    582 assert(other._sem == _sem);
    +
    583 _n += other.release();
    +
    584 }
    +
    585
    +
    587 size_t count() const noexcept {
    +
    588 return _n;
    +
    589 }
    +
    590
    +
    592 explicit operator bool() const noexcept {
    +
    593 return _n != 0;
    +
    594 }
    +
    595};
    +
    596
    +
    614template<typename ExceptionFactory, typename Clock = typename timer<>::clock>
    +
    615future<semaphore_units<ExceptionFactory, Clock>>
    +
    616get_units(basic_semaphore<ExceptionFactory, Clock>& sem, size_t units) noexcept {
    +
    617 return sem.wait(units).then([&sem, units] {
    +
    618 return semaphore_units<ExceptionFactory, Clock>{ sem, units };
    +
    619 });
    +
    620}
    +
    621
    +
    637template<typename ExceptionFactory, typename Clock = typename timer<>::clock>
    +
    638future<semaphore_units<ExceptionFactory, Clock>>
    +
    639get_units(basic_semaphore<ExceptionFactory, Clock>& sem, size_t units, typename basic_semaphore<ExceptionFactory, Clock>::time_point timeout) noexcept {
    +
    640 return sem.wait(timeout, units).then([&sem, units] {
    +
    641 return semaphore_units<ExceptionFactory, Clock>{ sem, units };
    +
    642 });
    +
    643}
    +
    644
    +
    661template<typename ExceptionFactory, typename Clock>
    +
    662future<semaphore_units<ExceptionFactory, Clock>>
    +
    663get_units(basic_semaphore<ExceptionFactory, Clock>& sem, size_t units, typename basic_semaphore<ExceptionFactory, Clock>::duration timeout) noexcept {
    +
    664 return sem.wait(timeout, units).then([&sem, units] {
    +
    665 return semaphore_units<ExceptionFactory, Clock>{ sem, units };
    +
    666 });
    +
    667}
    +
    668
    +
    685template<typename ExceptionFactory, typename Clock>
    +
    686future<semaphore_units<ExceptionFactory, Clock>>
    +
    687get_units(basic_semaphore<ExceptionFactory, Clock>& sem, size_t units, abort_source& as) noexcept {
    +
    688 return sem.wait(as, units).then([&sem, units] {
    +
    689 return semaphore_units<ExceptionFactory, Clock>{ sem, units };
    +
    690 });
    +
    691}
    +
    692
    +
    710template<typename ExceptionFactory, typename Clock = typename timer<>::clock>
    +
    711std::optional<semaphore_units<ExceptionFactory, Clock>>
    +
    712try_get_units(basic_semaphore<ExceptionFactory, Clock>& sem, size_t units) noexcept {
    +
    713 if (!sem.try_wait(units)) {
    +
    714 return std::nullopt;
    +
    715 }
    +
    716 return std::make_optional<semaphore_units<ExceptionFactory, Clock>>(sem, units);
    +
    717}
    +
    718
    +
    731template<typename ExceptionFactory, typename Clock = typename timer<>::clock>
    +
    732semaphore_units<ExceptionFactory, Clock>
    + +
    734 sem.consume(units);
    +
    735 return semaphore_units<ExceptionFactory, Clock>{ sem, units };
    +
    736}
    +
    737
    +
    759template <typename ExceptionFactory, typename Func, typename Clock = typename timer<>::clock>
    +
    760inline
    +
    761futurize_t<std::invoke_result_t<Func>>
    +
    762with_semaphore(basic_semaphore<ExceptionFactory, Clock>& sem, size_t units, Func&& func) noexcept {
    +
    763 return get_units(sem, units).then([func = std::forward<Func>(func)] (auto units) mutable {
    +
    764 return futurize_invoke(std::forward<Func>(func)).finally([units = std::move(units)] {});
    +
    765 });
    +
    766}
    +
    767
    +
    793template <typename ExceptionFactory, typename Clock, typename Func>
    +
    794inline
    +
    795futurize_t<std::invoke_result_t<Func>>
    +
    796with_semaphore(basic_semaphore<ExceptionFactory, Clock>& sem, size_t units, typename basic_semaphore<ExceptionFactory, Clock>::duration timeout, Func&& func) noexcept {
    +
    797 return get_units(sem, units, timeout).then([func = std::forward<Func>(func)] (auto units) mutable {
    +
    798 return futurize_invoke(std::forward<Func>(func)).finally([units = std::move(units)] {});
    +
    799 });
    +
    800}
    +
    801
    + + +
    806
    +
    807SEASTAR_MODULE_EXPORT_END
    +
    808
    +
    810
    +
    811}
    +
    Definition: abort_source.hh:48
    +
    Definition: abort_source.hh:58
    +
    Counted resource guard.
    Definition: semaphore.hh:154
    +
    basic_semaphore(size_t count) noexcept(std::is_nothrow_default_constructible_v< exception_factory >)
    Definition: semaphore.hh:240
    +
    future wait(abort_source &as, size_t nr=1) noexcept
    Definition: semaphore.hh:351
    +
    static constexpr size_t max_counter() noexcept
    Returns the maximum number of units the semaphore counter can hold.
    Definition: semaphore.hh:231
    +
    size_t current() const noexcept
    Definition: semaphore.hh:446
    +
    future wait(size_t nr=1) noexcept
    Definition: semaphore.hh:299
    +
    void ensure_space_for_waiters(size_t n)
    Reserve memory for waiters so that wait() will not throw.
    Definition: semaphore.hh:488
    +
    future wait(time_point timeout, size_t nr=1) noexcept
    Definition: semaphore.hh:315
    +
    future wait(duration timeout, size_t nr=1) noexcept
    Definition: semaphore.hh:384
    +
    basic_semaphore & operator=(basic_semaphore &&other) noexcept(std::is_nothrow_move_assignable_v< exception_factory >)
    Definition: semaphore.hh:276
    +
    void consume(size_t nr=1) noexcept
    Consume the specific number of units without blocking.
    Definition: semaphore.hh:416
    +
    ssize_t available_units() const noexcept
    Definition: semaphore.hh:452
    +
    size_t waiters() const noexcept
    Returns the current number of waiters.
    Definition: semaphore.hh:455
    +
    bool try_wait(size_t nr=1) noexcept
    Definition: semaphore.hh:434
    +
    void signal(size_t nr=1) noexcept
    Definition: semaphore.hh:396
    +
    void broken(const Exception &ex) noexcept
    Definition: semaphore.hh:478
    +
    basic_semaphore(basic_semaphore &&other) noexcept(std::is_nothrow_move_constructible_v< exception_factory >)
    Definition: semaphore.hh:258
    +
    void broken() noexcept
    Definition: semaphore.hh:460
    +
    Definition: semaphore.hh:111
    +
    virtual const char * what() const noexcept
    Reports the exception reason.
    +
    Definition: semaphore.hh:68
    +
    virtual const char * what() const noexcept
    Reports the exception reason.
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: semaphore.hh:118
    +
    virtual const char * what() const noexcept
    Reports the exception reason.
    +
    Definition: semaphore.hh:104
    +
    virtual const char * what() const noexcept
    Reports the exception reason.
    + +
    Definition: semaphore.hh:88
    +
    virtual const char * what() const noexcept
    Reports the exception reason.
    +
    Definition: semaphore.hh:78
    +
    virtual const char * what() const noexcept
    Reports the exception reason.
    +
    Definition: semaphore.hh:511
    +
    void adopt(semaphore_units &&other) noexcept
    Definition: semaphore.hh:581
    +
    size_t count() const noexcept
    Returns the number of units held.
    Definition: semaphore.hh:587
    +
    semaphore_units split(size_t units)
    Definition: semaphore.hh:569
    +
    size_t release() noexcept
    Definition: semaphore.hh:558
    +
    size_t return_units(size_t units)
    Definition: semaphore.hh:540
    +
    void return_all() noexcept
    Return ownership of all units. The semaphore will be signaled by the number of units returned.
    Definition: semaphore.hh:549
    +
    Definition: timed_out_error.hh:34
    +
    Definition: timer.hh:83
    +
    semaphore_units< ExceptionFactory, Clock > consume_units(basic_semaphore< ExceptionFactory, Clock > &sem, size_t units) noexcept
    Consume units from semaphore temporarily.
    Definition: semaphore.hh:733
    +
    void broken(std::exception_ptr ex) noexcept
    Definition: semaphore.hh:497
    +
    future< T > make_exception_future(std::exception_ptr &&value) noexcept
    Creates a future in an available, failed state.
    Definition: future.hh:1949
    +
    future now()
    Returns a ready future.
    Definition: later.hh:35
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: semaphore.hh:127
    + + +
    + + + + diff --git a/master/server_8hh_source.html b/master/server_8hh_source.html new file mode 100644 index 000000000..6500d4818 --- /dev/null +++ b/master/server_8hh_source.html @@ -0,0 +1,390 @@ + + + + + + + +Seastar: seastar/websocket/server.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    server.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2021 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <map>
    +
    25#include <functional>
    +
    26
    +
    27#include <seastar/http/request_parser.hh>
    +
    28#include <seastar/core/seastar.hh>
    +
    29#include <seastar/core/sstring.hh>
    +
    30#include <seastar/net/api.hh>
    +
    31#include <seastar/core/gate.hh>
    +
    32#include <seastar/core/queue.hh>
    +
    33#include <seastar/core/when_all.hh>
    +
    34
    +
    35namespace seastar::experimental::websocket {
    +
    36
    +
    37using handler_t = std::function<future<>(input_stream<char>&, output_stream<char>&)>;
    +
    38
    +
    39class server;
    +
    40
    +
    44
    +
    48class exception : public std::exception {
    +
    49 std::string _msg;
    +
    50public:
    +
    51 exception(std::string_view msg) : _msg(msg) {}
    +
    52 virtual const char* what() const noexcept {
    +
    53 return _msg.c_str();
    +
    54 }
    +
    55};
    +
    56
    +
    60enum opcodes {
    +
    61 CONTINUATION = 0x0,
    +
    62 TEXT = 0x1,
    +
    63 BINARY = 0x2,
    +
    64 CLOSE = 0x8,
    +
    65 PING = 0x9,
    +
    66 PONG = 0xA,
    +
    67 INVALID = 0xFF,
    +
    68};
    +
    69
    + +
    71 static constexpr uint8_t FIN = 7;
    +
    72 static constexpr uint8_t RSV1 = 6;
    +
    73 static constexpr uint8_t RSV2 = 5;
    +
    74 static constexpr uint8_t RSV3 = 4;
    +
    75 static constexpr uint8_t MASKED = 7;
    +
    76
    +
    77 uint8_t fin : 1;
    +
    78 uint8_t rsv1 : 1;
    +
    79 uint8_t rsv2 : 1;
    +
    80 uint8_t rsv3 : 1;
    +
    81 uint8_t opcode : 4;
    +
    82 uint8_t masked : 1;
    +
    83 uint8_t length : 7;
    +
    84 frame_header(const char* input) {
    +
    85 this->fin = (input[0] >> FIN) & 1;
    +
    86 this->rsv1 = (input[0] >> RSV1) & 1;
    +
    87 this->rsv2 = (input[0] >> RSV2) & 1;
    +
    88 this->rsv3 = (input[0] >> RSV3) & 1;
    +
    89 this->opcode = input[0] & 0b1111;
    +
    90 this->masked = (input[1] >> MASKED) & 1;
    +
    91 this->length = (input[1] & 0b1111111);
    +
    92 }
    +
    93 // Returns length of the rest of the header.
    +
    94 uint64_t get_rest_of_header_length() {
    +
    95 size_t next_read_length = sizeof(uint32_t); // Masking key
    +
    96 if (length == 126) {
    +
    97 next_read_length += sizeof(uint16_t);
    +
    98 } else if (length == 127) {
    +
    99 next_read_length += sizeof(uint64_t);
    +
    100 }
    +
    101 return next_read_length;
    +
    102 }
    +
    103 uint8_t get_fin() {return fin;}
    +
    104 uint8_t get_rsv1() {return rsv1;}
    +
    105 uint8_t get_rsv2() {return rsv2;}
    +
    106 uint8_t get_rsv3() {return rsv3;}
    +
    107 uint8_t get_opcode() {return opcode;}
    +
    108 uint8_t get_masked() {return masked;}
    +
    109 uint8_t get_length() {return length;}
    +
    110
    +
    111 bool is_opcode_known() {
    +
    112 //https://datatracker.ietf.org/doc/html/rfc6455#section-5.1
    +
    113 return opcode < 0xA && !(opcode < 0x8 && opcode > 0x2);
    +
    114 }
    +
    115};
    +
    116
    + +
    118 enum class parsing_state : uint8_t {
    +
    119 flags_and_payload_data,
    +
    120 payload_length_and_mask,
    +
    121 payload
    +
    122 };
    +
    123 enum class connection_state : uint8_t {
    +
    124 valid,
    +
    125 closed,
    +
    126 error
    +
    127 };
    + + +
    130 // What parser is currently doing.
    +
    131 parsing_state _state;
    +
    132 // State of connection - can be valid, closed or should be closed
    +
    133 // due to error.
    +
    134 connection_state _cstate;
    +
    135 sstring _buffer;
    +
    136 std::unique_ptr<frame_header> _header;
    +
    137 uint64_t _payload_length;
    +
    138 uint32_t _masking_key;
    +
    139 buff_t _result;
    +
    140
    +
    141 static future<consumption_result_t> dont_stop() {
    +
    142 return make_ready_future<consumption_result_t>(continue_consuming{});
    +
    143 }
    +
    144 static future<consumption_result_t> stop(buff_t data) {
    +
    145 return make_ready_future<consumption_result_t>(stop_consuming(std::move(data)));
    +
    146 }
    +
    147
    +
    148 // Removes mask from payload given in p.
    +
    149 void remove_mask(buff_t& p, size_t n) {
    +
    150 char *payload = p.get_write();
    +
    151 for (uint64_t i = 0, j = 0; i < n; ++i, j = (j + 1) % 4) {
    +
    152 payload[i] ^= static_cast<char>(((_masking_key << (j * 8)) >> 24));
    +
    153 }
    +
    154 }
    +
    155public:
    +
    156 websocket_parser() : _state(parsing_state::flags_and_payload_data),
    +
    157 _cstate(connection_state::valid),
    +
    158 _payload_length(0),
    +
    159 _masking_key(0) {}
    + +
    161 bool is_valid() { return _cstate == connection_state::valid; }
    +
    162 bool eof() { return _cstate == connection_state::closed; }
    +
    163 opcodes opcode() const;
    +
    164 buff_t result();
    +
    165};
    +
    166
    +
    170class connection : public boost::intrusive::list_base_hook<> {
    + +
    172
    +
    176 class connection_source_impl final : public data_source_impl {
    +
    177 queue<buff_t>* data;
    +
    178
    +
    179 public:
    +
    180 connection_source_impl(queue<buff_t>* data) : data(data) {}
    +
    181
    +
    182 virtual future<buff_t> get() override {
    +
    183 return data->pop_eventually().then_wrapped([](future<buff_t> f){
    +
    184 try {
    +
    185 return make_ready_future<buff_t>(std::move(f.get()));
    +
    186 } catch(...) {
    +
    187 return current_exception_as_future<buff_t>();
    +
    188 }
    +
    189 });
    +
    190 }
    +
    191
    +
    192 virtual future<> close() override {
    +
    193 data->push(buff_t(0));
    +
    194 return make_ready_future<>();
    +
    195 }
    +
    196 };
    +
    197
    +
    201 class connection_sink_impl final : public data_sink_impl {
    +
    202 queue<buff_t>* data;
    +
    203 public:
    +
    204 connection_sink_impl(queue<buff_t>* data) : data(data) {}
    +
    205
    +
    206 virtual future<> put(net::packet d) override {
    +
    207 net::fragment f = d.frag(0);
    +
    208 return data->push_eventually(temporary_buffer<char>{std::move(f.base), f.size});
    +
    209 }
    +
    210
    +
    211 size_t buffer_size() const noexcept override {
    +
    212 return data->max_size();
    +
    213 }
    +
    214
    +
    215 virtual future<> close() override {
    +
    216 data->push(buff_t(0));
    +
    217 return make_ready_future<>();
    +
    218 }
    +
    219 };
    +
    220
    +
    225 future<> handle_ping();
    +
    230 future<> handle_pong();
    +
    231
    +
    232 static const size_t PIPE_SIZE = 512;
    +
    233 server& _server;
    + +
    235 input_stream<char> _read_buf;
    +
    236 output_stream<char> _write_buf;
    +
    237 http_request_parser _http_parser;
    +
    238 bool _done = false;
    +
    239
    +
    240 websocket_parser _websocket_parser;
    +
    241 queue <temporary_buffer<char>> _input_buffer;
    +
    242 input_stream<char> _input;
    +
    243 queue <temporary_buffer<char>> _output_buffer;
    +
    244 output_stream<char> _output;
    +
    245
    +
    246 sstring _subprotocol;
    +
    247 handler_t _handler;
    +
    248public:
    + +
    254 : _server(server)
    +
    255 , _fd(std::move(fd))
    +
    256 , _read_buf(_fd.input())
    +
    257 , _write_buf(_fd.output())
    +
    258 , _input_buffer{PIPE_SIZE}
    +
    259 , _output_buffer{PIPE_SIZE}
    +
    260 {
    + +
    262 std::make_unique<connection_source_impl>(&_input_buffer)}};
    + +
    264 std::make_unique<connection_sink_impl>(&_output_buffer)}};
    +
    265 on_new_connection();
    +
    266 }
    +
    267 ~connection();
    +
    268
    + + +
    277 future<> close(bool send_close = true);
    +
    278
    +
    279protected:
    +
    280 future<> read_loop();
    +
    281 future<> read_one();
    +
    282 future<> read_http_upgrade_request();
    +
    283 future<> response_loop();
    +
    284 void on_new_connection();
    + +
    289
    +
    290};
    +
    291
    +
    298class server {
    +
    299 std::vector<server_socket> _listeners;
    +
    300 boost::intrusive::list<connection> _connections;
    +
    301 std::map<std::string, handler_t> _handlers;
    +
    302 gate _task_gate;
    +
    303public:
    + + +
    315
    + +
    320
    +
    321 bool is_handler_registered(std::string const& name);
    +
    322
    +
    323 void register_handler(std::string&& name, handler_t handler);
    +
    324
    +
    325 friend class connection;
    +
    326protected:
    +
    327 void accept(server_socket &listener);
    +
    328 future<stop_iteration> accept_one(server_socket &listener);
    +
    329};
    +
    330
    +
    332
    +
    333}
    +
    Definition: api.hh:183
    +
    Definition: iostream.hh:222
    +
    Definition: iostream.hh:103
    +
    Definition: iostream.hh:148
    +
    Definition: iostream.hh:60
    +
    Definition: iostream.hh:68
    +
    a WebSocket connection
    Definition: server.hh:170
    +
    an error in handling a WebSocket connection
    Definition: server.hh:48
    +
    a WebSocket server
    Definition: server.hh:298
    + +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    futurize_t< FuncResult > then_wrapped(Func &&func) &noexcept
    Schedule a block of code to run when the future is ready, allowing for exception handling.
    Definition: future.hh:1525
    +
    value_type && get()
    gets the value returned by the computation
    Definition: future.hh:1342
    +
    Definition: gate.hh:61
    + +
    Definition: packet.hh:87
    + +
    Definition: queue.hh:44
    +
    A listening socket, waiting to accept incoming network connections.
    Definition: api.hh:326
    +
    Definition: socket_defs.hh:47
    +
    Definition: iostream.hh:202
    + +
    CharType * get_write() noexcept
    Definition: temporary_buffer.hh:128
    +
    future process()
    serve WebSocket protocol on a connection
    +
    void listen(socket_address addr)
    listen for a WebSocket connection on given address
    +
    future send_data(opcodes opcode, temporary_buffer< char > &&buff)
    Packs buff in websocket frame and sends it to the client.
    +
    opcodes
    Possible type of a websocket frame.
    Definition: server.hh:60
    +
    connection(server &server, connected_socket &&fd)
    Definition: server.hh:253
    +
    void listen(socket_address addr, listen_options lo)
    listen for a WebSocket connection on given address with custom options
    + + +
    Definition: packet.hh:46
    +
    Definition: iostream.hh:199
    +
    STL namespace.
    + +
    Definition: api.hh:392
    +
    + + + + diff --git a/master/shard__id_8hh.html b/master/shard__id_8hh.html new file mode 100644 index 000000000..8ca358bfd --- /dev/null +++ b/master/shard__id_8hh.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: seastar/core/shard_id.hh File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    shard_id.hh File Reference
    +
    +
    +
    #include <seastar/util/modules.hh>
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Namespaces

    namespace  seastar
     Seastar API namespace.
     
    + + + + +

    +Functions

    +shard_id seastar::this_shard_id () noexcept
     Returns shard_id of the of the current shard.
     
    +
    + + + + diff --git a/master/shard__id_8hh_source.html b/master/shard__id_8hh_source.html new file mode 100644 index 000000000..aa1748568 --- /dev/null +++ b/master/shard__id_8hh_source.html @@ -0,0 +1,138 @@ + + + + + + + +Seastar: seastar/core/shard_id.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    shard_id.hh
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2023-present ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/util/modules.hh>
    +
    25
    +
    27
    +
    28namespace seastar {
    +
    29
    +
    30SEASTAR_MODULE_EXPORT_BEGIN
    +
    31
    +
    32using shard_id = unsigned;
    +
    33
    +
    34SEASTAR_MODULE_EXPORT_END
    +
    35
    +
    36namespace internal {
    +
    37
    +
    38#ifdef SEASTAR_BUILD_SHARED_LIBS
    +
    39shard_id* this_shard_id_ptr() noexcept;
    +
    40#else
    +
    41inline shard_id* this_shard_id_ptr() noexcept {
    +
    42 static thread_local shard_id g_this_shard_id;
    +
    43 return &g_this_shard_id;
    +
    44}
    +
    45#endif
    +
    46
    +
    47} // namespace internal
    +
    48
    +
    49SEASTAR_MODULE_EXPORT_BEGIN
    +
    50
    +
    52inline shard_id this_shard_id() noexcept {
    +
    53 return *internal::this_shard_id_ptr();
    +
    54}
    +
    55
    +
    56SEASTAR_MODULE_EXPORT_END
    +
    57
    +
    58
    +
    59} // namespace seastar
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    shard_id this_shard_id() noexcept
    Returns shard_id of the of the current shard.
    Definition: shard_id.hh:52
    +
    + + + + diff --git a/master/sharded_8hh_source.html b/master/sharded_8hh_source.html new file mode 100644 index 000000000..75040f396 --- /dev/null +++ b/master/sharded_8hh_source.html @@ -0,0 +1,882 @@ + + + + + + + +Seastar: seastar/core/sharded.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    sharded.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2015 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/smp.hh>
    +
    25#include <seastar/core/loop.hh>
    +
    26#include <seastar/core/map_reduce.hh>
    +
    27#include <seastar/core/internal/run_in_background.hh>
    +
    28#include <seastar/util/is_smart_ptr.hh>
    +
    29#include <seastar/util/tuple_utils.hh>
    +
    30#include <seastar/core/do_with.hh>
    +
    31#include <seastar/util/log.hh>
    +
    32#include <seastar/util/modules.hh>
    +
    33
    +
    34#ifndef SEASTAR_MODULE
    +
    35#include <boost/iterator/counting_iterator.hpp>
    +
    36#include <concepts>
    +
    37#include <functional>
    +
    38#endif
    +
    39
    +
    49
    +
    50namespace seastar {
    +
    51
    +
    52SEASTAR_MODULE_EXPORT_BEGIN
    +
    53
    +
    54template <typename Func, typename... Param>
    +
    55class sharded_parameter;
    +
    56
    +
    57template <typename Service>
    +
    58class sharded;
    +
    59
    +
    60SEASTAR_MODULE_EXPORT_END
    +
    61
    +
    62namespace internal {
    +
    63
    +
    64template <typename Func, typename... Param>
    +
    65auto unwrap_sharded_arg(sharded_parameter<Func, Param...> sp);
    +
    66
    +
    67using on_each_shard_func = std::function<future<> (unsigned shard)>;
    +
    68
    +
    69future<> sharded_parallel_for_each(unsigned nr_shards, on_each_shard_func on_each_shard) noexcept(std::is_nothrow_move_constructible_v<on_each_shard_func>);
    +
    70
    +
    71template <typename Service>
    +
    72class either_sharded_or_local {
    +
    73 sharded<Service>& _sharded;
    +
    74public:
    +
    75 either_sharded_or_local(sharded<Service>& s) : _sharded(s) {}
    +
    76 operator sharded<Service>& ();
    +
    77 operator Service& ();
    +
    78};
    +
    79
    +
    80template <typename T>
    +
    81struct sharded_unwrap {
    +
    82 using evaluated_type = T;
    +
    83 using type = T;
    +
    84};
    +
    85
    +
    86template <typename T>
    +
    87struct sharded_unwrap<std::reference_wrapper<sharded<T>>> {
    +
    88 using evaluated_type = T&;
    +
    89 using type = either_sharded_or_local<T>;
    +
    90};
    +
    91
    +
    92template <typename Func, typename... Param>
    +
    93struct sharded_unwrap<sharded_parameter<Func, Param...>> {
    +
    94 using type = std::invoke_result_t<Func, Param...>;
    +
    95};
    +
    96
    +
    97template <typename T>
    +
    98using sharded_unwrap_evaluated_t = typename sharded_unwrap<T>::evaluated_type;
    +
    99
    +
    100template <typename T>
    +
    101using sharded_unwrap_t = typename sharded_unwrap<T>::type;
    +
    102
    +
    103} // internal
    +
    104
    +
    105
    +
    108
    +
    109SEASTAR_MODULE_EXPORT_BEGIN
    +
    110
    +
    111template <typename T>
    +
    112class sharded;
    +
    113
    +
    119template<typename T>
    + +
    121 promise<> _freed;
    +
    122protected:
    +
    123 async_sharded_service() noexcept = default;
    +
    124 virtual ~async_sharded_service() {
    +
    125 _freed.set_value();
    +
    126 }
    +
    127 future<> freed() noexcept {
    +
    128 return _freed.get_future();
    +
    129 }
    +
    130 template <typename Service> friend class sharded;
    +
    131};
    +
    132
    +
    133
    +
    139template <typename Service>
    + +
    141 sharded<Service>* _container = nullptr;
    +
    142private:
    +
    143 template <typename T> friend class sharded;
    +
    144 void set_container(sharded<Service>* container) noexcept { _container = container; }
    +
    145public:
    +
    146 peering_sharded_service() noexcept = default;
    + + + +
    150 sharded<Service>& container() noexcept { return *_container; }
    +
    151 const sharded<Service>& container() const noexcept { return *_container; }
    +
    152};
    +
    153
    +
    154
    +
    156class no_sharded_instance_exception : public std::exception {
    +
    157 sstring _msg;
    +
    158public:
    +
    159 no_sharded_instance_exception() : _msg("sharded instance does not exist") {}
    +
    160 explicit no_sharded_instance_exception(sstring type_info)
    +
    161 : _msg("sharded instance does not exist: " + type_info) {}
    +
    162 virtual const char* what() const noexcept override {
    +
    163 return _msg.c_str();
    +
    164 }
    +
    165};
    +
    166
    +
    176template <typename Service>
    +
    177class sharded {
    +
    178 struct entry {
    +
    179 shared_ptr<Service> service;
    +
    180
    +
    181 future<> track_deletion() noexcept {
    +
    182 // do not wait for instance to be deleted if it is not going to notify us
    +
    183 if constexpr (std::is_base_of_v<async_sharded_service<Service>, Service>) {
    +
    184 if (service) {
    +
    185 return service->freed();
    +
    186 }
    +
    187 }
    +
    188 return make_ready_future<>();
    +
    189 }
    +
    190 };
    +
    191 std::vector<entry> _instances;
    +
    192private:
    +
    193 using invoke_on_all_func_type = std::function<future<> (Service&)>;
    +
    194private:
    +
    195 template <typename U, bool async>
    +
    196 friend struct shared_ptr_make_helper;
    +
    197
    +
    198 template <typename T>
    +
    199 std::enable_if_t<std::is_base_of_v<peering_sharded_service<T>, T>>
    +
    200 set_container(T& service) noexcept {
    +
    201 service.set_container(this);
    +
    202 }
    +
    203
    +
    204 template <typename T>
    +
    205 std::enable_if_t<!std::is_base_of_v<peering_sharded_service<T>, T>>
    +
    206 set_container(T&) noexcept {
    +
    207 }
    +
    208
    + +
    210 sharded_parallel_for_each(internal::on_each_shard_func func) noexcept(std::is_nothrow_move_constructible_v<internal::on_each_shard_func>) {
    +
    211 return internal::sharded_parallel_for_each(_instances.size(), std::move(func));
    +
    212 }
    +
    213public:
    +
    216 sharded() noexcept {}
    +
    217 sharded(const sharded& other) = delete;
    +
    218 sharded& operator=(const sharded& other) = delete;
    +
    221 sharded(sharded&& other) = delete;
    +
    222 sharded& operator=(sharded&& other) = delete;
    + +
    225
    +
    232 template <typename... Args>
    +
    233 future<> start(Args&&... args) noexcept;
    +
    234
    +
    241 template <typename... Args>
    +
    242 future<> start_single(Args&&... args) noexcept;
    +
    243
    +
    248 future<> stop() noexcept;
    +
    249
    +
    258 future<> invoke_on_all(smp_submit_to_options options, std::function<future<> (Service&)> func) noexcept;
    +
    259
    +
    265 future<> invoke_on_all(std::function<future<> (Service&)> func) noexcept {
    +
    266 try {
    +
    267 return invoke_on_all(smp_submit_to_options{}, std::move(func));
    +
    268 } catch (...) {
    + +
    270 }
    +
    271 }
    +
    272
    +
    287 template <typename Func, typename... Args>
    +
    288 requires std::invocable<Func, Service&, internal::sharded_unwrap_t<Args>...>
    +
    289 future<> invoke_on_all(smp_submit_to_options options, Func func, Args... args) noexcept;
    +
    290
    +
    296 template <typename Func, typename... Args>
    +
    297 requires std::invocable<Func, Service&, internal::sharded_unwrap_t<Args>...>
    +
    298 future<> invoke_on_all(Func func, Args... args) noexcept {
    +
    299 try {
    +
    300 return invoke_on_all(smp_submit_to_options{}, std::move(func), std::move(args)...);
    +
    301 } catch (...) {
    + +
    303 }
    +
    304 }
    +
    305
    +
    316 template <typename Func, typename... Args>
    +
    317 requires std::invocable<Func, Service&, Args...>
    +
    318 future<> invoke_on_others(smp_submit_to_options options, Func func, Args... args) noexcept;
    +
    319
    +
    331 template <typename Func, typename... Args>
    +
    332 requires std::invocable<Func, Service&, Args...>
    +
    333 future<> invoke_on_others(Func func, Args... args) noexcept {
    +
    334 try {
    +
    335 return invoke_on_others(smp_submit_to_options{}, std::move(func), std::move(args)...);
    +
    336 } catch (...) {
    + +
    338 }
    +
    339 }
    +
    340
    +
    345 template <typename Reducer, typename Func, typename... Args>
    +
    346 inline
    +
    347 auto map_reduce(Reducer&& r, Func&& func, Args&&... args) -> typename reducer_traits<Reducer>::future_type
    +
    348 {
    +
    349 return ::seastar::map_reduce(boost::make_counting_iterator<unsigned>(0),
    +
    350 boost::make_counting_iterator<unsigned>(_instances.size()),
    +
    351 [this, func = std::forward<Func>(func), args = std::make_tuple(std::forward<Args>(args)...)] (unsigned c) mutable {
    +
    352 return smp::submit_to(c, [this, &func, args] () mutable {
    +
    353 return std::apply([this, &func] (Args&&... args) mutable {
    +
    354 auto inst = get_local_service();
    +
    355 return std::invoke(func, *inst, std::forward<Args>(args)...);
    +
    356 }, std::move(args));
    +
    357 });
    +
    358 }, std::forward<Reducer>(r));
    +
    359 }
    +
    360
    +
    362 template <typename Reducer, typename Func, typename... Args>
    +
    363 inline
    +
    364 auto map_reduce(Reducer&& r, Func&& func, Args&&... args) const -> typename reducer_traits<Reducer>::future_type
    +
    365 {
    +
    366 return ::seastar::map_reduce(boost::make_counting_iterator<unsigned>(0),
    +
    367 boost::make_counting_iterator<unsigned>(_instances.size()),
    +
    368 [this, func = std::forward<Func>(func), args = std::make_tuple(std::forward<Args>(args)...)] (unsigned c) {
    +
    369 return smp::submit_to(c, [this, &func, args] () {
    +
    370 return std::apply([this, &func] (Args&&... args) {
    +
    371 auto inst = get_local_service();
    +
    372 return std::invoke(func, *inst, std::forward<Args>(args)...);
    +
    373 }, std::move(args));
    +
    374 });
    +
    375 }, std::forward<Reducer>(r));
    +
    376 }
    +
    377
    +
    394 template <typename Mapper, typename Initial, typename Reduce>
    +
    395 inline
    +
    396 future<Initial>
    +
    397 map_reduce0(Mapper map, Initial initial, Reduce reduce) {
    +
    398 auto wrapped_map = [this, map] (unsigned c) {
    +
    399 return smp::submit_to(c, [this, map] {
    +
    400 auto inst = get_local_service();
    +
    401 return std::invoke(map, *inst);
    +
    402 });
    +
    403 };
    +
    404 return ::seastar::map_reduce(smp::all_cpus().begin(), smp::all_cpus().end(),
    +
    405 std::move(wrapped_map),
    +
    406 std::move(initial),
    +
    407 std::move(reduce));
    +
    408 }
    +
    409
    +
    411 template <typename Mapper, typename Initial, typename Reduce>
    +
    412 inline
    + +
    414 map_reduce0(Mapper map, Initial initial, Reduce reduce) const {
    +
    415 auto wrapped_map = [this, map] (unsigned c) {
    +
    416 return smp::submit_to(c, [this, map] {
    +
    417 auto inst = get_local_service();
    +
    418 return std::invoke(map, *inst);
    +
    419 });
    +
    420 };
    +
    421 return ::seastar::map_reduce(smp::all_cpus().begin(), smp::all_cpus().end(),
    +
    422 std::move(wrapped_map),
    +
    423 std::move(initial),
    +
    424 std::move(reduce));
    +
    425 }
    +
    426
    +
    436 template <typename Mapper, typename Future = futurize_t<std::invoke_result_t<Mapper,Service&>>, typename return_type = decltype(internal::untuple(std::declval<typename Future::tuple_type>()))>
    +
    437 inline future<std::vector<return_type>> map(Mapper mapper) {
    +
    438 return do_with(std::vector<return_type>(), std::move(mapper),
    +
    439 [this] (std::vector<return_type>& vec, Mapper& mapper) mutable {
    +
    440 vec.resize(_instances.size());
    +
    441 return parallel_for_each(boost::irange<unsigned>(0, _instances.size()), [this, &vec, &mapper] (unsigned c) {
    +
    442 return smp::submit_to(c, [this, &mapper] {
    +
    443 auto inst = get_local_service();
    +
    444 return mapper(*inst);
    +
    445 }).then([&vec, c] (auto&& res) {
    +
    446 vec[c] = std::move(res);
    +
    447 });
    +
    448 }).then([&vec] {
    +
    449 return make_ready_future<std::vector<return_type>>(std::move(vec));
    +
    450 });
    +
    451 });
    +
    452 }
    +
    453
    +
    466 template <typename Func, typename... Args, typename Ret = futurize_t<std::invoke_result_t<Func, Service&, Args...>>>
    +
    467 requires std::invocable<Func, Service&, Args&&...>
    +
    468 Ret
    +
    469 invoke_on(unsigned id, smp_submit_to_options options, Func&& func, Args&&... args) {
    +
    470 return smp::submit_to(id, options, [this, func = std::forward<Func>(func), args = std::tuple(std::move(args)...)] () mutable {
    +
    471 auto inst = get_local_service();
    +
    472 return std::apply(std::forward<Func>(func), std::tuple_cat(std::forward_as_tuple(*inst), std::move(args)));
    +
    473 });
    +
    474 }
    +
    475
    +
    484 template <typename Func, typename... Args, typename Ret = futurize_t<std::invoke_result_t<Func, Service&, Args&&...>>>
    +
    485 requires std::invocable<Func, Service&, Args&&...>
    +
    486 Ret
    +
    487 invoke_on(unsigned id, Func&& func, Args&&... args) {
    +
    488 return invoke_on(id, smp_submit_to_options(), std::forward<Func>(func), std::forward<Args>(args)...);
    +
    489 }
    +
    490
    +
    492 const Service& local() const noexcept;
    +
    493
    +
    495 Service& local() noexcept;
    +
    496
    +
    498 shared_ptr<Service> local_shared() noexcept;
    +
    499
    +
    501 bool local_is_initialized() const noexcept;
    +
    502
    +
    503private:
    +
    504 template <typename... Args>
    +
    505 shared_ptr<Service> create_local_service(Args&&... args) {
    +
    506 auto s = ::seastar::make_shared<Service>(std::forward<Args>(args)...);
    +
    507 set_container(*s);
    +
    508 return s;
    +
    509 }
    +
    510
    +
    511 shared_ptr<Service> get_local_service() {
    +
    512 auto inst = _instances[this_shard_id()].service;
    +
    513 if (!inst) {
    +
    514 throw no_sharded_instance_exception(pretty_type_name(typeid(Service)));
    +
    515 }
    +
    516 return inst;
    +
    517 }
    +
    518
    +
    519 shared_ptr<const Service> get_local_service() const {
    +
    520 auto inst = _instances[this_shard_id()].service;
    +
    521 if (!inst) {
    +
    522 throw no_sharded_instance_exception(pretty_type_name(typeid(Service)));
    +
    523 }
    +
    524 return inst;
    +
    525 }
    +
    526};
    +
    527
    +
    528
    +
    533template <typename Func, typename... Params>
    + +
    535 Func _func;
    +
    536 std::tuple<Params...> _params;
    +
    537public:
    +
    546 explicit sharded_parameter(Func func, Params... params)
    +
    547 requires std::invocable<Func, internal::sharded_unwrap_evaluated_t<Params>...>
    +
    548 : _func(std::move(func)), _params(std::make_tuple(std::move(params)...)) {
    +
    549 }
    +
    550private:
    +
    551 auto evaluate() const;
    +
    552
    +
    553 template <typename Func_, typename... Param_>
    +
    554 friend auto internal::unwrap_sharded_arg(sharded_parameter<Func_, Param_...> sp);
    +
    555};
    +
    556
    +
    560SEASTAR_MODULE_EXPORT_END
    +
    562
    +
    563template <typename Service>
    + +
    565 assert(_instances.empty());
    +
    566}
    +
    567
    +
    568namespace internal {
    +
    569
    +
    570template <typename T>
    +
    571inline
    +
    572T&&
    +
    573unwrap_sharded_arg(T&& arg) {
    +
    574 return std::forward<T>(arg);
    +
    575}
    +
    576
    +
    577template <typename Service>
    +
    578either_sharded_or_local<Service>
    +
    579unwrap_sharded_arg(std::reference_wrapper<sharded<Service>> arg) {
    +
    580 return either_sharded_or_local<Service>(arg);
    +
    581}
    +
    582
    +
    583template <typename Func, typename... Param>
    +
    584auto
    +
    585unwrap_sharded_arg(sharded_parameter<Func, Param...> sp) {
    +
    586 return sp.evaluate();
    +
    587}
    +
    588
    +
    589template <typename Service>
    +
    590either_sharded_or_local<Service>::operator sharded<Service>& () { return _sharded; }
    +
    591
    +
    592template <typename Service>
    +
    593either_sharded_or_local<Service>::operator Service& () { return _sharded.local(); }
    +
    594
    +
    595}
    +
    596
    +
    597template <typename Func, typename... Param>
    +
    598auto
    +
    599sharded_parameter<Func, Param...>::evaluate() const {
    +
    600 auto unwrap_params_and_invoke = [this] (const auto&... params) {
    +
    601 return std::invoke(_func, internal::unwrap_sharded_arg(params)...);
    +
    602 };
    +
    603 return std::apply(unwrap_params_and_invoke, _params);
    +
    604}
    +
    605
    +
    606template <typename Service>
    +
    607template <typename... Args>
    +
    608future<>
    +
    609sharded<Service>::start(Args&&... args) noexcept {
    +
    610 try {
    +
    611 _instances.resize(smp::count);
    +
    612 return sharded_parallel_for_each(
    +
    613 [this, args = std::make_tuple(std::forward<Args>(args)...)] (unsigned c) mutable {
    +
    614 return smp::submit_to(c, [this, args] () mutable {
    +
    615 _instances[this_shard_id()].service = std::apply([this] (Args... args) {
    +
    616 return create_local_service(internal::unwrap_sharded_arg(std::forward<Args>(args))...);
    +
    617 }, args);
    +
    618 });
    +
    619 }).then_wrapped([this] (future<> f) {
    +
    620 try {
    +
    621 f.get();
    +
    622 return make_ready_future<>();
    +
    623 } catch (...) {
    +
    624 return this->stop().then([e = std::current_exception()] () mutable {
    +
    625 std::rethrow_exception(e);
    +
    626 });
    +
    627 }
    +
    628 });
    +
    629 } catch (...) {
    + +
    631 }
    +
    632}
    +
    633
    +
    634template <typename Service>
    +
    635template <typename... Args>
    + +
    637sharded<Service>::start_single(Args&&... args) noexcept {
    +
    638 try {
    +
    639 assert(_instances.empty());
    +
    640 _instances.resize(1);
    +
    641 return smp::submit_to(0, [this, args = std::make_tuple(std::forward<Args>(args)...)] () mutable {
    +
    642 _instances[0].service = std::apply([this] (Args... args) {
    +
    643 return create_local_service(internal::unwrap_sharded_arg(std::forward<Args>(args))...);
    +
    644 }, args);
    +
    645 }).then_wrapped([this] (future<> f) {
    +
    646 try {
    +
    647 f.get();
    +
    648 return make_ready_future<>();
    +
    649 } catch (...) {
    +
    650 return this->stop().then([e = std::current_exception()] () mutable {
    +
    651 std::rethrow_exception(e);
    +
    652 });
    +
    653 }
    +
    654 });
    +
    655 } catch (...) {
    + +
    657 }
    +
    658}
    +
    659
    +
    660namespace internal {
    +
    661
    +
    662// Helper check if Service::stop exists
    +
    663
    +
    664struct sharded_has_stop {
    +
    665 // If a member names "stop" exists, try to call it, even if it doesn't
    +
    666 // have the correct signature. This is so that we don't ignore a function
    +
    667 // named stop() just because the signature is incorrect, and instead
    +
    668 // force the user to resolve the ambiguity.
    +
    669 template <typename Service>
    +
    670 constexpr static auto check(int) -> std::enable_if_t<(sizeof(&Service::stop) >= 0), bool> {
    +
    671 return true;
    +
    672 }
    +
    673
    +
    674 // Fallback in case Service::stop doesn't exist.
    +
    675 template<typename>
    +
    676 static constexpr auto check(...) -> bool {
    +
    677 return false;
    +
    678 }
    +
    679};
    +
    680
    +
    681template <bool stop_exists>
    +
    682struct sharded_call_stop {
    +
    683 template <typename Service>
    +
    684 static future<> call(Service& instance);
    +
    685};
    +
    686
    +
    687template <>
    +
    688template <typename Service>
    +
    689inline
    +
    690future<> sharded_call_stop<true>::call(Service& instance) {
    +
    691 return instance.stop();
    +
    692}
    +
    693
    +
    694template <>
    +
    695template <typename Service>
    +
    696inline
    +
    697future<> sharded_call_stop<false>::call(Service&) {
    +
    698 return make_ready_future<>();
    +
    699}
    +
    700
    +
    701template <typename Service>
    +
    702inline
    +
    703future<>
    +
    704stop_sharded_instance(Service& instance) {
    +
    705 constexpr bool has_stop = internal::sharded_has_stop::check<Service>(0);
    +
    706 return internal::sharded_call_stop<has_stop>::call(instance);
    +
    707}
    +
    708
    +
    709}
    +
    710
    +
    711template <typename Service>
    +
    712future<>
    + +
    714 try {
    +
    715 return sharded_parallel_for_each([this] (unsigned c) mutable {
    +
    716 return smp::submit_to(c, [this] () mutable {
    +
    717 auto inst = _instances[this_shard_id()].service;
    +
    718 if (!inst) {
    +
    719 return make_ready_future<>();
    +
    720 }
    +
    721 return internal::stop_sharded_instance(*inst);
    +
    722 });
    +
    723 }).then_wrapped([this] (future<> fut) {
    +
    724 return sharded_parallel_for_each([this] (unsigned c) {
    +
    725 return smp::submit_to(c, [this] {
    +
    726 auto fut = _instances[this_shard_id()].track_deletion();
    +
    727 _instances[this_shard_id()].service = nullptr;
    +
    728 return fut;
    +
    729 });
    +
    730 }).finally([this, fut = std::move(fut)] () mutable {
    +
    731 _instances.clear();
    +
    732 _instances = std::vector<sharded<Service>::entry>();
    +
    733 return std::move(fut);
    +
    734 });
    +
    735 });
    +
    736 } catch (...) {
    + +
    738 }
    +
    739}
    +
    740
    +
    741template <typename Service>
    + +
    743sharded<Service>::invoke_on_all(smp_submit_to_options options, std::function<future<> (Service&)> func) noexcept {
    +
    744 try {
    +
    745 return sharded_parallel_for_each([this, options, func = std::move(func)] (unsigned c) {
    +
    746 return smp::submit_to(c, options, [this, func] {
    +
    747 return func(*get_local_service());
    +
    748 });
    +
    749 });
    +
    750 } catch (...) {
    + +
    752 }
    +
    753}
    +
    754
    +
    755template <typename Service>
    +
    756template <typename Func, typename... Args>
    +
    757requires std::invocable<Func, Service&, internal::sharded_unwrap_t<Args>...>
    +
    758inline
    + +
    760sharded<Service>::invoke_on_all(smp_submit_to_options options, Func func, Args... args) noexcept {
    +
    761 static_assert(std::is_same_v<futurize_t<std::invoke_result_t<Func, Service&, internal::sharded_unwrap_t<Args>...>>, future<>>,
    +
    762 "invoke_on_all()'s func must return void or future<>");
    +
    763 try {
    +
    764 return invoke_on_all(options, invoke_on_all_func_type([func = std::move(func), args = std::tuple(std::move(args)...)] (Service& service) mutable {
    +
    765 return std::apply([&service, &func] (Args&&... args) mutable {
    +
    766 return futurize_apply(func, std::tuple_cat(std::forward_as_tuple(service), std::tuple(internal::unwrap_sharded_arg(std::forward<Args>(args))...)));
    +
    767 }, std::move(args));
    +
    768 }));
    +
    769 } catch (...) {
    + +
    771 }
    +
    772}
    +
    773
    +
    774template <typename Service>
    +
    775template <typename Func, typename... Args>
    +
    776requires std::invocable<Func, Service&, Args...>
    +
    777inline
    + +
    779sharded<Service>::invoke_on_others(smp_submit_to_options options, Func func, Args... args) noexcept {
    +
    780 static_assert(std::is_same_v<futurize_t<std::invoke_result_t<Func, Service&, Args...>>, future<>>,
    +
    781 "invoke_on_others()'s func must return void or future<>");
    +
    782 try {
    +
    783 return invoke_on_all(options, [orig = this_shard_id(), func = std::move(func), args = std::tuple(std::move(args)...)] (Service& s) mutable -> future<> {
    +
    784 return this_shard_id() == orig ? make_ready_future<>() : futurize_apply(func, std::tuple_cat(std::forward_as_tuple(s), args));;
    +
    785 });
    +
    786 } catch (...) {
    + +
    788 }
    +
    789}
    +
    790
    +
    791template <typename Service>
    +
    792const Service& sharded<Service>::local() const noexcept {
    +
    793 assert(local_is_initialized());
    +
    794 return *_instances[this_shard_id()].service;
    +
    795}
    +
    796
    +
    797template <typename Service>
    +
    798Service& sharded<Service>::local() noexcept {
    +
    799 assert(local_is_initialized());
    +
    800 return *_instances[this_shard_id()].service;
    +
    801}
    +
    802
    +
    803template <typename Service>
    + +
    805 assert(local_is_initialized());
    +
    806 return _instances[this_shard_id()].service;
    +
    807}
    +
    808
    +
    809template <typename Service>
    +
    810inline bool sharded<Service>::local_is_initialized() const noexcept {
    +
    811 return _instances.size() > this_shard_id() &&
    +
    812 _instances[this_shard_id()].service;
    +
    813}
    +
    814
    +
    815SEASTAR_MODULE_EXPORT_BEGIN
    +
    840template <typename PtrType>
    +
    841requires (!std::is_pointer_v<PtrType>)
    + +
    843private:
    +
    844 PtrType _value;
    +
    845 unsigned _cpu;
    +
    846private:
    +
    847 void destroy(PtrType p, unsigned cpu) noexcept {
    +
    848 // `destroy()` is called from the destructor and other
    +
    849 // synchronous methods (like `reset()`), that have no way to
    +
    850 // wait for this future.
    +
    851 auto f = destroy_on(std::move(p), cpu);
    +
    852 if (!f.available() || f.failed()) {
    +
    853 internal::run_in_background(std::move(f));
    +
    854 }
    +
    855 }
    +
    856
    +
    857 static future<> destroy_on(PtrType p, unsigned cpu) noexcept {
    +
    858 if (p) {
    +
    859 if (cpu != this_shard_id()) {
    +
    860 return smp::submit_to(cpu, [v = std::move(p)] () mutable {
    +
    861 // Destroy the contained pointer. We do this explicitly
    +
    862 // in the current shard, because the lambda is destroyed
    +
    863 // in the shard that submitted the task.
    +
    864 v = {};
    +
    865 });
    +
    866 } else {
    +
    867 p = {};
    +
    868 }
    +
    869 }
    +
    870 return make_ready_future<>();
    +
    871 }
    +
    872public:
    +
    873 using element_type = typename std::pointer_traits<PtrType>::element_type;
    +
    874 using pointer = element_type*;
    +
    875
    +
    877 foreign_ptr() noexcept(std::is_nothrow_default_constructible_v<PtrType>)
    +
    878 : _value(PtrType())
    +
    879 , _cpu(this_shard_id()) {
    +
    880 }
    +
    882 foreign_ptr(std::nullptr_t) noexcept(std::is_nothrow_default_constructible_v<foreign_ptr>) : foreign_ptr() {}
    +
    884 foreign_ptr(PtrType value) noexcept(std::is_nothrow_move_constructible_v<PtrType>)
    +
    885 : _value(std::move(value))
    +
    886 , _cpu(this_shard_id()) {
    +
    887 }
    +
    888 // The type is intentionally non-copyable because copies
    +
    889 // are expensive because each copy requires across-CPU call.
    +
    890 foreign_ptr(const foreign_ptr&) = delete;
    +
    892 foreign_ptr(foreign_ptr&& other) noexcept(std::is_nothrow_move_constructible_v<PtrType>) = default;
    + +
    895 destroy(std::move(_value), _cpu);
    +
    896 }
    +
    898 future<foreign_ptr> copy() const noexcept {
    +
    899 return smp::submit_to(_cpu, [this] () mutable {
    +
    900 auto v = _value;
    +
    901 return make_foreign(std::move(v));
    +
    902 });
    +
    903 }
    +
    905 element_type& operator*() const noexcept(noexcept(*_value)) { return *_value; }
    +
    907 element_type* operator->() const noexcept(noexcept(&*_value)) { return &*_value; }
    +
    909 pointer get() const noexcept(noexcept(&*_value)) { return &*_value; }
    +
    914 unsigned get_owner_shard() const noexcept { return _cpu; }
    +
    916 operator bool() const noexcept(noexcept(static_cast<bool>(_value))) { return static_cast<bool>(_value); }
    +
    918 foreign_ptr& operator=(foreign_ptr&& other) noexcept(std::is_nothrow_move_constructible_v<PtrType>) {
    +
    919 destroy(std::move(_value), _cpu);
    +
    920 _value = std::move(other._value);
    +
    921 _cpu = other._cpu;
    +
    922 return *this;
    +
    923 }
    +
    929 PtrType release() noexcept(std::is_nothrow_default_constructible_v<PtrType>) {
    +
    930 return std::exchange(_value, {});
    +
    931 }
    +
    935 void reset(PtrType new_ptr) noexcept(std::is_nothrow_move_constructible_v<PtrType>) {
    +
    936 auto old_ptr = std::move(_value);
    +
    937 auto old_cpu = _cpu;
    +
    938
    +
    939 _value = std::move(new_ptr);
    +
    940 _cpu = this_shard_id();
    +
    941
    +
    942 destroy(std::move(old_ptr), old_cpu);
    +
    943 }
    +
    947 void reset(std::nullptr_t = nullptr) noexcept(std::is_nothrow_default_constructible_v<PtrType>) {
    +
    948 reset(PtrType());
    +
    949 }
    +
    950
    +
    954 future<> destroy() noexcept {
    +
    955 return destroy_on(std::move(_value), _cpu);
    +
    956 }
    +
    957};
    +
    958
    +
    962template <typename T>
    + +
    964 return foreign_ptr<T>(std::move(ptr));
    +
    965}
    +
    966
    +
    968
    +
    969template<typename T>
    +
    970struct is_smart_ptr<foreign_ptr<T>> : std::true_type {};
    +
    971
    +
    972SEASTAR_MODULE_EXPORT_END
    +
    973
    +
    974}
    +
    Definition: sharded.hh:120
    +
    Definition: shared_ptr.hh:499
    +
    Definition: sharded.hh:842
    +
    pointer get() const noexcept(noexcept(&*_value))
    Access the raw pointer to the wrapped object.
    Definition: sharded.hh:909
    +
    foreign_ptr(std::nullptr_t) noexcept(std::is_nothrow_default_constructible_v< foreign_ptr >)
    Constructs a null foreign_ptr<>.
    Definition: sharded.hh:882
    +
    element_type * operator->() const noexcept(noexcept(&*_value))
    Accesses the wrapped object.
    Definition: sharded.hh:907
    +
    void reset(PtrType new_ptr) noexcept(std::is_nothrow_move_constructible_v< PtrType >)
    Definition: sharded.hh:935
    +
    unsigned get_owner_shard() const noexcept
    Definition: sharded.hh:914
    +
    ~foreign_ptr()
    Destroys the wrapped object on its original cpu.
    Definition: sharded.hh:894
    +
    foreign_ptr(PtrType value) noexcept(std::is_nothrow_move_constructible_v< PtrType >)
    Wraps a pointer object and remembers the current core.
    Definition: sharded.hh:884
    +
    foreign_ptr(foreign_ptr &&other) noexcept(std::is_nothrow_move_constructible_v< PtrType >)=default
    Moves a foreign_ptr<> to another object.
    +
    void reset(std::nullptr_t=nullptr) noexcept(std::is_nothrow_default_constructible_v< PtrType >)
    Definition: sharded.hh:947
    +
    foreign_ptr() noexcept(std::is_nothrow_default_constructible_v< PtrType >)
    Constructs a null foreign_ptr<>.
    Definition: sharded.hh:877
    +
    foreign_ptr & operator=(foreign_ptr &&other) noexcept(std::is_nothrow_move_constructible_v< PtrType >)
    Move-assigns a foreign_ptr<>.
    Definition: sharded.hh:918
    +
    future< foreign_ptr > copy() const noexcept
    Creates a copy of this foreign ptr. Only works if the stored ptr is copyable.
    Definition: sharded.hh:898
    +
    future destroy() noexcept
    Definition: sharded.hh:954
    +
    PtrType release() noexcept(std::is_nothrow_default_constructible_v< PtrType >)
    Definition: sharded.hh:929
    +
    element_type & operator*() const noexcept(noexcept(*_value))
    Accesses the wrapped object.
    Definition: sharded.hh:905
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Result then(Func &&func) noexcept
    Schedule a block of code to run when the future is ready.
    Definition: future.hh:1425
    +
    value_type && get()
    gets the value returned by the computation
    Definition: future.hh:1342
    +
    Exception thrown when a sharded object does not exist.
    Definition: sharded.hh:156
    +
    Provide a sharded service with access to its peers.
    Definition: sharded.hh:140
    + +
    void set_value(A &&... a) noexcept
    Sets the promises value.
    Definition: future.hh:990
    +
    Helper to pass a parameter to a sharded<> object that depends on the shard. It is evaluated on the sh...
    Definition: sharded.hh:534
    +
    sharded_parameter(Func func, Params... params)
    Definition: sharded.hh:546
    +
    Definition: sharded.hh:177
    +
    sharded(sharded &&other)=delete
    +
    ~sharded()
    Destroyes a sharded object. Must not be in a started state.
    Definition: sharded.hh:564
    +
    future invoke_on_all(smp_submit_to_options options, Func func, Args... args) noexcept
    Definition: sharded.hh:760
    +
    Ret invoke_on(unsigned id, Func &&func, Args &&... args)
    Definition: sharded.hh:487
    +
    future invoke_on_all(smp_submit_to_options options, std::function< future<>(Service &)> func) noexcept
    Definition: sharded.hh:743
    +
    future start_single(Args &&... args) noexcept
    Definition: sharded.hh:637
    +
    const Service & local() const noexcept
    Gets a reference to the local instance.
    Definition: sharded.hh:792
    +
    future< std::vector< return_type > > map(Mapper mapper)
    Definition: sharded.hh:437
    +
    future< Initial > map_reduce0(Mapper map, Initial initial, Reduce reduce) const
    The const version of map_reduce0(Mapper map, Initial initial, Reduce reduce)
    Definition: sharded.hh:414
    +
    auto map_reduce(Reducer &&r, Func &&func, Args &&... args) const -> typename reducer_traits< Reducer >::future_type
    The const version of map_reduce(Reducer&& r, Func&& func)
    Definition: sharded.hh:364
    +
    future invoke_on_others(smp_submit_to_options options, Func func, Args... args) noexcept
    Definition: sharded.hh:779
    +
    sharded() noexcept
    Definition: sharded.hh:216
    +
    future stop() noexcept
    Definition: sharded.hh:713
    +
    future invoke_on_others(Func func, Args... args) noexcept
    Definition: sharded.hh:333
    +
    auto map_reduce(Reducer &&r, Func &&func, Args &&... args) -> typename reducer_traits< Reducer >::future_type
    Definition: sharded.hh:347
    +
    future< Initial > map_reduce0(Mapper map, Initial initial, Reduce reduce)
    Definition: sharded.hh:397
    +
    Ret invoke_on(unsigned id, smp_submit_to_options options, Func &&func, Args &&... args)
    Definition: sharded.hh:469
    +
    future start(Args &&... args) noexcept
    Definition: sharded.hh:609
    +
    future invoke_on_all(Func func, Args... args) noexcept
    Definition: sharded.hh:298
    + +
    future< T > get_future() noexcept
    Gets the promise's associated future.
    Definition: future.hh:1926
    +
    future< T > current_exception_as_future() noexcept
    Returns std::current_exception() wrapped in a future.
    Definition: future.hh:1962
    +
    auto do_with(T1 &&rv1, T2 &&rv2, More &&... more) noexcept
    Definition: do_with.hh:135
    +
    auto map_reduce(Iterator begin, Iterator end, Mapper &&mapper, Reducer &&r) -> typename reducer_traits< Reducer >::future_type
    Definition: map_reduce.hh:107
    +
    future parallel_for_each(Iterator begin, Sentinel end, Func &&func) noexcept
    Run tasks in parallel (iterator version).
    Definition: loop.hh:565
    +
    foreign_ptr< T > make_foreign(T ptr)
    Definition: sharded.hh:963
    +
    std::future< T > submit_to(instance &instance, unsigned shard, Func func)
    Definition: alien.hh:204
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    shard_id this_shard_id() noexcept
    Returns shard_id of the of the current shard.
    Definition: shard_id.hh:52
    +
    Definition: shared_ptr.hh:659
    +
    STL namespace.
    + +
    Definition: is_smart_ptr.hh:30
    +
    Options controlling the behaviour of smp::submit_to().
    Definition: smp.hh:168
    +
    + + + + diff --git a/master/sharded_parameter_demo_8cc-example.html b/master/sharded_parameter_demo_8cc-example.html new file mode 100644 index 000000000..c7dd49535 --- /dev/null +++ b/master/sharded_parameter_demo_8cc-example.html @@ -0,0 +1,162 @@ + + + + + + + +Seastar: sharded_parameter_demo.cc + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    sharded_parameter_demo.cc
    +
    +
    +

    Example use of sharded_parameter.

    +
    /*
    +
    * This file is open source software, licensed to you under the terms
    +
    * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    * distributed with this work for additional information regarding copyright
    +
    * ownership. 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.
    +
    */
    +
    /*
    +
    * Copyright 2020 ScyllaDB
    +
    */
    +
    +
    +
    // Demonstration of seastar::sharded_parameter
    +
    +
    #include <seastar/core/sharded.hh>
    +
    #include <seastar/core/app-template.hh>
    +
    #include <seastar/core/thread.hh>
    + +
    #include <cassert>
    +
    +
    // This is some service that we wish to run on all shards.
    +
    class service_one {
    +
    int _capacity = 7;
    +
    public:
    +
    // Pretend that this int is some important resource.
    +
    int get_capacity() const { return _capacity; }
    +
    };
    +
    +
    // Another service that we run on all shards, that depends on service_one.
    +
    class service_two {
    +
    int _resource_allocation;
    +
    public:
    +
    service_two(service_one& s1, int resource_allocation) : _resource_allocation(resource_allocation) {}
    +
    int get_resource_allocation() const { return _resource_allocation; }
    +
    };
    +
    +
    int main(int ac, char** av) {
    +
    seastar::app_template app;
    +
    return app.run(ac, av, [&] {
    +
    // sharded<> setup code is typically run in a seastar::thread
    +
    return seastar::async([&] {
    +
    +
    // Launch service_one
    + +
    s1.start().get();
    +
    auto stop_s1 = seastar::deferred_stop(s1);
    +
    +
    auto calculate_half_capacity = [] (service_one& s1) {
    +
    return s1.get_capacity() / 2;
    +
    };
    +
    +
    // Launch service_two, passing it per-shard dependencies from s1
    + +
    // Start s2, passing two parameters to service_two's constructor
    +
    s2.start(
    +
    // Each service_two instance will get a reference to a service_one instance on the same shard
    +
    std::ref(s1),
    +
    // This calculation will be performed on each shard
    +
    seastar::sharded_parameter(calculate_half_capacity, std::ref(s1))
    +
    ).get();
    +
    auto stop_s2 = seastar::deferred_stop(s2);
    +
    +
    s2.invoke_on_all([] (service_two& s2) {
    +
    assert(s2.get_resource_allocation() == 3);
    +
    }).get();
    +
    });
    +
    });
    +
    }
    +
    Definition: closeable.hh:118
    +
    Helper to pass a parameter to a sharded<> object that depends on the shard. It is evaluated on the sh...
    Definition: sharded.hh:534
    +
    Definition: sharded.hh:177
    +
    future invoke_on_all(smp_submit_to_options options, std::function< future<>(Service &)> func) noexcept
    Definition: sharded.hh:743
    +
    future start(Args &&... args) noexcept
    Definition: sharded.hh:609
    + +
    futurize_t< std::invoke_result_t< Func, Args... > > async(thread_attributes attr, Func &&func, Args &&... args) noexcept
    Definition: thread.hh:245
    +
    reference_wrapper< T > ref(T &object) noexcept
    Wraps reference in a reference_wrapper.
    Definition: reference_wrapper.hh:62
    +
    + + + + diff --git a/master/shared__future_8hh_source.html b/master/shared__future_8hh_source.html new file mode 100644 index 000000000..1ebf20599 --- /dev/null +++ b/master/shared__future_8hh_source.html @@ -0,0 +1,423 @@ + + + + + + + +Seastar: seastar/core/shared_future.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    shared_future.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright (C) 2015 ScyllaDB
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#ifndef SEASTAR_MODULE
    +
    26#include <seastar/core/future.hh>
    +
    27#include <seastar/core/abortable_fifo.hh>
    +
    28#include <seastar/core/abort_on_expiry.hh>
    +
    29#include <seastar/core/timed_out_error.hh>
    +
    30#include <seastar/util/modules.hh>
    +
    31#include <exception>
    +
    32#include <optional>
    +
    33#endif
    +
    34
    +
    35namespace seastar {
    +
    36
    +
    39
    +
    41template<typename Clock>
    +
    42struct with_clock {};
    +
    43
    +
    45
    +
    46template <typename... T>
    +
    47struct future_option_traits;
    +
    48
    +
    49template <typename Clock, typename T>
    +
    50struct future_option_traits<with_clock<Clock>, T> {
    +
    51 using clock_type = Clock;
    +
    52
    +
    53 using future_type = future<T>;
    +
    54 using promise_type = promise<T>;
    +
    55};
    +
    56
    +
    57template <typename Clock>
    +
    58struct future_option_traits<with_clock<Clock>> {
    +
    59 using clock_type = Clock;
    +
    60
    +
    61 using future_type = future<>;
    +
    62 using promise_type = promise<>;
    +
    63};
    +
    64
    +
    65template <typename T>
    +
    66struct future_option_traits<T> : public future_option_traits<with_clock<lowres_clock>, T> {
    +
    67};
    +
    68
    +
    69template <>
    +
    70struct future_option_traits<> : future_option_traits<void> {
    +
    71};
    +
    72
    +
    74
    +
    107template<typename... T>
    + +
    109 template <typename... U> friend class shared_promise;
    +
    110 using options = future_option_traits<T...>;
    +
    111public:
    +
    112 using clock = typename options::clock_type;
    +
    113 using time_point = typename clock::time_point;
    +
    114 using future_type = typename future_option_traits<T...>::future_type;
    +
    115 using promise_type = typename future_option_traits<T...>::promise_type;
    +
    116 using value_tuple_type = typename future_type::tuple_type;
    +
    117private:
    +
    119 class shared_state final : public enable_lw_shared_from_this<shared_state>, public task {
    +
    120 future_type _original_future;
    +
    121 // Ensures that shared_state is alive until run_and_dispose() runs (if the task was scheduled)
    +
    122 lw_shared_ptr<shared_state> _keepaliver;
    +
    123 struct entry {
    +
    124 promise_type pr;
    +
    125 std::optional<abort_on_expiry<clock>> timer;
    +
    126 };
    +
    127
    +
    128 struct entry_expiry {
    +
    129 void operator()(entry& e) noexcept {
    +
    130 if (e.timer) {
    +
    131 e.pr.set_exception(std::make_exception_ptr(timed_out_error()));
    +
    132 } else {
    +
    133 e.pr.set_exception(std::make_exception_ptr(abort_requested_exception()));
    +
    134 }
    +
    135 };
    +
    136 };
    +
    137
    +
    138 internal::abortable_fifo<entry, entry_expiry> _peers;
    +
    139
    +
    140 public:
    +
    141 ~shared_state() {
    +
    142 // Don't warn if the shared future is exceptional. Any
    +
    143 // warnings will be reported by the futures returned by
    +
    144 // get_future.
    +
    145 if (_original_future.failed()) {
    +
    146 _original_future.ignore_ready_future();
    +
    147 }
    +
    148 }
    +
    149 explicit shared_state(future_type f) noexcept
    +
    150 : task(default_scheduling_group()) // SG is set later, when the task is scheduled
    +
    151 , _original_future(std::move(f)) {
    +
    152 }
    +
    153 void run_and_dispose() noexcept override {
    +
    154 auto& state = _original_future._state;
    +
    155 if (_original_future.failed()) {
    +
    156 while (_peers) {
    +
    157 _peers.front().pr.set_exception(state.get_exception());
    +
    158 _peers.pop_front();
    +
    159 }
    +
    160 } else {
    +
    161 while (_peers) {
    +
    162 auto& p = _peers.front().pr;
    +
    163 try {
    +
    164 p.set_value(state.get_value());
    +
    165 } catch (...) {
    +
    166 p.set_exception(std::current_exception());
    +
    167 }
    +
    168 _peers.pop_front();
    +
    169 }
    +
    170 }
    +
    171 // _peer is now empty, but let's also make sure it releases any
    +
    172 // memory it might hold in reserve.
    +
    173 _peers = {};
    +
    174 _keepaliver.release();
    +
    175 }
    +
    176
    +
    177 task* waiting_task() noexcept override {
    +
    178 return nullptr;
    +
    179 }
    +
    180
    +
    181 future_type get_future(time_point timeout = time_point::max()) noexcept {
    +
    182 // Note that some functions called below may throw,
    +
    183 // like pushing to _peers or copying _original_future's ready value.
    +
    184 // We'd rather terminate than propagate these errors similar to
    +
    185 // .then()'s failure to allocate a continuation as the caller cannot
    +
    186 // distinguish between an error returned by the original future to
    +
    187 // failing to perform `get_future` itself.
    + +
    189 if (!_original_future.available()) {
    +
    190 entry& e = _peers.emplace_back();
    +
    191
    +
    192 auto f = e.pr.get_future();
    +
    193 if (timeout != time_point::max()) {
    +
    194 e.timer.emplace(timeout);
    +
    195 abort_source& as = e.timer->abort_source();
    +
    196 _peers.make_back_abortable(as);
    +
    197 }
    +
    198 if (!_keepaliver) {
    +
    199 this->set_scheduling_group(current_scheduling_group());
    +
    200 _original_future.set_task(*this);
    +
    201 _keepaliver = this->shared_from_this();
    +
    202 }
    +
    203 return f;
    +
    204 } else if (_original_future.failed()) {
    +
    205 return future_type(exception_future_marker(), std::exception_ptr(_original_future._state.get_exception()));
    +
    206 } else {
    +
    207 return future_type(ready_future_marker(), _original_future._state.get_value());
    +
    208 }
    +
    209 }
    +
    210
    +
    211 future_type get_future(abort_source& as) noexcept {
    +
    212 // Note that some functions called below may throw,
    +
    213 // like pushing to _peers or copying _original_future's ready value.
    +
    214 // We'd rather terminate than propagate these errors similar to
    +
    215 // .then()'s failure to allocate a continuation as the caller cannot
    +
    216 // distinguish between an error returned by the original future to
    +
    217 // failing to perform `get_future` itself.
    + +
    219 if (!_original_future.available()) {
    +
    220 entry& e = _peers.emplace_back();
    +
    221
    +
    222 auto f = e.pr.get_future();
    +
    223 _peers.make_back_abortable(as);
    +
    224 if (!_keepaliver) {
    +
    225 this->set_scheduling_group(current_scheduling_group());
    +
    226 _original_future.set_task(*this);
    +
    227 _keepaliver = this->shared_from_this();
    +
    228 }
    +
    229 return f;
    +
    230 } else if (_original_future.failed()) {
    +
    231 return future_type(exception_future_marker(), std::exception_ptr(_original_future._state.get_exception()));
    +
    232 } else {
    +
    233 return future_type(ready_future_marker(), _original_future._state.get_value());
    +
    234 }
    +
    235 }
    +
    236
    +
    237 bool available() const noexcept {
    +
    238 return _original_future.available();
    +
    239 }
    +
    240
    +
    241 bool failed() const noexcept {
    +
    242 return _original_future.failed();
    +
    243 }
    +
    244
    +
    245 // Used only in tests (see shared_future_tester in futures_test.cc)
    +
    246 bool has_scheduled_task() const noexcept {
    +
    247 return _keepaliver != nullptr;
    +
    248 }
    +
    249 };
    + +
    252public:
    +
    254 shared_future(future_type f)
    +
    255 : _state(make_lw_shared<shared_state>(std::move(f))) { }
    +
    256
    +
    257 shared_future() = default; // noexcept, based on the respective lw_shared_ptr constructor
    +
    258 shared_future(const shared_future&) = default; // noexcept, based on the respective lw_shared_ptr constructor
    +
    259 shared_future& operator=(const shared_future&) = default; // noexcept, based on respective constructor
    +
    260 shared_future(shared_future&&) = default; // noexcept, based on the respective lw_shared_ptr constructor
    +
    261 shared_future& operator=(shared_future&&) = default; // noexcept, based on the respective constructor
    +
    262
    +
    269 future_type get_future(time_point timeout = time_point::max()) const noexcept {
    +
    270 return _state->get_future(timeout);
    +
    271 }
    +
    272
    +
    279 future_type get_future(abort_source& as) const noexcept {
    +
    280 return _state->get_future(as);
    +
    281 }
    +
    282
    +
    286 bool available() const noexcept {
    +
    287 return _state->available();
    +
    288 }
    +
    289
    +
    293 bool failed() const noexcept {
    +
    294 return _state->failed();
    +
    295 }
    +
    296
    +
    298 operator future_type() const noexcept {
    +
    299 return get_future();
    +
    300 }
    +
    301
    +
    303 bool valid() const noexcept {
    +
    304 return bool(_state);
    +
    305 }
    +
    306
    +
    308 friend class shared_future_tester;
    +
    310};
    +
    311
    +
    317SEASTAR_MODULE_EXPORT
    +
    318template <typename... T>
    + +
    320public:
    +
    321 using shared_future_type = shared_future<T...>;
    +
    322 using future_type = typename shared_future_type::future_type;
    +
    323 using promise_type = typename shared_future_type::promise_type;
    +
    324 using clock = typename shared_future_type::clock;
    +
    325 using time_point = typename shared_future_type::time_point;
    +
    326 using value_tuple_type = typename shared_future_type::value_tuple_type;
    +
    327private:
    +
    328 promise_type _promise;
    +
    329 shared_future_type _shared_future;
    +
    330 static constexpr bool copy_noexcept = future_type::copy_noexcept;
    +
    331public:
    +
    332 shared_promise(const shared_promise&) = delete;
    +
    333 shared_promise(shared_promise&&) = default; // noexcept, based on the respective promise and shared_future constructors
    +
    334 shared_promise& operator=(shared_promise&&) = default; // noexcept, based on the respective promise and shared_future constructors
    +
    335 shared_promise() : _promise(), _shared_future(_promise.get_future()) {
    +
    336 }
    +
    337
    +
    341 future_type get_shared_future(time_point timeout = time_point::max()) const noexcept {
    +
    342 return _shared_future.get_future(timeout);
    +
    343 }
    +
    344
    +
    349 future_type get_shared_future(abort_source& as) const noexcept {
    +
    350 return _shared_future.get_future(as);
    +
    351 }
    +
    352
    +
    354 void set_value(const value_tuple_type& result) noexcept(copy_noexcept) {
    +
    355 _promise.set_value(result);
    +
    356 }
    +
    357
    +
    359 void set_value(value_tuple_type&& result) noexcept {
    +
    360 _promise.set_value(std::move(result));
    +
    361 }
    +
    362
    +
    364 template <typename... A>
    +
    365 void set_value(A&&... a) noexcept {
    +
    366 _promise.set_value(std::forward<A>(a)...);
    +
    367 }
    +
    368
    +
    370 void set_exception(std::exception_ptr ex) noexcept {
    +
    371 _promise.set_exception(std::move(ex));
    +
    372 }
    +
    373
    +
    375 template<typename Exception>
    +
    376 void set_exception(Exception&& e) noexcept {
    +
    377 set_exception(make_exception_ptr(std::forward<Exception>(e)));
    +
    378 }
    +
    379
    +
    381 bool available() const noexcept {
    +
    382 return _shared_future.available();
    +
    383 }
    +
    384
    +
    386 bool failed() const noexcept {
    +
    387 return _shared_future.failed();
    +
    388 }
    +
    389};
    +
    390
    +
    392
    +
    393}
    +
    Definition: abort_source.hh:48
    +
    Definition: abort_source.hh:58
    +
    Definition: shared_ptr.hh:148
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    + +
    promise - allows a future value to be made available at a later time.
    Definition: future.hh:934
    +
    Like future except the result can be waited for by many fibers.
    Definition: shared_future.hh:108
    +
    bool available() const noexcept
    Returns true if the future is available (ready or failed)
    Definition: shared_future.hh:286
    +
    shared_future(future_type f)
    Forwards the result of future f into this shared_future.
    Definition: shared_future.hh:254
    +
    future_type get_future(abort_source &as) const noexcept
    Creates a new future which will resolve with the result of this shared_future.
    Definition: shared_future.hh:279
    +
    bool failed() const noexcept
    Returns true if the future is failed.
    Definition: shared_future.hh:293
    +
    bool valid() const noexcept
    Returns true if the instance is in valid state.
    Definition: shared_future.hh:303
    +
    future_type get_future(time_point timeout=time_point::max()) const noexcept
    Creates a new future which will resolve with the result of this shared_future.
    Definition: shared_future.hh:269
    +
    Like promise except that its counterpart is shared_future instead of future.
    Definition: shared_future.hh:319
    +
    void set_exception(Exception &&e) noexcept
    Marks the shared_promise as failed, same as normal promise.
    Definition: shared_future.hh:376
    +
    void set_value(value_tuple_type &&result) noexcept
    Sets the shared_promise's value (as tuple; by moving), same as normal promise.
    Definition: shared_future.hh:359
    +
    bool failed() const noexcept
    Returns true if the underlying future is failed.
    Definition: shared_future.hh:386
    +
    void set_exception(std::exception_ptr ex) noexcept
    Marks the shared_promise as failed, same as normal promise.
    Definition: shared_future.hh:370
    +
    void set_value(const value_tuple_type &result) noexcept(copy_noexcept)
    Sets the shared_promise's value (as tuple; by copying), same as normal promise.
    Definition: shared_future.hh:354
    +
    future_type get_shared_future(time_point timeout=time_point::max()) const noexcept
    Gets new future associated with this promise. If the promise is not resolved before timeout the retur...
    Definition: shared_future.hh:341
    +
    future_type get_shared_future(abort_source &as) const noexcept
    Gets new future associated with this promise. If the promise is not resolved before abort source is t...
    Definition: shared_future.hh:349
    +
    void set_value(A &&... a) noexcept
    Sets the shared_promise's value (variadic), same as normal promise.
    Definition: shared_future.hh:365
    +
    bool available() const noexcept
    Returns true if the underlying future is available (ready or failed)
    Definition: shared_future.hh:381
    +
    Definition: task.hh:34
    +
    Definition: timed_out_error.hh:34
    +
    Definition: timer.hh:83
    +
    Definition: future.hh:566
    +
    Definition: future.hh:565
    +
    Changes the clock used by shared_future<> and shared_promise<> when passed as the first template para...
    Definition: shared_future.hh:42
    +
    Definition: critical_alloc_section.hh:80
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    scheduling_group current_scheduling_group() noexcept
    Returns the current scheduling group.
    Definition: scheduling.hh:399
    +
    STL namespace.
    +
    + + + + diff --git a/master/shared__mutex_8hh_source.html b/master/shared__mutex_8hh_source.html new file mode 100644 index 000000000..3d7856bee --- /dev/null +++ b/master/shared__mutex_8hh_source.html @@ -0,0 +1,325 @@ + + + + + + + +Seastar: seastar/core/shared_mutex.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    shared_mutex.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2015 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <seastar/core/coroutine.hh>
    +
    26#include <seastar/core/future.hh>
    +
    27#include <seastar/core/chunked_fifo.hh>
    +
    28#include <seastar/util/modules.hh>
    +
    29#include <cassert>
    +
    30#include <mutex>
    +
    31#include <utility>
    +
    32#include <shared_mutex>
    +
    33#endif
    +
    34
    +
    35namespace seastar {
    +
    36
    +
    37SEASTAR_MODULE_EXPORT_BEGIN
    +
    38
    +
    41
    + +
    60 unsigned _readers = 0;
    +
    61 bool _writer = false;
    +
    62 struct waiter {
    +
    63 waiter(promise<>&& pr, bool for_write) : pr(std::move(pr)), for_write(for_write) {}
    +
    64 promise<> pr;
    +
    65 bool for_write;
    +
    66 };
    +
    67 chunked_fifo<waiter> _waiters;
    +
    68public:
    +
    69 shared_mutex() = default;
    +
    70 shared_mutex(shared_mutex&&) = default;
    +
    71 shared_mutex& operator=(shared_mutex&&) = default;
    +
    72 shared_mutex(const shared_mutex&) = delete;
    +
    73 void operator=(const shared_mutex&) = delete;
    +
    78 future<> lock_shared() noexcept {
    +
    79 if (try_lock_shared()) {
    +
    80 return make_ready_future<>();
    +
    81 }
    +
    82 try {
    +
    83 _waiters.emplace_back(promise<>(), false);
    +
    84 return _waiters.back().pr.get_future();
    +
    85 } catch (...) {
    + +
    87 }
    +
    88 }
    +
    92 bool try_lock_shared() noexcept {
    +
    93 if (!_writer && _waiters.empty()) {
    +
    94 ++_readers;
    +
    95 return true;
    +
    96 }
    +
    97 return false;
    +
    98 }
    +
    100 void unlock_shared() noexcept {
    +
    101 assert(_readers > 0);
    +
    102 --_readers;
    +
    103 wake();
    +
    104 }
    +
    109 future<> lock() noexcept {
    +
    110 if (try_lock()) {
    +
    111 return make_ready_future<>();
    +
    112 }
    +
    113 try {
    +
    114 _waiters.emplace_back(promise<>(), true);
    +
    115 return _waiters.back().pr.get_future();
    +
    116 } catch (...) {
    + +
    118 }
    +
    119 }
    +
    123 bool try_lock() noexcept {
    +
    124 if (!_readers && !_writer) {
    +
    125 _writer = true;
    +
    126 return true;
    +
    127 }
    +
    128 return false;
    +
    129 }
    +
    131 void unlock() noexcept {
    +
    132 assert(_writer);
    +
    133 _writer = false;
    +
    134 wake();
    +
    135 }
    +
    136private:
    +
    137 void wake() noexcept {
    +
    138 while (!_waiters.empty()) {
    +
    139 auto& w = _waiters.front();
    +
    140 // note: _writer == false in wake()
    +
    141 if (w.for_write) {
    +
    142 if (!_readers) {
    +
    143 _writer = true;
    +
    144 w.pr.set_value();
    +
    145 _waiters.pop_front();
    +
    146 }
    +
    147 break;
    +
    148 } else { // for read
    +
    149 ++_readers;
    +
    150 w.pr.set_value();
    +
    151 _waiters.pop_front();
    +
    152 }
    +
    153 }
    +
    154 }
    +
    155};
    +
    156
    +
    167template <std::invocable Func>
    +
    168 requires std::is_nothrow_move_constructible_v<Func>
    +
    169 inline
    +
    170 futurize_t<std::invoke_result_t<Func>>
    +
    171with_shared(shared_mutex& sm, Func&& func) noexcept {
    +
    172 return sm.lock_shared().then([&sm, func = std::forward<Func>(func)] () mutable {
    +
    173 return futurize_invoke(func).finally([&sm] {
    +
    174 sm.unlock_shared();
    +
    175 });
    +
    176 });
    +
    177}
    +
    178
    +
    179template <std::invocable Func>
    +
    180 requires (!std::is_nothrow_move_constructible_v<Func>)
    +
    181 inline
    +
    182 futurize_t<std::invoke_result_t<Func>>
    +
    183with_shared(shared_mutex& sm, Func&& func) noexcept {
    +
    184 // FIXME: use a coroutine when c++17 support is dropped
    +
    185 try {
    +
    186 return do_with(std::forward<Func>(func), [&sm] (Func& func) {
    +
    187 return sm.lock_shared().then([&func] {
    +
    188 return func();
    +
    189 }).finally([&sm] {
    +
    190 sm.unlock_shared();
    +
    191 });
    +
    192 });
    +
    193 } catch (...) {
    +
    194 return futurize<std::invoke_result_t<Func>>::current_exception_as_future();
    +
    195 }
    +
    196}
    +
    197
    +
    208template <std::invocable Func>
    +
    209 requires std::is_nothrow_move_constructible_v<Func>
    +
    210 inline
    +
    211 futurize_t<std::invoke_result_t<Func>>
    +
    212with_lock(shared_mutex& sm, Func&& func) noexcept {
    +
    213 return sm.lock().then([&sm, func = std::forward<Func>(func)] () mutable {
    +
    214 return futurize_invoke(func).finally([&sm] {
    +
    215 sm.unlock();
    +
    216 });
    +
    217 });
    +
    218}
    +
    219
    +
    220
    +
    221template <std::invocable Func>
    +
    222 requires (!std::is_nothrow_move_constructible_v<Func>)
    +
    223 inline
    +
    224 futurize_t<std::invoke_result_t<Func>>
    +
    225with_lock(shared_mutex& sm, Func&& func) noexcept {
    +
    226 // FIXME: use a coroutine when c++17 support is dropped
    +
    227 try {
    +
    228 return do_with(std::forward<Func>(func), [&sm] (Func& func) {
    +
    229 return sm.lock().then([&func] {
    +
    230 return func();
    +
    231 }).finally([&sm] {
    +
    232 sm.unlock();
    +
    233 });
    +
    234 });
    +
    235 } catch (...) {
    +
    236 return futurize<std::invoke_result_t<Func>>::current_exception_as_future();
    +
    237 }
    +
    238}
    +
    239
    +
    240namespace internal {
    +
    241
    +
    244template <typename T>
    +
    245concept FutureBasicLockable = requires (T& t) {
    +
    246 { t.lock() } -> std::same_as<future<>>;
    +
    247 { t.unlock() } noexcept -> std::same_as<void>;
    +
    248};
    +
    249
    +
    255template <typename T>
    +
    256concept FutureBasicSharedLockable = requires (T& t) {
    +
    257 { t.lock_shared() } -> std::same_as<future<>>;
    +
    258 { t.unlock_shared() } noexcept -> std::same_as<void>;
    +
    259};
    +
    260
    +
    261} // namespace internal
    +
    262
    +
    271template <internal::FutureBasicSharedLockable T>
    + +
    273 co_await t.lock_shared();
    +
    274
    +
    275 try {
    +
    276 co_return std::shared_lock<T>{t, std::adopt_lock_t{}};
    +
    277 } catch (...) {
    +
    278 t.unlock_shared();
    +
    279 throw;
    +
    280 }
    +
    281}
    +
    282
    +
    291template <internal::FutureBasicLockable T>
    + +
    293 co_await t.lock();
    +
    294
    +
    295 try {
    +
    296 co_return std::unique_lock<T>{t, std::adopt_lock_t{}};
    +
    297 } catch (...) {
    +
    298 t.unlock();
    +
    299 throw;
    +
    300 }
    +
    301}
    +
    302
    +
    304SEASTAR_MODULE_EXPORT_END
    +
    305
    +
    306}
    + +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Result then(Func &&func) noexcept
    Schedule a block of code to run when the future is ready.
    Definition: future.hh:1425
    + +
    Shared/exclusive mutual exclusion.
    Definition: shared_mutex.hh:59
    +
    void unlock_shared() noexcept
    Unlocks a shared_mutex after a previous call to lock_shared().
    Definition: shared_mutex.hh:100
    +
    future lock() noexcept
    Definition: shared_mutex.hh:109
    +
    bool try_lock() noexcept
    Definition: shared_mutex.hh:123
    +
    void unlock() noexcept
    Unlocks a shared_mutex after a previous call to lock().
    Definition: shared_mutex.hh:131
    +
    bool try_lock_shared() noexcept
    Definition: shared_mutex.hh:92
    +
    future lock_shared() noexcept
    Definition: shared_mutex.hh:78
    +
    future< std::shared_lock< T > > get_shared_lock(T &t)
    Construct a RAII-based shared lock corresponding to a given object.
    Definition: shared_mutex.hh:272
    +
    future< std::unique_lock< T > > get_unique_lock(T &t)
    Construct a RAII-based unique lock corresponding to a given object.
    Definition: shared_mutex.hh:292
    +
    futurize_t< std::invoke_result_t< Func > > with_lock(shared_mutex &sm, Func &&func) noexcept
    Definition: shared_mutex.hh:212
    +
    futurize_t< std::invoke_result_t< Func > > with_shared(shared_mutex &sm, Func &&func) noexcept
    Definition: shared_mutex.hh:171
    +
    future< T > current_exception_as_future() noexcept
    Returns std::current_exception() wrapped in a future.
    Definition: future.hh:1962
    +
    auto do_with(T1 &&rv1, T2 &&rv2, More &&... more) noexcept
    Definition: do_with.hh:135
    +
    auto with_lock(Lock &lock, Func &&func)
    Definition: do_with.hh:149
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/shared__ptr_8hh_source.html b/master/shared__ptr_8hh_source.html new file mode 100644 index 000000000..b733cdfc3 --- /dev/null +++ b/master/shared__ptr_8hh_source.html @@ -0,0 +1,1060 @@ + + + + + + + +Seastar: seastar/core/shared_ptr.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    shared_ptr.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/shared_ptr_debug_helper.hh>
    +
    25#include <seastar/util/is_smart_ptr.hh>
    +
    26#include <seastar/util/indirect.hh>
    +
    27#include <seastar/util/modules.hh>
    +
    28#ifndef SEASTAR_MODULE
    +
    29#include <boost/intrusive/parent_from_member.hpp>
    +
    30#include <fmt/core.h>
    +
    31#include <ostream>
    +
    32#include <type_traits>
    +
    33#include <utility>
    +
    34#endif
    +
    35
    +
    36#if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ >= 12)
    +
    37// to silence the false alarm from GCC 12, see
    +
    38// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105204
    +
    39#define SEASTAR_IGNORE_USE_AFTER_FREE
    +
    40#endif
    +
    41
    +
    42namespace seastar {
    +
    43
    +
    44// This header defines two shared pointer facilities, lw_shared_ptr<> and
    +
    45// shared_ptr<>, both modeled after std::shared_ptr<>.
    +
    46//
    +
    47// Unlike std::shared_ptr<>, neither of these implementations are thread
    +
    48// safe, and two pointers sharing the same object must not be used in
    +
    49// different threads.
    +
    50//
    +
    51// lw_shared_ptr<> is the more lightweight variant, with a lw_shared_ptr<>
    +
    52// occupying just one machine word, and adding just one word to the shared
    +
    53// object. However, it does not support polymorphism.
    +
    54//
    +
    55// shared_ptr<> is more expensive, with a pointer occupying two machine
    +
    56// words, and with two words of overhead in the shared object. In return,
    +
    57// it does support polymorphism.
    +
    58//
    +
    59// Both variants support shared_from_this() via enable_shared_from_this<>
    +
    60// and lw_enable_shared_from_this<>().
    +
    61//
    +
    62
    +
    63SEASTAR_MODULE_EXPORT_BEGIN
    +
    64
    +
    65#ifndef SEASTAR_DEBUG_SHARED_PTR
    +
    66using shared_ptr_counter_type = long;
    +
    67#else
    +
    68using shared_ptr_counter_type = debug_shared_ptr_counter_type;
    +
    69#endif
    +
    70
    +
    71template <typename T>
    +
    72class lw_shared_ptr;
    +
    73
    +
    74template <typename T>
    +
    75class shared_ptr;
    +
    76
    +
    77template <typename T>
    +
    78class enable_lw_shared_from_this;
    +
    79
    +
    80template <typename T>
    +
    81class enable_shared_from_this;
    +
    82
    +
    83template <typename T, typename... A>
    +
    84lw_shared_ptr<T> make_lw_shared(A&&... a);
    +
    85
    +
    86template <typename T>
    +
    87lw_shared_ptr<T> make_lw_shared(T&& a);
    +
    88
    +
    89template <typename T>
    +
    90lw_shared_ptr<T> make_lw_shared(T& a);
    +
    91
    +
    92template <typename T, typename... A>
    +
    93shared_ptr<T> make_shared(A&&... a);
    +
    94
    +
    95template <typename T>
    +
    96shared_ptr<T> make_shared(T&& a);
    +
    97
    +
    98template <typename T, typename U>
    +
    99shared_ptr<T> static_pointer_cast(const shared_ptr<U>& p);
    +
    100
    +
    101template <typename T, typename U>
    +
    102shared_ptr<T> dynamic_pointer_cast(const shared_ptr<U>& p);
    +
    103
    +
    104template <typename T, typename U>
    +
    105shared_ptr<T> const_pointer_cast(const shared_ptr<U>& p);
    +
    106
    + +
    108 shared_ptr_counter_type _count = 0;
    +
    109};
    +
    110
    +
    111SEASTAR_MODULE_EXPORT_END
    +
    112
    +
    113namespace internal {
    +
    114
    +
    115template <class T, class U>
    +
    116struct lw_shared_ptr_accessors;
    +
    117
    +
    118template <class T>
    +
    119struct lw_shared_ptr_accessors_esft;
    +
    120
    +
    121template <class T>
    +
    122struct lw_shared_ptr_accessors_no_esft;
    +
    123
    +
    124}
    +
    125
    +
    126
    +
    127// We want to support two use cases for shared_ptr<T>:
    +
    128//
    +
    129// 1. T is any type (primitive or class type)
    +
    130//
    +
    131// 2. T is a class type that inherits from enable_shared_from_this<T>.
    +
    132//
    +
    133// In the first case, we must wrap T in an object containing the counter,
    +
    134// since T may be a primitive type and cannot be a base class.
    +
    135//
    +
    136// In the second case, we want T to reach the counter through its
    +
    137// enable_shared_from_this<> base class, so that we can implement
    +
    138// shared_from_this().
    +
    139//
    +
    140// To implement those two conflicting requirements (T alongside its counter;
    +
    141// T inherits from an object containing the counter) we use std::conditional<>
    +
    142// and some accessor functions to select between two implementations.
    +
    143
    +
    144
    +
    145// CRTP from this to enable shared_from_this:
    +
    146SEASTAR_MODULE_EXPORT
    +
    147template <typename T>
    + +
    149 using ctor = T;
    +
    150protected:
    +
    151 enable_lw_shared_from_this() noexcept {}
    + + +
    154 enable_lw_shared_from_this& operator=(const enable_lw_shared_from_this&) noexcept { return *this; }
    +
    155 enable_lw_shared_from_this& operator=(enable_lw_shared_from_this&&) noexcept { return *this; }
    +
    156public:
    +
    157 lw_shared_ptr<T> shared_from_this() noexcept;
    +
    158 lw_shared_ptr<const T> shared_from_this() const noexcept;
    +
    159 long use_count() const noexcept { return _count; }
    +
    160
    +
    161 template <typename X>
    +
    162 friend class lw_shared_ptr;
    +
    163 template <typename X>
    +
    164 friend struct internal::lw_shared_ptr_accessors_esft;
    +
    165 template <typename X, class Y>
    +
    166 friend struct internal::lw_shared_ptr_accessors;
    +
    167};
    +
    168
    +
    169template <typename T>
    + +
    171 T _value;
    +
    172
    +
    173 lw_shared_ptr_no_esft() = default;
    +
    174 lw_shared_ptr_no_esft(const T& x) : _value(x) {}
    +
    175 lw_shared_ptr_no_esft(T&& x) : _value(std::move(x)) {}
    +
    176 template <typename... A>
    +
    177 lw_shared_ptr_no_esft(A&&... a) : _value(std::forward<A>(a)...) {}
    +
    178
    +
    179 template <typename X>
    +
    180 friend class lw_shared_ptr;
    +
    181 template <typename X>
    +
    182 friend struct internal::lw_shared_ptr_accessors_no_esft;
    +
    183 template <typename X, class Y>
    +
    184 friend struct internal::lw_shared_ptr_accessors;
    +
    185};
    +
    186
    +
    187
    +
    196template <typename T>
    +
    197struct lw_shared_ptr_deleter; // No generic implementation
    +
    198
    +
    199namespace internal {
    +
    200
    +
    201template <typename T>
    +
    202struct lw_shared_ptr_accessors_esft {
    +
    203 using concrete_type = std::remove_const_t<T>;
    +
    204 static T* to_value(lw_shared_ptr_counter_base* counter) {
    +
    205 return static_cast<T*>(counter);
    +
    206 }
    +
    207 static void dispose(lw_shared_ptr_counter_base* counter) {
    +
    208 dispose(static_cast<T*>(counter));
    +
    209 }
    +
    210 static void dispose(T* value_ptr) {
    +
    211 delete value_ptr;
    +
    212 }
    +
    213 static void instantiate_to_value(lw_shared_ptr_counter_base*) {
    +
    214 // since to_value() is defined above, we don't need to do anything special
    +
    215 // to force-instantiate it
    +
    216 }
    +
    217};
    +
    218
    +
    219template <typename T>
    +
    220struct lw_shared_ptr_accessors_no_esft {
    +
    221 using concrete_type = lw_shared_ptr_no_esft<T>;
    +
    222 static T* to_value(lw_shared_ptr_counter_base* counter) {
    +
    223 return &static_cast<concrete_type*>(counter)->_value;
    +
    224 }
    +
    225 static void dispose(lw_shared_ptr_counter_base* counter) {
    +
    226 delete static_cast<concrete_type*>(counter);
    +
    227 }
    +
    228 static void dispose(T* value_ptr) {
    +
    229 delete boost::intrusive::get_parent_from_member(value_ptr, &concrete_type::_value);
    +
    230 }
    +
    231 static void instantiate_to_value(lw_shared_ptr_counter_base*) {
    +
    232 // since to_value() is defined above, we don't need to do anything special
    +
    233 // to force-instantiate it
    +
    234 }
    +
    235};
    +
    236
    +
    237// Generic case: lw_shared_ptr_deleter<T> is not specialized, select
    +
    238// implementation based on whether T inherits from enable_lw_shared_from_this<T>.
    +
    239template <typename T, typename U = void>
    +
    240struct lw_shared_ptr_accessors : std::conditional_t<
    +
    241 std::is_base_of_v<enable_lw_shared_from_this<T>, T>,
    +
    242 lw_shared_ptr_accessors_esft<T>,
    +
    243 lw_shared_ptr_accessors_no_esft<T>> {
    +
    244};
    +
    245
    +
    246// void_t is C++17, use this temporarily
    +
    247template <typename... T>
    +
    248using void_t = void;
    +
    249
    +
    250// Overload when lw_shared_ptr_deleter<T> specialized
    +
    251template <typename T>
    +
    252struct lw_shared_ptr_accessors<T, void_t<decltype(lw_shared_ptr_deleter<T>{})>> {
    +
    253 using concrete_type = T;
    +
    254 static T* to_value(lw_shared_ptr_counter_base* counter);
    +
    255 static void dispose(lw_shared_ptr_counter_base* counter) {
    +
    256 lw_shared_ptr_deleter<T>::dispose(to_value(counter));
    +
    257 }
    +
    258 static void instantiate_to_value(lw_shared_ptr_counter_base* p) {
    +
    259 // instantiate to_value(); must be defined by shared_ptr_incomplete.hh
    +
    260 to_value(p);
    +
    261 }
    +
    262};
    +
    263
    +
    264}
    +
    265
    +
    266SEASTAR_MODULE_EXPORT_BEGIN
    +
    267template <typename T>
    + +
    269 template <typename U>
    +
    270 using accessors = internal::lw_shared_ptr_accessors<std::remove_const_t<U>>;
    +
    271
    +
    272 mutable lw_shared_ptr_counter_base* _p = nullptr;
    +
    273private:
    +
    274 lw_shared_ptr(lw_shared_ptr_counter_base* p) noexcept : _p(p) {
    +
    275 if (_p) {
    +
    276 ++_p->_count;
    +
    277 }
    +
    278 }
    +
    279 template <typename... A>
    +
    280 static lw_shared_ptr make(A&&... a) {
    +
    281 auto p = new typename accessors<T>::concrete_type(std::forward<A>(a)...);
    +
    282 accessors<T>::instantiate_to_value(p);
    +
    283 return lw_shared_ptr(p);
    +
    284 }
    +
    285public:
    +
    286 using element_type = T;
    +
    287
    +
    288 // Destroys the object pointed to by p and disposes of its storage.
    +
    289 // The pointer to the object must have been obtained through release().
    +
    290 static void dispose(T* p) noexcept {
    +
    291 accessors<T>::dispose(const_cast<std::remove_const_t<T>*>(p));
    +
    292 }
    +
    293
    +
    294 // A functor which calls dispose().
    +
    295 class disposer {
    +
    296 public:
    +
    297 void operator()(T* p) const noexcept {
    +
    298 dispose(p);
    +
    299 }
    +
    300 };
    +
    301
    +
    302 lw_shared_ptr() noexcept = default;
    +
    303 lw_shared_ptr(std::nullptr_t) noexcept : lw_shared_ptr() {}
    +
    304 lw_shared_ptr(const lw_shared_ptr& x) noexcept : _p(x._p) {
    +
    305 if (_p) {
    +
    306#pragma GCC diagnostic push
    +
    307#ifdef SEASTAR_IGNORE_USE_AFTER_FREE
    +
    308#pragma GCC diagnostic ignored "-Wuse-after-free"
    +
    309#endif
    +
    310 ++_p->_count;
    +
    311#pragma GCC diagnostic pop
    +
    312 }
    +
    313 }
    +
    314 lw_shared_ptr(lw_shared_ptr&& x) noexcept : _p(x._p) {
    +
    315 x._p = nullptr;
    +
    316 }
    +
    317 [[gnu::always_inline]]
    +
    318 ~lw_shared_ptr() {
    +
    319#pragma GCC diagnostic push
    +
    320#ifdef SEASTAR_IGNORE_USE_AFTER_FREE
    +
    321#pragma GCC diagnostic ignored "-Wuse-after-free"
    +
    322#endif
    +
    323 if (_p && !--_p->_count) {
    +
    324 accessors<T>::dispose(_p);
    +
    325 }
    +
    326#pragma GCC diagnostic pop
    +
    327 }
    +
    328 lw_shared_ptr& operator=(const lw_shared_ptr& x) noexcept {
    +
    329 if (_p != x._p) {
    +
    330 this->~lw_shared_ptr();
    +
    331 new (this) lw_shared_ptr(x);
    +
    332 }
    +
    333 return *this;
    +
    334 }
    +
    335 lw_shared_ptr& operator=(lw_shared_ptr&& x) noexcept {
    +
    336 if (_p != x._p) {
    +
    337 this->~lw_shared_ptr();
    +
    338 new (this) lw_shared_ptr(std::move(x));
    +
    339 }
    +
    340 return *this;
    +
    341 }
    +
    342 lw_shared_ptr& operator=(std::nullptr_t) noexcept {
    +
    343 return *this = lw_shared_ptr();
    +
    344 }
    +
    345 [[deprecated("call make_lw_shared<> and assign the result instead")]]
    +
    346 lw_shared_ptr& operator=(T&& x) noexcept {
    +
    347 this->~lw_shared_ptr();
    +
    348 new (this) lw_shared_ptr(make_lw_shared<T>(std::move(x)));
    +
    349 return *this;
    +
    350 }
    +
    351
    +
    352 T& operator*() const noexcept { return *accessors<T>::to_value(_p); }
    +
    353 T* operator->() const noexcept { return accessors<T>::to_value(_p); }
    +
    354 T* get() const noexcept {
    +
    355 if (_p) {
    +
    356 return accessors<T>::to_value(_p);
    +
    357 } else {
    +
    358 return nullptr;
    +
    359 }
    +
    360 }
    +
    361
    +
    362 // Releases ownership of the object without destroying it.
    +
    363 // If this was the last owner then returns an engaged unique_ptr
    +
    364 // which is now the sole owner of the object.
    +
    365 // Returns a disengaged pointer if there are still some owners.
    +
    366 //
    +
    367 // Note that in case the raw pointer is extracted from the unique_ptr
    +
    368 // using unique_ptr::release(), it must be still destroyed using
    +
    369 // lw_shared_ptr::disposer or lw_shared_ptr::dispose().
    +
    370 std::unique_ptr<T, disposer> release() noexcept {
    +
    371 auto p = std::exchange(_p, nullptr);
    +
    372 if (--p->_count) {
    +
    373 return nullptr;
    +
    374 } else {
    +
    375 return std::unique_ptr<T, disposer>(accessors<T>::to_value(p));
    +
    376 }
    +
    377 }
    +
    378
    +
    379 long int use_count() const noexcept {
    +
    380 if (_p) {
    +
    381 return _p->_count;
    +
    382 } else {
    +
    383 return 0;
    +
    384 }
    +
    385 }
    +
    386
    +
    387 operator lw_shared_ptr<const T>() const noexcept {
    +
    388 return lw_shared_ptr<const T>(_p);
    +
    389 }
    +
    390
    +
    391 explicit operator bool() const noexcept {
    +
    392 return _p;
    +
    393 }
    +
    394
    +
    395 bool owned() const noexcept {
    +
    396 return _p->_count == 1;
    +
    397 }
    +
    398
    +
    399 bool operator==(const lw_shared_ptr<const T>& x) const {
    +
    400 return _p == x._p;
    +
    401 }
    +
    402
    +
    403 bool operator!=(const lw_shared_ptr<const T>& x) const {
    +
    404 return !operator==(x);
    +
    405 }
    +
    406
    +
    407 bool operator==(const lw_shared_ptr<std::remove_const_t<T>>& x) const {
    +
    408 return _p == x._p;
    +
    409 }
    +
    410
    +
    411 bool operator!=(const lw_shared_ptr<std::remove_const_t<T>>& x) const {
    +
    412 return !operator==(x);
    +
    413 }
    +
    414
    +
    415 bool operator<(const lw_shared_ptr<const T>& x) const {
    +
    416 return _p < x._p;
    +
    417 }
    +
    418
    +
    419 bool operator<(const lw_shared_ptr<std::remove_const_t<T>>& x) const {
    +
    420 return _p < x._p;
    +
    421 }
    +
    422
    +
    423 template <typename U>
    +
    424 friend class lw_shared_ptr;
    +
    425
    +
    426 template <typename X, typename... A>
    +
    427 friend lw_shared_ptr<X> make_lw_shared(A&&...);
    +
    428
    +
    429 template <typename U>
    +
    430 friend lw_shared_ptr<U> make_lw_shared(U&&);
    +
    431
    +
    432 template <typename U>
    +
    433 friend lw_shared_ptr<U> make_lw_shared(U&);
    +
    434
    +
    435 template <typename U>
    +
    436 friend class enable_lw_shared_from_this;
    +
    437};
    +
    438
    +
    439template <typename T, typename... A>
    +
    440inline
    +
    441lw_shared_ptr<T> make_lw_shared(A&&... a) {
    +
    442 return lw_shared_ptr<T>::make(std::forward<A>(a)...);
    +
    443}
    +
    444
    +
    445template <typename T>
    +
    446inline
    +
    447lw_shared_ptr<T> make_lw_shared(T&& a) {
    +
    448 return lw_shared_ptr<T>::make(std::move(a));
    +
    449}
    +
    450
    +
    451template <typename T>
    +
    452inline
    +
    453lw_shared_ptr<T> make_lw_shared(T& a) {
    +
    454 return lw_shared_ptr<T>::make(a);
    +
    455}
    +
    456SEASTAR_MODULE_EXPORT_END
    +
    457
    +
    458template <typename T>
    +
    459inline
    +
    460lw_shared_ptr<T>
    +
    461enable_lw_shared_from_this<T>::shared_from_this() noexcept {
    +
    462 return lw_shared_ptr<T>(this);
    +
    463}
    +
    464
    +
    465template <typename T>
    +
    466inline
    +
    467lw_shared_ptr<const T>
    +
    468enable_lw_shared_from_this<T>::shared_from_this() const noexcept {
    +
    469 return lw_shared_ptr<const T>(const_cast<enable_lw_shared_from_this*>(this));
    +
    470}
    +
    471
    +
    472SEASTAR_MODULE_EXPORT
    +
    473template <typename T>
    +
    474inline
    +
    475std::ostream& operator<<(std::ostream& out, const lw_shared_ptr<T>& p) {
    +
    476 if (!p) {
    +
    477 return out << "null";
    +
    478 }
    +
    479 return out << *p;
    +
    480}
    +
    481
    +
    482// Polymorphic shared pointer class
    +
    483
    + +
    485 // destructor is responsible for fully-typed deletion
    +
    486 virtual ~shared_ptr_count_base() {}
    +
    487 shared_ptr_counter_type count = 0;
    +
    488};
    +
    489
    +
    490template <typename T>
    + +
    492 T data;
    +
    493 template <typename... A>
    +
    494 shared_ptr_count_for(A&&... a) : data(std::forward<A>(a)...) {}
    +
    495};
    +
    496
    +
    497SEASTAR_MODULE_EXPORT_BEGIN
    +
    498template <typename T>
    + +
    500public:
    +
    501 shared_ptr<T> shared_from_this() noexcept;
    +
    502 shared_ptr<const T> shared_from_this() const noexcept;
    +
    503 long use_count() const noexcept { return count; }
    +
    504
    +
    505 template <typename U>
    +
    506 friend class shared_ptr;
    +
    507
    +
    508 template <typename U, bool esft>
    +
    509 friend struct shared_ptr_make_helper;
    +
    510};
    +
    511
    +
    512template <typename T>
    + +
    514 mutable shared_ptr_count_base* _b = nullptr;
    +
    515 mutable T* _p = nullptr;
    +
    516private:
    +
    517 explicit shared_ptr(shared_ptr_count_for<T>* b) noexcept : _b(b), _p(&b->data) {
    +
    518 ++_b->count;
    +
    519 }
    +
    520 shared_ptr(shared_ptr_count_base* b, T* p) noexcept : _b(b), _p(p) {
    +
    521 if (_b) {
    +
    522 ++_b->count;
    +
    523 }
    +
    524 }
    +
    525 explicit shared_ptr(enable_shared_from_this<std::remove_const_t<T>>* p) noexcept : _b(p), _p(static_cast<T*>(p)) {
    +
    526 if (_b) {
    +
    527 ++_b->count;
    +
    528 }
    +
    529 }
    +
    530public:
    +
    531 using element_type = T;
    +
    532
    +
    533 shared_ptr() noexcept = default;
    +
    534 shared_ptr(std::nullptr_t) noexcept : shared_ptr() {}
    +
    535 shared_ptr(const shared_ptr& x) noexcept
    +
    536 : _b(x._b)
    +
    537 , _p(x._p) {
    +
    538 if (_b) {
    +
    539 ++_b->count;
    +
    540 }
    +
    541 }
    +
    542 shared_ptr(shared_ptr&& x) noexcept
    +
    543 : _b(x._b)
    +
    544 , _p(x._p) {
    +
    545 x._b = nullptr;
    +
    546 x._p = nullptr;
    +
    547 }
    +
    548 template <typename U, typename = std::enable_if_t<std::is_base_of_v<T, U>>>
    +
    549 shared_ptr(const shared_ptr<U>& x) noexcept
    +
    550 : _b(x._b)
    +
    551 , _p(x._p) {
    +
    552 if (_b) {
    +
    553 ++_b->count;
    +
    554 }
    +
    555 }
    +
    556 template <typename U, typename = std::enable_if_t<std::is_base_of_v<T, U>>>
    +
    557 shared_ptr(shared_ptr<U>&& x) noexcept
    +
    558 : _b(x._b)
    +
    559 , _p(x._p) {
    +
    560 x._b = nullptr;
    +
    561 x._p = nullptr;
    +
    562 }
    +
    563 ~shared_ptr() {
    +
    564#pragma GCC diagnostic push
    +
    565#ifdef SEASTAR_IGNORE_USE_AFTER_FREE
    +
    566#pragma GCC diagnostic ignored "-Wuse-after-free"
    +
    567#endif
    +
    568 if (_b && !--_b->count) {
    +
    569 delete _b;
    +
    570 }
    +
    571#pragma GCC diagnostic pop
    +
    572 }
    +
    573 shared_ptr& operator=(const shared_ptr& x) noexcept {
    +
    574 if (this != &x) {
    +
    575 this->~shared_ptr();
    +
    576 new (this) shared_ptr(x);
    +
    577 }
    +
    578 return *this;
    +
    579 }
    +
    580 shared_ptr& operator=(shared_ptr&& x) noexcept {
    +
    581 if (this != &x) {
    +
    582 this->~shared_ptr();
    +
    583 new (this) shared_ptr(std::move(x));
    +
    584 }
    +
    585 return *this;
    +
    586 }
    +
    587 shared_ptr& operator=(std::nullptr_t) noexcept {
    +
    588 return *this = shared_ptr();
    +
    589 }
    +
    590 template <typename U, typename = std::enable_if_t<std::is_base_of_v<T, U>>>
    +
    591 shared_ptr& operator=(const shared_ptr<U>& x) noexcept {
    +
    592 if (*this != x) {
    +
    593 this->~shared_ptr();
    +
    594 new (this) shared_ptr(x);
    +
    595 }
    +
    596 return *this;
    +
    597 }
    +
    598 template <typename U, typename = std::enable_if_t<std::is_base_of_v<T, U>>>
    +
    599 shared_ptr& operator=(shared_ptr<U>&& x) noexcept {
    +
    600 if (*this != x) {
    +
    601 this->~shared_ptr();
    +
    602 new (this) shared_ptr(std::move(x));
    +
    603 }
    +
    604 return *this;
    +
    605 }
    +
    606 explicit operator bool() const noexcept {
    +
    607 return _p;
    +
    608 }
    +
    609 T& operator*() const noexcept {
    +
    610 return *_p;
    +
    611 }
    +
    612 T* operator->() const noexcept {
    +
    613 return _p;
    +
    614 }
    +
    615 T* get() const noexcept {
    +
    616 return _p;
    +
    617 }
    +
    618 long use_count() const noexcept {
    +
    619 if (_b) {
    +
    620 return _b->count;
    +
    621 } else {
    +
    622 return 0;
    +
    623 }
    +
    624 }
    +
    625
    +
    626 template <bool esft>
    + +
    628
    +
    629 template <typename U, typename... A>
    +
    630 friend shared_ptr<U> make_shared(A&&... a);
    +
    631
    +
    632 template <typename U>
    +
    633 friend shared_ptr<U> make_shared(U&& a);
    +
    634
    +
    635 template <typename V, typename U>
    +
    636 friend shared_ptr<V> static_pointer_cast(const shared_ptr<U>& p);
    +
    637
    +
    638 template <typename V, typename U>
    +
    639 friend shared_ptr<V> dynamic_pointer_cast(const shared_ptr<U>& p);
    +
    640
    +
    641 template <typename V, typename U>
    +
    642 friend shared_ptr<V> const_pointer_cast(const shared_ptr<U>& p);
    +
    643
    +
    644 template <bool esft, typename... A>
    +
    645 static shared_ptr make(A&&... a);
    +
    646
    +
    647 template <typename U>
    +
    648 friend class enable_shared_from_this;
    +
    649
    +
    650 template <typename U, bool esft>
    +
    651 friend struct shared_ptr_make_helper;
    +
    652
    +
    653 template <typename U>
    +
    654 friend class shared_ptr;
    +
    655};
    +
    656SEASTAR_MODULE_EXPORT_END
    +
    657
    +
    658template <typename U, bool esft>
    + +
    660
    +
    661template <typename T>
    +
    662struct shared_ptr_make_helper<T, false> {
    +
    663 template <typename... A>
    +
    664 static shared_ptr<T> make(A&&... a) {
    +
    665 return shared_ptr<T>(new shared_ptr_count_for<T>(std::forward<A>(a)...));
    +
    666 }
    +
    667};
    +
    668
    +
    669template <typename T>
    +
    670struct shared_ptr_make_helper<T, true> {
    +
    671 template <typename... A>
    +
    672 static shared_ptr<T> make(A&&... a) {
    +
    673 auto p = new T(std::forward<A>(a)...);
    +
    674 return shared_ptr<T>(p, p);
    +
    675 }
    +
    676};
    +
    677
    +
    678SEASTAR_MODULE_EXPORT_BEGIN
    +
    679template <typename T, typename... A>
    +
    680inline
    + +
    682make_shared(A&&... a) {
    + +
    684 return helper::make(std::forward<A>(a)...);
    +
    685}
    +
    686
    +
    687template <typename T>
    +
    688inline
    +
    689shared_ptr<T>
    +
    690make_shared(T&& a) {
    +
    691 using helper = shared_ptr_make_helper<T, std::is_base_of_v<shared_ptr_count_base, T>>;
    +
    692 return helper::make(std::forward<T>(a));
    +
    693}
    +
    694
    +
    695template <typename T, typename U>
    +
    696inline
    +
    697shared_ptr<T>
    +
    698static_pointer_cast(const shared_ptr<U>& p) {
    +
    699 return shared_ptr<T>(p._b, static_cast<T*>(p._p));
    +
    700}
    +
    701
    +
    702template <typename T, typename U>
    +
    703inline
    +
    704shared_ptr<T>
    +
    705dynamic_pointer_cast(const shared_ptr<U>& p) {
    +
    706 auto q = dynamic_cast<T*>(p._p);
    +
    707 return shared_ptr<T>(q ? p._b : nullptr, q);
    +
    708}
    +
    709
    +
    710template <typename T, typename U>
    +
    711inline
    +
    712shared_ptr<T>
    +
    713const_pointer_cast(const shared_ptr<U>& p) {
    +
    714 return shared_ptr<T>(p._b, const_cast<T*>(p._p));
    +
    715}
    +
    716SEASTAR_MODULE_EXPORT_END
    +
    717
    +
    718template <typename T>
    +
    719inline
    +
    720shared_ptr<T>
    +
    721enable_shared_from_this<T>::shared_from_this() noexcept {
    +
    722 auto unconst = reinterpret_cast<enable_shared_from_this<std::remove_const_t<T>>*>(this);
    +
    723 return shared_ptr<T>(unconst);
    +
    724}
    +
    725
    +
    726template <typename T>
    +
    727inline
    +
    728shared_ptr<const T>
    +
    729enable_shared_from_this<T>::shared_from_this() const noexcept {
    +
    730 auto esft = const_cast<enable_shared_from_this*>(this);
    +
    731 auto unconst = reinterpret_cast<enable_shared_from_this<std::remove_const_t<T>>*>(esft);
    +
    732 return shared_ptr<const T>(unconst);
    +
    733}
    +
    734
    +
    735SEASTAR_MODULE_EXPORT_BEGIN
    +
    736template <typename T, typename U>
    +
    737inline
    +
    738bool
    +
    739operator==(const shared_ptr<T>& x, const shared_ptr<U>& y) {
    +
    740 return x.get() == y.get();
    +
    741}
    +
    742
    +
    743template <typename T>
    +
    744inline
    +
    745bool
    +
    746operator==(const shared_ptr<T>& x, std::nullptr_t) {
    +
    747 return x.get() == nullptr;
    +
    748}
    +
    749
    +
    750template <typename T>
    +
    751inline
    +
    752bool
    +
    753operator==(std::nullptr_t, const shared_ptr<T>& y) {
    +
    754 return nullptr == y.get();
    +
    755}
    +
    756
    +
    757template <typename T>
    +
    758inline
    +
    759bool
    +
    760operator==(const lw_shared_ptr<T>& x, std::nullptr_t) {
    +
    761 return x.get() == nullptr;
    +
    762}
    +
    763
    +
    764template <typename T>
    +
    765inline
    +
    766bool
    +
    767operator==(std::nullptr_t, const lw_shared_ptr<T>& y) {
    +
    768 return nullptr == y.get();
    +
    769}
    +
    770
    +
    771template <typename T, typename U>
    +
    772inline
    +
    773bool
    +
    774operator!=(const shared_ptr<T>& x, const shared_ptr<U>& y) {
    +
    775 return x.get() != y.get();
    +
    776}
    +
    777
    +
    778template <typename T>
    +
    779inline
    +
    780bool
    +
    781operator!=(const shared_ptr<T>& x, std::nullptr_t) {
    +
    782 return x.get() != nullptr;
    +
    783}
    +
    784
    +
    785template <typename T>
    +
    786inline
    +
    787bool
    +
    788operator!=(std::nullptr_t, const shared_ptr<T>& y) {
    +
    789 return nullptr != y.get();
    +
    790}
    +
    791
    +
    792template <typename T>
    +
    793inline
    +
    794bool
    +
    795operator!=(const lw_shared_ptr<T>& x, std::nullptr_t) {
    +
    796 return x.get() != nullptr;
    +
    797}
    +
    798
    +
    799template <typename T>
    +
    800inline
    +
    801bool
    +
    802operator!=(std::nullptr_t, const lw_shared_ptr<T>& y) {
    +
    803 return nullptr != y.get();
    +
    804}
    +
    805
    +
    806template <typename T, typename U>
    +
    807inline
    +
    808bool
    +
    809operator<(const shared_ptr<T>& x, const shared_ptr<U>& y) {
    +
    810 return x.get() < y.get();
    +
    811}
    +
    812
    +
    813template <typename T>
    +
    814inline
    +
    815bool
    +
    816operator<(const shared_ptr<T>& x, std::nullptr_t) {
    +
    817 return x.get() < nullptr;
    +
    818}
    +
    819
    +
    820template <typename T>
    +
    821inline
    +
    822bool
    +
    823operator<(std::nullptr_t, const shared_ptr<T>& y) {
    +
    824 return nullptr < y.get();
    +
    825}
    +
    826
    +
    827template <typename T, typename U>
    +
    828inline
    +
    829bool
    +
    830operator<=(const shared_ptr<T>& x, const shared_ptr<U>& y) {
    +
    831 return x.get() <= y.get();
    +
    832}
    +
    833
    +
    834template <typename T>
    +
    835inline
    +
    836bool
    +
    837operator<=(const shared_ptr<T>& x, std::nullptr_t) {
    +
    838 return x.get() <= nullptr;
    +
    839}
    +
    840
    +
    841template <typename T>
    +
    842inline
    +
    843bool
    +
    844operator<=(std::nullptr_t, const shared_ptr<T>& y) {
    +
    845 return nullptr <= y.get();
    +
    846}
    +
    847
    +
    848template <typename T, typename U>
    +
    849inline
    +
    850bool
    +
    851operator>(const shared_ptr<T>& x, const shared_ptr<U>& y) {
    +
    852 return x.get() > y.get();
    +
    853}
    +
    854
    +
    855template <typename T>
    +
    856inline
    +
    857bool
    +
    858operator>(const shared_ptr<T>& x, std::nullptr_t) {
    +
    859 return x.get() > nullptr;
    +
    860}
    +
    861
    +
    862template <typename T>
    +
    863inline
    +
    864bool
    +
    865operator>(std::nullptr_t, const shared_ptr<T>& y) {
    +
    866 return nullptr > y.get();
    +
    867}
    +
    868
    +
    869template <typename T, typename U>
    +
    870inline
    +
    871bool
    +
    872operator>=(const shared_ptr<T>& x, const shared_ptr<U>& y) {
    +
    873 return x.get() >= y.get();
    +
    874}
    +
    875
    +
    876template <typename T>
    +
    877inline
    +
    878bool
    +
    879operator>=(const shared_ptr<T>& x, std::nullptr_t) {
    +
    880 return x.get() >= nullptr;
    +
    881}
    +
    882
    +
    883template <typename T>
    +
    884inline
    +
    885bool
    +
    886operator>=(std::nullptr_t, const shared_ptr<T>& y) {
    +
    887 return nullptr >= y.get();
    +
    888}
    +
    889
    +
    890template <typename T>
    +
    891inline
    +
    892std::ostream& operator<<(std::ostream& out, const shared_ptr<T>& p) {
    +
    893 if (!p) {
    +
    894 return out << "null";
    +
    895 }
    +
    896 return out << *p;
    +
    897}
    +
    898
    +
    899template<typename T>
    +
    900using shared_ptr_equal_by_value = indirect_equal_to<shared_ptr<T>>;
    +
    901
    +
    902template<typename T>
    +
    903using shared_ptr_value_hash = indirect_hash<shared_ptr<T>>;
    +
    904
    +
    905SEASTAR_MODULE_EXPORT_END
    +
    906}
    +
    907
    +
    908namespace std {
    +
    909
    +
    910SEASTAR_MODULE_EXPORT
    +
    911template <typename T>
    +
    912struct hash<seastar::lw_shared_ptr<T>> : private hash<T*> {
    +
    913 size_t operator()(const seastar::lw_shared_ptr<T>& p) const {
    +
    914 return hash<T*>::operator()(p.get());
    +
    915 }
    +
    916};
    +
    917
    +
    918SEASTAR_MODULE_EXPORT
    +
    919template <typename T>
    +
    920struct hash<seastar::shared_ptr<T>> : private hash<T*> {
    +
    921 size_t operator()(const seastar::shared_ptr<T>& p) const {
    +
    922 return hash<T*>::operator()(p.get());
    +
    923 }
    +
    924};
    +
    925
    +
    926}
    +
    927
    +
    928SEASTAR_MODULE_EXPORT
    +
    929namespace fmt {
    +
    930
    +
    931template<typename T>
    +
    932const void* ptr(const seastar::lw_shared_ptr<T>& p) {
    +
    933 return p.get();
    +
    934}
    +
    935
    +
    936template<typename T>
    +
    937const void* ptr(const seastar::shared_ptr<T>& p) {
    +
    938 return p.get();
    +
    939}
    +
    940
    +
    941template <typename T>
    +
    942struct formatter<seastar::shared_ptr<T>> {
    +
    943 constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); }
    +
    944 auto format(const seastar::shared_ptr<T>& p, fmt::format_context& ctx) const {
    +
    945 if (!p) {
    +
    946 return fmt::format_to(ctx.out(), "null");
    +
    947 }
    +
    948 return fmt::format_to(ctx.out(), "{}", *p);
    +
    949 }
    +
    950};
    +
    951
    +
    952template <typename T>
    +
    953struct formatter<seastar::lw_shared_ptr<T>> {
    +
    954 constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); }
    +
    955 auto format(const seastar::lw_shared_ptr<T>& p, fmt::format_context& ctx) const {
    +
    956 if (!p) {
    +
    957 return fmt::format_to(ctx.out(), "null");
    +
    958 }
    +
    959 return fmt::format_to(ctx.out(), "{}", *p);
    +
    960 }
    +
    961};
    +
    962}
    +
    963
    +
    964namespace seastar {
    +
    965
    +
    966SEASTAR_MODULE_EXPORT
    +
    967template<typename T>
    +
    968struct is_smart_ptr<shared_ptr<T>> : std::true_type {};
    +
    969
    +
    970SEASTAR_MODULE_EXPORT
    +
    971template<typename T>
    +
    972struct is_smart_ptr<lw_shared_ptr<T>> : std::true_type {};
    +
    973
    +
    974}
    +
    Definition: shared_ptr.hh:148
    +
    Definition: shared_ptr.hh:499
    +
    Definition: shared_ptr.hh:295
    +
    Definition: shared_ptr.hh:268
    +
    Definition: shared_ptr.hh:513
    +
    Definition: shared_ptr.hh:627
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: shared_ptr.hh:197
    +
    Definition: shared_ptr.hh:659
    +
    STL namespace.
    +
    Definition: is_smart_ptr.hh:30
    +
    Definition: shared_ptr.hh:107
    +
    Definition: shared_ptr.hh:170
    +
    Definition: shared_ptr.hh:484
    +
    Definition: shared_ptr.hh:491
    +
    + + + + diff --git a/master/shared__ptr__debug__helper_8hh_source.html b/master/shared__ptr__debug__helper_8hh_source.html new file mode 100644 index 000000000..39ade62af --- /dev/null +++ b/master/shared__ptr__debug__helper_8hh_source.html @@ -0,0 +1,161 @@ + + + + + + + +Seastar: seastar/core/shared_ptr_debug_helper.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    shared_ptr_debug_helper.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2015 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifdef SEASTAR_DEBUG_SHARED_PTR
    +
    25
    +
    26#ifndef SEASTAR_MODULE
    +
    27#include <thread>
    +
    28#include <cassert>
    +
    29
    +
    30#include <seastar/core/on_internal_error.hh>
    +
    31#include <seastar/util/modules.hh>
    +
    32#endif
    +
    33
    +
    34namespace seastar {
    +
    35
    +
    36extern logger seastar_logger;
    +
    37
    +
    38// A counter that is only comfortable being incremented on the cpu
    +
    39// it was created on. Useful for verifying that a shared_ptr
    +
    40// or lw_shared_ptr isn't misued across cores.
    +
    41SEASTAR_MODULE_EXPORT
    +
    42class debug_shared_ptr_counter_type {
    +
    43 long _counter = 0;
    +
    44 std::thread::id _cpu = std::this_thread::get_id();
    +
    45public:
    +
    46 debug_shared_ptr_counter_type(long x) noexcept : _counter(x) {}
    +
    47 operator long() const {
    +
    48 check();
    +
    49 return _counter;
    +
    50 }
    +
    51 debug_shared_ptr_counter_type& operator++() {
    +
    52 check();
    +
    53 ++_counter;
    +
    54 return *this;
    +
    55 }
    +
    56 long operator++(int) {
    +
    57 check();
    +
    58 return _counter++;
    +
    59 }
    +
    60 debug_shared_ptr_counter_type& operator--() {
    +
    61 check();
    +
    62 --_counter;
    +
    63 return *this;
    +
    64 }
    +
    65 long operator--(int) {
    +
    66 check();
    +
    67 return _counter--;
    +
    68 }
    +
    69private:
    +
    70 void check() const {
    +
    71 if (__builtin_expect(_cpu != std::this_thread::get_id(), false)) {
    +
    72 on_fatal_internal_error(seastar_logger, "shared_ptr accessed on non-owner cpu");
    +
    73 }
    +
    74 }
    +
    75};
    +
    76
    +
    77}
    +
    78
    +
    79#endif
    +
    80
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    void on_fatal_internal_error(logger &logger, std::string_view reason) noexcept
    +
    + + + + diff --git a/master/shared__ptr__incomplete_8hh.html b/master/shared__ptr__incomplete_8hh.html new file mode 100644 index 000000000..b7708c7a4 --- /dev/null +++ b/master/shared__ptr__incomplete_8hh.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: seastar/core/shared_ptr_incomplete.hh File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    shared_ptr_incomplete.hh File Reference
    +
    +
    +

    Detailed Description

    +

    Include this header files when using lw_shared_ptr<some_incomplete_type>, at the point where some_incomplete_type is defined.

    +
    #include <seastar/core/shared_ptr.hh>
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Namespaces

    namespace  seastar
     Seastar API namespace.
     
    +
    + + + + diff --git a/master/shared__ptr__incomplete_8hh_source.html b/master/shared__ptr__incomplete_8hh_source.html new file mode 100644 index 000000000..68b273af5 --- /dev/null +++ b/master/shared__ptr__incomplete_8hh_source.html @@ -0,0 +1,121 @@ + + + + + + + +Seastar: seastar/core/shared_ptr_incomplete.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    shared_ptr_incomplete.hh
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2017 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/shared_ptr.hh>
    +
    25
    +
    26
    +
    30
    +
    31namespace seastar {
    +
    32
    +
    33namespace internal {
    +
    34
    +
    35// Overload when lw_shared_ptr_deleter<T> specialized
    +
    36template <typename T>
    +
    37T*
    +
    38lw_shared_ptr_accessors<T, void_t<decltype(lw_shared_ptr_deleter<T>{})>>::to_value(lw_shared_ptr_counter_base* counter) {
    +
    39 return static_cast<T*>(counter);
    +
    40}
    +
    41
    +
    42}
    +
    43
    +
    44}
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/shared__token__bucket_8hh_source.html b/master/shared__token__bucket_8hh_source.html new file mode 100644 index 000000000..8b92a9986 --- /dev/null +++ b/master/shared__token__bucket_8hh_source.html @@ -0,0 +1,296 @@ + + + + + + + +Seastar: seastar/util/shared_token_bucket.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    shared_token_bucket.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright (C) 2022 ScyllaDB
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#include <atomic>
    +
    26#include <chrono>
    +
    27#include <cmath>
    +
    28#include <concepts>
    +
    29#include <cstdint>
    +
    30
    +
    31namespace seastar {
    +
    32namespace internal {
    +
    33
    +
    34inline uint64_t wrapping_difference(const uint64_t& a, const uint64_t& b) noexcept {
    +
    35 return std::max<int64_t>(a - b, 0);
    +
    36}
    +
    37
    +
    38inline uint64_t fetch_add(std::atomic<uint64_t>& a, uint64_t b) noexcept {
    +
    39 return a.fetch_add(b);
    +
    40}
    +
    41
    +
    42template <typename T>
    +
    43concept supports_wrapping_arithmetics = requires (T a, std::atomic<T> atomic_a, T b) {
    +
    44 { fetch_add(atomic_a, b) } noexcept -> std::same_as<T>;
    +
    45 { wrapping_difference(a, b) } noexcept -> std::same_as<T>;
    +
    46 { a + b } noexcept -> std::same_as<T>;
    +
    47};
    +
    48
    +
    49enum class capped_release { yes, no };
    +
    50
    +
    51template <typename T, capped_release Capped>
    +
    52struct rovers;
    +
    53
    +
    54template <typename T>
    +
    55struct rovers<T, capped_release::yes> {
    +
    56 using atomic_rover = std::atomic<T>;
    +
    57
    +
    58 atomic_rover tail;
    +
    59 atomic_rover head;
    +
    60 atomic_rover ceil;
    +
    61
    +
    62 rovers(T limit) noexcept : tail(0), head(0), ceil(limit) {}
    +
    63
    +
    64 T max_extra(T) const noexcept {
    +
    65 return wrapping_difference(ceil.load(std::memory_order_relaxed), head.load(std::memory_order_relaxed));
    +
    66 }
    +
    67
    +
    68 void release(T tokens) {
    +
    69 fetch_add(ceil, tokens);
    +
    70 }
    +
    71};
    +
    72
    +
    73template <typename T>
    +
    74struct rovers<T, capped_release::no> {
    +
    75 using atomic_rover = std::atomic<T>;
    +
    76
    +
    77 atomic_rover tail;
    +
    78 atomic_rover head;
    +
    79
    +
    80 rovers(T) noexcept : tail(0), head(0) {}
    +
    81
    +
    82 T max_extra(T limit) const noexcept {
    +
    83 return wrapping_difference(tail.load(std::memory_order_relaxed) + limit, head.load(std::memory_order_relaxed));
    +
    84 }
    +
    85
    +
    86 void release(T) = delete;
    +
    87};
    +
    88
    +
    89template <typename T, typename Period, capped_release Capped, typename Clock = std::chrono::steady_clock>
    +
    90requires std::is_nothrow_copy_constructible_v<T> && supports_wrapping_arithmetics<T>
    +
    91class shared_token_bucket {
    +
    92 using rate_resolution = std::chrono::duration<double, Period>;
    +
    93
    +
    94 T _replenish_rate;
    +
    95 const T _replenish_limit;
    +
    96 const T _replenish_threshold;
    +
    97 std::atomic<typename Clock::time_point> _replenished;
    +
    98
    +
    99 /*
    +
    100 * The token bucket is implemented as a pair of wrapping monotonic
    +
    101 * counters (called rovers) one chasing the other. Getting a token
    +
    102 * from the bucket is increasing the tail, replenishing a token back
    +
    103 * is increasing the head. If increased tail overruns the head then
    +
    104 * the bucket is empty and we have to wait. The shard that grabs tail
    +
    105 * earlier will be "woken up" earlier, so they form a queue.
    +
    106 *
    +
    107 * The top rover is needed to implement two buckets actually. The
    +
    108 * tokens are not just replenished by timer. They are replenished by
    +
    109 * timer from the second bucket. And the second bucket only get a
    +
    110 * token in it after the request that grabbed it from the first bucket
    +
    111 * completes and returns it back.
    +
    112 */
    +
    113
    +
    114 using rovers_t = rovers<T, Capped>;
    +
    115 static_assert(rovers_t::atomic_rover::is_always_lock_free);
    +
    116 rovers_t _rovers;
    +
    117
    +
    118 T tail() const noexcept { return _rovers.tail.load(std::memory_order_relaxed); }
    +
    119 T head() const noexcept { return _rovers.head.load(std::memory_order_relaxed); }
    +
    120
    +
    121 /*
    +
    122 * Need to make sure that the multiplication in accumulated_in() doesn't
    +
    123 * overflow. Not to introduce an extra branch there, define that the
    +
    124 * replenish period is not larger than this delta and limit the rate with
    +
    125 * the value that can overflow it.
    +
    126 *
    +
    127 * The additional /=2 in max_rate math is to make extra sure that the
    +
    128 * overflow doesn't break wrapping_difference sign tricks.
    +
    129 */
    +
    130 static constexpr rate_resolution max_delta = std::chrono::duration_cast<rate_resolution>(std::chrono::hours(1));
    +
    131public:
    +
    132 static constexpr T max_rate = std::numeric_limits<T>::max() / 2 / max_delta.count();
    +
    133 static constexpr capped_release is_capped = Capped;
    +
    134
    +
    135private:
    +
    136 static constexpr T accumulated(T rate, rate_resolution delta) noexcept {
    +
    137 return std::round(rate * delta.count());
    +
    138 }
    +
    139#ifndef __clang__
    +
    140 // std::round() is constexpr only since C++23 (but g++ doesn't care)
    +
    141 static_assert(accumulated(max_rate, max_delta) <= std::numeric_limits<T>::max());
    +
    142#endif
    +
    143
    +
    144public:
    +
    145 shared_token_bucket(T rate, T limit, T threshold, bool add_replenish_iffset = true) noexcept
    +
    146 : _replenish_rate(std::min(rate, max_rate))
    +
    147 , _replenish_limit(limit)
    +
    148 , _replenish_threshold(std::clamp(threshold, (T)1, limit))
    +
    149 // pretend it was replenished yesterday to spot overflows early
    +
    150 , _replenished(Clock::now() - std::chrono::hours(add_replenish_iffset ? 24 : 0))
    +
    151 , _rovers(_replenish_limit)
    +
    152 {}
    +
    153
    +
    154 T grab(T tokens) noexcept {
    +
    155 return fetch_add(_rovers.tail, tokens) + tokens;
    +
    156 }
    +
    157
    +
    158 void release(T tokens) noexcept {
    +
    159 _rovers.release(tokens);
    +
    160 }
    +
    161
    +
    162 void replenish(typename Clock::time_point now) noexcept {
    +
    163 auto ts = _replenished.load(std::memory_order_relaxed);
    +
    164
    +
    165 if (now <= ts) {
    +
    166 return;
    +
    167 }
    +
    168
    +
    169 auto delta = now - ts;
    +
    170 auto extra = accumulated_in(delta);
    +
    171
    +
    172 if (extra >= _replenish_threshold) {
    +
    173 if (!_replenished.compare_exchange_weak(ts, ts + delta)) {
    +
    174 return; // next time or another shard
    +
    175 }
    +
    176
    +
    177 fetch_add(_rovers.head, std::min(extra, _rovers.max_extra(_replenish_limit)));
    +
    178 }
    +
    179 }
    +
    180
    +
    181 T deficiency(T from) const noexcept {
    +
    182 return wrapping_difference(from, head());
    +
    183 }
    +
    184
    +
    185 template <typename Rep, typename Per>
    +
    186 static auto rate_cast(const std::chrono::duration<Rep, Per> delta) noexcept {
    +
    187 return std::chrono::duration_cast<rate_resolution>(delta);
    +
    188 }
    +
    189
    +
    190 // the number of tokens accumulated for the given time frame
    +
    191 template <typename Rep, typename Per>
    +
    192 T accumulated_in(const std::chrono::duration<Rep, Per> delta) const noexcept {
    +
    193 auto delta_at_rate = std::min(rate_cast(delta), max_delta);
    +
    194 return accumulated(_replenish_rate, delta_at_rate);
    +
    195 }
    +
    196
    +
    197 // Estimated time to process the given amount of tokens
    +
    198 // (peer of accumulated_in helper)
    +
    199 rate_resolution duration_for(T tokens) const noexcept {
    +
    200 return rate_resolution(double(tokens) / _replenish_rate);
    +
    201 }
    +
    202
    +
    203 T rate() const noexcept { return _replenish_rate; }
    +
    204 T limit() const noexcept { return _replenish_limit; }
    +
    205 T threshold() const noexcept { return _replenish_threshold; }
    +
    206 typename Clock::time_point replenished_ts() const noexcept { return _replenished; }
    +
    207
    +
    208 void update_rate(T rate) noexcept {
    +
    209 _replenish_rate = std::min(rate, max_rate);
    +
    210 }
    +
    211};
    +
    212
    +
    213} // internal namespace
    +
    214} // seastar namespace
    +
    future now()
    Returns a ready future.
    Definition: later.hh:35
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    STL namespace.
    +
    + + + + diff --git a/master/simple-stream_8hh_source.html b/master/simple-stream_8hh_source.html new file mode 100644 index 000000000..9f58feda3 --- /dev/null +++ b/master/simple-stream_8hh_source.html @@ -0,0 +1,743 @@ + + + + + + + +Seastar: seastar/core/simple-stream.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    simple-stream.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2016 Scylladb, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/sstring.hh>
    +
    25#include <seastar/util/variant_utils.hh>
    +
    26#include <seastar/util/modules.hh>
    +
    27#ifndef SEASTAR_MODULE
    +
    28#include <algorithm>
    +
    29#include <cstddef>
    +
    30#include <stdexcept>
    +
    31#include <type_traits>
    +
    32#endif
    +
    33
    +
    34namespace seastar {
    +
    35
    +
    36SEASTAR_MODULE_EXPORT_BEGIN
    +
    37
    + +
    39 size_t _size = 0;
    +
    40public:
    +
    41 void write(const char*, size_t size) {
    +
    42 _size += size;
    +
    43 }
    +
    44
    +
    45 size_t size() const {
    +
    46 return _size;
    +
    47 }
    +
    48};
    +
    49
    +
    50template<typename>
    + +
    52
    + +
    54
    +
    55template<typename Iterator>
    + +
    57
    +
    58template<typename Iterator>
    + +
    60
    + +
    62 char* _p = nullptr;
    +
    63 size_t _size = 0;
    +
    64public:
    +
    65 using has_with_stream = std::false_type;
    + +
    67 simple_memory_output_stream(char* p, size_t size, size_t start = 0) : _p(p + start), _size(size) {}
    +
    68 char* begin() { return _p; }
    +
    69
    +
    70 [[gnu::always_inline]]
    +
    71 void skip(size_t size) {
    +
    72 if (size > _size) {
    +
    73 throw std::out_of_range("serialization buffer overflow");
    +
    74 }
    +
    75 _p += size;
    +
    76 _size -= size;
    +
    77 }
    +
    78
    +
    79 [[gnu::always_inline]]
    +
    80 simple_memory_output_stream write_substream(size_t size) {
    +
    81 if (size > _size) {
    +
    82 throw std::out_of_range("serialization buffer overflow");
    +
    83 }
    +
    84 simple_memory_output_stream substream(_p, size);
    +
    85 skip(size);
    +
    86 return substream;
    +
    87 }
    +
    88
    +
    89 [[gnu::always_inline]]
    +
    90 void write(const char* p, size_t size) {
    +
    91 if (size > _size) {
    +
    92 throw std::out_of_range("serialization buffer overflow");
    +
    93 }
    +
    94 std::copy_n(p, size, _p);
    +
    95 skip(size);
    +
    96 }
    +
    97
    +
    98 [[gnu::always_inline]]
    +
    99 void fill(char c, size_t size) {
    +
    100 if (size > _size) {
    +
    101 throw std::out_of_range("serialization buffer overflow");
    +
    102 }
    +
    103 std::fill_n(_p, size, c);
    +
    104 skip(size);
    +
    105 }
    +
    106
    +
    107 [[gnu::always_inline]]
    +
    108 size_t size() const {
    +
    109 return _size;
    +
    110 }
    +
    111
    +
    112 // simple_memory_output_stream is a write cursor that keeps a mutable view of some
    +
    113 // underlying buffer and provides write interface. to_input_stream() converts it
    +
    114 // to a read cursor that points to the same part of the buffer but provides
    +
    115 // read interface.
    +
    116 simple_memory_input_stream to_input_stream() const;
    +
    117};
    +
    118
    +
    119template<typename Iterator>
    + + +
    122
    +
    123 Iterator _it;
    +
    124 simple _current;
    +
    125 size_t _size = 0;
    +
    126
    +
    127 friend class memory_input_stream<Iterator>;
    +
    128private:
    +
    129 template<typename Func>
    +
    130 //requires requires(Func f, view bv) { { f(bv) } -> void; }
    +
    131 void for_each_fragment(size_t size, Func&& func) {
    +
    132 if (size > _size) {
    +
    133 throw std::out_of_range("serialization buffer overflow");
    +
    134 }
    +
    135 _size -= size;
    +
    136 while (size) {
    +
    137 if (!_current.size()) {
    +
    138 _current = simple(reinterpret_cast<char*>((*_it).get_write()), (*_it).size());
    +
    139 _it++;
    +
    140 }
    +
    141 auto this_size = std::min(_current.size(), size);
    +
    142 func(_current.write_substream(this_size));
    +
    143 size -= this_size;
    +
    144 }
    +
    145 }
    + +
    147 : _it(it), _current(bv), _size(size) { }
    +
    148public:
    +
    149 using has_with_stream = std::false_type;
    +
    150 using iterator_type = Iterator;
    +
    151
    + +
    153
    +
    154 fragmented_memory_output_stream(Iterator it, size_t size)
    +
    155 : _it(it), _size(size) {
    +
    156 }
    +
    157
    +
    158 void skip(size_t size) {
    +
    159 for_each_fragment(size, [] (auto) { });
    +
    160 }
    +
    161 memory_output_stream<Iterator> write_substream(size_t size) {
    +
    162 if (size > _size) {
    +
    163 throw std::out_of_range("serialization buffer overflow");
    +
    164 }
    +
    165 if (_current.size() >= size) {
    +
    166 _size -= size;
    +
    167 return _current.write_substream(size);
    +
    168 }
    +
    169 fragmented_memory_output_stream substream(_it, _current, size);
    +
    170 skip(size);
    +
    171 return substream;
    +
    172 }
    +
    173 void write(const char* p, size_t size) {
    +
    174 for_each_fragment(size, [&p] (auto bv) {
    +
    175 std::copy_n(p, bv.size(), bv.begin());
    +
    176 p += bv.size();
    +
    177 });
    +
    178 }
    +
    179 void fill(char c, size_t size) {
    +
    180 for_each_fragment(size, [c] (simple fragment) {
    +
    181 std::fill_n(fragment.begin(), fragment.size(), c);
    +
    182 });
    +
    183 }
    +
    184 size_t size() const {
    +
    185 return _size;
    +
    186 }
    +
    187
    +
    188 // fragmented_memory_input_stream is a write cursor that keeps a mutable view of some
    +
    189 // underlying fragmented buffer and provides write interface. to_input_stream() converts
    +
    190 // it to a read cursor that points to the same part of the buffer but provides read interface.
    +
    191 fragmented_memory_input_stream<Iterator> to_input_stream() const;
    +
    192};
    +
    193
    +
    194template<typename Iterator>
    + +
    196public:
    + + +
    199
    +
    200private:
    +
    201 const bool _is_simple;
    + +
    203 union {
    +
    204 simple _simple;
    +
    205 fragmented_type _fragmented;
    +
    206 };
    +
    207public:
    +
    208 template<typename StreamVisitor>
    +
    209 [[gnu::always_inline]]
    +
    210 decltype(auto) with_stream(StreamVisitor&& visitor) {
    +
    211 if (__builtin_expect(_is_simple, true)) {
    +
    212 return visitor(_simple);
    +
    213 }
    +
    214 return visitor(_fragmented);
    +
    215 }
    +
    216
    +
    217 template<typename StreamVisitor>
    +
    218 [[gnu::always_inline]]
    +
    219 decltype(auto) with_stream(StreamVisitor&& visitor) const {
    +
    220 if (__builtin_expect(_is_simple, true)) {
    +
    221 return visitor(_simple);
    +
    222 }
    +
    223 return visitor(_fragmented);
    +
    224 }
    +
    225public:
    +
    226 using has_with_stream = std::true_type;
    +
    227 using iterator_type = Iterator;
    + +
    229 : _is_simple(true), _simple() {}
    + +
    231 : _is_simple(true), _simple(std::move(stream)) {}
    + +
    233 : _is_simple(false), _fragmented(std::move(stream)) {}
    +
    234
    +
    235 [[gnu::always_inline]]
    +
    236 memory_output_stream(const memory_output_stream& other) noexcept : _is_simple(other._is_simple) {
    +
    237 // Making this copy constructor noexcept makes copy assignment simpler.
    +
    238 // Besides, performance of memory_output_stream relies on the fact that both
    +
    239 // fragmented and simple input stream are PODs and the branch below
    +
    240 // is optimized away, so throwable copy constructors aren't something
    +
    241 // we want.
    +
    242 static_assert(std::is_nothrow_copy_constructible_v<fragmented>,
    +
    243 "seastar::memory_output_stream::fragmented should be copy constructible");
    +
    244 static_assert(std::is_nothrow_copy_constructible_v<simple>,
    +
    245 "seastar::memory_output_stream::simple should be copy constructible");
    +
    246 if (_is_simple) {
    +
    247 new (&_simple) simple(other._simple);
    +
    248 } else {
    +
    249 new (&_fragmented) fragmented_type(other._fragmented);
    +
    250 }
    +
    251 }
    +
    252
    +
    253 [[gnu::always_inline]]
    +
    254 memory_output_stream(memory_output_stream&& other) noexcept : _is_simple(other._is_simple) {
    +
    255 if (_is_simple) {
    +
    256 new (&_simple) simple(std::move(other._simple));
    +
    257 } else {
    +
    258 new (&_fragmented) fragmented_type(std::move(other._fragmented));
    +
    259 }
    +
    260 }
    +
    261
    +
    262 [[gnu::always_inline]]
    +
    263 memory_output_stream& operator=(const memory_output_stream& other) noexcept {
    +
    264 // Copy constructor being noexcept makes copy assignment simpler.
    +
    265 static_assert(std::is_nothrow_copy_constructible_v<memory_output_stream>,
    +
    266 "memory_output_stream copy constructor shouldn't throw");
    +
    267 if (this != &other) {
    +
    268 this->~memory_output_stream();
    +
    269 new (this) memory_output_stream(other);
    +
    270 }
    +
    271 return *this;
    +
    272 }
    +
    273
    +
    274 [[gnu::always_inline]]
    +
    275 memory_output_stream& operator=(memory_output_stream&& other) noexcept {
    +
    276 if (this != &other) {
    +
    277 this->~memory_output_stream();
    +
    278 new (this) memory_output_stream(std::move(other));
    +
    279 }
    +
    280 return *this;
    +
    281 }
    +
    282
    +
    283 [[gnu::always_inline]]
    + +
    285 if (_is_simple) {
    +
    286 _simple.~simple();
    +
    287 } else {
    +
    288 _fragmented.~fragmented_type();
    +
    289 }
    +
    290 }
    +
    291
    +
    292 [[gnu::always_inline]]
    +
    293 void skip(size_t size) {
    +
    294 with_stream([size] (auto& stream) {
    +
    295 stream.skip(size);
    +
    296 });
    +
    297 }
    +
    298
    +
    299 [[gnu::always_inline]]
    +
    300 memory_output_stream write_substream(size_t size) {
    +
    301 return with_stream([size] (auto& stream) -> memory_output_stream {
    +
    302 return stream.write_substream(size);
    +
    303 });
    +
    304 }
    +
    305
    +
    306 [[gnu::always_inline]]
    +
    307 void write(const char* p, size_t size) {
    +
    308 with_stream([p, size] (auto& stream) {
    +
    309 stream.write(p, size);
    +
    310 });
    +
    311 }
    +
    312
    +
    313 [[gnu::always_inline]]
    +
    314 void fill(char c, size_t size) {
    +
    315 with_stream([c, size] (auto& stream) {
    +
    316 stream.fill(c, size);
    +
    317 });
    +
    318 }
    +
    319
    +
    320 [[gnu::always_inline]]
    +
    321 size_t size() const {
    +
    322 return with_stream([] (auto& stream) {
    +
    323 return stream.size();
    +
    324 });
    +
    325 }
    +
    326
    +
    327 memory_input_stream<Iterator> to_input_stream() const;
    +
    328};
    +
    329
    + + +
    332
    +
    333 const char* _p = nullptr;
    +
    334 size_t _size = 0;
    +
    335public:
    +
    336 using has_with_stream = std::false_type;
    +
    337 simple_memory_input_stream() = default;
    +
    338 simple_memory_input_stream(const char* p, size_t size) : _p(p), _size(size) {}
    +
    339
    +
    340 const char* begin() const { return _p; }
    +
    341
    +
    342 [[gnu::always_inline]]
    +
    343 void skip(size_t size) {
    +
    344 if (size > _size) {
    +
    345 throw std::out_of_range("deserialization buffer underflow");
    +
    346 }
    +
    347 _p += size;
    +
    348 _size -= size;
    +
    349 }
    +
    350
    +
    351 [[gnu::always_inline]]
    +
    352 simple read_substream(size_t size) {
    +
    353 if (size > _size) {
    +
    354 throw std::out_of_range("deserialization buffer underflow");
    +
    355 }
    +
    356 simple substream(_p, size);
    +
    357 skip(size);
    +
    358 return substream;
    +
    359 }
    +
    360
    +
    361 [[gnu::always_inline]]
    +
    362 void read(char* p, size_t size) {
    +
    363 if (size > _size) {
    +
    364 throw std::out_of_range("deserialization buffer underflow");
    +
    365 }
    +
    366 std::copy_n(_p, size, p);
    +
    367 skip(size);
    +
    368 }
    +
    369
    +
    370 template<typename Output>
    +
    371 [[gnu::always_inline]]
    +
    372 void copy_to(Output& out) const {
    +
    373 out.write(_p, _size);
    +
    374 }
    +
    375
    +
    376 [[gnu::always_inline]]
    +
    377 size_t size() const {
    +
    378 return _size;
    +
    379 }
    +
    380};
    +
    381
    +
    382template<typename Iterator>
    + + + +
    386
    +
    387 Iterator _it;
    +
    388 simple _current;
    +
    389 size_t _size;
    +
    390private:
    +
    391 template<typename Func>
    +
    392 //requires requires(Func f, view bv) { { f(bv) } -> void; }
    +
    393 void for_each_fragment(size_t size, Func&& func) {
    +
    394 if (size > _size) {
    +
    395 throw std::out_of_range("deserialization buffer underflow");
    +
    396 }
    +
    397 _size -= size;
    +
    398 while (size) {
    +
    399 if (!_current.size()) {
    +
    400 _current = simple(reinterpret_cast<const char*>((*_it).begin()), (*_it).size());
    +
    401 _it++;
    +
    402 }
    +
    403 auto this_size = std::min(_current.size(), size);
    +
    404 func(_current.read_substream(this_size));
    +
    405 size -= this_size;
    +
    406 }
    +
    407 }
    +
    408 fragmented_memory_input_stream(Iterator it, simple bv, size_t size)
    +
    409 : _it(it), _current(bv), _size(size) { }
    +
    410 friend class fragmented_memory_output_stream<Iterator>;
    +
    411public:
    +
    412 using has_with_stream = std::false_type;
    +
    413 using iterator_type = Iterator;
    +
    414 fragmented_memory_input_stream(Iterator it, size_t size)
    +
    415 : _it(it), _size(size) {
    +
    416 }
    +
    417
    +
    418 void skip(size_t size) {
    +
    419 for_each_fragment(size, [] (auto) { });
    +
    420 }
    +
    421 fragmented read_substream(size_t size) {
    +
    422 if (size > _size) {
    +
    423 throw std::out_of_range("deserialization buffer underflow");
    +
    424 }
    +
    425 fragmented substream(_it, _current, size);
    +
    426 skip(size);
    +
    427 return substream;
    +
    428 }
    +
    429 void read(char* p, size_t size) {
    +
    430 for_each_fragment(size, [&p] (auto bv) {
    +
    431 p = std::copy_n(bv.begin(), bv.size(), p);
    +
    432 });
    +
    433 }
    +
    434 template<typename Output>
    +
    435 void copy_to(Output& out) {
    +
    436 for_each_fragment(_size, [&out] (auto bv) {
    +
    437 bv.copy_to(out);
    +
    438 });
    +
    439 }
    +
    440 size_t size() const {
    +
    441 return _size;
    +
    442 }
    +
    443
    +
    444 const char* first_fragment_data() const { return _current.begin(); }
    +
    445 size_t first_fragment_size() const { return _current.size(); }
    +
    446 Iterator fragment_iterator() const { return _it; }
    +
    447};
    +
    448
    +
    449/*
    +
    450template<typename Visitor>
    +
    451concept bool StreamVisitor() {
    +
    452 return requires(Visitor visitor, simple& simple, fragmented& fragmented) {
    +
    453 visitor(simple);
    +
    454 visitor(fragmented);
    +
    455 };
    +
    456}
    +
    457*/
    +
    458// memory_input_stream performs type erasure optimized for cases where
    +
    459// simple is used.
    +
    460// By using a lot of [[gnu::always_inline]] attributes this class attempts to
    +
    461// make the compiler generate code with simple functions inlined
    +
    462// directly in the user of the intput_stream.
    +
    463template<typename Iterator>
    + +
    465public:
    + + +
    468private:
    +
    469 const bool _is_simple;
    + +
    471 union {
    +
    472 simple _simple;
    +
    473 fragmented_type _fragmented;
    +
    474 };
    +
    475public:
    +
    476 template<typename StreamVisitor>
    +
    477 [[gnu::always_inline]]
    +
    478 decltype(auto) with_stream(StreamVisitor&& visitor) {
    +
    479 if (__builtin_expect(_is_simple, true)) {
    +
    480 return visitor(_simple);
    +
    481 }
    +
    482 return visitor(_fragmented);
    +
    483 }
    +
    484
    +
    485 template<typename StreamVisitor>
    +
    486 [[gnu::always_inline]]
    +
    487 decltype(auto) with_stream(StreamVisitor&& visitor) const {
    +
    488 if (__builtin_expect(_is_simple, true)) {
    +
    489 return visitor(_simple);
    +
    490 }
    +
    491 return visitor(_fragmented);
    +
    492 }
    +
    493public:
    +
    494 using has_with_stream = std::true_type;
    +
    495 using iterator_type = Iterator;
    + +
    497 : _is_simple(true), _simple(std::move(stream)) {}
    + +
    499 : _is_simple(false), _fragmented(std::move(stream)) {}
    +
    500
    +
    501 [[gnu::always_inline]]
    +
    502 memory_input_stream(const memory_input_stream& other) noexcept : _is_simple(other._is_simple) {
    +
    503 // Making this copy constructor noexcept makes copy assignment simpler.
    +
    504 // Besides, performance of memory_input_stream relies on the fact that both
    +
    505 // fragmented and simple input stream are PODs and the branch below
    +
    506 // is optimized away, so throwable copy constructors aren't something
    +
    507 // we want.
    +
    508 static_assert(std::is_nothrow_copy_constructible_v<fragmented>,
    +
    509 "seastar::memory_input_stream::fragmented should be copy constructible");
    +
    510 static_assert(std::is_nothrow_copy_constructible_v<simple>,
    +
    511 "seastar::memory_input_stream::simple should be copy constructible");
    +
    512 if (_is_simple) {
    +
    513 new (&_simple) simple(other._simple);
    +
    514 } else {
    +
    515 new (&_fragmented) fragmented_type(other._fragmented);
    +
    516 }
    +
    517 }
    +
    518
    +
    519 [[gnu::always_inline]]
    +
    520 memory_input_stream(memory_input_stream&& other) noexcept : _is_simple(other._is_simple) {
    +
    521 if (_is_simple) {
    +
    522 new (&_simple) simple(std::move(other._simple));
    +
    523 } else {
    +
    524 new (&_fragmented) fragmented_type(std::move(other._fragmented));
    +
    525 }
    +
    526 }
    +
    527
    +
    528 [[gnu::always_inline]]
    +
    529 memory_input_stream& operator=(const memory_input_stream& other) noexcept {
    +
    530 // Copy constructor being noexcept makes copy assignment simpler.
    +
    531 static_assert(std::is_nothrow_copy_constructible_v<memory_input_stream>,
    +
    532 "memory_input_stream copy constructor shouldn't throw");
    +
    533 if (this != &other) {
    +
    534 this->~memory_input_stream();
    +
    535 new (this) memory_input_stream(other);
    +
    536 }
    +
    537 return *this;
    +
    538 }
    +
    539
    +
    540 [[gnu::always_inline]]
    +
    541 memory_input_stream& operator=(memory_input_stream&& other) noexcept {
    +
    542 if (this != &other) {
    +
    543 this->~memory_input_stream();
    +
    544 new (this) memory_input_stream(std::move(other));
    +
    545 }
    +
    546 return *this;
    +
    547 }
    +
    548
    +
    549 [[gnu::always_inline]]
    + +
    551 if (_is_simple) {
    +
    552 _simple.~simple_memory_input_stream();
    +
    553 } else {
    +
    554 _fragmented.~fragmented_type();
    +
    555 }
    +
    556 }
    +
    557
    +
    558 [[gnu::always_inline]]
    +
    559 void skip(size_t size) {
    +
    560 with_stream([size] (auto& stream) {
    +
    561 stream.skip(size);
    +
    562 });
    +
    563 }
    +
    564
    +
    565 [[gnu::always_inline]]
    +
    566 memory_input_stream read_substream(size_t size) {
    +
    567 return with_stream([size] (auto& stream) -> memory_input_stream {
    +
    568 return stream.read_substream(size);
    +
    569 });
    +
    570 }
    +
    571
    +
    572 [[gnu::always_inline]]
    +
    573 void read(char* p, size_t size) {
    +
    574 with_stream([p, size] (auto& stream) {
    +
    575 stream.read(p, size);
    +
    576 });
    +
    577 }
    +
    578
    +
    579 template<typename Output>
    +
    580 [[gnu::always_inline]]
    +
    581 void copy_to(Output& out) {
    +
    582 with_stream([&out] (auto& stream) {
    +
    583 stream.copy_to(out);
    +
    584 });
    +
    585 }
    +
    586
    +
    587 [[gnu::always_inline]]
    +
    588 size_t size() const {
    +
    589 return with_stream([] (auto& stream) {
    +
    590 return stream.size();
    +
    591 });
    +
    592 }
    +
    593
    +
    594 template<typename Stream, typename StreamVisitor>
    +
    595 friend decltype(auto) with_serialized_stream(Stream& stream, StreamVisitor&& visitor);
    +
    596};
    +
    597
    +
    598SEASTAR_MODULE_EXPORT_END
    +
    599
    +
    600inline simple_memory_input_stream simple_memory_output_stream::to_input_stream() const {
    +
    601 return simple_memory_input_stream(_p, _size);
    +
    602}
    +
    603
    +
    604template<typename Iterator>
    +
    605inline fragmented_memory_input_stream<Iterator> fragmented_memory_output_stream<Iterator>::to_input_stream() const {
    +
    606 return fragmented_memory_input_stream<Iterator>(_it, _current.to_input_stream(), _size);
    +
    607}
    +
    608
    +
    609template<typename Iterator>
    +
    610inline memory_input_stream<Iterator> memory_output_stream<Iterator>::to_input_stream() const {
    +
    611 return with_stream(make_visitor(
    +
    612 [] (const simple_memory_output_stream& ostream) -> memory_input_stream<Iterator> {
    +
    613 return ostream.to_input_stream();
    +
    614 },
    +
    615 [] (const fragmented_memory_output_stream<Iterator>& ostream) -> memory_input_stream<Iterator> {
    +
    616 return ostream.to_input_stream();
    +
    617 }
    +
    618 ));
    +
    619}
    +
    620
    +
    621// The purpose of the with_serialized_stream() is to minimize number of dynamic
    +
    622// dispatches. For example, a lot of IDL-generated code looks like this:
    +
    623// auto some_value() const {
    +
    624// return seastar::with_serialized_stream(v, [] (auto& v) {
    +
    625// auto in = v;
    +
    626// ser::skip(in, boost::type<type1>());
    +
    627// ser::skip(in, boost::type<type2>());
    +
    628// return deserialize(in, boost::type<type3>());
    +
    629// });
    +
    630// }
    +
    631// Using with_stream() there is at most one dynamic dispatch per such
    +
    632// function, instead of one per each skip() and deserialize() call.
    +
    633
    +
    634SEASTAR_MODULE_EXPORT_BEGIN
    +
    635template<typename Stream, typename StreamVisitor, typename = std::enable_if_t<Stream::has_with_stream::value>>
    +
    636[[gnu::always_inline]]
    +
    637 inline decltype(auto)
    +
    638 with_serialized_stream(Stream& stream, StreamVisitor&& visitor) {
    +
    639 return stream.with_stream(std::forward<StreamVisitor>(visitor));
    +
    640}
    +
    641
    +
    642template<typename Stream, typename StreamVisitor, typename = std::enable_if_t<!Stream::has_with_stream::value>, typename = void>
    +
    643[[gnu::always_inline]]
    +
    644 inline decltype(auto)
    +
    645 with_serialized_stream(Stream& stream, StreamVisitor&& visitor) {
    +
    646 return visitor(stream);
    +
    647}
    +
    648
    +
    649using simple_input_stream = simple_memory_input_stream;
    +
    650using simple_output_stream = simple_memory_output_stream;
    +
    651
    +
    652SEASTAR_MODULE_EXPORT_END
    +
    653
    +
    654}
    +
    Definition: simple-stream.hh:383
    +
    Definition: simple-stream.hh:120
    +
    Definition: simple-stream.hh:38
    +
    Definition: simple-stream.hh:464
    +
    Definition: simple-stream.hh:195
    +
    Definition: simple-stream.hh:330
    +
    Definition: simple-stream.hh:61
    +
    Definition: stream.hh:60
    +
    auto make_visitor(Args &&... args)
    Definition: variant_utils.hh:52
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/slab_8hh_source.html b/master/slab_8hh_source.html new file mode 100644 index 000000000..12e78e52e --- /dev/null +++ b/master/slab_8hh_source.html @@ -0,0 +1,647 @@ + + + + + + + +Seastar: seastar/core/slab.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    slab.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2015 Cloudius Systems
    +
    20 */
    +
    21#pragma once
    +
    22
    +
    23#include <boost/intrusive/unordered_set.hpp>
    +
    24#include <boost/intrusive/list.hpp>
    +
    25#include <stdlib.h>
    +
    26#include <stdio.h>
    +
    27#include <stdint.h>
    +
    28#include <assert.h>
    +
    29#include <vector>
    +
    30#include <algorithm>
    + +
    32#include <seastar/core/align.hh>
    +
    33#include <seastar/core/memory.hh>
    +
    34
    +
    35namespace seastar {
    +
    36
    +
    37static constexpr uint16_t SLAB_MAGIC_NUMBER = 0x51AB; // meant to be 'SLAB' :-)
    +
    38
    +
    39/*
    +
    40 * Item requirements
    +
    41 * - Extend it to slab_item_base.
    +
    42 * - First parameter of constructor must be uint32_t _slab_page_index.
    +
    43 * - Implement get_slab_page_index() to return _slab_page_index.
    +
    44 * - Implement is_unlocked() to check if Item can be evicted.
    +
    45 */
    +
    46
    +
    47/*
    +
    48 * slab_page_desc is 1:1 mapped to slab page.
    +
    49 * footprint: 80b for each slab page.
    +
    50 */
    + +
    52private:
    +
    53 boost::intrusive::list_member_hook<> _lru_link;
    +
    54 boost::intrusive::list_member_hook<> _free_pages_link;
    +
    55 void *_slab_page;
    +
    56 std::vector<uintptr_t> _free_objects;
    +
    57 uint32_t _refcnt;
    +
    58 uint32_t _index; // index into slab page vector
    +
    59 uint16_t _magic;
    +
    60 uint8_t _slab_class_id;
    +
    61public:
    +
    62 slab_page_desc(void *slab_page, size_t objects, size_t object_size, uint8_t slab_class_id, uint32_t index)
    +
    63 : _slab_page(slab_page)
    +
    64 , _refcnt(0U)
    +
    65 , _index(index)
    +
    66 , _magic(SLAB_MAGIC_NUMBER)
    +
    67 , _slab_class_id(slab_class_id)
    +
    68 {
    +
    69 auto object = reinterpret_cast<uintptr_t>(slab_page);
    +
    70 _free_objects.reserve(objects - 1);
    +
    71 for (auto i = 1u; i < objects; i++) {
    +
    72 object += object_size;
    +
    73 _free_objects.push_back(object);
    +
    74 }
    +
    75 }
    +
    76
    +
    77 bool empty() const {
    +
    78 return _free_objects.empty();
    +
    79 }
    +
    80
    +
    81 size_t size() const {
    +
    82 return _free_objects.size();
    +
    83 }
    +
    84
    +
    85 uint32_t& refcnt() {
    +
    86 return _refcnt;
    +
    87 }
    +
    88
    +
    89 uint32_t index() const {
    +
    90 return _index;
    +
    91 }
    +
    92
    +
    93 uint16_t magic() const {
    +
    94 return _magic;
    +
    95 }
    +
    96
    +
    97 uint8_t slab_class_id() const {
    +
    98 return _slab_class_id;
    +
    99 }
    +
    100
    +
    101 void* slab_page() const {
    +
    102 return _slab_page;
    +
    103 }
    +
    104
    +
    105 std::vector<uintptr_t>& free_objects() {
    +
    106 return _free_objects;
    +
    107 }
    +
    108
    +
    109 void* allocate_object() {
    +
    110 assert(!_free_objects.empty());
    +
    111 auto object = reinterpret_cast<void*>(_free_objects.back());
    +
    112 _free_objects.pop_back();
    +
    113 return object;
    +
    114 }
    +
    115
    +
    116 void free_object(void *object) {
    +
    117 _free_objects.push_back(reinterpret_cast<uintptr_t>(object));
    +
    118 }
    +
    119
    +
    120 template<typename Item>
    +
    121 friend class slab_class;
    +
    122 template<typename Item>
    +
    123 friend class slab_allocator;
    +
    124};
    +
    125
    + +
    127 boost::intrusive::list_member_hook<> _lru_link;
    +
    128
    +
    129 template<typename Item>
    +
    130 friend class slab_class;
    +
    131};
    +
    132
    +
    133template<typename Item>
    + +
    135private:
    +
    136 boost::intrusive::list<slab_page_desc,
    +
    137 boost::intrusive::member_hook<slab_page_desc, boost::intrusive::list_member_hook<>,
    +
    138 &slab_page_desc::_free_pages_link>> _free_slab_pages;
    +
    139 boost::intrusive::list<slab_item_base,
    +
    140 boost::intrusive::member_hook<slab_item_base, boost::intrusive::list_member_hook<>,
    +
    141 &slab_item_base::_lru_link>> _lru;
    +
    142 size_t _size; // size of objects
    +
    143 uint8_t _slab_class_id;
    +
    144private:
    +
    145 template<typename... Args>
    +
    146 inline
    +
    147 Item* create_item(void *object, uint32_t slab_page_index, Args&&... args) {
    +
    148 Item *new_item = new(object) Item(slab_page_index, std::forward<Args>(args)...);
    +
    149 _lru.push_front(reinterpret_cast<slab_item_base&>(*new_item));
    +
    150 return new_item;
    +
    151 }
    +
    152
    +
    153 inline
    +
    154 std::pair<void *, uint32_t> evict_lru_item(std::function<void (Item& item_ref)>& erase_func) {
    +
    155 if (_lru.empty()) {
    +
    156 return { nullptr, 0U };
    +
    157 }
    +
    158
    +
    159 Item& victim = reinterpret_cast<Item&>(_lru.back());
    +
    160 uint32_t index = victim.get_slab_page_index();
    +
    161 assert(victim.is_unlocked());
    +
    162 _lru.erase(_lru.iterator_to(reinterpret_cast<slab_item_base&>(victim)));
    +
    163 // WARNING: You need to make sure that erase_func will not release victim back to slab.
    +
    164 erase_func(victim);
    +
    165
    +
    166 return { reinterpret_cast<void*>(&victim), index };
    +
    167 }
    +
    168public:
    +
    169 slab_class(size_t size, uint8_t slab_class_id)
    +
    170 : _size(size)
    +
    171 , _slab_class_id(slab_class_id)
    +
    172 {
    +
    173 }
    +
    174 slab_class(slab_class&&) = default;
    +
    175 ~slab_class() {
    +
    176 _free_slab_pages.clear();
    +
    177 _lru.clear();
    +
    178 }
    +
    179
    +
    180 size_t size() const {
    +
    181 return _size;
    +
    182 }
    +
    183
    +
    184 bool empty() const {
    +
    185 return _free_slab_pages.empty();
    +
    186 }
    +
    187
    +
    188 bool has_no_slab_pages() const {
    +
    189 return _lru.empty();
    +
    190 }
    +
    191
    +
    192 template<typename... Args>
    +
    193 Item *create(Args&&... args) {
    +
    194 assert(!_free_slab_pages.empty());
    +
    195 auto& desc = _free_slab_pages.back();
    +
    196 auto object = desc.allocate_object();
    +
    197 if (desc.empty()) {
    +
    198 // if empty, remove desc from the list of slab pages with free objects.
    +
    199 _free_slab_pages.erase(_free_slab_pages.iterator_to(desc));
    +
    200 }
    +
    201
    +
    202 return create_item(object, desc.index(), std::forward<Args>(args)...);
    +
    203 }
    +
    204
    +
    205 template<typename... Args>
    +
    206 Item *create_from_new_page(uint64_t max_object_size, uint32_t slab_page_index,
    +
    207 std::function<void (slab_page_desc& desc)> insert_slab_page_desc,
    +
    208 Args&&... args) {
    +
    209 // allocate slab page.
    +
    210 constexpr size_t alignment = std::alignment_of_v<Item>;
    +
    211 void *slab_page = aligned_alloc(alignment, max_object_size);
    +
    212 if (!slab_page) {
    +
    213 throw std::bad_alloc{};
    +
    214 }
    +
    215 // allocate descriptor to slab page.
    +
    216 slab_page_desc *desc = nullptr;
    +
    217 assert(_size % alignment == 0);
    +
    218 try {
    +
    219 auto objects = max_object_size / _size;
    +
    220 desc = new slab_page_desc(slab_page, objects, _size, _slab_class_id, slab_page_index);
    +
    221 } catch (const std::bad_alloc& e) {
    +
    222 ::free(slab_page);
    +
    223 throw std::bad_alloc{};
    +
    224 }
    +
    225
    +
    226 _free_slab_pages.push_front(*desc);
    +
    227 insert_slab_page_desc(*desc);
    +
    228
    +
    229 // first object from the allocated slab page is returned.
    +
    230 return create_item(slab_page, slab_page_index, std::forward<Args>(args)...);
    +
    231 }
    +
    232
    +
    233 template<typename... Args>
    +
    234 Item *create_from_lru(std::function<void (Item& item_ref)>& erase_func, Args&&... args) {
    +
    235 auto ret = evict_lru_item(erase_func);
    +
    236 if (!ret.first) {
    +
    237 throw std::bad_alloc{};
    +
    238 }
    +
    239 return create_item(ret.first, ret.second, std::forward<Args>(args)...);
    +
    240 }
    +
    241
    +
    242 void free_item(Item *item, slab_page_desc& desc) {
    +
    243 void *object = item;
    +
    244 _lru.erase(_lru.iterator_to(reinterpret_cast<slab_item_base&>(*item)));
    +
    245 desc.free_object(object);
    +
    246 if (desc.size() == 1) {
    +
    247 // push back desc into the list of slab pages with free objects.
    +
    248 _free_slab_pages.push_back(desc);
    +
    249 }
    +
    250 }
    +
    251
    +
    252 void touch_item(Item *item) {
    +
    253 auto& item_ref = reinterpret_cast<slab_item_base&>(*item);
    +
    254 _lru.erase(_lru.iterator_to(item_ref));
    +
    255 _lru.push_front(item_ref);
    +
    256 }
    +
    257
    +
    258 void remove_item_from_lru(Item *item) {
    +
    259 auto& item_ref = reinterpret_cast<slab_item_base&>(*item);
    +
    260 _lru.erase(_lru.iterator_to(item_ref));
    +
    261 }
    +
    262
    +
    263 void insert_item_into_lru(Item *item) {
    +
    264 auto& item_ref = reinterpret_cast<slab_item_base&>(*item);
    +
    265 _lru.push_front(item_ref);
    +
    266 }
    +
    267
    +
    268 void remove_desc_from_free_list(slab_page_desc& desc) {
    +
    269 assert(desc.slab_class_id() == _slab_class_id);
    +
    270 _free_slab_pages.erase(_free_slab_pages.iterator_to(desc));
    +
    271 }
    +
    272};
    +
    273
    +
    274template<typename Item>
    + +
    276private:
    +
    277 std::vector<size_t> _slab_class_sizes;
    +
    278 std::vector<slab_class<Item>> _slab_classes;
    + +
    280 // erase_func() is used to remove the item from the cache using slab.
    +
    281 std::function<void (Item& item_ref)> _erase_func;
    +
    282 std::vector<slab_page_desc*> _slab_pages_vector;
    +
    283 boost::intrusive::list<slab_page_desc,
    +
    284 boost::intrusive::member_hook<slab_page_desc, boost::intrusive::list_member_hook<>,
    +
    285 &slab_page_desc::_lru_link>> _slab_page_desc_lru;
    +
    286 uint64_t _max_object_size;
    +
    287 uint64_t _available_slab_pages;
    +
    288 struct collectd_stats {
    +
    289 uint64_t allocs;
    +
    290 uint64_t frees;
    +
    291 } _stats;
    +
    292 memory::reclaimer *_reclaimer = nullptr;
    +
    293 bool _reclaimed = false;
    +
    294private:
    +
    295 memory::reclaiming_result evict_lru_slab_page() {
    +
    296 if (_slab_page_desc_lru.empty()) {
    +
    297 // NOTE: Nothing to evict. If this happens, it implies that all
    +
    298 // slab pages in the slab are being used at the same time.
    +
    299 // That being said, this event is very unlikely to happen.
    +
    300 return memory::reclaiming_result::reclaimed_nothing;
    +
    301 }
    +
    302 // get descriptor of the least-recently-used slab page and related info.
    +
    303 auto& desc = _slab_page_desc_lru.back();
    +
    304 assert(desc.refcnt() == 0);
    +
    305 uint8_t slab_class_id = desc.slab_class_id();
    +
    306 auto slab_class = get_slab_class(slab_class_id);
    +
    307 void *slab_page = desc.slab_page();
    +
    308
    +
    309 auto& free_objects = desc.free_objects();
    +
    310 if (!desc.empty()) {
    +
    311 // if not empty, remove desc from the list of slab pages with free objects.
    +
    312 slab_class->remove_desc_from_free_list(desc);
    +
    313 // and sort the array of free objects for binary search later on.
    +
    314 std::sort(free_objects.begin(), free_objects.end());
    +
    315 }
    +
    316 // remove desc from the list of slab page descriptors.
    +
    317 _slab_page_desc_lru.erase(_slab_page_desc_lru.iterator_to(desc));
    +
    318 // remove desc from the slab page vector.
    +
    319 _slab_pages_vector[desc.index()] = nullptr;
    +
    320
    +
    321 // Iterate through objects in the slab page and if the object is an allocated
    +
    322 // item, the item should be removed from LRU and then erased.
    +
    323 uintptr_t object = reinterpret_cast<uintptr_t>(slab_page);
    +
    324 auto object_size = slab_class->size();
    +
    325 auto objects = _max_object_size / object_size;
    +
    326 for (auto i = 0u; i < objects; i++, object += object_size) {
    +
    327 if (!desc.empty()) {
    +
    328 // if binary_search returns true, it means that object at the current
    +
    329 // offset isn't an item.
    +
    330 if (std::binary_search(free_objects.begin(), free_objects.end(), object)) {
    +
    331 continue;
    +
    332 }
    +
    333 }
    +
    334 Item* item = reinterpret_cast<Item*>(object);
    +
    335 assert(item->is_unlocked());
    +
    336 slab_class->remove_item_from_lru(item);
    +
    337 _erase_func(*item);
    +
    338 _stats.frees++;
    +
    339 }
    +
    340#ifdef SEASTAR_DEBUG
    +
    341 printf("lru slab page eviction succeeded! desc_empty?=%d\n", desc.empty());
    +
    342#endif
    +
    343 ::free(slab_page); // free slab page object
    +
    344 delete &desc; // free its descriptor
    +
    345 return memory::reclaiming_result::reclaimed_something;
    +
    346 }
    +
    347
    +
    348 /*
    +
    349 * Reclaim the least recently used slab page that is unused.
    +
    350 */
    +
    351 memory::reclaiming_result reclaim() {
    +
    352 // once reclaimer was called, slab pages should no longer be allocated, as the
    +
    353 // memory used by slab is supposed to be calibrated.
    +
    354 _reclaimed = true;
    +
    355 // FIXME: Should reclaim() only evict a single slab page at a time?
    +
    356 return evict_lru_slab_page();
    +
    357 }
    +
    358
    +
    359 void initialize_slab_allocator(double growth_factor, uint64_t limit) {
    +
    360 constexpr size_t alignment = std::alignment_of_v<Item>;
    +
    361 constexpr size_t initial_size = 96;
    +
    362 size_t size = initial_size; // initial object size
    +
    363 uint8_t slab_class_id = 0U;
    +
    364
    +
    365 while (_max_object_size / size > 1) {
    +
    366 size = align_up(size, alignment);
    +
    367 _slab_class_sizes.push_back(size);
    +
    368 _slab_classes.emplace_back(size, slab_class_id);
    +
    369 size *= growth_factor;
    +
    370 assert(slab_class_id < std::numeric_limits<uint8_t>::max());
    +
    371 slab_class_id++;
    +
    372 }
    +
    373 _slab_class_sizes.push_back(_max_object_size);
    +
    374 _slab_classes.emplace_back(_max_object_size, slab_class_id);
    +
    375
    +
    376 // If slab limit is zero, enable reclaimer.
    +
    377 if (!limit) {
    +
    378 _reclaimer = new memory::reclaimer([this] { return reclaim(); });
    +
    379 } else {
    +
    380 _slab_pages_vector.reserve(_available_slab_pages);
    +
    381 }
    +
    382 }
    +
    383
    +
    384 slab_class<Item>* get_slab_class(const size_t size) {
    +
    385 // given a size, find slab class with binary search.
    +
    386 auto i = std::lower_bound(_slab_class_sizes.begin(), _slab_class_sizes.end(), size);
    +
    387 if (i == _slab_class_sizes.end()) {
    +
    388 return nullptr;
    +
    389 }
    +
    390 auto dist = std::distance(_slab_class_sizes.begin(), i);
    +
    391 return &_slab_classes[dist];
    +
    392 }
    +
    393
    +
    394 slab_class<Item>* get_slab_class(const uint8_t slab_class_id) {
    +
    395 assert(slab_class_id >= 0 && slab_class_id < _slab_classes.size());
    +
    396 return &_slab_classes[slab_class_id];
    +
    397 }
    +
    398
    +
    399 void register_metrics() {
    +
    400 namespace sm = seastar::metrics;
    +
    401 _metrics.add_group("slab", {
    +
    402 sm::make_counter("malloc_total_operations", sm::description("Total number of slab malloc operations"), _stats.allocs),
    +
    403 sm::make_counter("free_total_operations", sm::description("Total number of slab free operations"), _stats.frees),
    +
    404 sm::make_gauge("malloc_objects", sm::description("Number of slab created objects currently in memory"), [this] {
    +
    405 return _stats.allocs - _stats.frees;
    +
    406 })
    +
    407 });
    +
    408 }
    +
    409
    +
    410 inline slab_page_desc& get_slab_page_desc(Item *item)
    +
    411 {
    +
    412 auto desc = _slab_pages_vector[item->get_slab_page_index()];
    +
    413 assert(desc != nullptr);
    +
    414 assert(desc->magic() == SLAB_MAGIC_NUMBER);
    +
    415 return *desc;
    +
    416 }
    +
    417
    +
    418 inline bool can_allocate_page(slab_class<Item>& sc) {
    +
    419 return (_reclaimer && !_reclaimed) ||
    +
    420 (_available_slab_pages > 0 || sc.has_no_slab_pages());
    +
    421 }
    +
    422public:
    +
    423 slab_allocator(double growth_factor, uint64_t limit, uint64_t max_object_size)
    +
    424 : _max_object_size(max_object_size)
    +
    425 , _available_slab_pages(limit / max_object_size)
    +
    426 {
    +
    427 initialize_slab_allocator(growth_factor, limit);
    +
    428 register_metrics();
    +
    429 }
    +
    430
    +
    431 slab_allocator(double growth_factor, uint64_t limit, uint64_t max_object_size,
    +
    432 std::function<void (Item& item_ref)> erase_func)
    +
    433 : _erase_func(std::move(erase_func))
    +
    434 , _max_object_size(max_object_size)
    +
    435 , _available_slab_pages(limit / max_object_size)
    +
    436 {
    +
    437 initialize_slab_allocator(growth_factor, limit);
    +
    438 register_metrics();
    +
    439 }
    +
    440
    + +
    442 {
    +
    443 _slab_classes.clear();
    +
    444 _slab_page_desc_lru.clear();
    +
    445 for (auto desc : _slab_pages_vector) {
    +
    446 if (!desc) {
    +
    447 continue;
    +
    448 }
    +
    449 ::free(desc->slab_page());
    +
    450 delete desc;
    +
    451 }
    +
    452 delete _reclaimer;
    +
    453 }
    +
    454
    +
    458 template<typename... Args>
    +
    459 Item* create(const size_t size, Args&&... args) {
    +
    460 auto slab_class = get_slab_class(size);
    +
    461 if (!slab_class) {
    +
    462 throw std::bad_alloc{};
    +
    463 }
    +
    464
    +
    465 Item *item = nullptr;
    +
    466 if (!slab_class->empty()) {
    +
    467 item = slab_class->create(std::forward<Args>(args)...);
    +
    468 _stats.allocs++;
    +
    469 } else {
    +
    470 if (can_allocate_page(*slab_class)) {
    +
    471 auto index_to_insert = _slab_pages_vector.size();
    +
    472 item = slab_class->create_from_new_page(_max_object_size, index_to_insert,
    +
    473 [this](slab_page_desc& desc) {
    +
    474 if (_reclaimer) {
    +
    475 // insert desc into the LRU list of slab page descriptors.
    +
    476 _slab_page_desc_lru.push_front(desc);
    +
    477 }
    +
    478 // insert desc into the slab page vector.
    +
    479 _slab_pages_vector.push_back(&desc);
    +
    480 },
    +
    481 std::forward<Args>(args)...);
    +
    482 if (_available_slab_pages > 0) {
    +
    483 _available_slab_pages--;
    +
    484 }
    +
    485 _stats.allocs++;
    +
    486 } else if (_erase_func) {
    +
    487 item = slab_class->create_from_lru(_erase_func, std::forward<Args>(args)...);
    +
    488 }
    +
    489 }
    +
    490 return item;
    +
    491 }
    +
    492
    +
    493 void lock_item(Item *item) {
    +
    494 auto& desc = get_slab_page_desc(item);
    +
    495 if (_reclaimer) {
    +
    496 auto& refcnt = desc.refcnt();
    +
    497
    +
    498 if (++refcnt == 1) {
    +
    499 // remove slab page descriptor from list of slab page descriptors.
    +
    500 _slab_page_desc_lru.erase(_slab_page_desc_lru.iterator_to(desc));
    +
    501 }
    +
    502 }
    +
    503 // remove item from the lru of its slab class.
    +
    504 auto slab_class = get_slab_class(desc.slab_class_id());
    +
    505 slab_class->remove_item_from_lru(item);
    +
    506 }
    +
    507
    +
    508 void unlock_item(Item *item) {
    +
    509 auto& desc = get_slab_page_desc(item);
    +
    510 if (_reclaimer) {
    +
    511 auto& refcnt = desc.refcnt();
    +
    512
    +
    513 if (--refcnt == 0) {
    +
    514 // insert slab page descriptor back into list of slab page descriptors.
    +
    515 _slab_page_desc_lru.push_front(desc);
    +
    516 }
    +
    517 }
    +
    518 // insert item into the lru of its slab class.
    +
    519 auto slab_class = get_slab_class(desc.slab_class_id());
    +
    520 slab_class->insert_item_into_lru(item);
    +
    521 }
    +
    522
    +
    526 void free(Item *item) {
    +
    527 if (item) {
    +
    528 auto& desc = get_slab_page_desc(item);
    +
    529 auto slab_class = get_slab_class(desc.slab_class_id());
    +
    530 slab_class->free_item(item, desc);
    +
    531 _stats.frees++;
    +
    532 }
    +
    533 }
    +
    534
    +
    538 void touch(Item *item) {
    +
    539 if (item) {
    +
    540 auto& desc = get_slab_page_desc(item);
    +
    541 auto slab_class = get_slab_class(desc.slab_class_id());
    +
    542 slab_class->touch_item(item);
    +
    543 }
    +
    544 }
    +
    545
    + +
    550 auto class_id = 0;
    +
    551 for (auto& slab_class : _slab_classes) {
    +
    552 size_t size = slab_class.size();
    +
    553 printf("slab[%3d]\tsize: %10lu\tper-slab-page: %5lu\n", class_id, size, _max_object_size / size);
    +
    554 class_id++;
    +
    555 }
    +
    556 }
    +
    557
    +
    561 size_t class_size(const size_t size) {
    +
    562 auto slab_class = get_slab_class(size);
    +
    563 return (slab_class) ? slab_class->size() : 0;
    +
    564 }
    +
    565};
    +
    566
    +
    567}
    +
    holds the metric definition.
    Definition: metrics_registration.hh:94
    +
    metric_groups & add_group(const group_name_type &name, const std::initializer_list< metric_definition > &l)
    Add metrics belonging to the same group.
    +
    Definition: slab.hh:275
    +
    void touch(Item *item)
    Definition: slab.hh:538
    +
    void free(Item *item)
    Definition: slab.hh:526
    +
    size_t class_size(const size_t size)
    Definition: slab.hh:561
    +
    void print_slab_classes()
    Definition: slab.hh:549
    +
    Item * create(const size_t size, Args &&... args)
    Definition: slab.hh:459
    +
    Definition: slab.hh:134
    +
    Definition: slab.hh:126
    +
    impl::metric_definition_impl make_gauge(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
    Gauge are a general purpose metric.
    Definition: metrics.hh:442
    +
    impl::metric_definition_impl make_counter(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
    create a counter metric
    Definition: metrics.hh:528
    +
    header for metrics creation.
    +
    metrics creation and registration
    Definition: estimated_histogram.hh:34
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: slab.hh:51
    +
    + + + + diff --git a/master/sleep_8hh.html b/master/sleep_8hh.html new file mode 100644 index 000000000..88bd81db2 --- /dev/null +++ b/master/sleep_8hh.html @@ -0,0 +1,132 @@ + + + + + + + +Seastar: seastar/core/sleep.hh File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    sleep.hh File Reference
    +
    +
    +
    #include <chrono>
    +#include <seastar/core/abort_source.hh>
    +#include <seastar/core/future.hh>
    +#include <seastar/core/lowres_clock.hh>
    +#include <seastar/core/manual_clock.hh>
    +#include <seastar/core/timer.hh>
    +#include <seastar/util/modules.hh>
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  seastar::sleep_aborted
     exception that is thrown when application is in process of been stopped More...
     
    + + + + +

    +Namespaces

    namespace  seastar
     Seastar API namespace.
     
    + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename Clock = steady_clock_type, typename Rep , typename Period >
    future seastar::sleep (std::chrono::duration< Rep, Period > dur)
     
    template<typename Clock = steady_clock_type>
    future seastar::sleep_abortable (typename Clock::duration dur)
     
    +template future seastar::sleep_abortable< steady_clock_type > (typename steady_clock_type::duration)
     
    +template future seastar::sleep_abortable< lowres_clock > (typename lowres_clock::duration)
     
    template<typename Clock = steady_clock_type>
    future seastar::sleep_abortable (typename Clock::duration dur, abort_source &as)
     
    +template future seastar::sleep_abortable< steady_clock_type > (typename steady_clock_type::duration, abort_source &)
     
    +template future seastar::sleep_abortable< lowres_clock > (typename lowres_clock::duration, abort_source &)
     
    +template future seastar::sleep_abortable< manual_clock > (typename manual_clock::duration, abort_source &)
     
    +
    + + + + diff --git a/master/sleep_8hh_source.html b/master/sleep_8hh_source.html new file mode 100644 index 000000000..92c8c6359 --- /dev/null +++ b/master/sleep_8hh_source.html @@ -0,0 +1,171 @@ + + + + + + + +Seastar: seastar/core/sleep.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    sleep.hh
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright (C) 2015 Cloudius Systems, Ltd.
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#ifndef SEASTAR_MODULE
    +
    26#include <chrono>
    +
    27
    +
    28#include <seastar/core/abort_source.hh>
    +
    29#include <seastar/core/future.hh>
    +
    30#include <seastar/core/lowres_clock.hh>
    +
    31#include <seastar/core/manual_clock.hh>
    +
    32#include <seastar/core/timer.hh>
    +
    33#include <seastar/util/modules.hh>
    +
    34#endif
    +
    35
    +
    36namespace seastar {
    +
    37
    +
    38SEASTAR_MODULE_EXPORT_BEGIN
    +
    39
    +
    41
    +
    47template <typename Clock = steady_clock_type, typename Rep, typename Period>
    +
    48future<> sleep(std::chrono::duration<Rep, Period> dur) {
    +
    49 struct sleeper {
    +
    50 promise<> done;
    +
    51 timer<Clock> tmr;
    +
    52 sleeper(std::chrono::duration<Rep, Period> dur)
    +
    53 : tmr([this] { done.set_value(); })
    +
    54 {
    +
    55 tmr.arm(dur);
    +
    56 }
    +
    57 };
    +
    58 auto s = std::make_unique<sleeper>(dur);
    +
    59 future<> fut = s->done.get_future();
    +
    60 return fut.finally([s = std::move(s)] {});
    +
    61}
    +
    62
    + +
    65public:
    +
    67 virtual const char* what() const noexcept {
    +
    68 return "Sleep is aborted";
    +
    69 }
    +
    70};
    +
    71
    +
    78template <typename Clock = steady_clock_type>
    +
    79future<> sleep_abortable(typename Clock::duration dur);
    +
    80
    +
    81extern template future<> sleep_abortable<steady_clock_type>(typename steady_clock_type::duration);
    +
    82extern template future<> sleep_abortable<lowres_clock>(typename lowres_clock::duration);
    +
    83
    +
    92template <typename Clock = steady_clock_type>
    +
    93future<> sleep_abortable(typename Clock::duration dur, abort_source& as);
    +
    94
    +
    95extern template future<> sleep_abortable<steady_clock_type>(typename steady_clock_type::duration, abort_source&);
    +
    96extern template future<> sleep_abortable<lowres_clock>(typename lowres_clock::duration, abort_source&);
    +
    97extern template future<> sleep_abortable<manual_clock>(typename manual_clock::duration, abort_source&);
    +
    98
    +
    99SEASTAR_MODULE_EXPORT_END
    +
    100}
    +
    Definition: abort_source.hh:48
    +
    Definition: abort_source.hh:58
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    future< T > finally(Func &&func) noexcept
    Definition: future.hh:1640
    + +
    void set_value(A &&... a) noexcept
    Sets the promises value.
    Definition: future.hh:990
    +
    exception that is thrown when application is in process of been stopped
    Definition: sleep.hh:64
    +
    virtual const char * what() const noexcept
    Reports the exception reason.
    Definition: sleep.hh:67
    + +
    void arm(time_point until, std::optional< duration > period={}) noexcept
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    future sleep_abortable(typename Clock::duration dur)
    +
    future sleep(std::chrono::duration< Rep, Period > dur)
    Definition: sleep.hh:48
    + +
    + + + + diff --git a/master/smp_8hh.html b/master/smp_8hh.html new file mode 100644 index 000000000..42d6762f8 --- /dev/null +++ b/master/smp_8hh.html @@ -0,0 +1,197 @@ + + + + + + + +Seastar: seastar/core/smp.hh File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    smp.hh File Reference
    +
    +
    +
    #include <seastar/core/future.hh>
    +#include <seastar/core/loop.hh>
    +#include <seastar/core/semaphore.hh>
    +#include <seastar/core/metrics_registration.hh>
    +#include <seastar/core/posix.hh>
    +#include <seastar/core/reactor_config.hh>
    +#include <seastar/core/resource.hh>
    +#include <seastar/core/shard_id.hh>
    +#include <seastar/util/modules.hh>
    +#include <boost/lockfree/spsc_queue.hpp>
    +#include <boost/thread/barrier.hpp>
    +#include <boost/range/irange.hpp>
    +#include <deque>
    +#include <optional>
    +#include <thread>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + +

    +Classes

    struct  seastar::smp_service_group_config
     
    class  seastar::smp_service_group
     
    struct  seastar::smp_submit_to_options
     Options controlling the behaviour of smp::submit_to(). More...
     
    class  seastar::smp_message_queue
     
    struct  seastar::smp_message_queue::tx_side::aa
     
    class  seastar::smp
     
    + + + + + + + + + +

    +Namespaces

    namespace  seastar
     Seastar API namespace.
     
    namespace  seastar::alien
     Integration with non-seastar applications.
     
    namespace  seastar::memory
     
    + + + + + + + +

    +Typedefs

    +using seastar::smp_timeout_clock = lowres_clock
     
    +using seastar::smp_service_group_semaphore = basic_semaphore< named_semaphore_exception_factory, smp_timeout_clock >
     
    +using seastar::smp_service_group_semaphore_units = semaphore_units< named_semaphore_exception_factory, smp_timeout_clock >
     
    + + + + + + + + + + + +

    +Functions

    smp_service_group seastar::default_smp_service_group () noexcept
     
    future< smp_service_group > seastar::create_smp_service_group (smp_service_group_config ssgc) noexcept
     
    future seastar::destroy_smp_service_group (smp_service_group ssg) noexcept
     
    +void seastar::init_default_smp_service_group (shard_id cpu)
     
    +smp_service_group_semaphore & seastar::get_smp_service_groups_semaphore (unsigned ssg_id, shard_id t) noexcept
     
    + + + +

    +Variables

    +static constexpr smp_timeout_clock::time_point seastar::smp_no_timeout = smp_timeout_clock::time_point::max()
     
    +

    Class Documentation

    + +

    ◆ seastar::smp_service_group_config

    + +
    +
    + + + + +
    struct seastar::smp_service_group_config
    +
    + + + + + + + + +
    Class Members
    +optional< sstring > +group_name +

    An optional name for this smp group

    +

    If this optional is engaged, timeout exception messages of the group's semaphores will indicate the group's name.

    +
    +unsigned +max_nonlocal_requests +

    The maximum number of non-local requests that execute on a shard concurrently

    +

    Will be adjusted upwards to allow at least one request per non-local shard.

    +
    + +
    +
    +
    + + + + diff --git a/master/smp_8hh_source.html b/master/smp_8hh_source.html new file mode 100644 index 000000000..d17a947cf --- /dev/null +++ b/master/smp_8hh_source.html @@ -0,0 +1,497 @@ + + + + + + + +Seastar: seastar/core/smp.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    smp.hh
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2019 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/future.hh>
    +
    25#include <seastar/core/loop.hh>
    +
    26#include <seastar/core/semaphore.hh>
    + +
    28#include <seastar/core/posix.hh>
    +
    29#include <seastar/core/reactor_config.hh>
    +
    30#include <seastar/core/resource.hh>
    + +
    32#include <seastar/util/modules.hh>
    +
    33
    +
    34#ifndef SEASTAR_MODULE
    +
    35#include <boost/lockfree/spsc_queue.hpp>
    +
    36#include <boost/thread/barrier.hpp>
    +
    37#include <boost/range/irange.hpp>
    +
    38#include <deque>
    +
    39#include <optional>
    +
    40#include <thread>
    +
    41#endif
    +
    42
    +
    44
    +
    45namespace seastar {
    +
    46
    +
    47class reactor_backend_selector;
    +
    48
    +
    49SEASTAR_MODULE_EXPORT_BEGIN
    +
    50
    +
    51class smp_service_group;
    +
    52
    +
    53namespace alien {
    +
    54
    +
    55class instance;
    +
    56
    +
    57}
    +
    58SEASTAR_MODULE_EXPORT_END
    +
    59
    +
    60namespace internal {
    +
    61
    +
    62unsigned smp_service_group_id(smp_service_group ssg) noexcept;
    +
    63
    +
    64class memory_prefaulter;
    +
    65
    +
    66}
    +
    67
    +
    68namespace memory::internal {
    +
    69
    +
    70struct numa_layout;
    +
    71
    +
    72}
    +
    73
    +
    74SEASTAR_MODULE_EXPORT_BEGIN
    +
    75
    + + +
    88 std::optional<sstring> group_name;
    +
    89};
    +
    90
    + +
    112 unsigned _id;
    +
    113#ifdef SEASTAR_DEBUG
    +
    114 unsigned _version = 0;
    +
    115#endif
    +
    116private:
    +
    117 explicit smp_service_group(unsigned id) noexcept : _id(id) {}
    +
    118
    +
    119 friend unsigned internal::smp_service_group_id(smp_service_group ssg) noexcept;
    + + + +
    123};
    +
    124
    +
    125SEASTAR_MODULE_EXPORT_END
    +
    126
    +
    127inline
    +
    128unsigned
    +
    129internal::smp_service_group_id(smp_service_group ssg) noexcept {
    +
    130 return ssg._id;
    +
    131}
    +
    132
    +
    133SEASTAR_MODULE_EXPORT_BEGIN
    +
    139smp_service_group default_smp_service_group() noexcept;
    +
    140
    + +
    146
    + +
    152
    +
    153inline
    + +
    155 return smp_service_group(0);
    +
    156}
    +
    157
    + + + +
    161
    +
    162SEASTAR_MODULE_EXPORT_END
    +
    163
    +
    164static constexpr smp_timeout_clock::time_point smp_no_timeout = smp_timeout_clock::time_point::max();
    +
    165
    +
    166SEASTAR_MODULE_EXPORT_BEGIN
    + + +
    174 smp_timeout_clock::time_point timeout = smp_no_timeout;
    +
    175
    +
    176 smp_submit_to_options(smp_service_group service_group = default_smp_service_group(), smp_timeout_clock::time_point timeout = smp_no_timeout) noexcept
    + +
    178 , timeout(timeout) {
    +
    179 }
    +
    180};
    +
    181
    +
    182void init_default_smp_service_group(shard_id cpu);
    +
    183
    +
    184smp_service_group_semaphore& get_smp_service_groups_semaphore(unsigned ssg_id, shard_id t) noexcept;
    +
    185
    + +
    187 static constexpr size_t queue_length = 128;
    +
    188 static constexpr size_t batch_size = 16;
    +
    189 static constexpr size_t prefetch_cnt = 2;
    +
    190 struct work_item;
    +
    191 struct lf_queue_remote {
    +
    192 reactor* remote;
    +
    193 };
    +
    194 using lf_queue_base = boost::lockfree::spsc_queue<work_item*,
    +
    195 boost::lockfree::capacity<queue_length>>;
    +
    196 // use inheritence to control placement order
    +
    197 struct lf_queue : lf_queue_remote, lf_queue_base {
    +
    198 lf_queue(reactor* remote) : lf_queue_remote{remote} {}
    +
    199 void maybe_wakeup();
    +
    200 ~lf_queue();
    +
    201 };
    +
    202 lf_queue _pending;
    +
    203 lf_queue _completed;
    +
    204 struct alignas(seastar::cache_line_size) {
    +
    205 size_t _sent = 0;
    +
    206 size_t _compl = 0;
    +
    207 size_t _last_snt_batch = 0;
    +
    208 size_t _last_cmpl_batch = 0;
    +
    209 size_t _current_queue_length = 0;
    +
    210 };
    +
    211 // keep this between two structures with statistics
    +
    212 // this makes sure that they have at least one cache line
    +
    213 // between them, so hw prefetcher will not accidentally prefetch
    +
    214 // cache line used by another cpu.
    +
    215 metrics::metric_groups _metrics;
    +
    216 struct alignas(seastar::cache_line_size) {
    +
    217 size_t _received = 0;
    +
    218 size_t _last_rcv_batch = 0;
    +
    219 };
    +
    220 struct work_item : public task {
    +
    221 explicit work_item(smp_service_group ssg) : task(current_scheduling_group()), ssg(ssg) {}
    + +
    223 virtual ~work_item() {}
    +
    224 virtual void fail_with(std::exception_ptr) = 0;
    +
    225 void process();
    +
    226 virtual void complete() = 0;
    +
    227 };
    +
    228 template <typename Func>
    +
    229 struct async_work_item : work_item {
    +
    230 smp_message_queue& _queue;
    +
    231 Func _func;
    +
    232 using futurator = futurize<std::invoke_result_t<Func>>;
    +
    233 using future_type = typename futurator::type;
    +
    234 using value_type = typename future_type::value_type;
    +
    235 std::optional<value_type> _result;
    +
    236 std::exception_ptr _ex; // if !_result
    +
    237 typename futurator::promise_type _promise; // used on local side
    +
    238 async_work_item(smp_message_queue& queue, smp_service_group ssg, Func&& func) : work_item(ssg), _queue(queue), _func(std::move(func)) {}
    +
    239 virtual void fail_with(std::exception_ptr ex) override {
    +
    240 _promise.set_exception(std::move(ex));
    +
    241 }
    +
    242 virtual task* waiting_task() noexcept override {
    +
    243 // FIXME: waiting_tasking across shards is not implemented. Unsynchronized task access is unsafe.
    +
    244 return nullptr;
    +
    245 }
    +
    246 virtual void run_and_dispose() noexcept override {
    +
    247 // _queue.respond() below forwards the continuation chain back to the
    +
    248 // calling shard.
    +
    249 (void)futurator::invoke(this->_func).then_wrapped([this] (auto f) {
    +
    250 if (f.failed()) {
    +
    251 _ex = f.get_exception();
    +
    252 } else {
    +
    253 _result = f.get();
    +
    254 }
    +
    255 _queue.respond(this);
    +
    256 });
    +
    257 // We don't delete the task here as the creator of the work item will
    +
    258 // delete it on the origin shard.
    +
    259 }
    +
    260 virtual void complete() override {
    +
    261 if (_result) {
    +
    262 _promise.set_value(std::move(*_result));
    +
    263 } else {
    +
    264 // FIXME: _ex was allocated on another cpu
    +
    265 _promise.set_exception(std::move(_ex));
    +
    266 }
    +
    267 }
    +
    268 future_type get_future() { return _promise.get_future(); }
    +
    269 };
    +
    270 union tx_side {
    +
    271 tx_side() {}
    +
    272 ~tx_side() {}
    +
    273 void init() { new (&a) aa; }
    +
    274 struct aa {
    +
    275 std::deque<work_item*> pending_fifo;
    +
    276 } a;
    +
    277 } _tx;
    +
    278 std::vector<work_item*> _completed_fifo;
    +
    279public:
    + + +
    282 template <typename Func>
    +
    283 futurize_t<std::invoke_result_t<Func>> submit(shard_id t, smp_submit_to_options options, Func&& func) noexcept {
    + +
    285 auto wi = std::make_unique<async_work_item<Func>>(*this, options.service_group, std::forward<Func>(func));
    +
    286 auto fut = wi->get_future();
    +
    287 submit_item(t, options.timeout, std::move(wi));
    +
    288 return fut;
    +
    289 }
    +
    290 void start(unsigned cpuid);
    +
    291 template<size_t PrefetchCnt, typename Func>
    +
    292 size_t process_queue(lf_queue& q, Func process);
    +
    293 size_t process_incoming();
    +
    294 size_t process_completions(shard_id t);
    +
    295 void stop();
    +
    296private:
    +
    297 void work();
    +
    298 void submit_item(shard_id t, smp_timeout_clock::time_point timeout, std::unique_ptr<work_item> wi);
    +
    299 void respond(work_item* wi);
    +
    300 void move_pending();
    +
    301 void flush_request_batch();
    +
    302 void flush_response_batch();
    +
    303 bool has_unflushed_responses() const;
    +
    304 bool pure_poll_rx() const;
    +
    305 bool pure_poll_tx() const;
    +
    306
    +
    307 friend class smp;
    +
    308};
    +
    309
    +
    310class smp_message_queue;
    +
    311struct reactor_options;
    +
    312struct smp_options;
    +
    313
    +
    314class smp : public std::enable_shared_from_this<smp> {
    +
    315 alien::instance& _alien;
    +
    316 std::vector<posix_thread> _threads;
    +
    317 std::vector<std::function<void ()>> _thread_loops; // for dpdk
    +
    318 std::optional<boost::barrier> _all_event_loops_done;
    +
    319 std::unique_ptr<internal::memory_prefaulter> _prefaulter;
    +
    320 struct qs_deleter {
    +
    321 void operator()(smp_message_queue** qs) const;
    +
    322 };
    +
    323 std::unique_ptr<smp_message_queue*[], qs_deleter> _qs_owner;
    +
    324 static thread_local smp_message_queue**_qs;
    +
    325 static thread_local std::thread::id _tmain;
    +
    326 bool _using_dpdk = false;
    +
    327
    +
    328private:
    +
    329 void setup_prefaulter(const seastar::resource::resources& res, seastar::memory::internal::numa_layout layout);
    +
    330public:
    +
    331 explicit smp(alien::instance& alien);
    +
    332 ~smp();
    +
    333 void configure(const smp_options& smp_opts, const reactor_options& reactor_opts);
    +
    334 void cleanup() noexcept;
    +
    335 void cleanup_cpu();
    +
    336 void arrive_at_event_loop_end();
    +
    337 void join_all();
    +
    338 static bool main_thread() { return std::this_thread::get_id() == _tmain; }
    +
    339
    +
    353 template <typename Func>
    +
    354 static futurize_t<std::invoke_result_t<Func>> submit_to(unsigned t, smp_submit_to_options options, Func&& func) noexcept {
    +
    355 using ret_type = std::invoke_result_t<Func>;
    +
    356 if (t == this_shard_id()) {
    +
    357 try {
    + +
    359 // Non-deferring function, so don't worry about func lifetime
    +
    360 return futurize<ret_type>::invoke(std::forward<Func>(func));
    +
    361 } else if (std::is_lvalue_reference_v<Func>) {
    +
    362 // func is an lvalue, so caller worries about its lifetime
    +
    363 return futurize<ret_type>::invoke(func);
    +
    364 } else {
    +
    365 // Deferring call on rvalue function, make sure to preserve it across call
    +
    366 auto w = std::make_unique<std::decay_t<Func>>(std::move(func));
    +
    367 auto ret = futurize<ret_type>::invoke(*w);
    +
    368 return ret.finally([w = std::move(w)] {});
    +
    369 }
    +
    370 } catch (...) {
    +
    371 // Consistently return a failed future rather than throwing, to simplify callers
    +
    372 return futurize<std::invoke_result_t<Func>>::make_exception_future(std::current_exception());
    +
    373 }
    +
    374 } else {
    +
    375 return _qs[t][this_shard_id()].submit(t, options, std::forward<Func>(func));
    +
    376 }
    +
    377 }
    +
    392 template <typename Func>
    +
    393 static futurize_t<std::invoke_result_t<Func>> submit_to(unsigned t, Func&& func) noexcept {
    +
    394 return submit_to(t, default_smp_service_group(), std::forward<Func>(func));
    +
    395 }
    +
    396 static bool poll_queues();
    +
    397 static bool pure_poll_queues();
    +
    398 static boost::integer_range<unsigned> all_cpus() noexcept {
    +
    399 return boost::irange(0u, count);
    +
    400 }
    +
    409 template<typename Func>
    +
    410 requires std::is_nothrow_move_constructible_v<Func>
    +
    411 static future<> invoke_on_all(smp_submit_to_options options, Func&& func) noexcept {
    +
    412 static_assert(std::is_same_v<future<>, typename futurize<std::invoke_result_t<Func>>::type>, "bad Func signature");
    +
    413 static_assert(std::is_nothrow_move_constructible_v<Func>);
    +
    414 return parallel_for_each(all_cpus(), [options, &func] (unsigned id) {
    +
    415 return smp::submit_to(id, options, Func(func));
    +
    416 });
    +
    417 }
    +
    427 template<typename Func>
    +
    428 static future<> invoke_on_all(Func&& func) noexcept {
    +
    429 return invoke_on_all(smp_submit_to_options{}, std::forward<Func>(func));
    +
    430 }
    +
    440 template<typename Func>
    +
    441 requires std::is_nothrow_move_constructible_v<Func> &&
    +
    442 std::is_nothrow_copy_constructible_v<Func>
    +
    443 static future<> invoke_on_others(unsigned cpu_id, smp_submit_to_options options, Func func) noexcept {
    +
    444 static_assert(std::is_same_v<future<>, typename futurize<std::invoke_result_t<Func>>::type>, "bad Func signature");
    +
    445 static_assert(std::is_nothrow_move_constructible_v<Func>);
    +
    446 return parallel_for_each(all_cpus(), [cpu_id, options, func = std::move(func)] (unsigned id) {
    +
    447 return id != cpu_id ? smp::submit_to(id, options, Func(func)) : make_ready_future<>();
    +
    448 });
    +
    449 }
    +
    460 template<typename Func>
    +
    461 requires std::is_nothrow_move_constructible_v<Func>
    +
    462 static future<> invoke_on_others(unsigned cpu_id, Func func) noexcept {
    +
    463 return invoke_on_others(cpu_id, smp_submit_to_options{}, std::move(func));
    +
    464 }
    +
    471 template<typename Func>
    +
    472 requires std::is_nothrow_move_constructible_v<Func>
    +
    473 static future<> invoke_on_others(Func func) noexcept {
    +
    474 return invoke_on_others(this_shard_id(), std::move(func));
    +
    475 }
    +
    476private:
    +
    477 void start_all_queues();
    +
    478 void pin(unsigned cpu_id);
    +
    479 void allocate_reactor(unsigned id, reactor_backend_selector rbs, reactor_config cfg);
    +
    480 void create_thread(std::function<void ()> thread_loop);
    +
    481 unsigned adjust_max_networking_aio_io_control_blocks(unsigned network_iocbs);
    +
    482public:
    +
    483 static unsigned count;
    +
    484};
    +
    485
    +
    486SEASTAR_MODULE_EXPORT_END
    +
    487
    +
    488}
    +
    Definition: alien.hh:119
    +
    Counted resource guard.
    Definition: semaphore.hh:154
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    futurize_t< FuncResult > then_wrapped(Func &&func) &noexcept
    Schedule a block of code to run when the future is ready, allowing for exception handling.
    Definition: future.hh:1525
    +
    Low-resolution and efficient steady clock.
    Definition: lowres_clock.hh:56
    +
    holds the metric definition.
    Definition: metrics_registration.hh:94
    +
    Definition: queue.hh:44
    +
    Definition: reactor.hh:156
    +
    Definition: semaphore.hh:511
    +
    Definition: smp.hh:186
    +
    Definition: smp.hh:111
    +
    friend future< smp_service_group > create_smp_service_group(smp_service_group_config ssgc) noexcept
    +
    friend smp_service_group default_smp_service_group() noexcept
    Definition: smp.hh:154
    +
    friend future destroy_smp_service_group(smp_service_group) noexcept
    +
    Definition: smp.hh:314
    +
    static future invoke_on_others(unsigned cpu_id, smp_submit_to_options options, Func func) noexcept
    Definition: smp.hh:443
    +
    static future invoke_on_others(Func func) noexcept
    Definition: smp.hh:473
    +
    static future invoke_on_others(unsigned cpu_id, Func func) noexcept
    Definition: smp.hh:462
    +
    static futurize_t< std::invoke_result_t< Func > > submit_to(unsigned t, smp_submit_to_options options, Func &&func) noexcept
    Definition: smp.hh:354
    +
    static future invoke_on_all(Func &&func) noexcept
    Definition: smp.hh:428
    +
    static future invoke_on_all(smp_submit_to_options options, Func &&func) noexcept
    Definition: smp.hh:411
    +
    static futurize_t< std::invoke_result_t< Func > > submit_to(unsigned t, Func &&func) noexcept
    Definition: smp.hh:393
    +
    Definition: task.hh:34
    +
    future< T > make_exception_future(std::exception_ptr &&value) noexcept
    Creates a future in an available, failed state.
    Definition: future.hh:1949
    +
    future parallel_for_each(Iterator begin, Sentinel end, Func &&func) noexcept
    Run tasks in parallel (iterator version).
    Definition: loop.hh:565
    +
    holds the metric_groups definition needed by class that reports metrics
    +
    Definition: critical_alloc_section.hh:80
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    std::optional< sstring > group_name
    Definition: smp.hh:88
    +
    scheduling_group current_scheduling_group() noexcept
    Returns the current scheduling group.
    Definition: scheduling.hh:399
    +
    shard_id this_shard_id() noexcept
    Returns shard_id of the of the current shard.
    Definition: shard_id.hh:52
    +
    unsigned max_nonlocal_requests
    Definition: smp.hh:83
    +
    smp_service_group default_smp_service_group() noexcept
    Definition: smp.hh:154
    +
    future destroy_smp_service_group(smp_service_group ssg) noexcept
    +
    future< smp_service_group > create_smp_service_group(smp_service_group_config ssgc) noexcept
    + + + +
    Converts a type to a future type, if it isn't already.
    Definition: future.hh:1853
    +
    static type invoke(Func &&func, FuncArgs &&... args) noexcept
    +
    Check whether a type is a future.
    Definition: future.hh:1032
    +
    Configuration for the reactor.
    Definition: reactor_config.hh:53
    +
    Definition: resource.hh:130
    + +
    Configuration for the multicore aspect of seastar.
    Definition: smp_options.hh:47
    +
    Options controlling the behaviour of smp::submit_to().
    Definition: smp.hh:168
    +
    smp_service_group service_group
    Controls resource allocation.
    Definition: smp.hh:170
    +
    smp_timeout_clock::time_point timeout
    Definition: smp.hh:174
    +
    + + + + diff --git a/master/smp__options_8hh.html b/master/smp__options_8hh.html new file mode 100644 index 000000000..cb8fc2bc5 --- /dev/null +++ b/master/smp__options_8hh.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: seastar/core/smp_options.hh File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    smp_options.hh File Reference
    +
    +
    +
    #include <seastar/util/program-options.hh>
    +#include <seastar/util/modules.hh>
    +#include <string>
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    struct  seastar::smp_options
     Configuration for the multicore aspect of seastar. More...
     
    + + + + +

    +Namespaces

    namespace  seastar
     Seastar API namespace.
     
    + + + +

    +Enumerations

    enum class  seastar::memory_allocator { seastar::seastar +, seastar::standard + }
     
    +
    + + + + diff --git a/master/smp__options_8hh_source.html b/master/smp__options_8hh_source.html new file mode 100644 index 000000000..8e96e8db3 --- /dev/null +++ b/master/smp__options_8hh_source.html @@ -0,0 +1,162 @@ + + + + + + + +Seastar: seastar/core/smp_options.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    smp_options.hh
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2022 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <seastar/util/program-options.hh>
    +
    26#include <seastar/util/modules.hh>
    +
    27#include <string>
    +
    28#endif
    +
    29
    +
    31
    +
    32namespace seastar {
    +
    33
    +
    34SEASTAR_MODULE_EXPORT_BEGIN
    +
    35
    +
    36enum class memory_allocator {
    +
    39 seastar,
    + +
    44};
    +
    45
    + + + + + + + + + + + + + + +
    87
    + +
    101
    +
    104 size_t reserve_additional_memory_per_shard = 0;
    +
    106public:
    + +
    108};
    +
    109
    +
    110SEASTAR_MODULE_EXPORT_END
    +
    111}
    +
    Definition: program-options.hh:292
    + +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    memory_allocator
    Definition: smp_options.hh:36
    + + +
    Configuration for the multicore aspect of seastar.
    Definition: smp_options.hh:47
    +
    program_options::value< std::string > reserve_memory
    Memory reserved to OS (if memory not specified).
    Definition: smp_options.hh:55
    +
    program_options::value< resource::cpuset > cpuset
    CPUs to use (in cpuset(7) format; default: all)).
    Definition: smp_options.hh:51
    +
    program_options::value< std::string > memory
    Memory to use, in bytes (ex: 4G) (default: all).
    Definition: smp_options.hh:53
    +
    program_options::value< bool > mbind
    Definition: smp_options.hh:77
    +
    program_options::value< unsigned > smp
    Number of threads (default: one per CPU).
    Definition: smp_options.hh:49
    +
    program_options::value< std::string > io_properties
    A YAML string describing the characteristics of the I/O Subsystem.
    Definition: smp_options.hh:73
    +
    program_options::value< std::string > hugepages
    Path to accessible hugetlbfs mount (typically /dev/hugepages/something).
    Definition: smp_options.hh:57
    +
    program_options::value< bool > thread_affinity
    Definition: smp_options.hh:63
    +
    program_options::value< bool > enable_glibc_exception_scaling_workaround
    Definition: smp_options.hh:82
    +
    program_options::value< bool > allow_cpus_in_remote_numa_nodes
    Definition: smp_options.hh:86
    +
    program_options::value< std::string > io_properties_file
    Path to a YAML file describing the characteristics of the I/O Subsystem.
    Definition: smp_options.hh:71
    +
    program_options::value< bool > lock_memory
    Lock all memory (prevents swapping).
    Definition: smp_options.hh:59
    +
    program_options::value< unsigned > num_io_groups
    Number of IO groups.
    Definition: smp_options.hh:69
    +
    + + + + diff --git a/master/socket__defs_8hh_source.html b/master/socket__defs_8hh_source.html new file mode 100644 index 000000000..ec6980bd7 --- /dev/null +++ b/master/socket__defs_8hh_source.html @@ -0,0 +1,282 @@ + + + + + + + +Seastar: seastar/net/socket_defs.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    socket_defs.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2016 ScyllaDB.
    +
    20 */
    +
    21#pragma once
    +
    22
    +
    23#ifndef SEASTAR_MODULE
    +
    24#include <sys/socket.h>
    +
    25#include <sys/un.h>
    +
    26#include <netinet/ip.h>
    +
    27#include <array>
    +
    28#include <cassert>
    +
    29#include <functional>
    +
    30#include <iosfwd>
    +
    31#include <fmt/ostream.h>
    +
    32#endif
    +
    33#include <seastar/net/byteorder.hh>
    +
    34#include <seastar/net/unix_address.hh>
    +
    35
    +
    36namespace seastar {
    +
    37
    +
    38SEASTAR_MODULE_EXPORT_BEGIN
    +
    39
    +
    40namespace net {
    +
    41class inet_address;
    +
    42}
    +
    43
    +
    44struct ipv4_addr;
    +
    45struct ipv6_addr;
    +
    46
    + +
    48public:
    +
    49 socklen_t addr_length;
    +
    50 union {
    +
    51 ::sockaddr_storage sas;
    +
    52 ::sockaddr sa;
    +
    53 ::sockaddr_in in;
    +
    54 ::sockaddr_in6 in6;
    +
    55 ::sockaddr_un un;
    +
    56 } u;
    +
    57 socket_address(const sockaddr_in& sa) noexcept : addr_length{sizeof(::sockaddr_in)} {
    +
    58 u.in = sa;
    +
    59 }
    +
    60 socket_address(const sockaddr_in6& sa) noexcept : addr_length{sizeof(::sockaddr_in6)} {
    +
    61 u.in6 = sa;
    +
    62 }
    +
    63 socket_address(uint16_t) noexcept;
    +
    64 socket_address(ipv4_addr) noexcept;
    +
    65 socket_address(const ipv6_addr&) noexcept;
    +
    66 socket_address(const ipv6_addr&, uint32_t scope) noexcept;
    +
    67 socket_address(const net::inet_address&, uint16_t p = 0) noexcept;
    +
    68 explicit socket_address(const unix_domain_addr&) noexcept;
    +
    73 socket_address() noexcept;
    +
    74
    +
    75 ::sockaddr& as_posix_sockaddr() noexcept { return u.sa; }
    +
    76 ::sockaddr_in& as_posix_sockaddr_in() noexcept { return u.in; }
    +
    77 ::sockaddr_in6& as_posix_sockaddr_in6() noexcept { return u.in6; }
    +
    78 const ::sockaddr& as_posix_sockaddr() const noexcept { return u.sa; }
    +
    79 const ::sockaddr_in& as_posix_sockaddr_in() const noexcept { return u.in; }
    +
    80 const ::sockaddr_in6& as_posix_sockaddr_in6() const noexcept { return u.in6; }
    +
    81
    +
    82 socket_address(uint32_t, uint16_t p = 0) noexcept;
    +
    83
    +
    84 socklen_t length() const noexcept { return addr_length; };
    +
    85
    +
    86 bool is_af_unix() const noexcept {
    +
    87 return u.sa.sa_family == AF_UNIX;
    +
    88 }
    +
    89
    +
    90 bool is_unspecified() const noexcept;
    +
    91
    +
    92 sa_family_t family() const noexcept {
    +
    93 return u.sa.sa_family;
    +
    94 }
    +
    95
    +
    96 net::inet_address addr() const noexcept;
    +
    97 ::in_port_t port() const noexcept;
    +
    98 bool is_wildcard() const noexcept;
    +
    99
    +
    100 bool operator==(const socket_address&) const noexcept;
    +
    101 bool operator!=(const socket_address& a) const noexcept {
    +
    102 return !(*this == a);
    +
    103 }
    +
    104};
    +
    105
    +
    106std::ostream& operator<<(std::ostream&, const socket_address&);
    +
    107
    +
    108enum class transport {
    +
    109 TCP = IPPROTO_TCP,
    +
    110 SCTP = IPPROTO_SCTP
    +
    111};
    +
    112
    +
    113struct ipv4_addr {
    +
    114 uint32_t ip;
    +
    115 uint16_t port;
    +
    116
    +
    117 ipv4_addr() noexcept : ip(0), port(0) {}
    +
    118 ipv4_addr(uint32_t ip, uint16_t port) noexcept : ip(ip), port(port) {}
    +
    119 ipv4_addr(uint16_t port) noexcept : ip(0), port(port) {}
    +
    120 // throws if not a valid ipv4 addr
    +
    121 ipv4_addr(const std::string &addr);
    +
    122 ipv4_addr(const std::string &addr, uint16_t port);
    +
    123 // throws if not an ipv4 addr
    +
    124 ipv4_addr(const net::inet_address&, uint16_t);
    +
    125 ipv4_addr(const socket_address &) noexcept;
    +
    126 ipv4_addr(const ::in_addr&, uint16_t = 0) noexcept;
    +
    127
    +
    128 bool is_ip_unspecified() const noexcept {
    +
    129 return ip == 0;
    +
    130 }
    +
    131 bool is_port_unspecified() const noexcept {
    +
    132 return port == 0;
    +
    133 }
    +
    134};
    +
    135
    +
    136struct ipv6_addr {
    +
    137 using ipv6_bytes = std::array<uint8_t, 16>;
    +
    138
    +
    139 ipv6_bytes ip;
    +
    140 uint16_t port;
    +
    141
    +
    142 ipv6_addr(const ipv6_bytes&, uint16_t port = 0) noexcept;
    +
    143 ipv6_addr(uint16_t port = 0) noexcept;
    +
    144 // throws if not a valid ipv6 addr
    +
    145 ipv6_addr(const std::string&);
    +
    146 ipv6_addr(const std::string&, uint16_t port);
    +
    147 ipv6_addr(const net::inet_address&, uint16_t = 0) noexcept;
    +
    148 ipv6_addr(const ::in6_addr&, uint16_t = 0) noexcept;
    +
    149 ipv6_addr(const ::sockaddr_in6&) noexcept;
    +
    150 ipv6_addr(const socket_address&) noexcept;
    +
    151
    +
    152 bool is_ip_unspecified() const noexcept;
    +
    153 bool is_port_unspecified() const noexcept {
    +
    154 return port == 0;
    +
    155 }
    +
    156};
    +
    157
    +
    158std::ostream& operator<<(std::ostream&, const ipv4_addr&);
    +
    159std::ostream& operator<<(std::ostream&, const ipv6_addr&);
    +
    160
    +
    161inline bool operator==(const ipv4_addr &lhs, const ipv4_addr& rhs) noexcept {
    +
    162 return lhs.ip == rhs.ip && lhs.port == rhs.port;
    +
    163}
    +
    164SEASTAR_MODULE_EXPORT_END
    +
    165}
    +
    166
    +
    167namespace std {
    +
    168template<>
    +
    169struct hash<seastar::socket_address> {
    +
    170 size_t operator()(const seastar::socket_address&) const;
    +
    171};
    +
    172template<>
    +
    173struct hash<seastar::ipv4_addr> {
    +
    174 size_t operator()(const seastar::ipv4_addr&) const;
    +
    175};
    +
    176template<>
    +
    177struct hash<seastar::unix_domain_addr> {
    +
    178 size_t operator()(const seastar::unix_domain_addr&) const;
    +
    179};
    +
    180template<>
    +
    181struct hash<::sockaddr_un> {
    +
    182 size_t operator()(const ::sockaddr_un&) const;
    +
    183};
    +
    184
    +
    185template <>
    +
    186struct hash<seastar::transport> {
    +
    187 size_t operator()(seastar::transport tr) const {
    +
    188 return static_cast<size_t>(tr);
    +
    189 }
    +
    190};
    +
    191
    +
    192}
    +
    193
    +
    194#if FMT_VERSION >= 90000
    +
    195template <> struct fmt::formatter<seastar::socket_address> : fmt::ostream_formatter {};
    +
    196template <> struct fmt::formatter<seastar::ipv4_addr> : fmt::ostream_formatter {};
    +
    197template <> struct fmt::formatter<seastar::ipv6_addr> : fmt::ostream_formatter {};
    +
    198#endif
    +
    Definition: inet_address.hh:50
    +
    Definition: socket_defs.hh:47
    +
    union seastar::socket_address::@14 u
    !< actual size of the relevant 'u' member
    + +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    STL namespace.
    +
    Definition: socket_defs.hh:113
    +
    Definition: socket_defs.hh:136
    +
    Definition: unix_address.hh:43
    +
    + + + + diff --git a/master/source__location-compat_8hh_source.html b/master/source__location-compat_8hh_source.html new file mode 100644 index 000000000..780318392 --- /dev/null +++ b/master/source__location-compat_8hh_source.html @@ -0,0 +1,139 @@ + + + + + + + +Seastar: seastar/util/source_location-compat.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    source_location-compat.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright (C) 2021 ScyllaDB
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25namespace seastar::internal {
    +
    26
    +
    27class source_location {
    +
    28 const char* _file;
    +
    29 const char* _func;
    +
    30 int _line;
    +
    31 int _col;
    +
    32
    +
    33 constexpr source_location(const char* file, const char* func, int line, int col) noexcept
    +
    34 : _file(file)
    +
    35 , _func(func)
    +
    36 , _line(line)
    +
    37 , _col(col)
    +
    38 { }
    +
    39public:
    +
    40 constexpr source_location() noexcept
    +
    41 : _file("unknown")
    +
    42 , _func(_file)
    +
    43 , _line(0)
    +
    44 , _col(0)
    +
    45 { }
    +
    46 static
    +
    47#ifdef __cpp_consteval
    +
    48 consteval
    +
    49#endif
    +
    50 source_location current(const char* file = __builtin_FILE(), const char* func = __builtin_FUNCTION(), int line = __builtin_LINE(), int col = 0) noexcept {
    +
    51 return source_location(file, func, line, col);
    +
    52 }
    +
    53
    +
    54 constexpr const char* file_name() const noexcept { return _file; }
    +
    55 constexpr const char* function_name() const noexcept { return _func; }
    +
    56 constexpr int line() const noexcept { return _line; }
    +
    57 constexpr int column() const noexcept { return _col; }
    +
    58};
    +
    59
    +
    60} // namespace seastar::internal
    +
    + + + + diff --git a/master/spinlock_8hh_source.html b/master/spinlock_8hh_source.html new file mode 100644 index 000000000..76ec9d3b4 --- /dev/null +++ b/master/spinlock_8hh_source.html @@ -0,0 +1,187 @@ + + + + + + + +Seastar: seastar/util/spinlock.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    spinlock.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2016 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/util/modules.hh>
    +
    25
    +
    26#ifndef SEASTAR_MODULE
    +
    27#include <atomic>
    +
    28#include <cassert>
    +
    29
    +
    30#if defined(__x86_64__) || defined(__i386__)
    +
    31#include <xmmintrin.h>
    +
    32#endif
    +
    33#endif
    +
    34
    +
    35namespace seastar {
    +
    36
    +
    37namespace internal {
    +
    38#if defined(__x86_64__) || defined(__i386__)
    +
    39
    +
    45[[gnu::always_inline]]
    +
    46inline void cpu_relax() {
    +
    47 _mm_pause();
    +
    48}
    +
    49
    +
    50#elif defined(__PPC__)
    +
    51
    +
    52[[gnu::always_inline]]
    +
    53inline void cpu_relax() {
    +
    54 __asm__ volatile("yield");
    +
    55}
    +
    56
    +
    57#elif defined(__s390x__) || defined(__zarch__)
    +
    58
    +
    59// FIXME: there must be a better way
    +
    60[[gnu::always_inline]]
    +
    61inline void cpu_relax() {}
    +
    62
    +
    63#elif defined(__aarch64__)
    +
    64
    +
    65[[gnu::always_inline]]
    +
    66inline void cpu_relax() {
    +
    67 __asm__ volatile("yield");
    +
    68}
    +
    69
    +
    70#else
    +
    71
    +
    72[[gnu::always_inline]]
    +
    73inline void cpu_relax() {}
    +
    74#warning "Using an empty cpu_relax() for this architecture"
    +
    75
    +
    76#endif
    +
    77
    +
    78
    +
    79}
    +
    80
    +
    81namespace util {
    +
    82
    +
    83// Spin lock implementation.
    +
    84// BasicLockable.
    +
    85// Async-signal safe.
    +
    86// unlock() "synchronizes with" lock().
    +
    87SEASTAR_MODULE_EXPORT
    +
    88class spinlock {
    +
    89 std::atomic<bool> _busy = { false };
    +
    90public:
    +
    91 spinlock() = default;
    +
    92 spinlock(const spinlock&) = delete;
    +
    93 ~spinlock() { assert(!_busy.load(std::memory_order_relaxed)); }
    +
    94 bool try_lock() noexcept {
    +
    95 return !_busy.exchange(true, std::memory_order_acquire);
    +
    96 }
    +
    97 void lock() noexcept {
    +
    98 while (_busy.exchange(true, std::memory_order_acquire)) {
    +
    99 while (_busy.load(std::memory_order_relaxed)) {
    +
    100 internal::cpu_relax();
    +
    101 }
    +
    102 }
    +
    103 }
    +
    104 void unlock() noexcept {
    +
    105 _busy.store(false, std::memory_order_release);
    +
    106 }
    +
    107};
    +
    108
    +
    109}
    +
    110
    +
    111}
    +
    Definition: spinlock.hh:88
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/split/1.html b/master/split/1.html new file mode 100644 index 000000000..6b330dee3 --- /dev/null +++ b/master/split/1.html @@ -0,0 +1,367 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    1 Introduction

    +

    Seastar, which we introduce in this document, is a +C++ library for writing highly efficient complex server applications on +modern multi-core machines.

    +

    Traditionally, the programming languages libraries and frameworks +used for writing server applications have been divided into two distinct +camps: those focusing on efficiency, and those focusing on complexity. +Some frameworks are extremely efficient and yet allow building only +simple applications (e.g., DPDK allows applications which process +packets individually), while other frameworks allow building extremely +complex applications, at the cost of run-time efficiency. Seastar is our +attempt to get the best of both worlds: To create a library which allows +building highly complex server applications, and yet achieve optimal +performance.

    +

    The inspiration and first use case of Seastar was Scylla, a rewrite +of Apache Cassandra. Cassandra is a very complex application, and yet, +with Seastar we were able to re-implement it with as much as 10-fold +throughput increase, as well as significantly lower and more consistent +latencies.

    +

    Seastar offers a complete asynchronous programming framework, which +uses two concepts - futures and +continuations - to uniformly represent, and handle, +every type of asynchronous event, including network I/O, disk I/O, and +complex combinations of other events.

    +

    Since modern multi-core and multi-socket machines have steep +penalties for sharing data between cores (atomic instructions, cache +line bouncing and memory fences), Seastar programs use the share-nothing +programming model, i.e., the available memory is divided between the +cores, each core works on data in its own part of memory, and +communication between cores happens via explicit message passing (which +itself happens using the SMP’s shared memory hardware, of course).

    +

    1.1 Asynchronous programming

    +

    A server for a network protocol, such as the classic HTTP (Web) or +SMTP (e-mail) servers, inherently deals with parallelism: Multiple +clients send requests in parallel, and we cannot finish handling one +request before starting to handle the next: A request may, and often +does, need to block because of various reasons — a full TCP window +(i.e., a slow connection), disk I/O, or even the client holding on to an +inactive connection — and the server needs to handle other connections +as well.

    +

    The most straightforward way to handle such parallel connections, +employed by classic network servers such as Inetd, Apache Httpd and +Sendmail, is to use a separate operating-system process per connection. +This technique evolved over the years to improve its performance: At +first, a new process was spawned to handle each new connection; Later, a +pool of existing processes was kept and each new connection was assigned +to an unemployed process from the pool; Finally, the processes were +replaced by threads. However, the common idea behind all these +implementations is that at each moment, each process handles exclusively +a single connection. Therefore, the server code is free to use blocking +system calls, such as reading or writing to a connection, or reading +from disk, and if this process blocks, all is well because we have many +additional processes ready to handle other connections.

    +

    Programming a server which uses a process (or a thread) per +connection is known as synchronous programming, because the +code is written linearly, and one line of code starts to run after the +previous line finished. For example, the code may read a request from a +socket, parse the request, and then piecemeal read a file from disk and +write it back to the socket. Such code is easy to write, almost like +traditional non-parallel programs. In fact, it’s even possible to run an +external non-parallel program to handle each request — this is for +example how Apache HTTPd ran “CGI” programs, the first implementation of +dynamic Web-page generation.

    +
    +

    NOTE: although the synchronous server application is written in a +linear, non-parallel, fashion, behind the scenes the kernel helps ensure +that everything happens in parallel and the machine’s resources — CPUs, +disk and network — are fully utilized. Beyond the process parallelism +(we have multiple processes handling multiple connections in parallel), +the kernel may even parallelize the work of one individual connection — +for example process an outstanding disk request (e.g., read from a disk +file) in parallel with handling the network connection (send +buffered-but-yet-unsent data, and buffer newly-received data until the +application is ready to read it).

    +
    +

    But synchronous, process-per-connection, server programming didn’t +come without disadvantages and costs. Slowly but surely, server authors +realized that starting a new process is slow, context switching is slow, +and each process comes with significant overheads — most notably the +size of its stack. Server and kernel authors worked hard to mitigate +these overheads: They switched from processes to threads, from creating +new threads to thread pools, they lowered default stack size of each +thread, and increased the virtual memory size to allow more +partially-utilized stacks. But still, servers with synchronous designs +had unsatisfactory performance, and scaled badly as the number of +concurrent connections grew. In 1999, Dan Kegel popularized “the C10K +problem”, the need of a single server to efficiently handle 10,000 +concurrent connections — most of them slow or even inactive.

    +

    The solution, which became popular in the following decade, was to +abandon the cozy but inefficient synchronous server design, and switch +to a new type of server design — the asynchronous, or +event-driven, server. An event-driven server has just one +thread, or more accurately, one thread per CPU. This single thread runs +a tight loop which, at each iteration, checks, using poll() +(or the more efficient epoll) for new events on many open +file descriptors, e.g., sockets. For example, an event can be a socket +becoming readable (new data has arrived from the remote end) or becoming +writable (we can send more data on this connection). The application +handles this event by doing some non-blocking operations, modifying one +or more of the file descriptors, and maintaining its knowledge of the +state of this connection.

    +

    However, writers of asynchronous server applications faced, and still +face today, two significant challenges:

    +
      +
    • Complexity: Writing a simple asynchronous server +is straightforward. But writing a complex asynchronous server +is notoriously difficult. The handling of a single connection, instead +of being a simple easy-to-read function call, now involves a large +number of small callback functions, and a complex state machine to +remember which function needs to be called when each event +occurs.

    • +
    • Non-blocking: Having just one thread per core is +important for the performance of the server application, because context +switches are slow. However, if we only have one thread per core, the +event-handling functions must never block, or the core will +remain idle. But some existing programming languages and frameworks +leave the server author no choice but to use blocking functions, and +therefore multiple threads. For example, Cassandra was +written as an asynchronous server application; But because disk I/O was +implemented with mmaped files, which can uncontrollably +block the whole thread when accessed, they are forced to run multiple +threads per CPU.

    • +
    +

    Moreover, when the best possible performance is desired, the server +application, and its programming framework, has no choice but to also +take the following into account:

    +
      +
    • Modern Machines: Modern machines are very +different from those of just 10 years ago. They have many cores and deep +memory hierarchies (from L1 caches to NUMA) which reward certain +programming practices and penalizes others: Unscalable programming +practices (such as taking locks) can devastate performance on many +cores; Shared memory and lock-free synchronization primitives are +available (i.e., atomic operations and memory-ordering fences) but are +dramatically slower than operations that involve only data in a single +core’s cache, and also prevent the application from scaling to many +cores.

    • +
    • Programming Language: High-level languages such +Java, Javascript, and similar “modern” languages are convenient, but +each comes with its own set of assumptions which conflict with the +requirements listed above. These languages, aiming to be portable, also +give the programmer less control over the performance of critical code. +For really optimal performance, we need a programming language which +gives the programmer full control, zero run-time overheads, and on the +other hand — sophisticated compile-time code generation and +optimization.

    • +
    +

    Seastar is a framework for writing asynchronous server applications +which aims to solve all four of the above challenges: It is a framework +for writing complex asynchronous applications involving both +network and disk I/O. The framework’s fast path is entirely +single-threaded (per core), scalable to many cores and minimizes the use +of costly sharing of memory between cores. It is a C++14 library, giving +the user sophisticated compile-time features and full control over +performance, without run-time overhead.

    +

    1.2 Seastar

    +

    Seastar is an event-driven framework allowing you to write +non-blocking, asynchronous code in a relatively straightforward manner +(once understood). Its APIs are based on futures. Seastar utilizes the +following concepts to achieve extreme performance:

    +
      +
    • Cooperative micro-task scheduler: instead of +running threads, each core runs a cooperative task scheduler. Each task +is typically very lightweight – only running for as long as it takes to +process the last I/O operation’s result and to submit a new one.
    • +
    • Share-nothing SMP architecture: each core runs +independently of other cores in an SMP system. Memory, data structures, +and CPU time are not shared; instead, inter-core communication uses +explicit message passing. A Seastar core is often termed a shard. TODO: +more here https://github.com/scylladb/seastar/wiki/SMP
    • +
    • Future based APIs: futures allow you to submit an +I/O operation and to chain tasks to be executed on completion of the I/O +operation. It is easy to run multiple I/O operations in parallel - for +example, in response to a request coming from a TCP connection, you can +issue multiple disk I/O requests, send messages to other cores on the +same system, or send requests to other nodes in the cluster, wait for +some or all of the results to complete, aggregate the results, and send +a response.
    • +
    • Share-nothing TCP stack: while Seastar can use the +host operating system’s TCP stack, it also provides its own +high-performance TCP/IP stack built on top of the task scheduler and the +share-nothing architecture. The stack provides zero-copy in both +directions: you can process data directly from the TCP stack’s buffers, +and send the contents of your own data structures as part of a message +without incurring a copy. Read more…
    • +
    • DMA-based storage APIs: as with the networking +stack, Seastar provides zero-copy storage APIs, allowing you to DMA your +data to and from your storage devices.
    • +
    +

    This tutorial is intended for developers already familiar with the +C++ language, and will cover how to use Seastar to create a new +application.

    +

    TODO: copy text from https://github.com/scylladb/seastar/wiki/SMP +https://github.com/scylladb/seastar/wiki/Networking

    + \ No newline at end of file diff --git a/master/split/10.html b/master/split/10.html new file mode 100644 index 000000000..a85eea46e --- /dev/null +++ b/master/split/10.html @@ -0,0 +1,189 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    10 Fibers

    +

    Seastar continuations are normally short, but often chained to one +another, so that one continuation does a bit of work and then schedules +another continuation for later. Such chains can be long, and often even +involve loopings - see the following section, “Loops”. We call such +chains “fibers” of execution.

    +

    These fibers are not threads - each is just a string of continuations +- but they share some common requirements with traditional threads. For +example, we want to avoid one fiber getting starved while a second fiber +continuously runs its continuations one after another. As another +example, fibers may want to communicate - e.g., one fiber produces data +that a second fiber consumes, and we wish to ensure that both fibers get +a chance to run, and that if one stops prematurely, the other doesn’t +hang forever.

    +

    TODO: Mention fiber-related sections like loops, semaphores, gates, +pipes, etc.

    + \ No newline at end of file diff --git a/master/split/11.html b/master/split/11.html new file mode 100644 index 000000000..94215758e --- /dev/null +++ b/master/split/11.html @@ -0,0 +1,304 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    11 Loops

    +

    A majority of time-consuming computations involve using loops. +Seastar provides several primitives for expressing them in a way that +composes nicely with the future/promise model. A very important aspect +of Seastar loop primitives is that each iteration is followed by a +preemption point, thus allowing other tasks to run in between +iterations.

    +

    11.1 repeat

    +

    A loop created with repeat executes its body until it +receives a stop_iteration object, which informs if the +iteration should continue (stop_iteration::no) or stop +(stop_iteration::yes). Next iteration will be launched only +after the first one has finished. The loop body passed to +repeat is expected to have a +future<stop_iteration> return type.

    +
    seastar::future<int> recompute_number(int number);
    +
    +seastar::future<> push_until_100(seastar::lw_shared_ptr<std::vector<int>> queue, int element) {
    +    return seastar::repeat([queue, element] {
    +        if (queue->size() == 100) {
    +            return make_ready_future<stop_iteration>(stop_iteration::yes);
    +        }
    +        return recompute_number(element).then([queue] (int new_element) {
    +            queue->push_back(new_element);
    +            return stop_iteration::no;
    +        });
    +    });
    +}
    +

    11.2 do_until

    +

    Do until is a close relative of repeat, but it uses an +explicitly passed condition to decide whether it should stop iterating. +The above example could be expressed with do_until as +follows:

    +
    seastar::future<int> recompute_number(int number);
    +
    +seastar::future<> push_until_100(seastar::lw_shared_ptr<std::vector<int>> queue, int element) {
    +    return seastar::do_until([queue] { return queue->size() == 100; }, [queue, element] {
    +        return recompute_number(element).then([queue] (int new_element) {
    +            queue->push_back(new_element);
    +        });
    +    });
    +}
    +

    Note that the loop body is expected to return a +future<>, which allows composing complex +continuations inside the loop.

    +

    11.3 do_for_each

    +

    A do_for_each is an equivalent of a for +loop in Seastar world. It accepts a range (or a pair of iterators) and a +function body, which it applies to each argument, in order, one by one. +The next iteration will be launched only after the first one has +finished, as was the case with repeat. As usual, +do_for_each expects its loop body to return a +future<>.

    +
    seastar::future<> append(seastar::lw_shared_ptr<std::vector<int>> queue1, seastar::lw_shared_ptr<std::vector<int>> queue2) {
    +    return seastar::do_for_each(queue2, [queue1] (int element) {
    +        queue1->push_back(element);
    +    });
    +}
    +
    +seastar::future<> append_iota(seastar::lw_shared_ptr<std::vector<int>> queue1, int n) {
    +    return seastar::do_for_each(boost::make_counting_iterator<size_t>(0), boost::make_counting_iterator<size_t>(n), [queue1] (int element) {
    +        queue1->push_back(element);
    +    });
    +}
    +

    do_for_each accepts either an lvalue reference to a +container or a pair of iterators. It implies that the responsibility to +ensure that the container is alive during the whole loop execution +belongs to the caller. If the container needs its lifetime prolonged, it +can be easily achieved with do_with:

    +
    seastar::future<> do_something(int number);
    +
    +seastar::future<> do_for_all(std::vector<int> numbers) {
    +    // Note that the "numbers" vector will be destroyed as soon as this function
    +    // returns, so we use do_with to guarantee it lives during the whole loop execution:
    +    return seastar::do_with(std::move(numbers), [] (std::vector<int>& numbers) {
    +        return seastar::do_for_each(numbers, [] (int number) {
    +            return do_something(number);
    +        });
    +    });
    +}
    +

    11.4 parallel_for_each

    +

    Parallel for each is a high concurrency variant of +do_for_each. When using parallel_for_each, all +iterations are queued simultaneously - which means that there’s no +guarantee in which order they finish their operations.

    +
    seastar::future<> flush_all_files(seastar::lw_shared_ptr<std::vector<seastar::file>> files) {
    +    return seastar::parallel_for_each(files, [] (seastar::file f) {
    +        // file::flush() returns a future<>
    +        return f.flush();
    +    });
    +}
    +

    parallel_for_each is a powerful tool, as it allows +spawning many tasks in parallel. It can be a great performance gain, but +there are also caveats. First of all, too high concurrency may be +troublesome - the details can be found in chapter Limiting +parallelism of loops.

    +

    To restrict the concurrency of parallel_for_each by an +integer number, use max_concurrent_for_each that is +described below. More details about dealing with parallelism can be +found in chapter Limiting parallelism of loops.

    +

    Secondly, take note that the order in which iterations will be +executed within a parallel_for_each loop is arbitrary - if +a strict ordering is needed, consider using do_for_each +instead.

    +

    TODO: map_reduce, as a shortcut (?) for parallel_for_each which needs +to produce some results (e.g., logical_or of boolean results), so we +don’t need to create a lw_shared_ptr explicitly (or do_with).

    +

    TODO: See seastar commit “input_stream: Fix possible infinite +recursion in consume()” for an example on why recursion is a possible, +but bad, replacement for repeat(). See also my comment on +https://groups.google.com/d/msg/seastar-dev/CUkLVBwva3Y/3DKGw-9aAQAJ on +why Seastar’s iteration primitives should be used over tail call +optimization.

    +

    11.5 max_concurrent_for_each

    +

    Max concurrent for each is a variant of +parallel_for_each with restricted parallelism. It accepts +an additional parameter - max_concurrent - with which, up +to max_concurrent iterations are queued simultaneously, +with no guarantee in which order they finish their operations.

    +
    seastar::future<> flush_all_files(seastar::lw_shared_ptr<std::vector<seastar::file>> files, size_t max_concurrent) {
    +    return seastar::max_concurrent_for_each(files, max_concurrent, [] (seastar::file f) {
    +        return f.flush();
    +    });
    +}
    +

    Determining the maximum concurrency limit is out of the scope of this +document. It should typically be derived from the actual capabilities of +the system the software is running on, like the number of parallel +execution units or I/O channels, so to optimize utilization of resources +without overwhelming the system.

    + \ No newline at end of file diff --git a/master/split/12.html b/master/split/12.html new file mode 100644 index 000000000..6255f5c54 --- /dev/null +++ b/master/split/12.html @@ -0,0 +1,308 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    12 when_all: Waiting for multiple +futures

    +

    Above we’ve seen parallel_for_each(), which starts a +number of asynchronous operations, and then waits for all to complete. +Seastar has another idiom, when_all(), for waiting for +several already-existing futures to complete.

    +

    The first variant of when_all() is variadic, i.e., the +futures are given as separate parameters, the exact number of which is +known at compile time. The individual futures may have different types. +For example,

    +
    #include <seastar/core/sleep.hh>
    +
    +future<> f() {
    +    using namespace std::chrono_literals;
    +    future<int> slow_two = sleep(2s).then([] { return 2; });
    +    return when_all(sleep(1s), std::move(slow_two),
    +                    make_ready_future<double>(3.5)
    +           ).discard_result();
    +}
    +

    This starts three futures - one which sleeps for one second (and +doesn’t return anything), one which sleeps for two seconds and returns +the integer 2, and one which returns the double 3.5 immediately - and +then waits for them. The when_all() function returns a +future which resolves as soon as all three futures resolves, i.e., after +two seconds. This future also has a value, which we shall explain below, +but in this example, we simply waited for the future to resolve and +discarded its value.

    +

    Note that when_all() accept only rvalues, which can be +temporaries (like the return value of an asynchronous function or +make_ready_future) or an std::move()’ed +variable holding a future.

    +

    The future returned by when_all() resolves to a tuple of +futures which are already resolved, and contain the results of the three +input futures. Continuing the above example,

    +
    future<> f() {
    +    using namespace std::chrono_literals;
    +    future<int> slow_two = sleep(2s).then([] { return 2; });
    +    return when_all(sleep(1s), std::move(slow_two),
    +                    make_ready_future<double>(3.5)
    +           ).then([] (auto tup) {
    +            std::cout << std::get<0>(tup).available() << "\n";
    +            std::cout << std::get<1>(tup).get() << "\n";
    +            std::cout << std::get<2>(tup).get() << "\n";
    +    });
    +}
    +

    The output of this program (which comes after two seconds) is +1, 2, 3.5: the first future in the tuple is available (but +has no value), the second has the integer value 2, and the third a +double value 3.5 - as expected.

    +

    One or more of the waited futures might resolve in an exception, but +this does not change how when_all() works: It still waits +for all the futures to resolve, each with either a value or an +exception, and in the returned tuple some of the futures may contain an +exception instead of a value. For example,

    +
    future<> f() {
    +    using namespace std::chrono_literals;
    +    future<> slow_success = sleep(1s);
    +    future<> slow_exception = sleep(2s).then([] { throw 1; });
    +    return when_all(std::move(slow_success), std::move(slow_exception)
    +           ).then([] (auto tup) {
    +            std::cout << std::get<0>(tup).available() << "\n";
    +            std::cout << std::get<1>(tup).failed() << "\n";
    +            std::get<1>(tup).ignore_ready_future();
    +    });
    +}
    +

    Both futures are available() (resolved), but the second +has failed() (resulted in an exception instead of a value). +Note how we called ignore_ready_future() on this failed +future, because silently ignoring a failed future is considered a bug, +and will result in an “Exceptional future ignored” error message. More +typically, an application will log the failed future instead of ignoring +it.

    +

    The above example demonstrate that when_all() is +inconvenient and verbose to use properly. The results are wrapped in a +tuple, leading to verbose tuple syntax, and uses ready futures which +must all be inspected individually for an exception to avoid error +messages.

    +

    So Seastar also provides an easier to use +when_all_succeed() function. This function too returns a +future which resolves when all the given futures have resolved. If all +of them succeeded, it passes a tuple of the resulting values to +continuation, without wrapping each of them in a future first. +Sometimes, it could be tedious to unpack the tuple for consuming the +resulting values. In that case, then_unpack() can be used +in place of then(). then_unpack() unpacks the +returned tuple and passes its elements to the following continuation as +its parameters. If, however, one or more of the futures failed, +when_all_succeed() resolves to a failed future, containing +the exception from one of the failed futures. If more than one of the +given future failed, one of those will be passed on (it is unspecified +which one is chosen), and the rest will be silently ignored. For +example,

    +
    using namespace seastar;
    +future<> f() {
    +    using namespace std::chrono_literals;
    +    return when_all_succeed(sleep(1s), make_ready_future<int>(2),
    +                    make_ready_future<double>(3.5)
    +            ).then_unpack([] (int i, double d) {
    +        std::cout << i << " " << d << "\n";
    +    });
    +}
    +

    Note how the integer and double values held by the futures are +conveniently passed, individually to the continuation. Since +sleep() does not contain a value, it is waited for, but no +third value is passed to the continuation. That also means that if we +when_all_succeed() on several future<> +(without a value), the result is a +future<tuple<>>:

    +
    using namespace seastar;
    +future<> f() {
    +    using namespace std::chrono_literals;
    +    return when_all_succeed(sleep(1s), sleep(2s), sleep(3s)).then_unpack([] {
    +        return make_ready_future<>();
    +    });
    +}
    +

    This example simply waits for 3 seconds (the maximum of 1, 2 and 3 +seconds).

    +

    An example of when_all_succeed() with an exception:

    +
    using namespace seastar;
    +future<> f() {
    +    using namespace std::chrono_literals;
    +    return when_all_succeed(make_ready_future<int>(2),
    +                    make_exception_future<double>("oops")
    +            ).then_unpack([] (int i, double d) {
    +        std::cout << i << " " << d << "\n";
    +    }).handle_exception([] (std::exception_ptr e) {
    +        std::cout << "exception: " << e << "\n";
    +    });
    +}
    +

    In this example, one of the futures fails, so the result of +when_all_succeed is a failed future, so the normal +continuation is not run, and the handle_exception() +continuation is done.

    +

    TODO: also explain when_all and +when_all_succeed for vectors.

    + \ No newline at end of file diff --git a/master/split/13.html b/master/split/13.html new file mode 100644 index 000000000..9a205287a --- /dev/null +++ b/master/split/13.html @@ -0,0 +1,485 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    13 Semaphores

    +

    Seastar’s semaphores are the standard computer-science semaphores, +adapted for futures. A semaphore is a counter into which you can deposit +units or take them away. Taking units from the counter may wait if not +enough units are available.

    +

    13.1 Limiting parallelism with +semaphores

    +

    The most common use for a semaphore in Seastar is for limiting +parallelism, i.e., limiting the number of instances of some code which +can run in parallel. This can be important when each of the parallel +invocations uses a limited resource (e.g., memory) so letting an +unlimited number of them run in parallel can exhaust this resource.

    +

    Consider a case where an external source of events (e.g., an incoming +network request) causes an asynchronous function g() to be +called. Imagine that we want to limit the number of concurrent +g() operations to 100. I.e., If g() is started when 100 +other invocations are still ongoing, we want it to delay its real work +until one of the other invocations has completed. We can do this with a +semaphore:

    +
    seastar::future<> g() {
    +    static thread_local seastar::semaphore limit(100);
    +    return limit.wait(1).then([] {
    +        return slow(); // do the real work of g()
    +    }).finally([] {
    +        limit.signal(1);
    +    });
    +}
    +

    In this example, the semaphore starts with the counter at 100. The +asynchronous operation slow() is only started when we can +reduce the counter by one (wait(1)), and when +slow() is done, either successfully or with exception, the +counter is increased back by one (signal(1)). This way, +when 100 operations have already started their work and have not yet +finished, the 101st operation will wait, until one of the ongoing +operations finishes and returns a unit to the semaphore. This ensures +that at each time we have at most 100 concurrent slow() +operations running in the above code.

    +

    Note how we used a static thread_local semaphore, so +that all calls to g() from the same shard count towards the +same limit; As usual, a Seastar application is sharded so this limit is +separate per shard (CPU thread). This is usually fine, because sharded +applications consider resources to be separate per shard.

    +

    Luckily, the above code happens to be exception safe: +limit.wait(1) can throw an exception when it runs out of +memory (keeping a list of waiters), and in that case the semaphore +counter is not decreased but the continuations below are not run so it +is not increased either. limit.wait(1) can also return an +exceptional future when the semaphore is broken (we’ll discuss +this later) but in that case the extra signal() call is +ignored. Finally, slow() may also throw, or return an +exceptional future, but the finally() ensures the semaphore +is still increased.

    +

    However, as the application code becomes more complex, it becomes +harder to ensure that we never forget to call signal() +after the operation is done, regardless of which code path or exceptions +happen. As an example of what might go wrong, consider the following +buggy code snippet, which differs subtly from the above one, +and also appears, on first sight, to be correct:

    +
    seastar::future<> g() {
    +    static thread_local seastar::semaphore limit(100);
    +    return limit.wait(1).then([] {
    +        return slow().finally([] { limit.signal(1); });
    +    });
    +}
    +

    But this version is not exception safe: Consider +what happens if slow() throws an exception before returning +a future (this is different from slow() returning an +exceptional future - we discussed this difference in the section about +exception handling). In this case, we decreased the counter, but the +finally() will never be reached, and the counter will never +be increased back. There is a way to fix this code, by replacing the +call to slow() with +seastar::futurize_invoke(slow). But the point we’re trying +to make here is not how to fix buggy code, but rather that by using the +separate semaphore::wait() and +semaphore::signal() functions, you can very easily get +things wrong.

    +

    For exception safety, in C++ it is generally not recommended to have +separate resource acquisition and release functions. Instead, C++ offers +safer mechanisms for acquiring a resource (in this case semaphore units) +and later releasing it: lambda functions, and RAII (“resource +acquisition is initialization”):

    +

    The lambda-based solution is a function +seastar::with_semaphore() which is a shortcut for the code +in the examples above:

    +
    seastar::future<> g() {
    +    static thread_local seastar::semaphore limit(100);
    +    return seastar::with_semaphore(limit, 1, [] {
    +        return slow(); // do the real work of g()
    +    });
    +}
    +

    with_semaphore(), like the earlier code snippets, waits +for the given number of units from the semaphore, then runs the given +lambda, and when the future returned by the lambda is resolved, +with_semaphore() returns back the units to the semaphore. +with_semaphore() returns a future which only resolves after +all these steps are done.

    +

    The function seastar::get_units() is more general. It +provides an exception-safe alternative to +seastar::semaphore’s separate wait() and +signal() methods, based on C++’s RAII philosophy: The +function returns an opaque units object, which while held, keeps the +semaphore’s counter decreased - and as soon as this object is +destructed, the counter is increased back. With this interface you +cannot forget to increase the counter, or increase it twice, or increase +without decreasing: The counter will always be decreased once when the +units object is created, and if that succeeded, increased when the +object is destructed. When the units object is moved into a +continuation, no matter how this continuation ends, when the +continuation is destructed, the units object is destructed and the units +are returned to the semaphore’s counter. The above examples, written +with get_units(), looks like this:

    +
    seastar::future<> g() {
    +    static thread_local semaphore limit(100);
    +    return seastar::get_units(limit, 1).then([] (auto units) {
    +        return slow().finally([units = std::move(units)] {});
    +    });
    +}
    +

    Note the somewhat convoluted way that get_units() needs +to be used: The continuations must be nested because we need the +units object to be moved to the last continuation. If +slow() returns a future (and does not throw immediately), +the finally() continuation captures the units +object until everything is done, but does not run any code.

    +

    Seastar’s programmers should generally avoid using the the +semaphore::wait() and semaphore::signal() +functions directly, and always prefer either +with_semaphore() (when applicable) or +get_units().

    +

    13.2 Limiting resource use

    +

    Because semaphores support waiting for any number of units, not just +1, we can use them for more than simple limiting of the number +of parallel invocation. For example, consider we have an asynchronous +function using_lots_of_memory(size_t bytes), which uses +bytes bytes of memory, and we want to ensure that not more +than 1 MB of memory is used by all parallel invocations of this function +— and that additional calls are delayed until previous calls have +finished. We can do this with a semaphore:

    +
    seastar::future<> using_lots_of_memory(size_t bytes) {
    +    static thread_local seastar::semaphore limit(1000000); // limit to 1MB
    +    return seastar::with_semaphore(limit, bytes, [bytes] {
    +        // do something allocating 'bytes' bytes of memory
    +    });
    +}
    +

    Watch out that in the above example, a call to +using_lots_of_memory(2000000) will return a future that +never resolves, because the semaphore will never contain enough units to +satisfy the semaphore wait. using_lots_of_memory() should +probably check whether bytes is above the limit, and throw +an exception in that case. Seastar doesn’t do this for you.

    +

    13.3 Limiting parallelism of +loops

    +

    Above, we looked at a function g() which gets called by +some external event, and wanted to control its parallelism. In this +section, we look at parallelism of loops, which also can be controlled +with semaphores.

    +

    Consider the following simple loop:

    +
    #include <seastar/core/sleep.hh>
    +seastar::future<> slow() {
    +    std::cerr << ".";
    +    return seastar::sleep(std::chrono::seconds(1));
    +}
    +seastar::future<> f() {
    +    return seastar::repeat([] {
    +        return slow().then([] { return seastar::stop_iteration::no; });
    +    });
    +}
    +

    This loop runs the slow() function (taking one second to +complete) without any parallelism — the next slow() call +starts only when the previous one completed. But what if we do not need +to serialize the calls to slow(), and want to allow +multiple instances of it to be ongoing concurrently?

    +

    Naively, we could achieve more parallelism, by starting the next call +to slow() right after the previous call — ignoring the +future returned by the previous call to slow() and not +waiting for it to resolve:

    +
    seastar::future<> f() {
    +    return seastar::repeat([] {
    +        slow();
    +        return seastar::stop_iteration::no;
    +    });
    +}
    +

    But in this loop, there is no limit to the amount of parallelism — +millions of sleep() calls might be active in parallel, +before the first one ever returned. Eventually, this loop may consume +all available memory and crash.

    +

    Using a semaphore allows us to run many instances of +slow() in parallel, but limit the number of these parallel +instances to, in the following example, 100:

    +
    seastar::future<> f() {
    +    return seastar::do_with(seastar::semaphore(100), [] (auto& limit) {
    +        return seastar::repeat([&limit] {
    +            return limit.wait(1).then([&limit] {
    +                seastar::futurize_invoke(slow).finally([&limit] {
    +                    limit.signal(1);
    +                });
    +                return seastar::stop_iteration::no;
    +            });
    +        });
    +    });
    +}
    +

    Note how this code differs from the code we saw above for limiting +the number of parallel invocations of a function g():

    +
      +
    1. Here we cannot use a single thread_local semaphore. +Each call to f() has its loop with parallelism of 100, so +needs its own semaphore “limit”, kept alive during the loop +with do_with().
    2. +
    3. Here we do not wait for slow() to complete before +continuing the loop, i.e., we do not return the future +chain starting at futurize_invoke(slow). The loop continues +to the next iteration when a semaphore unit becomes available, while (in +our example) 99 other operations might be ongoing in the background and +we do not wait for them.
    4. +
    +

    In the examples in this section, we cannot use the +with_semaphore() shortcut. with_semaphore() +returns a future which only resolves after the lambda’s returned future +resolves. But in the above example, the loop needs to know when just the +semaphore units are available, to start the next iteration — and not +wait for the previous iteration to complete. We could not achieve that +with with_semaphore(). But the more general exception-safe +idiom, seastar::get_units(), can be used in this case, and +is recommended:

    +
    seastar::future<> f() {
    +    return seastar::do_with(seastar::semaphore(100), [] (auto& limit) {
    +        return seastar::repeat([&limit] {
    +            return seastar::get_units(limit, 1).then([] (auto units) {
    +                slow().finally([units = std::move(units)] {});
    +                return seastar::stop_iteration::no;
    +            });
    +        });
    +    });
    +}
    +

    The above examples are not realistic, because they have a +never-ending loop and the future returned by f() will never +resolve. In more realistic cases, the loop has an end, and at the end of +the loop we need to wait for all the background operations which the +loop started. We can do this by wait()ing on the original +count of the semaphore: When the full count is finally available, it +means that all the operations have completed. For example, the +following loop ends after 456 iterations:

    +
    seastar::future<> f() {
    +    return seastar::do_with(seastar::semaphore(100), [] (auto& limit) {
    +        return seastar::do_for_each(boost::counting_iterator<int>(0),
    +                boost::counting_iterator<int>(456), [&limit] (int i) {
    +            return seastar::get_units(limit, 1).then([] (auto units) {
    +                slow().finally([units = std::move(units)] {});
    +            });
    +        }).finally([&limit] {
    +            return limit.wait(100);
    +        });
    +    });
    +}
    +

    The last finally is what ensures that we wait for the +last operations to complete: After the repeat loop ends +(whether successfully or prematurely because of an exception in one of +the iterations), we do a wait(100) to wait for the +semaphore to reach its original value 100, meaning that all operations +that we started have completed. Without this finally, the +future returned by f() will resolve before all the +iterations of the loop actually completed (the last 100 may still be +running).

    +

    In the idiom we saw in the above example, the same semaphore is used +both for limiting the number of background operations, and later to wait +for all of them to complete. Sometimes, we want several different loops +to use the same semaphore to limit their total parallelism. In +that case we must use a separate mechanism for waiting for the +completion of the background operations started by the loop. The most +convenient way to wait for ongoing operations is using a gate, which we +will describe in detail later. A typical example of a loop whose +parallelism is limited by an external semaphore:

    +
    thread_local seastar::semaphore limit(100);
    +seastar::future<> f() {
    +    return seastar::do_with(seastar::gate(), [] (auto& gate) {
    +        return seastar::do_for_each(boost::counting_iterator<int>(0),
    +                boost::counting_iterator<int>(456), [&gate] (int i) {
    +            return seastar::get_units(limit, 1).then([&gate] (auto units) {
    +                gate.enter();
    +                seastar::futurize_invoke(slow).finally([&gate, units = std::move(units)] {
    +                    gate.leave();
    +                });
    +            });
    +        }).finally([&gate] {
    +            return gate.close();
    +        });
    +    });
    +}
    +

    In this code, we use the external semaphore limit to +limit the number of concurrent operations, but additionally have a gate +specific to this loop to help us wait for all ongoing operations to +complete.

    +

    TODO: also allow get_units() or something similar on a +gate, and use that instead of the explicit gate.enter/gate.leave.

    +

    TODO: say something about semaphore fairness - if someone is waiting +for a lot of units and later someone asks for 1 unit, will both wait or +will the request for 1 unit be satisfied?

    +

    TODO: say something about broken semaphores? (or in later section +especially about breaking/closing/shutting down/etc?)

    +

    TODO: Have a few paragraphs, or even a section, on additional uses of +semaphores. One is for mutual exclusion using semaphore(1) - we need to +explain why although why in Seastar we don’t have multiple threads +touching the same data, if code is composed of different continuations +(i.e., a fiber) it can switch to a different fiber in the middle, so if +data needs to be protected between two continuations, it needs a mutex. +Another example is something akin to wait_all: we start with a +semaphore(0), run a known number N of asynchronous functions with +finally sem.signal(), and from all this return the future sem.wait(N). +PERHAPS even have a separate section on mutual exclusion, where we begin +with semaphore(1) but also mention shared_mutex

    + \ No newline at end of file diff --git a/master/split/14.html b/master/split/14.html new file mode 100644 index 000000000..16e6caab3 --- /dev/null +++ b/master/split/14.html @@ -0,0 +1,199 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    14 Pipes

    +

    Seastar’s pipe<T> is a mechanism to transfer data +between two fibers, one producing data, and the other consuming it. It +has a fixed-size buffer to ensures a balanced execution of the two +fibers, because the producer fiber blocks when it writes to a full pipe, +until the consumer fiber gets to run and read from the pipe.

    +

    A pipe<T> resembles a Unix pipe, in that it has a +read side, a write side, and a fixed-sized buffer between them, and +supports either end to be closed independently (and EOF or broken pipe +when using the other side). A pipe<T> object holds +the reader and write sides of the pipe as two separate objects. These +objects can be moved into two different fibers. Importantly, if one of +the pipe ends is destroyed (i.e., the continuations capturing it end), +the other end of the pipe will stop blocking, so the other fiber will +not hang.

    +

    The pipe’s read and write interfaces are future-based blocking. I.e., +the write() and read() methods return a future which is fulfilled when +the operation is complete. The pipe is single-reader single-writer, +meaning that until the future returned by read() is fulfilled, read() +must not be called again (and same for write). Note: The pipe reader and +writer are movable, but not copyable. It is often convenient to +wrap each end in a shared pointer, so it can be copied (e.g., used in an +std::function which needs to be copyable) or easily captured into +multiple continuations.

    + \ No newline at end of file diff --git a/master/split/15.html b/master/split/15.html new file mode 100644 index 000000000..a9a6c25ec --- /dev/null +++ b/master/split/15.html @@ -0,0 +1,291 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    15 Shutting down a service with a +gate

    +

    Consider an application which has some long operation +slow(), and many such operations may be started at any +time. A number of slow() operations may even even be active +in parallel. Now, you want to shut down this service, but want to make +sure that before that, all outstanding operations are completed. +Moreover, you don’t want to allow new slow() operations to +start while the shut-down is in progress.

    +

    This is the purpose of a seastar::gate. A gate +g maintains an internal counter of operations in progress. +We call g.enter() when entering an operation (i.e., before +running slow()), and call g.leave() when +leaving the operation (when a call to slow() completed). +The method g.close() closes the gate, which means +it forbids any further calls to g.enter() (such attempts +will generate an exception); Moreover g.close() returns a +future which resolves when all the existing operations have completed. +In other words, when g.close() resolves, we know that no +more invocations of slow() can be in progress - because the +ones that already started have completed, and new ones could not have +started.

    +

    The construct

    +
    seastar::with_gate(g, [] { return slow(); })
    +

    can be used as a shortcut to the idiom

    +
    g.enter();
    +slow().finally([&g] { g.leave(); });
    +

    Here is a typical example of using a gate:

    +
    #include <seastar/core/sleep.hh>
    +#include <seastar/core/gate.hh>
    +#include <boost/iterator/counting_iterator.hpp>
    +
    +seastar::future<> slow(int i) {
    +    std::cerr << "starting " << i << "\n";
    +    return seastar::sleep(std::chrono::seconds(10)).then([i] {
    +        std::cerr << "done " << i << "\n";
    +    });
    +}
    +seastar::future<> f() {
    +    return seastar::do_with(seastar::gate(), [] (auto& g) {
    +        return seastar::do_for_each(boost::counting_iterator<int>(1),
    +                boost::counting_iterator<int>(6),
    +                [&g] (int i) {
    +            seastar::with_gate(g, [i] { return slow(i); });
    +            // wait one second before starting the next iteration
    +            return seastar::sleep(std::chrono::seconds(1));
    +        }).then([&g] {
    +            seastar::sleep(std::chrono::seconds(1)).then([&g] {
    +                // This will fail, because it will be after the close()
    +                seastar::with_gate(g, [] { return slow(6); });
    +            });
    +            return g.close();
    +        });
    +    });
    +}
    +

    In this example, we have a function +future<> slow() taking 10 seconds to complete. We run +it in a loop 5 times, waiting 1 second between calls, and surround each +call with entering and leaving the gate (using with_gate). +After the 5th call, while all calls are still ongoing (because each +takes 10 seconds to complete), we close the gate and wait for it before +exiting the program. We also test that new calls cannot begin after +closing the gate, by trying to enter the gate again one second after +closing it.

    +

    The output of this program looks like this:

    +
    starting 1
    +starting 2
    +starting 3
    +starting 4
    +starting 5
    +WARNING: exceptional future ignored of type 'seastar::gate_closed_exception': gate closed
    +done 1
    +done 2
    +done 3
    +done 4
    +done 5
    +

    Here, the invocations of slow() were started at 1 second +intervals. After the “starting 5” message, we closed the +gate and another attempt to use it resulted in a +seastar::gate_closed_exception, which we ignored and hence +this message. At this point the application waits for the future +returned by g.close(). This will happen once all the +slow() invocations have completed: Immediately after +printing “done 5”, the test program stops.

    +

    As explained so far, a gate can prevent new invocations of an +operation, and wait for any in-progress operations to complete. However, +these in-progress operations may take a very long time to complete. +Often, a long operation would like to know that a shut-down has been +requested, so it could stop its work prematurely. An operation can check +whether its gate was closed by calling the gate’s check() +method: If the gate is already closed, the check() method +throws an exception (the same +seastar::gate_closed_exception that enter() +would throw at that point). The intent is that the exception will cause +the operation calling it to stop at this point.

    +

    In the previous example code, we had an un-interruptible operation +slow() which slept for 10 seconds. Let’s replace it by a +loop of 10 one-second sleeps, calling g.check() each +second:

    +
    seastar::future<> slow(int i, seastar::gate &g) {
    +    std::cerr << "starting " << i << "\n";
    +    return seastar::do_for_each(boost::counting_iterator<int>(0),
    +                                boost::counting_iterator<int>(10),
    +            [&g] (int) {
    +        g.check();
    +        return seastar::sleep(std::chrono::seconds(1));
    +    }).finally([i] {
    +        std::cerr << "done " << i << "\n";
    +    });
    +}
    +

    Now, just one second after gate is closed (after the “starting 5” +message is printed), all the slow() operations notice the +gate was closed, and stop. As expected, the exception stops the +do_for_each() loop, and the finally() +continuation is performed so we see the “done” messages for all five +operations.

    + \ No newline at end of file diff --git a/master/split/16.html b/master/split/16.html new file mode 100644 index 000000000..9dc09f5f4 --- /dev/null +++ b/master/split/16.html @@ -0,0 +1,186 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    16 Introducing shared-nothing +programming

    +

    TODO: Explain in more detail Seastar’s shared-nothing approach where +the entire memory is divided up-front to cores, malloc/free and pointers +only work on one core.

    +

    TODO: Introduce our shared_ptr (and lw_shared_ptr) and sstring and +say the standard ones use locked instructions which are unnecessary when +we assume these objects (like all others) are for a single thread. Our +futures and continuations do the same.

    + \ No newline at end of file diff --git a/master/split/17.html b/master/split/17.html new file mode 100644 index 000000000..0a198c6fd --- /dev/null +++ b/master/split/17.html @@ -0,0 +1,187 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    17 More about Seastar’s event +loop

    +

    TODO: Mention the event loop (scheduler). remind that continuations +on the same thread do not run in parallel, so do not need locks, atomic +variables, etc (different threads shouldn’t access the same data - more +on that below). continuations obviously must not use blocking +operations, or they block the whole thread.

    +

    TODO: Talk about polling that we currently do, and how today even +sleep() or waiting for incoming connections or whatever, takes 100% of +all CPUs.

    + \ No newline at end of file diff --git a/master/split/18.html b/master/split/18.html new file mode 100644 index 000000000..0b0f904b6 --- /dev/null +++ b/master/split/18.html @@ -0,0 +1,431 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    18 Introducing Seastar’s network +stack

    +

    TODO: Mention the two modes of operation: Posix and native (i.e., +take a L2 (Ethernet) interface (vhost or dpdk) and on top of it we built +(in Seastar itself) an L3 interface (TCP/IP)).

    +

    For optimal performance, Seastar’s network stack is sharded just like +Seastar applications are: each shard (thread) takes responsibility for a +different subset of the connections. Each incoming connection is +directed to one of the threads, and after a connection is established, +it continues to be handled on the same thread.

    +

    In the examples we saw earlier, main() ran our function +f() only once, on the first thread. Unless the server is +run with the "-c1" option (one thread only), this will mean +that any connection arriving to a different thread will not be handled. +So in all the examples below, we will need to run the same service loop +on all cores. We can easily do this with the smp::submit_to +function:

    +
    seastar::future<> service_loop();
    +
    +seastar::future<> f() {
    +    return seastar::parallel_for_each(boost::irange<unsigned>(0, seastar::smp::count),
    +            [] (unsigned c) {
    +        return seastar::smp::submit_to(c, service_loop);
    +    });
    +}
    +

    Here we ask each of Seastar cores (from 0 to +smp::count-1) to run the same function +service_loop(). Each of these invocations returns a future, +and f() will return when all of them have returned (in the +examples below, they will never return - we will discuss shutting down +services in later sections).

    +

    We begin with a simple example of a TCP network server written in +Seastar. This server repeatedly accepts connections on TCP port 1234, +and returns an empty response:

    +
    #include <seastar/core/seastar.hh>
    +#include <seastar/core/reactor.hh>
    +#include <seastar/core/future-util.hh>
    +#include <seastar/net/api.hh>
    +
    +seastar::future<> service_loop() {
    +    return seastar::do_with(seastar::listen(seastar::make_ipv4_address({1234})),
    +            [] (auto& listener) {
    +        return seastar::keep_doing([&listener] () {
    +            return listener.accept().then(
    +                [] (seastar::accept_result res) {
    +                    std::cout << "Accepted connection from " << res.remote_address << "\n";
    +            });
    +        });
    +    });
    +}
    +

    This code works as follows:

    +
      +
    1. The listen() call creates a server_socket +object, listener, which listens on TCP port 1234 (on any +network interface).
    2. +
    3. We use do_with() to ensure that the listener socket +lives throughout the loop.
    4. +
    5. To handle one connection, we call listener’s +accept() method. This method returns a +future<accept_result>, i.e., is eventually resolved +with an incoming TCP connection from a client +(accept_result.connection) and the client’s IP address and +port (accept_result.remote_address).
    6. +
    7. To repeatedly accept new connections, we use the +keep_doing() loop idiom. keep_doing() runs its +lambda parameter over and over, starting the next iteration as soon as +the future returned by the previous iteration completes. The iterations +only stop if an exception is encountered. The future returned by +keep_doing() itself completes only when the iteration stops +(i.e., only on exception).
    8. +
    +

    Output from this server looks like the following example:

    +
    $ ./a.out
    +Accepted connection from 127.0.0.1:47578
    +Accepted connection from 127.0.0.1:47582
    +...
    +

    If you run the above example server immediately after killing the +previous server, it often fails to start again, complaining that:

    +
    $ ./a.out
    +program failed with uncaught exception: bind: Address already in use
    +

    This happens because by default, Seastar refuses to reuse the local +port if there are any vestiges of old connections using that port. In +our silly server, because the server is the side which first closes the +connection, each connection lingers for a while in the +“TIME_WAIT” state after being closed, and these prevent +listen() on the same port from succeeding. Luckily, we can +give listen an option to work despite these remaining +TIME_WAIT. This option is analogous to +socket(7)’s SO_REUSEADDR option:

    +
        seastar::listen_options lo;
    +    lo.reuse_address = true;
    +    return seastar::do_with(seastar::listen(seastar::make_ipv4_address({1234}), lo),
    +

    Most servers will always turn on this reuse_address +listen option. Stevens’ book “Unix Network Programming” even says that +“All TCP servers should specify this socket option to allow the server +to be restarted”. Therefore in the future Seastar should probably +default to this option being on — even if for historic reasons this is +not the default in Linux’s socket API.

    +

    Let’s advance our example server by outputting some canned response +to each connection, instead of closing each connection immediately with +an empty reply.

    +
    #include <seastar/core/seastar.hh>
    +#include <seastar/core/reactor.hh>
    +#include <seastar/core/future-util.hh>
    +#include <seastar/net/api.hh>
    +
    +const char* canned_response = "Seastar is the future!\n";
    +
    +seastar::future<> service_loop() {
    +    seastar::listen_options lo;
    +    lo.reuse_address = true;
    +    return seastar::do_with(seastar::listen(seastar::make_ipv4_address({1234}), lo),
    +            [] (auto& listener) {
    +        return seastar::keep_doing([&listener] () {
    +            return listener.accept().then(
    +                    [] (seastar::accept_result res) {
    +                auto s = std::move(res.connection);
    +                auto out = s.output();
    +                return seastar::do_with(std::move(s), std::move(out),
    +                        [] (auto& s, auto& out) {
    +                    return out.write(canned_response).then([&out] {
    +                        return out.close();
    +                    });
    +                });
    +            });
    +        });
    +    });
    +}
    +

    The new part of this code begins by taking the +connected_socket’s output(), which returns an +output_stream<char> object. On this output stream +out we can write our response using the +write() method. The simple-looking write() +operation is in fact a complex asynchronous operation behind the scenes, +possibly causing multiple packets to be sent, retransmitted, etc., as +needed. write() returns a future saying when it is ok to +write() again to this output stream; This does not +necessarily guarantee that the remote peer received all the data we sent +it, but it guarantees that the output stream has enough buffer space (or +in the TCP case, there is enough room in the TCP congestion window) to +allow another write to begin.

    +

    After write()ing the response to out, the +example code calls out.close() and waits for the future it +returns. This is necessary, because write() attempts to +batch writes so might not have yet written anything to the TCP stack at +this point, and only when close() concludes can we be sure that all the +data we wrote to the output stream has actually reached the TCP stack — +and only at this point we may finally dispose of the out +and s objects.

    +

    Indeed, this server returns the expected response:

    +
    $ telnet localhost 1234
    +...
    +Seastar is the future!
    +Connection closed by foreign host.
    +

    In the above example we only saw writing to the socket. Real servers +will also want to read from the socket. The +connected_socket’s input() method returns an +input_stream<char> object which can be used to read +from the socket. The simplest way to read from this stream is using the +read() method which returns a future +temporary_buffer<char>, containing some more bytes +read from the socket — or an empty buffer when the remote end shut down +the connection.

    +

    temporary_buffer<char> is a convenient and safe +way to pass around byte buffers that are only needed temporarily (e.g., +while processing a request). As soon as this object goes out of scope +(by normal return, or exception), the memory it holds gets automatically +freed. Ownership of buffer can also be transferred by +std::move()ing it. We’ll discuss +temporary_buffer in more details in a later section.

    +

    Let’s look at a simple example server involving both reads an writes. +This is a simple echo server, as described in RFC 862: The server +listens for connections from the client, and once a connection is +established, any data received is simply sent back - until the client +closes the connection.

    +
    #include <seastar/core/seastar.hh>
    +#include <seastar/core/reactor.hh>
    +#include <seastar/core/future-util.hh>
    +#include <seastar/net/api.hh>
    +
    +seastar::future<> handle_connection(seastar::connected_socket s) {
    +    auto out = s.output();
    +    auto in = s.input();
    +    return do_with(std::move(s), std::move(out), std::move(in),
    +            [] (auto& s, auto& out, auto& in) {
    +        return seastar::repeat([&out, &in] {
    +            return in.read().then([&out] (auto buf) {
    +                if (buf) {
    +                    return out.write(std::move(buf)).then([&out] {
    +                        return out.flush();
    +                    }).then([] {
    +                        return seastar::stop_iteration::no;
    +                    });
    +                } else {
    +                    return seastar::make_ready_future<seastar::stop_iteration>(
    +                            seastar::stop_iteration::yes);
    +                }
    +            });
    +        }).then([&out] {
    +            return out.close();
    +        });
    +    });
    +}
    +
    +seastar::future<> service_loop_3() {
    +    seastar::listen_options lo;
    +    lo.reuse_address = true;
    +    return seastar::do_with(seastar::listen(seastar::make_ipv4_address({1234}), lo),
    +            [] (auto& listener) {
    +        return seastar::keep_doing([&listener] () {
    +            return listener.accept().then(
    +                    [] (seastar::accept_result res) {
    +                // Note we ignore, not return, the future returned by
    +                // handle_connection(), so we do not wait for one
    +                // connection to be handled before accepting the next one.
    +                (void)handle_connection(std::move(res.connection)).handle_exception(
    +                        [] (std::exception_ptr ep) {
    +                    fmt::print(stderr, "Could not handle connection: {}\n", ep);
    +                });
    +            });
    +        });
    +    });
    +}
    +

    The main function service_loop() loops accepting new +connections, and for each connection calls +handle_connection() to handle this connection. Our +handle_connection() returns a future saying when handling +this connection completed, but importantly, we do +not wait for this future: Remember that +keep_doing will only start the next iteration when the +future returned by the previous iteration is resolved. Because we want +to allow parallel ongoing connections, we don’t want the next +accept() to wait until the previously accepted connection +was closed. So we call handle_connection() to start the +handling of the connection, but return nothing from the continuation, +which resolves that future immediately, so keep_doing will +continue to the next accept().

    +

    This demonstrates how easy it is to run parallel fibers +(chains of continuations) in Seastar - When a continuation runs an +asynchronous function but ignores the future it returns, the +asynchronous operation continues in parallel, but never waited for.

    +

    It is often a mistake to silently ignore an exception, so if the +future we’re ignoring might resolve with an except, it is recommended to +handle this case, e.g. using a handle_exception() +continuation. In our case, a failed connection is fine (e.g., the client +might close its connection will we’re sending it output), so we did not +bother to handle the exception.

    +

    The handle_connection() function itself is +straightforward — it repeatedly calls read() read on the +input stream, to receive a temporary_buffer with some data, +and then moves this temporary buffer into a write() call on +the output stream. The buffer will eventually be freed, automatically, +when the write() is done with it. When read() +eventually returns an empty buffer signifying the end of input, we stop +repeat’s iteration by returning a +stop_iteration::yes.

    + \ No newline at end of file diff --git a/master/split/19.html b/master/split/19.html new file mode 100644 index 000000000..5578cc5ab --- /dev/null +++ b/master/split/19.html @@ -0,0 +1,256 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    19 Sharded services

    +

    In the previous section we saw that a Seastar application usually +needs to run its code on all available CPU cores. We saw that the +seastar::smp::submit_to() function allows the main +function, which initially runs only on the first core, to start the +server’s code on all seastar::smp::count cores.

    +

    However, usually one needs not just to run code on each core, but +also to have an object that contains the state of this code. +Additionally, one may like to interact with those different objects, and +also have a mechanism to stop the service running on the different +cores.

    +

    The seastar::sharded<T> template provides a +structured way create such a sharded service. It creates a +separate object of type T in each core, and provides +mechanisms to interact with those copies, to start some code on each, +and finally to cleanly stop the service.

    +

    To use seastar::sharded, first create a class for the +object holding the state of the service on a single core. For +example:

    +
    #include <seastar/core/future.hh>
    +#include <iostream>
    +
    +class my_service {
    +public:
    +    std::string _str;
    +    my_service(const std::string& str) : _str(str) { }
    +    seastar::future<> run() {
    +        std::cerr << "running on " << seastar::engine().cpu_id() <<
    +            ", _str = " << _str << "\n";
    +        return seastar::make_ready_future<>();
    +    }
    +    seastar::future<> stop() {
    +        return seastar::make_ready_future<>();
    +    }
    +};
    +

    The only mandatory method in this object is stop(), +which will be called in each core when we want to stop the sharded +service and want to wait until it stops on all cores.

    +

    Now let’s see how to use it:

    +
    #include <seastar/core/sharded.hh>
    +
    +seastar::sharded<my_service> s;
    +
    +seastar::future<> f() {
    +    return s.start(std::string("hello")).then([] {
    +        return s.invoke_on_all([] (my_service& local_service) {
    +            return local_service.run();
    +        });
    +    }).then([] {
    +        return s.stop();
    +    });
    +}
    +

    The s.start() starts the service by creating a +my_service object on each of the cores. The arguments to +s.start(), if any (in this example, +std::string("hello")), are passed to +my_service’s constructor.

    +

    But s.start() did not start running any code yet +(besides the object’s constructor). For that, we have the +s.invoke_on_all() which runs the given lambda on all the +cores - giving each lambda the local my_service object on +that core. In this example, we have a run() method on each +object, so we run that.

    +

    Finally, at the end of the run we want to give the service on all +cores a chance to shut down cleanly, so we call s.stop(). +This will call the stop() method on each core’s object, and +wait for all of them to finish. Calling s.stop() before +destroying s is mandatory - Seastar will warn you if you +forget to do it.

    +

    In addition to invoke_on_all() which runs the same code +on all shards, another feature a sharded service often needs is for one +shard to invoke code another specific shard. This is done by calling the +sharded service’s invoke_on() method. For example:

    +
    seastar::sharded<my_service> s;
    +...
    +return s.invoke_on(0, [] (my_service& local_service) {
    +    std::cerr << "invoked on " << seastar::engine().cpu_id() <<
    +        ", _str = " << local_service._str << "\n";
    +});
    +

    This runs the lambda function on shard 0, with a reference to the +local my_service object on that shard.

    + \ No newline at end of file diff --git a/master/split/2.html b/master/split/2.html new file mode 100644 index 000000000..e92fa7003 --- /dev/null +++ b/master/split/2.html @@ -0,0 +1,253 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    2 Getting started

    +

    The simplest Seastar program is this:

    +
    #include <seastar/core/app-template.hh>
    +#include <seastar/core/reactor.hh>
    +#include <iostream>
    +
    +int main(int argc, char** argv) {
    +    seastar::app_template app;
    +    app.run(argc, argv, [] {
    +            std::cout << "Hello world\n";
    +            return seastar::make_ready_future<>();
    +    });
    +}
    +

    As we do in this example, each Seastar program must define and run, +an app_template object. This object starts the main event +loop (the Seastar engine) on one or more CPUs, and then runs +the given function - in this case an unnamed function, a lambda +- once.

    +

    The return make_ready_future<>(); causes the event +loop, and the whole application, to exit immediately after printing the +“Hello World” message. In a more typical Seastar application, we will +want event loop to remain alive and process incoming packets (for +example), until explicitly exited. Such applications will return a +future which determines when to exit the application. We will +introduce futures and how to use them below. In any case, the regular C +exit() should not be used, because it prevents Seastar or +the application from cleaning up appropriately.

    +

    As shown in this example, all Seastar functions and types live in the +“seastar” namespace. An user can either type this namespace +prefix every time, or use shortcuts like +“using seastar::app_template” or even +“using namespace seastar” to avoid typing this prefix. We +generally recommend to use the namespace prefixes seastar +and std explicitly, and will follow this style in all the +examples below.

    +

    To compile this program (it’s present in the +demos/hello-world.cc file) you can just use Docker.

    +
    $ docker build -t seastar-dev  -f ./docker/dev/Dockerfile .
    +$ scripts/build.sh dev
    +$ docker run -it --rm -v $(pwd):/seastar seastar-dev /seastar/build/dev/demos/hello-world_demo -c1
    +

    Without the docker help, first make sure you have downloaded, built, +and optionally installed Seastar, and put the above program in a source +file anywhere you want, let’s call the file +getting-started.cc.

    +

    Linux’s pkg-config +is one way for easily determining the compilation and linking parameters +needed for using various libraries - such as Seastar. For example, if +Seastar was built in the directory $SEASTAR but not +installed, one can compile getting-started.cc with it using +the command:

    +
    c++ getting-started.cc `pkg-config --cflags --libs --static $SEASTAR/build/release/seastar.pc`
    +

    The “--static” is needed because currently, Seastar is +built as a static library, so we need to tell pkg-config to +include its dependencies in the link command (whereas, had Seastar been +a shared library, it could have pulled in its own dependencies).

    +

    If Seastar was installed, the pkg-config +command line is even shorter:

    +
    c++ getting-started.cc `pkg-config --cflags --libs --static seastar`
    +

    Alternatively, one can easily build a Seastar program with CMake. +Given the following CMakeLists.txt

    +
    cmake_minimum_required (VERSION 3.5)
    +
    +project (SeastarExample)
    +
    +find_package (Seastar REQUIRED)
    +
    +add_executable (example
    +  getting-started.cc)
    +
    +target_link_libraries (example
    +  PRIVATE Seastar::seastar)
    +

    you can compile the example with the following commands:

    +
    $ mkdir build
    +$ cd build
    +$ cmake ..
    +$ make
    +

    The program now runs as expected:

    +
    $ ./example
    +Hello world
    +$
    + \ No newline at end of file diff --git a/master/split/20.html b/master/split/20.html new file mode 100644 index 000000000..079708559 --- /dev/null +++ b/master/split/20.html @@ -0,0 +1,176 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    20 Shutting down cleanly

    +

    TODO: Handling interrupt, shutting down services, etc.

    +

    Move the seastar::gate section here.

    + \ No newline at end of file diff --git a/master/split/21.html b/master/split/21.html new file mode 100644 index 000000000..038a3d378 --- /dev/null +++ b/master/split/21.html @@ -0,0 +1,260 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    21 Command line options

    +

    21.1 Standard Seastar command-line +options

    +

    All Seastar applications accept a standard set of command-line +arguments, such as those we’ve already seen above: The -c +option for controlling the number of threads used, or -m +for determining the amount of memory given to the application.

    +

    TODO: list and explain more of these options.

    +

    Every Seastar application also accepts the -h (or +--help) option, which lists and explains all the available +options — the standard Seastar ones, and the user-defined ones as +explained below.

    +

    21.2 User-defined command-line +options

    +

    Seastar parses the command line options (argv[]) when it +is passed to app_template::run(), looking for its own +standard options. Therefore, it is not recommended that the application +tries to parse argv[] on its own because the application +might not understand some of the standard Seastar options and not be +able to correctly skip them.

    +

    Rather, applications which want to have command-line options of their +own should tell Seastar’s command line parser of these additional +application-specific options, and ask Seastar’s command line parser to +recognize them too. Seastar’s command line parser is actually the Boost +library’s boost::program_options. An application adds its +own option by using the add_options() and +add_positional_options() methods on the +app_template to define options, and later calling +configuration() to retrieve the setting of these options. +For example,

    +
    #include <iostream>
    +#include <seastar/core/app-template.hh>
    +#include <seastar/core/reactor.hh>
    +int main(int argc, char** argv) {
    +    seastar::app_template app;
    +    namespace bpo = boost::program_options;
    +    app.add_options()
    +        ("flag", "some optional flag")
    +        ("size,s", bpo::value<int>()->default_value(100), "size")
    +        ;
    +    app.add_positional_options({
    +       { "filename", bpo::value<std::vector<seastar::sstring>>()->default_value({}),
    +         "sstable files to verify", -1}
    +    });
    +    app.run(argc, argv, [&app] {
    +        auto& args = app.configuration();
    +        if (args.count("flag")) {
    +            std::cout << "Flag is on\n";
    +        }
    +        std::cout << "Size is " << args["size"].as<int>() << "\n";
    +        auto& filenames = args["filename"].as<std::vector<seastar::sstring>>();
    +        for (auto&& fn : filenames) {
    +            std::cout << fn << "\n";
    +        }
    +        return seastar::make_ready_future<>();
    +    });
    +    return 0;
    +}
    +

    In this example, we add via add_options() two +application-specific options: --flag is an optional +parameter which doesn’t take any additional arguments, and +--size (or -s) takes an integer value, which +defaults (if this option is missing) to 100. Additionally, we ask via +add_positional_options() that an unlimited number of +arguments that do not begin with a “-” — the so-called +positional arguments — be collected to a vector of strings +under the “filename” option. Some example outputs from this program:

    +
    $ ./a.out
    +Size is 100
    +$ ./a.out --flag
    +Flag is on
    +Size is 100
    +$ ./a.out --flag -s 3
    +Flag is on
    +Size is 3
    +$ ./a.out --size 3 hello hi
    +Size is 3
    +hello
    +hi
    +$ ./a.out --filename hello --size 3 hi
    +Size is 3
    +hello
    +hi
    +

    boost::program_options has more powerful features, such +as required options, option checking and combining, various option +types, and more. Please refer to Boost’s documentation for more +information.

    + \ No newline at end of file diff --git a/master/split/22.html b/master/split/22.html new file mode 100644 index 000000000..e9c6b244b --- /dev/null +++ b/master/split/22.html @@ -0,0 +1,390 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    22 Debugging a Seastar program

    +

    22.1 Debugging ignored +exceptions

    +

    If a future resolves with an exception, and the application neglects +to handle that exception or to explicitly ignore it, the application may +have missed an important problem. This is likely to be an application +bug.

    +

    Therefore, Seastar prints a warning message to the log if a future is +destroyed when it stores an exception that hasn’t been handled.

    +

    For example, consider this code:

    +
    #include <seastar/core/future.hh>
    +#include <seastar/core/sleep.hh>
    +#include <seastar/core/app-template.hh>
    +
    +class myexception {};
    +
    +seastar::future<> g() {
    +    return seastar::make_exception_future<>(myexception());
    +}
    +
    +seastar::future<> f() {
    +    g();
    +    return seastar::sleep(std::chrono::seconds(1));
    +}
    +
    +int main(int argc, char** argv) {
    +    seastar::app_template app;
    +    app.run(argc, argv, f);
    +}
    +

    Here, the main function f() calls g(), but +doesn’t do anything with the future it returns. But this future resolves +with an exception, and this exception is silently ignored. So Seastar +prints this warning message about the ignored exception:

    +
    WARN  2020-03-31 11:08:09,208 [shard 0] seastar - Exceptional future ignored: myexception, backtrace:   /lib64/libasan.so.5+0x6ce7f
    +  0x1a64193
    +  0x1a6265f
    +  0xf326cc
    +  0xeaf1a0
    +  0xeaffe4
    +  0xead7be
    +  0xeb5917
    +  0xee2477
    +  0xec312e
    +  0xec8fcf
    +  0xeec765
    +  0xee1b29
    +  0xed9fab
    +  0xec27c8
    +  0xec867f
    +  0xf00acc
    +  0xef179d
    +  0xef1824
    +  0xef18b5
    +  0xee4827
    +  0xee470f
    +  0xf00f81
    +  0xebac29
    +  0xeb9095
    +  0xeb9174
    +  0xeb925a
    +  0xeb9964
    +  0xebef89
    +  0x10f74c3
    +  0x10fb439
    +  0x11005fd
    +  0xec4f08
    +  0xec2f43
    +  0xec3461
    +  0xeadabe
    +  /lib64/libc.so.6+0x271a2
    +  0xead52d
    +

    This message says that an exceptional future was ignored, and that +the type of the exception was “myexception”. The type of +the exception is usually not enough to pinpoint where the problem +happened, so the warning message also includes the backtrace - the call +chain - leading to where the exceptional future was destroyed. The +backtrace is given as a list of addresses, where code in other shared +libraries is written as a shared library plus offset (when ASLR is +enabled, the shared libraries are mapped in a different address each +time).

    +

    Seastar includes a utility, seastar-addr2line, for +translating these addresses into readable backtraces including exact +method names, source files and line numbers. This utility needs the +unstripped executable. Typically, a stripped executable is used +for production, but an unstripped copy is kept separately to be used in +debugging - including seastar-addr2line.

    +

    To decode the backtrace, we run

    +
    seastar-addr2line -e a.out
    +

    And then paste the list of addresses in the warning message, and +conclude with a control-D (it’s also possible, if you want, +to put the list of addresses in the seastar-addr2line +command line). The result looks like this:

    +
    void seastar::backtrace<seastar::current_backtrace()::{lambda(seastar::frame)#1}>(seastar::current_backtrace()::{lambda(seastar::frame)#1}&&) at include/seastar/util/backtrace.hh:56
    +seastar::current_backtrace() at src/util/backtrace.cc:84
    +seastar::report_failed_future(std::__exception_ptr::exception_ptr const&) at src/core/future.cc:116
    +seastar::future_state_base::~future_state_base() at include/seastar/core/future.hh:335
    +seastar::future_state<>::~future_state() at include/seastar/core/future.hh:414
    + (inlined by) seastar::future<>::~future() at include/seastar/core/future.hh:990
    +f() at test.cc:12
    +std::_Function_handler<seastar::future<> (), seastar::future<> (*)()>::_M_invoke(std::_Any_data const&) at /usr/include/c++/9/bits/std_function.h:286
    +std::function<seastar::future<> ()>::operator()() const at /usr/include/c++/9/bits/std_function.h:690
    +seastar::app_template::run(int, char**, std::function<seastar::future<> ()>&&)::{lambda()#1}::operator()() const at src/core/app-template.cc:131
    +std::_Function_handler<seastar::future<int> (), seastar::app_template::run(int, char**, std::function<seastar::future<> ()>&&)::{lambda()#1}>::_M_invoke(std::_Any_data const&) at /usr/include/c++/9/bits/std_function.h:286
    +std::function<seastar::future<int> ()>::operator()() const at /usr/include/c++/9/bits/std_function.h:690
    +seastar::future<int> seastar::futurize<seastar::future<int> >::invoke<std::function<seastar::future<int> ()>&>(std::function<seastar::future<int> ()>&) at include/seastar/core/future.hh:1670
    +auto seastar::futurize_invoke<std::function<seastar::future<int> ()>&>(std::function<seastar::future<int> ()>&) at include/seastar/core/future.hh:1754
    +seastar::app_template::run(int, char**, std::function<seastar::future<int> ()>&&)::{lambda()#1}::operator()() at src/core/app-template.cc:120 (discriminator 4)
    +std::_Function_handler<void (), seastar::app_template::run(int, char**, std::function<seastar::future<int> ()>&&)::{lambda()#1}>::_M_invoke(std::_Any_data const&) at /usr/include/c++/9/bits/std_function.h:300
    +std::function<void ()>::operator()() const at /usr/include/c++/9/bits/std_function.h:690
    +seastar::apply_helper<std::function<void ()>&, std::tuple<>&&, std::integer_sequence<unsigned long> >::apply(std::function<void ()>&, std::tuple<>&&) at include/seastar/core/apply.hh:36
    +auto seastar::apply<std::function<void ()>&>(std::function<void ()>&, std::tuple<>&&) at include/seastar/core/apply.hh:44
    +seastar::future<> seastar::futurize<void>::apply<std::function<void ()>&>(std::function<void ()>&, std::tuple<>&&) at include/seastar/core/future.hh:1634
    +auto seastar::futurize_apply<std::function<void ()>&>(std::function<void ()>&, std::tuple<>&&) at include/seastar/core/future.hh:1766
    +seastar::future<>::then<std::function<void ()>, seastar::future<> >(std::function<void ()>&&)::{lambda()#1}::operator()() at include/seastar/core/future.hh:1191
    +seastar::noncopyable_function<seastar::future<> ()>::direct_vtable_for<seastar::future<>::then<std::function<void ()>, seastar::future<> >(std::function<void ()>&&)::{lambda()#1}>::call(seastar::noncopyable_function<seastar::future<> ()> const*) at include/seastar/util/noncopyable_function.hh:101
    +seastar::noncopyable_function<seastar::future<> ()>::operator()() const at include/seastar/util/noncopyable_function.hh:184
    +seastar::apply_helper<seastar::noncopyable_function<seastar::future<> ()>, std::tuple<>&&, std::integer_sequence<unsigned long> >::apply(seastar::noncopyable_function<seastar::future<> ()>&&, std::tuple<>&&) at include/seastar/core/apply.hh:36
    +auto seastar::apply<seastar::noncopyable_function<seastar::future<> ()>>(seastar::noncopyable_function<seastar::future<> ()>&&, std::tuple<>&&) at include/seastar/core/apply.hh:44
    +seastar::future<> seastar::futurize<seastar::future<> >::apply<seastar::noncopyable_function<seastar::future<> ()>>(seastar::noncopyable_function<seastar::future<> ()>&&, std::tuple<>&&) at include/seastar/core/future.hh:1660
    +seastar::future<>::then_impl_nrvo<seastar::noncopyable_function<seastar::future<> ()>, seastar::future<> >(seastar::noncopyable_function<seastar::future<> ()>&&)::{lambda()#1}::operator()() const::{lambda(seastar::internal::promise_base_with_type<>&, seastar::future_state<>&&)#1}::operator()(seastar::internal::promise_base_with_type<>, seastar::future_state<>) at include/seastar/core/future.hh:1213
    +seastar::continuation<seastar::internal::promise_base_with_type<>, seastar::future<>::then_impl_nrvo<seastar::noncopyable_function<seastar::future<> ()>, seastar::future<> >(seastar::noncopyable_function<seastar::future<> ()>&&)::{lambda()#1}::operator()() const::{lambda(seastar::internal::promise_base_with_type<>&, seastar::future_state<>&&)#1}>::run_and_dispose() at include/seastar/core/future.hh:509
    +seastar::reactor::run_tasks(seastar::reactor::task_queue&) at src/core/reactor.cc:2124
    +seastar::reactor::run_some_tasks() at src/core/reactor.cc:2539 (discriminator 2)
    +seastar::reactor::run() at src/core/reactor.cc:2694
    +seastar::app_template::run_deprecated(int, char**, std::function<void ()>&&) at src/core/app-template.cc:199 (discriminator 1)
    +seastar::app_template::run(int, char**, std::function<seastar::future<int> ()>&&) at src/core/app-template.cc:115 (discriminator 2)
    +seastar::app_template::run(int, char**, std::function<seastar::future<> ()>&&) at src/core/app-template.cc:130 (discriminator 2)
    +main at test.cc:19 (discriminator 1)
    +__libc_start_main at /usr/src/debug/glibc-2.30-34-g994e529a37/csu/../csu/libc-start.c:308
    +_start at ??:?
    +

    Most of the lines at the bottom of this backtrace are not +interesting, and just showing the internal details of how Seastar ended +up running the main function f(). The only interesting part +is the first few lines:

    +
    seastar::report_failed_future(std::__exception_ptr::exception_ptr const&) at src/core/future.cc:116
    +seastar::future_state_base::~future_state_base() at include/seastar/core/future.hh:335
    +seastar::future_state<>::~future_state() at include/seastar/core/future.hh:414
    + (inlined by) seastar::future<>::~future() at include/seastar/core/future.hh:990
    +f() at test.cc:12
    +

    Here we see that the warning message was printed by the +seastar::report_failed_future() function which was called +when destroying a future (future<>::~future) that had +not been handled. The future’s destructor was called in line 11 of our +test code (26.cc), which is indeed the line where we called +g() and ignored its result. This backtrace gives us an +accurate understanding of where our code destroyed an exceptional future +without handling it first, which is usually helpful in solving these +kinds of bugs. Note that this technique does not tell us where the +exception was first created, nor what code passed around the exceptional +future before it was destroyed - we just learn where the future was +destroyed. To learn where the exception was originally thrown, see the +next section:

    +

    22.2 Finding where an exception was +thrown

    +

    Sometimes an application logs an exception, and we want to know where +in the code the exception was originally thrown. Unlike languages like +Java, C++ does not have a builtin method of attaching a backtrace to +every exception. So Seastar provides functions which allow adding to an +exception the backtrace recorded when throwing it.

    +

    For example, in the following code we throw and catch an +std::runtime_error normally:

    +
    #include <seastar/core/future.hh>
    +#include <seastar/util/log.hh>
    +#include <exception>
    +#include <iostream>
    +
    +seastar::future<> g() {
    +    return seastar::make_exception_future<>(std::runtime_error("hello"));
    +}
    +
    +seastar::future<> f() {
    +    return g().handle_exception([](std::exception_ptr e) {
    +        std::cerr << "Exception: " << e << "\n";
    +    });
    +}
    +

    The output is

    +
    Exception: std::runtime_error (hello)
    +

    From this output, we have no way of knowing that the exception was +thrown in g(). We can solve this if we use +make_exception_future_with_backtrace instead of +make_exception_future:

    +
    #include <util/backtrace.hh>
    +seastar::future<> g() {
    +    return seastar::make_exception_future_with_backtrace<>(std::runtime_error("hello"));
    +}
    +

    Now the output looks like

    +
    Exception: seastar::internal::backtraced<std::runtime_error> (hello Backtrace:   0x678bd3
    +  0x677204
    +  0x67736b
    +  0x678cd5
    +  0x4f923c
    +  0x4f9c38
    +  0x4ff4d0
    +...
    +)
    +

    Which, as above, can be converted to a human-readable backtrace by +using the seastar-addr2line script.

    +

    In addition to +seastar::make_exception_future_with_backtrace(), Seastar +also provides a function throw_with_backtrace(), to throw +an exception instead of returning an exceptional future. For +example:

    +
        seastar::throw_with_backtrace<std::runtime_error>("hello");
    +

    In the current implementation, both +make_exception_future_with_backtrace and +throw_with_backtrace require that the original exception +type (in the above example, std::runtime_error) is a +subclass of the std::exception class. The original +exception provides a what() string, and the wrapped +exception adds the backtrace to this string, as demonstrated above. +Moreover, the wrapped exception type is a subclass of the +original exception type, which allows catch(...) code to +continue filtering by the exception original type - despite the addition +of the backtrace.

    +

    22.3 Debugging with gdb

    +
    handle SIGUSR1 pass noprint
    +handle SIGALRM pass noprint
    + \ No newline at end of file diff --git a/master/split/23.html b/master/split/23.html new file mode 100644 index 000000000..fbc620134 --- /dev/null +++ b/master/split/23.html @@ -0,0 +1,224 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    23 Promise objects

    +

    As we already defined above, An asynchronous +function, also called a promise, is a function +which returns a future and arranges for this future to be eventually +resolved. As we already saw, an asynchronous function is usually written +in terms of other asynchronous functions, for example we saw the +function slow() which waits for the existing asynchronous +function sleep() to complete, and then returns 3:

    +
    seastar::future<int> slow() {
    +    using namespace std::chrono_literals;
    +    return seastar::sleep(100ms).then([] { return 3; });
    +}
    +

    The most basic building block for writing promises is the +promise object, an object of type +promise<T>. A promise<T> has a +method future<T> get_future() to returns a future, +and a method set_value(T), to resolve this future. An +asynchronous function can create a promise object, return its future, +and the set_value method to be eventually called - which +will finally resolve the future it returned.

    +

    In the following example we create a promise that manages the process +of printing 10 messages, once every second. We start by creating an +empty promise to work with. We then spin up a +seastart::thread to perform the work we want. When the +work, printing those messages, is completed we call +promise::set_value to mark the completion of the task. +Other than that we wait for the future which is generated by our +promise, just like any other future.

    +
    #include <seastar/core/future.hh>
    +#include <seastar/core/do_with.hh>
    +#include <seastar/core/sleep.hh>
    +#include <seastar/core/thread.hh>
    +#include <iostream>
    +
    +
    +seastar::future<> f() {
    +    return seastar::do_with(seastar::promise<>(), [](auto& promise) {
    +        (void)seastar::async([&promise]() {
    +                using namespace std::chrono_literals;
    +                for (int i = 0; i < 10; i++) {
    +                    std::cout << i << "..." << std::flush;
    +                    seastar::sleep(1s).wait();
    +                }
    +                std::cout << std::endl;
    +
    +                promise.set_value();
    +        });
    +
    +        return promise.get_future();
    +    });
    +}
    + \ No newline at end of file diff --git a/master/split/24.html b/master/split/24.html new file mode 100644 index 000000000..1394118e3 --- /dev/null +++ b/master/split/24.html @@ -0,0 +1,273 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    24 Memory allocation in +Seastar

    +

    24.1 Per-thread memory +allocation

    +

    Seastar requires that applications be sharded, i.e., that code +running on different threads operate on different objects in memory. We +already saw in Seastar memory how Seastar +takes over a given amount of memory (often, most of the machine’s +memory) and divides it equally between the different threads. Modern +multi-socket machines have non-uniform memory access (NUMA), meaning +that some parts of memory are closer to some of the cores, and Seastar +takes this knowledge into account when dividing the memory between +threads. Currently, the division of memory between threads is static, +and equal - the threads are expected to experience roughly equal amount +of load and require roughly equal amounts of memory.

    +

    To achieve this per-thread allocation, Seastar redefines the C +library functions malloc(), free(), and their +numerous relatives — calloc(), realloc(), +posix_memalign(), memalign(), +malloc_usable_size(), and malloc_trim(). It +also redefines the C++ memory allocation functions, +operator new, operator delete, and all their +variants (including array versions, the C++14 delete taking a size, and +the C++17 variants taking required alignment).

    +

    It is important to remember that Seastar’s different threads +can see memory allocated by other threads, but they are +nonetheless strongly discouraged from actually doing this. Sharing data +objects between threads on modern multi-core machines results in stiff +performance penalties from locks, memory barriers, and cache-line +bouncing. Rather, Seastar encourages applications to avoid sharing +objects between threads when possible (by sharding — each +thread owns a subset of the objects), and when threads do need to +interact they do so with explicit message passing, with +submit_to(), as we shall see later.

    +

    24.2 Foreign pointers

    +

    An object allocated on one thread will be owned by this thread, and +eventually should be freed by the same thread. Freeing memory on the +wrong thread is strongly discouraged, but is currently +supported (albeit slowly) to support library code beyond Seastar’s +control. For example, std::exception_ptr allocates memory; +So if we invoke an asynchronous operation on a remote thread and this +operation returns an exception, when we free the returned +std::exception_ptr this will happen on the “wrong” core. So +Seastar allows it, but inefficiently.

    +

    In most cases objects should spend their entire life on a single +thread and be used only by this thread. But in some cases we want to +reassign ownership of an object which started its life on one thread, to +a different thread. This can be done using a +seastar::foreign_ptr<>. A pointer, or smart pointer, +to an object is wrapped in a seastar::foreign_ptr<P>. +This wrapper can then be moved into code running in a different thread +(e.g., using submit_to()).

    +

    The most common use-case is a +seastar::foreign_ptr<std::unique_ptr<T>>. The +thread receiving this foreign_ptr will get exclusive use of +the object, and when it destroys this wrapper, it will go back to the +original thread to destroy the object. Note that the object is not only +freed on the original shard - it is also destroyed (i.e., its +destructor is run) there. This is often important when the object’s +destructor needs to access other state which belongs to the original +shard - e.g., unlink itself from a container.

    +

    Although foreign_ptr ensures that the object’s +destructor automatically runs on the object’s home thread, it +does not absolve the user from worrying where to run the object’s other +methods. Some simple methods, e.g., methods which just read from the +object’s fields, can be run on the receiving thread. However, other +methods may need to access other data owned by the object’s home shard, +or need to prevent concurrent operations. Even if we’re sure that object +is now used exclusively by the receiving thread, such methods must still +be run, explicitly, on the home thread:

    +
        // fp is some foreign_ptr<>
    +    return smp::submit_to(fp.get_owner_shard(), [p=fp.get()]
    +        { return p->some_method(); });
    +

    So seastar::foreign_ptr<> not only has functional +benefits (namely, to run the destructor on the home shard), it also has +documentational benefits - it warns the programmer to watch out +every time the object is used, that this is a foreign pointer, +and if we want to do anything non-trivial with the pointed object, we +may need to do it on the home shard.

    +

    Above, we discussed the case of transferring ownership of an object +to a another shard, via +seastar::foreign_ptr<std::unique_ptr<T>>. +However, sometimes the sender does not want to relinquish ownership of +the object. Sometimes, it wants the remote thread to operate on its +object and return with the object intact. Sometimes, it wants to send +the same object to multiple shards. In such cases, +seastar::foreign_ptr<seastar::lw_shared_ptr<T>> +is useful. The user needs to watch out, of course, not to operate on the +same object from multiple threads concurrently. If this cannot be +ensured by program logic alone, some methods of serialization must be +used - such as running the operations on the home shard with +submit_to() as described above.

    +

    Normally, a seastar::foreign_ptr cannot not be copied - +only moved. However, when it holds a smart pointer that can be copied +(namely, a shared_ptr), one may want to make an additional +copy of that pointer and create a second foreign_ptr. Doing +this is inefficient and asynchronous (it requires communicating with the +original owner of the object to create the copies), so a method +future<foreign_ptr> copy() needs to be explicitly +used instead of the normal copy constructor.

    + \ No newline at end of file diff --git a/master/split/25.html b/master/split/25.html new file mode 100644 index 000000000..ce35db784 --- /dev/null +++ b/master/split/25.html @@ -0,0 +1,312 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    25 Seastar::thread

    +

    Seastar’s programming model, using futures and continuations, is very +powerful and efficient. However, as we’ve already seen in examples +above, it is also relatively verbose: Every time that we need to wait +before proceeding with a computation, we need to write another +continuation. We also need to worry about passing the data between the +different continuations (using techniques like those described in the Lifetime management section). Simple +flow-control constructs such as loops also become more involved using +continuations. For example, consider this simple classical synchronous +code:

    +
        std::cout << "Hi.\n";
    +    for (int i = 1; i < 4; i++) {
    +        sleep(1);
    +        std::cout << i << "\n";
    +    }
    +

    In Seastar, using futures and continuations, we need to write +something like this:

    +
        std::cout << "Hi.\n";
    +    return seastar::do_for_each(boost::counting_iterator<int>(1),
    +        boost::counting_iterator<int>(4), [] (int i) {
    +        return seastar::sleep(std::chrono::seconds(1)).then([i] {
    +            std::cout << i << "\n";
    +        });
    +    });
    +

    But Seastar also allows, via seastar::thread, to write +code which looks more like synchronous code. A +seastar::thread provides an execution environment where +blocking is tolerated; You can issue an asynchronous function, and wait +for it in the same function, rather then establishing a callback to be +called with future<>::then():

    +
        seastar::thread th([] {
    +        std::cout << "Hi.\n";
    +        for (int i = 1; i < 4; i++) {
    +            seastar::sleep(std::chrono::seconds(1)).get();
    +            std::cout << i << "\n";
    +        }
    +    });
    +

    A seastar::thread is not a separate +operating system thread. It still uses continuations, which are +scheduled on Seastar’s single thread (per core). It works as +follows:

    +

    The seastar::thread allocates a 128KB stack, and runs +the given function until the it blocks on the call to a +future’s get() method. Outside a +seastar::thread context, get() may only be +called on a future which is already available. But inside a thread, +calling get() on a future which is not yet available stops +running the thread function, and schedules a continuation for this +future, which continues to run the thread’s function (on the same saved +stack) when the future becomes available.

    +

    Just like normal Seastar continuations, seastar::threads +always run on the same core they were launched on. They are also +cooperative: they are never preempted except when +seastar::future::get() blocks or on explicit calls to +seastar::thread::yield().

    +

    It is worth reiterating that a seastar::thread is not a +POSIX thread, and it can only block on Seastar futures, not on blocking +system calls. The above example used seastar::sleep(), not +the sleep() system call. The seastar::thread’s +function can throw and catch exceptions normally. Remember that +get() will throw an exception if the future resolves with +an exception.

    +

    In addition to seastar::future::get(), we also have +seastar::future::wait() to wait without fetching +the future’s result. This can sometimes be useful when you want to avoid +throwing an exception when the future failed (as get() +does). For example:

    +
        future<char> getchar();
    +    int try_getchar() noexcept { // run this in seastar::thread context
    +        future fut = get_char();
    +        fut.wait();
    +        if (fut.failed()) {
    +            return -1;
    +        } else {
    +            // Here we already know that get() will return immediately,
    +            // and will not throw.
    +            return fut.get();
    +        }
    +    }
    +

    25.1 Starting and ending a +seastar::thread

    +

    After we created a seastar::thread object, we need wait +until it ends, using its join() method. We also need to +keep that object alive until join() completes. A complete +example using seastar::thread will therefore look like +this:

    +
    #include <seastar/core/sleep.hh>
    +#include <seastar/core/thread.hh>
    +seastar::future<> f() {
    +    seastar::thread th([] {
    +        std::cout << "Hi.\n";
    +        for (int i = 1; i < 4; i++) {
    +            seastar::sleep(std::chrono::seconds(1)).get();
    +            std::cout << i << "\n";
    +        }
    +    });
    +    return do_with(std::move(th), [] (auto& th) {
    +        return th.join();
    +    });
    +}
    +

    The seastar::async() function provides a convenient +shortcut for creating a seastar::thread and returning a +future which resolves when the thread completes:

    +
    #include <seastar/core/sleep.hh>
    +#include <seastar/core/thread.hh>
    +seastar::future<> f() {
    +    return seastar::async([] {
    +        std::cout << "Hi.\n";
    +        for (int i = 1; i < 4; i++) {
    +            seastar::sleep(std::chrono::seconds(1)).get();
    +            std::cout << i << "\n";
    +        }
    +    });
    +}
    +

    seastar::async()’s lambda may return a value, and +seastar::async() returns it when it completes. For +example:

    +
    seastar::future<seastar::sstring> read_file(sstring file_name) {
    +    return seastar::async([file_name] () {  // lambda executed in a thread
    +        file f = seastar::open_file_dma(file_name).get();  // get() call "blocks"
    +        auto buf = f.dma_read(0, 512).get();  // "block" again
    +        return seastar::sstring(buf.get(), buf.size());
    +    });
    +};
    +

    While seastar::threads and seastar::async() +make programming more convenient, they also add overhead beyond that of +programming directly with continuations. Most notably, each +seastar::thread requires additional memory for its stack. +It is therefore not a good idea to use a seastar::thread to +handle a highly concurrent operation. For example, if you need to handle +10,000 concurrent requests, do not use a seastar::thread to +handle each — use futures and continuations. But if you are writing code +where you know that only a few instances will ever run concurrently, +e.g., a background cleanup operation in your application, +seastar::thread is a good match. +seastar::thread is also great for code which doesn’t care +about performance — such as test code.

    + \ No newline at end of file diff --git a/master/split/26.html b/master/split/26.html new file mode 100644 index 000000000..6ff3144ee --- /dev/null +++ b/master/split/26.html @@ -0,0 +1,348 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    26 Isolation of application +components

    +

    Seastar makes multi-tasking very easy - as easy as running an +asynchronous function. It is therefore easy for a server to do many +unrelated things in parallel. For example, a server might be in the +process of answering 100 users’ requests, and at the same time also be +making progress on some long background operation.

    +

    But in the above example, what percentage of the CPU and disk +throughput will the background operation get? How long can one of the +user’s requests be delayed by the background operation? Without the +mechanisms we describe in this section, these questions cannot be +reliably answered:

    +
      +
    • The background operation may be a very “considerate” single fiber, +i.e., run a very short continuation and then schedule the next +continuation to run later. At each point the scheduler sees 100 +request-handling continuations and just one of the background +continuations ready to run. The background task gets around 1% of the +CPU time, and users’ requests are hardly delayed.
    • +
    • On the other hand, the background operation may spawn 1,000 fibers +in parallel and have 1,000 ready-to-run continuations at each time. The +background operation will get about 90% of the runtime, and the +continuation handling a user’s request may get stuck behind 1,000 of +these background continuations, and experience huge latency.
    • +
    +

    Complex Seastar applications often have different components which +run in parallel and have different performance objectives. In the above +example we saw two components - user requests and the background +operation. The first goal of the mechanisms we describe in this section +is to isolate the performance of each component from the +others; In other words, the throughput and latency of one component +should not depend on decisions that another component makes - e.g., how +many continuations it runs in parallel. The second goal is to allow the +application to control this isolation, e.g., in the above +example allow the application to explicitly control the amount of CPU +the background operation receives, so that it completes at a desired +pace.

    +

    In the above examples we used CPU time as the limited resource that +the different components need to share effectively. As we show later, +another important shared resource is disk I/O.

    +

    26.1 Scheduling groups (CPU +scheduler)

    +

    Consider the following asynchronous function loop(), +which loops until some shared variable stop becomes true. +It keeps a counter of the number of iterations until +stopping, and returns this counter when finally stopping.

    +
    seastar::future<long> loop(int parallelism, bool& stop) {
    +    return seastar::do_with(0L, [parallelism, &stop] (long& counter) {
    +        return seastar::parallel_for_each(boost::irange<unsigned>(0, parallelism),
    +            [&stop, &counter]  (unsigned c) {
    +                return seastar::do_until([&stop] { return stop; }, [&counter] {
    +                    ++counter;
    +                    return seastar::make_ready_future<>();
    +                });
    +            }).then([&counter] { return counter; });
    +    });
    +}
    +

    The parallelism parameter determines the parallelism of +the silly counting operation: parallelism=1 means we have +just one loop incrementing the counter; parallelism=10 +means we start 10 loops in parallel all incrementing the same +counter.

    +

    What happens if we start two loop() calls in parallel +and let them run for 10 seconds?

    +
    seastar::future<> f() {
    +    return seastar::do_with(false, [] (bool& stop) {
    +        seastar::sleep(std::chrono::seconds(10)).then([&stop] {
    +            stop = true;
    +        });
    +        return seastar::when_all_succeed(loop(1, stop), loop(1, stop)).then_unpack(
    +            [] (long n1, long n2) {
    +                std::cout << "Counters: " << n1 << ", " << n2 << "\n";
    +            });
    +    });
    +}
    +

    It turns out that if the two loop() calls had the same +parallelism 1, we get roughly the same amount of work from +both of them:

    +
    Counters: 3'559'635'758, 3'254'521'376
    +

    But if for example we ran a loop(1) in parallel with a +loop(10), the result is that the loop(10) gets +10 times more work done:

    +
    Counters: 629'482'397, 6'320'167'297
    +

    Why does the amount of work that loop(1) can do in ten seconds +depends on the parallelism chosen by its competitor, and how can we +solve this?

    +

    The reason this happens is as follows: When a future resolves and a +continuation was linked to it, this continuation becomes ready to run. +By default, Seastar’s scheduler keeps a single list of ready-to-run +continuations (in each shard, of course), and runs the continuations at +the same order they became ready to run. In the above example, +loop(1) always has one ready-to-run continuation, but +loop(10), which runs 10 loops in parallel, always has ten +ready-to-run continuations. So for every continuation of +loop(1), Seastar’s default scheduler will run 10 +continuations of loop(10), which is why loop(10) gets 10 +times more work done.

    +

    To solve this, Seastar allows an application to define separate +components known as scheduling groups, which each has a +separate list of ready-to-run continuations. Each scheduling group gets +to run its own continuations on a desired percentage of the CPU time, +but the number of runnable continuations in one scheduling group does +not affect the amount of CPU that another scheduling group gets. Let’s +look at how this is done:

    +

    A scheduling group is defined by a value of type +scheduling_group. This value is opaque, but internally it +is a small integer (similar to a process ID in Linux). We use the +seastar::with_scheduling_group() function to run code in +the desired scheduling group:

    +
    seastar::future<long>
    +loop_in_sg(int parallelism, bool& stop, seastar::scheduling_group sg) {
    +    return seastar::with_scheduling_group(sg, [parallelism, &stop] {
    +        return loop(parallelism, stop);
    +    });
    +}
    +

    TODO: explain what with_scheduling_group group really +does, how the group is “inherited” to the continuations started inside +it.

    +

    Now let’s create two scheduling groups, and run loop(1) +in the first scheduling group and loop(10) in the second +scheduling group:

    +
    seastar::future<> f() {
    +    return seastar::when_all_succeed(
    +            seastar::create_scheduling_group("loop1", 100),
    +            seastar::create_scheduling_group("loop2", 100)).then_unpack(
    +        [] (seastar::scheduling_group sg1, seastar::scheduling_group sg2) {
    +        return seastar::do_with(false, [sg1, sg2] (bool& stop) {
    +            seastar::sleep(std::chrono::seconds(10)).then([&stop] {
    +                stop = true;
    +            });
    +            return seastar::when_all_succeed(loop_in_sg(1, stop, sg1), loop_in_sg(10, stop, sg2)).then_unpack(
    +                [] (long n1, long n2) {
    +                    std::cout << "Counters: " << n1 << ", " << n2 << "\n";
    +                });
    +        });
    +    });
    +}
    +

    Here we created two scheduling groups, sg1 and +sg2. Each scheduling group has an arbitrary name (which is +used for diagnostic purposes only), and a number of shares, a +number traditionally between 1 and 1000: If one scheduling group has +twice the number of shares than a second scheduling group, it will get +twice the amount of CPU time. In this example, we used the same number +of shares (100) for both groups, so they should get equal CPU time.

    +

    Unlike most objects in Seastar which are separate per shard, Seastar +wants the identities and numbering of the scheduling groups to be the +same on all shards, because it is important when invoking tasks on +remote shards. For this reason, the function to create a scheduling +group, seastar::create_scheduling_group(), is an +asynchronous function returning a +future<scheduling_group>.

    +

    Running the above example, with both scheduling group set up with the +same number of shares (100), indeed results in both scheduling groups +getting the same amount of CPU time:

    +
    Counters: 3'353'900'256, 3'350'871'461
    +

    Note how now both loops got the same amount of work done - despite +one loop having 10 times the parallelism of the second loop.

    +

    If we change the definition of the second scheduling group to have +200 shares, twice the number of shares of the first scheduling group, +we’ll see the second scheduling group getting twice the amount of CPU +time:

    +
    Counters: 2'273'783'385, 4'549'995'716
    +

    26.2 Latency

    +

    TODO: Task quota, preempt, loops with built-in preemption check, +etc.

    +

    26.3 Disk I/O scheduler

    +

    TODO

    +

    26.4 Network scheduler

    +

    TODO: Say that not yet available. Give example of potential problem - +e.g., sharing a slow WAN link.

    +

    26.5 Controllers

    +

    TODO: Talk about how to dynamically change the number of shares, and +why.

    +

    26.6 Multi-tenancy

    +

    TODO

    + \ No newline at end of file diff --git a/master/split/3.html b/master/split/3.html new file mode 100644 index 000000000..0a415fcd7 --- /dev/null +++ b/master/split/3.html @@ -0,0 +1,245 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    3 Threads and memory

    +

    3.1 Seastar threads

    +

    As explained in the introduction, Seastar-based programs run a single +thread on each CPU. Each of these threads runs its own event loop, known +as the engine in Seastar nomenclature. By default, the Seastar +application will take over all the available cores, starting one thread +per core. We can see this with the following program, printing +seastar::smp::count which is the number of started +threads:

    +
    #include <seastar/core/app-template.hh>
    +#include <seastar/core/reactor.hh>
    +#include <iostream>
    +
    +int main(int argc, char** argv) {
    +    seastar::app_template app;
    +    app.run(argc, argv, [] {
    +            std::cout << seastar::smp::count << "\n";
    +            return seastar::make_ready_future<>();
    +    });
    +}
    +

    On a machine with 4 hardware threads (two cores, and hyperthreading +enabled), Seastar will by default start 4 engine threads:

    +
    $ ./a.out
    +4
    +

    Each of these 4 engine threads will be pinned (a la +taskset(1)) to a different hardware thread. Note how, +as we mentioned above, the app’s initialization function is run only on +one thread, so we see the ouput “4” only once. Later in the tutorial +we’ll see how to make use of all threads.

    +

    The user can pass a command line parameter, -c, to tell +Seastar to start fewer threads than the available number of hardware +threads. For example, to start Seastar on only 2 threads, the user can +do:

    +
    $ ./a.out -c2
    +2
    +

    When the machine is configured as in the example above - two cores +with two hyperthreads on each - and only two threads are requested, +Seastar ensures that each thread is pinned to a different core, and we +don’t get the two threads competing as hyperthreads of the same core +(which would, of course, damage performance).

    +

    We cannot start more threads than the number of hardware threads, as +allowing this will be grossly inefficient. Trying it will result in an +error:

    +
    $ ./a.out -c5
    +Could not initialize seastar: std::runtime_error (insufficient processing units)
    +

    The error is an exception thrown from app.run, which was caught by +seastar itself and turned into a non-zero exit code. Note that catching +the exceptions this way does not catch exceptions +thrown in the application’s actual asynchronous code. We will discuss +these later in this tutorial.

    +

    3.2 Seastar memory

    +

    As explained in the introduction, Seastar applications shard their +memory. Each thread is preallocated with a large piece of memory (on the +same NUMA node it is running on), and uses only that memory for its +allocations (such as malloc() or new).

    +

    By default, the machine’s entire memory except a +certain reservation left for the OS (defaulting to the maximum of 1.5G +or 7% of total memory) is pre-allocated for the application in this +manner. This default can be changed by either changing the +amount reserved for the OS (not used by Seastar) with the +--reserve-memory option, or by explicitly giving the amount +of memory given to the Seastar application, with the -m +option. This amount of memory can be in bytes, or using the units “k”, +“M”, “G” or “T”. These units use the power-of-two values: “M” is a +mebibyte, 2^20 (=1,048,576) bytes, not a +megabyte (10^6 or 1,000,000 bytes).

    +

    Trying to give Seastar more memory than physical memory immediately +fails:

    +
    $ ./a.out -m10T
    +Couldn't start application: std::runtime_error (insufficient physical memory)
    + \ No newline at end of file diff --git a/master/split/4.html b/master/split/4.html new file mode 100644 index 000000000..a5a8d741c --- /dev/null +++ b/master/split/4.html @@ -0,0 +1,386 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    4 Introducing futures and +continuations

    +

    Futures and continuations, which we will introduce now, are the +building blocks of asynchronous programming in Seastar. Their strength +lies in the ease of composing them together into a large, complex, +asynchronous program, while keeping the code fairly readable and +understandable.

    +

    A future is a result of a computation +that may not be available yet. Examples include:

    +
      +
    • a data buffer that we are reading from the network
    • +
    • the expiration of a timer
    • +
    • the completion of a disk write
    • +
    • the result of a computation that requires the values from one or +more other futures.
    • +
    +

    The type future<int> variable holds an int that +will eventually be available - at this point might already be available, +or might not be available yet. The method available() tests if a value +is already available, and the method get() gets the value. The type +future<> indicates something which will eventually +complete, but not return any value.

    +

    A future is usually returned by an asynchronous +function, a function which returns a future and arranges for +this future to be eventually resolved. Because asynchronous functions +promise to eventually resolve the future which they returned, +asynchronous functions are sometimes called “promises”; But we will +avoid this term because it tends to confuse more than it explains.

    +

    One simple example of an asynchronous function is Seastar’s function +sleep():

    +
    future<> sleep(std::chrono::duration<Rep, Period> dur);
    +

    This function arranges a timer so that the returned future becomes +available (without an associated value) when the given time duration +elapses.

    +

    A continuation is a callback (typically a lambda) to +run when a future becomes available. A continuation is attached to a +future with the then() method. Here is a simple +example:

    +
    #include <seastar/core/app-template.hh>
    +#include <seastar/core/sleep.hh>
    +#include <iostream>
    +
    +int main(int argc, char** argv) {
    +    seastar::app_template app;
    +    app.run(argc, argv, [] {
    +        std::cout << "Sleeping... " << std::flush;
    +        using namespace std::chrono_literals;
    +        return seastar::sleep(1s).then([] {
    +            std::cout << "Done.\n";
    +        });
    +    });
    +}
    +

    In this example we see us getting a future from +seastar::sleep(1s), and attaching to it a continuation +which prints a “Done.” message. The future will become available after 1 +second has passed, at which point the continuation is executed. Running +this program, we indeed see the message “Sleeping…” immediately, and one +second later the message “Done.” appears and the program exits.

    +

    The return value of then() is itself a future which is +useful for chaining multiple continuations one after another, as we will +explain below. But here we just note that we return this +future from app.run’s function, so that the program will +exit only after both the sleep and its continuation are done.

    +

    To avoid repeating the boilerplate “app_engine” part in every code +example in this tutorial, let’s create a simple main() with which we +will compile the following examples. This main just calls function +future<> f(), does the appropriate exception +handling, and exits when the future returned by f is +resolved:

    +
    #include <seastar/core/app-template.hh>
    +#include <seastar/util/log.hh>
    +#include <iostream>
    +#include <stdexcept>
    +
    +extern seastar::future<> f();
    +
    +int main(int argc, char** argv) {
    +    seastar::app_template app;
    +    try {
    +        app.run(argc, argv, f);
    +    } catch(...) {
    +        std::cerr << "Couldn't start application: "
    +                  << std::current_exception() << "\n";
    +        return 1;
    +    }
    +    return 0;
    +}
    +

    Compiling together with this main.cc, the above sleep() +example code becomes:

    +
    #include <seastar/core/sleep.hh>
    +#include <iostream>
    +
    +seastar::future<> f() {
    +    std::cout << "Sleeping... " << std::flush;
    +    using namespace std::chrono_literals;
    +    return seastar::sleep(1s).then([] {
    +        std::cout << "Done.\n";
    +    });
    +}
    +

    So far, this example was not very interesting - there is no +parallelism, and the same thing could have been achieved by the normal +blocking POSIX sleep(). Things become much more interesting +when we start several sleep() futures in parallel, and attach a +different continuation to each. Futures and continuation make +parallelism very easy and natural:

    +
    #include <seastar/core/sleep.hh>
    +#include <iostream>
    +
    +seastar::future<> f() {
    +    std::cout << "Sleeping... " << std::flush;
    +    using namespace std::chrono_literals;
    +    seastar::sleep(200ms).then([] { std::cout << "200ms " << std::flush; });
    +    seastar::sleep(100ms).then([] { std::cout << "100ms " << std::flush; });
    +    return seastar::sleep(1s).then([] { std::cout << "Done.\n"; });
    +}
    +

    Each sleep() and then() call returns +immediately: sleep() just starts the requested timer, and +then() sets up the function to call when the timer expires. +So all three lines happen immediately and f returns. Only then, the +event loop starts to wait for the three outstanding futures to become +ready, and when each one becomes ready, the continuation attached to it +is run. The output of the above program is of course:

    +
    $ ./a.out
    +Sleeping... 100ms 200ms Done.
    +

    sleep() returns future<>, meaning it +will complete at a future time, but once complete, does not return any +value. More interesting futures do specify a value of any type (or +multiple values) that will become available later. In the following +example, we have a function returning a future<int>, +and a continuation to be run once this value becomes available. Note how +the continuation gets the future’s value as a parameter:

    +
    #include <seastar/core/sleep.hh>
    +#include <iostream>
    +
    +seastar::future<int> slow() {
    +    using namespace std::chrono_literals;
    +    return seastar::sleep(100ms).then([] { return 3; });
    +}
    +
    +seastar::future<> f() {
    +    return slow().then([] (int val) {
    +        std::cout << "Got " << val << "\n";
    +    });
    +}
    +

    The function slow() deserves more explanation. As usual, +this function returns a future<int> immediately, and +doesn’t wait for the sleep to complete, and the code in f() +can chain a continuation to this future’s completion. The future +returned by slow() is itself a chain of futures: It will +become ready once sleep’s future becomes ready and then the value 3 is +returned. We’ll explain below in more details how then() +returns a future, and how this allows chaining futures.

    +

    This example begins to show the convenience of the futures +programming model, which allows the programmer to neatly encapsulate +complex asynchronous operations. slow() might involve a +complex asynchronous operation requiring multiple steps, but its user +can use it just as easily as a simple sleep(), and +Seastar’s engine takes care of running the continuations whose futures +have become ready at the right time.

    +

    4.1 Ready futures

    +

    A future value might already be ready when then() is +called to chain a continuation to it. This important case is optimized, +and the continuation is run immediately instead of being registered to +run later in the next iteration of the event loop.

    +

    make_ready_future<> can be used to return a future +which is already ready. The following example is identical to the +previous one, except the promise function fast() returns a +future which is already ready, and not one which will be ready in a +second as in the previous example. The nice thing is that the consumer +of the future does not care, and uses the future in the same way in both +cases.

    +
    #include <seastar/core/future.hh>
    +#include <iostream>
    +
    +seastar::future<int> fast() {
    +    return seastar::make_ready_future<int>(3);
    +}
    +
    +seastar::future<> f() {
    +    return fast().then([] (int val) {
    +        std::cout << "Got " << val << "\n";
    +    });
    +}
    +

    4.2 Preemption and Task Quota

    +

    As described above, an existing fiber of execution will yield back to +the event loop when it performs a blocking operation such as IO or +sleeping, as it has no more work to do until this blocking operation +completes. Should a fiber have a lot of CPU bound work to do without any +intervening blocking operations, however, it is important that execution +is still yielded back to the event loop periodically.

    +

    This is implemented via preemption: which can only occur at +specific preemption points. At these points the fiber’s remaining +task quota is checked and it has been exceeded the fiber +yields. The task quota is a measure of how long tasks should be allowed +to run before yielding to the event loop, and is set to 500 µs by +default.

    +

    It is important not to starve the event loop, as this would starve +continuations of futures that weren’t ready but have since become ready, +and also starve the important polling done by the event +loop (e.g., checking whether there is new activity on the network card). +For example, iterating over a large container while doing CPU-bound work +without any suspension points could starve the reactor and cause a +reactor stall, which refers to a substantial period of time +(e.g., more than 20 milliseconds) during which a task does not +yield.

    +

    Many seastar constructs such as looping constructs have built-in +preemption points. You may also insert your own preemption points by +calling seastar::maybe_yield, which performs a preemption +check. Coroutines will also perform a preemption check at each +co_await. Note that there is not a preemption +check between continuations attached to a future with +then(), so a recursive future loop without explicit +preemption checks may starve the reactor.

    + \ No newline at end of file diff --git a/master/split/5.html b/master/split/5.html new file mode 100644 index 000000000..46918b05d --- /dev/null +++ b/master/split/5.html @@ -0,0 +1,472 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    5 Coroutines

    +

    Note: coroutines require C++20 and a supporting compiler. Clang 10 +and above is known to work.

    +

    The simplest way to write efficient asynchronous code with Seastar is +to use coroutines. Coroutines don’t share most of the pitfalls of +traditional continuations (below), and so are the preferred way to write +new code.

    +

    A coroutine is a function that returns a +seastar::future<T> and uses the co_await +or co_return keywords. Coroutines are invisible to their +callers and callees; they integrate with traditional Seastar code in +either role. If you are not familiar with C++ coroutines, you may want +to consult A +more general introduction to C++ coroutines; this section focuses on +how coroutines integrate with Seastar.

    +

    Here’s an example of a simple Seastar coroutine:

    +
    #include <seastar/core/coroutine.hh>
    +
    +seastar::future<int> read();
    +seastar::future<> write(int n);
    +
    +seastar::future<int> slow_fetch_and_increment() {
    +    auto n = co_await read();     // #1
    +    co_await seastar::sleep(1s);  // #2
    +    auto new_n = n + 1;           // #3
    +    co_await write(new_n);        // #4
    +    co_return n;                  // #5
    +}
    +

    In #1, we call the read() function, which returns a +future. The co_await keyword instructs Seastar to inspect +the returned future. If the future is ready, then the value (an +int) is extracted from the future and assigned to +n. If the future is not ready, the coroutine arranges for +itself to be called when the future becomes ready, and control is +returned to Seastar. Once the future becomes ready, the coroutine is +awakened and the value is extracted from the future and assigned to +n.

    +

    In #2, we call seastar::sleep() and wait for the +returned future to become ready, which it will in a second. This +demonstrates that n is preserved across +co_await calls, and the author of the coroutine need not +arrange for storage for coroutine local variables.

    +

    Line #3 demonstrates the addition operation, with which the reader is +assumed to be familiar.

    +

    In #4, we call a function that returns a +seastar::future<>. In this case, the future carries +no value, and so no value is extracted and assigned.

    +

    Line #5 demonstrates returning a value. The integer value is used to +satisfy the future<int> that our caller got when +calling the coroutine.

    +

    5.1 Lambda coroutines

    +

    A lambda function can be a coroutine. Due to an interaction between +how C++ lambda coroutines are specified and how Seastar coroutines work, +using lambda coroutines as continuations can result in use-after-free. +To avoid such problems, take one of the following approaches:

    +
      +
    1. Use lambda coroutines as arguments to functions that explicitly +claim support for them
    2. +
    3. Wrap lambda coroutines with +seastar::coroutine::lambda(), and ensure the lambda +coroutine is fully awaited within the statement it is defined in.
    4. +
    +

    An example of wrapping a lambda coroutine is:

    +
    #include <seastar/core/coroutine.hh>
    +#include <seastar/coroutine/maybe_yield.hh>
    +
    +future<> foo() {
    +    int n = 3;
    +    int m = co_await seastar::yield().then(seastar::coroutine::lambda([n] () -> future<int> {
    +        co_await seastar::coroutine::maybe_yield();
    +        // `n` can be safely used here
    +        co_return n;
    +    }));
    +    assert(n == m);
    +}
    +

    Notes: 1. seastar::future::then() accepts a continuation +2. We wrap the argument to seastar::future::then() with +seastar::coroutine::lambda() 3. We ensure evaluation of the +lambda completes within the same expression using the outer +co_await.

    +

    More information can be found in +lambda-coroutine-fiasco.md.

    +

    5.2 Generators in coroutines

    +

    Sometimes, it would be convenient to model a view of +input_range with a coroutine which emits the elements one +after another asynchronously. From the consumer of the view’s +perspective, it can retrieve the elements by co_awaiting +the return value of the coroutine. From the coroutine’s perspective, it +is able to produce the elements multiple times using +co_yield without “leaving” the coroutine. A function +producing a sequence of values can be named “generator”. But unlike the +regular coroutine which returns a single +seastar::future<T>, a generator should return +seastar::coroutine::experimental::generator<T, Container>. +Where T is the type of the elements, while +Container is a template, which is used to store the +elements. Because, underneath of Seastar’s generator implementation, a +bounded buffer is used for holding the elements not yet retrieved by the +consumer, there is a design decision to make – what kind of container +should be used, and what its maximum size should be. To define the +bounded buffer, developers need to:

    +
      +
    1. specify the type of the container’s type by via the second template +parameter of the generator
    2. +
    3. specify the size of the bounded buffer by passing the size as the +first parameter of the generator coroutine. The type of the size have to +be seastar::coroutine::experimental::buffer_size_t.
    4. +
    +

    But there is an exception, if the buffer’s size is one, we assume +that the programmer is likely to use std::optional for the +bounded buffer, so it’s not required to pass the maximum size of the +buffer as the first parameter in this case. But if a coroutine uses +std::optional as its buffer, and its function signature +still lists the size as its first parameter, it will not break anything. +As this parameter will just be ignored by the underlying +implementation.

    +

    Following is an example

    +
    #include <seastar/core/circular_buffer.hh>
    +#include <seastar/core/coroutine.hh>
    +#include <seastar/core/sleep.hh>
    +#include <seastar/coroutine/generator.hh>
    +
    +seastar::future<Preprocessed> prepare_ingredients(Ingredients&&);
    +seastar::future<Dish> cook_a_dish(Preprocessed&&);
    +seastar::future<> consume_a_dish(Dish&&);
    +
    +seastar::coroutine::experimental::generator<Dish, seastar::circular_buffer>
    +make_dishes(coroutine::experimental::buffer_size_t max_dishes_on_table,
    +            Ingredients&& ingredients) {
    +    while (ingredients) {
    +        auto some_ingredients = ingredients.alloc();
    +        auto preprocessed = co_await prepare_ingredients(std::move(some_ingredients));
    +        co_yield co_await cook_a_dish(std::move(preprocessed));
    +    }
    +}
    +
    +seastar::future<> have_a_dinner(unsigned max_dishes_on_table) {
    +    Ingredients ingredients;
    +    auto dishes = make_dishes(coroutine::experimental::buffer_size_t{max_dishes_on_table},
    +                              std::move(ingredients));
    +    while (auto dish = co_await dishes()) {
    +        co_await consume_a_dish(std::move(dish));
    +    }
    +}
    +

    In this hypothetical kitchen, a chef and a diner are working in +parallel. Instead of preparing all dishes beforehand, the chef cooks the +dishes while the diner is consuming them one after another. Under most +circumstances, neither the chef or the diner is blocked by its peer. The +dishes are buffered using the specified +seastar::circular_buffer<Dish>. But if the diner is +too slow so that there are max_dishes_on_table dishes left +on the table, the chef would wait until the number of dishes is less +than this setting. Please note, as explained above, despite that this +parameter is not referenced by the coroutine’s body, it is actually +passed to the generator’s promise constructor, which in turn creates the +buffer, as we are not using std::optional here. On the +other hand, apparently, if there is no dishes on the table, the diner +would wait for new ones to be prepared by the chef.

    +

    Please note, generator<T, Container> is still at +its early stage of developing, the public interface this template is +subject to change before it is stabilized enough.

    +

    5.3 Exceptions in coroutines

    +

    Coroutines automatically translate exceptions to futures and +back.

    +

    Calling co_await foo(), when foo() returns +an exceptional future, will throw the exception carried by the +future.

    +

    Similarly throwing within a coroutine will cause the coroutine to +return an exceptional future.

    +

    Example:

    +
    #include <seastar/core/coroutine.hh>
    +
    +seastar::future<> function_returning_an_exceptional_future();
    +
    +seastar::future<> exception_handling() {
    +    try {
    +        co_await function_returning_an_exceptional_future();
    +    } catch (...) {
    +        // exception will be handled here
    +    }
    +    throw 3; // will be captured by coroutine and returned as
    +             // an exceptional future
    +}
    +

    In certain cases, exceptions can also be propagated directly, without +throwing or rethrowing them. It can be achieved by returning a +coroutine::exception wrapper, but it unfortunately only +works for coroutines which return future<T>, not +future<>, due to the limitations in compilers. In +particular, the example above won’t compile if the return type is +changed to future<>.

    +

    Example:

    +
    seastar::future<int> exception_propagating() {
    +    std::exception_ptr eptr;
    +    try {
    +        co_await function_returning_an_exceptional_future();
    +    } catch (...) {
    +        eptr = std::current_exception();
    +    }
    +    if (eptr) {
    +        co_return seastar::coroutine::exception(eptr); // Saved exception pointer can be propagated without rethrowing
    +    }
    +    co_return seastar::coroutine::make_exception(3); // Custom exceptions can be propagated without throwing
    +}
    +

    5.4 Concurrency in coroutines

    +

    The co_await operator allows for simple sequential +execution. Multiple coroutines can execute in parallel, but each +coroutine has only one outstanding computation at a time.

    +

    The seastar::coroutine::all class template allows a +coroutine to fork into several concurrently executing sub-coroutines (or +Seastar fibers, see below) and join again when they complete. Consider +this example:

    +
    #include <seastar/core/coroutines.hh>
    +#include <seastar/coroutine/all.hh>
    +
    +seastar::future<int> read(int key);
    +
    +seastar::future<int> parallel_sum(int key1, int key2) {
    +    int [a, b] = co_await seastar::coroutine::all(
    +        [&] {
    +            return read(key1);
    +        },
    +        [&] {
    +            return read(key2);
    +        }
    +    );
    +    co_return a + b;
    +}
    +

    Here, two read() calls are launched concurrently. The coroutine is +paused until both reads complete, and the values returned are assigned +to a and b. If read(key) is an +operation that involves I/O, then the concurrent execution will complete +sooner than if we co_awaited each call separately, since +I/O can be overlapped.

    +

    Note that all waits for all of its sub-computations, +even if some throw an exception. If an exception is thrown, it is +propagated to the calling coroutine.

    +

    The seastar::coroutine::parallel_for_each class template +allows a coroutine to fork into several concurrently executing function +invocations (or Seastar fibers, see below) over a range of elements and +join again when they complete. Consider this example:

    +
    #include <seastar/core/coroutines.hh>
    +#include <seastar/coroutine/parallel_for_each.hh>
    +
    +seastar::future<bool> all_exist(std::vector<seastar::sstring> filenames) {
    +    bool res = true;
    +    co_await seastar::coroutine::parallel_for_each(filenames, [&res] (const seastar::sstring& name) -> seastar::future<> {
    +        res &= co_await seastar::file_exists(name);
    +    });
    +    co_return res;
    +}
    +

    Here, the lambda function passed to parallel_for_each is launched +concurrently for each element in the filenames vector. The coroutine is +paused until all calls complete.

    +

    5.5 Breaking up long running +computations

    +

    Seastar is generally used for I/O, and coroutines usually launch I/O +operations and consume their results, with little computation in +between. But occasionally a long running computation is needed, and this +risks preventing the reactor from performing I/O and scheduling other +tasks.

    +

    A coroutine will automatically yield in a co_await +expression; but in a computation we do not co_await +anything. We can use the seastar::coroutine::maybe_yield +class in such cases:

    +
    #include <seastar/coroutine/maybe_yield>
    +
    +seastar::future<int> long_loop(int n) {
    +    float acc = 0;
    +    for (int i = 0; i < n; ++i) {
    +        acc += std::sin(float(i));
    +        // Give the Seastar reactor opportunity to perform I/O or schedule
    +        // other tasks.
    +        co_await seastar::coroutine::maybe_yield();
    +    }
    +    co_return acc;
    +}
    +

    5.6 Bypassing preemption checks in +coroutines

    +

    By default, co_await-ing a future performs a preemption +check, and will suspend if the task quota is already depleted. However, +in certain cases it might be useful to be able to assume that awaiting a +ready future will not yield. For such cases, it’s possible to explicitly +bypass the preemption check:

    +
    #include <seastar/core/coroutine.hh>
    +
    +struct resource;
    +seastar::future<int> compute_always_ready(int i, resource& r);
    +
    +seastar::future<int> accumulate(int n, resource& important_resource) {
    +    float acc = 0;
    +    for (int i = 0; i < n; ++i) {
    +        // This await will not yield the control, so we're sure that nobody will
    +        // be able to touch important_resource while we accumulate all the results.
    +        acc += co_await seastar::coroutine::without_preemption_check(compute_always_ready(i, important_resource));
    +    }
    +    co_return acc;
    +}
    + \ No newline at end of file diff --git a/master/split/6.html b/master/split/6.html new file mode 100644 index 000000000..6bda4a682 --- /dev/null +++ b/master/split/6.html @@ -0,0 +1,316 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    6 Continuations

    +

    6.1 Capturing state in +continuations

    +

    We’ve already seen that Seastar continuations are lambdas, +passed to the then() method of a future. In the examples +we’ve seen so far, lambdas have been nothing more than anonymous +functions. But C++11 lambdas have one more trick up their sleeve, which +is extremely important for future-based asynchronous programming in +Seastar: Lambdas can capture state. Consider the +following example:

    +
    #include <seastar/core/sleep.hh>
    +#include <iostream>
    +
    +seastar::future<int> incr(int i) {
    +    using namespace std::chrono_literals;
    +    return seastar::sleep(10ms).then([i] { return i + 1; });
    +}
    +
    +seastar::future<> f() {
    +    return incr(3).then([] (int val) {
    +        std::cout << "Got " << val << "\n";
    +    });
    +}
    +

    The future operation incr(i) takes some time to complete +(it needs to sleep a bit first…), and in that duration, it needs to save +the i value it is working on. In the early event-driven +programming models, the programmer needed to explicitly define an object +for holding this state, and to manage all these objects. Everything is +much simpler in Seastar, with C++11’s lambdas: The capture +syntax[i]” in the above example means that the value +of i, as it existed when incr() was called() is captured into the +lambda. The lambda is not just a function - it is in fact an +object, with both code and data. In essence, the compiler +created for us automatically the state object, and we neither need to +define it, nor to keep track of it (it gets saved together with the +continuation, when the continuation is deferred, and gets deleted +automatically after the continuation runs).

    +

    One implementation detail worth understanding is that when a +continuation has captured state and is run immediately, this capture +incurs no runtime overhead. However, when the continuation cannot be run +immediately (because the future is not yet ready) and needs to be saved +till later, memory needs to be allocated on the heap for this data, and +the continuation’s captured data needs to be copied there. This has +runtime overhead, but it is unavoidable, and is very small compared to +the related overhead in the threaded programming model (in a threaded +program, this sort of state usually resides on the stack of the blocked +thread, but the stack is much larger than our tiny capture state, takes +up a lot of memory and causes a lot of cache pollution on context +switches between those threads).

    +

    In the above example, we captured i by value - +i.e., a copy of the value of i was saved into the +continuation. C++ has two additional capture options: capturing by +reference and capturing by move:

    +

    Using capture-by-reference in a continuation is usually a mistake, +and can lead to serious bugs. For example, if in the above example we +captured a reference to i, instead of copying it,

    +
    seastar::future<int> incr(int i) {
    +    using namespace std::chrono_literals;
    +    // Oops, the "&" below is wrong:
    +    return seastar::sleep(10ms).then([&i] { return i + 1; });
    +}
    +

    this would have meant that the continuation would contain the address +of i, not its value. But i is a stack +variable, and the incr() function returns immediately, so when the +continuation eventually gets to run, long after incr() returns, this +address will contain unrelated content.

    +

    An exception to the capture-by-reference-is-usually-a-mistake rule is +the do_with() idiom, which we will introduce later. This +idiom ensures that an object lives throughout the life of the +continuation, and makes capture-by-reference possible, and very +convenient.

    +

    Using capture-by-move in continuations is also very useful +in Seastar applications. By moving an object into a +continuation, we transfer ownership of this object to the continuation, +and make it easy for the object to be automatically deleted when the +continuation ends. For example, consider a traditional function taking a +std::unique_ptr<T>.

    +
    int do_something(std::unique_ptr<T> obj) {
    +     // do some computation based on the contents of obj, let's say the result is 17
    +     return 17;
    +     // at this point, obj goes out of scope so the compiler delete()s it.
    +

    By using unique_ptr in this way, the caller passes an object to the +function, but tells it the object is now its exclusive responsibility - +and when the function is done with the object, it automatically deletes +it. How do we use unique_ptr in a continuation? The following won’t +work:

    +
    seastar::future<int> slow_do_something(std::unique_ptr<T> obj) {
    +    using namespace std::chrono_literals;
    +    // The following line won't compile...
    +    return seastar::sleep(10ms).then([obj] () mutable { return do_something(std::move(obj)); });
    +}
    +

    The problem is that a unique_ptr cannot be passed into a continuation +by value, as this would require copying it, which is forbidden because +it violates the guarantee that only one copy of this pointer exists. We +can, however, move obj into the continuation:

    +
    seastar::future<int> slow_do_something(std::unique_ptr<T> obj) {
    +    using namespace std::chrono_literals;
    +    return seastar::sleep(10ms).then([obj = std::move(obj)] () mutable {
    +        return do_something(std::move(obj));
    +    });
    +}
    +

    Here the use of std::move() causes obj’s move-assignment +is used to move the object from the outer function into the +continuation. The notion of move (move semantics), introduced +in C++11, is similar to a shallow copy followed by invalidating the +source copy (so that the two copies do not co-exist, as forbidden by +unique_ptr). After moving obj into the continuation, the top-level +function can no longer use it (in this case it’s of course ok, because +we return anyway).

    +

    The [obj = ...] capture syntax we used here is new to +C++14. This is the main reason why Seastar requires C++14, and does not +support older C++11 compilers.

    +

    The extra () mutable syntax was needed here because by +default when C++ captures a value (in this case, the value of +std::move(obj)) into a lambda, it makes this value read-only, so our +lambda cannot, in this example, move it again. Adding +mutable removes this artificial restriction.

    +

    6.2 Evaluation order considerations +(C++14 only)

    +

    C++14 (and below) does not guarantee that lambda captures in +continuations will be evaluated after the futures they relate to are +evaluated (See +https://en.cppreference.com/w/cpp/language/eval_order).

    +

    Consequently, avoid the programming pattern below:

    +
        return do_something(obj).then([obj = std::move(obj)] () mutable {
    +        return do_something_else(std::move(obj));
    +    });
    +

    In the example above, [obj = std::move(obj)] might be +evaluated before do_something(obj) is called, potentially +leading to use-after-move of obj.

    +

    To guarantee the desired evaluation order, the expression above may +be broken into separate statements as follows:

    +
        auto fut = do_something(obj);
    +    return fut.then([obj = std::move(obj)] () mutable {
    +        return do_something_else(std::move(obj));
    +    });
    +

    This was changed in C++17. The expression that creates the object the +function then is called on (the future) is evaluated before +all the arguments to the function, so this style is not required in +C++17 and above.

    +

    6.3 Chaining continuations

    +

    TODO: We already saw chaining example in slow() above. talk about the +return from then, and returning a future and chaining more thens.

    + \ No newline at end of file diff --git a/master/split/7.html b/master/split/7.html new file mode 100644 index 000000000..83aa77d1e --- /dev/null +++ b/master/split/7.html @@ -0,0 +1,372 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    7 Handling exceptions

    +

    An exception thrown in a continuation is implicitly captured by the +system and stored in the future. A future that stores such an exception +is similar to a ready future in that it can cause its continuation to be +launched, but it does not contain a value – only the exception.

    +

    Calling .then() on such a future skips over the +continuation, and transfers the exception for the input future (the +object on which .then() is called) to the output future +(.then()’s return value).

    +

    This default handling parallels normal exception behavior – if an +exception is thrown in straight-line code, all following lines are +skipped:

    +
    line1();
    +line2(); // throws!
    +line3(); // skipped
    +

    is similar to

    +
    return line1().then([] {
    +    return line2(); // throws!
    +}).then([] {
    +    return line3(); // skipped
    +});
    +

    Usually, aborting the current chain of operations and returning an +exception is what’s needed, but sometimes more fine-grained control is +required. There are several primitives for handling exceptions:

    +
      +
    1. .then_wrapped(): instead of passing the values carried +by the future into the continuation, .then_wrapped() passes +the input future to the continuation. The future is guaranteed to be in +ready state, so the continuation can examine whether it contains a value +or an exception, and take appropriate action.
    2. +
    3. .finally(): similar to a Java finally block, a +.finally() continuation is executed whether or not its +input future carries an exception or not. The result of the finally +continuation is its input future, so .finally() can be used +to insert code in a flow that is executed unconditionally, but otherwise +does not alter the flow.
    4. +
    +

    The following example illustrates usage of then_wrapped +and finally:

    +
    #include <seastar/core/future.hh>
    +#include <iostream>
    +#include <exception>
    +
    +seastar::future<> pass() {
    +    std::cout << "I passed!!!" << std::endl;
    +    return seastar::make_ready_future<>();
    +}
    +
    +seastar::future<> fail() {
    +    std::cout << "I failed." << std::endl;
    +    return seastar::make_exception_future<>(std::exception());
    +}
    +
    +seastar::future<> f() {
    +    return pass().then([] {
    +        std::cout << "Oh no! I'm gonna fail!" << std::endl;
    +        return fail(); // throws
    +    }).then([] () { // skipped
    +        std::cout << "If I got to this place I will pass!" << std::endl;
    +        return pass();
    +    }).then_wrapped([] (seastar::future<> f) {
    +        if (f.failed()) {
    +            std::cout << "The input future failed!" << std::endl;
    +            return f;
    +        }
    +
    +        std::cout << "If I got to this place I will pass!" << std::endl;
    +        return pass();
    +    }).finally([] () {
    +        std::cout << "This code will run, regardless of any exceptions" << std::endl;
    +    });
    +}
    +

    This time the output will be

    +
    I passed!!!
    +Oh no! I'm gonna fail!
    +I failed.
    +The input future failed!
    +This code will run, regardless of any exceptions
    +ERROR [...] Exiting on unhandled exception: std::exception (std::exception)
    +

    TODO: Also mention handle_exception - although perhaps delay that to +a later chapter?

    +

    7.1 Exceptions vs. exceptional +futures

    +

    An asynchronous function can fail in one of two ways: It can fail +immediately, by throwing an exception, or it can return a future which +will eventually fail (resolve to an exception). These two modes of +failure appear similar to the uninitiated, but behave differently when +attempting to handle exceptions using finally(), +handle_exception(), or then_wrapped(). For +example, consider the code:

    +
    #include <seastar/core/future.hh>
    +#include <iostream>
    +#include <exception>
    +
    +class my_exception : public std::exception {
    +    virtual const char* what() const noexcept override { return "my exception"; }
    +};
    +
    +seastar::future<> fail() {
    +    return seastar::make_exception_future<>(my_exception());
    +}
    +
    +seastar::future<> f() {
    +    return fail().finally([] {
    +        std::cout << "cleaning up\n";
    +    });
    +}
    +

    This code will, as expected, print the “cleaning up” message - the +asynchronous function fail() returns a future which +resolves to a failure, and the finally() continuation is +run despite this failure, as expected.

    +

    Now consider that in the above example we had a different definition +for fail():

    +
    seastar::future<> fail() {
    +    throw my_exception();
    +}
    +

    Here, fail() does not return a failing future. Rather, +it fails to return a future at all! The exception it throws stops the +entire function f(), and the finally() +continuation does not not get attached to the future (which was never +returned), and will never run. The “cleaning up” message is not printed +now.

    +

    We recommend that to reduce the chance for such errors, asynchronous +functions should always return a failed future rather than throw an +actual exception. If the asynchronous function calls another function +before returning a future, and that second function might +throw, it should use try/catch to catch the +exception and convert it into a failed future:

    +
    void inner() {
    +    throw my_exception();
    +}
    +seastar::future<> fail() {
    +    try {
    +        inner();
    +    } catch(...) {
    +        return seastar::make_exception_future(std::current_exception());
    +    }
    +    return seastar::make_ready_future<>();
    +}
    +

    Here, fail() catches the exception thrown by +inner(), whatever it might be, and returns a failed future +with that failure. Written this way, the finally() +continuation will be reached, and the “cleaning up” message printed.

    +
    +

    Despite this recommendation that asynchronous functions avoid +throwing, some asynchronous functions do throw exceptions in addition to +returning exceptional futures. A common example are functions which +allocate memory and throw std::bad_alloc when running out +of memory, instead of returning a future. The +future<> seastar::semaphore::wait() method is one +such function: It returns a future which may be exceptional if the +semaphore was broken() or the wait timed out, but may also +throw an exception when failing to allocate memory it needs to +hold the list of waiters. Therefore, unless a function — including +asynchronous functions — is explicitly tagged “noexcept”, +the application should be prepared to handle exceptions thrown from it. +In modern C++, code usually uses RAII to be exception-safe without +sprinkling it with try/catch. +seastar::defer() is a RAII-based idiom that ensures that +some cleanup code is run even if an exception is thrown.

    +
    +

    Seastar has a convenient generic function, +futurize_invoke(), which can be useful here. +futurize_invoke(func, args...) runs a function which may +return either a future value or an immediate value, and in both cases +convert the result into a future value. futurize_invoke() +also converts an immediate exception thrown by the function, if any, +into a failed future, just like we did above. So using +futurize_invoke() we can make the above example work even +if fail() did throw exceptions:

    +
    seastar::future<> fail() {
    +    throw my_exception();
    +}
    +seastar::future<> f() {
    +    return seastar::futurize_invoke(fail).finally([] {
    +        std::cout << "cleaning up\n";
    +    });
    +}
    +

    Note that most of this discussion becomes moot if the risk of +exception is inside a continuation. Consider the following +code:

    +
    seastar::future<> f() {
    +    return seastar::sleep(1s).then([] {
    +        throw my_exception();
    +    }).finally([] {
    +        std::cout << "cleaning up\n";
    +    });
    +}
    +

    Here, the lambda function of the first continuation does throw an +exception instead of returning a failed future. However, we do +not have the same problem as before, which only happened +because an asynchronous function threw an exception before +returning a valid future. Here, f() does return a valid +future immediately - the failure will only be known later, after +sleep() resolves. The message in finally() +will be printed. The methods which attach continuations (such as +then() and finally()) run the continuation the +same way, so continuation functions may return immediate values or, in +this case, throw an immediate exception, and still work properly.

    + \ No newline at end of file diff --git a/master/split/8.html b/master/split/8.html new file mode 100644 index 000000000..3d29d2f2a --- /dev/null +++ b/master/split/8.html @@ -0,0 +1,516 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    8 Lifetime management

    +

    An asynchronous function starts an operation which may continue long +after the function returns: The function itself returns a +future<T> almost immediately, but it may take a while +until this future is resolved.

    +

    When such an asynchronous operation needs to operate on existing +objects, or to use temporary objects, we need to worry about the +lifetime of these objects: We need to ensure that these objects +do not get destroyed before the asynchronous function completes (or it +will try to use the freed object and malfunction or crash), and to also +ensure that the object finally get destroyed when it is no longer needed +(otherwise we will have a memory leak). Seastar offers a variety of +mechanisms for safely and efficiently keeping objects alive for the +right duration. In this section we will explore these mechanisms, and +when to use each mechanism.

    +

    8.1 Passing ownership to +continuation

    +

    The most straightforward way to ensure that an object is alive when a +continuation runs and is destroyed afterwards is to pass its ownership +to the continuation. When continuation owns the object, the +object will be kept until the continuation runs, and will be destroyed +as soon as the continuation is not needed (i.e., it may have run, or +skipped in case of exception and then() continuation).

    +

    We already saw above that the way for a continuation to get ownership +of an object is through capturing:

    +
    seastar::future<> slow_incr(int i) {
    +    return seastar::sleep(10ms).then([i] { return i + 1; });
    +}
    +

    Here the continuation captures the value of i. In other +words, the continuation includes a copy of i. When the +continuation runs 10ms later, it will have access to this value, and as +soon as the continuation finishes its object is destroyed, together with +its captured copy of i. The continuation owns this copy of +i.

    +

    Capturing by value as we did here - making a copy of the object we +need in the continuation - is useful mainly for very small objects such +as the integer in the previous example. Other objects are expensive to +copy, or sometimes even cannot be copied. For example, the following is +not a good idea:

    +
    seastar::future<> slow_op(std::vector<int> v) {
    +    // this makes another copy of v:
    +    return seastar::sleep(10ms).then([v] { /* do something with v */ });
    +}
    +

    This would be inefficient - as the vector v, potentially +very long, will be copied and the copy will be saved in the +continuation. In this example, there is no reason to copy v +- it was anyway passed to the function by value and will not be used +again after capturing it into the continuation, as right after the +capture, the function returns and destroys its copy of +v.

    +

    For such cases, C++14 allows moving the object into the +continuation:

    +
    seastar::future<> slow_op(std::vector<int> v) {
    +    // v is not copied again, but instead moved:
    +    return seastar::sleep(10ms).then([v = std::move(v)] { /* do something with v */ });
    +}
    +

    Now, instead of copying the object v into the +continuation, it is moved into the continuation. The +C++11-introduced move constructor moves the vector’s data into the +continuation and clears the original vector. Moving is a quick operation +- for a vector it only requires copying a few small fields such as the +pointer to the data. As before, once the continuation is dismissed the +vector is destroyed - and its data array (which was moved in the move +operation) is finally freed.

    +

    TODO: talk about temporary_buffer as an example of an object designed +to be moved in this way.

    +

    In some cases, moving the object is undesirable. For example, some +code keeps references to an object or one of its fields and the +references become invalid if the object is moved. In some complex +objects, even the move constructor is slow. For these cases, C++ +provides the useful wrapper std::unique_ptr<T>. A +unique_ptr<T> object owns an object of type +T allocated on the heap. When a +unique_ptr<T> is moved, the object of type T is not +touched at all - just the pointer to it is moved. An example of using +std::unique_ptr<T> in capture is:

    +
    seastar::future<> slow_op(std::unique_ptr<T> p) {
    +    return seastar::sleep(10ms).then([p = std::move(p)] { /* do something with *p */ });
    +}
    +

    std::unique_ptr<T> is the standard C++ mechanism +for passing unique ownership of an object to a function: The object is +only owned by one piece of code at a time, and ownership is transferred +by moving the unique_ptr object. A unique_ptr +cannot be copied: If we try to capture p by value, not by move, we will +get a compilation error.

    +

    8.2 Keeping ownership at the +caller

    +

    The technique we described above - giving the continuation ownership +of the object it needs to work on - is powerful and safe. But often it +becomes hard and verbose to use. When an asynchronous operation involves +not just one continuation but a chain of continuations that each needs +to work on the same object, we need to pass the ownership of the object +between each successive continuation, which can become inconvenient. It +is especially inconvenient when we need to pass the same object into two +separate asynchronous functions (or continuations) - after we move the +object into one, the object needs to be returned so it can be moved +again into the second. E.g.,

    +
    seastar::future<> slow_op(T o) {
    +    return seastar::sleep(10ms).then([o = std::move(o)] {
    +        // first continuation, doing something with o
    +        ...
    +        // return o so the next continuation can use it!
    +        return std::move(o);
    +    }).then([](T o) {
    +        // second continuation, doing something with o
    +        ...
    +    });
    +}
    +

    This complexity arises because we wanted asynchronous functions and +continuations to take the ownership of the objects they operated on. A +simpler approach would be to have the caller of the +asynchronous function continue to be the owner of the object, and just +pass references to the object to the various other asynchronous +functions and continuations which need the object. For example:

    +
    seastar::future<> slow_op(T& o) {           // <-- pass by reference
    +    return seastar::sleep(10ms).then([&o] {// <-- capture by reference
    +        // first continuation, doing something with o
    +        ...
    +    }).then([&o]) {                        // <-- another capture by reference
    +        // second continuation, doing something with o
    +        ...
    +    });
    +}
    +

    This approach raises a question: The caller of slow_op +is now responsible for keeping the object o alive while the +asynchronous code started by slow_op needs this object. But +how will this caller know how long this object is actually needed by the +asynchronous operation it started?

    +

    The most reasonable answer is that an asynchronous function may need +access to its parameters until the future it returns is resolved - at +which point the asynchronous code completes and no longer needs access +to its parameters. We therefore recommend that Seastar code adopt the +following convention:

    +
    +

    Whenever an asynchronous function takes a parameter by +reference, the caller must ensure that the referred object lives until +the future returned by the function is resolved.

    +
    +

    Note that this is merely a convention suggested by Seastar, and +unfortunately nothing in the C++ language enforces it. C++ programmers +in non-Seastar programs often pass large objects to functions as a const +reference just to avoid a slow copy, and assume that the called function +will not save this reference anywhere. But in Seastar code, +that is a dangerous practice because even if the asynchronous function +did not intend to save the reference anywhere, it may end up doing it +implicitly by passing this reference to another function and eventually +capturing it in a continuation.

    +
    +

    It would be nice if future versions of C++ could help us catch +incorrect uses of references. Perhaps we could have a tag for a special +kind of reference, an “immediate reference” which a function can use use +immediately (i.e, before returning a future), but cannot be captured +into a continuation.

    +
    +

    With this convention in place, it is easy to write complex +asynchronous functions functions like slow_op which pass +the object around, by reference, until the asynchronous operation is +done. But how does the caller ensure that the object lives until the +returned future is resolved? The following is wrong:

    +
    seastar::future<> f() {
    +    T obj; // wrong! will be destroyed too soon!
    +    return slow_op(obj);
    +}
    +

    It is wrong because the object obj here is local to the +call of f, and is destroyed as soon as f +returns a future - not when this returned future is resolved! The +correct thing for a caller to do would be to create the object +obj on the heap (so it does not get destroyed as soon as +f returns), and then run slow_op(obj) and when +that future resolves (i.e., with .finally()), destroy the +object.

    +

    Seastar provides a convenient idiom, do_with() for doing +this correctly:

    +
    seastar::future<> f() {
    +    return seastar::do_with(T(), [] (auto& obj) {
    +        // obj is passed by reference to slow_op, and this is fine:
    +        return slow_op(obj);
    +    }
    +}
    +

    do_with will do the given function +with the given object alive.

    +

    do_with saves the given object on the heap, and calls +the given lambda with a reference to the new object. Finally it ensures +that the new object is destroyed after the returned future is resolved. +Usually, do_with is given an rvalue, i.e., an unnamed temporary +object or an std::move()ed object, and do_with +moves that object into its final place on the heap. do_with +returns a future which resolves after everything described above is done +(the lambda’s future is resolved and the object is destroyed).

    +

    For convenience, do_with can also be given multiple +objects to hold alive. For example here we create two objects and hold +alive them until the future resolves:

    +
    seastar::future<> f() {
    +    return seastar::do_with(T1(), T2(), [] (auto& obj1, auto& obj2) {
    +        return slow_op(obj1, obj2);
    +    }
    +}
    +

    While do_with can the lifetime of the objects it holds, +if the user accidentally makes copies of these objects, these copies +might have the wrong lifetime. Unfortunately, a simple typo like +forgetting an “&” can cause such accidental copies. For example, the +following code is broken:

    +
    seastar::future<> f() {
    +    return seastar::do_with(T(), [] (T obj) { // WRONG: should be T&, not T
    +        return slow_op(obj);
    +    }
    +}
    +

    In this wrong snippet, obj is mistakenly not a reference +to the object which do_with allocated, but rather a copy of +it - a copy which is destroyed as soon as the lambda function returns, +rather than when the future it returns resolved. Such code will most +likely crash because the object is used after being freed. Unfortunately +the compiler will not warn about such mistakes. Users should get used to +always using the type “auto&” with do_with - as in the +above correct examples - to reduce the chance of such mistakes.

    +

    For the same reason, the following code snippet is also wrong:

    +
    seastar::future<> slow_op(T obj); // WRONG: should be T&, not T
    +seastar::future<> f() {
    +    return seastar::do_with(T(), [] (auto& obj) {
    +        return slow_op(obj);
    +    }
    +}
    +

    Here, although obj was correctly passed to the lambda by +reference, we later accidentally passed slow_op() a copy of +it (because here slow_op takes the object by value, not by +reference), and this copy will be destroyed as soon as +slow_op returns, not waiting until the returned future +resolves.

    +

    When using do_with, always remember it requires adhering +to the convention described above: The asynchronous function which we +call inside do_with must not use the objects held by +do_with after the returned future is resolved. It +is a serious use-after-free bug for an asynchronous function to return a +future which resolves while still having background operations using the +do_with()ed objects.

    +

    In general, it is rarely a good idea for an asynchronous function to +resolve while leaving behind background operations - even if those +operations do not use the do_with()ed objects. Background +operations that we do not wait for may cause us to run out of memory (if +we don’t limit their number) and make it difficult to shut down the +application cleanly.

    +

    8.3 Sharing ownership (reference +counting)

    +

    In the beginning of this chapter, we already noted that capturing a +copy of an object into a continuation is the simplest way to ensure that +the object is alive when the continuation runs and destroyed afterwards. +However, complex objects are often expensive (in time and memory) to +copy. Some objects cannot be copied at all, or are read-write and the +continuation should modify the original object, not a new copy. The +solution to all these issues are reference counted, +a.k.a. shared objects:

    +

    A simple example of a reference-counted object in Seastar is a +seastar::file, an object holding an open file object (we +will introduce seastar::file in a later section). A +file object can be copied, but copying does not involve +copying the file descriptor (let alone the file). Instead, both copies +point to the same open file, and a reference count is increased by 1. +When a file object is destroyed, the file’s reference count is decreased +by one, and only when the reference count reaches 0 the underlying file +is actually closed.

    +

    The fact that file objects can be copied very quickly +and all copies actually point to the same file, make it very convenient +to pass them to asynchronous code; For example,

    +
    seastar::future<uint64_t> slow_size(file f) {
    +    return seastar::sleep(10ms).then([f] {
    +        return f.size();
    +    });
    +}
    +

    Note how calling slow_size is as simple as calling +slow_size(f), passing a copy of f, without +needing to do anything special to ensure that f is only +destroyed when no longer needed. That simply happens naturally when +nothing refers to f any more.

    +

    You may wonder why return f.size() in the above example +is safe: Doesn’t it start an asynchronous operation on f +(the file’s size may be stored on disk, so not immediately available), +and f may be immediately destroyed when we return and +nothing keeps holding a copy of f? If f is +really the last reference, that is indeed a bug, but there is another +one: the file is never closed. The assumption that makes the code valid +is that there is another reference to f that will be used +to close it. The close member function holds on to the reference count +of that object, so it continues to live even if nothing else keeps +holding on to it. Since all futures produced by a file object complete +before it is closed, all that is needed for correctness is to remember +to always close files.

    +

    The reference counting has a run-time cost, but it is usually very +small; It is important to remember that Seastar objects are always used +by a single CPU only, so the reference-count increment and decrement +operations are not the slow atomic operations often used for reference +counting, but just regular CPU-local integer operations. Moreover, +judicious use of std::move() and the compiler’s optimizer +can reduce the number of unnecessary back-and-forth increment and +decrement of the reference count.

    +

    C++11 offers a standard way of creating reference-counted shared +objects - using the template std::shared_ptr<T>. A +shared_ptr can be used to wrap any type into a +reference-counted shared object like seastar::file above. +However, the standard std::shared_ptr was designed with +multi-threaded applications in mind so it uses slow atomic +increment/decrement operations for the reference count which we already +noted is unnecessary in Seastar. For this reason Seastar offers its own +single-threaded implementation of this template, +seastar::shared_ptr<T>. It is similar to +std::shared_ptr<T> except no atomic operations are +used.

    +

    Additionally, Seastar also provides an even lower overhead variant of +shared_ptr: seastar::lw_shared_ptr<T>. +The full-featured shared_ptr is complicated by the need to +support polymorphic types correctly (a shared object created of one +class, and accessed through a pointer to a base class). It makes +shared_ptr need to add two words to the shared object, and +two words to each shared_ptr copy. The simplified +lw_shared_ptr - which does not support +polymorphic types - adds just one word in the object (the reference +count) and each copy is just one word - just like copying a regular +pointer. For this reason, the light-weight +seastar::lw_shared_ptr<T> should be preferred when +possible (T is not a polymorphic type), otherwise +seastar::shared_ptr<T>. The slower +std::shared_ptr<T> should never be used in sharded +Seastar applications.

    +

    8.4 Saving objects on the +stack

    +

    Wouldn’t it be convenient if we could save objects on a stack just +like we normally do in synchronous code? I.e., something like:

    +
    int i = ...;
    +seastar::sleep(10ms).get();
    +return i;
    +

    Seastar allows writing such code, by using a +seastar::thread object which comes with its own stack. A +complete example using a seastar::thread might look like +this:

    +
    seastar::future<> slow_incr(int i) {
    +    return seastar::async([i] {
    +        seastar::sleep(10ms).get();
    +        // We get here after the 10ms of wait, i is still available.
    +        return i + 1;
    +    });
    +}
    +

    We present seastar::thread, +seastar::async() and seastar::future::get() in +the seastar::thread section.

    + \ No newline at end of file diff --git a/master/split/9.html b/master/split/9.html new file mode 100644 index 000000000..ec3dd0523 --- /dev/null +++ b/master/split/9.html @@ -0,0 +1,183 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    +

    9 Advanced futures

    +

    9.1 Futures and interruption

    +

    TODO: A future, e.g., sleep(10s) cannot be interrupted. So if we need +to, the promise needs to have a mechanism to interrupt it. Mention +pipe’s close feature, semaphore stop feature, etc.

    +

    9.2 Futures are single use

    +

    TODO: Talk about if we have a future<int> +variable, as soon as we get() or then() it, it +becomes invalid - we need to store the value somewhere else. Think if +there’s an alternative we can suggest

    + \ No newline at end of file diff --git a/master/split/index.html b/master/split/index.html new file mode 100644 index 000000000..d605e7822 --- /dev/null +++ b/master/split/index.html @@ -0,0 +1,318 @@ + + + + + + + + Asynchronous Programming with Seastar + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    + + \ No newline at end of file diff --git a/master/splitbar.png b/master/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/master/sstring_8hh_source.html b/master/sstring_8hh_source.html new file mode 100644 index 000000000..6dd70ee19 --- /dev/null +++ b/master/sstring_8hh_source.html @@ -0,0 +1,958 @@ + + + + + + + +Seastar: seastar/core/sstring.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    sstring.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2014 Cloudius Systems
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <stdint.h>
    +
    26#include <algorithm>
    +
    27#include <cassert>
    +
    28#if __has_include(<compare>)
    +
    29#include <compare>
    +
    30#endif
    +
    31#include <string>
    +
    32#include <vector>
    +
    33#include <unordered_map>
    +
    34#include <cstring>
    +
    35#include <initializer_list>
    +
    36#include <istream>
    +
    37#include <ostream>
    +
    38#include <functional>
    +
    39#include <type_traits>
    +
    40#include <fmt/format.h>
    +
    41#if FMT_VERSION >= 110000
    +
    42#include <fmt/ranges.h>
    +
    43#endif
    +
    44#endif
    +
    45#include <seastar/util/std-compat.hh>
    +
    46#include <seastar/util/modules.hh>
    +
    47#include <seastar/core/temporary_buffer.hh>
    +
    48
    +
    49namespace seastar {
    +
    50
    +
    51SEASTAR_MODULE_EXPORT_BEGIN
    +
    52
    +
    53template <typename char_type, typename Size, Size max_size, bool NulTerminate = true>
    +
    54class basic_sstring;
    +
    55
    +
    56#ifdef SEASTAR_SSTRING
    +
    57// Older std::string used atomic reference counting and had no small-buffer-optimization.
    +
    58// At some point the new std::string ABI improved -- no reference counting plus the small
    +
    59// buffer optimization. However, aliasing seastar::sstring to std::string still ends up
    +
    60// with a small performance degradation. (FIXME?)
    +
    61using sstring = basic_sstring<char, uint32_t, 15>;
    +
    62#else
    +
    63using sstring = std::string;
    +
    64#endif
    +
    65
    +
    66SEASTAR_MODULE_EXPORT_END
    +
    67
    +
    68namespace internal {
    +
    69[[noreturn]] void throw_bad_alloc();
    +
    70[[noreturn]] void throw_sstring_overflow();
    +
    71[[noreturn]] void throw_sstring_out_of_range();
    +
    72}
    +
    73
    +
    74SEASTAR_MODULE_EXPORT
    +
    75template <typename char_type, typename Size, Size max_size, bool NulTerminate>
    + +
    77 static_assert(
    +
    78 (std::is_same_v<char_type, char>
    +
    79 || std::is_same_v<char_type, signed char>
    +
    80 || std::is_same_v<char_type, unsigned char>),
    +
    81 "basic_sstring only supports single byte char types");
    +
    82 union contents {
    + +
    84 char_type* str;
    +
    85 Size size;
    +
    86 int8_t pad;
    +
    87 } external;
    + +
    89 char_type str[max_size];
    +
    90 int8_t size;
    +
    91 } internal;
    +
    92 static_assert(sizeof(external_type) <= sizeof(internal_type), "max_size too small");
    +
    93 static_assert(max_size <= 127, "max_size too large");
    +
    94 } u;
    +
    95 bool is_internal() const noexcept {
    +
    96 return u.internal.size >= 0;
    +
    97 }
    +
    98 bool is_external() const noexcept {
    +
    99 return !is_internal();
    +
    100 }
    +
    101 const char_type* str() const noexcept {
    +
    102 return is_internal() ? u.internal.str : u.external.str;
    +
    103 }
    +
    104 char_type* str() noexcept {
    +
    105 return is_internal() ? u.internal.str : u.external.str;
    +
    106 }
    +
    107
    +
    108public:
    +
    109 using value_type = char_type;
    +
    110 using traits_type = std::char_traits<char_type>;
    +
    111 using allocator_type = std::allocator<char_type>;
    +
    112 using reference = char_type&;
    +
    113 using const_reference = const char_type&;
    +
    114 using pointer = char_type*;
    +
    115 using const_pointer = const char_type*;
    +
    116 using iterator = char_type*;
    +
    117 using const_iterator = const char_type*;
    +
    118 // FIXME: add reverse_iterator and friend
    +
    119 using difference_type = ssize_t; // std::make_signed_t<Size> can be too small
    +
    120 using size_type = Size;
    +
    121 static constexpr size_type npos = static_cast<size_type>(-1);
    +
    122 static constexpr unsigned padding() { return unsigned(NulTerminate); }
    +
    123public:
    + +
    125
    +
    126 basic_sstring() noexcept {
    +
    127 u.internal.size = 0;
    +
    128 if (NulTerminate) {
    +
    129 u.internal.str[0] = '\0';
    +
    130 }
    +
    131 }
    +
    132 basic_sstring(const basic_sstring& x) {
    +
    133 if (x.is_internal()) {
    +
    134 u.internal = x.u.internal;
    +
    135 } else {
    +
    136 u.internal.size = -1;
    +
    137 u.external.str = reinterpret_cast<char_type*>(std::malloc(x.u.external.size + padding()));
    +
    138 if (!u.external.str) {
    +
    139 internal::throw_bad_alloc();
    +
    140 }
    +
    141 std::copy(x.u.external.str, x.u.external.str + x.u.external.size + padding(), u.external.str);
    +
    142 u.external.size = x.u.external.size;
    +
    143 }
    +
    144 }
    +
    145 basic_sstring(basic_sstring&& x) noexcept {
    +
    146#pragma GCC diagnostic push
    +
    147 // Is a small-string construction is followed by this move constructor, then the trailing bytes
    +
    148 // of x.u are not initialized, but copied. gcc complains, but it is both legitimate to copy
    +
    149 // these bytes, and more efficient than a variable-size copy
    +
    150#pragma GCC diagnostic ignored "-Wuninitialized"
    +
    151 u = x.u;
    +
    152#pragma GCC diagnostic pop
    +
    153 x.u.internal.size = 0;
    +
    154 x.u.internal.str[0] = '\0';
    +
    155 }
    +
    156 basic_sstring(initialized_later, size_t size) {
    +
    157 if (size_type(size) != size) {
    +
    158 internal::throw_sstring_overflow();
    +
    159 }
    +
    160 if (size + padding() <= sizeof(u.internal.str)) {
    +
    161 if (NulTerminate) {
    +
    162 u.internal.str[size] = '\0';
    +
    163 }
    +
    164 u.internal.size = size;
    +
    165 } else {
    +
    166 u.internal.size = -1;
    +
    167 u.external.str = reinterpret_cast<char_type*>(std::malloc(size + padding()));
    +
    168 if (!u.external.str) {
    +
    169 internal::throw_bad_alloc();
    +
    170 }
    +
    171 u.external.size = size;
    +
    172 if (NulTerminate) {
    +
    173 u.external.str[size] = '\0';
    +
    174 }
    +
    175 }
    +
    176 }
    +
    177 basic_sstring(const char_type* x, size_t size) {
    +
    178 if (size_type(size) != size) {
    +
    179 internal::throw_sstring_overflow();
    +
    180 }
    +
    181 if (size + padding() <= sizeof(u.internal.str)) {
    +
    182 std::copy(x, x + size, u.internal.str);
    +
    183 if (NulTerminate) {
    +
    184 u.internal.str[size] = '\0';
    +
    185 }
    +
    186 u.internal.size = size;
    +
    187 } else {
    +
    188 u.internal.size = -1;
    +
    189 u.external.str = reinterpret_cast<char_type*>(std::malloc(size + padding()));
    +
    190 if (!u.external.str) {
    +
    191 internal::throw_bad_alloc();
    +
    192 }
    +
    193 u.external.size = size;
    +
    194 std::copy(x, x + size, u.external.str);
    +
    195 if (NulTerminate) {
    +
    196 u.external.str[size] = '\0';
    +
    197 }
    +
    198 }
    +
    199 }
    +
    200
    +
    201 basic_sstring(size_t size, char_type x) : basic_sstring(initialized_later(), size) {
    +
    202 memset(begin(), x, size);
    +
    203 }
    +
    204
    +
    205 basic_sstring(const char* x) : basic_sstring(reinterpret_cast<const char_type*>(x), std::strlen(x)) {}
    +
    206 basic_sstring(std::basic_string<char_type>& x) : basic_sstring(x.c_str(), x.size()) {}
    +
    207 basic_sstring(std::initializer_list<char_type> x) : basic_sstring(x.begin(), x.end() - x.begin()) {}
    +
    208 basic_sstring(const char_type* b, const char_type* e) : basic_sstring(b, e - b) {}
    +
    209 basic_sstring(const std::basic_string<char_type>& s)
    +
    210 : basic_sstring(s.data(), s.size()) {}
    +
    211 template <typename InputIterator>
    +
    212 basic_sstring(InputIterator first, InputIterator last)
    +
    213 : basic_sstring(initialized_later(), std::distance(first, last)) {
    +
    214 std::copy(first, last, begin());
    +
    215 }
    +
    216 explicit basic_sstring(std::basic_string_view<char_type, traits_type> v)
    +
    217 : basic_sstring(v.data(), v.size()) {
    +
    218 }
    +
    219 ~basic_sstring() noexcept {
    +
    220 if (is_external()) {
    +
    221 std::free(u.external.str);
    +
    222 }
    +
    223 }
    +
    224 basic_sstring& operator=(const basic_sstring& x) {
    +
    225 basic_sstring tmp(x);
    +
    226 swap(tmp);
    +
    227 return *this;
    +
    228 }
    +
    229 basic_sstring& operator=(basic_sstring&& x) noexcept {
    +
    230 if (this != &x) {
    +
    231 this->~basic_sstring();
    +
    232 new (this) basic_sstring(std::move(x));
    +
    233 }
    +
    234 return *this;
    +
    235 }
    +
    236 operator std::basic_string<char_type>() const {
    +
    237 return { str(), size() };
    +
    238 }
    +
    239
    +
    240 size_t size() const noexcept {
    +
    241 return is_internal() ? u.internal.size : u.external.size;
    +
    242 }
    +
    243
    +
    244 size_t length() const noexcept {
    +
    245 return size();
    +
    246 }
    +
    247
    +
    248 size_t find(char_type t, size_t pos = 0) const noexcept {
    +
    249 const char_type* it = str() + pos;
    +
    250 const char_type* end = str() + size();
    +
    251 while (it < end) {
    +
    252 if (*it == t) {
    +
    253 return it - str();
    +
    254 }
    +
    255 it++;
    +
    256 }
    +
    257 return npos;
    +
    258 }
    +
    259
    +
    260 size_t find(const char_type* c_str, size_t pos, size_t len2) const noexcept {
    +
    261 assert(c_str != nullptr || len2 == 0);
    +
    262 if (pos > size()) {
    +
    263 return npos;
    +
    264 }
    +
    265
    +
    266 if (len2 == 0) {
    +
    267 return pos;
    +
    268 }
    +
    269
    +
    270 const char_type* it = str() + pos;
    +
    271 const char_type* end = str() + size();
    +
    272 size_t len1 = end - it;
    +
    273 if (len1 < len2) {
    +
    274 return npos;
    +
    275 }
    +
    276
    +
    277 char_type f2 = *c_str;
    +
    278 while (true) {
    +
    279 len1 = end - it;
    +
    280 if (len1 < len2) {
    +
    281 return npos;
    +
    282 }
    +
    283
    +
    284 // find the first byte of pattern string matching in source string
    +
    285 it = traits_type::find(it, len1 - len2 + 1, f2);
    +
    286 if (it == nullptr) {
    +
    287 return npos;
    +
    288 }
    +
    289
    +
    290 if (traits_type::compare(it, c_str, len2) == 0) {
    +
    291 return it - str();
    +
    292 }
    +
    293
    +
    294 ++it;
    +
    295 }
    +
    296 }
    +
    297
    +
    298 constexpr size_t find(const char_type* s, size_t pos = 0) const noexcept {
    +
    299 return find(s, pos, traits_type::length(s));
    +
    300 }
    +
    301
    +
    302 size_t find(const basic_sstring& s, size_t pos = 0) const noexcept {
    +
    303 return find(s.str(), pos, s.size());
    +
    304 }
    +
    305
    +
    306 template<class StringViewLike,
    +
    307 std::enable_if_t<std::is_convertible_v<StringViewLike,
    +
    308 std::basic_string_view<char_type, traits_type>>,
    +
    309 int> = 0>
    +
    310 size_t find(const StringViewLike& sv_like, size_type pos = 0) const noexcept {
    +
    311 std::basic_string_view<char_type, traits_type> sv = sv_like;
    +
    312 return find(sv.data(), pos, sv.size());
    +
    313 }
    +
    314
    +
    321 size_t find_last_of (char_type c, size_t pos = npos) const noexcept {
    +
    322 const char_type* str_start = str();
    +
    323 if (size()) {
    +
    324 if (pos >= size()) {
    +
    325 pos = size() - 1;
    +
    326 }
    +
    327 const char_type* p = str_start + pos + 1;
    +
    328 do {
    +
    329 p--;
    +
    330 if (*p == c) {
    +
    331 return (p - str_start);
    +
    332 }
    +
    333 } while (p != str_start);
    +
    334 }
    +
    335 return npos;
    +
    336 }
    +
    337
    +
    344 basic_sstring& append (const char_type* s, size_t n) {
    +
    345 basic_sstring ret(initialized_later(), size() + n);
    +
    346 std::copy(begin(), end(), ret.begin());
    +
    347 std::copy(s, s + n, ret.begin() + size());
    +
    348 *this = std::move(ret);
    +
    349 return *this;
    +
    350 }
    +
    351
    +
    357 template <class Operation>
    +
    358 requires std::is_invocable_r_v<size_t, Operation, char_type*, size_t>
    +
    359 void resize_and_overwrite(size_t n, Operation op) {
    +
    360 if (n > size()) {
    +
    361 *this = basic_sstring(initialized_later(), n);
    +
    362 }
    +
    363 size_t r = std::move(op)(data(), n);
    +
    364 assert(r <= n);
    +
    365 resize(r);
    +
    366 }
    +
    367
    +
    373 void resize(size_t n, const char_type c = '\0') {
    +
    374 if (n > size()) {
    +
    375 *this += basic_sstring(n - size(), c);
    +
    376 } else if (n < size()) {
    +
    377 if (is_internal()) {
    +
    378 u.internal.size = n;
    +
    379 if (NulTerminate) {
    +
    380 u.internal.str[n] = '\0';
    +
    381 }
    +
    382 } else if (n + padding() <= sizeof(u.internal.str)) {
    +
    383 *this = basic_sstring(u.external.str, n);
    +
    384 } else {
    +
    385 u.external.size = n;
    +
    386 if (NulTerminate) {
    +
    387 u.external.str[n] = '\0';
    +
    388 }
    +
    389 }
    +
    390 }
    +
    391 }
    +
    392
    +
    397 basic_sstring& replace(size_type pos, size_type n1, const char_type* s,
    +
    398 size_type n2) {
    +
    399 if (pos > size()) {
    +
    400 internal::throw_sstring_out_of_range();
    +
    401 }
    +
    402
    +
    403 if (n1 > size() - pos) {
    +
    404 n1 = size() - pos;
    +
    405 }
    +
    406
    +
    407 if (n1 == n2) {
    +
    408 if (n2) {
    +
    409 std::copy(s, s + n2, begin() + pos);
    +
    410 }
    +
    411 return *this;
    +
    412 }
    +
    413 basic_sstring ret(initialized_later(), size() + n2 - n1);
    +
    414 char_type* p= ret.begin();
    +
    415 std::copy(begin(), begin() + pos, p);
    +
    416 p += pos;
    +
    417 if (n2) {
    +
    418 std::copy(s, s + n2, p);
    +
    419 }
    +
    420 p += n2;
    +
    421 std::copy(begin() + pos + n1, end(), p);
    +
    422 *this = std::move(ret);
    +
    423 return *this;
    +
    424 }
    +
    425
    +
    426 template <class InputIterator>
    +
    427 basic_sstring& replace (const_iterator i1, const_iterator i2,
    +
    428 InputIterator first, InputIterator last) {
    +
    429 if (i1 < begin() || i1 > end() || i2 < begin()) {
    +
    430 internal::throw_sstring_out_of_range();
    +
    431 }
    +
    432 if (i2 > end()) {
    +
    433 i2 = end();
    +
    434 }
    +
    435
    +
    436 if (i2 - i1 == last - first) {
    +
    437 //in place replacement
    +
    438 std::copy(first, last, const_cast<char_type*>(i1));
    +
    439 return *this;
    +
    440 }
    +
    441 basic_sstring ret(initialized_later(), size() + (last - first) - (i2 - i1));
    +
    442 char_type* p = ret.begin();
    +
    443 p = std::copy(cbegin(), i1, p);
    +
    444 p = std::copy(first, last, p);
    +
    445 std::copy(i2, cend(), p);
    +
    446 *this = std::move(ret);
    +
    447 return *this;
    +
    448 }
    +
    449
    +
    450 iterator erase(iterator first, iterator last) {
    +
    451 size_t pos = first - begin();
    +
    452 replace(pos, last - first, nullptr, 0);
    +
    453 return begin() + pos;
    +
    454 }
    +
    455
    +
    460 template <class InputIterator>
    +
    461 void insert(const_iterator p, InputIterator beg, InputIterator end) {
    +
    462 replace(p, p, beg, end);
    +
    463 }
    +
    464
    +
    465
    +
    471 reference
    +
    472 front() noexcept {
    +
    473 assert(!empty());
    +
    474 return *str();
    +
    475 }
    +
    476
    +
    482 const_reference
    +
    483 front() const noexcept {
    +
    484 assert(!empty());
    +
    485 return *str();
    +
    486 }
    +
    487
    +
    493 reference
    +
    494 back() noexcept {
    +
    495 return operator[](size() - 1);
    +
    496 }
    +
    497
    +
    503 const_reference
    +
    504 back() const noexcept {
    +
    505 return operator[](size() - 1);
    +
    506 }
    +
    507
    +
    508 basic_sstring substr(size_t from, size_t len = npos) const {
    +
    509 if (from > size()) {
    +
    510 internal::throw_sstring_out_of_range();
    +
    511 }
    +
    512 if (len > size() - from) {
    +
    513 len = size() - from;
    +
    514 }
    +
    515 if (len == 0) {
    +
    516 return "";
    +
    517 }
    +
    518 return { str() + from , len };
    +
    519 }
    +
    520
    +
    521 const char_type& at(size_t pos) const {
    +
    522 if (pos >= size()) {
    +
    523 internal::throw_sstring_out_of_range();
    +
    524 }
    +
    525 return *(str() + pos);
    +
    526 }
    +
    527
    +
    528 char_type& at(size_t pos) {
    +
    529 if (pos >= size()) {
    +
    530 internal::throw_sstring_out_of_range();
    +
    531 }
    +
    532 return *(str() + pos);
    +
    533 }
    +
    534
    +
    535 bool empty() const noexcept {
    +
    536 return u.internal.size == 0;
    +
    537 }
    +
    538
    +
    539 // Deprecated March 2020.
    +
    540 [[deprecated("Use = {}")]]
    +
    541 void reset() noexcept {
    +
    542 if (is_external()) {
    +
    543 std::free(u.external.str);
    +
    544 }
    +
    545 u.internal.size = 0;
    +
    546 if (NulTerminate) {
    +
    547 u.internal.str[0] = '\0';
    +
    548 }
    +
    549 }
    +
    550 temporary_buffer<char_type> release() && {
    +
    551 if (is_external()) {
    +
    552 auto ptr = u.external.str;
    +
    553 auto size = u.external.size;
    +
    554 u.external.str = nullptr;
    +
    555 u.external.size = 0;
    +
    556 return temporary_buffer<char_type>(ptr, size, make_free_deleter(ptr));
    +
    557 } else {
    +
    558 auto buf = temporary_buffer<char_type>(u.internal.size);
    +
    559 std::copy(u.internal.str, u.internal.str + u.internal.size, buf.get_write());
    +
    560 u.internal.size = 0;
    +
    561 if (NulTerminate) {
    +
    562 u.internal.str[0] = '\0';
    +
    563 }
    +
    564 return buf;
    +
    565 }
    +
    566 }
    +
    567 int compare(std::basic_string_view<char_type, traits_type> x) const noexcept {
    +
    568 auto n = traits_type::compare(begin(), x.begin(), std::min(size(), x.size()));
    +
    569 if (n != 0) {
    +
    570 return n;
    +
    571 }
    +
    572 if (size() < x.size()) {
    +
    573 return -1;
    +
    574 } else if (size() > x.size()) {
    +
    575 return 1;
    +
    576 } else {
    +
    577 return 0;
    +
    578 }
    +
    579 }
    +
    580
    +
    581 int compare(size_t pos, size_t sz, std::basic_string_view<char_type, traits_type> x) const {
    +
    582 if (pos > size()) {
    +
    583 internal::throw_sstring_out_of_range();
    +
    584 }
    +
    585
    +
    586 sz = std::min(size() - pos, sz);
    +
    587 auto n = traits_type::compare(begin() + pos, x.begin(), std::min(sz, x.size()));
    +
    588 if (n != 0) {
    +
    589 return n;
    +
    590 }
    +
    591 if (sz < x.size()) {
    +
    592 return -1;
    +
    593 } else if (sz > x.size()) {
    +
    594 return 1;
    +
    595 } else {
    +
    596 return 0;
    +
    597 }
    +
    598 }
    +
    599
    +
    600 constexpr bool starts_with(std::basic_string_view<char_type, traits_type> sv) const noexcept {
    +
    601 return size() >= sv.size() && compare(0, sv.size(), sv) == 0;
    +
    602 }
    +
    603
    +
    604 constexpr bool starts_with(char_type c) const noexcept {
    +
    605 return !empty() && traits_type::eq(front(), c);
    +
    606 }
    +
    607
    +
    608 constexpr bool starts_with(const char_type* s) const noexcept {
    +
    609 return starts_with(std::basic_string_view<char_type, traits_type>(s));
    +
    610 }
    +
    611
    +
    612 constexpr bool ends_with(std::basic_string_view<char_type, traits_type> sv) const noexcept {
    +
    613 return size() >= sv.size() && compare(size() - sv.size(), npos, sv) == 0;
    +
    614 }
    +
    615
    +
    616 constexpr bool ends_with(char_type c) const noexcept {
    +
    617 return !empty() && traits_type::eq(back(), c);
    +
    618 }
    +
    619
    +
    620 constexpr bool ends_with(const char_type* s) const noexcept {
    +
    621 return ends_with(std::basic_string_view<char_type, traits_type>(s));
    +
    622 }
    +
    623
    +
    624 constexpr bool contains(std::basic_string_view<char_type, traits_type> sv) const noexcept {
    +
    625 return find(sv) != npos;
    +
    626 }
    +
    627
    +
    628 constexpr bool contains(char_type c) const noexcept {
    +
    629 return find(c) != npos;
    +
    630 }
    +
    631
    +
    632 constexpr bool contains(const char_type* s) const noexcept {
    +
    633 return find(s) != npos;
    +
    634 }
    +
    635
    +
    636 void swap(basic_sstring& x) noexcept {
    +
    637 contents tmp;
    +
    638 tmp = x.u;
    +
    639 x.u = u;
    +
    640 u = tmp;
    +
    641 }
    +
    642 char_type* data() noexcept {
    +
    643 return str();
    +
    644 }
    +
    645 const char_type* data() const noexcept {
    +
    646 return str();
    +
    647 }
    +
    648 const char_type* c_str() const noexcept {
    +
    649 return str();
    +
    650 }
    +
    651 const char_type* begin() const noexcept { return str(); }
    +
    652 const char_type* end() const noexcept { return str() + size(); }
    +
    653 const char_type* cbegin() const noexcept { return str(); }
    +
    654 const char_type* cend() const noexcept { return str() + size(); }
    +
    655 char_type* begin() noexcept { return str(); }
    +
    656 char_type* end() noexcept { return str() + size(); }
    +
    657 bool operator==(const basic_sstring& x) const noexcept {
    +
    658 return size() == x.size() && std::equal(begin(), end(), x.begin());
    +
    659 }
    +
    660 bool operator!=(const basic_sstring& x) const noexcept {
    +
    661 return !operator==(x);
    +
    662 }
    +
    663 constexpr bool operator==(const std::basic_string<char_type> x) const noexcept {
    +
    664 return compare(x) == 0;
    +
    665 }
    +
    666 constexpr bool operator==(const char_type* x) const noexcept {
    +
    667 return compare(x) == 0;
    +
    668 }
    +
    669#if __cpp_lib_three_way_comparison
    +
    670 constexpr std::strong_ordering operator<=>(const auto& x) const noexcept {
    +
    671 return compare(x) <=> 0;
    +
    672 }
    +
    673#else
    +
    674 bool operator<(const basic_sstring& x) const noexcept {
    +
    675 return compare(x) < 0;
    +
    676 }
    +
    677#endif
    +
    678 basic_sstring operator+(const basic_sstring& x) const {
    +
    679 basic_sstring ret(initialized_later(), size() + x.size());
    +
    680 std::copy(begin(), end(), ret.begin());
    +
    681 std::copy(x.begin(), x.end(), ret.begin() + size());
    +
    682 return ret;
    +
    683 }
    +
    684 basic_sstring& operator+=(const basic_sstring& x) {
    +
    685 return *this = *this + x;
    +
    686 }
    +
    687 char_type& operator[](size_type pos) noexcept {
    +
    688 return str()[pos];
    +
    689 }
    +
    690 const char_type& operator[](size_type pos) const noexcept {
    +
    691 return str()[pos];
    +
    692 }
    +
    693
    +
    694 operator std::basic_string_view<char_type>() const noexcept {
    +
    695 // we assume that std::basic_string_view<char_type>(str(), size())
    +
    696 // won't throw, although it is not specified as noexcept in
    +
    697 // https://en.cppreference.com/w/cpp/string/basic_string_view/basic_string_view
    +
    698 // at this time (C++20).
    +
    699 //
    +
    700 // This is similar to std::string operator std::basic_string_view:
    +
    701 // https://en.cppreference.com/w/cpp/string/basic_string/operator_basic_string_view
    +
    702 // that is specified as noexcept too.
    +
    703 static_assert(noexcept(std::basic_string_view<char_type>(str(), size())));
    +
    704 return std::basic_string_view<char_type>(str(), size());
    +
    705 }
    +
    706};
    +
    707
    +
    708namespace internal {
    +
    709template <class T> struct is_sstring : std::false_type {};
    +
    710template <typename char_type, typename Size, Size max_size, bool NulTerminate>
    +
    711struct is_sstring<basic_sstring<char_type, Size, max_size, NulTerminate>> : std::true_type {};
    +
    712}
    +
    713
    +
    714SEASTAR_MODULE_EXPORT
    +
    715template <typename string_type = sstring>
    +
    716string_type uninitialized_string(size_t size) {
    +
    717 if constexpr (internal::is_sstring<string_type>::value) {
    +
    718 return string_type(typename string_type::initialized_later(), size);
    +
    719 } else {
    +
    720 string_type ret;
    +
    721#ifdef __cpp_lib_string_resize_and_overwrite
    +
    722 ret.resize_and_overwrite(size, [](typename string_type::value_type*, typename string_type::size_type n) { return n; });
    +
    723#else
    +
    724 ret.resize(size);
    +
    725#endif
    +
    726 return ret;
    +
    727 }
    +
    728}
    +
    729
    +
    730SEASTAR_MODULE_EXPORT
    +
    731template <typename char_type, typename size_type, size_type Max, size_type N, bool NulTerminate>
    +
    732inline
    +
    733basic_sstring<char_type, size_type, Max, NulTerminate>
    +
    734operator+(const char(&s)[N], const basic_sstring<char_type, size_type, Max, NulTerminate>& t) {
    +
    735 using sstring = basic_sstring<char_type, size_type, Max, NulTerminate>;
    +
    736 // don't copy the terminating NUL character
    +
    737 sstring ret(typename sstring::initialized_later(), N-1 + t.size());
    +
    738 auto p = std::copy(std::begin(s), std::end(s)-1, ret.begin());
    +
    739 std::copy(t.begin(), t.end(), p);
    +
    740 return ret;
    +
    741}
    +
    742
    +
    743template <typename T>
    +
    744static inline
    +
    745size_t constexpr str_len(const T& s) {
    +
    746 return std::string_view(s).size();
    +
    747}
    +
    748
    +
    749SEASTAR_MODULE_EXPORT
    +
    750template <typename char_type, typename size_type, size_type max_size>
    +
    751inline
    +
    752void swap(basic_sstring<char_type, size_type, max_size>& x,
    +
    753 basic_sstring<char_type, size_type, max_size>& y) noexcept
    +
    754{
    +
    755 return x.swap(y);
    +
    756}
    +
    757
    +
    758SEASTAR_MODULE_EXPORT
    +
    759template <typename char_type, typename size_type, size_type max_size, bool NulTerminate, typename char_traits>
    +
    760inline
    +
    761std::basic_ostream<char_type, char_traits>&
    +
    762operator<<(std::basic_ostream<char_type, char_traits>& os,
    +
    763 const basic_sstring<char_type, size_type, max_size, NulTerminate>& s) {
    +
    764 return os.write(s.begin(), s.size());
    +
    765}
    +
    766
    +
    767SEASTAR_MODULE_EXPORT
    +
    768template <typename char_type, typename size_type, size_type max_size, bool NulTerminate, typename char_traits>
    +
    769inline
    +
    770std::basic_istream<char_type, char_traits>&
    +
    771operator>>(std::basic_istream<char_type, char_traits>& is,
    +
    772 basic_sstring<char_type, size_type, max_size, NulTerminate>& s) {
    +
    773 std::string tmp;
    +
    774 is >> tmp;
    +
    775 s = tmp;
    +
    776 return is;
    +
    777}
    +
    778
    +
    779}
    +
    780
    +
    781namespace std {
    +
    782
    +
    783SEASTAR_MODULE_EXPORT
    +
    784template <typename char_type, typename size_type, size_type max_size, bool NulTerminate>
    +
    785struct hash<seastar::basic_sstring<char_type, size_type, max_size, NulTerminate>> {
    + +
    787 return std::hash<std::basic_string_view<char_type>>()(s);
    +
    788 }
    +
    789};
    +
    790
    +
    791}
    +
    792
    +
    793namespace seastar {
    +
    794
    +
    795template <typename T>
    +
    796static inline
    +
    797void copy_str_to(char*& dst, const T& s) {
    +
    798 std::string_view v(s);
    +
    799 dst = std::copy(v.begin(), v.end(), dst);
    +
    800}
    +
    801
    +
    802template <typename String = sstring, typename... Args>
    +
    803static String make_sstring(Args&&... args)
    +
    804{
    +
    805 String ret = uninitialized_string<String>((str_len(args) + ...));
    +
    806 auto dst = ret.data();
    +
    807 (copy_str_to(dst, args), ...);
    +
    808 return ret;
    +
    809}
    +
    810
    +
    811namespace internal {
    +
    812template <typename string_type, typename T>
    +
    813string_type to_sstring(T value) {
    +
    814 auto size = fmt::formatted_size("{}", value);
    +
    815 auto formatted = uninitialized_string<string_type>(size);
    +
    816 fmt::format_to(formatted.data(), "{}", value);
    +
    817 return formatted;
    +
    818}
    +
    819
    +
    820template <typename string_type>
    +
    821string_type to_sstring(const char* value) {
    +
    822 return string_type(value);
    +
    823}
    +
    824
    +
    825template <typename string_type>
    +
    826string_type to_sstring(sstring value) {
    +
    827 return value;
    +
    828}
    +
    829
    +
    830template <typename string_type>
    +
    831string_type to_sstring(const temporary_buffer<char>& buf) {
    +
    832 return string_type(buf.get(), buf.size());
    +
    833}
    +
    834}
    +
    835
    +
    836template <typename string_type = sstring, typename T>
    +
    837string_type to_sstring(T value) {
    +
    838 return internal::to_sstring<string_type>(value);
    +
    839}
    +
    840}
    +
    841
    +
    842#ifdef SEASTAR_DEPRECATED_OSTREAM_FORMATTERS
    +
    843
    +
    844namespace std {
    +
    845
    +
    846SEASTAR_MODULE_EXPORT
    +
    847template <typename T>
    +
    848[[deprecated("Use {fmt} instead")]]
    +
    849inline
    +
    850std::ostream& operator<<(std::ostream& os, const std::vector<T>& v) {
    +
    851 bool first = true;
    +
    852 os << "{";
    +
    853 for (auto&& elem : v) {
    +
    854 if (!first) {
    +
    855 os << ", ";
    +
    856 } else {
    +
    857 first = false;
    +
    858 }
    +
    859 os << elem;
    +
    860 }
    +
    861 os << "}";
    +
    862 return os;
    +
    863}
    +
    864
    +
    865SEASTAR_MODULE_EXPORT
    +
    866template <typename Key, typename T, typename Hash, typename KeyEqual, typename Allocator>
    +
    867[[deprecated("Use {fmt} instead")]]
    +
    868std::ostream& operator<<(std::ostream& os, const std::unordered_map<Key, T, Hash, KeyEqual, Allocator>& v) {
    +
    869 bool first = true;
    +
    870 os << "{";
    +
    871 for (auto&& elem : v) {
    +
    872 if (!first) {
    +
    873 os << ", ";
    +
    874 } else {
    +
    875 first = false;
    +
    876 }
    +
    877 os << "{" << elem.first << " -> " << elem.second << "}";
    +
    878 }
    +
    879 os << "}";
    +
    880 return os;
    +
    881}
    +
    882}
    +
    883
    +
    884#endif
    +
    885
    +
    886#if FMT_VERSION >= 110000
    +
    887
    +
    888template <typename char_type, typename Size, Size max_size, bool NulTerminate>
    +
    889struct fmt::range_format_kind<seastar::basic_sstring<char_type, Size, max_size, NulTerminate>, char_type> : std::integral_constant<fmt::range_format, fmt::range_format::disabled>
    +
    890{};
    +
    891
    +
    892#endif
    +
    893
    +
    894#if FMT_VERSION >= 90000
    +
    895
    +
    896// Due to https://github.com/llvm/llvm-project/issues/68849, we inherit
    +
    897// from formatter<string_view> publicly rather than privately
    +
    898
    +
    899SEASTAR_MODULE_EXPORT
    +
    900template <typename char_type, typename Size, Size max_size, bool NulTerminate>
    +
    901struct fmt::formatter<seastar::basic_sstring<char_type, Size, max_size, NulTerminate>>
    +
    902 : public fmt::formatter<basic_string_view<char_type>> {
    +
    903 using format_as_t = basic_string_view<char_type>;
    +
    904 using base = fmt::formatter<format_as_t>;
    +
    905 template <typename FormatContext>
    +
    906 auto format(const ::seastar::basic_sstring<char_type, Size, max_size, NulTerminate>& s, FormatContext& ctx) const {
    +
    907 return base::format(format_as_t{s.c_str(), s.size()}, ctx);
    +
    908 }
    +
    909};
    +
    910
    +
    911#endif
    +
    Definition: sstring.hh:76
    +
    reference back() noexcept
    Definition: sstring.hh:494
    +
    basic_sstring & replace(size_type pos, size_type n1, const char_type *s, size_type n2)
    Definition: sstring.hh:397
    +
    const_reference back() const noexcept
    Definition: sstring.hh:504
    +
    const_reference front() const noexcept
    Definition: sstring.hh:483
    +
    void insert(const_iterator p, InputIterator beg, InputIterator end)
    Definition: sstring.hh:461
    +
    void resize(size_t n, const char_type c='\0')
    Definition: sstring.hh:373
    +
    reference front() noexcept
    Definition: sstring.hh:472
    +
    basic_sstring & append(const char_type *s, size_t n)
    Definition: sstring.hh:344
    +
    size_t find_last_of(char_type c, size_t pos=npos) const noexcept
    Definition: sstring.hh:321
    +
    void resize_and_overwrite(size_t n, Operation op)
    Definition: sstring.hh:359
    + +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    sstring format(const char *fmt, A &&... a)
    Definition: print.hh:143
    +
    STL namespace.
    +
    ostream & operator<<(ostream &os, const seastar::lazy_eval< Func > &lf)
    Definition: lazy.hh:131
    + + +
    + + + + diff --git a/master/stack_8hh_source.html b/master/stack_8hh_source.html new file mode 100644 index 000000000..5158d69c1 --- /dev/null +++ b/master/stack_8hh_source.html @@ -0,0 +1,193 @@ + + + + + + + +Seastar: seastar/net/stack.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    stack.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2015 Cloudius Systems
    +
    20 */
    +
    21#pragma once
    +
    22
    +
    23#include <chrono>
    +
    24#include <seastar/net/api.hh>
    +
    25#include <seastar/core/internal/api-level.hh>
    +
    26#include <seastar/core/memory.hh>
    +
    27
    +
    28namespace seastar {
    +
    29
    +
    30namespace net {
    +
    31
    +
    33class connected_socket_impl {
    +
    34public:
    +
    35 virtual ~connected_socket_impl() {}
    +
    36 virtual data_source source() = 0;
    +
    37 virtual data_source source(connected_socket_input_stream_config csisc);
    +
    38 virtual data_sink sink() = 0;
    +
    39 virtual void shutdown_input() = 0;
    +
    40 virtual void shutdown_output() = 0;
    +
    41 virtual void set_nodelay(bool nodelay) = 0;
    +
    42 virtual bool get_nodelay() const = 0;
    +
    43 virtual void set_keepalive(bool keepalive) = 0;
    +
    44 virtual bool get_keepalive() const = 0;
    +
    45 virtual void set_keepalive_parameters(const keepalive_params&) = 0;
    +
    46 virtual keepalive_params get_keepalive_parameters() const = 0;
    +
    47 virtual void set_sockopt(int level, int optname, const void* data, size_t len) = 0;
    +
    48 virtual int get_sockopt(int level, int optname, void* data, size_t len) const = 0;
    +
    49 virtual socket_address local_address() const noexcept = 0;
    +
    50 virtual socket_address remote_address() const noexcept = 0;
    +
    51 virtual future<> wait_input_shutdown() = 0;
    +
    52};
    +
    53
    +
    54class socket_impl {
    +
    55public:
    +
    56 socket_impl() = default;
    +
    57 socket_impl(const socket_impl&) = delete;
    +
    58 socket_impl(socket_impl&&) = default;
    +
    59 virtual ~socket_impl() {}
    +
    60 virtual future<connected_socket> connect(socket_address sa, socket_address local, transport proto = transport::TCP) = 0;
    +
    61 virtual void set_reuseaddr(bool reuseaddr) = 0;
    +
    62 virtual bool get_reuseaddr() const = 0;
    +
    63 virtual void shutdown() = 0;
    +
    64};
    +
    65
    +
    66
    +
    67class server_socket_impl {
    +
    68public:
    +
    69 virtual ~server_socket_impl() {}
    +
    70 virtual future<accept_result> accept() = 0;
    +
    71 virtual void abort_accept() = 0;
    +
    72 virtual socket_address local_address() const = 0;
    +
    73};
    +
    74
    +
    75class datagram_channel_impl {
    +
    76public:
    +
    77 virtual ~datagram_channel_impl() {}
    +
    78 virtual socket_address local_address() const = 0;
    +
    79 virtual future<datagram> receive() = 0;
    +
    80 virtual future<> send(const socket_address& dst, const char* msg) = 0;
    +
    81 virtual future<> send(const socket_address& dst, packet p) = 0;
    +
    82 virtual void shutdown_input() = 0;
    +
    83 virtual void shutdown_output() = 0;
    +
    84 virtual bool is_closed() const = 0;
    +
    85 virtual void close() = 0;
    +
    86};
    +
    87
    +
    88using udp_channel_impl = datagram_channel_impl;
    +
    89
    +
    90class network_interface_impl {
    +
    91protected:
    +
    92 network_interface_impl() = default;
    +
    93 network_interface_impl(const network_interface_impl&) = default;
    +
    94 virtual ~network_interface_impl() {}
    +
    95public:
    +
    96 virtual uint32_t index() const = 0;
    +
    97 virtual uint32_t mtu() const = 0;
    +
    98
    +
    99 virtual const sstring& name() const = 0;
    +
    100 virtual const sstring& display_name() const = 0;
    +
    101 virtual const std::vector<net::inet_address>& addresses() const = 0;
    +
    102 virtual const std::vector<uint8_t> hardware_address() const = 0;
    +
    103
    +
    104 virtual bool is_loopback() const = 0;
    +
    105 virtual bool is_virtual() const = 0;
    +
    106 virtual bool is_up() const = 0;
    +
    107 virtual bool supports_ipv6() const = 0;
    +
    108};
    +
    109
    +
    111
    +
    112}
    +
    113
    +
    114}
    +
    future< connected_socket > connect(socket_address sa)
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/stall__detector_8hh_source.html b/master/stall__detector_8hh_source.html new file mode 100644 index 000000000..4c717924b --- /dev/null +++ b/master/stall__detector_8hh_source.html @@ -0,0 +1,268 @@ + + + + + + + +Seastar: seastar/core/internal/stall_detector.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    stall_detector.hh
    +
    +
    +
    1
    +
    2/*
    +
    3 * This file is open source software, licensed to you under the terms
    +
    4 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    5 * distributed with this work for additional information regarding copyright
    +
    6 * ownership. You may not use this file except in compliance with the License.
    +
    7 *
    +
    8 * You may obtain a copy of the License at
    +
    9 *
    +
    10 * http://www.apache.org/licenses/LICENSE-2.0
    +
    11 *
    +
    12 * Unless required by applicable law or agreed to in writing,
    +
    13 * software distributed under the License is distributed on an
    +
    14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    15 * KIND, either express or implied. See the License for the
    +
    16 * specific language governing permissions and limitations
    +
    17 * under the License.
    +
    18 */
    +
    19/*
    +
    20 * Copyright (C) 2018 ScyllaDB
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#ifndef SEASTAR_MODULE
    +
    26#include <signal.h>
    +
    27#include <atomic>
    +
    28#include <limits>
    +
    29#include <chrono>
    +
    30#include <functional>
    +
    31#include <memory>
    +
    32#include <linux/perf_event.h>
    +
    33#endif
    +
    34#include <seastar/core/posix.hh>
    + + +
    37#include <seastar/util/modules.hh>
    +
    38
    +
    39namespace seastar {
    +
    40
    +
    41class reactor;
    +
    42class thread_cputime_clock;
    +
    43
    +
    44namespace internal {
    +
    45
    +
    46struct cpu_stall_detector_config {
    +
    47 std::chrono::duration<double> threshold = std::chrono::seconds(2);
    +
    48 unsigned stall_detector_reports_per_minute = 1;
    +
    49 float slack = 0.3; // fraction of threshold that we're allowed to overshoot
    +
    50 bool oneline = true; // print a simplified backtrace on a single line
    +
    51 std::function<void ()> report; // alternative reporting function for tests
    +
    52};
    +
    53
    +
    54// Detects stalls in continuations that run for too long
    +
    55class cpu_stall_detector {
    +
    56protected:
    +
    57 std::atomic<uint64_t> _last_tasks_processed_seen{};
    +
    58 unsigned _stall_detector_reports_per_minute;
    +
    59 std::atomic<uint64_t> _stall_detector_missed_ticks = { 0 };
    +
    60 unsigned _reported = 0;
    +
    61 unsigned _total_reported = 0;
    +
    62 unsigned _max_reports_per_minute;
    +
    63 unsigned _shard_id;
    +
    64 unsigned _thread_id;
    +
    65 unsigned _report_at{};
    +
    66 sched_clock::time_point _minute_mark{};
    +
    67 sched_clock::time_point _rearm_timer_at{};
    +
    68 sched_clock::time_point _run_started_at{};
    +
    69 sched_clock::duration _threshold;
    +
    70 sched_clock::duration _slack;
    +
    71 cpu_stall_detector_config _config;
    + +
    73 friend reactor;
    +
    74 virtual bool is_spurious_signal() {
    +
    75 return false;
    +
    76 }
    +
    77 virtual void maybe_report_kernel_trace() {}
    +
    78private:
    +
    79 void maybe_report();
    +
    80 virtual void arm_timer() = 0;
    +
    81 void report_suppressions(sched_clock::time_point now);
    +
    82 void reset_suppression_state(sched_clock::time_point now);
    +
    83public:
    +
    84 using clock_type = thread_cputime_clock;
    +
    85public:
    +
    86 explicit cpu_stall_detector(cpu_stall_detector_config cfg = {});
    +
    87 virtual ~cpu_stall_detector() = default;
    +
    88 static int signal_number() { return SIGRTMIN + 1; }
    +
    89 void start_task_run(sched_clock::time_point now);
    +
    90 void end_task_run(sched_clock::time_point now);
    +
    91 void generate_trace();
    +
    92 void update_config(cpu_stall_detector_config cfg);
    +
    93 cpu_stall_detector_config get_config() const;
    +
    94 void on_signal();
    +
    95 virtual void start_sleep() = 0;
    +
    96 void end_sleep();
    +
    97};
    +
    98
    +
    99class cpu_stall_detector_posix_timer : public cpu_stall_detector {
    +
    100 timer_t _timer;
    +
    101public:
    +
    102 explicit cpu_stall_detector_posix_timer(cpu_stall_detector_config cfg = {});
    +
    103 virtual ~cpu_stall_detector_posix_timer() override;
    +
    104private:
    +
    105 virtual void arm_timer() override;
    +
    106 virtual void start_sleep() override;
    +
    107};
    +
    108
    +
    109class cpu_stall_detector_linux_perf_event : public cpu_stall_detector {
    +
    110 file_desc _fd;
    +
    111 bool _enabled = false;
    +
    112 uint64_t _current_period = 0;
    +
    113 struct ::perf_event_mmap_page* _mmap;
    +
    114 char* _data_area;
    +
    115 size_t _data_area_mask;
    +
    116 // after the detector has been armed (i.e., _enabled is true), this
    +
    117 // is the moment at or after which the next signal is expected to occur
    +
    118 // and can be used for detecting spurious signals
    +
    119 sched_clock::time_point _next_signal_time{};
    +
    120private:
    +
    121 class data_area_reader {
    +
    122 cpu_stall_detector_linux_perf_event& _p;
    +
    123 const char* _data_area;
    +
    124 size_t _data_area_mask;
    +
    125 uint64_t _head;
    +
    126 uint64_t _tail;
    +
    127 public:
    +
    128 explicit data_area_reader(cpu_stall_detector_linux_perf_event& p)
    +
    129 : _p(p)
    +
    130 , _data_area(p._data_area)
    +
    131 , _data_area_mask(p._data_area_mask) {
    +
    132 _head = _p._mmap->data_head;
    +
    133 _tail = _p._mmap->data_tail;
    +
    134 std::atomic_thread_fence(std::memory_order_acquire); // required after reading data_head
    +
    135 }
    +
    136 ~data_area_reader() {
    +
    137 std::atomic_thread_fence(std::memory_order_release); // not documented, but probably required before writing data_tail
    +
    138 _p._mmap->data_tail = _tail;
    +
    139 }
    +
    140 uint64_t read_u64() {
    +
    141 uint64_t ret;
    +
    142 // We cannot wrap around if the 8-byte unit is aligned
    +
    143 std::copy_n(_data_area + (_tail & _data_area_mask), 8, reinterpret_cast<char*>(&ret));
    +
    144 _tail += 8;
    +
    145 return ret;
    +
    146 }
    +
    147 template <typename S>
    +
    148 S read_struct() {
    +
    149 static_assert(sizeof(S) % 8 == 0);
    +
    150 S ret;
    +
    151 char* p = reinterpret_cast<char*>(&ret);
    +
    152 for (size_t i = 0; i != sizeof(S); i += 8) {
    +
    153 uint64_t w = read_u64();
    +
    154 std::copy_n(reinterpret_cast<const char*>(&w), 8, p + i);
    +
    155 }
    +
    156 return ret;
    +
    157 }
    +
    158 void skip(uint64_t bytes_to_skip) {
    +
    159 _tail += bytes_to_skip;
    +
    160 }
    +
    161 // skip all the remaining data in the buffer, as-if calling read until
    +
    162 // have_data returns false (but much faster)
    +
    163 void skip_all() {
    +
    164 _tail = _head;
    +
    165 }
    +
    166 bool have_data() const {
    +
    167 return _head != _tail;
    +
    168 }
    +
    169 };
    +
    170public:
    +
    171 static std::unique_ptr<cpu_stall_detector_linux_perf_event> try_make(cpu_stall_detector_config cfg = {});
    +
    172 explicit cpu_stall_detector_linux_perf_event(file_desc fd, cpu_stall_detector_config cfg = {});
    +
    173 ~cpu_stall_detector_linux_perf_event();
    +
    174 virtual void arm_timer() override;
    +
    175 virtual void start_sleep() override;
    +
    176 virtual bool is_spurious_signal() override;
    +
    177 virtual void maybe_report_kernel_trace() override;
    +
    178};
    +
    179
    +
    180std::unique_ptr<cpu_stall_detector> make_cpu_stall_detector(cpu_stall_detector_config cfg = {});
    +
    181
    +
    182}
    +
    183}
    +
    holds the metric definition.
    Definition: metrics_registration.hh:94
    +
    future now()
    Returns a ready future.
    Definition: later.hh:35
    +
    holds the metric_groups definition needed by class that reports metrics
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    + + +
    + + + + diff --git a/master/stall__sampler_8hh_source.html b/master/stall__sampler_8hh_source.html new file mode 100644 index 000000000..d9133811c --- /dev/null +++ b/master/stall__sampler_8hh_source.html @@ -0,0 +1,130 @@ + + + + + + + +Seastar: seastar/core/stall_sampler.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    stall_sampler.hh
    +
    +
    +
    1/*
    +
    2 * Copyright (C) 2018 ScyllaDB
    +
    3 */
    +
    4
    +
    5/*
    +
    6 * This file is open source software, licensed to you under the terms
    +
    7 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    8 * distributed with this work for additional information regarding copyright
    +
    9 * ownership. You may not use this file except in compliance with the License.
    +
    10 *
    +
    11 * You may obtain a copy of the License at
    +
    12 *
    +
    13 * http://www.apache.org/licenses/LICENSE-2.0
    +
    14 *
    +
    15 * Unless required by applicable law or agreed to in writing,
    +
    16 * software distributed under the License is distributed on an
    +
    17 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    18 * KIND, either express or implied. See the License for the
    +
    19 * specific language governing permissions and limitations
    +
    20 * under the License.
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#include <seastar/core/future.hh>
    +
    26#include <seastar/util/noncopyable_function.hh>
    +
    27
    +
    28#include <iosfwd>
    +
    29
    +
    30// Instrumentation to detect context switches during reactor execution
    +
    31// and associated stall time, intended for use in tests
    +
    32
    +
    33namespace seastar {
    +
    34
    +
    35namespace internal {
    +
    36
    +
    37struct stall_report {
    +
    38 uint64_t kernel_stalls;
    +
    39 sched_clock::duration run_wall_time; // excludes sleeps
    +
    40 sched_clock::duration stall_time;
    +
    41};
    +
    42
    +
    45future<stall_report> report_reactor_stalls(noncopyable_function<future<> ()> uut);
    +
    46
    +
    47std::ostream& operator<<(std::ostream& os, const stall_report& sr);
    +
    48
    +
    49}
    +
    50
    +
    51}
    +
    52
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/std-compat_8hh_source.html b/master/std-compat_8hh_source.html new file mode 100644 index 000000000..3959eaa88 --- /dev/null +++ b/master/std-compat_8hh_source.html @@ -0,0 +1,155 @@ + + + + + + + +Seastar: seastar/util/std-compat.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std-compat.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2018 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/util/modules.hh>
    +
    25
    +
    26#ifndef SEASTAR_MODULE
    +
    27
    +
    28#if __has_include(<memory_resource>)
    +
    29#include <memory_resource>
    +
    30#else
    +
    31#include <experimental/memory_resource>
    +
    32namespace std::pmr {
    +
    33 using namespace std::experimental::pmr;
    +
    34}
    +
    35#endif
    +
    36
    +
    37// Defining SEASTAR_ASAN_ENABLED in here is a bit of a hack, but
    +
    38// convenient since it is build system independent and in practice
    +
    39// everything includes this header.
    +
    40
    +
    41#ifndef __has_feature
    +
    42#define __has_feature(x) 0
    +
    43#endif
    +
    44
    +
    45// clang uses __has_feature, gcc defines __SANITIZE_ADDRESS__
    +
    46#if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
    +
    47#define SEASTAR_ASAN_ENABLED
    +
    48#endif
    +
    49
    +
    50#if __has_include(<source_location>)
    +
    51#include <source_location>
    +
    52#endif
    +
    53
    +
    54#if defined(__cpp_lib_source_location) && !defined(SEASTAR_BROKEN_SOURCE_LOCATION)
    +
    55// good
    +
    56#elif __has_include(<experimental/source_location>) && !defined(SEASTAR_BROKEN_SOURCE_LOCATION)
    +
    57#include <experimental/source_location>
    +
    58#else
    +
    59#include <seastar/util/source_location-compat.hh>
    +
    60#endif
    +
    61
    +
    62#endif // !defined(SEASTAR_MODULE)
    +
    63
    +
    64namespace seastar::compat {
    +
    65SEASTAR_MODULE_EXPORT_BEGIN
    +
    66
    +
    67#if defined(__cpp_lib_source_location) && !defined(SEASTAR_BROKEN_SOURCE_LOCATION)
    +
    68using source_location = std::source_location;
    +
    69#elif __has_include(<experimental/source_location>) && !defined(SEASTAR_BROKEN_SOURCE_LOCATION)
    +
    70using source_location = std::experimental::source_location;
    +
    71#else
    +
    72using source_location = seastar::internal::source_location;
    +
    73#endif
    +
    74
    +
    75SEASTAR_MODULE_EXPORT_END
    +
    76}
    +
    + + + + diff --git a/master/stream_8hh_source.html b/master/stream_8hh_source.html new file mode 100644 index 000000000..5d65f91e0 --- /dev/null +++ b/master/stream_8hh_source.html @@ -0,0 +1,263 @@ + + + + + + + +Seastar: seastar/core/stream.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    stream.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/future.hh>
    +
    25#include <seastar/util/modules.hh>
    +
    26#ifndef SEASTAR_MODULE
    +
    27#include <exception>
    +
    28#include <cassert>
    +
    29#endif
    +
    30
    +
    31namespace seastar {
    +
    32
    +
    33SEASTAR_MODULE_EXPORT_BEGIN
    +
    34
    +
    35// A stream/subscription pair is similar to a promise/future pair,
    +
    36// but apply to a sequence of values instead of a single value.
    +
    37//
    +
    38// A stream<> is the producer side. It may call produce() as long
    +
    39// as the future<> returned from the previous invocation is ready.
    +
    40// To signify no more data is available, call close().
    +
    41//
    +
    42// A subscription<> is the consumer side. It is created by a call
    +
    43// to stream::listen(). Calling subscription::start(),
    +
    44// which registers the data processing callback, starts processing
    +
    45// events. It may register for end-of-stream notifications by
    +
    46// chaining the when_done() future, which also delivers error
    +
    47// events (as exceptions).
    +
    48//
    +
    49// The consumer can pause generation of new data by returning
    +
    50// a non-ready future; when the future becomes ready, the producer
    +
    51// will resume processing.
    +
    52
    +
    53template <typename... T>
    +
    54class stream;
    +
    55
    +
    56template <typename... T>
    +
    57class subscription;
    +
    58
    +
    59template <typename... T>
    +
    60class stream {
    +
    61public:
    + +
    63
    +
    64private:
    +
    65 promise<> _done;
    +
    66 promise<> _ready;
    +
    67 next_fn _next;
    +
    68
    +
    72 void start(next_fn next) {
    +
    73 _next = std::move(next);
    +
    74 _ready.set_value();
    +
    75 }
    +
    76
    +
    77public:
    +
    78 stream() = default;
    +
    79 stream(const stream&) = delete;
    +
    80 stream(stream&&) = delete;
    +
    81 void operator=(const stream&) = delete;
    +
    82 void operator=(stream&&) = delete;
    +
    83
    +
    84 // Returns a subscription that reads value from this
    +
    85 // stream.
    +
    86 subscription<T...> listen() {
    +
    87 return subscription<T...>(this);
    +
    88 }
    +
    89
    +
    90 // Returns a subscription that reads value from this
    +
    91 // stream, and also sets up the listen function.
    +
    92 subscription<T...> listen(next_fn next) {
    +
    93 start(std::move(next));
    +
    94 return subscription<T...>(this);
    +
    95 }
    +
    96
    +
    97 // Becomes ready when the listener is ready to accept
    +
    98 // values. Call only once, when beginning to produce
    +
    99 // values.
    +
    100 future<> started() {
    +
    101 return _ready.get_future();
    +
    102 }
    +
    103
    +
    104 // Produce a value. Call only after started(), and after
    +
    105 // a previous produce() is ready.
    +
    106 future<> produce(T... data);
    +
    107
    +
    108 // End the stream. Call only after started(), and after
    +
    109 // a previous produce() is ready. No functions may be called
    +
    110 // after this.
    +
    111 void close() {
    +
    112 _done.set_value();
    +
    113 }
    +
    114
    +
    115 // Signal an error. Call only after started(), and after
    +
    116 // a previous produce() is ready. No functions may be called
    +
    117 // after this.
    +
    118 template <typename E>
    +
    119 void set_exception(E ex) {
    +
    120 _done.set_exception(ex);
    +
    121 }
    +
    122
    +
    123 friend class subscription<T...>;
    +
    124};
    +
    125
    +
    126template <typename... T>
    + +
    128 stream<T...>* _stream;
    +
    129 future<> _done;
    +
    130 explicit subscription(stream<T...>* s) : _stream(s), _done(s->_done.get_future()) {
    +
    131 }
    +
    132
    +
    133public:
    +
    134 using next_fn = typename stream<T...>::next_fn;
    +
    135 subscription(subscription&& x) : _stream(x._stream), _done(std::move(x._done)) {
    +
    136 x._stream = nullptr;
    +
    137 }
    +
    138
    +
    142 void start(next_fn next) {
    +
    143 return _stream->start(std::move(next));
    +
    144 }
    +
    145
    +
    146 // Becomes ready when the stream is empty, or when an error
    +
    147 // happens (in that case, an exception is held).
    +
    148 future<> done() {
    +
    149 return std::move(_done);
    +
    150 }
    +
    151
    +
    152 friend class stream<T...>;
    +
    153};
    +
    154SEASTAR_MODULE_EXPORT_END
    +
    155
    +
    156template <typename... T>
    +
    157inline
    +
    158future<>
    +
    159stream<T...>::produce(T... data) {
    +
    160 auto ret = futurize_invoke(_next, std::move(data)...);
    +
    161 if (ret.available() && !ret.failed()) {
    +
    162 // Native network stack depends on stream::produce() returning
    +
    163 // a ready future to push packets along without dropping. As
    +
    164 // a temporary workaround, special case a ready, unfailed future
    +
    165 // and return it immediately, so that then_wrapped(), below,
    +
    166 // doesn't convert a ready future to an unready one.
    +
    167 return ret;
    +
    168 }
    +
    169 return ret.then_wrapped([this] (auto&& f) {
    +
    170 try {
    +
    171 f.get();
    +
    172 } catch (...) {
    +
    173 _done.set_exception(std::current_exception());
    +
    174 // FIXME: tell the producer to stop producing
    +
    175 throw;
    +
    176 }
    +
    177 });
    +
    178}
    +
    179}
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    + +
    void set_value(A &&... a) noexcept
    Sets the promises value.
    Definition: future.hh:990
    +
    void set_exception(std::exception_ptr &&ex) noexcept
    Marks the promise as failed.
    Definition: future.hh:998
    +
    Definition: stream.hh:60
    +
    Definition: stream.hh:127
    +
    void start(next_fn next)
    Start receiving events from the stream.
    Definition: stream.hh:142
    +
    future< T > get_future() noexcept
    Gets the promise's associated future.
    Definition: future.hh:1926
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: noncopyable_function.hh:37
    + +
    + + + + diff --git a/master/string__utils_8hh_source.html b/master/string__utils_8hh_source.html new file mode 100644 index 000000000..33504b2aa --- /dev/null +++ b/master/string__utils_8hh_source.html @@ -0,0 +1,148 @@ + + + + + + + +Seastar: seastar/util/string_utils.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    string_utils.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2015 Cloudius Systems
    +
    20 */
    +
    21
    +
    22//
    +
    23// request.hpp
    +
    24// ~~~~~~~~~~~
    +
    25//
    +
    26// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
    +
    27//
    +
    28// Distributed under the Boost Software License, Version 1.0. (See accompanying
    +
    29// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
    +
    30
    +
    31#pragma once
    +
    32
    +
    33#ifndef SEASTAR_MODULE
    +
    34#include <cstring>
    +
    35#include <stdio.h>
    +
    36#endif
    +
    37
    +
    38#include <seastar/util/modules.hh>
    +
    39#include <seastar/core/sstring.hh>
    +
    40
    +
    41namespace seastar {
    +
    42
    +
    43namespace internal {
    +
    44
    +
    45SEASTAR_MODULE_EXPORT_BEGIN
    +
    46//
    +
    47// Collection of utilities for working with strings .
    +
    48//
    +
    49
    +
    50struct case_insensitive_cmp {
    +
    51 bool operator()(const sstring& s1, const sstring& s2) const {
    +
    52 return std::equal(s1.begin(), s1.end(), s2.begin(), s2.end(),
    +
    53 [](char a, char b) { return ::tolower(a) == ::tolower(b); });
    +
    54 }
    +
    55};
    +
    56
    +
    57struct case_insensitive_hash {
    +
    58 size_t operator()(sstring s) const {
    +
    59 std::transform(s.begin(), s.end(), s.begin(), ::tolower);
    +
    60 return std::hash<sstring>()(s);
    +
    61 }
    +
    62};
    +
    63
    +
    64SEASTAR_MODULE_EXPORT_END
    +
    65
    +
    66}
    +
    67
    +
    68}
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01T_01_4-members.html b/master/structfmt_1_1formatter_3_01T_01_4-members.html new file mode 100644 index 000000000..be414a1e7 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01T_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    fmt::formatter< T > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< T >, including all inherited members.

    + + +
    format(const T &e, fmt::format_context &ctx) const (defined in fmt::formatter< T >)fmt::formatter< T >inline
    + + + + diff --git a/master/structfmt_1_1formatter_3_01T_01_4.html b/master/structfmt_1_1formatter_3_01T_01_4.html new file mode 100644 index 000000000..bcfad7ce2 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01T_01_4.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: fmt::formatter< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    fmt::formatter< T > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for fmt::formatter< T >:
    +
    +
    + +
    + + + + +

    +Public Member Functions

    +auto format (const T &e, fmt::format_context &ctx) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01T_01_4.png b/master/structfmt_1_1formatter_3_01T_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..c904ab129a093e9490e3b1df8a0558fc7a8760bc GIT binary patch literal 666 zcmeAS@N?(olHy`uVBq!ia0vp^Yk)X_gBeI}-k;Y2q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0G(BA$Ln;{G&W)WUt;oX`t^fP(|6?=l z9UgqtD_c~t@{(Arq=SL&CWZAgX0ByY^UR*GX_AQJDX$#=eQD^b}Q`=IeEvmBMeyUy_{LQT9OwM{U#oNDP z1OMlyz0WSY^JizychBoDr+CUvHhtYU)B3fu^Yrf5ERo=ep$GQ*!RHF&Hk`yu_Zgj)kZdN}-4EHWxhB{^>U#tQ9xt^iVBU#|Z TZ@%Negv8+K>gTe~DWM4fwT?8n literal 0 HcmV?d00001 diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1abort__requested__exception_01_4-members.html b/master/structfmt_1_1formatter_3_01seastar_1_1abort__requested__exception_01_4-members.html new file mode 100644 index 000000000..962c50bb5 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1abort__requested__exception_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    fmt::formatter< seastar::abort_requested_exception > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< seastar::abort_requested_exception >, including all inherited members.

    + + +
    format(const seastar::abort_requested_exception &e, fmt::format_context &ctx) const (defined in fmt::formatter< seastar::abort_requested_exception >)fmt::formatter< seastar::abort_requested_exception >inline
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1abort__requested__exception_01_4.html b/master/structfmt_1_1formatter_3_01seastar_1_1abort__requested__exception_01_4.html new file mode 100644 index 000000000..405910d50 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1abort__requested__exception_01_4.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: fmt::formatter< seastar::abort_requested_exception > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    fmt::formatter< seastar::abort_requested_exception > Struct Reference
    +
    +
    +
    +Inheritance diagram for fmt::formatter< seastar::abort_requested_exception >:
    +
    +
    + +
    + + + + +

    +Public Member Functions

    +auto format (const seastar::abort_requested_exception &e, fmt::format_context &ctx) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1abort__requested__exception_01_4.png b/master/structfmt_1_1formatter_3_01seastar_1_1abort__requested__exception_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..93c57f3b4e1e988f2fb2ea4c16ee3114e9b4ac5c GIT binary patch literal 1016 zcmeAS@N?(olHy`uVBq!ia0y~yU^E7@12~w0q|?MC9UvtU;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z})WX;uuoF_;&8yzSRaiY{$)i@BJ@5 zUyNg;^Q}jsR(HeV3~xEjk!Mricl68}17mAmHP2R+xl87F2K5!Gd0L*Dsq$1KebSW2 zLFvzqy|Vus>?yTl>%JH#?h3&l^X>jmJ$K0C_u17SjnApP{2TM)%sbB1+09SW>Tl(} zU#q*QG~%CA%aXdcxz*=&FSzRk=ls8RqfaIF^wr9;`l)xL>nGlmQc8JsUGCxc&Dpu~ z$@Lb++x|(-*=r%IqIvk~xj&Eo2K(pFnlb1ZN z$(i@JJ~V!#x#~;VDaM|s0?(;vx?4_OBJI<6)D%VB<3W>&x>unFce}2L08^__cj?CTvdGc1=z1jS5`^OkDU!_ND z+S4B^iq8FM_iyELbN{n_-X*&0^5=Znar5|jQFH$e3yax(MkRgORa01;pU>mkU$QOt z)U+qLqJ}eXU%U7J_t$TJdC%t*KV$yh`S^q4G5>-Bvva>rMBaDbUt-29|5-<*b6&9nXLXqAG4qdfuz+ z&u6Y?S=Yc@UA$I%Aq&$#t1D-}ajkRv`8Bt-V8!g?#zt3;1iX6m;pHw#c5Auq7bOp{ z7u|d%%v{^G`RS5A_tZzB@?Zbur85|7ooD!G_moG$-IDo4;5mk(DaH*l=ILo^tut>% b{$sp%VuyDA?i-VU*_6T4)z4*}Q$iB}AIk4Y literal 0 HcmV?d00001 diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1bool__class_3_01Tag_01_4_01_4-members.html b/master/structfmt_1_1formatter_3_01seastar_1_1bool__class_3_01Tag_01_4_01_4-members.html new file mode 100644 index 000000000..ce8a1f6e1 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1bool__class_3_01Tag_01_4_01_4-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    fmt::formatter< seastar::bool_class< Tag > > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< seastar::bool_class< Tag > >, including all inherited members.

    + + + +
    format(seastar::bool_class< Tag > v, FormatContext &ctx) const (defined in fmt::formatter< seastar::bool_class< Tag > >)fmt::formatter< seastar::bool_class< Tag > >inline
    parse(format_parse_context &ctx) (defined in fmt::formatter< seastar::bool_class< Tag > >)fmt::formatter< seastar::bool_class< Tag > >inline
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1bool__class_3_01Tag_01_4_01_4.html b/master/structfmt_1_1formatter_3_01seastar_1_1bool__class_3_01Tag_01_4_01_4.html new file mode 100644 index 000000000..b11df0efa --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1bool__class_3_01Tag_01_4_01_4.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: fmt::formatter< seastar::bool_class< Tag > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    fmt::formatter< seastar::bool_class< Tag > > Struct Template Reference
    +
    +
    + + + + + + + +

    +Public Member Functions

    +constexpr auto parse (format_parse_context &ctx)
     
    +template<typename FormatContext >
    auto format (seastar::bool_class< Tag > v, FormatContext &ctx) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1httpd_1_1base__exception_01_4-members.html b/master/structfmt_1_1formatter_3_01seastar_1_1httpd_1_1base__exception_01_4-members.html new file mode 100644 index 000000000..48fbd968b --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1httpd_1_1base__exception_01_4-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    fmt::formatter< seastar::httpd::base_exception > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< seastar::httpd::base_exception >, including all inherited members.

    + + + +
    format(const seastar::httpd::base_exception &e, fmt::format_context &ctx) const (defined in fmt::formatter< seastar::httpd::base_exception >)fmt::formatter< seastar::httpd::base_exception >inline
    parse(format_parse_context &ctx) (defined in fmt::formatter< seastar::httpd::base_exception >)fmt::formatter< seastar::httpd::base_exception >inline
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1httpd_1_1base__exception_01_4.html b/master/structfmt_1_1formatter_3_01seastar_1_1httpd_1_1base__exception_01_4.html new file mode 100644 index 000000000..2fde6eff2 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1httpd_1_1base__exception_01_4.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: fmt::formatter< seastar::httpd::base_exception > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    fmt::formatter< seastar::httpd::base_exception > Struct Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    +constexpr auto parse (format_parse_context &ctx)
     
    +auto format (const seastar::httpd::base_exception &e, fmt::format_context &ctx) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1lazy__deref__wrapper_3_01T_01_4_01_4-members.html b/master/structfmt_1_1formatter_3_01seastar_1_1lazy__deref__wrapper_3_01T_01_4_01_4-members.html new file mode 100644 index 000000000..111b470da --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1lazy__deref__wrapper_3_01T_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    fmt::formatter< seastar::lazy_deref_wrapper< T > > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< seastar::lazy_deref_wrapper< T > >, including all inherited members.

    + + +
    format(const seastar::lazy_deref_wrapper< T > &ld, FormatContext &ctx) const (defined in fmt::formatter< seastar::lazy_deref_wrapper< T > >)fmt::formatter< seastar::lazy_deref_wrapper< T > >inline
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1lazy__deref__wrapper_3_01T_01_4_01_4.html b/master/structfmt_1_1formatter_3_01seastar_1_1lazy__deref__wrapper_3_01T_01_4_01_4.html new file mode 100644 index 000000000..6d5ce5222 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1lazy__deref__wrapper_3_01T_01_4_01_4.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: fmt::formatter< seastar::lazy_deref_wrapper< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    fmt::formatter< seastar::lazy_deref_wrapper< T > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for fmt::formatter< seastar::lazy_deref_wrapper< T > >:
    +
    +
    + +
    + + + + + +

    +Public Member Functions

    +template<typename FormatContext >
    auto format (const seastar::lazy_deref_wrapper< T > &ld, FormatContext &ctx) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1lazy__deref__wrapper_3_01T_01_4_01_4.png b/master/structfmt_1_1formatter_3_01seastar_1_1lazy__deref__wrapper_3_01T_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..4423cf6b9d45c03be7c427abe1f65091e3fca4c8 GIT binary patch literal 1005 zcmeAS@N?(olHy`uVBq!ia0y~yVAKJ!12~w0z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-opJ%f}yt%IhiuzE&L5>ZL@44N=S)zfj^ z+I92k+}wr>zg* z4&T(b+woeO@`NQC*H3-g{B7yHu)QHxSrWH@{n)yuknj4-Uxty-e`%lo7P0tFgBylL9Qy^{{5G#;rU(-77(zId7^e299~Qx8fzF;7^;KB9D3HT-@+=Ol*)Ky$4;+k20@_E zj1X1(k6zcB{~fXn%oK=lS^;E zj?J{zW}H{Fy4LgCri=TQs|(KdWXjQeE_=Xu)f&Auc5l)?3T|2#C4IZDYfbx=b{4p+C$*cKu_708(vFRT_T$keC`PSX$_{W!ZF2B5PoLZL z-E%L|t2tt`tNQt^ZSq^@zxjDLeCy-qv(1_UfBwqWRll8nE$I5`O|QH(S8uF6nm8jW z`roat=oba8liL&56#b70+dk(xU)$fBidm(5wX!Ac>etxu?-t#5X70WXx5L^@UVXl* zKczT(_N2m#2WJ~)?@jle>;7#`>l&-&ikaI^Ur@cerM9>FT9S8F?)jqId#vr+QY+@@ z-#y6oBioAC``vW6#Yb+vU3B=PNlyB62` literal 0 HcmV?d00001 diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1lazy__eval_3_01Func_01_4_01_4-members.html b/master/structfmt_1_1formatter_3_01seastar_1_1lazy__eval_3_01Func_01_4_01_4-members.html new file mode 100644 index 000000000..ebfcabaa3 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1lazy__eval_3_01Func_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    fmt::formatter< seastar::lazy_eval< Func > > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< seastar::lazy_eval< Func > >, including all inherited members.

    + + +
    format(const seastar::lazy_eval< Func > &lf, FormatContext &ctx) const (defined in fmt::formatter< seastar::lazy_eval< Func > >)fmt::formatter< seastar::lazy_eval< Func > >inline
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1lazy__eval_3_01Func_01_4_01_4.html b/master/structfmt_1_1formatter_3_01seastar_1_1lazy__eval_3_01Func_01_4_01_4.html new file mode 100644 index 000000000..2d7dea309 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1lazy__eval_3_01Func_01_4_01_4.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: fmt::formatter< seastar::lazy_eval< Func > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    fmt::formatter< seastar::lazy_eval< Func > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for fmt::formatter< seastar::lazy_eval< Func > >:
    +
    +
    + +
    + + + + + +

    +Public Member Functions

    +template<typename FormatContext >
    auto format (const seastar::lazy_eval< Func > &lf, FormatContext &ctx) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1lazy__eval_3_01Func_01_4_01_4.png b/master/structfmt_1_1formatter_3_01seastar_1_1lazy__eval_3_01Func_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..7efc4da2b7f37ef8cc321c7cf376303cb1447472 GIT binary patch literal 853 zcmV-b1FHOqP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0008yNkl#(l`bo#Aiv|qLfmsC?xsrY7E9;3?x;I z;U^f1tm=Ptlq8crW=}V(1}BF9``gW72y5EQnWyhyAju1L3d7@`T>{>YwZ62``nt?k zi@IR_1q+g0+FV;2H#s1iAyOQLj&S%3CT|?1h>$AavgKU`Y>0<`0z-cf&Evk=FzyX0?8B_A3LpCjOhWj@-XM)q?txSkTjLKm1xc0tqB*2N zxG6e@v=d3r>l_A>yi#8t3?A45gIv z_6h*MtsekjHHMYKhdCHSr(h1o;1&r$#2Adh7yzgkgE1Hb02N~}24euAVhqM$3;#$XJ_06@hU5{5^&l+k{V z0KljEn4Q8nTr}Y+E!n$10DMmyhOoH3oVmOk1^}4RieZJgzARFSZh!XIWwu(>1v`DQ z0MKP0PLIAg<)iMn@1rTYO+`ZhBEi$@T6YG3Pc&r1!+H^*h{(p#0tH=~g%(nn%`1Z2 zJeXd>(efj17;LlCRQl>%F=#Y8s@kWAu%dJI5dx3y!y)z@`5J?g(oPmqCa@ZHJK;Bp zq2+C@js5}BHf^>(dRh+-DueL^eUqB#lJ=h!#jtw~K+Iwon&)f?QRI9de(yLKdQJRr zdeB2YU6&2x-f(dKOm7%qXfY)WtzOQ1gY?+>-XM)qT6!vqEhR(K2cUAeDQel&MHx?X zJ8)S0eZSg{H + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    fmt::formatter< seastar::log_level > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< seastar::log_level >, including all inherited members.

    + + + +
    format(seastar::log_level level, fmt::format_context &ctx) const -> decltype(ctx.out()) (defined in fmt::formatter< seastar::log_level >)fmt::formatter< seastar::log_level >
    parse(format_parse_context &ctx) (defined in fmt::formatter< seastar::log_level >)fmt::formatter< seastar::log_level >inline
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1log__level_01_4.html b/master/structfmt_1_1formatter_3_01seastar_1_1log__level_01_4.html new file mode 100644 index 000000000..65d041f53 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1log__level_01_4.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: fmt::formatter< seastar::log_level > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    fmt::formatter< seastar::log_level > Struct Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    +constexpr auto parse (format_parse_context &ctx)
     
    +auto format (seastar::log_level level, fmt::format_context &ctx) const -> decltype(ctx.out())
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4-members.html b/master/structfmt_1_1formatter_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4-members.html new file mode 100644 index 000000000..3af921224 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    fmt::formatter< seastar::lw_shared_ptr< T > > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< seastar::lw_shared_ptr< T > >, including all inherited members.

    + + + +
    format(const seastar::lw_shared_ptr< T > &p, fmt::format_context &ctx) const (defined in fmt::formatter< seastar::lw_shared_ptr< T > >)fmt::formatter< seastar::lw_shared_ptr< T > >inline
    parse(format_parse_context &ctx) (defined in fmt::formatter< seastar::lw_shared_ptr< T > >)fmt::formatter< seastar::lw_shared_ptr< T > >inline
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4.html b/master/structfmt_1_1formatter_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4.html new file mode 100644 index 000000000..4127bee13 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: fmt::formatter< seastar::lw_shared_ptr< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    fmt::formatter< seastar::lw_shared_ptr< T > > Struct Template Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    +constexpr auto parse (format_parse_context &ctx)
     
    +auto format (const seastar::lw_shared_ptr< T > &p, fmt::format_context &ctx) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1optimized__optional_3_01T_01_4_01_4-members.html b/master/structfmt_1_1formatter_3_01seastar_1_1optimized__optional_3_01T_01_4_01_4-members.html new file mode 100644 index 000000000..6c3ee222c --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1optimized__optional_3_01T_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    fmt::formatter< seastar::optimized_optional< T > > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< seastar::optimized_optional< T > >, including all inherited members.

    + + +
    format(const seastar::optimized_optional< T > &opt, fmt::format_context &ctx) const (defined in fmt::formatter< seastar::optimized_optional< T > >)fmt::formatter< seastar::optimized_optional< T > >inline
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1optimized__optional_3_01T_01_4_01_4.html b/master/structfmt_1_1formatter_3_01seastar_1_1optimized__optional_3_01T_01_4_01_4.html new file mode 100644 index 000000000..446bd1622 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1optimized__optional_3_01T_01_4_01_4.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: fmt::formatter< seastar::optimized_optional< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    fmt::formatter< seastar::optimized_optional< T > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for fmt::formatter< seastar::optimized_optional< T > >:
    +
    +
    + +
    + + + + +

    +Public Member Functions

    +auto format (const seastar::optimized_optional< T > &opt, fmt::format_context &ctx) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1optimized__optional_3_01T_01_4_01_4.png b/master/structfmt_1_1formatter_3_01seastar_1_1optimized__optional_3_01T_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..d7a031ea34144a8a1e95b4a59a890ebfa97f4a77 GIT binary patch literal 962 zcmeAS@N?(olHy`uVBq!ia0y~yU{nOM12~w0Wa25~pFm0?z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op7ue7wQU@pd$(-6wwdMEiQ6JiU(4N|xFpyjlRsAcp3c|Q@7ENamc>Q2*w0+IbyfaU zZRhXtlNUA@>v{4QOjFz+694+;S?~VOyU*9w{<(EwPg}6eUuNg06<32R?fX98zH;kA zzXQ%Hty=!5nnx|E_FpuXY>&nkf`_BaIy!u|=vVw)T5! z&u072RM|TbJv4Sm7#Vw?IdhGnM#P?h^8jBahr)yB>Y|KqCbuy#=`{rj9?$~{sr_Ye zS)$m`VZtIXv5i6Ll7NGY6jO(XGlL*dQi+$50?C?ripHCdoXKJ5QDBUiglhQR3#ysB zZ`EC9d{dP9cj`lSD_`gJRd0HQ)?}?&zg_fz+}R5P*W~){J=qG>CU=?P%ce}LIm@JW z&D>)f<9)U2f1n&V>NM&byBVr9uU-y+Z&Rvud8@$oC7X2i&q>_odVS$Kd&Ye>IV*S~ zpM70gJbRCO!k0@*e@@CoJ(oMY!MVjzzwS__%ygcx*ymQ}XKoZvOsi=yf5QHK>%4n= zzU-KL_iyPx-{s2^nR;AjPA|Mu%C*M7`e*LT7uVZPeayOj|8MeTleJsxww^V9``g+1 z>y{}q=NpIY_U)|nyF2^-e$y>H^S@u1aO$_VuGu}~ws|+|tmE@cP019W zWudln+s)#aKT({%{_axaxto4ZlU=8JVEWnEu>09N*0vemcD!*`Pbq&m!mTTkiIQBI(C`38o(ks4?~^>BJcwL*wYr@_( + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    fmt::formatter< seastar::rpc::optional< T > > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< seastar::rpc::optional< T > >, including all inherited members.

    + + + +
    format(const seastar::rpc::optional< T > &opt, fmt::format_context &ctx) const (defined in fmt::formatter< seastar::rpc::optional< T > >)fmt::formatter< seastar::rpc::optional< T > >inline
    parse(format_parse_context &ctx) (defined in fmt::formatter< seastar::rpc::optional< T > >)fmt::formatter< seastar::rpc::optional< T > >inline
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1rpc_1_1optional_3_01T_01_4_01_4.html b/master/structfmt_1_1formatter_3_01seastar_1_1rpc_1_1optional_3_01T_01_4_01_4.html new file mode 100644 index 000000000..172e49f5f --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1rpc_1_1optional_3_01T_01_4_01_4.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: fmt::formatter< seastar::rpc::optional< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    fmt::formatter< seastar::rpc::optional< T > > Struct Template Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    +constexpr auto parse (format_parse_context &ctx)
     
    +auto format (const seastar::rpc::optional< T > &opt, fmt::format_context &ctx) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4-members.html b/master/structfmt_1_1formatter_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4-members.html new file mode 100644 index 000000000..148565150 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    fmt::formatter< seastar::shared_ptr< T > > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< seastar::shared_ptr< T > >, including all inherited members.

    + + + +
    format(const seastar::shared_ptr< T > &p, fmt::format_context &ctx) const (defined in fmt::formatter< seastar::shared_ptr< T > >)fmt::formatter< seastar::shared_ptr< T > >inline
    parse(format_parse_context &ctx) (defined in fmt::formatter< seastar::shared_ptr< T > >)fmt::formatter< seastar::shared_ptr< T > >inline
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4.html b/master/structfmt_1_1formatter_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4.html new file mode 100644 index 000000000..fa5f27774 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: fmt::formatter< seastar::shared_ptr< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    fmt::formatter< seastar::shared_ptr< T > > Struct Template Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    +constexpr auto parse (format_parse_context &ctx)
     
    +auto format (const seastar::shared_ptr< T > &p, fmt::format_context &ctx) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1timed__out__error_01_4-members.html b/master/structfmt_1_1formatter_3_01seastar_1_1timed__out__error_01_4-members.html new file mode 100644 index 000000000..2d8e20b37 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1timed__out__error_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    fmt::formatter< seastar::timed_out_error > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< seastar::timed_out_error >, including all inherited members.

    + + +
    format(const seastar::timed_out_error &e, fmt::format_context &ctx) const (defined in fmt::formatter< seastar::timed_out_error >)fmt::formatter< seastar::timed_out_error >inline
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1timed__out__error_01_4.html b/master/structfmt_1_1formatter_3_01seastar_1_1timed__out__error_01_4.html new file mode 100644 index 000000000..2404e9e2b --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1timed__out__error_01_4.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: fmt::formatter< seastar::timed_out_error > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    fmt::formatter< seastar::timed_out_error > Struct Reference
    +
    +
    +
    +Inheritance diagram for fmt::formatter< seastar::timed_out_error >:
    +
    +
    + +
    + + + + +

    +Public Member Functions

    +auto format (const seastar::timed_out_error &e, fmt::format_context &ctx) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1timed__out__error_01_4.png b/master/structfmt_1_1formatter_3_01seastar_1_1timed__out__error_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ac31253bb171e84859eae36a2be5be8bc926070a GIT binary patch literal 823 zcmeAS@N?(olHy`uVBq!ia0vp^Uw}A(gBeIl)~qlAQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;HowE~Z;xxVfH|Hl_A z2?!j!6o-#-isjT#ZC!HdQ%u}W>8R6h zJN~NQ67#%d8r%2fl{cIIyeT(NIXNy(<(@5+X14dN&5hpgqlm)iQC`Io=D{rbD6{&AJ}CD~aQCOvT!j+$hX(a5LBlFszQ zy^5h?vipnUhZVQFzi7QFzt#Ii@GBb#3lkWuEBWk+yQa-*wmepH&mP zWfk)NYE+2NwMAbqoSCup>%zCzulBAmhvHtUnm;4Jq z3!ZnleV6URQ>}d*;0UM;vw0EIAGoC2?68NpcwSeD{c`@<_LDC^zrK6+<(FbM)qBqu z-dadIpIDhqH$qYOlCfvWeeAC;I_eGC?+3{*w9jITspJ}h?s$DUE ptoRJB^dN=h7Ke6$CgZ;h8@nbfDBHh0ADGG+JYD@<);T3K0RT^7g7g3Y literal 0 HcmV?d00001 diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_01_4-members.html b/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_01_4-members.html new file mode 100644 index 000000000..f08a1776f --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    fmt::formatter< seastar::tls::subject_alt_name > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< seastar::tls::subject_alt_name >, including all inherited members.

    + + +
    format(const seastar::tls::subject_alt_name &name, FormatContext &ctx) const (defined in fmt::formatter< seastar::tls::subject_alt_name >)fmt::formatter< seastar::tls::subject_alt_name >inline
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_01_4.html b/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_01_4.html new file mode 100644 index 000000000..c17110db5 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_01_4.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: fmt::formatter< seastar::tls::subject_alt_name > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    fmt::formatter< seastar::tls::subject_alt_name > Struct Reference
    +
    +
    +
    +Inheritance diagram for fmt::formatter< seastar::tls::subject_alt_name >:
    +
    +
    + +
    + + + + + +

    +Public Member Functions

    +template<typename FormatContext >
    auto format (const seastar::tls::subject_alt_name &name, FormatContext &ctx) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_01_4.png b/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c4f3ecafcef3a75df2cfc4c9c7af454c3d89ee GIT binary patch literal 932 zcmeAS@N?(olHy`uVBq!ia0y~yVB`a`12~w0OMsL_fKQ0)|NsAi%olIImi8Z- z0AzvjfddCvJMYK?xf~@ye!&btMIdnXREQA+1GBNGi(^Oy9W@~*oBV2xc6kCT6V<|Chom+KWD@|yz$T1LT<`x zmAhNj3yAt1E=g9tiT;Fi`{mX)%zi)1|vtIUre{W*Qtv|{;1P;ktSRZPXde^%$Vq3S;U7bmb zzIDHxAoeoNurE{9v+CTr#}k&6-->?phezgj>n__#U$lNtcvE56%C95lS+!G?&ok`d zgcK+hTd?I?)Xjeke^`GrX=uwZY_6>p?LWl0VFP#Xqd*IWX<-Hos|y&y9x|*s#2C@a zyn%~7L6q-+mP|va1sM{r*FVTuyLHpQ3k;{e-O-R~WlqS1m??SuX$bGyedP@AZY}*T za_;E@_Q`K+*{6pdzG*9Gaf#*e(~DdFGx9a0tUpk=w`lwH)m45u_1~^%=YM~}yluBt z6~ncAHh(J$?oIf6%|Ej$`^Eeh+YKIbT>E%zTkVwHNq-nl29?D;mh@mtJwCxUBjTg; zF{hQ~aub)eep|cEcb9eY3E^sqj9JP@?d3Tnk0)+p^Lh48b&E~q9A&oo;fRkya?eHHY&EM3{@3rg^Vxgx(_8Kdy7OfHYm!*sJgZ^O z(TyeZH$UFcnY{h^l&EKZNn6gHdnvVNzU=BC+XFwu3y&=MbN6Q9na?|F?w`4we*F9D z|8L%KuxIUHT9$Ov?`?@ELty*trPG7uO|CX{tBU%S$K2C-nZ0d6QnZZF{#OUjGJO#I zcB$gOxJBOcM_X>MHfwnQ_Hn@;vpeTc^EFJ5M2; + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    fmt::formatter< seastar::tls::subject_alt_name::value_type > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< seastar::tls::subject_alt_name::value_type >, including all inherited members.

    + + +
    format(const seastar::tls::subject_alt_name::value_type &value, FormatContext &ctx) const (defined in fmt::formatter< seastar::tls::subject_alt_name::value_type >)fmt::formatter< seastar::tls::subject_alt_name::value_type >inline
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_1_1value__type_01_4.html b/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_1_1value__type_01_4.html new file mode 100644 index 000000000..e6b0f7c0f --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_1_1value__type_01_4.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: fmt::formatter< seastar::tls::subject_alt_name::value_type > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    fmt::formatter< seastar::tls::subject_alt_name::value_type > Struct Reference
    +
    +
    +
    +Inheritance diagram for fmt::formatter< seastar::tls::subject_alt_name::value_type >:
    +
    +
    + +
    + + + + + +

    +Public Member Functions

    +template<typename FormatContext >
    auto format (const seastar::tls::subject_alt_name::value_type &value, FormatContext &ctx) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_1_1value__type_01_4.png b/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name_1_1value__type_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..fb9c76bedd5a31f11c70fbd140235dba625a0d88 GIT binary patch literal 1067 zcmeAS@N?(olHy`uVBq!ia0y~yU<6`@01jp#S+j*V2}nr<_=LFr|NkGzeDUUMY5$=K zKo%GuIB}rZIdHdOxmiNhd{$g&|etUoI`nQ>9y+1BqvoT+Of0)&}hXE_!FDbeI@#%saejOjb zdcXBus%v=K&}i<(*jcTl6ix zcYCkeeZIYSf9!*I$EIJIp8NRx%a?h7mX*x#oYeQsW9g(X^`F%8Kk0gH*Vz-}c04cJ zbJyAHDKAg^);&EoeTlikRIeb7l_8UyJeN)q@zR>QB*4$>>=_~B%?b>5&GHQ_3SA*w z0w>S=Td{JeOl5K@GMeSb_{d`^!@(s14FN%#4jL;(6s7=`cxkb6s7_^SndHR?G>QQj zyp&4Yxv!iVnUp5R$~J-F$OJTFeP6y@_A2Z3`rF6+*ZS8^N?mT<{5CiE#HvU7l|^gc z=O16=72E!+Ab*Cq25Z5d)j`(FA3uE<oP5# z8s|3m#MVCBI~x+rPk&puzVF4=AG->BUcdf+cem=UC*|6ava{n}Zc$=pi~1b2M}Cj| zV(|y+bN3x6YIrK`FI^O5b#X&8 ze-igaX6|2687#eJ)A@HgJKl9KP^_&fzP-d>E4Hma(n>Y>>@LHt(=BUE&G($Pmj3^1 zqp@85^=*yPnLmzAzTmL*@3YD`I&&{Cn7>cu>gDv8Z*RsL`55cj&9MI`Zvjp+vw%tF zZq2(-Y`=`|{&)l`SpXPnvWbNe>ed?9KueZJY z9|ZT5?R|ZPG3qDR(&^PnCuW4o9(epk`E0sv!}G^e_Lc0s+{$6_sWOu5!!@)7aLN-B cn@8$R*PX7Lp>t;eFlRG(y85}Sb4q9e0QxNejsO4v literal 0 HcmV?d00001 diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name__type_01_4-members.html b/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name__type_01_4-members.html new file mode 100644 index 000000000..b704d4a07 --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name__type_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    fmt::formatter< seastar::tls::subject_alt_name_type > Member List
    +
    +
    + +

    This is the complete list of members for fmt::formatter< seastar::tls::subject_alt_name_type >, including all inherited members.

    + + +
    format(seastar::tls::subject_alt_name_type type, FormatContext &ctx) const (defined in fmt::formatter< seastar::tls::subject_alt_name_type >)fmt::formatter< seastar::tls::subject_alt_name_type >inline
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name__type_01_4.html b/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name__type_01_4.html new file mode 100644 index 000000000..6d86bcd5c --- /dev/null +++ b/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name__type_01_4.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: fmt::formatter< seastar::tls::subject_alt_name_type > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    fmt::formatter< seastar::tls::subject_alt_name_type > Struct Reference
    +
    +
    +
    +Inheritance diagram for fmt::formatter< seastar::tls::subject_alt_name_type >:
    +
    +
    + +
    + + + + + +

    +Public Member Functions

    +template<typename FormatContext >
    auto format (seastar::tls::subject_alt_name_type type, FormatContext &ctx) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name__type_01_4.png b/master/structfmt_1_1formatter_3_01seastar_1_1tls_1_1subject__alt__name__type_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..a77f179424bc5ebd4d4f8e6f86f80e38b3532e2a GIT binary patch literal 1022 zcmeAS@N?(olHy`uVBq!ia0y~yVAKV&12~w0Wc9bpazz$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-opy^r~fZWSJ}4rln;H8V0PO^jjk5|>GSp3##;RC7IprfgC547@Z=#dYVo zX{F3t>wgD%O5Movf3DB#C-v`0`2I7~q?hfR!~0J*deWD)b(>PRD{M;s{(X8>R9ybn zrLHdv{uk@2Y+Zis>OA+u`<~WzJx5OAM~xdNuv-^lw{UExmm4@Qv;H`?r~{d*~FOzqxct!pS?fsmJF| zy|jE=l*QCN^UfV!U9GBWl)bA~B_f%AZ7CbxpuEvAl1+ZYxB z9iwsfTG@m0rEib1RGbL=J?U-g^2rDLcC9?Q>cQ;pF0=L9V%mQdnVpf&VYIlHa5~Si zq<*KZ>Y{J;eb=LNGXt&e{Ey*YVC(+z!)2@A@3-!Kf0>tACTHu{wbC2)wyoW+Z(X%@ zRo&lMbNkNKbpp}b{jNs*b<6GC$Ld!7tM*!F%-b7>dAYxRxw-%0VZq%3nYy#`&D)~) z_q&;&eAV%3+p?295*b&$m)Cu$>#57HyX5(+HGHUQ2F__KdrxCdTZ>d$+MkbyXotxomc06 zz5CQO + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    perf_tests::internal::test_registrar< Test > Member List
    +
    +
    + +

    This is the complete list of members for perf_tests::internal::test_registrar< Test >, including all inherited members.

    + + +
    test_registrar(const std::string &test_group, const std::string &test_case) (defined in perf_tests::internal::test_registrar< Test >)perf_tests::internal::test_registrar< Test >inline
    + + + + diff --git a/master/structperf__tests_1_1internal_1_1test__registrar.html b/master/structperf__tests_1_1internal_1_1test__registrar.html new file mode 100644 index 000000000..ba86bf401 --- /dev/null +++ b/master/structperf__tests_1_1internal_1_1test__registrar.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: perf_tests::internal::test_registrar< Test > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    perf_tests::internal::test_registrar< Test > Struct Template Reference
    +
    +
    + + + + +

    +Public Member Functions

    test_registrar (const std::string &test_group, const std::string &test_case)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structsampler_1_1disable__sampling__temporarily-members.html b/master/structsampler_1_1disable__sampling__temporarily-members.html new file mode 100644 index 000000000..8e4a9361c --- /dev/null +++ b/master/structsampler_1_1disable__sampling__temporarily-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    sampler::disable_sampling_temporarily Member List
    +
    +
    + +

    This is the complete list of members for sampler::disable_sampling_temporarily, including all inherited members.

    + + + + +
    disable_sampling_temporarily()=default (defined in sampler::disable_sampling_temporarily)sampler::disable_sampling_temporarily
    disable_sampling_temporarily(sampler &sampler) (defined in sampler::disable_sampling_temporarily)sampler::disable_sampling_temporarilyinline
    ~disable_sampling_temporarily() (defined in sampler::disable_sampling_temporarily)sampler::disable_sampling_temporarilyinline
    + + + + diff --git a/master/structsampler_1_1disable__sampling__temporarily.html b/master/structsampler_1_1disable__sampling__temporarily.html new file mode 100644 index 000000000..edbbf99f3 --- /dev/null +++ b/master/structsampler_1_1disable__sampling__temporarily.html @@ -0,0 +1,96 @@ + + + + + + + +Seastar: sampler::disable_sampling_temporarily Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    sampler::disable_sampling_temporarily Struct Reference
    +
    +
    +

    Detailed Description

    +

    RAII class to temporarily pause sampling.

    +
    +

    #include <seastar/util/sampler.hh>

    + + + + +

    +Public Member Functions

    disable_sampling_temporarily (sampler &sampler)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1alien_1_1internal_1_1qs__deleter-members.html b/master/structseastar_1_1alien_1_1internal_1_1qs__deleter-members.html new file mode 100644 index 000000000..4309ac062 --- /dev/null +++ b/master/structseastar_1_1alien_1_1internal_1_1qs__deleter-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::alien::internal::qs_deleter Member List
    +
    +
    + +

    This is the complete list of members for seastar::alien::internal::qs_deleter, including all inherited members.

    + + + + +
    count (defined in seastar::alien::internal::qs_deleter)seastar::alien::internal::qs_deleter
    operator()(message_queue *qs) const (defined in seastar::alien::internal::qs_deleter)seastar::alien::internal::qs_deleter
    qs_deleter(unsigned n=0) (defined in seastar::alien::internal::qs_deleter)seastar::alien::internal::qs_deleterinline
    + + + + diff --git a/master/structseastar_1_1alien_1_1internal_1_1qs__deleter.html b/master/structseastar_1_1alien_1_1internal_1_1qs__deleter.html new file mode 100644 index 000000000..9b1a6e60a --- /dev/null +++ b/master/structseastar_1_1alien_1_1internal_1_1qs__deleter.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: seastar::alien::internal::qs_deleter Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::alien::internal::qs_deleter Struct Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    qs_deleter (unsigned n=0)
     
    +void operator() (message_queue *qs) const
     
    + + + +

    +Public Attributes

    +unsigned count
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1alien_1_1internal_1_1return__type__of-members.html b/master/structseastar_1_1alien_1_1internal_1_1return__type__of-members.html new file mode 100644 index 000000000..61f0360e2 --- /dev/null +++ b/master/structseastar_1_1alien_1_1internal_1_1return__type__of-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::alien::internal::return_type_of< Func, bool > Member List
    +
    +
    + +

    This is the complete list of members for seastar::alien::internal::return_type_of< Func, bool >, including all inherited members.

    + + + +
    set(std::promise< void > &p, return_value_t< Func > &&) (defined in seastar::alien::internal::return_type_of< Func, bool >)seastar::alien::internal::return_type_of< Func, bool >inlinestatic
    type typedef (defined in seastar::alien::internal::return_type_of< Func, bool >)seastar::alien::internal::return_type_of< Func, bool >
    + + + + diff --git a/master/structseastar_1_1alien_1_1internal_1_1return__type__of.html b/master/structseastar_1_1alien_1_1internal_1_1return__type__of.html new file mode 100644 index 000000000..f1f6099e1 --- /dev/null +++ b/master/structseastar_1_1alien_1_1internal_1_1return__type__of.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: seastar::alien::internal::return_type_of< Func, bool > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::alien::internal::return_type_of< Func, bool > Struct Template Reference
    +
    +
    + + + + +

    +Public Types

    +using type = void
     
    + + + +

    +Static Public Member Functions

    +static void set (std::promise< void > &p, return_value_t< Func > &&)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1alien_1_1internal_1_1return__type__of_3_01Func_00_01false_01_4-members.html b/master/structseastar_1_1alien_1_1internal_1_1return__type__of_3_01Func_00_01false_01_4-members.html new file mode 100644 index 000000000..ecd9a4ccb --- /dev/null +++ b/master/structseastar_1_1alien_1_1internal_1_1return__type__of_3_01Func_00_01false_01_4-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::alien::internal::return_type_of< Func, false > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1alien_1_1internal_1_1return__type__of_3_01Func_00_01false_01_4.html b/master/structseastar_1_1alien_1_1internal_1_1return__type__of_3_01Func_00_01false_01_4.html new file mode 100644 index 000000000..88b1e1014 --- /dev/null +++ b/master/structseastar_1_1alien_1_1internal_1_1return__type__of_3_01Func_00_01false_01_4.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: seastar::alien::internal::return_type_of< Func, false > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::alien::internal::return_type_of< Func, false > Struct Template Reference
    +
    +
    + + + + + + +

    +Public Types

    +using return_tuple_t = typename futurize< std::invoke_result_t< Func > >::tuple_type
     
    +using type = std::tuple_element_t< 0, return_tuple_t >
     
    + + + +

    +Static Public Member Functions

    +static void set (std::promise< type > &p, return_value_t< Func > &&t)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1basic__sstring_1_1contents_1_1external__type-members.html b/master/structseastar_1_1basic__sstring_1_1contents_1_1external__type-members.html new file mode 100644 index 000000000..2488d68c4 --- /dev/null +++ b/master/structseastar_1_1basic__sstring_1_1contents_1_1external__type-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::contents::external_type Member List
    +
    + + + + + diff --git a/master/structseastar_1_1basic__sstring_1_1contents_1_1external__type.html b/master/structseastar_1_1basic__sstring_1_1contents_1_1external__type.html new file mode 100644 index 000000000..84ee0023e --- /dev/null +++ b/master/structseastar_1_1basic__sstring_1_1contents_1_1external__type.html @@ -0,0 +1,147 @@ + + + + + + + +Seastar: seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::contents::external_type Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::contents::external_type Struct Reference
    +
    +
    + + + + + + + + +

    +Public Attributes

    +char_type * str
     
    +Size size
     
    +int8_t pad
     
    +

    Member Data Documentation

    + +

    ◆ pad

    + +
    +
    +
    +template<typename char_type , typename Size , Size max_size, bool NulTerminate>
    + + + + +
    int8_t seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::contents::external_type::pad
    +
    + +
    +
    + +

    ◆ size

    + +
    +
    +
    +template<typename char_type , typename Size , Size max_size, bool NulTerminate>
    + + + + +
    Size seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::contents::external_type::size
    +
    + +
    +
    + +

    ◆ str

    + +
    +
    +
    +template<typename char_type , typename Size , Size max_size, bool NulTerminate>
    + + + + +
    char_type* seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::contents::external_type::str
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1basic__sstring_1_1contents_1_1internal__type-members.html b/master/structseastar_1_1basic__sstring_1_1contents_1_1internal__type-members.html new file mode 100644 index 000000000..3832fb4dc --- /dev/null +++ b/master/structseastar_1_1basic__sstring_1_1contents_1_1internal__type-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::contents::internal_type Member List
    +
    + + + + + diff --git a/master/structseastar_1_1basic__sstring_1_1contents_1_1internal__type.html b/master/structseastar_1_1basic__sstring_1_1contents_1_1internal__type.html new file mode 100644 index 000000000..6749c29db --- /dev/null +++ b/master/structseastar_1_1basic__sstring_1_1contents_1_1internal__type.html @@ -0,0 +1,128 @@ + + + + + + + +Seastar: seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::contents::internal_type Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::contents::internal_type Struct Reference
    +
    +
    + + + + + + +

    +Public Attributes

    +char_type str [max_size]
     
    +int8_t size
     
    +

    Member Data Documentation

    + +

    ◆ size

    + +
    +
    +
    +template<typename char_type , typename Size , Size max_size, bool NulTerminate>
    + + + + +
    int8_t seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::contents::internal_type::size
    +
    + +
    +
    + +

    ◆ str

    + +
    +
    +
    +template<typename char_type , typename Size , Size max_size, bool NulTerminate>
    + + + + +
    char_type seastar::basic_sstring< char_type, Size, max_size, NulTerminate >::contents::internal_type::str[max_size]
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1broken__promise-members.html b/master/structseastar_1_1broken__promise-members.html new file mode 100644 index 000000000..4a93d1190 --- /dev/null +++ b/master/structseastar_1_1broken__promise-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::broken_promise Member List
    +
    +
    + +

    This is the complete list of members for seastar::broken_promise, including all inherited members.

    + + +
    broken_promise() (defined in seastar::broken_promise)seastar::broken_promise
    + + + + diff --git a/master/structseastar_1_1broken__promise.html b/master/structseastar_1_1broken__promise.html new file mode 100644 index 000000000..ce94a00f0 --- /dev/null +++ b/master/structseastar_1_1broken__promise.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: seastar::broken_promise Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::broken_promise Struct Reference
    +
    +
    +

    Detailed Description

    +

    Exception type for broken promises.

    +

    When a promise is broken, i.e. a promise object with an attached continuation is destroyed before setting any value or exception, an exception of broken_promise type is propagated to that abandoned continuation.

    +
    +

    #include <seastar/core/future.hh>

    +
    +Inheritance diagram for seastar::broken_promise:
    +
    +
    + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1broken__promise.png b/master/structseastar_1_1broken__promise.png new file mode 100644 index 0000000000000000000000000000000000000000..e6919f01a1753844034789950909ddb809ab3e2a GIT binary patch literal 843 zcmeAS@N?(olHy`uVBq!ia0vp^Q-QdHgBeKPG>NnTQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;(`OLn;{G&b_^BkpYiec;1iu|9jmv zma+#lOMfew^P{wrw^66+K=he2ZOoIG9OTgU{3IAQ>B-|MS7%kd>++xXt4`a~s{8t> zXUqNKLsyENY&I(Y^l;+VwrO#qlb4iRto6}a`|d_a1D|>YA1z)m2s% z&+UCl`rMfZ_p<(d3Df*$9TwYI_jUTto4hxB!_=l;JNsbQE!o$vmPy|Emay()8vird z*~!<>FHrgU^JeT}uSqpE2lsDQ`OB54>S@=u)yPP)G?Y>(CLR~n*{ zqmIh4d=Ls_usg(cz&(QT2ZuI;d?M=uT~3!>L%Mt^&^Nqhb~D{aqRT>VpRgXG>%cXVezlD|oV7SVFw)q|0VuZl)+zJk&^20TzwLTEY1iW!vd?+yl1%I0ZGM&Z=1fHH z@zcP-d3)p4*Im1c*|yt8NLqY<@GX>8<)xxXVo#$}&=S(15X6!zawwByV@`Vru<;t_8~@Y~zGpzP&1QZT`;qO~wCYJky`c-(LFj zPxqTS_ph&ey=2a>cL|}l*Tvm_7Lb~ssTwzL$N4xP-dABMU7x1 mKU$!Ee)fI#%$o^+7*E_>U;Vkz`Y + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::coroutine::exception Member List
    +
    +
    + +

    This is the complete list of members for seastar::coroutine::exception, including all inherited members.

    + + + +
    eptr (defined in seastar::coroutine::exception)seastar::coroutine::exception
    exception(std::exception_ptr eptr) noexcept (defined in seastar::coroutine::exception)seastar::coroutine::exceptioninlineexplicit
    + + + + diff --git a/master/structseastar_1_1coroutine_1_1exception.html b/master/structseastar_1_1coroutine_1_1exception.html new file mode 100644 index 000000000..56692673a --- /dev/null +++ b/master/structseastar_1_1coroutine_1_1exception.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: seastar::coroutine::exception Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::coroutine::exception Struct Reference
    +
    +
    +

    Detailed Description

    +

    Wrapper for propagating an exception directly rather than throwing it. The wrapper can be used with both co_await and co_return.

    +
    Note
    It is not possible to co_return the wrapper in coroutines which return future<> due to language limitations (it's not possible to specify both return_value and return_void in the promise_type). You can use co_await instead which works in coroutines which return either future<> or future<T>.
    +

    Example usage:

    +
    co_await coroutine::exception(std::make_exception_ptr(std::runtime_error("something failed miserably")));
    +
    co_return coroutine::exception(std::make_exception_ptr(std::runtime_error("something failed miserably")));
    +
    Definition: exception.hh:71
    +
    +

    #include <seastar/coroutine/exception.hh>

    + + + + +

    +Public Member Functions

    exception (std::exception_ptr eptr) noexcept
     
    + + + +

    +Public Attributes

    +std::exception_ptr eptr
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1next__awaiter-members.html b/master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1next__awaiter-members.html new file mode 100644 index 000000000..01cd5d1d2 --- /dev/null +++ b/master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1next__awaiter-members.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::coroutine::experimental::internal::next_awaiter< T, Generator > Member List
    +
    +
    + +

    This is the complete list of members for seastar::coroutine::experimental::internal::next_awaiter< T, Generator >, including all inherited members.

    + + + + + + + + + + + +
    _generator (defined in seastar::coroutine::experimental::internal::next_awaiter< T, Generator >)seastar::coroutine::experimental::internal::next_awaiter< T, Generator >
    _next_value_future (defined in seastar::coroutine::experimental::internal::next_awaiter< T, Generator >)seastar::coroutine::experimental::internal::next_awaiter< T, Generator >
    _task (defined in seastar::coroutine::experimental::internal::next_awaiter< T, Generator >)seastar::coroutine::experimental::internal::next_awaiter< T, Generator >
    await_ready() const noexcept (defined in seastar::coroutine::experimental::internal::next_awaiter< T, Generator >)seastar::coroutine::experimental::internal::next_awaiter< T, Generator >inline
    await_resume() (defined in seastar::coroutine::experimental::internal::next_awaiter< T, Generator >)seastar::coroutine::experimental::internal::next_awaiter< T, Generator >inline
    await_suspend(coroutine_handle< Promise > coro) noexcept (defined in seastar::coroutine::experimental::internal::next_awaiter< T, Generator >)seastar::coroutine::experimental::internal::next_awaiter< T, Generator >inline
    next_awaiter(Generator *generator, seastar::task *task, seastar::future<> &&f) noexcept (defined in seastar::coroutine::experimental::internal::next_awaiter< T, Generator >)seastar::coroutine::experimental::internal::next_awaiter< T, Generator >inline
    next_awaiter(const next_awaiter &)=delete (defined in seastar::coroutine::experimental::internal::next_awaiter< T, Generator >)seastar::coroutine::experimental::internal::next_awaiter< T, Generator >
    next_awaiter(next_awaiter &&)=delete (defined in seastar::coroutine::experimental::internal::next_awaiter< T, Generator >)seastar::coroutine::experimental::internal::next_awaiter< T, Generator >
    next_value_type typedef (defined in seastar::coroutine::experimental::internal::next_awaiter< T, Generator >)seastar::coroutine::experimental::internal::next_awaiter< T, Generator >
    + + + + diff --git a/master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1next__awaiter.html b/master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1next__awaiter.html new file mode 100644 index 000000000..793a330e3 --- /dev/null +++ b/master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1next__awaiter.html @@ -0,0 +1,128 @@ + + + + + + + +Seastar: seastar::coroutine::experimental::internal::next_awaiter< T, Generator > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::coroutine::experimental::internal::next_awaiter< T, Generator > Struct Template Referencefinal
    +
    +
    + + + + +

    +Public Types

    +using next_value_type = next_value_t< T >
     
    + + + + + + + + + + + + + + +

    +Public Member Functions

    next_awaiter (Generator *generator, seastar::task *task, seastar::future<> &&f) noexcept
     
    next_awaiter (const next_awaiter &)=delete
     
    next_awaiter (next_awaiter &&)=delete
     
    +constexpr bool await_ready () const noexcept
     
    +template<typename Promise >
    void await_suspend (coroutine_handle< Promise > coro) noexcept
     
    +next_value_type await_resume ()
     
    + + + + + + + +

    +Public Attributes

    +Generator *const _generator
     
    +seastar::task *const _task
     
    +seastar::future _next_value_future
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1yield__awaiter-members.html b/master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1yield__awaiter-members.html new file mode 100644 index 000000000..36374b83e --- /dev/null +++ b/master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1yield__awaiter-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::coroutine::experimental::internal::yield_awaiter< T, Container > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1yield__awaiter.html b/master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1yield__awaiter.html new file mode 100644 index 000000000..005b5545c --- /dev/null +++ b/master/structseastar_1_1coroutine_1_1experimental_1_1internal_1_1yield__awaiter.html @@ -0,0 +1,115 @@ + + + + + + + +Seastar: seastar::coroutine::experimental::internal::yield_awaiter< T, Container > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::coroutine::experimental::internal::yield_awaiter< T, Container > Struct Template Referencefinal
    +
    +
    + + + + +

    +Public Types

    +using promise_type = generator_buffered_promise< T, Container >
     
    + + + + + + + + + +

    +Public Member Functions

    yield_awaiter (seastar::future<> &&f) noexcept
     
    +bool await_ready () noexcept
     
    +coroutine_handle await_suspend (coroutine_handle< promise_type > coro) noexcept
     
    +void await_resume () noexcept
     
    + + + +

    +Public Attributes

    +seastar::future _future
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1coroutine_1_1switch__to-members.html b/master/structseastar_1_1coroutine_1_1switch__to-members.html new file mode 100644 index 000000000..25b5d357f --- /dev/null +++ b/master/structseastar_1_1coroutine_1_1switch__to-members.html @@ -0,0 +1,100 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::coroutine::switch_to Member List
    +
    +
    + +

    This is the complete list of members for seastar::coroutine::switch_to, including all inherited members.

    + + + + + + + + + + + + + + + + + + + +
    _prev_sg (defined in seastar::coroutine::switch_to)seastar::coroutine::switch_to
    _sg (defined in seastar::task)seastar::taskprotected
    _switch_to_sg (defined in seastar::coroutine::switch_to)seastar::coroutine::switch_to
    _task (defined in seastar::coroutine::switch_to)seastar::coroutine::switch_to
    await_ready() const noexcept (defined in seastar::coroutine::switch_to)seastar::coroutine::switch_toinline
    await_resume() (defined in seastar::coroutine::switch_to)seastar::coroutine::switch_toinline
    await_suspend(std::coroutine_handle< T > hndl) noexcept (defined in seastar::coroutine::switch_to)seastar::coroutine::switch_toinline
    get_backtrace() const (defined in seastar::task)seastar::taskinline
    group() const (defined in seastar::task)seastar::taskinline
    make_backtrace() noexcept (defined in seastar::task)seastar::taskinline
    run_and_dispose() noexcept override (defined in seastar::coroutine::switch_to)seastar::coroutine::switch_toinlinevirtual
    set_scheduling_group(scheduling_group new_sg) noexcept (defined in seastar::task)seastar::taskinlineprotected
    switch_to(scheduling_group new_sg) noexcept (defined in seastar::coroutine::switch_to)seastar::coroutine::switch_toinlineexplicit
    switch_to(const switch_to &)=delete (defined in seastar::coroutine::switch_to)seastar::coroutine::switch_to
    switch_to(switch_to &&)=delete (defined in seastar::coroutine::switch_to)seastar::coroutine::switch_to
    task(scheduling_group sg=current_scheduling_group()) noexcept (defined in seastar::task)seastar::taskinlineexplicit
    waiting_task() noexcept overrideseastar::coroutine::switch_toinlinevirtual
    ~task()=default (defined in seastar::task)seastar::taskprotected
    + + + + diff --git a/master/structseastar_1_1coroutine_1_1switch__to.html b/master/structseastar_1_1coroutine_1_1switch__to.html new file mode 100644 index 000000000..ac8e00455 --- /dev/null +++ b/master/structseastar_1_1coroutine_1_1switch__to.html @@ -0,0 +1,233 @@ + + + + + + + +Seastar: seastar::coroutine::switch_to Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::coroutine::switch_to Struct Referencefinal
    +
    +
    +

    Detailed Description

    +

    Switch the current task scheduling group.

    +

    switch_to(new_scheduling_group) can be used to change the scheduling_group of the currently running coroutine.

    +

    If the new scheduling group is different than the current scheduling_group, the coroutine is re-scheduled using the new scheduling group. Otherwise, the coroutine just continues to run with the current scheduling group.

    +

    switch_to returns the current scheduling group to make it easy to switch back to it if needed.

    +

    Example

    +
    +
    ... // do some preliminary work
    +
    auto prev_sg = co_await coroutine::switch_to(other_sg);
    +
    ... // do some work using another scheduling group
    +
    co_await coroutine::switch_to(prev_sg);
    +
    ... // do some more work
    +
    co_return;
    +
    }
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: switch_to.hh:55
    +
    +

    #include <seastar/coroutine/switch_to.hh>

    +
    +Inheritance diagram for seastar::coroutine::switch_to:
    +
    +
    + + +seastar::task + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    switch_to (scheduling_group new_sg) noexcept
     
    switch_to (const switch_to &)=delete
     
    switch_to (switch_to &&)=delete
     
    +bool await_ready () const noexcept
     
    +template<typename T >
    void await_suspend (std::coroutine_handle< T > hndl) noexcept
     
    +scheduling_group await_resume ()
     
    virtual void run_and_dispose () noexcept override
     
    virtual taskwaiting_task () noexcept override
     Returns the next task which is waiting for this task to complete execution, or nullptr. More...
     
    +scheduling_group group () const
     
    +shared_backtrace get_backtrace () const
     
    +void make_backtrace () noexcept
     
    + + + + + + + +

    +Public Attributes

    +scheduling_group _prev_sg
     
    +scheduling_group _switch_to_sg
     
    +task_task = nullptr
     
    + + + +

    +Protected Member Functions

    +scheduling_group set_scheduling_group (scheduling_group new_sg) noexcept
     
    + + + +

    +Protected Attributes

    +scheduling_group _sg
     
    +

    Member Function Documentation

    + +

    ◆ run_and_dispose()

    + +
    +
    + + + + + +
    + + + + + + + +
    virtual void seastar::coroutine::switch_to::run_and_dispose ()
    +
    +inlineoverridevirtualnoexcept
    +
    + +

    Implements seastar::task.

    + +
    +
    + +

    ◆ waiting_task()

    + +
    +
    + + + + + +
    + + + + + + + +
    virtual task * seastar::coroutine::switch_to::waiting_task ()
    +
    +inlineoverridevirtualnoexcept
    +
    + +

    Returns the next task which is waiting for this task to complete execution, or nullptr.

    + +

    Implements seastar::task.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1coroutine_1_1switch__to.png b/master/structseastar_1_1coroutine_1_1switch__to.png new file mode 100644 index 0000000000000000000000000000000000000000..db3f335499d68a0bc2d7ad959d0aac5f4b9d3fd8 GIT binary patch literal 608 zcmeAS@N?(olHy`uVBq!ia0vp^tAIFwgBeKfTPSxPNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~zV~!-45?szJNI?bY6Bj&>+{n;{p+vc zc%~$|tUbU~c>AmktihbQ4jT0($to4s$*U%b_-@FWxMbeHCz%seYR|3@ z*Dc<9>Fu<`rF*q@PCmc?{8E*@Cv>ldoet5RbXUrC)9lzgyVjS7hReTxcg^j&K*@UM zeHR%n8{hr*>}Fo}@>fmwR%ZRqz5YsSLBFYEer^Nz-l|2fnp9qjHmM!>(>L4j!P_$@ zAB#_1;{AkwHPrT1UO^@+wLCBStlE0biiP2$4a2bnnXAW>C9W5Ss9z3@VGlaX$spjr zipgd2Du#Z%UatZk2=GMn;of34cfysags;=1a>%H=so7SoBa+rT2`TK$sZ~c4t?`dyA&4j_`6W`v#>o&^}}zJzxxvPL?C1J z?>lx?ch{`yeQ`Un_jSnjocqpd4?Zm6x^OYOl=W;V_l>t(PRz{O{rN5Xnz!4F(`v&@ zPi~*O;K$otuPWWHGu+>?x_$e;+PoEUuS1vL`g>UA?|MeRAU~%4c?`dk^i8)LUWnZ= zn;|b}OUU`+7YLJ&?Q~kSK Wm8Fim&o}^+1B0ilpUXO@geCyyh93$5 literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1coroutine_1_1without__preemption__check-members.html b/master/structseastar_1_1coroutine_1_1without__preemption__check-members.html new file mode 100644 index 000000000..3dd74101c --- /dev/null +++ b/master/structseastar_1_1coroutine_1_1without__preemption__check-members.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::coroutine::without_preemption_check< T > Member List
    +
    +
    + +

    This is the complete list of members for seastar::coroutine::without_preemption_check< T >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    available() const noexceptseastar::future< T >inline
    discard_result() noexceptseastar::future< T >inline
    failed() const noexceptseastar::future< T >inline
    finally(Func &&func) noexceptseastar::future< T >inline
    forward_to(promise< T > &&pr) noexceptseastar::future< T >inline
    future(future &&x) noexceptseastar::future< T >inline
    future(const future &)=delete (defined in seastar::future< T >)seastar::future< T >
    get()seastar::future< T >inline
    get0() (defined in seastar::future< T >)seastar::future< T >inline
    get0_return_type typedefseastar::future< T >
    get_exception() noexcept (defined in seastar::future< T >)seastar::future< T >inline
    handle_exception(Func &&func) noexceptseastar::future< T >inline
    handle_exception_type(Func &&func) noexceptseastar::future< T >inline
    ignore_ready_future() noexceptseastar::future< T >inline
    operator=(future &&x) noexcept (defined in seastar::future< T >)seastar::future< T >inline
    operator=(const future &)=delete (defined in seastar::future< T >)seastar::future< T >
    or_terminate() noexceptseastar::future< T >inline
    promise_type typedefseastar::future< T >
    then(Func &&func) noexceptseastar::future< T >inline
    then_unpack(Func &&func) noexceptseastar::future< T >inline
    then_wrapped(Func &&func) &noexceptseastar::future< T >inline
    then_wrapped(Func &&func) &&noexcept (defined in seastar::future< T >)seastar::future< T >inline
    tuple_type typedef (defined in seastar::future< T >)seastar::future< T >
    value_type typedefseastar::future< T >
    wait() noexceptseastar::future< T >inline
    without_preemption_check(seastar::future< T > &&f) noexcept (defined in seastar::coroutine::without_preemption_check< T >)seastar::coroutine::without_preemption_check< T >inlineexplicit
    + + + + diff --git a/master/structseastar_1_1coroutine_1_1without__preemption__check.html b/master/structseastar_1_1coroutine_1_1without__preemption__check.html new file mode 100644 index 000000000..43b8045ff --- /dev/null +++ b/master/structseastar_1_1coroutine_1_1without__preemption__check.html @@ -0,0 +1,685 @@ + + + + + + + +Seastar: seastar::coroutine::without_preemption_check< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::coroutine::without_preemption_check< T > Struct Template Reference
    +
    +
    +

    Detailed Description

    +
    template<typename T>
    +struct seastar::coroutine::without_preemption_check< T >

    Wrapper for a future which turns off checking for preemption when awaiting it in a coroutine. If constructed from a future, co_await-ing it will bypass checking if the task quota is depleted, which means that a ready future will be handled immediately.

    +
    +

    #include <seastar/core/coroutine.hh>

    +
    +Inheritance diagram for seastar::coroutine::without_preemption_check< T >:
    +
    +
    + + +seastar::future< T > + +
    + + + + + + + + + + + + +

    +Public Types

    +using value_type = internal::future_stored_type_t< T >
     The data type carried by the future.
     
    +using tuple_type = internal::future_tuple_type_t< value_type >
     
    +using promise_type = promise< T >
     The data type carried by the future.
     
    using get0_return_type = typename future_state::get0_return_type
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    without_preemption_check (seastar::future< T > &&f) noexcept
     
    value_type && get ()
     gets the value returned by the computation More...
     
    +std::exception_ptr get_exception () noexcept
     
    +get0_return_type get0 ()
     
    void wait () noexcept
     
    bool available () const noexcept
     Checks whether the future is available. More...
     
    bool failed () const noexcept
     Checks whether the future has failed. More...
     
    template<typename Func , typename Result = typename internal::future_result<Func, T>::future_type>
    +requires std::invocable<Func, T> || (std::same_as<void, T> && std::invocable<Func>)
    Result then (Func &&func) noexcept
     Schedule a block of code to run when the future is ready. More...
     
    template<typename Func , typename Result = futurize_t<internal::result_of_apply_t<Func, T>>>
    requires ::seastar::CanApplyTuple< Func, T > Result then_unpack (Func &&func) noexcept
     Schedule a block of code to run when the future is ready, unpacking tuples. More...
     
    template<std::invocable< future > Func, typename FuncResult = std::invoke_result_t<Func, future>>
    futurize_t< FuncResult > then_wrapped (Func &&func) &noexcept
     Schedule a block of code to run when the future is ready, allowing for exception handling. More...
     
    +template<std::invocable< future && > Func, typename FuncResult = std::invoke_result_t<Func, future&&>>
    futurize_t< FuncResult > then_wrapped (Func &&func) &&noexcept
     
    void forward_to (promise< T > &&pr) noexcept
     Satisfy some promise object with this future as a result. More...
     
    template<std::invocable Func>
    future< T > finally (Func &&func) noexcept
     
    future or_terminate () noexcept
     Terminate the program if this future fails. More...
     
    future discard_result () noexcept
     Discards the value carried by this future. More...
     
    template<typename Func >
    +requires std::is_invocable_r_v<future<T> ,Func, std::exception_ptr> || (std::tuple_size_v<tuple_type> == 0 && std::is_invocable_r_v<void, Func, std::exception_ptr>) || (std::tuple_size_v<tuple_type> == 1 && std::is_invocable_r_v<T, Func, std::exception_ptr>) || (std::tuple_size_v<tuple_type> > 1 && std::is_invocable_r_v<tuple_type ,Func, std::exception_ptr>)
    future< T > handle_exception (Func &&func) noexcept
     Handle the exception carried by this future. More...
     
    template<typename Func >
    future< T > handle_exception_type (Func &&func) noexcept
     Handle the exception of a certain type carried by this future. More...
     
    void ignore_ready_future () noexcept
     Ignore any result hold by this future. More...
     
    +

    Member Typedef Documentation

    + +

    ◆ get0_return_type

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + +
    using seastar::future< T >::get0_return_type = typename future_state::get0_return_type
    +
    +inherited
    +
    +

    Gets the value returned by the computation.

    +

    Similar to get(), but instead of returning a T&&, returns T.

    +
    Note
    The get0() method is deprecated. It's a remnant from older versions of Seastar that supported variadic futures, capable of returning multiple values through a tuple. Back then, get0() served the purpose of retrieving the first (and usually the only) value. Today, the get() method accomplishes the same task. However, there's a subtle difference in return types: get0() returned T, while get() returns T&& (an rvalue reference to T). This distinction typically won't cause issues when switching from get0() to get(). However, in specific metaprogramming scenarios, especially when the code expects type T, you'll need to use std::remove_reference_t<decltype(fut.get())> to extract the underlying type T. For new code that utilizes future<tuple<...>>, employ std::get<0>(fut.get()) to access the first element of the tuple, rather than the deprecated get0().
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ available()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    bool seastar::future< T >::available () const
    +
    +inlinenoexceptinherited
    +
    + +

    Checks whether the future is available.

    +
    Returns
    true if the future has a value, or has failed.
    + +
    +
    + +

    ◆ discard_result()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    future seastar::future< T >::discard_result ()
    +
    +inlinenoexceptinherited
    +
    + +

    Discards the value carried by this future.

    +

    Converts the future into a no-value future<>, by ignoring any result. Exceptions are propagated unchanged.

    + +
    +
    + +

    ◆ failed()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    bool seastar::future< T >::failed () const
    +
    +inlinenoexceptinherited
    +
    + +

    Checks whether the future has failed.

    +
    Returns
    true if the future is availble and has failed.
    + +
    +
    + +

    ◆ finally()

    + +
    +
    +
    +template<typename T >
    +
    +template<std::invocable Func>
    + + + + + +
    + + + + + + + + +
    future< T > seastar::future< T >::finally (Func && func)
    +
    +inlinenoexceptinherited
    +
    +

    Finally continuation for statements that require waiting for the result. I.e. you need to "finally" call a function that returns a possibly unavailable future. The returned future will be "waited for", any exception generated will be propagated, but the return value is ignored. I.e. the original return value (the future upon which you are making this call) will be preserved.

    +

    If the original return value or the callback return value is an exceptional future it will be propagated.

    +

    If both of them are exceptional - the seastar::nested_exception exception with the callback exception on top and the original future exception nested will be propagated.

    + +
    +
    + +

    ◆ forward_to()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + + +
    void seastar::future< T >::forward_to (promise< T > && pr)
    +
    +inlinenoexceptinherited
    +
    + +

    Satisfy some promise object with this future as a result.

    +

    Arranges so that when this future is resolve, it will be used to satisfy an unrelated promise. This is similar to scheduling a continuation that moves the result of this future into the promise (using promise::set_value() or promise::set_exception(), except that it is more efficient.

    +
    Parameters
    + + +
    pra promise that will be fulfilled with the results of this future.
    +
    +
    + +
    +
    + +

    ◆ get()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    value_type && seastar::future< T >::get ()
    +
    +inlineinherited
    +
    + +

    gets the value returned by the computation

    +

    Requires that the future be available. If the value was computed successfully, it is returned (as an std::tuple). Otherwise, an exception is thrown.

    +

    If get() is called in a seastar::thread context, then it need not be available; instead, the thread will be paused until the future becomes available.

    +
    Examples
    closeable_test.cc.
    +
    + +
    +
    + +

    ◆ handle_exception()

    + +
    +
    +
    +template<typename T >
    +
    +template<typename Func >
    +requires std::is_invocable_r_v<future<T> ,Func, std::exception_ptr> || (std::tuple_size_v<tuple_type> == 0 && std::is_invocable_r_v<void, Func, std::exception_ptr>) || (std::tuple_size_v<tuple_type> == 1 && std::is_invocable_r_v<T, Func, std::exception_ptr>) || (std::tuple_size_v<tuple_type> > 1 && std::is_invocable_r_v<tuple_type ,Func, std::exception_ptr>)
    + + + + + +
    + + + + + + + + +
    future< T > seastar::future< T >::handle_exception (Func && func)
    +
    +inlinenoexceptinherited
    +
    + +

    Handle the exception carried by this future.

    +

    When the future resolves, if it resolves with an exception, handle_exception(func) replaces the exception with the value returned by func. The exception is passed (as a std::exception_ptr) as a parameter to func; func may return the replacement value immediately (T or std::tuple<T...>) or in the future (future<T...>) and is even allowed to return (or throw) its own exception.

    +

    The idiom fut.discard_result().handle_exception(...) can be used to handle an exception (if there is one) without caring about the successful value; Because handle_exception() is used here on a future<>, the handler function does not need to return anything.

    + +
    +
    + +

    ◆ handle_exception_type()

    + +
    +
    +
    +template<typename T >
    +
    +template<typename Func >
    + + + + + +
    + + + + + + + + +
    future< T > seastar::future< T >::handle_exception_type (Func && func)
    +
    +inlinenoexceptinherited
    +
    + +

    Handle the exception of a certain type carried by this future.

    +

    When the future resolves, if it resolves with an exception of a type that provided callback receives as a parameter, handle_exception_type(func) replaces the exception with the value returned by func. The exception is passed (by reference) as a parameter to func; func may return the replacement value immediately (T or std::tuple<T...>) or in the future (future<T...>) and is even allowed to return (or throw) its own exception. If exception, that future holds, does not match func parameter type it is propagated as is.

    + +
    +
    + +

    ◆ ignore_ready_future()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    void seastar::future< T >::ignore_ready_future ()
    +
    +inlinenoexceptinherited
    +
    + +

    Ignore any result hold by this future.

    +

    Ignore any result (value or exception) hold by this future. Use with caution since usually ignoring exception is not what you want

    + +
    +
    + +

    ◆ or_terminate()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    future seastar::future< T >::or_terminate ()
    +
    +inlinenoexceptinherited
    +
    + +

    Terminate the program if this future fails.

    +

    Terminates the entire program is this future resolves to an exception. Use with caution.

    + +
    +
    + +

    ◆ then()

    + +
    +
    +
    +template<typename T >
    +
    +template<typename Func , typename Result = typename internal::future_result<Func, T>::future_type>
    +requires std::invocable<Func, T> || (std::same_as<void, T> && std::invocable<Func>)
    + + + + + +
    + + + + + + + + +
    Result seastar::future< T >::then (Func && func)
    +
    +inlinenoexceptinherited
    +
    + +

    Schedule a block of code to run when the future is ready.

    +

    Schedules a function (often a lambda) to run when the future becomes available. The function is called with the result of this future's computation as parameters. The return value of the function becomes the return value of then(), itself as a future; this allows then() calls to be chained.

    +

    If the future failed, the function is not called, and the exception is propagated into the return value of then().

    +
    Parameters
    + + +
    func- function to be called when the future becomes available, unless it has failed.
    +
    +
    +
    Returns
    a future representing the return value of func, applied to the eventual value of this future.
    + +
    +
    + +

    ◆ then_unpack()

    + +
    +
    +
    +template<typename T >
    +
    +template<typename Func , typename Result = futurize_t<internal::result_of_apply_t<Func, T>>>
    + + + + + +
    + + + + + + + + +
    requires ::seastar::CanApplyTuple< Func, T > Result seastar::future< T >::then_unpack (Func && func)
    +
    +inlinenoexceptinherited
    +
    + +

    Schedule a block of code to run when the future is ready, unpacking tuples.

    +

    Schedules a function (often a lambda) to run when the future becomes available. The function is called with the result of this future's computation as parameters. The return value of the function becomes the return value of then(), itself as a future; this allows then() calls to be chained.

    +

    This member function is only available when the payload is std::tuple; The tuple elements are passed as individual arguments to func, which must have the same arity as the tuple.

    +

    If the future failed, the function is not called, and the exception is propagated into the return value of then().

    +
    Parameters
    + + +
    func- function to be called when the future becomes available, unless it has failed.
    +
    +
    +
    Returns
    a future representing the return value of func, applied to the eventual value of this future.
    + +
    +
    + +

    ◆ then_wrapped()

    + +
    +
    +
    +template<typename T >
    +
    +template<std::invocable< future > Func, typename FuncResult = std::invoke_result_t<Func, future>>
    + + + + + +
    + + + + + + + + +
    futurize_t< FuncResult > seastar::future< T >::then_wrapped (Func && func) &
    +
    +inlinenoexceptinherited
    +
    + +

    Schedule a block of code to run when the future is ready, allowing for exception handling.

    +

    Schedules a function (often a lambda) to run when the future becomes available. The function is called with the this future as a parameter; it will be in an available state. The return value of the function becomes the return value of then_wrapped(), itself as a future; this allows then_wrapped() calls to be chained.

    +

    Unlike then(), the function will be called for both value and exceptional futures.

    +
    Parameters
    + + +
    func- function to be called when the future becomes available,
    +
    +
    +
    Returns
    a future representing the return value of func, applied to the eventual value of this future.
    + +
    +
    + +

    ◆ wait()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + +
    void seastar::future< T >::wait ()
    +
    +inlinenoexceptinherited
    +
    +

    Wait for the future to be available (in a seastar::thread)

    +

    When called from a seastar::thread, this function blocks the thread until the future is availble. Other threads and continuations continue to execute; only the thread is blocked.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1coroutine_1_1without__preemption__check.png b/master/structseastar_1_1coroutine_1_1without__preemption__check.png new file mode 100644 index 0000000000000000000000000000000000000000..588b728f6ed83874cf9068c25b48ced2ff5f61cf GIT binary patch literal 1341 zcmeAS@N?(olHy`uVBq!ia0y~yVAKM#J2;quWV(Bp50H`w@CkAK|NlRb`Qpvj(*8pe zfGjXRaNq!I=N)+rs_FP#P zs#?<*Yo^}Q{_Az+!Y`EW+>L*t6nZ-7lhii%;JrIE|37}VZ?Rs=mH6%c?DOL% z=U!iVD{S-5?0dI`vo?Hcmbn8h77qc=vApx%3sY`rma=I)1mdW7Da- zwk?=p;4yV~bw~TEDM3P-OG}sz{Qbcsz>w}C>d>-Ye8kT=G3W1p(s-?R zG&r<4=lSC5-;t5|7T3JxuFlR_t~4psT3&u?=*G>f!b4@_s$=I@g}u!`u<2jT>aSeS zr-fcGadw-m^68Ap8$3^Z zWQ*b7@<}5yxJ!TKs`DpV?$$?Ky>#|hMP%sDeNpBc{+8!wpE8ksXSCvWL;b{1U#01H zzaNjhy8LfN_+86iAahLRloo1gG-p-l3@b=ehQZ;*bGae7WUUs(3JYlkQZtDHB?~Ya1F*Dtn zc;L&uElsyq%{qT?js}Cj1z)5!= Sm3x3?9fPN + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::default_null_deref_action Member List
    +
    +
    + +

    This is the complete list of members for seastar::default_null_deref_action, including all inherited members.

    + + +
    operator()() constseastar::default_null_deref_actioninline
    + + + + diff --git a/master/structseastar_1_1default__null__deref__action.html b/master/structseastar_1_1default__null__deref__action.html new file mode 100644 index 000000000..83db7c588 --- /dev/null +++ b/master/structseastar_1_1default__null__deref__action.html @@ -0,0 +1,128 @@ + + + + + + + +Seastar: seastar::default_null_deref_action Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::default_null_deref_action Struct Reference
    +
    +
    +

    Detailed Description

    +

    Default not engaged seastar::checked_ptr dereferencing action (functor).

    +

    Throws a seastar::checked_ptr_is_null_exception.

    +
    +

    #include <seastar/core/checked_ptr.hh>

    + + + + +

    +Public Member Functions

    void operator() () const
     
    +

    Member Function Documentation

    + +

    ◆ operator()()

    + +
    +
    + + + + + +
    + + + + + + + +
    void seastar::default_null_deref_action::operator() () const
    +
    +inline
    +
    +
    Exceptions
    + + +
    seastar::checked_ptr_is_null_exception
    +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1default__timeout__exception__factory-members.html b/master/structseastar_1_1default__timeout__exception__factory-members.html new file mode 100644 index 000000000..91dc51844 --- /dev/null +++ b/master/structseastar_1_1default__timeout__exception__factory-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::default_timeout_exception_factory Member List
    +
    +
    + +

    This is the complete list of members for seastar::default_timeout_exception_factory, including all inherited members.

    + + +
    timeout() (defined in seastar::default_timeout_exception_factory)seastar::default_timeout_exception_factoryinlinestatic
    + + + + diff --git a/master/structseastar_1_1default__timeout__exception__factory.html b/master/structseastar_1_1default__timeout__exception__factory.html new file mode 100644 index 000000000..465970ff4 --- /dev/null +++ b/master/structseastar_1_1default__timeout__exception__factory.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::default_timeout_exception_factory Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::default_timeout_exception_factory Struct Reference
    +
    +
    + + + + +

    +Static Public Member Functions

    +static auto timeout ()
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1dummy__expiry-members.html b/master/structseastar_1_1dummy__expiry-members.html new file mode 100644 index 000000000..82a9956ab --- /dev/null +++ b/master/structseastar_1_1dummy__expiry-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::dummy_expiry< T > Member List
    +
    +
    + +

    This is the complete list of members for seastar::dummy_expiry< T >, including all inherited members.

    + + +
    operator()(T &) noexcept (defined in seastar::dummy_expiry< T >)seastar::dummy_expiry< T >inline
    + + + + diff --git a/master/structseastar_1_1dummy__expiry.html b/master/structseastar_1_1dummy__expiry.html new file mode 100644 index 000000000..5ec709636 --- /dev/null +++ b/master/structseastar_1_1dummy__expiry.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::dummy_expiry< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::dummy_expiry< T > Struct Template Reference
    +
    +
    + + + + +

    +Public Member Functions

    +void operator() (T &) noexcept
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1experimental_1_1spawn__parameters-members.html b/master/structseastar_1_1experimental_1_1spawn__parameters-members.html new file mode 100644 index 000000000..2b63850b2 --- /dev/null +++ b/master/structseastar_1_1experimental_1_1spawn__parameters-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::experimental::spawn_parameters Member List
    +
    +
    + +

    This is the complete list of members for seastar::experimental::spawn_parameters, including all inherited members.

    + + + +
    argvseastar::experimental::spawn_parameters
    envseastar::experimental::spawn_parameters
    + + + + diff --git a/master/structseastar_1_1experimental_1_1spawn__parameters.html b/master/structseastar_1_1experimental_1_1spawn__parameters.html new file mode 100644 index 000000000..691104bc0 --- /dev/null +++ b/master/structseastar_1_1experimental_1_1spawn__parameters.html @@ -0,0 +1,135 @@ + + + + + + + +Seastar: seastar::experimental::spawn_parameters Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::experimental::spawn_parameters Struct Reference
    +
    +
    +

    Detailed Description

    +

    The optional parameters for spawning a subprocess

    +
    Note
    see execve(2) for more details on argv and env.
    +
    +

    #include <seastar/util/process.hh>

    + + + + + + + + +

    +Public Attributes

    +std::vector< sstring > argv
     The arguments passed to the program.
     
    +std::vector< sstring > env
     The environment variables for the program.
     
    +

    Member Data Documentation

    + +

    ◆ argv

    + +
    +
    + + + + +
    std::vector<sstring> seastar::experimental::spawn_parameters::argv
    +
    + +

    The arguments passed to the program.

    + +
    +
    + +

    ◆ env

    + +
    +
    + + + + +
    std::vector<sstring> seastar::experimental::spawn_parameters::env
    +
    + +

    The environment variables for the program.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1experimental_1_1websocket_1_1frame__header-members.html b/master/structseastar_1_1experimental_1_1websocket_1_1frame__header-members.html new file mode 100644 index 000000000..366382d30 --- /dev/null +++ b/master/structseastar_1_1experimental_1_1websocket_1_1frame__header-members.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::experimental::websocket::frame_header Member List
    +
    +
    + +

    This is the complete list of members for seastar::experimental::websocket::frame_header, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + +
    fin (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_header
    FIN (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_headerstatic
    frame_header(const char *input) (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_headerinline
    get_fin() (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_headerinline
    get_length() (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_headerinline
    get_masked() (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_headerinline
    get_opcode() (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_headerinline
    get_rest_of_header_length() (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_headerinline
    get_rsv1() (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_headerinline
    get_rsv2() (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_headerinline
    get_rsv3() (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_headerinline
    is_opcode_known() (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_headerinline
    length (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_header
    masked (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_header
    MASKED (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_headerstatic
    opcode (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_header
    rsv1 (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_header
    RSV1 (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_headerstatic
    rsv2 (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_header
    RSV2 (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_headerstatic
    rsv3 (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_header
    RSV3 (defined in seastar::experimental::websocket::frame_header)seastar::experimental::websocket::frame_headerstatic
    + + + + diff --git a/master/structseastar_1_1experimental_1_1websocket_1_1frame__header.html b/master/structseastar_1_1experimental_1_1websocket_1_1frame__header.html new file mode 100644 index 000000000..1e9972686 --- /dev/null +++ b/master/structseastar_1_1experimental_1_1websocket_1_1frame__header.html @@ -0,0 +1,163 @@ + + + + + + + +Seastar: seastar::experimental::websocket::frame_header Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::experimental::websocket::frame_header Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    frame_header (const char *input)
     
    +uint64_t get_rest_of_header_length ()
     
    +uint8_t get_fin ()
     
    +uint8_t get_rsv1 ()
     
    +uint8_t get_rsv2 ()
     
    +uint8_t get_rsv3 ()
     
    +uint8_t get_opcode ()
     
    +uint8_t get_masked ()
     
    +uint8_t get_length ()
     
    +bool is_opcode_known ()
     
    + + + + + + + + + + + + + + + +

    +Public Attributes

    +uint8_t fin: 1
     
    +uint8_t rsv1: 1
     
    +uint8_t rsv2: 1
     
    +uint8_t rsv3: 1
     
    +uint8_t opcode: 4
     
    +uint8_t masked: 1
     
    +uint8_t length: 7
     
    + + + + + + + + + + + +

    +Static Public Attributes

    +static constexpr uint8_t FIN = 7
     
    +static constexpr uint8_t RSV1 = 6
     
    +static constexpr uint8_t RSV2 = 5
     
    +static constexpr uint8_t RSV3 = 4
     
    +static constexpr uint8_t MASKED = 7
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1file__open__options-members.html b/master/structseastar_1_1file__open__options-members.html new file mode 100644 index 000000000..dda5686e8 --- /dev/null +++ b/master/structseastar_1_1file__open__options-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::file_open_options Member List
    +
    + + + + + diff --git a/master/structseastar_1_1file__open__options.html b/master/structseastar_1_1file__open__options.html new file mode 100644 index 000000000..2c4809798 --- /dev/null +++ b/master/structseastar_1_1file__open__options.html @@ -0,0 +1,125 @@ + + + + + + + +Seastar: seastar::file_open_options Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::file_open_options Struct Reference
    +
    +
    +

    Detailed Description

    +

    File open options

    +

    Options used to configure an open file.

    +

    file

    +
    +

    #include <seastar/core/file.hh>

    + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +uint64_t extent_allocation_size_hint = 1 << 20
     Allocate this much disk space when extending the file.
     
    +bool sloppy_size = false
     Allow the file size not to track the amount of data written until a flush.
     
    +uint64_t sloppy_size_hint = 1 << 20
     Hint as to what the eventual file size will be.
     
    +file_permissions create_permissions = file_permissions::default_file_permissions
     File permissions to use when creating a file.
     
    +bool append_is_unlikely = false
     Hint that user promises (or at least tries hard) not to write behind file size.
     
    + + + + + +

    +Static Public Attributes

    +static constexpr uint64_t max_extent_allocation_size_hint = 1 << 31
     
    +static constexpr uint32_t min_extent_size_hint_alignment {128u << 10}
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1free__deleter-members.html b/master/structseastar_1_1free__deleter-members.html new file mode 100644 index 000000000..e6237e66a --- /dev/null +++ b/master/structseastar_1_1free__deleter-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::free_deleter Member List
    +
    +
    + +

    This is the complete list of members for seastar::free_deleter, including all inherited members.

    + + +
    operator()(void *p) (defined in seastar::free_deleter)seastar::free_deleterinline
    + + + + diff --git a/master/structseastar_1_1free__deleter.html b/master/structseastar_1_1free__deleter.html new file mode 100644 index 000000000..570c7da19 --- /dev/null +++ b/master/structseastar_1_1free__deleter.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::free_deleter Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::free_deleter Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +void operator() (void *p)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1function__input__iterator-members.html b/master/structseastar_1_1function__input__iterator-members.html new file mode 100644 index 000000000..2400f2de3 --- /dev/null +++ b/master/structseastar_1_1function__input__iterator-members.html @@ -0,0 +1,94 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::function_input_iterator< Function, State > Member List
    +
    +
    + +

    This is the complete list of members for seastar::function_input_iterator< Function, State >, including all inherited members.

    + + + + + + + + + + + + + +
    _func (defined in seastar::function_input_iterator< Function, State >)seastar::function_input_iterator< Function, State >
    _state (defined in seastar::function_input_iterator< Function, State >)seastar::function_input_iterator< Function, State >
    function_input_iterator(Function func, State state) (defined in seastar::function_input_iterator< Function, State >)seastar::function_input_iterator< Function, State >inline
    function_input_iterator(const function_input_iterator &)=default (defined in seastar::function_input_iterator< Function, State >)seastar::function_input_iterator< Function, State >
    function_input_iterator(function_input_iterator &&)=default (defined in seastar::function_input_iterator< Function, State >)seastar::function_input_iterator< Function, State >
    operator!=(const function_input_iterator &x) const (defined in seastar::function_input_iterator< Function, State >)seastar::function_input_iterator< Function, State >inline
    operator*() const (defined in seastar::function_input_iterator< Function, State >)seastar::function_input_iterator< Function, State >inline
    operator++() (defined in seastar::function_input_iterator< Function, State >)seastar::function_input_iterator< Function, State >inline
    operator++(int) (defined in seastar::function_input_iterator< Function, State >)seastar::function_input_iterator< Function, State >inline
    operator=(const function_input_iterator &)=default (defined in seastar::function_input_iterator< Function, State >)seastar::function_input_iterator< Function, State >
    operator=(function_input_iterator &&)=default (defined in seastar::function_input_iterator< Function, State >)seastar::function_input_iterator< Function, State >
    operator==(const function_input_iterator &x) const (defined in seastar::function_input_iterator< Function, State >)seastar::function_input_iterator< Function, State >inline
    + + + + diff --git a/master/structseastar_1_1function__input__iterator.html b/master/structseastar_1_1function__input__iterator.html new file mode 100644 index 000000000..40099a9d8 --- /dev/null +++ b/master/structseastar_1_1function__input__iterator.html @@ -0,0 +1,129 @@ + + + + + + + +Seastar: seastar::function_input_iterator< Function, State > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::function_input_iterator< Function, State > Struct Template Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    function_input_iterator (Function func, State state)
     
    function_input_iterator (const function_input_iterator &)=default
     
    function_input_iterator (function_input_iterator &&)=default
     
    +function_input_iteratoroperator= (const function_input_iterator &)=default
     
    +function_input_iteratoroperator= (function_input_iterator &&)=default
     
    +auto operator* () const
     
    +function_input_iteratoroperator++ ()
     
    +function_input_iterator operator++ (int)
     
    +bool operator== (const function_input_iterator &x) const
     
    +bool operator!= (const function_input_iterator &x) const
     
    + + + + + +

    +Public Attributes

    +Function _func
     
    +State _state
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4-members.html b/master/structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4-members.html new file mode 100644 index 000000000..3de5d5fc2 --- /dev/null +++ b/master/structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::function_traits< Ret(Args...)> Member List
    +
    + + + + + diff --git a/master/structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4.html b/master/structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4.html new file mode 100644 index 000000000..532274639 --- /dev/null +++ b/master/structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4.html @@ -0,0 +1,146 @@ + + + + + + + +Seastar: seastar::function_traits< Ret(Args...)> Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::function_traits< Ret(Args...)> Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::function_traits< Ret(Args...)>:
    +
    +
    + + +seastar::function_traits< Ret(*)(Args...)> +seastar::function_traits< Ret(T::*)(Args...) const > +seastar::function_traits< Ret(T::*)(Args...)> + +
    + + + + +

    +Classes

    struct  arg
     
    + + + + + + + +

    +Public Types

    +using return_type = Ret
     
    +using args_as_tuple = std::tuple< Args... >
     
    +using signature = Ret(Args...)
     
    + + + +

    +Static Public Attributes

    +static constexpr std::size_t arity = sizeof...(Args)
     
    +

    Class Documentation

    + +

    ◆ seastar::function_traits< Ret(Args...)>::arg

    + +
    +
    + + + + +
    struct seastar::function_traits< Ret(Args...)>::arg
    +
    + + + + + +
    Class Members
    +typedef typename tuple_element< N, tuple< Args... > >::type +type +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4.png b/master/structseastar_1_1function__traits_3_01Ret_07Args_8_8_8_08_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ac3d76bbecf7bdcfdfe993011a546d3b74ac24a6 GIT binary patch literal 1826 zcmd5-{Xf%N9G}=t6mAcfN-377CFv?|v{ksZ1Hk0 zG>q3UU-NJ?wQw_5p{eAl$zs+#?|!G-AJA|2yk6&gKJRnhpL0Ivygu*OxsG!_woYw} z8Vm+ohdFNV3WF(AARniy42^NFvNXu(;2hl@OnV6Y!5G4@B?c+*FTOYNjY{Tv_e(Pmg6_B=GRn0m#efO*TDk-aOQ1#Vg zjFXEm6H32PG=8T`O;R)Op#NeCPWO80v@u29_a*?I%f`nOhA7SDNR-P-$!)Mn7qiMZT%8;pF>OJPP3zvP?tH%l(s z5@=Q1H(uD?<;BPp3pQj%jvVmz4&t?BSTG}4mVF^y6J&%JsnN18>Y`CJPLa{@b)5zT z)ntN^mOiez}SbtN_O;9(`W?%x|; z%5%&kvcj~I+Gb}^U7pNmp<~p^`F$*5!ayCr7bPN#0$a!j8_k$S>i4r&Zi6Kay27^Jc2h!VUZonP9p8ou$f z{xb^huoB~aD|z@3R4FeN@1_>FGuRdac_&xE=3vFj_W+Hz(FY6D`Qy>1&NTk`-r~z< zSpBgF)hQ?}@)Z@KFbd@RznB!dltt=tS??`x49z;{cnn$JNccMH+$uQ^TV%AJFpX6ScM7K)TzA@&&1L$lW7cj^k~^UaiwzhG7&LSN;^(;4SYVeqUo5W? za(yo@BcA$C8;OX1he_u_gH4zy^RKMIa+&71jByt1-%J~QU@hXbZa{Z(Vs42GWm`W$ zEc6Z$=*USDQZUot;#KGXPn}S8Vuv$Z2$OZK+3-xS*gkZ literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_01const_01_4-members.html b/master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_01const_01_4-members.html new file mode 100644 index 000000000..98c6b2873 --- /dev/null +++ b/master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_01const_01_4-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::function_traits< Ret(T::*)(Args...) const > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_01const_01_4.html b/master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_01const_01_4.html new file mode 100644 index 000000000..3680d66b1 --- /dev/null +++ b/master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_01const_01_4.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar::function_traits< Ret(T::*)(Args...) const > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::function_traits< Ret(T::*)(Args...) const > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::function_traits< Ret(T::*)(Args...) const >:
    +
    +
    + + +seastar::function_traits< Ret(Args...)> + +
    + + + + + + + + +

    +Public Types

    +using return_type = Ret
     
    +using args_as_tuple = std::tuple< Args... >
     
    +using signature = Ret(Args...)
     
    + + + +

    +Static Public Attributes

    +static constexpr std::size_t arity = sizeof...(Args)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_01const_01_4.png b/master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_01const_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..90b8584719d78cbafcc6386ca4f8e0eaa207cb32 GIT binary patch literal 1103 zcmeAS@N?(olHy`uVBq!ia0y~yU{nIK12~w0WY^!0UqDJCz$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-opT@ zdQ5Wq%dtqwv-#AWKQen?ynMTQ;?tkkYp?$Eyc8wg=CSE*ZO62IEPj2luUAH&|9m~M zihZ$lN1Sze&V!#8b=SVXI&?ZB_+ZWFKihAYN59>4f6iuG>+j;8+vaxMI+gb^xhuIt z<@UYK7f(+}ZVjoiwtb~@ZN;K%KGV;(AAO^CtLp^s=9?uFZ;#vcSN zAJKC{HFItC(_2Sx2Az;!E$?t;sk{7Y+l;>^cSR;Y`g}}hS6KJ2g4)c$z-)2B*tM?A zi|pgOk4dl9OVeAm&n6;y@A5yr&je-~7vJ;Vzw6>T&flA}Cgq>e_1v|rn%#GjUGU`{ z>!npQm!5anB7Q6SrvAyTnSuYN3wT~KH#M52ynjFce;y^zs(zt~Dy?2FlSH%xJ%d)b zsCX`v>)4iiI|vx~+>ABT_Avx8XsaqUc*Mt_j;S3C zPC)5^P7Z|-C8~12R(5!4s)l-LY6k+{0E~VVOJW^NA_f9!&L(^mieo47e! zPw;21jrY#N?4pG&9Z?%(RidBA%*mVo=G1+66Yu_ao21lu1b+%Y(7i5Ly3;)E;?}4u z?XSJLTd(OU?TYMXxE$8;?&_kGJLg|p^wDiK`+=B{x!2D{yl1ap{PlNI+WLh@%%kQO zoLHx-RKK`)r|G?nZwpw>r4Ag=dYHWX3*+^5(u_%eIbEs^=jQMqFum(^CH(GwM!^H- zqOCSYv+|F>XZtl>f$7KoDX6jj)gi=7b7hcM + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::function_traits< Ret(T::*)(Args...)> Member List
    +
    + + + + + diff --git a/master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_4.html b/master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_4.html new file mode 100644 index 000000000..5c416a5cb --- /dev/null +++ b/master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_4.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar::function_traits< Ret(T::*)(Args...)> Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::function_traits< Ret(T::*)(Args...)> Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::function_traits< Ret(T::*)(Args...)>:
    +
    +
    + + +seastar::function_traits< Ret(Args...)> + +
    + + + + + + + + +

    +Public Types

    +using return_type = Ret
     
    +using args_as_tuple = std::tuple< Args... >
     
    +using signature = Ret(Args...)
     
    + + + +

    +Static Public Attributes

    +static constexpr std::size_t arity = sizeof...(Args)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_4.png b/master/structseastar_1_1function__traits_3_01Ret_07T_1_1_5_08_07Args_8_8_8_08_4.png new file mode 100644 index 0000000000000000000000000000000000000000..aa07a67e16eb6ff03956272b161900cbf160708d GIT binary patch literal 940 zcmeAS@N?(olHy`uVBq!ia0vp^zkoP^gBeJ&Z=KN&q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0tvy{FLn;{G&b^)YMuEpw+&bw0|H*W>E*4xEBw~2n)wJG{fK_Sn?l-t@belxYYdF`7zRjS)mYo*!c)X(N0 z@-&QgNvCbDmw20U-tdw9;^_Zn{$~#s=i9|J3v6@W&O6CJe&1{7lKop$ZhMueti1TN zQUCNaciU=tm-~C4{xkD0^X;CudVb`umW}*R=Ndi#79aes|2zAI*(KX}z8%<}Cnc^v z{den{`@3K3w(Z~Lwd$?fue-bNEv$dH?z^a+wPEY-y>-`Syxz9{1K-^_cY~JKul{f} zu{!-s;>+_*DqpL9?bh>*zovP<_VM=%+nG#lS|@#(?bm%X-eLL@^Q)WZw|}zQS1%Mh z>E3mh=}R(Zy_h88%l{=ca@qu@AM@%MlC<=Go%fIUw&Ml=rxkA+FQ&J$cP#JZ6Yv$5 zRhXq_8^vl{0EH*40Gk4 zO+0?gPHJa(y!~pC)NI>(-xwLLXSMI?vYS)-aNT>U-FA&74{v;nJ-eMRU;J0j4d*JC zZ8m-Lf9`duGJbYtrsdD#o&G0c%ltlWE6dYw$Youz?vCoWh$YVUcjPZK-gX1U72Blz zqtVG5-GsKz)SJD(v3&Doo+oXUzbBSX|2a#0`_gY+H{afnz8s^tdC6-daD;vPKG`ML z_vMM{zeMh)Z*c#9n<+>8qNVkR)SG`+q`z-|v3vWS`*Kygp9$PuzI=+q=CzZZ-W<+( z-F$n0_v)`d?0!XB&3<&(a*xY*^=r|2DSz+9<{SRGsv3CP_lx>_tAtw|e|PS_7yiTM zg2=lx^K-CRJ0H{yjJ2DI1C)q&}zH}Ag-15(;ZFXR=-X51ZFJ;Pgg&e IbxsLQ09J + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::function_traits< Ret(*)(Args...)> Member List
    +
    + + + + + diff --git a/master/structseastar_1_1function__traits_3_01Ret_07_5_08_07Args_8_8_8_08_4.html b/master/structseastar_1_1function__traits_3_01Ret_07_5_08_07Args_8_8_8_08_4.html new file mode 100644 index 000000000..24d452fa0 --- /dev/null +++ b/master/structseastar_1_1function__traits_3_01Ret_07_5_08_07Args_8_8_8_08_4.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar::function_traits< Ret(*)(Args...)> Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::function_traits< Ret(*)(Args...)> Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::function_traits< Ret(*)(Args...)>:
    +
    +
    + + +seastar::function_traits< Ret(Args...)> + +
    + + + + + + + + +

    +Public Types

    +using return_type = Ret
     
    +using args_as_tuple = std::tuple< Args... >
     
    +using signature = Ret(Args...)
     
    + + + +

    +Static Public Attributes

    +static constexpr std::size_t arity = sizeof...(Args)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1function__traits_3_01Ret_07_5_08_07Args_8_8_8_08_4.png b/master/structseastar_1_1function__traits_3_01Ret_07_5_08_07Args_8_8_8_08_4.png new file mode 100644 index 0000000000000000000000000000000000000000..084397a2b894ed8f93aa22dee7cb9b7c22f4acbb GIT binary patch literal 929 zcmeAS@N?(olHy`uVBq!ia0vp^Z-F>~gBeI3I?f~pq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ04Ln^OLn;{G&V5_-Sb@it|GIJQfA@P9 zW(prCUQpY8Gs!AuxtM|l$I1Ge+j4jJ+)#O`6t!iN$#Su^DrZ*~-csU4Wg|GO_! zzTG>q;lJqSPtKEmz2dE$xNY~RX5Fi?wbys1|9@}tS7!Sn+jF07u6-%~Cw+hM_QMj) zDbL>Y@BW+D9b4x2XD7HRW~@-P*kM{hv;h6o;#UO_DuItl}eVw$#&@}sEy_dG9{;FfS^W)xo)QhiG z*}KS9+p{?9qSvK4yDsM4-WKc1Ab&ypKx&ERt@Z1*AI5ckW2;uYlYMdBEFOc^V!8+B zL~UUJDrY*g(v{m_IU#`$+eMu?rVBDY0LBtj8{@5S4bipCD@u&N+lT>UX>rA`$luDR zZZXKMkogpR>)jgmcdyp%dwr+a>78`%^J2Sw{j;CTJg=0?{$=^U_x;O)_s6#M+o;!F z?&I8e`kd#zZ|8nX73|F%-J_|Ars$W?p3Zh01Y;n!S-ZA+Om z?>^ZQ^ylRCSG`->x8I1rm$o}ic7uy__DtP`(wAS_GmG!$-jq!Z6pCMx%X&6;d)win z$^W#fPCMir|Fmt@l)skETNYRT?)g?-8GZeU#f2%il9 + + + + + + +Seastar: seastar::function_traits< T & > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::function_traits< T & > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::function_traits< T & >:
    +
    +
    + + +seastar::function_traits< std::remove_reference_t< T > > + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1function__traits_3_01T_01_6_01_4.png b/master/structseastar_1_1function__traits_3_01T_01_6_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..c1ec00a79757b1c0706720c555afd8f9ba2a3dd0 GIT binary patch literal 1048 zcmeAS@N?(olHy`uVBq!ia0y~yVDtjA12~w0q{rDabwElYz$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-opXz!%2S!^*T4O&6j_D{abbP!^Im~r)3uZ|E^I#Wo!7hv)69_efqdv<@=1lvrILo zOEceo?|Pk`zu}ru_J_-#yYH!MXV%{f-|3ULSy}Y|nqpb6oP}NAj_)y=To|38CB4-3 zmi*(;Y^5^QGb5IdFSw&84vwjo>rHq z+MoYu_iOE`>*Y^hGw1!QtvaCm{*>X&ty5W9c@->)BjE*UdP$n)0}`-Pth=l35}_Y^NE+H!t&dWcsL2S%Js z&{EZGnSBZpaViY|>+2YV8a6NSYT&4=yQJ#Cuu@2&Y4*ty&VqR%oB}RgEF6lVOf3_% z7=ba%pa@hZ5TxqB0aVlily+K0sq{nZkZD0)L0+2a3mH@xo}=4gzw%SXlIUm55<5iC zFS|C?KWp2bUr90z0{?cMdilZsnd!b+`NyTLnFS88YE6F||2Xk?#Qtsfb8jr&pnG-8 z&i~a@>`&d&zMb~^?Y~bSnGbw?sx{p*zih#ebWxKjH=MYBC&x)T=W+X_F2Azw?5urH zHpDL~+Wz=a;{UtZFZZ6`wj}%Us@z1oZm;bZxKrXv58UqEUz>AqOD%7}&M(*Q^|$ZI zH|h>*xEwR7Y)-$e%HKl1fR}tbEPn`3)$`b|sC9q0cD3%mSBp2;=dY@%3$HpIUliUa zxkuJ!@{HXTMXkE}zj@y6dGq$&)LVWw=O5S=GqMz)WMu#G{fE}n{+P0p4_Pd{-LMDr jj+Ht~r!1Kg{L1^$1`}k`njxgN@xNA!#?co literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1future_1_1finally__body_3_01Func_00_01false_01_4-members.html b/master/structseastar_1_1future_1_1finally__body_3_01Func_00_01false_01_4-members.html new file mode 100644 index 000000000..b696887b6 --- /dev/null +++ b/master/structseastar_1_1future_1_1finally__body_3_01Func_00_01false_01_4-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::future< T >::finally_body< Func, false > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1future_1_1finally__body_3_01Func_00_01false_01_4.html b/master/structseastar_1_1future_1_1finally__body_3_01Func_00_01false_01_4.html new file mode 100644 index 000000000..a7511d7fe --- /dev/null +++ b/master/structseastar_1_1future_1_1finally__body_3_01Func_00_01false_01_4.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: seastar::future< T >::finally_body< Func, false > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::future< T >::finally_body< Func, false > Struct Template Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    finally_body (Func &&func) noexcept
     
    +future< T > operator() (future< T > &&result) noexcept
     
    + + + +

    +Public Attributes

    +Func _func
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1future_1_1finally__body_3_01Func_00_01true_01_4-members.html b/master/structseastar_1_1future_1_1finally__body_3_01Func_00_01true_01_4-members.html new file mode 100644 index 000000000..bdb63ebe9 --- /dev/null +++ b/master/structseastar_1_1future_1_1finally__body_3_01Func_00_01true_01_4-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::future< T >::finally_body< Func, true > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1future_1_1finally__body_3_01Func_00_01true_01_4.html b/master/structseastar_1_1future_1_1finally__body_3_01Func_00_01true_01_4.html new file mode 100644 index 000000000..4479428c4 --- /dev/null +++ b/master/structseastar_1_1future_1_1finally__body_3_01Func_00_01true_01_4.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: seastar::future< T >::finally_body< Func, true > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::future< T >::finally_body< Func, true > Struct Template Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    finally_body (Func &&func) noexcept
     
    +future< T > operator() (future< T > &&result) noexcept
     
    + + + +

    +Public Attributes

    +Func _func
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1future__state__base-members.html b/master/structseastar_1_1future__state__base-members.html new file mode 100644 index 000000000..bbe661450 --- /dev/null +++ b/master/structseastar_1_1future__state__base-members.html @@ -0,0 +1,104 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::future_state_base Member List
    +
    +
    + +

    This is the complete list of members for seastar::future_state_base, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + +
    _u (defined in seastar::future_state_base)seastar::future_state_base
    available() const noexcept (defined in seastar::future_state_base)seastar::future_state_baseinline
    current_exception_as_futureseastar::future_state_basefriend
    failed() const noexcept (defined in seastar::future_state_base)seastar::future_state_baseinline
    future_state_base() noexcept=default (defined in seastar::future_state_base)seastar::future_state_base
    future_state_base(state st) noexcept (defined in seastar::future_state_base)seastar::future_state_baseinline
    future_state_base(std::exception_ptr &&ex) noexcept (defined in seastar::future_state_base)seastar::future_state_baseinline
    future_state_base(future_state_base &&x) noexcept (defined in seastar::future_state_base)seastar::future_state_baseinline
    future_state_base(current_exception_future_marker) noexcept (defined in seastar::future_state_base)seastar::future_state_baseprotected
    future_state_base(nested_exception_marker, future_state_base &&old) noexcept (defined in seastar::future_state_base)seastar::future_state_baseprotected
    future_state_base(nested_exception_marker, future_state_base &&n, future_state_base &&old) noexcept (defined in seastar::future_state_base)seastar::future_state_baseprotected
    get_exception() &&noexcept (defined in seastar::future_state_base)seastar::future_state_baseinline
    get_exception() const &noexcept (defined in seastar::future_state_base)seastar::future_state_baseinline
    ignore() noexcept (defined in seastar::future_state_base)seastar::future_state_base
    operator=(future_state_base &&x) noexcept=default (defined in seastar::future_state_base)seastar::future_state_base
    rethrow_exception() && (defined in seastar::future_state_base)seastar::future_state_baseprotected
    rethrow_exception() const & (defined in seastar::future_state_base)seastar::future_state_baseprotected
    set_exception(std::exception_ptr &&ex) noexcept (defined in seastar::future_state_base)seastar::future_state_baseinline
    set_exception(future_state_base &&state) noexcept (defined in seastar::future_state_base)seastar::future_state_baseinline
    state enum name (defined in seastar::future_state_base)seastar::future_state_base
    valid() const noexcept (defined in seastar::future_state_base)seastar::future_state_baseinline
    ~future_state_base() noexcept=default (defined in seastar::future_state_base)seastar::future_state_baseprotected
    + + + + diff --git a/master/structseastar_1_1future__state__base.html b/master/structseastar_1_1future__state__base.html new file mode 100644 index 000000000..afb718541 --- /dev/null +++ b/master/structseastar_1_1future__state__base.html @@ -0,0 +1,204 @@ + + + + + + + +Seastar: seastar::future_state_base Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    + +
    + + + + + + + + +

    +Classes

    union  any
     
    struct  current_exception_future_marker
     
    struct  nested_exception_marker
     
    + + + +

    +Public Types

    enum class  state : uintptr_t {
    +  invalid = 0 +, future = 1 +, result_unavailable = 2 +, result = 3 +,
    +  exception_min = 4 +
    + }
     
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    future_state_base (state st) noexcept
     
    future_state_base (std::exception_ptr &&ex) noexcept
     
    future_state_base (future_state_base &&x) noexcept
     
    +bool valid () const noexcept
     
    +bool available () const noexcept
     
    +bool failed () const noexcept
     
    +void ignore () noexcept
     
    +void set_exception (std::exception_ptr &&ex) noexcept
     
    +future_state_baseoperator= (future_state_base &&x) noexcept=default
     
    +void set_exception (future_state_base &&state) noexcept
     
    +std::exception_ptr get_exception () &&noexcept
     
    +const std::exception_ptr & get_exception () const &noexcept
     
    + + + +

    +Public Attributes

    +union seastar::future_state_base::any _u
     
    + + + + + + + + + + + +

    +Protected Member Functions

    future_state_base (current_exception_future_marker) noexcept
     
    future_state_base (nested_exception_marker, future_state_base &&old) noexcept
     
    future_state_base (nested_exception_marker, future_state_base &&n, future_state_base &&old) noexcept
     
    +void rethrow_exception () &&
     
    +void rethrow_exception () const &
     
    +

    Class Documentation

    + +

    ◆ seastar::future_state_base::current_exception_future_marker

    + +
    +
    + + + + +
    struct seastar::future_state_base::current_exception_future_marker
    +
    + +
    +
    + +

    ◆ seastar::future_state_base::nested_exception_marker

    + +
    +
    + + + + +
    struct seastar::future_state_base::nested_exception_marker
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1futurize-members.html b/master/structseastar_1_1futurize-members.html new file mode 100644 index 000000000..cb11ed505 --- /dev/null +++ b/master/structseastar_1_1futurize-members.html @@ -0,0 +1,97 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::futurize< T > Member List
    +
    +
    + +

    This is the complete list of members for seastar::futurize< T >, including all inherited members.

    + + + + + + + + + + + + + + + + +
    apply(Func &&func, std::tuple< FuncArgs... > &&args) noexceptseastar::futurize< T >inlinestatic
    apply(Func &&func, FuncArgs &&... args) noexceptseastar::futurize< T >inlinestatic
    base typedef (defined in seastar::futurize< T >)seastar::futurize< T >
    current_exception_as_future() noexcept (defined in seastar::futurize< T >)seastar::futurize< T >inlinestatic
    from_tuple(tuple_type &&value)seastar::futurize< T >inlinestatic
    from_tuple(const tuple_type &value)seastar::futurize< T >inlinestatic
    from_tuple(value_type &&value)seastar::futurize< T >inlinestatic
    from_tuple(const value_type &value)seastar::futurize< T >inlinestatic
    invoke(Func &&func, FuncArgs &&... args) noexceptseastar::futurize< T >inlinestatic
    invoke(Func &&func, internal::monostate) noexcept (defined in seastar::futurize< T >)seastar::futurize< T >inlinestatic
    promise_base_with_type typedef (defined in seastar::futurize< T >)seastar::futurize< T >
    promise_type typedef (defined in seastar::futurize< T >)seastar::futurize< T >
    tuple_type typedef (defined in seastar::futurize< T >)seastar::futurize< T >
    type typedef (defined in seastar::futurize< T >)seastar::futurize< T >
    value_type typedefseastar::futurize< T >
    + + + + diff --git a/master/structseastar_1_1futurize.html b/master/structseastar_1_1futurize.html new file mode 100644 index 000000000..638bd46db --- /dev/null +++ b/master/structseastar_1_1futurize.html @@ -0,0 +1,239 @@ + + + + + + + +Seastar: seastar::futurize< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    + +
    +

    Detailed Description

    +
    template<typename T>
    +struct seastar::futurize< T >

    Converts a type to a future type, if it isn't already.

    +
    Returns
    Result in member type 'type'.
    +
    +Inheritance diagram for seastar::futurize< T >:
    +
    +
    + +
    + + + + + + + + + + + + + + + +

    +Public Types

    +using base = internal::futurize_base< T >
     
    +using type = typename base::type
     
    +using promise_type = typename base::promise_type
     
    +using promise_base_with_type = typename base::promise_base_with_type
     
    +using value_type = typename type::value_type
     The value tuple type associated with type.
     
    +using tuple_type = typename type::tuple_type
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Static Public Member Functions

    template<typename Func , typename... FuncArgs>
    static type apply (Func &&func, std::tuple< FuncArgs... > &&args) noexcept
     
    template<typename Func , typename... FuncArgs>
    static type invoke (Func &&func, FuncArgs &&... args) noexcept
     
    +template<typename Func >
    static type invoke (Func &&func, internal::monostate) noexcept
     
    +template<typename Func , typename... FuncArgs>
    static type apply (Func &&func, FuncArgs &&... args) noexcept
     Deprecated alias of invoke.
     
    +static type current_exception_as_future () noexcept
     
    +static type from_tuple (tuple_type &&value)
     Convert the tuple representation into a future.
     
    +static type from_tuple (const tuple_type &value)
     Convert the tuple representation into a future.
     
    +static type from_tuple (value_type &&value)
     Convert the tuple representation into a future.
     
    +static type from_tuple (const value_type &value)
     Convert the tuple representation into a future.
     
    +

    Member Function Documentation

    + +

    ◆ apply()

    + +
    +
    +
    +template<typename T >
    +
    +template<typename Func , typename... FuncArgs>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    static type seastar::futurize< T >::apply (Func && func,
    std::tuple< FuncArgs... > && args 
    )
    +
    +inlinestaticnoexcept
    +
    +

    Apply a function to an argument list (expressed as a tuple) and return the result, as a future (if it wasn't already).

    + +
    +
    + +

    ◆ invoke()

    + +
    +
    +
    +template<typename T >
    +
    +template<typename Func , typename... FuncArgs>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    static type seastar::futurize< T >::invoke (Func && func,
    FuncArgs &&... args 
    )
    +
    +inlinestaticnoexcept
    +
    +

    Invoke a function to an argument list and return the result, as a future (if it wasn't already).

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1futurize.png b/master/structseastar_1_1futurize.png new file mode 100644 index 0000000000000000000000000000000000000000..7645c2d72fc18a4b227b68f527c8ceddd30cc704 GIT binary patch literal 718 zcmeAS@N?(olHy`uVBq!ia0vp^*MK;HgBeH$U8%kaq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0Vm)0PLn;{G&b__vu>y~)xc=S$|Bqib zb1+bpon^c{SlRoo(w!c0vv=B>OSjDPn6zaUllP=O8XHtjcB^e@+Tk+k=DvMV~Ouno<&9hxK)9rEe`UvS_xAngNbpB>NF*KWV&+YVuygxe=Z*Pe_ zxp(=}Jv;W6Wgjn7dAt95#O;kg_v|%1EbacccX_q*-ANN|i!+K(Gh3(rd?C1{nfF>< zQE|ZS?fO{{o_4ZYo8GwazUHCl&fdf=uUw|LJY~GLOv=deYO?9&vg0aYCpYMEu=~%O zt0%ZSZePQ)ls9=M7wvWw3awrIKHp`v+nK8D&+BSeUcNZ1I{LC_Mbp(i$MZhw?_Ha$ zx+eX3PPE)B2 zOaL|0MeW+#Z7SDiMU<}+-6?jo%ZuZIdn4-uSK{#p<)u?DRVgv9 zS$2Tw!y*u_?=;<3vfk_QPjU9?MQjD0`}?l)>?^%={?4w3t#_05ow@bo{3ZRg?FVyJ z{?C4LZ}C}0N!DkVBWBOOxgQjs%VZ_bN-L`+N^f7M@>q4v-OI-|Zo6+~dQ2<(jKk}$ zpLO<&_0$q8FKu19?&^8THIq*C|Jl-4ve$g?o)Dv~np=M?ci8rue) + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::http::reply Member List
    +
    +
    + +

    This is the complete list of members for seastar::http::reply, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + +
    _contentseastar::http::reply
    _headersseastar::http::reply
    _response_line (defined in seastar::http::reply)seastar::http::reply
    _status (defined in seastar::http::reply)seastar::http::reply
    _version (defined in seastar::http::reply)seastar::http::reply
    add_header(const sstring &h, const sstring &value) (defined in seastar::http::reply)seastar::http::replyinline
    chunk_extensions (defined in seastar::http::reply)seastar::http::reply
    content_length (defined in seastar::http::reply)seastar::http::reply
    done(const sstring &content_type) (defined in seastar::http::reply)seastar::http::replyinline
    done()seastar::http::replyinline
    get_header(const sstring &name) constseastar::http::replyinline
    reply() (defined in seastar::http::reply)seastar::http::replyinline
    response_line() (defined in seastar::http::reply)seastar::http::reply
    set_content_type(const sstring &content_type="html")seastar::http::replyinline
    set_mime_type(const sstring &mime)seastar::http::replyinline
    set_status(status_type status, sstring content="") (defined in seastar::http::reply)seastar::http::replyinline
    set_version(const sstring &version) (defined in seastar::http::reply)seastar::http::replyinline
    status_type enum nameseastar::http::reply
    trailing_headers (defined in seastar::http::reply)seastar::http::reply
    write_body(const sstring &content_type, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)seastar::http::reply
    write_body(const sstring &content_type, sstring content)seastar::http::reply
    + + + + diff --git a/master/structseastar_1_1http_1_1reply.html b/master/structseastar_1_1http_1_1reply.html new file mode 100644 index 000000000..e942a5888 --- /dev/null +++ b/master/structseastar_1_1http_1_1reply.html @@ -0,0 +1,535 @@ + + + + + + + +Seastar: seastar::http::reply Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::http::reply Struct Reference
    +
    +
    +

    Detailed Description

    +

    A reply to be sent to a client.

    +
    +

    #include <seastar/http/reply.hh>

    + + + + +

    +Public Types

    enum class  status_type {
    +  continue_ = 100 +, switching_protocols = 101 +, ok = 200 +, created = 201 +,
    +  accepted = 202 +, nonauthoritative_information = 203 +, no_content = 204 +, reset_content = 205 +,
    +  partial_content = 206 +, multiple_choices = 300 +, moved_permanently = 301 +, moved_temporarily = 302 +,
    +  see_other = 303 +, not_modified = 304 +, use_proxy = 305 +, temporary_redirect = 307 +,
    +  bad_request = 400 +, unauthorized = 401 +, payment_required = 402 +, forbidden = 403 +,
    +  not_found = 404 +, method_not_allowed = 405 +, not_acceptable = 406 +, request_timeout = 408 +,
    +  conflict = 409 +, gone = 410 +, length_required = 411 +, payload_too_large = 413 +,
    +  uri_too_long = 414 +, unsupported_media_type = 415 +, expectation_failed = 417 +, unprocessable_entity = 422 +,
    +  upgrade_required = 426 +, too_many_requests = 429 +, internal_server_error = 500 +, not_implemented = 501 +,
    +  bad_gateway = 502 +, service_unavailable = 503 +, gateway_timeout = 504 +, http_version_not_supported = 505 +,
    +  insufficient_storage = 507 +
    + }
     
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +replyadd_header (const sstring &h, const sstring &value)
     
    sstring get_header (const sstring &name) const
     
    +replyset_version (const sstring &version)
     
    +replyset_status (status_type status, sstring content="")
     
    replyset_mime_type (const sstring &mime)
     
    replyset_content_type (const sstring &content_type="html")
     
    +replydone (const sstring &content_type)
     
    replydone ()
     
    +sstring response_line ()
     
    void write_body (const sstring &content_type, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)
     use an output stream to write the message body More...
     
    void write_body (const sstring &content_type, sstring content)
     Write a string as the reply. More...
     
    + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +enum seastar::http::reply::status_type _status
     
    std::unordered_map< sstring, sstring, seastar::internal::case_insensitive_hash, seastar::internal::case_insensitive_cmp > _headers
     
    +sstring _version
     
    sstring _content
     
    +size_t content_length = 0
     
    +sstring _response_line
     
    +std::unordered_map< sstring, sstring > trailing_headers
     
    +std::unordered_map< sstring, sstring > chunk_extensions
     
    +

    Member Enumeration Documentation

    + +

    ◆ status_type

    + +
    +
    + + + + + +
    + + + + +
    enum class seastar::http::reply::status_type
    +
    +strong
    +
    +

    The status of the reply.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Enumerator
    continue_ 

    continue

    +
    switching_protocols 

    switching_protocols

    +
    ok 

    ok

    +
    created 

    created

    +
    accepted 

    accepted

    +
    nonauthoritative_information 

    nonauthoritative_information

    +
    no_content 

    no_content

    +
    reset_content 

    reset_content

    +
    multiple_choices 

    partial_content

    +

    multiple_choices

    +
    moved_permanently 

    moved_permanently

    +
    moved_temporarily 

    moved_temporarily

    +
    see_other 

    see_other

    +
    not_modified 

    not_modified

    +
    use_proxy 

    use_proxy

    +
    temporary_redirect 

    temporary_redirect

    +
    bad_request 

    bad_request

    +
    unauthorized 

    unauthorized

    +
    payment_required 

    payment_required

    +
    forbidden 

    forbidden

    +
    not_found 

    not_found

    +
    method_not_allowed 

    method_not_allowed

    +
    not_acceptable 

    not_acceptable

    +
    request_timeout 

    request_timeout

    +
    conflict 

    conflict

    +
    gone 

    gone

    +
    length_required 

    length_required

    +
    payload_too_large 

    payload_too_large

    +
    uri_too_long 

    uri_too_long

    +
    unsupported_media_type 

    unsupported_media_type

    +
    expectation_failed 

    expectation_failed

    +
    unprocessable_entity 

    unprocessable_entity

    +
    upgrade_required 

    upgrade_required

    +
    too_many_requests 

    too_many_requests

    +
    internal_server_error 

    internal_server_error

    +
    not_implemented 

    not_implemented

    +
    bad_gateway 

    bad_gateway

    +
    service_unavailable 

    service_unavailable

    +
    gateway_timeout 

    gateway_timeout

    +
    http_version_not_supported 

    http_version_not_supported

    +
    insufficient_storage 

    insufficient_storage

    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ done()

    + +
    +
    + + + + + +
    + + + + + + + +
    reply & seastar::http::reply::done ()
    +
    +inline
    +
    +

    Done should be called before using the reply. It would set the response line

    + +
    +
    + +

    ◆ get_header()

    + +
    +
    + + + + + +
    + + + + + + + + +
    sstring seastar::http::reply::get_header (const sstring & name) const
    +
    +inline
    +
    +

    Search for the first header of a given name

    Parameters
    + + +
    namethe header name
    +
    +
    +
    Returns
    a pointer to the header value, if it exists or empty string
    + +
    +
    + +

    ◆ set_content_type()

    + +
    +
    + + + + + +
    + + + + + + + + +
    reply & seastar::http::reply::set_content_type (const sstring & content_type = "html")
    +
    +inline
    +
    +

    Set the content type mime type according to the file extension that would have been used if it was a file: e.g. html, txt, json etc'

    + +
    +
    + +

    ◆ set_mime_type()

    + +
    +
    + + + + + +
    + + + + + + + + +
    reply & seastar::http::reply::set_mime_type (const sstring & mime)
    +
    +inline
    +
    +

    Set the content type mime type. Used when the mime type is known. For most cases, use the set_content_type

    + +
    +
    + +

    ◆ write_body() [1/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void seastar::http::reply::write_body (const sstring & content_type,
    noncopyable_function< future<>(output_stream< char > &&)> && body_writer 
    )
    +
    + +

    use an output stream to write the message body

    +

    When a handler needs to use an output stream it should call this method with a function.

    +
    Parameters
    + + + +
    content_type- is used to choose the content type of the body. Use the file extension you would have used for such a content, (i.e. "txt", "html", "json", etc')
    body_writer- a function that accept an output stream and use that stream to write the body. The function should take ownership of the stream while using it and must close the stream when it is done.
    +
    +
    +

    Message would use chunked transfer encoding in the reply.

    + +
    +
    + +

    ◆ write_body() [2/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void seastar::http::reply::write_body (const sstring & content_type,
    sstring content 
    )
    +
    + +

    Write a string as the reply.

    +
    Parameters
    + + + +
    content_type- is used to choose the content type of the body. Use the file extension you would have used for such a content, (i.e. "txt", "html", "json", etc')
    content- the message content. This would set the the content and content type of the message along with any additional information that is needed to send the message.
    +
    +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ _content

    + +
    +
    + + + + +
    sstring seastar::http::reply::_content
    +
    +

    The content to be sent in the reply.

    + +
    +
    + +

    ◆ _headers

    + +
    +
    + + + + +
    std::unordered_map<sstring, sstring, seastar::internal::case_insensitive_hash, seastar::internal::case_insensitive_cmp> seastar::http::reply::_headers
    +
    +

    The headers to be included in the reply.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1http_1_1request-members.html b/master/structseastar_1_1http_1_1request-members.html new file mode 100644 index 000000000..1642a565c --- /dev/null +++ b/master/structseastar_1_1http_1_1request-members.html @@ -0,0 +1,120 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::http::request Member List
    +
    +
    + +

    This is the complete list of members for seastar::http::request, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    _bytes_written (defined in seastar::http::request)seastar::http::requestmutable
    _client_address (defined in seastar::http::request)seastar::http::request
    _headers (defined in seastar::http::request)seastar::http::request
    _method (defined in seastar::http::request)seastar::http::request
    _server_address (defined in seastar::http::request)seastar::http::request
    _url (defined in seastar::http::request)seastar::http::request
    _version (defined in seastar::http::request)seastar::http::request
    body_writer (defined in seastar::http::request)seastar::http::request
    chunk_extensions (defined in seastar::http::request)seastar::http::request
    content (defined in seastar::http::request)seastar::http::request
    content_length (defined in seastar::http::request)seastar::http::request
    content_stream (defined in seastar::http::request)seastar::http::request
    content_type_class (defined in seastar::http::request)seastar::http::request
    ctclass enum name (defined in seastar::http::request)seastar::http::request
    format_url() constseastar::http::request
    get_client_address() constseastar::http::requestinline
    get_header(const sstring &name) constseastar::http::requestinline
    get_path_param(const sstring &key) constseastar::http::requestinline
    get_protocol_name() constseastar::http::requestinline
    get_query_param(const sstring &key) constseastar::http::requestinline
    get_server_address() constseastar::http::requestinline
    get_url() constseastar::http::requestinline
    is_form_post() const (defined in seastar::http::request)seastar::http::requestinline
    is_multi_part() const (defined in seastar::http::request)seastar::http::requestinline
    make(sstring method, sstring host, sstring path)seastar::http::requeststatic
    make(httpd::operation_type type, sstring host, sstring path)seastar::http::requeststatic
    param (defined in seastar::http::request)seastar::http::request
    parse_query_param()seastar::http::request
    protocol_name (defined in seastar::http::request)seastar::http::request
    query_parameters (defined in seastar::http::request)seastar::http::request
    set_content_type(const sstring &content_type="html")seastar::http::requestinline
    set_expects_continue()seastar::http::request
    set_mime_type(const sstring &mime)seastar::http::requestinline
    should_keep_alive() const (defined in seastar::http::request)seastar::http::requestinline
    trailing_headers (defined in seastar::http::request)seastar::http::request
    write_body(const sstring &content_type, sstring content)seastar::http::request
    write_body(const sstring &content_type, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)seastar::http::request
    write_body(const sstring &content_type, size_t len, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)seastar::http::request
    + + + + diff --git a/master/structseastar_1_1http_1_1request.html b/master/structseastar_1_1http_1_1request.html new file mode 100644 index 000000000..4731fb327 --- /dev/null +++ b/master/structseastar_1_1http_1_1request.html @@ -0,0 +1,750 @@ + + + + + + + +Seastar: seastar::http::request Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    + +
    +

    Detailed Description

    +

    A request received from a client.

    +
    +

    #include <seastar/http/request.hh>

    + + + + +

    +Public Types

    enum class  ctclass : char { other +, multipart +, app_x_www_urlencoded + }
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    const socket_addressget_client_address () const
     
    const socket_addressget_server_address () const
     
    sstring get_header (const sstring &name) const
     
    sstring get_query_param (const sstring &key) const
     
    sstring get_path_param (const sstring &key) const
     
    sstring get_protocol_name () const
     
    sstring get_url () const
     
    +bool is_multi_part () const
     
    +bool is_form_post () const
     
    +bool should_keep_alive () const
     
    sstring parse_query_param ()
     
    sstring format_url () const
     
    void set_mime_type (const sstring &mime)
     
    void set_content_type (const sstring &content_type="html")
     
    void write_body (const sstring &content_type, sstring content)
     Write a string as the body. More...
     
    void write_body (const sstring &content_type, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)
     Use an output stream to write the message body. More...
     
    void write_body (const sstring &content_type, size_t len, noncopyable_function< future<>(output_stream< char > &&)> &&body_writer)
     Use an output stream to write the message body. More...
     
    void set_expects_continue ()
     Make request send Expect header. More...
     
    + + + + + + + +

    +Static Public Member Functions

    static request make (sstring method, sstring host, sstring path)
     Make simple request. More...
     
    static request make (httpd::operation_type type, sstring host, sstring path)
     Make simple request. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +socket_address _client_address
     
    +socket_address _server_address
     
    +sstring _method
     
    +sstring _url
     
    +sstring _version
     
    +ctclass content_type_class
     
    +size_t content_length = 0
     
    +size_t _bytes_written = 0
     
    +std::unordered_map< sstring, sstring, seastar::internal::case_insensitive_hash, seastar::internal::case_insensitive_cmp > _headers
     
    +std::unordered_map< sstring, sstring > query_parameters
     
    +httpd::parameters param
     
    +sstring content
     
    +input_stream< char > * content_stream
     
    +std::unordered_map< sstring, sstring > trailing_headers
     
    +std::unordered_map< sstring, sstring > chunk_extensions
     
    +sstring protocol_name = "http"
     
    +noncopyable_function< future<>(output_stream< char > &&)> body_writer
     
    +

    Member Function Documentation

    + +

    ◆ format_url()

    + +
    +
    + + + + + + + +
    sstring seastar::http::request::format_url () const
    +
    +

    Generates the URL string from the _url and query_parameters values in a form parseable by the above method

    + +
    +
    + +

    ◆ get_client_address()

    + +
    +
    + + + + + +
    + + + + + + + +
    const socket_address & seastar::http::request::get_client_address () const
    +
    +inline
    +
    +

    Get the address of the client that generated the request

    Returns
    The address of the client that generated the request
    + +
    +
    + +

    ◆ get_header()

    + +
    +
    + + + + + +
    + + + + + + + + +
    sstring seastar::http::request::get_header (const sstring & name) const
    +
    +inline
    +
    +

    Search for the first header of a given name

    Parameters
    + + +
    namethe header name
    +
    +
    +
    Returns
    a pointer to the header value, if it exists or empty string
    + +
    +
    + +

    ◆ get_path_param()

    + +
    +
    + + + + + +
    + + + + + + + + +
    sstring seastar::http::request::get_path_param (const sstring & key) const
    +
    +inline
    +
    +

    Search for the last path parameter of a given key

    Parameters
    + + +
    keythe path paramerter key
    +
    +
    +
    Returns
    the unescaped path parameter value, if it exists and can be path decoded successfully, otherwise it returns an empty string
    + +
    +
    + +

    ◆ get_protocol_name()

    + +
    +
    + + + + + +
    + + + + + + + +
    sstring seastar::http::request::get_protocol_name () const
    +
    +inline
    +
    +

    Get the request protocol name. Can be either "http" or "https".

    + +
    +
    + +

    ◆ get_query_param()

    + +
    +
    + + + + + +
    + + + + + + + + +
    sstring seastar::http::request::get_query_param (const sstring & key) const
    +
    +inline
    +
    +

    Search for the last query parameter of a given key

    Parameters
    + + +
    keythe query paramerter key
    +
    +
    +
    Returns
    the query parameter value, if it exists or empty string
    + +
    +
    + +

    ◆ get_server_address()

    + +
    +
    + + + + + +
    + + + + + + + +
    const socket_address & seastar::http::request::get_server_address () const
    +
    +inline
    +
    +

    Get the address of the server that handled the request

    Returns
    The address of the server that handled the request
    + +
    +
    + +

    ◆ get_url()

    + +
    +
    + + + + + +
    + + + + + + + +
    sstring seastar::http::request::get_url () const
    +
    +inline
    +
    +

    Get the request url.

    Returns
    the request url
    + +
    +
    + +

    ◆ make() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    static request seastar::http::request::make (httpd::operation_type type,
    sstring host,
    sstring path 
    )
    +
    +static
    +
    + +

    Make simple request.

    +
    Parameters
    + + + +
    method- method to use, e.g. operation_type::GET
    host- host to contact. This value will be used as the "Host" header \path - the URL to send the request to
    +
    +
    + +
    +
    + +

    ◆ make() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    static request seastar::http::request::make (sstring method,
    sstring host,
    sstring path 
    )
    +
    +static
    +
    + +

    Make simple request.

    +
    Parameters
    + + + +
    method- method to use, e.g. "GET" or "POST"
    host- host to contact. This value will be used as the "Host" header \path - the URL to send the request to
    +
    +
    + +
    +
    + +

    ◆ parse_query_param()

    + +
    +
    + + + + + + + +
    sstring seastar::http::request::parse_query_param ()
    +
    +

    Set the query parameters in the request objects. Returns the URL path part, i.e. – without the query paremters query param appear after the question mark and are separated by the ampersand sign

    + +
    +
    + +

    ◆ set_content_type()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::http::request::set_content_type (const sstring & content_type = "html")
    +
    +inline
    +
    +

    Set the content type mime type according to the file extension that would have been used if it was a file: e.g. html, txt, json etc'

    + +
    +
    + +

    ◆ set_expects_continue()

    + +
    +
    + + + + + + + +
    void seastar::http::request::set_expects_continue ()
    +
    + +

    Make request send Expect header.

    +

    When set, the connection::make_request will send the Expect header and will wait for the server resply before tranferring the body

    + +
    +
    + +

    ◆ set_mime_type()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::http::request::set_mime_type (const sstring & mime)
    +
    +inline
    +
    +

    Set the content type mime type. Used when the mime type is known. For most cases, use the set_content_type

    + +
    +
    + +

    ◆ write_body() [1/3]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void seastar::http::request::write_body (const sstring & content_type,
    noncopyable_function< future<>(output_stream< char > &&)> && body_writer 
    )
    +
    + +

    Use an output stream to write the message body.

    +

    When a handler needs to use an output stream it should call this method with a function.

    +
    Parameters
    + + + +
    content_type- is used to choose the content type of the body. Use the file extension you would have used for such a content, (i.e. "txt", "html", "json", etc')
    body_writer- a function that accept an output stream and use that stream to write the body. The function should take ownership of the stream while using it and must close the stream when it is done.
    +
    +
    +

    This method can be used to write body of unknown or hard to evaluate length. For example, when sending the contents of some other input_stream or when the body is available as a collection of memory buffers. Message would use chunked transfer encoding.

    + +
    +
    + +

    ◆ write_body() [2/3]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void seastar::http::request::write_body (const sstring & content_type,
    size_t len,
    noncopyable_function< future<>(output_stream< char > &&)> && body_writer 
    )
    +
    + +

    Use an output stream to write the message body.

    +

    When a handler needs to use an output stream it should call this method with a function.

    +
    Parameters
    + + + + +
    content_type- is used to choose the content type of the body. Use the file extension you would have used for such a content, (i.e. "txt", "html", "json", etc')
    len- known in advance content length
    body_writer- a function that accept an output stream and use that stream to write the body. The function should take ownership of the stream while using it and must close the stream when it is done.
    +
    +
    +

    This method is to be used when the body is not available of a single contiguous buffer, but the size of it is known and it's desirable to provide it to the server, or when the server strongly requires the content-length header for any reason.

    +

    Message would use plain encoding in the the reply with Content-Length header set accordingly. If the body_writer doesn't generate enough bytes into the stream or tries to put more data into the stream, sending the request would resolve with exceptional future.

    + +
    +
    + +

    ◆ write_body() [3/3]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void seastar::http::request::write_body (const sstring & content_type,
    sstring content 
    )
    +
    + +

    Write a string as the body.

    +
    Parameters
    + + + +
    content_type- is used to choose the content type of the body. Use the file extension you would have used for such a content, (i.e. "txt", "html", "json", etc')
    content- the message content. This would set the the content, conent length and content type of the message along with any additional information that is needed to send the message.
    +
    +
    +

    This method is good to be used if the body is available as a contiguous buffer.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1httpd_1_1api__doc-members.html b/master/structseastar_1_1httpd_1_1api__doc-members.html new file mode 100644 index 000000000..2f8de6bea --- /dev/null +++ b/master/structseastar_1_1httpd_1_1api__doc-members.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::httpd::api_doc Member List
    +
    +
    + +

    This is the complete list of members for seastar::httpd::api_doc, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + +
    _elements (defined in seastar::json::json_base)seastar::json::json_base
    add(json_base_element *element, std::string name, bool mandatory=false)seastar::json::json_basevirtual
    api_doc() (defined in seastar::httpd::api_doc)seastar::httpd::api_docinline
    api_doc(const api_doc &e) (defined in seastar::httpd::api_doc)seastar::httpd::api_docinline
    description (defined in seastar::httpd::api_doc)seastar::httpd::api_doc
    is_verify() constseastar::json::json_basevirtual
    json_base()=default (defined in seastar::json::json_base)seastar::json::json_base
    json_base(const json_base &)=delete (defined in seastar::json::json_base)seastar::json::json_base
    jsonable()=default (defined in seastar::json::jsonable)seastar::json::jsonable
    jsonable(const jsonable &)=default (defined in seastar::json::jsonable)seastar::json::jsonable
    operator=(const T &e) (defined in seastar::httpd::api_doc)seastar::httpd::api_docinline
    operator=(const api_doc &e) (defined in seastar::httpd::api_doc)seastar::httpd::api_docinline
    operator=(const json_base &)=delete (defined in seastar::json::json_base)seastar::json::json_base
    operator=(const jsonable &)=default (defined in seastar::json::jsonable)seastar::json::jsonable
    path (defined in seastar::httpd::api_doc)seastar::httpd::api_doc
    register_params() (defined in seastar::httpd::api_doc)seastar::httpd::api_docinline
    to_json() constseastar::json::json_basevirtual
    write(output_stream< char > &) constseastar::json::json_basevirtual
    ~json_base()=default (defined in seastar::json::json_base)seastar::json::json_basevirtual
    ~jsonable()=default (defined in seastar::json::jsonable)seastar::json::jsonablevirtual
    + + + + diff --git a/master/structseastar_1_1httpd_1_1api__doc.html b/master/structseastar_1_1httpd_1_1api__doc.html new file mode 100644 index 000000000..bdee4aa9c --- /dev/null +++ b/master/structseastar_1_1httpd_1_1api__doc.html @@ -0,0 +1,269 @@ + + + + + + + +Seastar: seastar::httpd::api_doc Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::httpd::api_doc Struct Reference
    +
    +
    +
    +Inheritance diagram for seastar::httpd::api_doc:
    +
    +
    + + +seastar::json::json_base +seastar::json::jsonable + +
    + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +void register_params ()
     
    api_doc (const api_doc &e)
     
    +template<class T >
    api_docoperator= (const T &e)
     
    +api_docoperator= (const api_doc &e)
     
    virtual std::string to_json () const
     
    virtual future write (output_stream< char > &) const
     write to an output stream More...
     
    virtual bool is_verify () const
     
    virtual void add (json_base_element *element, std::string name, bool mandatory=false)
     
    + + + + + + + +

    +Public Attributes

    +json::json_element< std::string > path
     
    +json::json_element< std::string > description
     
    +std::vector< json_base_element * > _elements
     
    +

    Member Function Documentation

    + +

    ◆ add()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    virtual void seastar::json::json_base::add (json_base_elementelement,
    std::string name,
    bool mandatory = false 
    )
    +
    +virtualinherited
    +
    +

    Register an element in an object

    Parameters
    + + + + +
    elementthe element to be added
    namethe element name
    mandatoryis this element mandatory.
    +
    +
    + +
    +
    + +

    ◆ is_verify()

    + +
    +
    + + + + + +
    + + + + + + + +
    virtual bool seastar::json::json_base::is_verify () const
    +
    +virtualinherited
    +
    +

    Check that all mandatory elements are set

    Returns
    true if all mandatory parameters are set
    + +
    +
    + +

    ◆ to_json()

    + +
    +
    + + + + + +
    + + + + + + + +
    virtual std::string seastar::json::json_base::to_json () const
    +
    +virtualinherited
    +
    +

    create a formatted string of the object.

    Returns
    the object formatted.
    + +

    Implements seastar::json::jsonable.

    + +
    +
    + +

    ◆ write()

    + +
    +
    + + + + + +
    + + + + + + + + +
    virtual future seastar::json::json_base::write (output_stream< char > & ) const
    +
    +virtualinherited
    +
    + +

    write to an output stream

    + +

    Reimplemented from seastar::json::jsonable.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1httpd_1_1api__doc.png b/master/structseastar_1_1httpd_1_1api__doc.png new file mode 100644 index 0000000000000000000000000000000000000000..3950f0e460ea05655b8689e16f6d0cca17d1ee77 GIT binary patch literal 903 zcmeAS@N?(olHy`uVBq!ia0vp^6M?vcgBeI(xc}1$NJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~i+Q>@hEy=Vo%^=$wE_=od-Ij=^-pGt zP5K}@eOYyQ##2#umYg@53E%V$kL{S!F=@+$IUbX8EGMemoTbV&=}MM`W$K-^%*)qz zsJvXZtn<)mRg>6%caFQyNsr%^H_iCy)QwWA%ez*qRV_Q4mm2P??xcC;?N!#y8(GQE zqjE#tw=CBcd>y-P+rp^8NZ#b%#k`C5Og+EN6JMMSCe{b=;*Yn*Ha|9N1OA3`xk}?uhW9Ia;p_}-M296wr!D{cwOp%wWVN# zt~%3(r!EZJ=5QRCCd_!FNQoiZk0s%BCqoXBXTHW{Zu@+sdY4| zY?bo!le{01FYI~A*H^f8dV0pLKRf&T3(oH=xvP_|cDbUbOXm0j6<}CwJhg6?UrW%6 z+pD=RZ4f>7XgPn;8#&dB^R~IHIhJ}O%{A4uce-WNqAk_8pUM6;4Db2fyi;M9nV59k zlM~I)(&krJw`KUP-8t{BrN6}QldpX2_qy}`HNCjC@R!`zt<%;&2`tE+vTV+hfGraX z1G2080@r$8V*mB1b&87fevdD^_C7tV;<-0Z=#Oci{#nP + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::httpd::api_docs Member List
    +
    +
    + +

    This is the complete list of members for seastar::httpd::api_docs, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + +
    _elements (defined in seastar::json::json_base)seastar::json::json_base
    add(json_base_element *element, std::string name, bool mandatory=false)seastar::json::json_basevirtual
    api_docs() (defined in seastar::httpd::api_docs)seastar::httpd::api_docsinline
    api_docs(const api_docs &e) (defined in seastar::httpd::api_docs)seastar::httpd::api_docsinline
    apis (defined in seastar::httpd::api_docs)seastar::httpd::api_docs
    apiVersion (defined in seastar::httpd::api_docs)seastar::httpd::api_docs
    is_verify() constseastar::json::json_basevirtual
    json_base()=default (defined in seastar::json::json_base)seastar::json::json_base
    json_base(const json_base &)=delete (defined in seastar::json::json_base)seastar::json::json_base
    jsonable()=default (defined in seastar::json::jsonable)seastar::json::jsonable
    jsonable(const jsonable &)=default (defined in seastar::json::jsonable)seastar::json::jsonable
    operator=(const T &e) (defined in seastar::httpd::api_docs)seastar::httpd::api_docsinline
    operator=(const api_docs &e) (defined in seastar::httpd::api_docs)seastar::httpd::api_docsinline
    operator=(const json_base &)=delete (defined in seastar::json::json_base)seastar::json::json_base
    operator=(const jsonable &)=default (defined in seastar::json::jsonable)seastar::json::jsonable
    register_params() (defined in seastar::httpd::api_docs)seastar::httpd::api_docsinline
    swaggerVersion (defined in seastar::httpd::api_docs)seastar::httpd::api_docs
    to_json() constseastar::json::json_basevirtual
    write(output_stream< char > &) constseastar::json::json_basevirtual
    ~json_base()=default (defined in seastar::json::json_base)seastar::json::json_basevirtual
    ~jsonable()=default (defined in seastar::json::jsonable)seastar::json::jsonablevirtual
    + + + + diff --git a/master/structseastar_1_1httpd_1_1api__docs.html b/master/structseastar_1_1httpd_1_1api__docs.html new file mode 100644 index 000000000..29efaebd5 --- /dev/null +++ b/master/structseastar_1_1httpd_1_1api__docs.html @@ -0,0 +1,272 @@ + + + + + + + +Seastar: seastar::httpd::api_docs Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::httpd::api_docs Struct Reference
    +
    +
    +
    +Inheritance diagram for seastar::httpd::api_docs:
    +
    +
    + + +seastar::json::json_base +seastar::json::jsonable + +
    + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +void register_params ()
     
    api_docs (const api_docs &e)
     
    +template<class T >
    api_docsoperator= (const T &e)
     
    +api_docsoperator= (const api_docs &e)
     
    virtual std::string to_json () const
     
    virtual future write (output_stream< char > &) const
     write to an output stream More...
     
    virtual bool is_verify () const
     
    virtual void add (json_base_element *element, std::string name, bool mandatory=false)
     
    + + + + + + + + + +

    +Public Attributes

    +json::json_element< std::string > apiVersion
     
    +json::json_element< std::string > swaggerVersion
     
    +json::json_list< api_docapis
     
    +std::vector< json_base_element * > _elements
     
    +

    Member Function Documentation

    + +

    ◆ add()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    virtual void seastar::json::json_base::add (json_base_elementelement,
    std::string name,
    bool mandatory = false 
    )
    +
    +virtualinherited
    +
    +

    Register an element in an object

    Parameters
    + + + + +
    elementthe element to be added
    namethe element name
    mandatoryis this element mandatory.
    +
    +
    + +
    +
    + +

    ◆ is_verify()

    + +
    +
    + + + + + +
    + + + + + + + +
    virtual bool seastar::json::json_base::is_verify () const
    +
    +virtualinherited
    +
    +

    Check that all mandatory elements are set

    Returns
    true if all mandatory parameters are set
    + +
    +
    + +

    ◆ to_json()

    + +
    +
    + + + + + +
    + + + + + + + +
    virtual std::string seastar::json::json_base::to_json () const
    +
    +virtualinherited
    +
    +

    create a formatted string of the object.

    Returns
    the object formatted.
    + +

    Implements seastar::json::jsonable.

    + +
    +
    + +

    ◆ write()

    + +
    +
    + + + + + +
    + + + + + + + + +
    virtual future seastar::json::json_base::write (output_stream< char > & ) const
    +
    +virtualinherited
    +
    + +

    write to an output stream

    + +

    Reimplemented from seastar::json::jsonable.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1httpd_1_1api__docs.png b/master/structseastar_1_1httpd_1_1api__docs.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a48678a0a825288f4e7d328d62af2047e6d060 GIT binary patch literal 907 zcmeAS@N?(olHy`uVBq!ia0vp^6M?vcgBeI(xc}1$NJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~OL@9DhEy=Vo%^=$wE_=od-Ij=^-pGt zP5K}@eOYyQ#?vlkrm{Dj3BRUGB*%EUct&~nsd#Ri<1s1ctPrbbmg$^1M(?gQUJiGe zR1$pI<>6DIS$g*G9xI>QtRHKBdgh~35xtXwkA@1{UQXM-Y4tMUg(9!My=pSa*}AcK z?X*?Ow=PfX_^K6tI$&>LByaNXoos<|r=IJ7KOSTF&iq+ZMutxy*CLs3pHk%KhaJf; zTN{5#d(lV57uR3hF21rm{{1c0Q%@{kW$W&*5s9g1S;aKT>7v^)nbd99R9-UI7CL)f zim2~?v7g~*{eG3b6NNn|tyS$z>M2xZ{L>-F;GJo?=yru-?2xk6o? zX~R<&hHY~=4onkfyiugY5bej3aJrKr$5OCC7a@5qUaiaU*ix4%OIn|}OiDT3sdDlf zOW=ehVTVs@K9+u+tK_+BW#*y}pLl$y%YXkU`0nQPb+ezINs;OgocLH`ip%*emSHzT zFLwrTl~$KJN^Lt7QS(dT_`5)%x0&8YvSQkD@2yy~?4yyp_mr^w=sk<=pLG@PHxzfd zek|!=w@l@QId6({&kLMgXL@||?dP1y_K|O2E`Ppa;eNGUW`6S*@4NPCq7B!&-b+&^ zi*%V8@nz+nH(X`v`O6{x&V)%RFT^|JmT%uPLuKW4-$nnoyZpPa@0kzsL$>E4VElSA z*e_x~5ERw-;$s9aFo1Y743~WE*mI5H-bsu=z#c+hr*}GWBx(vWh)sfqps|Z{zs=6l ztv{9SOu4*Xh|zVn%B{Sn65G(&x;w|)e}9{@>@siBj`=4qY2OSnNLg+d=sjhh+5XzH zt0jv(bPwD-cKNHz#OF$Z{#%yknmv)Z-pDy;?UQwzwnyJyXmb0;yQo{OSLBP2{$O78 z<&@0Dg6me#k{eIO&Q_O7-}e0doWbCHkt=CvR_+r<-y_T{gKAWLD z^~ev4Kko&XuFigD_iuJK%ZFfSgukwAY!x`<^ou>L&f0I*gwLwLoWtPh>gTe~DWM4f DPBg7B literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1httpd_1_1json__operation-members.html b/master/structseastar_1_1httpd_1_1json__operation-members.html new file mode 100644 index 000000000..e3026b972 --- /dev/null +++ b/master/structseastar_1_1httpd_1_1json__operation-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::httpd::json_operation Member List
    +
    +
    + +

    This is the complete list of members for seastar::httpd::json_operation, including all inherited members.

    + + + + + +
    json_operation()seastar::httpd::json_operationinline
    json_operation(operation_type method, const sstring &nickname)seastar::httpd::json_operationinline
    method (defined in seastar::httpd::json_operation)seastar::httpd::json_operation
    nickname (defined in seastar::httpd::json_operation)seastar::httpd::json_operation
    + + + + diff --git a/master/structseastar_1_1httpd_1_1json__operation.html b/master/structseastar_1_1httpd_1_1json__operation.html new file mode 100644 index 000000000..d24bc9856 --- /dev/null +++ b/master/structseastar_1_1httpd_1_1json__operation.html @@ -0,0 +1,177 @@ + + + + + + + +Seastar: seastar::httpd::json_operation Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::httpd::json_operation Struct Reference
    +
    +
    +

    Detailed Description

    +

    A json_operation contain a method and a nickname. operation are associated to a path, that can have multiple methods

    +
    +

    #include <seastar/http/json_path.hh>

    + + + + + + +

    +Public Member Functions

     json_operation ()
     
     json_operation (operation_type method, const sstring &nickname)
     
    + + + + + +

    +Public Attributes

    +operation_type method
     
    +sstring nickname
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ json_operation() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + +
    seastar::httpd::json_operation::json_operation ()
    +
    +inline
    +
    +

    default constructor

    + +
    +
    + +

    ◆ json_operation() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    seastar::httpd::json_operation::json_operation (operation_type method,
    const sstring & nickname 
    )
    +
    +inline
    +
    +

    Construct with assignment

    Parameters
    + + + +
    methodthe http method type
    nicknamethe http nickname
    +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1httpd_1_1path__description-members.html b/master/structseastar_1_1httpd_1_1path__description-members.html new file mode 100644 index 000000000..dfc999187 --- /dev/null +++ b/master/structseastar_1_1httpd_1_1path__description-members.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::httpd::path_description Member List
    +
    +
    + +

    This is the complete list of members for seastar::httpd::path_description, including all inherited members.

    + + + + + + + + + + + + + + + + + +
    _cookie (defined in seastar::httpd::path_description)seastar::httpd::path_descriptionmutable
    mandatory_queryparams (defined in seastar::httpd::path_description)seastar::httpd::path_description
    operations (defined in seastar::httpd::path_description)seastar::httpd::path_description
    params (defined in seastar::httpd::path_description)seastar::httpd::path_description
    path (defined in seastar::httpd::path_description)seastar::httpd::path_description
    path_description()=defaultseastar::httpd::path_description
    path_description(const sstring &path, operation_type method, const sstring &nickname, const std::vector< std::pair< sstring, bool > > &path_parameters, const std::vector< sstring > &mandatory_params)seastar::httpd::path_description
    path_description(const sstring &path, operation_type method, const sstring &nickname, const std::initializer_list< path_part > &path_parameters, const std::vector< sstring > &mandatory_params)seastar::httpd::path_description
    push_static_path_part(const sstring &url)seastar::httpd::path_descriptioninline
    pushmandatory_param(const sstring &param)seastar::httpd::path_descriptioninline
    pushparam(const sstring &param, bool all_path=false)seastar::httpd::path_descriptioninline
    set(routes &_routes, handler_base *handler) const (defined in seastar::httpd::path_description)seastar::httpd::path_description
    set(routes &_routes, const json_request_function &f) const (defined in seastar::httpd::path_description)seastar::httpd::path_description
    set(routes &_routes, const future_json_function &f) const (defined in seastar::httpd::path_description)seastar::httpd::path_description
    unset(routes &_routes) const (defined in seastar::httpd::path_description)seastar::httpd::path_description
    url_component_type enum name (defined in seastar::httpd::path_description)seastar::httpd::path_description
    + + + + diff --git a/master/structseastar_1_1httpd_1_1path__description.html b/master/structseastar_1_1httpd_1_1path__description.html new file mode 100644 index 000000000..0a3a37378 --- /dev/null +++ b/master/structseastar_1_1httpd_1_1path__description.html @@ -0,0 +1,431 @@ + + + + + + + +Seastar: seastar::httpd::path_description Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::httpd::path_description Struct Reference
    +
    +
    +

    Detailed Description

    +

    path description holds the path in the system. It maps a nickname to an operation, which allows defining the operation (path and method) by its nickname.

    +

    A path_description has a type, a base path and a list of url components. Each component can be a regular path parameter, a path parameter that contains everything until the end of the path or a fixed string.

    +

    the description are taken from the json swagger definition file, during auto code generation in the compilation.

    +
    +

    #include <seastar/http/json_path.hh>

    + + + + +

    +Classes

    struct  path_part
     
    + + + +

    +Public Types

    enum class  url_component_type { PARAM +, PARAM_UNTIL_END_OF_PATH +, FIXED_STRING + }
     
    + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

     path_description ()=default
     
     path_description (const sstring &path, operation_type method, const sstring &nickname, const std::vector< std::pair< sstring, bool > > &path_parameters, const std::vector< sstring > &mandatory_params)
     
     path_description (const sstring &path, operation_type method, const sstring &nickname, const std::initializer_list< path_part > &path_parameters, const std::vector< sstring > &mandatory_params)
     
    path_descriptionpushparam (const sstring &param, bool all_path=false)
     
    path_descriptionpush_static_path_part (const sstring &url)
     adds a fixed string as part of the path This will allow to combine fixed string URL parts and path parameters. More...
     
    path_descriptionpushmandatory_param (const sstring &param)
     
    +void set (routes &_routes, handler_base *handler) const
     
    +void set (routes &_routes, const json_request_function &f) const
     
    +void set (routes &_routes, const future_json_function &f) const
     
    +void unset (routes &_routes) const
     
    + + + + + + + + + + + +

    +Public Attributes

    +std::vector< path_partparams
     
    +sstring path
     
    +json_operation operations
     
    +routes::rule_cookie _cookie
     
    +std::vector< sstring > mandatory_queryparams
     
    +

    Class Documentation

    + +

    ◆ seastar::httpd::path_description::path_part

    + +
    +
    + + + + +
    struct seastar::httpd::path_description::path_part
    +
    + + + + + + + + +
    Class Members
    +sstring +name +
    +url_component_type +type +
    + +
    +
    +

    Constructor & Destructor Documentation

    + +

    ◆ path_description() [1/3]

    + +
    +
    + + + + + +
    + + + + + + + +
    seastar::httpd::path_description::path_description ()
    +
    +default
    +
    +

    default empty constructor

    + +
    +
    + +

    ◆ path_description() [2/3]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    seastar::httpd::path_description::path_description (const sstring & path,
    operation_type method,
    const sstring & nickname,
    const std::vector< std::pair< sstring, bool > > & path_parameters,
    const std::vector< sstring > & mandatory_params 
    )
    +
    +

    constructor for path with parameters The constructor is used by

    Parameters
    + + + + + + +
    paththe url path
    methodthe http method
    nicknamethe nickname
    path_parameterspath parameters and url parts of the path
    mandatory_paramsthe names of the mandatory query parameters
    +
    +
    + +
    +
    + +

    ◆ path_description() [3/3]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    seastar::httpd::path_description::path_description (const sstring & path,
    operation_type method,
    const sstring & nickname,
    const std::initializer_list< path_part > & path_parameters,
    const std::vector< sstring > & mandatory_params 
    )
    +
    +

    constructor for path with parameters The constructor is used by

    Parameters
    + + + + + + +
    paththe url path
    methodthe http method
    nicknamethe method nickname
    path_parameterspath parameters and url parts of the path
    mandatory_paramsthe names of the mandatory query parameters
    +
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ push_static_path_part()

    + +
    +
    + + + + + +
    + + + + + + + + +
    path_description * seastar::httpd::path_description::push_static_path_part (const sstring & url)
    +
    +inline
    +
    + +

    adds a fixed string as part of the path This will allow to combine fixed string URL parts and path parameters.

    +

    For example to map a path like: /mypath/{param1}/morepath/{param2} path_description p("/mypath", operation_type::GET); p.pushparam("param1)->pushurl("morepath")->pushparam("param2");

    + +
    +
    + +

    ◆ pushmandatory_param()

    + +
    +
    + + + + + +
    + + + + + + + + +
    path_description * seastar::httpd::path_description::pushmandatory_param (const sstring & param)
    +
    +inline
    +
    +

    adds a mandatory query parameter to the path this parameter will be check before calling a handler

    Parameters
    + + +
    paramthe parameter to head
    +
    +
    +
    Returns
    a pointer to the current path description
    + +
    +
    + +

    ◆ pushparam()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    path_description * seastar::httpd::path_description::pushparam (const sstring & param,
    bool all_path = false 
    )
    +
    +inline
    +
    +

    Add a parameter to the path definition for example, if the url should match /file/{path} The constructor would be followed by a call to pushparam("path")

    +
    Parameters
    + + + +
    paramthe name of the parameters, this name will be used by the handler to identify the parameters. A name can appear at most once in a description
    all_pathwhen set to true the parameter will assume to match until the end of the url. This is useful for situation like file path with a rule like /file/{path} and a url /file/etc/hosts. path should be equal to /ets/hosts and not only /etc
    +
    +
    +
    Returns
    the current path description
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1indirect__equal__to-members.html b/master/structseastar_1_1indirect__equal__to-members.html new file mode 100644 index 000000000..baa08c47f --- /dev/null +++ b/master/structseastar_1_1indirect__equal__to-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::indirect_equal_to< Pointer, Equal > Member List
    +
    +
    + +

    This is the complete list of members for seastar::indirect_equal_to< Pointer, Equal >, including all inherited members.

    + + + + +
    _eq (defined in seastar::indirect_equal_to< Pointer, Equal >)seastar::indirect_equal_to< Pointer, Equal >
    indirect_equal_to(Equal eq=Equal()) (defined in seastar::indirect_equal_to< Pointer, Equal >)seastar::indirect_equal_to< Pointer, Equal >inline
    operator()(const Pointer &i1, const Pointer &i2) const (defined in seastar::indirect_equal_to< Pointer, Equal >)seastar::indirect_equal_to< Pointer, Equal >inline
    + + + + diff --git a/master/structseastar_1_1indirect__equal__to.html b/master/structseastar_1_1indirect__equal__to.html new file mode 100644 index 000000000..fb8eb1d61 --- /dev/null +++ b/master/structseastar_1_1indirect__equal__to.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: seastar::indirect_equal_to< Pointer, Equal > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::indirect_equal_to< Pointer, Equal > Struct Template Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    indirect_equal_to (Equal eq=Equal())
     
    +bool operator() (const Pointer &i1, const Pointer &i2) const
     
    + + + +

    +Public Attributes

    +Equal _eq
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1indirect__hash-members.html b/master/structseastar_1_1indirect__hash-members.html new file mode 100644 index 000000000..684cb5247 --- /dev/null +++ b/master/structseastar_1_1indirect__hash-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::indirect_hash< Pointer, Hash > Member List
    +
    +
    + +

    This is the complete list of members for seastar::indirect_hash< Pointer, Hash >, including all inherited members.

    + + + + +
    _h (defined in seastar::indirect_hash< Pointer, Hash >)seastar::indirect_hash< Pointer, Hash >
    indirect_hash(Hash h=Hash()) (defined in seastar::indirect_hash< Pointer, Hash >)seastar::indirect_hash< Pointer, Hash >inline
    operator()(const Pointer &p) const (defined in seastar::indirect_hash< Pointer, Hash >)seastar::indirect_hash< Pointer, Hash >inline
    + + + + diff --git a/master/structseastar_1_1indirect__hash.html b/master/structseastar_1_1indirect__hash.html new file mode 100644 index 000000000..901c55b97 --- /dev/null +++ b/master/structseastar_1_1indirect__hash.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: seastar::indirect_hash< Pointer, Hash > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::indirect_hash< Pointer, Hash > Struct Template Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    indirect_hash (Hash h=Hash())
     
    +size_t operator() (const Pointer &p) const
     
    + + + +

    +Public Attributes

    +Hash _h
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1indirect__less-members.html b/master/structseastar_1_1indirect__less-members.html new file mode 100644 index 000000000..a62145eae --- /dev/null +++ b/master/structseastar_1_1indirect__less-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::indirect_less< Pointer, Less > Member List
    +
    +
    + +

    This is the complete list of members for seastar::indirect_less< Pointer, Less >, including all inherited members.

    + + + + +
    _cmp (defined in seastar::indirect_less< Pointer, Less >)seastar::indirect_less< Pointer, Less >
    indirect_less(Less cmp=Less()) (defined in seastar::indirect_less< Pointer, Less >)seastar::indirect_less< Pointer, Less >inline
    operator()(const Pointer &i1, const Pointer &i2) const (defined in seastar::indirect_less< Pointer, Less >)seastar::indirect_less< Pointer, Less >inline
    + + + + diff --git a/master/structseastar_1_1indirect__less.html b/master/structseastar_1_1indirect__less.html new file mode 100644 index 000000000..8464ef2cd --- /dev/null +++ b/master/structseastar_1_1indirect__less.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: seastar::indirect_less< Pointer, Less > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::indirect_less< Pointer, Less > Struct Template Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    indirect_less (Less cmp=Less())
     
    +bool operator() (const Pointer &i1, const Pointer &i2) const
     
    + + + +

    +Public Attributes

    +Less _cmp
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1ipv4__addr-members.html b/master/structseastar_1_1ipv4__addr-members.html new file mode 100644 index 000000000..2091cde34 --- /dev/null +++ b/master/structseastar_1_1ipv4__addr-members.html @@ -0,0 +1,94 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::ipv4_addr Member List
    +
    +
    + +

    This is the complete list of members for seastar::ipv4_addr, including all inherited members.

    + + + + + + + + + + + + + +
    ip (defined in seastar::ipv4_addr)seastar::ipv4_addr
    ipv4_addr() noexcept (defined in seastar::ipv4_addr)seastar::ipv4_addrinline
    ipv4_addr(uint32_t ip, uint16_t port) noexcept (defined in seastar::ipv4_addr)seastar::ipv4_addrinline
    ipv4_addr(uint16_t port) noexcept (defined in seastar::ipv4_addr)seastar::ipv4_addrinline
    ipv4_addr(const std::string &addr) (defined in seastar::ipv4_addr)seastar::ipv4_addr
    ipv4_addr(const std::string &addr, uint16_t port) (defined in seastar::ipv4_addr)seastar::ipv4_addr
    ipv4_addr(const net::inet_address &, uint16_t) (defined in seastar::ipv4_addr)seastar::ipv4_addr
    ipv4_addr(const socket_address &) noexcept (defined in seastar::ipv4_addr)seastar::ipv4_addr
    ipv4_addr(const ::in_addr &, uint16_t=0) noexcept (defined in seastar::ipv4_addr)seastar::ipv4_addr
    is_ip_unspecified() const noexcept (defined in seastar::ipv4_addr)seastar::ipv4_addrinline
    is_port_unspecified() const noexcept (defined in seastar::ipv4_addr)seastar::ipv4_addrinline
    port (defined in seastar::ipv4_addr)seastar::ipv4_addr
    + + + + diff --git a/master/structseastar_1_1ipv4__addr.html b/master/structseastar_1_1ipv4__addr.html new file mode 100644 index 000000000..111b3042b --- /dev/null +++ b/master/structseastar_1_1ipv4__addr.html @@ -0,0 +1,126 @@ + + + + + + + +Seastar: seastar::ipv4_addr Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::ipv4_addr Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    ipv4_addr (uint32_t ip, uint16_t port) noexcept
     
    ipv4_addr (uint16_t port) noexcept
     
    ipv4_addr (const std::string &addr)
     
    ipv4_addr (const std::string &addr, uint16_t port)
     
    ipv4_addr (const net::inet_address &, uint16_t)
     
    ipv4_addr (const socket_address &) noexcept
     
    ipv4_addr (const ::in_addr &, uint16_t=0) noexcept
     
    +bool is_ip_unspecified () const noexcept
     
    +bool is_port_unspecified () const noexcept
     
    + + + + + +

    +Public Attributes

    +uint32_t ip
     
    +uint16_t port
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1ipv6__addr-members.html b/master/structseastar_1_1ipv6__addr-members.html new file mode 100644 index 000000000..2c7d21b69 --- /dev/null +++ b/master/structseastar_1_1ipv6__addr-members.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::ipv6_addr Member List
    +
    +
    + +

    This is the complete list of members for seastar::ipv6_addr, including all inherited members.

    + + + + + + + + + + + + + + +
    ip (defined in seastar::ipv6_addr)seastar::ipv6_addr
    ipv6_addr(const ipv6_bytes &, uint16_t port=0) noexcept (defined in seastar::ipv6_addr)seastar::ipv6_addr
    ipv6_addr(uint16_t port=0) noexcept (defined in seastar::ipv6_addr)seastar::ipv6_addr
    ipv6_addr(const std::string &) (defined in seastar::ipv6_addr)seastar::ipv6_addr
    ipv6_addr(const std::string &, uint16_t port) (defined in seastar::ipv6_addr)seastar::ipv6_addr
    ipv6_addr(const net::inet_address &, uint16_t=0) noexcept (defined in seastar::ipv6_addr)seastar::ipv6_addr
    ipv6_addr(const ::in6_addr &, uint16_t=0) noexcept (defined in seastar::ipv6_addr)seastar::ipv6_addr
    ipv6_addr(const ::sockaddr_in6 &) noexcept (defined in seastar::ipv6_addr)seastar::ipv6_addr
    ipv6_addr(const socket_address &) noexcept (defined in seastar::ipv6_addr)seastar::ipv6_addr
    ipv6_bytes typedef (defined in seastar::ipv6_addr)seastar::ipv6_addr
    is_ip_unspecified() const noexcept (defined in seastar::ipv6_addr)seastar::ipv6_addr
    is_port_unspecified() const noexcept (defined in seastar::ipv6_addr)seastar::ipv6_addrinline
    port (defined in seastar::ipv6_addr)seastar::ipv6_addr
    + + + + diff --git a/master/structseastar_1_1ipv6__addr.html b/master/structseastar_1_1ipv6__addr.html new file mode 100644 index 000000000..9bd4ba2fd --- /dev/null +++ b/master/structseastar_1_1ipv6__addr.html @@ -0,0 +1,136 @@ + + + + + + + +Seastar: seastar::ipv6_addr Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::ipv6_addr Struct Reference
    +
    +
    + + + + +

    +Public Types

    +using ipv6_bytes = std::array< uint8_t, 16 >
     
    + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    ipv6_addr (const ipv6_bytes &, uint16_t port=0) noexcept
     
    ipv6_addr (uint16_t port=0) noexcept
     
    ipv6_addr (const std::string &)
     
    ipv6_addr (const std::string &, uint16_t port)
     
    ipv6_addr (const net::inet_address &, uint16_t=0) noexcept
     
    ipv6_addr (const ::in6_addr &, uint16_t=0) noexcept
     
    ipv6_addr (const ::sockaddr_in6 &) noexcept
     
    ipv6_addr (const socket_address &) noexcept
     
    +bool is_ip_unspecified () const noexcept
     
    +bool is_port_unspecified () const noexcept
     
    + + + + + +

    +Public Attributes

    +ipv6_bytes ip
     
    +uint16_t port
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1is__future.html b/master/structseastar_1_1is__future.html new file mode 100644 index 000000000..9e21ad145 --- /dev/null +++ b/master/structseastar_1_1is__future.html @@ -0,0 +1,94 @@ + + + + + + + +Seastar: seastar::is_future< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::is_future< T > Struct Template Reference
    +
    +
    +

    Detailed Description

    +
    template<typename... T>
    +struct seastar::is_future< T >

    Check whether a type is a future.

    +

    This is a type trait evaluating to true if the given type is a future.

    +
    +

    #include <seastar/core/future.hh>

    +
    +Inheritance diagram for seastar::is_future< T >:
    +
    +
    + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1is__future.png b/master/structseastar_1_1is__future.png new file mode 100644 index 0000000000000000000000000000000000000000..731f80d97e5325bb5befd3b51ca838b9d24e5fc5 GIT binary patch literal 616 zcmeAS@N?(olHy`uVBq!ia0vp^-9Q|`!3-qj?8+2@lth3}i0l9V|AEXGZ@!lHADRGU zf$@O@2Ut7r$OE|?B|(0{3_wL7aP?G(5d#C`cTX3`kP61Pb8k;ttsvkUzCY#ve|i5! z3JHsaCL6cUdZks)a_PY${SRF;Z>k(p$>d_~R;dKx-i<1=ld_^eC;XZ#doOwAvp;I5 zPcxst6fbqN0?vUj2OQ=5=#S4_sPv$8AB) zvzDdC@sswnC0$9coO>&@XIk)`-#X-QrPcdRSXJ;_H>1->I8wH?6*Dy)idpl`418-TeJ`-@I*D z8kT#1OZWQO5>J=hio5L;y;*v(@wBfc`HMHbe(L-ETh!01YxkBv?uaitxZ~65h<$H% z$a+r=n3rx5Un85#y)5d6@h*wIY)1Yomr9qie3<`L^YleYt`F-T<*|H#x;yG!h4E&| aFU&HWL8ZZ4SM>su1%s!npUXO@geCygSRFM0 literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1is__smart__ptr.html b/master/structseastar_1_1is__smart__ptr.html new file mode 100644 index 000000000..8aef3b7cf --- /dev/null +++ b/master/structseastar_1_1is__smart__ptr.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: seastar::is_smart_ptr< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::is_smart_ptr< T > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::is_smart_ptr< T >:
    +
    +
    + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1is__smart__ptr.png b/master/structseastar_1_1is__smart__ptr.png new file mode 100644 index 0000000000000000000000000000000000000000..4813c72201c180844e098cc7f080f046ff77c4c9 GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0vp^^ME*jgBeKP-)Ykeq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0q&!_5Ln;{G&b_#4wE~Z8c-*f4|NHY- zD=EA<_+`uVnUf{AHK}dz=-8K(X13nIb5>}hx@R2gJeA5)@%+u_{I-?*t5s$He*Z}H z-havWqRXF8&v>b_Jax{xYMtwa+iu*mvp$>cx$A<(JkOm|oA>;B82K{1nz#LnSlrf# zxx4m!VvRc-U#?y!&LHwRm2$#k{-GOD}r*&AqcJINGFa(wEJD($}|_ z7kv}Dr+z-pD`wT5M_bljy}AC*U!R&CMXD#)^7>E8ds$rJ&6-oFwSJPxn)NR0e+qkD zny_z5jOQnf4=N{DADFDNeqKdd+GVZ>=3g0Rgcm=yl?(oSw)gvz*)#Kt_N<6u*w4g& zVD$m!4_Y4>_HfxStjEp$l?*iKGZ*uW&_?zLp$`}Z(Q*q%$}&n=H#yd$*#`ptt~)70a` z;-Vf0(PQL(#cUmND + + + + + + +Seastar: seastar::is_smart_ptr< foreign_ptr< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::is_smart_ptr< foreign_ptr< T > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::is_smart_ptr< foreign_ptr< T > >:
    +
    +
    + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1is__smart__ptr_3_01foreign__ptr_3_01T_01_4_01_4.png b/master/structseastar_1_1is__smart__ptr_3_01foreign__ptr_3_01T_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f596e45be1680abeb2f00ba93ce81cfc4869fdcc GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^Uw}A(gBeIl)~qlAQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;5J0M z+}pR=3oB2GUHkTFw~?Og)r433_v-xpx z`_pMLYG_)ta0?dWQ}lX zvzc+RT7&&1@doqCmVdvBJl+caI`*djmTE~zK7%}01_M9wxZ(TBGiPQSFvP>OSTWen z{m`(wZRKa)^D}1hJpaYBVfp3@4D6*GzvfK*xr*7P^3}yGO{RTJ zYd-pU>c&lp)mut~a#g>sv0l%;O7yq2Ez90{W|Ft$e7|RLuK9JFM|Zh~dyZI0-^u3e zd`3;~Rj#vVu2HuBdRgtgX-R5%^7`A%Devzd6E$_e9Bj3_S?WS&$Kk(oZ#DaF-2LU8 z>jImu&!=C%f4TQ(ee~|)D-RdsZV7%T*ZA&L*mbFmucZyyGCkfKZt7k8(auKr<-b*X z?JgaE_r=3P{a#}pd-?m4`S-4>?%#h|xx8x4JhC?CxsqwS=}N1NmG`1; z*RLvn{rK)&xnC)aF>5X_#nJ~Qtt<-y=arla5q`A1?AH>H^EJO5FEIRf mWaNDS#`f`*#>Vl#*qHuL$@WUSupO8z89ZJ6T-G@yGywpIR$6ZW literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1is__smart__ptr_3_01lw__shared__ptr_3_01T_01_4_01_4.html b/master/structseastar_1_1is__smart__ptr_3_01lw__shared__ptr_3_01T_01_4_01_4.html new file mode 100644 index 000000000..96ff4d82e --- /dev/null +++ b/master/structseastar_1_1is__smart__ptr_3_01lw__shared__ptr_3_01T_01_4_01_4.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: seastar::is_smart_ptr< lw_shared_ptr< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::is_smart_ptr< lw_shared_ptr< T > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::is_smart_ptr< lw_shared_ptr< T > >:
    +
    +
    + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1is__smart__ptr_3_01lw__shared__ptr_3_01T_01_4_01_4.png b/master/structseastar_1_1is__smart__ptr_3_01lw__shared__ptr_3_01T_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..54d0727191517ee83a012b2370d8b314ee82b397 GIT binary patch literal 751 zcmeAS@N?(olHy`uVBq!ia0y~yU}OWb12~w0S_U!Tl$^sdU!ve*En<}-Yo7WyiLn@ziN=IYkO0}s58bUZwN zrL9KemG4E7(^a)5p7DJb<9BI#d=fn?;Zf9DC)gIk`FY>(|0e9`g%vjggs4{(( z0Y|gJgfB`wtj#lTJ{4uKTWimtAll~g&|Rh_ak&EDp#?&m2RcED7(OV0JjJjF$OeX} zK9GHg;XpTTsng~OpwM7=00|AC#=|;o1qXybv@N`N$GQ5u?AaT7<%|q6FIP)2Bm~*_ zCZ=&(xAle}3zOd&dGGth(zf~Yen~TD>d)DnwShagTL0FpH$1;y+CpXaXSYkVIUB|}KlT;8Rrl%;OT*-^KH>W}|BdEZ8B@y2 z$sncM{4B + + + + + + +Seastar: seastar::is_smart_ptr< shared_ptr< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::is_smart_ptr< shared_ptr< T > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::is_smart_ptr< shared_ptr< T > >:
    +
    +
    + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1is__smart__ptr_3_01shared__ptr_3_01T_01_4_01_4.png b/master/structseastar_1_1is__smart__ptr_3_01shared__ptr_3_01T_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..6b4f2cf7fd5c0fee55eacbb18ee52759bf497210 GIT binary patch literal 726 zcmeAS@N?(olHy`uVBq!ia0vp^pMf}lgBeKvUa;90NJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~rFyzJhEy=VoqIcJwSs`_^*t&7|I5#J zVcn@}*n1;*hRN>0L_O}dkD|t#Pquho3MoqSl!`y6))QAeRJH%l+K$uBDFxMa`y=KpKRl^qnw8<~E%ldY7l`L`PrkF@{Il=Lc?C!R z)*ikiHEqe{E1S37H?p@Y&D_$i`cmcV>%?BB+&9H>QYQo7-?*Y@bzZc%XifIB{gv~! z-|DNiex0^)X8KlXzr*w2-k$VDIQPt?EB^b>@7b~{*ZuPUNmtzeU$x6$>2p-aQ~bnC z)yx{p%__a?tvAoS8N>8L_AZ0k<(4zsZ`WK9Ho8A?dGox9H-DQQ;3-OL`1te;!{gI4 z8IMgjX715XXOoCO$78T>j$}fOrSX9uXbNJ~Kw-h?qY6{UXJD>gvmxl}mFL^m@0BYQ zu`)hj{CA4vg9Uo2c9Y(p+oN}Go7>0q-8|oazsZ<5OaJlA=G2Fi6D}ssjM|{T=5k0` zcX*#&Lfqt7W_A0Uk4=RlKHX*3jm+68%ElQk5i|eT*N$(xuWLW-U2GKh*eaE8;w7C; zzq>ZZ+{sZ*dUkUO%St~J{`s#qEVfy%RvLJFA>)zxJ05-fRGRz#^#0p+o~G|jZhpB^ zwb$<5iWP6!O6$B{+3I$!-Kd{h8P3MOeYsuK+Fbk6`TcXBOKsr&(_$%~Gv~S4=hL6> zSgdnDUwn7F^Nb5hr?*yw-~PH~t?u*Qx1PD-`3<}Bx69UkTF3Na&1I+B=P#n4Ej=pY w%c2lG@~ literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1is__smart__ptr_3_01std_1_1unique__ptr_3_01T_01_4_01_4.html b/master/structseastar_1_1is__smart__ptr_3_01std_1_1unique__ptr_3_01T_01_4_01_4.html new file mode 100644 index 000000000..b8957a5dc --- /dev/null +++ b/master/structseastar_1_1is__smart__ptr_3_01std_1_1unique__ptr_3_01T_01_4_01_4.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: seastar::is_smart_ptr< std::unique_ptr< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::is_smart_ptr< std::unique_ptr< T > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::is_smart_ptr< std::unique_ptr< T > >:
    +
    +
    + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1is__smart__ptr_3_01std_1_1unique__ptr_3_01T_01_4_01_4.png b/master/structseastar_1_1is__smart__ptr_3_01std_1_1unique__ptr_3_01T_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..bb77494078f99e6d7a5cd5665bd2fd3b9e7d2323 GIT binary patch literal 768 zcmeAS@N?(olHy`uVBq!ia0y~yU}Oif12~w0q;jW29*~j<@CkAK|NlRb`Qpvj(*8pe zfGjXRaNq!I=N)+ z3M;qo50(##oAO&JpUH<*OMqxquey8_G61Cf3KDoXB-MjVIW*>9D zb>(<5P(0+30^g$t@8neZTAOFiWchIW7t@3ziitmjI0`ciIa(}M_%X3`Hd}NsJ4~_Y zXtrQ*A(FF~mEG9*q(MXfbf~t&M(r;f)L-yA_dj1YubI)?OuhM2FGInS_eBg5S2AT7 z!?Ct%_r;ut6MAi8_Q;!6=38E2USZvR z@Ye6U%={%>-3BY}{@-x%-p-pFuT(_D*}Na9;cdQ?*OKCYBnDKUUmTc-F~X zYyVYx<6K` Ub&2>!U~*;fboFyt=akR{0O~($+5i9m literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1json_1_1json__base-members.html b/master/structseastar_1_1json_1_1json__base-members.html new file mode 100644 index 000000000..15518803e --- /dev/null +++ b/master/structseastar_1_1json_1_1json__base-members.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::json::json_base Member List
    +
    +
    + +

    This is the complete list of members for seastar::json::json_base, including all inherited members.

    + + + + + + + + + + + + + + +
    _elements (defined in seastar::json::json_base)seastar::json::json_base
    add(json_base_element *element, std::string name, bool mandatory=false)seastar::json::json_basevirtual
    is_verify() constseastar::json::json_basevirtual
    json_base()=default (defined in seastar::json::json_base)seastar::json::json_base
    json_base(const json_base &)=delete (defined in seastar::json::json_base)seastar::json::json_base
    jsonable()=default (defined in seastar::json::jsonable)seastar::json::jsonable
    jsonable(const jsonable &)=default (defined in seastar::json::jsonable)seastar::json::jsonable
    operator=(const json_base &)=delete (defined in seastar::json::json_base)seastar::json::json_base
    operator=(const jsonable &)=default (defined in seastar::json::jsonable)seastar::json::jsonable
    to_json() constseastar::json::json_basevirtual
    write(output_stream< char > &) constseastar::json::json_basevirtual
    ~json_base()=default (defined in seastar::json::json_base)seastar::json::json_basevirtual
    ~jsonable()=default (defined in seastar::json::jsonable)seastar::json::jsonablevirtual
    + + + + diff --git a/master/structseastar_1_1json_1_1json__base.html b/master/structseastar_1_1json_1_1json__base.html new file mode 100644 index 000000000..b14f4946a --- /dev/null +++ b/master/structseastar_1_1json_1_1json__base.html @@ -0,0 +1,263 @@ + + + + + + + +Seastar: seastar::json::json_base Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::json::json_base Struct Reference
    +
    +
    +

    Detailed Description

    +

    The base class for all json objects It holds a list of all the element in it, allowing it implement the to_json method.

    +

    It also allows iterating over the element in the object, even if not all the member are known in advance and in practice mimic reflection

    +
    +

    #include <seastar/json/json_elements.hh>

    +
    +Inheritance diagram for seastar::json::json_base:
    +
    +
    + + +seastar::json::jsonable +seastar::httpd::api_doc +seastar::httpd::api_docs +seastar::httpd::json_exception + +
    + + + + + + + + + + + + + + + +

    +Public Member Functions

    json_base (const json_base &)=delete
     
    +json_base operator= (const json_base &)=delete
     
    virtual std::string to_json () const
     
    virtual future write (output_stream< char > &) const
     write to an output stream More...
     
    virtual bool is_verify () const
     
    virtual void add (json_base_element *element, std::string name, bool mandatory=false)
     
    + + + +

    +Public Attributes

    +std::vector< json_base_element * > _elements
     
    +

    Member Function Documentation

    + +

    ◆ add()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    virtual void seastar::json::json_base::add (json_base_elementelement,
    std::string name,
    bool mandatory = false 
    )
    +
    +virtual
    +
    +

    Register an element in an object

    Parameters
    + + + + +
    elementthe element to be added
    namethe element name
    mandatoryis this element mandatory.
    +
    +
    + +
    +
    + +

    ◆ is_verify()

    + +
    +
    + + + + + +
    + + + + + + + +
    virtual bool seastar::json::json_base::is_verify () const
    +
    +virtual
    +
    +

    Check that all mandatory elements are set

    Returns
    true if all mandatory parameters are set
    + +
    +
    + +

    ◆ to_json()

    + +
    +
    + + + + + +
    + + + + + + + +
    virtual std::string seastar::json::json_base::to_json () const
    +
    +virtual
    +
    +

    create a formatted string of the object.

    Returns
    the object formatted.
    + +

    Implements seastar::json::jsonable.

    + +
    +
    + +

    ◆ write()

    + +
    +
    + + + + + +
    + + + + + + + + +
    virtual future seastar::json::json_base::write (output_stream< char > & ) const
    +
    +virtual
    +
    + +

    write to an output stream

    + +

    Reimplemented from seastar::json::jsonable.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1json_1_1json__base.png b/master/structseastar_1_1json_1_1json__base.png new file mode 100644 index 0000000000000000000000000000000000000000..d4c431cf0a07ec4bdee7e4805b0a1547fcbe533f GIT binary patch literal 1708 zcmbtV3ox5m6b{X9Lu)&fIgqbLZT1?)}cW_fmZc zU#loO1maVBoSTb(oWh)Njy_|e=JCq7$YeoA&mLps=X{er-Y70A z0#V2*{)?qxDe+OX4o?a7m{tqTT*&|)Gd&d*3fweMj{&-KiV+Q|Xcd2iehZq(8+gRU zqFaX1?ix~5HKP=o!Rae)1l0rkve-5wyG5)UYs+UcxW;XdrB~DUK|0rNZGNapp!|l{eYxLuU?Y9})|vnyoG9eAf72 z?0ufB`gL6-F_@G~0V;~v0Y>yfb|n;OKzF`S58OO~U>NXlnC?urVOPRR;3xosX8KA? zBzvJ%Z>?e1iwr?8zBa!e3je`Vv1Qd-sAI`5vt@~FdX}${|iVyod^@m2`Cj)8n2%>U{IOQ8|=gPeUf`!hP<{_!~Vb90$*O>nkD8YJB8UPW=Bg z;XAci>}wVfnF!{ zviRj!c1h$h$>9Z(sLm!}A~023&T`VAs!?I~<-nc-pQjc*tk6R>YhGAmo2t7{ay1oW zOAmBCyjpI3e{HGsf=5pR#-0h&A~iT)#@wt-Hmi9RBIN!^!=o5rB{%9AYZencu`m z+j8-ajn70j-W~_D6Nlo1lA9i#32OWTE|Qb?#7su>(g_2lr8j=`S#)N*o`Wmwule-g zdJsTEawPx2i{;Mt-@Khul2i60Q8n-m5N4OS#}pN`-lulK^I$4M48t0i-TyUxu^|n^ zb8S%#!(?PDbzxJM-+61tQ1}!cNHqsyrd;c_)--S>JE%IGoJvY7d}&U|=-?ji(co4|83ftM!YZ8huB6eNG^Y)o_=CcG`KuFj|AEO>EgTfSxM7Ba zpe@x(s*T~ktlJdk_=beYBeclK;f_m%CLM#xd5$V}m%a6|JgeY4Q1~_b`nB634QavD zjfb@2p8~ErtY=9ICGORSeH_nP#^LGxxuT-g10(@^sIQyA9b}4B800-WK(O*H7tmAT zl0&OKwkV#1uEi$Lj>X<7aKxk~(fqxx(uN`==wN zFEOz>lkFj6tf*1-X^ObPE^5v-{uq6oNSe?l@!p_EejKTQo;R8b6U}E;x{vk?Dhz}i zwQLB_vd#9WRX~PBmRGSSiMmG)MdJ{nsGqc@svMXfoT; zFA(du7%?QdnQ>@kRv4=}E?`-dHt&N0L7&>_Ufv`Ff>h>@$kn&?HNm>8fwn&B(unV6 zg}{|i)npKSCyB=uE3c=~N7NVe^5Ew}QP@Xd^vcNSK6;I9RNb0@e}xt{v&cm01M Aj{pDw literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1json_1_1json__return__type-members.html b/master/structseastar_1_1json_1_1json__return__type-members.html new file mode 100644 index 000000000..300992581 --- /dev/null +++ b/master/structseastar_1_1json_1_1json__return__type-members.html @@ -0,0 +1,90 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::json::json_return_type Member List
    +
    +
    + +

    This is the complete list of members for seastar::json::json_return_type, including all inherited members.

    + + + + + + + + + +
    _body_writer (defined in seastar::json::json_return_type)seastar::json::json_return_type
    _res (defined in seastar::json::json_return_type)seastar::json::json_return_type
    json_return_type(std::function< future<>(output_stream< char > &&)> &&body_writer) (defined in seastar::json::json_return_type)seastar::json::json_return_typeinline
    json_return_type(const T &res) (defined in seastar::json::json_return_type)seastar::json::json_return_typeinline
    json_return_type(json_return_type &&o) noexcept (defined in seastar::json::json_return_type)seastar::json::json_return_typeinline
    json_return_type(const json_return_type &)=default (defined in seastar::json::json_return_type)seastar::json::json_return_type
    operator=(json_return_type &&o) noexcept (defined in seastar::json::json_return_type)seastar::json::json_return_typeinline
    operator=(const json_return_type &)=default (defined in seastar::json::json_return_type)seastar::json::json_return_type
    + + + + diff --git a/master/structseastar_1_1json_1_1json__return__type.html b/master/structseastar_1_1json_1_1json__return__type.html new file mode 100644 index 000000000..d17f837c6 --- /dev/null +++ b/master/structseastar_1_1json_1_1json__return__type.html @@ -0,0 +1,123 @@ + + + + + + + +Seastar: seastar::json::json_return_type Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::json::json_return_type Struct Reference
    +
    +
    +

    Detailed Description

    +

    The json return type, is a helper class to return a json formatted string. It uses autoboxing in its constructor so when a function return type is json_return_type, it could return a type that would be converted ie. json_return_type foo() { return "hello"; }

    +

    would return a json formatted string: "hello" (rather then hello)

    +
    +

    #include <seastar/json/json_elements.hh>

    + + + + + + + + + + + + + + + +

    +Public Member Functions

    json_return_type (std::function< future<>(output_stream< char > &&)> &&body_writer)
     
    +template<class T >
     json_return_type (const T &res)
     
    json_return_type (json_return_type &&o) noexcept
     
    +json_return_typeoperator= (json_return_type &&o) noexcept
     
    json_return_type (const json_return_type &)=default
     
    +json_return_typeoperator= (const json_return_type &)=default
     
    + + + + + +

    +Public Attributes

    +sstring _res
     
    +std::function< future<>(output_stream< char > &&)> _body_writer
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1json_1_1json__void-members.html b/master/structseastar_1_1json_1_1json__void-members.html new file mode 100644 index 000000000..9ff0b26a2 --- /dev/null +++ b/master/structseastar_1_1json_1_1json__void-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::json::json_void Member List
    +
    +
    + +

    This is the complete list of members for seastar::json::json_void, including all inherited members.

    + + + + + + + +
    jsonable()=default (defined in seastar::json::jsonable)seastar::json::jsonable
    jsonable(const jsonable &)=default (defined in seastar::json::jsonable)seastar::json::jsonable
    operator=(const jsonable &)=default (defined in seastar::json::jsonable)seastar::json::jsonable
    to_json() constseastar::json::json_voidinlinevirtual
    write(output_stream< char > &s) constseastar::json::json_voidinlinevirtual
    ~jsonable()=default (defined in seastar::json::jsonable)seastar::json::jsonablevirtual
    + + + + diff --git a/master/structseastar_1_1json_1_1json__void.html b/master/structseastar_1_1json_1_1json__void.html new file mode 100644 index 000000000..c4c35e563 --- /dev/null +++ b/master/structseastar_1_1json_1_1json__void.html @@ -0,0 +1,166 @@ + + + + + + + +Seastar: seastar::json::json_void Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::json::json_void Struct Reference
    +
    +
    +

    Detailed Description

    +

    There are cases where a json request needs to return a successful empty reply. The json_void class will be used to mark that the reply should be empty.

    +
    +

    #include <seastar/json/json_elements.hh>

    +
    +Inheritance diagram for seastar::json::json_void:
    +
    +
    + + +seastar::json::jsonable + +
    + + + + + + + +

    +Public Member Functions

    virtual std::string to_json () const
     
    virtual future write (output_stream< char > &s) const
     write to an output stream More...
     
    +

    Member Function Documentation

    + +

    ◆ to_json()

    + +
    +
    + + + + + +
    + + + + + + + +
    virtual std::string seastar::json::json_void::to_json () const
    +
    +inlinevirtual
    +
    +

    create a formatted string of the object.

    Returns
    the object formated.
    + +

    Implements seastar::json::jsonable.

    + +
    +
    + +

    ◆ write()

    + +
    +
    + + + + + +
    + + + + + + + + +
    virtual future seastar::json::json_void::write (output_stream< char > & s) const
    +
    +inlinevirtual
    +
    + +

    write to an output stream

    + +

    Reimplemented from seastar::json::jsonable.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1json_1_1json__void.png b/master/structseastar_1_1json_1_1json__void.png new file mode 100644 index 0000000000000000000000000000000000000000..c15bfd837792aa5ee150c5b6bb3f4a926363e7a6 GIT binary patch literal 619 zcmeAS@N?(olHy`uVBq!ia0vp^eLx(*!3-pSi0@4WQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;iad=}~t3cjhtQ;dwr9#@pR)7O(m2>azFu&-`sC&v@=aOqij?>rIar@7X^ka*t=& z{+WX3EWZDJS5s2<>w`t4;_<1QFNa^VD%M|b_jX;(lB8QFV#0TZL{9qBWcP!|>ry~H z+jI4dPx7&ooIq}##lQSo)N;WC<|WKC+>0OH$qW8?rnPwa%+7S9IcszpB08A`Gz%G& zRQVj19AWI3V!<#`h+QG*5rd1DOoIoKqN}FPSTPyQD4;(?^AYqnVCG)?B zu}{%HZO5BkrgwqCFw1$4LgeZ8s+Zpli|;>IKG1pg?acoN4fRu*W~G?AulIh>`dRAS z*3Fj}9JkoGGj{&`x%)P4Td{W2ubSPD8i65@v;EteO$>1tuG=*?WbW_ytRwuJktySg s+ByDQzkiFFTR@)q{BTOpDU)C9eoN)d&rWzz4on#gp00i_>zopr0Qg}YumAu6 literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1lazy__deref__wrapper-members.html b/master/structseastar_1_1lazy__deref__wrapper-members.html new file mode 100644 index 000000000..167540b49 --- /dev/null +++ b/master/structseastar_1_1lazy__deref__wrapper-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::lazy_deref_wrapper< T > Member List
    +
    +
    + +

    This is the complete list of members for seastar::lazy_deref_wrapper< T >, including all inherited members.

    + + + +
    lazy_deref_wrapper(const T &p) (defined in seastar::lazy_deref_wrapper< T >)seastar::lazy_deref_wrapper< T >inline
    p (defined in seastar::lazy_deref_wrapper< T >)seastar::lazy_deref_wrapper< T >
    + + + + diff --git a/master/structseastar_1_1lazy__deref__wrapper.html b/master/structseastar_1_1lazy__deref__wrapper.html new file mode 100644 index 000000000..7aa0fabed --- /dev/null +++ b/master/structseastar_1_1lazy__deref__wrapper.html @@ -0,0 +1,105 @@ + + + + + + + +Seastar: seastar::lazy_deref_wrapper< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::lazy_deref_wrapper< T > Struct Template Reference
    +
    +
    +

    Detailed Description

    +
    template<typename T>
    +struct seastar::lazy_deref_wrapper< T >

    This struct is a wrapper for lazy dereferencing a pointer.

    +

    In particular this is to be used in situations where the value of a pointer has to be converted to string in a lazy manner. Since pointers can be null adding a check at the point of calling the log function for example, will introduce an unnecessary branch in potentially useless code. Using lazy_deref this check can be deferred to the point where the code is actually evaluated.

    +
    +

    #include <seastar/util/lazy.hh>

    + + + + +

    +Public Member Functions

    +constexpr lazy_deref_wrapper (const T &p)
     
    + + + +

    +Public Attributes

    +const T & p
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1listen__options-members.html b/master/structseastar_1_1listen__options-members.html new file mode 100644 index 000000000..aae46a72c --- /dev/null +++ b/master/structseastar_1_1listen__options-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::listen_options Member List
    +
    +
    + +

    This is the complete list of members for seastar::listen_options, including all inherited members.

    + + + + + + + + +
    fixed_cpu (defined in seastar::listen_options)seastar::listen_options
    lba (defined in seastar::listen_options)seastar::listen_options
    listen_backlog (defined in seastar::listen_options)seastar::listen_options
    proto (defined in seastar::listen_options)seastar::listen_options
    reuse_address (defined in seastar::listen_options)seastar::listen_options
    set_fixed_cpu(unsigned cpu) (defined in seastar::listen_options)seastar::listen_optionsinline
    unix_domain_socket_permissions (defined in seastar::listen_options)seastar::listen_options
    + + + + diff --git a/master/structseastar_1_1listen__options.html b/master/structseastar_1_1listen__options.html new file mode 100644 index 000000000..226f83afa --- /dev/null +++ b/master/structseastar_1_1listen__options.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar::listen_options Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::listen_options Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +void set_fixed_cpu (unsigned cpu)
     
    + + + + + + + + + + + + + +

    +Public Attributes

    +bool reuse_address = false
     
    +server_socket::load_balancing_algorithm lba = server_socket::load_balancing_algorithm::default_
     
    +transport proto = transport::TCP
     
    +int listen_backlog = 100
     
    +unsigned fixed_cpu = 0u
     
    +std::optional< file_permissions > unix_domain_socket_permissions
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1log__cli_1_1options-members.html b/master/structseastar_1_1log__cli_1_1options-members.html new file mode 100644 index 000000000..fcfc4a7e7 --- /dev/null +++ b/master/structseastar_1_1log__cli_1_1options-members.html @@ -0,0 +1,105 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::log_cli::options Member List
    +
    +
    + +

    This is the complete list of members for seastar::log_cli::options, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + +
    default_log_levelseastar::log_cli::options
    describe(options_descriptor &descriptor) constseastar::program_options::option_group
    log_to_stdoutseastar::log_cli::options
    log_to_syslogseastar::log_cli::options
    log_with_colorseastar::log_cli::options
    logger_log_levelseastar::log_cli::options
    logger_ostream_typeseastar::log_cli::options
    logger_stdout_timestampsseastar::log_cli::options
    mutate(options_mutator &mutator)seastar::program_options::option_group
    name() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    operator bool() constseastar::program_options::option_groupinline
    operator=(option_group &&)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    operator=(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(option_group *parent, std::string name)seastar::program_options::option_groupexplicit
    option_group(option_group *parent, std::string name, unused)seastar::program_options::option_groupexplicit
    option_group(option_group &&) (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    used() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    value_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    values() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    values() (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    ~option_group()=default (defined in seastar::program_options::option_group)seastar::program_options::option_groupvirtual
    + + + + diff --git a/master/structseastar_1_1log__cli_1_1options.html b/master/structseastar_1_1log__cli_1_1options.html new file mode 100644 index 000000000..3693eea52 --- /dev/null +++ b/master/structseastar_1_1log__cli_1_1options.html @@ -0,0 +1,339 @@ + + + + + + + +Seastar: seastar::log_cli::options Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::log_cli::options Struct Reference
    +
    +
    +

    Detailed Description

    +

    Logging configuration.

    +
    +

    #include <seastar/util/log-cli.hh>

    +
    +Inheritance diagram for seastar::log_cli::options:
    +
    +
    + + +seastar::program_options::option_group + +
    + + + + + + +

    +Public Types

    +using value_list_type = boost::intrusive::list< basic_value, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    +using option_group_list_type = boost::intrusive::list< option_group, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    + + + + + + + + + + + + + + + + +

    +Public Member Functions

    operator bool () const
     Does the option group has any values contained in it?
     
    +bool used () const
     
    +const std::string & name () const
     
    +const value_list_type & values () const
     
    +value_list_type & values ()
     
    void describe (options_descriptor &descriptor) const
     
    void mutate (options_mutator &mutator)
     
    + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    program_options::value< log_leveldefault_log_level
     Default log level for log messages. More...
     
    program_options::value< log_level_map > logger_log_level
     Map of logger name to log level. More...
     
    program_options::value< logger_timestamp_style > logger_stdout_timestamps
     
    program_options::value< bool > log_to_stdout
     Send log output to output stream. More...
     
    program_options::value< seastar::logger_ostream_type > logger_ostream_type
     
    program_options::value< bool > log_to_syslog
     
    program_options::value< bool > log_with_color
     
    +

    Member Function Documentation

    + +

    ◆ describe()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::describe (options_descriptordescriptor) const
    +
    +inherited
    +
    +

    Describe the content of this option group to the visitor.

    +

    The content is visited in a depth-first manner:

      +
    • First the option groups itself is visited with options_descriptor::visit_group_start(). If this returns false the entire content of the group, including all its subgroups and values are skipped and options_descriptor::visit_group_end() is called immediately. Otherwise visiting the content of the group proceeds.
    • +
    • All the values contained therein are visited. For each value the following happens:
        +
      • First options_descriptor::visit_value_metadata() is called with generic metadata that all values have. If this return false the value is skipped, otherwise visiting the value proceeds.
      • +
      • Then the appropriate overload of options_descriptor::visit_value() is called, with a pointer to the default value of the respective value. The pointer is null if there is no default value.
      • +
      • For selection_value, options_descriptor::visit_selection_value() will be called instead of options_descriptor::visit_value(). After the value is visited, the option_group instance belonging to each candidate (if set) will be visited.
      • +
      +
    • +
    • All the nested option_group instances in the current group are visited.
    • +
    • Finally options_descriptor::visit_group_end() is called.
    • +
    + +
    +
    + +

    ◆ mutate()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::mutate (options_mutatormutator)
    +
    +inherited
    +
    +

    Mutate the content of this option group by the visitor.

    +

    The visiting algorithm is identical to that of describe(), with the following differences:

      +
    • options_mutator::visit_value() is allowed to mutate the value through the passed-in reference. It should return true if it did so and false otherwise.
    • +
    • When visiting a selection value, only the nested group belonging to the selected value is visited afterwards.
    • +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ default_log_level

    + +
    +
    + + + + +
    program_options::value<log_level> seastar::log_cli::options::default_log_level
    +
    + +

    Default log level for log messages.

    +

    Valid values are trace, debug, info, warn, error. Default: info

    See also
    log_level.
    + +
    +
    + +

    ◆ log_to_stdout

    + +
    +
    + + + + +
    program_options::value<bool> seastar::log_cli::options::log_to_stdout
    +
    + +

    Send log output to output stream.

    +

    As selected by logger_ostream_type. Default: true.

    + +
    +
    + +

    ◆ log_to_syslog

    + +
    +
    + + + + +
    program_options::value<bool> seastar::log_cli::options::log_to_syslog
    +
    +

    Send log output to syslog.

    +

    Default: false.

    + +
    +
    + +

    ◆ log_with_color

    + +
    +
    + + + + +
    program_options::value<bool> seastar::log_cli::options::log_with_color
    +
    +

    Print colored tag prefix in log messages sent to output stream.

    +

    Default: true.

    + +
    +
    + +

    ◆ logger_log_level

    + +
    +
    + + + + +
    program_options::value<log_level_map> seastar::log_cli::options::logger_log_level
    +
    + +

    Map of logger name to log level.

    +

    The format is NAME0=LEVEL0[:NAME1=LEVEL1:...]. Valid logger names can be queried with --help-loggers. This option can be specified multiple times.

    + +
    +
    + +

    ◆ logger_ostream_type

    + +
    +
    + + + + +
    program_options::value<seastar::logger_ostream_type> seastar::log_cli::options::logger_ostream_type
    +
    +

    Send log output to.

    +

    Default: stderr.

    See also
    seastar::logger_ostream_type.
    + +
    +
    + +

    ◆ logger_stdout_timestamps

    + +
    +
    + + + + +
    program_options::value<logger_timestamp_style> seastar::log_cli::options::logger_stdout_timestamps
    +
    +

    Select timestamp style for stdout logs.

    +

    Default: real.

    See also
    logger_timestamp_style.
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1log__cli_1_1options.png b/master/structseastar_1_1log__cli_1_1options.png new file mode 100644 index 0000000000000000000000000000000000000000..d05798c904e252709a15f023f22384714e00279c GIT binary patch literal 1018 zcmeAS@N?(olHy`uVBq!ia0vp^FM+s&gBeJgI@;&~DTx4|5ZC|z{{xvX-h3_XKQsZz z0^Y7!tZ@X`sEjb*llA`GD^v9b+kw>v<)hmXgpwQ50F!9RUYW>t{r(f^8pLl)oXTcKn zyOm~Mzhd-kem~!z5j!tD*wo@f#o9~a-}o+FS!61`>ZZQUv~{mn-gDV?@?L4k**u$B z>+*lyo3___NpaA#o24I)d)|Jtmf>681G|^=PuyGmy=4BE>)}gg%&(qmnwlD19b6Z_ zb-Q|2d{F4s`>U)y<3pdH-u3C8bLiIoKR%(MxhFkgM5Y?AVv8WlheBJ1whIPJ`j2a@ zI6UFpg60K%&abwLADA^qG%O<>vYJw9PpDa;Q+6E>{noK%6?kuc)$ekVk zSxj){*TX<5^{@LAQ!ago(lWXGOX7Iu{-2uBo4#+>_c@&`nP;+IZ+&25cjBC{=Qie- z#cfvjsd`Cu$rA;kSKIO?>s*Yg-oEU*pXIWgX$m{v-t0?1^|tuU?F6a)lT6x!?snVU zI~KD_ChUEl_pNi+?pD6veo&;&_uD!5`M*-Mk1h9{E+3<=yZMveC8HH@E~LDVyyROV zp5*_|eB!*_%Tsx89Jcb5ayhl_=BG8~)&AxO-`u^N`*!WSpH_N@I=60LbtU!NvQyOo zzLV=^Q%`=nwtMZ~T!ZSZ;Vw^_`1a*Jx2r0z@%X-%E8G3jGu!as)A9M2cD(s`?)!ve zdjti4M%_LCrQkUq(ChWyep*UN5W@JSiSK0&rXM@x7@RXCE*(!6xsvFSe!(%|xZ>Aa z+zGyZTnXO9y5zkH}-j2 z)z6*gUwCzGf8m^Ib>D8Tyis5nrY`PVxbV;IqhjCLb}V^6QE#JYAe+W*DfyN~N0&Ec z{XU(+6|k+B_ra`vzO$Iu>V?Qne|}}(R4dEVH~8 + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::lw_shared_ptr_counter_base Member List
    +
    +
    + +

    This is the complete list of members for seastar::lw_shared_ptr_counter_base, including all inherited members.

    + + +
    _count (defined in seastar::lw_shared_ptr_counter_base)seastar::lw_shared_ptr_counter_base
    + + + + diff --git a/master/structseastar_1_1lw__shared__ptr__counter__base.html b/master/structseastar_1_1lw__shared__ptr__counter__base.html new file mode 100644 index 000000000..17f7655ac --- /dev/null +++ b/master/structseastar_1_1lw__shared__ptr__counter__base.html @@ -0,0 +1,103 @@ + + + + + + + +Seastar: seastar::lw_shared_ptr_counter_base Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::lw_shared_ptr_counter_base Struct Reference
    +
    +
    +
    +Inheritance diagram for seastar::lw_shared_ptr_counter_base:
    +
    +
    + + +seastar::enable_lw_shared_from_this< tcb > +seastar::enable_lw_shared_from_this< T > +seastar::lw_shared_ptr_no_esft< T > + +
    + + + + +

    +Public Attributes

    +shared_ptr_counter_type _count = 0
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1lw__shared__ptr__counter__base.png b/master/structseastar_1_1lw__shared__ptr__counter__base.png new file mode 100644 index 0000000000000000000000000000000000000000..63ee1b890cf488dca6e1c389c57df1fbb5014d0e GIT binary patch literal 1589 zcmb7Edog8cGOLGG1FmR#_qAF@~I$Sbj~mM3_7Z zzi~WTjOUQZ+jvi63`5?J9TVd**x%ItwR`rD{hsr^-+S-(bMLv|dq3y<$krMsvsYy= z3L-}-&dujDmyaQ$VA@;?QBu61(jJ*BDCt|8U*U(6E){QA^?DN34;a)W(0$pHx*LzP z38YMF6&aWf*_P^PM9H}~`IBl`H)t2FZ~6uX9|4@DpJ`XU?XqQ+j2hEej*MnaW`xRD zAns`&p7m;Qb3RihaFv*r>2&|=OIKF9-@ zNX1|qRy2rSX~|*$ruP;l&i7pp^I#dTA%==RoVjluXZ9tJHOY51%*TzD8d22HzFO;3 z+rj9)TACBx>a=pGxrV#h-yXK$Vpzuu`n!IPJ#v@*;>(+wGD)}n;$FX^UTWZmZJ ztB`vPF^l5C|IzG!PoZ-*&}2JQ0~1-7s0^3WsK=ni#l)>@Y8nqiMg}wk$>+o}3oFRE z5Q~FgFfnoTg(|otgvCVSERa!%FD1YTok3qI};QYyF=f zo>7ax8I@U=Avy@=iTsU`hDvZQxlb93AJ98`&jBA#JdC}9H_*2Lk z_4bwnzB7CXg%m1-AP^HQELcmoo5-rJE&^57jnFGS+NGg+VCp&rv5|E|aDn_BH>wo= z-6ej@En0l_UAJT^YyMeiH9s`_1-UXbH+Z((H+-OJ<&JCEXJG-)i+tiYW+A9srS6P$ z#FNw%o0tQW1oTQ8+KtWg9DP=!aKqWOC4iuBl)xl5#Hx+) z{+@8z1qSFdHbuEK9Jb}mAZYutNP6?ah=a>)PB8tUiObx{ZC&2cx$$22TnWFOBKB)_ z#U|N7kN%(3!n;w-Hop4lh<;SxFq*Lif>BeHAg#rZV>|Np+3B7Yqr*E>ZR}TP(3!}h zm`Zi>8$jrBnUM*g^_Z++p*eDBdN&k#@P2tR$wihgy#03MtRSZCV)}gLR%NI+-alQx zcHA{3I%~Z(^#n6+8ogp1!YH12n%IoE4&UuwqJh#*$f4JFb>_C`Hy;pQj23Q9)&86` zEZ@Va$nEO)^xJ(utXk03vG$<^QQk_wMgz?XPdk>5Y+-rPhC_lf=4Zj!S`>(sBi_!=-!+Q5iFt2P*L_;<7*= wjsGMycK|ib-w+PZ#&N^VsN~a>o9jZ^>j%=h9oo{^&>s)8#9Esdo^yZj7jr@vt^fc4 literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1lw__shared__ptr__no__esft-members.html b/master/structseastar_1_1lw__shared__ptr__no__esft-members.html new file mode 100644 index 000000000..37c52c899 --- /dev/null +++ b/master/structseastar_1_1lw__shared__ptr__no__esft-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::lw_shared_ptr_no_esft< T > Member List
    +
    +
    + +

    This is the complete list of members for seastar::lw_shared_ptr_no_esft< T >, including all inherited members.

    + + + + + + +
    _value (defined in seastar::lw_shared_ptr_no_esft< T >)seastar::lw_shared_ptr_no_esft< T >
    lw_shared_ptr_no_esft()=default (defined in seastar::lw_shared_ptr_no_esft< T >)seastar::lw_shared_ptr_no_esft< T >
    lw_shared_ptr_no_esft(const T &x) (defined in seastar::lw_shared_ptr_no_esft< T >)seastar::lw_shared_ptr_no_esft< T >inline
    lw_shared_ptr_no_esft(T &&x) (defined in seastar::lw_shared_ptr_no_esft< T >)seastar::lw_shared_ptr_no_esft< T >inline
    lw_shared_ptr_no_esft(A &&... a) (defined in seastar::lw_shared_ptr_no_esft< T >)seastar::lw_shared_ptr_no_esft< T >inline
    + + + + diff --git a/master/structseastar_1_1lw__shared__ptr__no__esft.html b/master/structseastar_1_1lw__shared__ptr__no__esft.html new file mode 100644 index 000000000..d1a03c099 --- /dev/null +++ b/master/structseastar_1_1lw__shared__ptr__no__esft.html @@ -0,0 +1,115 @@ + + + + + + + +Seastar: seastar::lw_shared_ptr_no_esft< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::lw_shared_ptr_no_esft< T > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::lw_shared_ptr_no_esft< T >:
    +
    +
    + + +seastar::lw_shared_ptr_counter_base + +
    + + + + + + + + + +

    +Public Member Functions

    lw_shared_ptr_no_esft (const T &x)
     
    lw_shared_ptr_no_esft (T &&x)
     
    +template<typename... A>
     lw_shared_ptr_no_esft (A &&... a)
     
    + + + +

    +Public Attributes

    +T _value
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1lw__shared__ptr__no__esft.png b/master/structseastar_1_1lw__shared__ptr__no__esft.png new file mode 100644 index 0000000000000000000000000000000000000000..46d18fbff60b579ae8cb36e84f48d28214380405 GIT binary patch literal 805 zcmeAS@N?(olHy`uVBq!ia0vp^_klQogBeJ!I~X7gq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0ws^WYhEy=Vo%?>$YXy#@^^63BrOi#k}Wtc*N+`Dk&8fI>rkLZhW!N#`MeD z=kJt)>T9o?v;6Ph_vMq%vq|}`e3a@+r(w!Yi(t7e&h<#xfDUxa_f$mQ9tJ#=RJtlXy(S9S9PYfGvuzux+J z{NK!lk1B4>x^GjzFDLAd!~K^(rBkEN-#htlPsP7Ke{_CM+4(h3b-R6kP~Y?C6YIiSXV2Cpm7J9~CPn9V5d$H#G>(^~bl2aMj7{A&w>ut`ct!6D! z?DO8Id%pdD-F3ZhpDHD!+LrI#q?zs-7eD*OEycOL`PW!$*Oz)7`g&>4z3>zE%k`yq z37%Tf6`1pP`?l0;OAh-?{{;+nrn=FY@2*zq`x+-I2&H zmVRw*TR;8#bNO@g=g(K2pPVyu>YWwaet*6p@c3ut8TsgK7yo?OyZcuy!w;o>n?AUI z+1s~YThoF6=t@4Bc1l8+Jte0tVen=8o>??q*A;EIVp%o~iq3R$-qhFikUf My85}Sb4q9e0CSO*cmMzZ literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1memory_1_1allocation__site-members.html b/master/structseastar_1_1memory_1_1allocation__site-members.html new file mode 100644 index 000000000..c75ffd101 --- /dev/null +++ b/master/structseastar_1_1memory_1_1allocation__site-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::memory::allocation_site Member List
    +
    +
    + +

    This is the complete list of members for seastar::memory::allocation_site, including all inherited members.

    + + + + + + + + +
    backtraceseastar::memory::allocation_site
    count (defined in seastar::memory::allocation_site)seastar::memory::allocation_sitemutable
    nextseastar::memory::allocation_sitemutable
    operator!=(const allocation_site &o) const (defined in seastar::memory::allocation_site)seastar::memory::allocation_siteinline
    operator==(const allocation_site &o) const (defined in seastar::memory::allocation_site)seastar::memory::allocation_siteinline
    prev (defined in seastar::memory::allocation_site)seastar::memory::allocation_sitemutable
    sizeseastar::memory::allocation_sitemutable
    + + + + diff --git a/master/structseastar_1_1memory_1_1allocation__site.html b/master/structseastar_1_1memory_1_1allocation__site.html new file mode 100644 index 000000000..70d39261a --- /dev/null +++ b/master/structseastar_1_1memory_1_1allocation__site.html @@ -0,0 +1,122 @@ + + + + + + + +Seastar: seastar::memory::allocation_site Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::memory::allocation_site Struct Reference
    +
    +
    +

    Detailed Description

    +

    Describes an allocation location in the code.

    +

    The location is identified by its backtrace. One allocation_site can represent many allocations at the same location. count and size represent the cumulative sum of all allocations at the location. Note the size represents an extrapolated size and not the sampled one, i.e.: when looking at the total size of all allocation sites it will approximate the total memory usage

    +
    +

    #include <seastar/core/memory.hh>

    + + + + + + +

    +Public Member Functions

    +bool operator== (const allocation_site &o) const
     
    +bool operator!= (const allocation_site &o) const
     
    + + + + + + + + + + + + + + +

    +Public Attributes

    +size_t count = 0
     
    +size_t size = 0
     number of live objects allocated at backtrace.
     
    +simple_backtrace backtrace
     amount of bytes in live objects allocated at backtrace.
     
    +const allocation_sitenext = nullptr
     call site for this allocation
     
    +const allocation_siteprev = nullptr
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1metrics_1_1histogram-members.html b/master/structseastar_1_1metrics_1_1histogram-members.html new file mode 100644 index 000000000..70987de4d --- /dev/null +++ b/master/structseastar_1_1metrics_1_1histogram-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::metrics::histogram Member List
    +
    +
    + +

    This is the complete list of members for seastar::metrics::histogram, including all inherited members.

    + + + + + + + + +
    buckets (defined in seastar::metrics::histogram)seastar::metrics::histogram
    native_histogram (defined in seastar::metrics::histogram)seastar::metrics::histogram
    operator+(const histogram &h) constseastar::metrics::histogram
    operator+(histogram &&h) constseastar::metrics::histogram
    operator+=(const histogram &h)seastar::metrics::histogram
    sample_count (defined in seastar::metrics::histogram)seastar::metrics::histogram
    sample_sum (defined in seastar::metrics::histogram)seastar::metrics::histogram
    + + + + diff --git a/master/structseastar_1_1metrics_1_1histogram.html b/master/structseastar_1_1metrics_1_1histogram.html new file mode 100644 index 000000000..c95c27df6 --- /dev/null +++ b/master/structseastar_1_1metrics_1_1histogram.html @@ -0,0 +1,183 @@ + + + + + + + +Seastar: seastar::metrics::histogram Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::metrics::histogram Struct Reference
    +
    +
    +

    Detailed Description

    +

    Histogram data type.

    +

    The histogram struct is a container for histogram values. It is not a histogram implementation but it will be used by histogram implementation to return its internal values.

    +
    +

    #include <seastar/core/metrics_types.hh>

    + + + + + + + + + + + +

    +Public Member Functions

    histogramoperator+= (const histogram &h)
     Addition assigning a historgram. More...
     
    histogram operator+ (const histogram &h) const
     Addition historgrams. More...
     
    histogram operator+ (histogram &&h) const
     Addition historgrams. More...
     
    + + + + + + + + + +

    +Public Attributes

    +uint64_t sample_count = 0
     
    +double sample_sum = 0
     
    +std::vector< histogram_bucketbuckets
     
    +std::optional< native_histogram_infonative_histogram
     
    +

    Member Function Documentation

    + +

    ◆ operator+() [1/2]

    + +
    +
    + + + + + + + + +
    histogram seastar::metrics::histogram::operator+ (const histogramh) const
    +
    + +

    Addition historgrams.

    +

    Add two histograms and return the result as a new histogram The histogram must match the buckets upper bounds or an exception will be thrown

    + +
    +
    + +

    ◆ operator+() [2/2]

    + +
    +
    + + + + + + + + +
    histogram seastar::metrics::histogram::operator+ (histogram && h) const
    +
    + +

    Addition historgrams.

    +

    Add two histograms and return the result as a new histogram The histogram must match the buckets upper bounds or an exception will be thrown

    + +
    +
    + +

    ◆ operator+=()

    + +
    +
    + + + + + + + + +
    histogram & seastar::metrics::histogram::operator+= (const histogramh)
    +
    + +

    Addition assigning a historgram.

    +

    The histogram must match the buckets upper bounds or an exception will be thrown

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1config-members.html b/master/structseastar_1_1metrics_1_1impl_1_1config-members.html new file mode 100644 index 000000000..18d232589 --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1config-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::metrics::impl::config Member List
    +
    +
    + +

    This is the complete list of members for seastar::metrics::impl::config, including all inherited members.

    + + +
    hostname (defined in seastar::metrics::impl::config)seastar::metrics::impl::config
    + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1config.html b/master/structseastar_1_1metrics_1_1impl_1_1config.html new file mode 100644 index 000000000..0ceb31d9d --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1config.html @@ -0,0 +1,107 @@ + + + + + + + +Seastar: seastar::metrics::impl::config Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::metrics::impl::config Struct Reference
    +
    +
    + + + + +

    +Public Attributes

    +sstring hostname
     
    +

    Member Data Documentation

    + +

    ◆ hostname

    + +
    +
    + + + + +
    sstring seastar::metrics::impl::config::hostname
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1counter__type__traits-members.html b/master/structseastar_1_1metrics_1_1impl_1_1counter__type__traits-members.html new file mode 100644 index 000000000..4b15f7613 --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1counter__type__traits-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::metrics::impl::counter_type_traits< T > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1counter__type__traits.html b/master/structseastar_1_1metrics_1_1impl_1_1counter__type__traits.html new file mode 100644 index 000000000..e599e49d0 --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1counter__type__traits.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: seastar::metrics::impl::counter_type_traits< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::metrics::impl::counter_type_traits< T > Struct Template Reference
    +
    +
    + + + + +

    +Public Types

    +using real_traits = real_counter_type_traits< std::is_invocable_v< T >, T >
     
    + + + + + +

    +Static Public Attributes

    +static constexpr bool is_integral = std::is_integral_v<typename real_traits::type>
     
    +static constexpr data_type type = is_integral ? data_type::COUNTER : data_type::REAL_COUNTER
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1metric__definition__impl-members.html b/master/structseastar_1_1metrics_1_1impl_1_1metric__definition__impl-members.html new file mode 100644 index 000000000..60ee67059 --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1metric__definition__impl-members.html @@ -0,0 +1,97 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::metrics::impl::metric_definition_impl Member List
    +
    +
    + +

    This is the complete list of members for seastar::metrics::impl::metric_definition_impl, including all inherited members.

    + + + + + + + + + + + + + + + + +
    _skip_when_empty (defined in seastar::metrics::impl::metric_definition_impl)seastar::metrics::impl::metric_definition_impl
    aggregate(const std::vector< label > &labels) noexcept (defined in seastar::metrics::impl::metric_definition_impl)seastar::metrics::impl::metric_definition_impl
    aggregate_labels (defined in seastar::metrics::impl::metric_definition_impl)seastar::metrics::impl::metric_definition_impl
    d (defined in seastar::metrics::impl::metric_definition_impl)seastar::metrics::impl::metric_definition_impl
    enabled (defined in seastar::metrics::impl::metric_definition_impl)seastar::metrics::impl::metric_definition_impl
    f (defined in seastar::metrics::impl::metric_definition_impl)seastar::metrics::impl::metric_definition_impl
    labels (defined in seastar::metrics::impl::metric_definition_impl)seastar::metrics::impl::metric_definition_impl
    metric_definition_impl(metric_name_type name, metric_type type, metric_function f, description d, std::vector< label_instance > labels, std::vector< label > aggregate_labels={}) (defined in seastar::metrics::impl::metric_definition_impl)seastar::metrics::impl::metric_definition_impl
    name (defined in seastar::metrics::impl::metric_definition_impl)seastar::metrics::impl::metric_definition_impl
    operator()(bool enabled) (defined in seastar::metrics::impl::metric_definition_impl)seastar::metrics::impl::metric_definition_impl
    operator()(const label_instance &label) (defined in seastar::metrics::impl::metric_definition_impl)seastar::metrics::impl::metric_definition_impl
    operator()(skip_when_empty skip) noexcept (defined in seastar::metrics::impl::metric_definition_impl)seastar::metrics::impl::metric_definition_impl
    set_skip_when_empty(bool skip=true) noexcept (defined in seastar::metrics::impl::metric_definition_impl)seastar::metrics::impl::metric_definition_impl
    set_type(const sstring &type_name) (defined in seastar::metrics::impl::metric_definition_impl)seastar::metrics::impl::metric_definition_impl
    type (defined in seastar::metrics::impl::metric_definition_impl)seastar::metrics::impl::metric_definition_impl
    + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1metric__definition__impl.html b/master/structseastar_1_1metrics_1_1impl_1_1metric__definition__impl.html new file mode 100644 index 000000000..4b6fc338a --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1metric__definition__impl.html @@ -0,0 +1,138 @@ + + + + + + + +Seastar: seastar::metrics::impl::metric_definition_impl Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::metrics::impl::metric_definition_impl Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +metric_definition_imploperator() (bool enabled)
     
    +metric_definition_imploperator() (const label_instance &label)
     
    +metric_definition_imploperator() (skip_when_empty skip) noexcept
     
    +metric_definition_implaggregate (const std::vector< label > &labels) noexcept
     
    +metric_definition_implset_skip_when_empty (bool skip=true) noexcept
     
    +metric_definition_implset_type (const sstring &type_name)
     
    metric_definition_impl (metric_name_type name, metric_type type, metric_function f, description d, std::vector< label_instance > labels, std::vector< label > aggregate_labels={})
     
    + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +metric_name_type name
     
    +metric_type type
     
    +metric_function f
     
    +description d
     
    +bool enabled = true
     
    +skip_when_empty _skip_when_empty = skip_when_empty::no
     
    +std::vector< std::string > aggregate_labels
     
    +std::map< sstring, sstring > labels
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1metric__family__info-members.html b/master/structseastar_1_1metrics_1_1impl_1_1metric__family__info-members.html new file mode 100644 index 000000000..d9057eaa8 --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1metric__family__info-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::metrics::impl::metric_family_info Member List
    +
    + + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1metric__family__info.html b/master/structseastar_1_1metrics_1_1impl_1_1metric__family__info.html new file mode 100644 index 000000000..a29b6caeb --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1metric__family__info.html @@ -0,0 +1,180 @@ + + + + + + + +Seastar: seastar::metrics::impl::metric_family_info Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::metrics::impl::metric_family_info Struct Reference
    +
    +
    +

    Detailed Description

    +

    holds metadata information of a metric family

    +

    Holds the information that is shared between all metrics that belongs to the same metric_family

    +
    +

    #include <seastar/core/metrics_api.hh>

    + + + + + + + + + + + + +

    +Public Attributes

    +data_type type
     
    +metric_type_def inherit_type
     
    +description d
     
    +sstring name
     
    +std::vector< std::string > aggregate_labels
     
    +

    Member Data Documentation

    + +

    ◆ aggregate_labels

    + +
    +
    + + + + +
    std::vector<std::string> seastar::metrics::impl::metric_family_info::aggregate_labels
    +
    + +
    +
    + +

    ◆ d

    + +
    +
    + + + + +
    description seastar::metrics::impl::metric_family_info::d
    +
    + +
    +
    + +

    ◆ inherit_type

    + +
    +
    + + + + +
    metric_type_def seastar::metrics::impl::metric_family_info::inherit_type
    +
    + +
    +
    + +

    ◆ name

    + +
    +
    + + + + +
    sstring seastar::metrics::impl::metric_family_info::name
    +
    + +
    +
    + +

    ◆ type

    + +
    +
    + + + + +
    data_type seastar::metrics::impl::metric_family_info::type
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1metric__family__metadata-members.html b/master/structseastar_1_1metrics_1_1impl_1_1metric__family__metadata-members.html new file mode 100644 index 000000000..b4a874ef3 --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1metric__family__metadata-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::metrics::impl::metric_family_metadata Member List
    +
    + + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1metric__family__metadata.html b/master/structseastar_1_1metrics_1_1impl_1_1metric__family__metadata.html new file mode 100644 index 000000000..7dfa495b5 --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1metric__family__metadata.html @@ -0,0 +1,130 @@ + + + + + + + +Seastar: seastar::metrics::impl::metric_family_metadata Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::metrics::impl::metric_family_metadata Struct Reference
    +
    +
    +

    Detailed Description

    +

    holds a metric family metadata

    +

    The meta data of a metric family compose of the metadata of the family, and a vector of the metadata for each of the metrics.

    +

    The struct is used for two purposes. First, it allows iterating over all metric_families and all metrics related to them. Second, it only contains enabled metrics, making disabled metrics more efficient. The struct is recreated when impl._value_map changes

    +
    +

    #include <seastar/core/metrics_api.hh>

    + + + + + + +

    +Public Attributes

    +metric_family_info mf
     
    +metric_metadata_fifo metrics
     
    +

    Member Data Documentation

    + +

    ◆ metrics

    + +
    +
    + + + + +
    metric_metadata_fifo seastar::metrics::impl::metric_family_metadata::metrics
    +
    + +
    +
    + +

    ◆ mf

    + +
    +
    + + + + +
    metric_family_info seastar::metrics::impl::metric_family_metadata::mf
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1metric__info-members.html b/master/structseastar_1_1metrics_1_1impl_1_1metric__info-members.html new file mode 100644 index 000000000..de6cdd6b1 --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1metric__info-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::metrics::impl::metric_info Member List
    +
    + + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1metric__info.html b/master/structseastar_1_1metrics_1_1impl_1_1metric__info.html new file mode 100644 index 000000000..66a108c86 --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1metric__info.html @@ -0,0 +1,162 @@ + + + + + + + +Seastar: seastar::metrics::impl::metric_info Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::metrics::impl::metric_info Struct Reference
    +
    +
    +

    Detailed Description

    +

    holds metric metadata

    +
    +

    #include <seastar/core/metrics_api.hh>

    + + + + + + + + + + +

    +Public Attributes

    +metric_id id
     
    +labels_type original_labels
     
    +bool enabled
     
    +skip_when_empty should_skip_when_empty
     
    +

    Member Data Documentation

    + +

    ◆ enabled

    + +
    +
    + + + + +
    bool seastar::metrics::impl::metric_info::enabled
    +
    + +
    +
    + +

    ◆ id

    + +
    +
    + + + + +
    metric_id seastar::metrics::impl::metric_info::id
    +
    + +
    +
    + +

    ◆ original_labels

    + +
    +
    + + + + +
    labels_type seastar::metrics::impl::metric_info::original_labels
    +
    + +
    +
    + +

    ◆ should_skip_when_empty

    + +
    +
    + + + + +
    skip_when_empty seastar::metrics::impl::metric_info::should_skip_when_empty
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1metric__type-members.html b/master/structseastar_1_1metrics_1_1impl_1_1metric__type-members.html new file mode 100644 index 000000000..4a26eb600 --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1metric__type-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::metrics::impl::metric_type Member List
    +
    +
    + +

    This is the complete list of members for seastar::metrics::impl::metric_type, including all inherited members.

    + + + +
    base_type (defined in seastar::metrics::impl::metric_type)seastar::metrics::impl::metric_type
    type_name (defined in seastar::metrics::impl::metric_type)seastar::metrics::impl::metric_type
    + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1metric__type.html b/master/structseastar_1_1metrics_1_1impl_1_1metric__type.html new file mode 100644 index 000000000..53cd8841d --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1metric__type.html @@ -0,0 +1,124 @@ + + + + + + + +Seastar: seastar::metrics::impl::metric_type Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::metrics::impl::metric_type Struct Reference
    +
    +
    + + + + + + +

    +Public Attributes

    +data_type base_type
     
    +metric_type_def type_name
     
    +

    Member Data Documentation

    + +

    ◆ base_type

    + +
    +
    + + + + +
    data_type seastar::metrics::impl::metric_type::base_type
    +
    + +
    +
    + +

    ◆ type_name

    + +
    +
    + + + + +
    metric_type_def seastar::metrics::impl::metric_type::type_name
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits-members.html b/master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits-members.html new file mode 100644 index 000000000..608744be7 --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::metrics::impl::real_counter_type_traits< callable, T > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits.html b/master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits.html new file mode 100644 index 000000000..a4b8845ab --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: seastar::metrics::impl::real_counter_type_traits< callable, T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::metrics::impl::real_counter_type_traits< callable, T > Struct Template Reference
    +
    +
    + + + + +

    +Public Types

    +using type = T
     
    +

    Member Typedef Documentation

    + +

    ◆ type

    + +
    +
    +
    +template<bool callable, typename T >
    + + + + +
    using seastar::metrics::impl::real_counter_type_traits< callable, T >::type = T
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits_3_01true_00_01T_01_4-members.html b/master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits_3_01true_00_01T_01_4-members.html new file mode 100644 index 000000000..a55c2caec --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits_3_01true_00_01T_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::metrics::impl::real_counter_type_traits< true, T > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits_3_01true_00_01T_01_4.html b/master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits_3_01true_00_01T_01_4.html new file mode 100644 index 000000000..6851e6f9f --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1real__counter__type__traits_3_01true_00_01T_01_4.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: seastar::metrics::impl::real_counter_type_traits< true, T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::metrics::impl::real_counter_type_traits< true, T > Struct Template Reference
    +
    +
    + + + + +

    +Public Types

    +using type = std::invoke_result_t< T >
     
    +

    Member Typedef Documentation

    + +

    ◆ type

    + +
    +
    +
    +template<typename T >
    + + + + +
    using seastar::metrics::impl::real_counter_type_traits< true, T >::type = std::invoke_result_t<T>
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1values__copy-members.html b/master/structseastar_1_1metrics_1_1impl_1_1values__copy-members.html new file mode 100644 index 000000000..4d57cf392 --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1values__copy-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::metrics::impl::values_copy Member List
    +
    +
    + +

    This is the complete list of members for seastar::metrics::impl::values_copy, including all inherited members.

    + + + +
    metadata (defined in seastar::metrics::impl::values_copy)seastar::metrics::impl::values_copy
    values (defined in seastar::metrics::impl::values_copy)seastar::metrics::impl::values_copy
    + + + + diff --git a/master/structseastar_1_1metrics_1_1impl_1_1values__copy.html b/master/structseastar_1_1metrics_1_1impl_1_1values__copy.html new file mode 100644 index 000000000..dc6376517 --- /dev/null +++ b/master/structseastar_1_1metrics_1_1impl_1_1values__copy.html @@ -0,0 +1,124 @@ + + + + + + + +Seastar: seastar::metrics::impl::values_copy Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::metrics::impl::values_copy Struct Reference
    +
    +
    + + + + + + +

    +Public Attributes

    +shared_ptr< metric_metadata > metadata
     
    +metric_values values
     
    +

    Member Data Documentation

    + +

    ◆ metadata

    + +
    +
    + + + + +
    shared_ptr<metric_metadata> seastar::metrics::impl::values_copy::metadata
    +
    + +
    +
    + +

    ◆ values

    + +
    +
    + + + + +
    metric_values seastar::metrics::impl::values_copy::values
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1metrics_1_1options-members.html b/master/structseastar_1_1metrics_1_1options-members.html new file mode 100644 index 000000000..3eab586c6 --- /dev/null +++ b/master/structseastar_1_1metrics_1_1options-members.html @@ -0,0 +1,100 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::metrics::options Member List
    +
    +
    + +

    This is the complete list of members for seastar::metrics::options, including all inherited members.

    + + + + + + + + + + + + + + + + + + + +
    describe(options_descriptor &descriptor) constseastar::program_options::option_group
    metrics_hostnameseastar::metrics::options
    mutate(options_mutator &mutator)seastar::program_options::option_group
    name() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    operator bool() constseastar::program_options::option_groupinline
    operator=(option_group &&)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    operator=(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(option_group *parent, std::string name)seastar::program_options::option_groupexplicit
    option_group(option_group *parent, std::string name, unused)seastar::program_options::option_groupexplicit
    option_group(option_group &&) (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    options(program_options::option_group *parent_group) (defined in seastar::metrics::options)seastar::metrics::options
    used() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    value_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    values() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    values() (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    ~option_group()=default (defined in seastar::program_options::option_group)seastar::program_options::option_groupvirtual
    + + + + diff --git a/master/structseastar_1_1metrics_1_1options.html b/master/structseastar_1_1metrics_1_1options.html new file mode 100644 index 000000000..68b54243c --- /dev/null +++ b/master/structseastar_1_1metrics_1_1options.html @@ -0,0 +1,230 @@ + + + + + + + +Seastar: seastar::metrics::options Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::metrics::options Struct Reference
    +
    +
    +

    Detailed Description

    +

    Metrics configuration options.

    +
    +

    #include <seastar/core/metrics_api.hh>

    +
    +Inheritance diagram for seastar::metrics::options:
    +
    +
    + + +seastar::program_options::option_group + +
    + + + + + + +

    +Public Types

    +using value_list_type = boost::intrusive::list< basic_value, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    +using option_group_list_type = boost::intrusive::list< option_group, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    options (program_options::option_group *parent_group)
     
    operator bool () const
     Does the option group has any values contained in it?
     
    +bool used () const
     
    +const std::string & name () const
     
    +const value_list_type & values () const
     
    +value_list_type & values ()
     
    void describe (options_descriptor &descriptor) const
     
    void mutate (options_mutator &mutator)
     
    + + + + +

    +Public Attributes

    program_options::value< std::string > metrics_hostname
     The hostname used by the metrics. More...
     
    +

    Member Function Documentation

    + +

    ◆ describe()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::describe (options_descriptordescriptor) const
    +
    +inherited
    +
    +

    Describe the content of this option group to the visitor.

    +

    The content is visited in a depth-first manner:

      +
    • First the option groups itself is visited with options_descriptor::visit_group_start(). If this returns false the entire content of the group, including all its subgroups and values are skipped and options_descriptor::visit_group_end() is called immediately. Otherwise visiting the content of the group proceeds.
    • +
    • All the values contained therein are visited. For each value the following happens:
        +
      • First options_descriptor::visit_value_metadata() is called with generic metadata that all values have. If this return false the value is skipped, otherwise visiting the value proceeds.
      • +
      • Then the appropriate overload of options_descriptor::visit_value() is called, with a pointer to the default value of the respective value. The pointer is null if there is no default value.
      • +
      • For selection_value, options_descriptor::visit_selection_value() will be called instead of options_descriptor::visit_value(). After the value is visited, the option_group instance belonging to each candidate (if set) will be visited.
      • +
      +
    • +
    • All the nested option_group instances in the current group are visited.
    • +
    • Finally options_descriptor::visit_group_end() is called.
    • +
    + +
    +
    + +

    ◆ mutate()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::mutate (options_mutatormutator)
    +
    +inherited
    +
    +

    Mutate the content of this option group by the visitor.

    +

    The visiting algorithm is identical to that of describe(), with the following differences:

      +
    • options_mutator::visit_value() is allowed to mutate the value through the passed-in reference. It should return true if it did so and false otherwise.
    • +
    • When visiting a selection value, only the nested group belonging to the selected value is visited afterwards.
    • +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ metrics_hostname

    + +
    +
    + + + + +
    program_options::value<std::string> seastar::metrics::options::metrics_hostname
    +
    + +

    The hostname used by the metrics.

    +

    If not set, the local hostname will be used.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1metrics_1_1options.png b/master/structseastar_1_1metrics_1_1options.png new file mode 100644 index 0000000000000000000000000000000000000000..dcd930a38a798bc41434635c1ae3df3f7db1008a GIT binary patch literal 1022 zcmeAS@N?(olHy`uVBq!ia0vp^FM+s&gBeJgI@;&~DTx4|5ZC|z{{xvX-h3_XKQsZz z0^cg`t14da&h6j(5AXU~9&A|g=wn2x&KuDsA1&9M3^-HwaHFZS|5v3;!Qb93PWtvF z&@}n-_f2ndC#>_FnfCply!zVB+Zi(M9x!`3|HQrW_nEW5>|gKUUbjsv`^>3T-;Vv! z%X;r|W#f`ntNyQEr&1d-SO4{?Z2r)zhM$Z>L$|7`!-%C*OY%0l}S4uMg#~ z`8#iWhsVlzHBrHrSNsoqEP1#wWW}t#)jf~vvh^b;ecyZ5C)%93;`u-)Ry1RN`|K@_eThSq}Y^sx= z)&}`5u9r+b_vzB^b$d$<*51-q`qVbB=I$@Ms_+_*+i^2X6*9kCiwEDnpK&Sq=5y*_cC02vV;MskZ62evqfN;0Am7^rDlUJ2=l7Fje1k?sxYpWjrGUuB@F9L^me_U zxK4igTkjZ?>hBWi>E&~LX6?WIZrPisZ3H<$V|s`sCm)^QXPiF9 zdnxyo&#dQ@?Gjr%Rg@W_Uye^&uUBk&);LHl?ti; ze&JKq%|EP@g1x?$$Z{>;k&ySh^$qKeki& + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::metrics::relabel_config Member List
    +
    + + + + + diff --git a/master/structseastar_1_1metrics_1_1relabel__config.html b/master/structseastar_1_1metrics_1_1relabel__config.html new file mode 100644 index 000000000..0048af89d --- /dev/null +++ b/master/structseastar_1_1metrics_1_1relabel__config.html @@ -0,0 +1,130 @@ + + + + + + + +Seastar: seastar::metrics::relabel_config Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::metrics::relabel_config Struct Reference
    +
    +
    +

    Detailed Description

    +

    a relabel_config allows changing metrics labels dynamically

    +

    The logic is similar to Prometheus configuration This is how Prometheus entry looks like:

      +
    • source_labels: [version] regex: '([0-9]+.[0-9]+)(.?[0-9]*).*' replacement: '$1$2' target_label: svr relabel_action values: skip_when_empty - when set supported metrics (histogram, summary and counters) will not be reported if they were never used. report_when_empty - revert the skip_when_empty flag replace - replace the value of the target_label keep - enable the metrics drop - disable the metrics drop_label - remove the target label
    • +
    +

    source_labels - a list of source labels, the labels are concatenated with the separator and and the combine value is match to the regex. target_label - the labels to perform the action on when replacing a value or when dropping a label. replacement - the string to use when replacing a label value, regex group can be used. expr - a regular expression in a string format. Action would be taken if the regex match the concatenated labels. action - The action to perform when there is a match. separator - separator to use when concatenating the labels.

    +
    +

    #include <seastar/core/relabel_config.hh>

    + + + + +

    +Public Types

    enum class  relabel_action {
    +  skip_when_empty +, report_when_empty +, replace +, keep +,
    +  drop +, drop_label +
    + }
     
    + + + + + + + + + + + + + +

    +Public Attributes

    +std::vector< std::string > source_labels
     
    +std::string target_label
     
    +std::string replacement = "${1}"
     
    +relabel_config_regex expr = "(.*)"
     
    +relabel_action action = relabel_action::replace
     
    +std::string separator = ";"
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1mmap__deleter-members.html b/master/structseastar_1_1mmap__deleter-members.html new file mode 100644 index 000000000..ceca2ac72 --- /dev/null +++ b/master/structseastar_1_1mmap__deleter-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::mmap_deleter Member List
    +
    +
    + +

    This is the complete list of members for seastar::mmap_deleter, including all inherited members.

    + + + +
    _size (defined in seastar::mmap_deleter)seastar::mmap_deleter
    operator()(void *ptr) const (defined in seastar::mmap_deleter)seastar::mmap_deleter
    + + + + diff --git a/master/structseastar_1_1mmap__deleter.html b/master/structseastar_1_1mmap__deleter.html new file mode 100644 index 000000000..0e51086bf --- /dev/null +++ b/master/structseastar_1_1mmap__deleter.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: seastar::mmap_deleter Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::mmap_deleter Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +void operator() (void *ptr) const
     
    + + + +

    +Public Attributes

    +size_t _size
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1named__semaphore__exception__factory-members.html b/master/structseastar_1_1named__semaphore__exception__factory-members.html new file mode 100644 index 000000000..dd55f8c2b --- /dev/null +++ b/master/structseastar_1_1named__semaphore__exception__factory-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::named_semaphore_exception_factory Member List
    +
    + + + + + diff --git a/master/structseastar_1_1named__semaphore__exception__factory.html b/master/structseastar_1_1named__semaphore__exception__factory.html new file mode 100644 index 000000000..104bffac4 --- /dev/null +++ b/master/structseastar_1_1named__semaphore__exception__factory.html @@ -0,0 +1,105 @@ + + + + + + + +Seastar: seastar::named_semaphore_exception_factory Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::named_semaphore_exception_factory Struct Reference
    +
    +
    + + + + + + + + +

    +Public Member Functions

    +named_semaphore_timed_out timeout () const noexcept
     
    +broken_named_semaphore broken () const noexcept
     
    +named_semaphore_aborted aborted () const noexcept
     
    + + + +

    +Public Attributes

    +sstring name
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1nested__exception-members.html b/master/structseastar_1_1nested__exception-members.html new file mode 100644 index 000000000..c27b9540c --- /dev/null +++ b/master/structseastar_1_1nested__exception-members.html @@ -0,0 +1,89 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::nested_exception Member List
    +
    +
    + +

    This is the complete list of members for seastar::nested_exception, including all inherited members.

    + + + + + + + + +
    inner (defined in seastar::nested_exception)seastar::nested_exception
    nested_exception(std::exception_ptr inner, std::exception_ptr outer) noexcept (defined in seastar::nested_exception)seastar::nested_exception
    nested_exception(nested_exception &&) noexcept (defined in seastar::nested_exception)seastar::nested_exception
    nested_exception(const nested_exception &) noexcept (defined in seastar::nested_exception)seastar::nested_exception
    outer (defined in seastar::nested_exception)seastar::nested_exception
    rethrow_nested() const (defined in seastar::nested_exception)seastar::nested_exception
    what() const noexcept override (defined in seastar::nested_exception)seastar::nested_exceptionvirtual
    + + + + diff --git a/master/structseastar_1_1nested__exception.html b/master/structseastar_1_1nested__exception.html new file mode 100644 index 000000000..8db9d4202 --- /dev/null +++ b/master/structseastar_1_1nested__exception.html @@ -0,0 +1,120 @@ + + + + + + + +Seastar: seastar::nested_exception Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::nested_exception Struct Reference
    +
    +
    +
    +Inheritance diagram for seastar::nested_exception:
    +
    +
    + +
    + + + + + + + + + + + + +

    +Public Member Functions

    nested_exception (std::exception_ptr inner, std::exception_ptr outer) noexcept
     
    nested_exception (nested_exception &&) noexcept
     
    nested_exception (const nested_exception &) noexcept
     
    +void rethrow_nested () const
     
    +virtual const char * what () const noexcept override
     
    + + + + + +

    +Public Attributes

    +std::exception_ptr inner
     
    +std::exception_ptr outer
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1nested__exception.png b/master/structseastar_1_1nested__exception.png new file mode 100644 index 0000000000000000000000000000000000000000..eead2fe6436bc295c3fd235a18834159b7c17e1b GIT binary patch literal 607 zcmeAS@N?(olHy`uVBq!ia0vp^bAdR3gBeJg^tJZ^DTx4|5ZC|z{{xvX-h3_XKQsZz z0^cb+beAr*{o=iV)Pt-!+;ZvOM$|K9#! zAHf@6`->(S1()tA4NSSA@Z?@nnwjnl6<@DgoGN1hCY0{*U#_F=Wk94E9 zEz|$KafeFmgS^!3W#{K#TzAAS+g!(_%yae4G;aHZ^q}2sr`E+5KD@Jc=cfC%(buhB z-n{kD^xM8uUYAPa=3Bm1(L84TR^_GXCBI2YOXjK^jd*kBOd9J0`%errrmcJ{*FW>? zvTe~%)UM6Gtye9k;B|}fh=+B9L?*j{@>_Lx9wl#aoy@O@QdU!@#r+}CPpp3V-RmdIMcE{NxLP*|KikG^ lp#b&l^Vb*7 + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::checksummer Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::checksummer, including all inherited members.

    + + + + + + + + + + + +
    csum (defined in seastar::net::checksummer)seastar::net::checksummer
    get() const (defined in seastar::net::checksummer)seastar::net::checksummer
    odd (defined in seastar::net::checksummer)seastar::net::checksummer
    sum(const char *data, size_t len) (defined in seastar::net::checksummer)seastar::net::checksummer
    sum(const packet &p) (defined in seastar::net::checksummer)seastar::net::checksummer
    sum(uint8_t data) (defined in seastar::net::checksummer)seastar::net::checksummerinline
    sum(uint16_t data) (defined in seastar::net::checksummer)seastar::net::checksummerinline
    sum(uint32_t data) (defined in seastar::net::checksummer)seastar::net::checksummerinline
    sum_many() (defined in seastar::net::checksummer)seastar::net::checksummerinline
    sum_many(T0 data, T... rest) (defined in seastar::net::checksummer)seastar::net::checksummerinline
    + + + + diff --git a/master/structseastar_1_1net_1_1checksummer.html b/master/structseastar_1_1net_1_1checksummer.html new file mode 100644 index 000000000..335e8568c --- /dev/null +++ b/master/structseastar_1_1net_1_1checksummer.html @@ -0,0 +1,124 @@ + + + + + + + +Seastar: seastar::net::checksummer Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::checksummer Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +void sum (const char *data, size_t len)
     
    +void sum (const packet &p)
     
    +void sum (uint8_t data)
     
    +void sum (uint16_t data)
     
    +void sum (uint32_t data)
     
    +void sum_many ()
     
    +template<typename T0 , typename... T>
    void sum_many (T0 data, T... rest)
     
    +uint16_t get () const
     
    + + + + + +

    +Public Attributes

    +__int128 csum = 0
     
    +bool odd = false
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1dpdk__options-members.html b/master/structseastar_1_1net_1_1dpdk__options-members.html new file mode 100644 index 000000000..3ab325aed --- /dev/null +++ b/master/structseastar_1_1net_1_1dpdk__options-members.html @@ -0,0 +1,100 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::dpdk_options Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::dpdk_options, including all inherited members.

    + + + + + + + + + + + + + + + + + + + +
    describe(options_descriptor &descriptor) constseastar::program_options::option_group
    dpdk_port_indexseastar::net::dpdk_options
    hw_fcseastar::net::dpdk_options
    mutate(options_mutator &mutator)seastar::program_options::option_group
    name() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    operator bool() constseastar::program_options::option_groupinline
    operator=(option_group &&)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    operator=(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(option_group *parent, std::string name)seastar::program_options::option_groupexplicit
    option_group(option_group *parent, std::string name, unused)seastar::program_options::option_groupexplicit
    option_group(option_group &&) (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    used() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    value_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    values() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    values() (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    ~option_group()=default (defined in seastar::program_options::option_group)seastar::program_options::option_groupvirtual
    + + + + diff --git a/master/structseastar_1_1net_1_1dpdk__options.html b/master/structseastar_1_1net_1_1dpdk__options.html new file mode 100644 index 000000000..378a6ab6e --- /dev/null +++ b/master/structseastar_1_1net_1_1dpdk__options.html @@ -0,0 +1,245 @@ + + + + + + + +Seastar: seastar::net::dpdk_options Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::dpdk_options Struct Reference
    +
    +
    +

    Detailed Description

    +

    DPDK configuration.

    +
    +

    #include <seastar/net/dpdk.hh>

    +
    +Inheritance diagram for seastar::net::dpdk_options:
    +
    +
    + + +seastar::program_options::option_group + +
    + + + + + + +

    +Public Types

    +using value_list_type = boost::intrusive::list< basic_value, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    +using option_group_list_type = boost::intrusive::list< option_group, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    + + + + + + + + + + + + + + + + +

    +Public Member Functions

    operator bool () const
     Does the option group has any values contained in it?
     
    +bool used () const
     
    +const std::string & name () const
     
    +const value_list_type & values () const
     
    +value_list_type & values ()
     
    void describe (options_descriptor &descriptor) const
     
    void mutate (options_mutator &mutator)
     
    + + + + + + +

    +Public Attributes

    program_options::value< unsigned > dpdk_port_index
     
    program_options::value< std::string > hw_fc
     Enable HW Flow Control (on / off). More...
     
    +

    Member Function Documentation

    + +

    ◆ describe()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::describe (options_descriptordescriptor) const
    +
    +inherited
    +
    +

    Describe the content of this option group to the visitor.

    +

    The content is visited in a depth-first manner:

      +
    • First the option groups itself is visited with options_descriptor::visit_group_start(). If this returns false the entire content of the group, including all its subgroups and values are skipped and options_descriptor::visit_group_end() is called immediately. Otherwise visiting the content of the group proceeds.
    • +
    • All the values contained therein are visited. For each value the following happens:
        +
      • First options_descriptor::visit_value_metadata() is called with generic metadata that all values have. If this return false the value is skipped, otherwise visiting the value proceeds.
      • +
      • Then the appropriate overload of options_descriptor::visit_value() is called, with a pointer to the default value of the respective value. The pointer is null if there is no default value.
      • +
      • For selection_value, options_descriptor::visit_selection_value() will be called instead of options_descriptor::visit_value(). After the value is visited, the option_group instance belonging to each candidate (if set) will be visited.
      • +
      +
    • +
    • All the nested option_group instances in the current group are visited.
    • +
    • Finally options_descriptor::visit_group_end() is called.
    • +
    + +
    +
    + +

    ◆ mutate()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::mutate (options_mutatormutator)
    +
    +inherited
    +
    +

    Mutate the content of this option group by the visitor.

    +

    The visiting algorithm is identical to that of describe(), with the following differences:

      +
    • options_mutator::visit_value() is allowed to mutate the value through the passed-in reference. It should return true if it did so and false otherwise.
    • +
    • When visiting a selection value, only the nested group belonging to the selected value is visited afterwards.
    • +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ dpdk_port_index

    + +
    +
    + + + + +
    program_options::value<unsigned> seastar::net::dpdk_options::dpdk_port_index
    +
    +

    DPDK Port Index.

    +

    Default: 0.

    + +
    +
    + +

    ◆ hw_fc

    + +
    +
    + + + + +
    program_options::value<std::string> seastar::net::dpdk_options::hw_fc
    +
    + +

    Enable HW Flow Control (on / off).

    +

    Default: on.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1dpdk__options.png b/master/structseastar_1_1net_1_1dpdk__options.png new file mode 100644 index 0000000000000000000000000000000000000000..ee551a46969bd402f5040b853721102f543d98dd GIT binary patch literal 1034 zcmeAS@N?(olHy`uVBq!ia0vp^FM+s&gBeJgI@;&~DTx4|5ZC|z{{xvX-h3_XKQsZz z0^?L-Asc-Q6C3>^^>zr$z|7%=tecBurnH=^mEC0;< zMc=-;y!BqS>Q{KF`pea?_N>*OZyOT&`^0{@lfdpeyF{_YpoyU_mcK#Kgy-dBL#|f_ zON?JAtav=3>MiRAHFeevs>I_R{+CUBojW{TQh;9X=m2^hNSIDw6P##mqFKuaI(ant9^pX@ldZhytbqxbcfL~3+@ezfs! z>(1P6mIc1zp204z;WMVcn6~Y^etKD*<%?h443*Y57^F()nj8&W5-XLiEf;rkW~Hjd z|HQX{nYO&1zp31B@eTKAGrPK3s=*B4g74id-dM^Q};5|eyMyuZ{uIX xOW|)%y^C$|`;^a>;Oz&+=XYDS2(VqKZ_n5{VauU?lYkkQ!PC{xWt~$(6999V@Mr)4 literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1net_1_1eth__hdr-members.html b/master/structseastar_1_1net_1_1eth__hdr-members.html new file mode 100644 index 000000000..8c9524835 --- /dev/null +++ b/master/structseastar_1_1net_1_1eth__hdr-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::eth_hdr Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::eth_hdr, including all inherited members.

    + + + + + +
    adjust_endianness(Adjuster a) (defined in seastar::net::eth_hdr)seastar::net::eth_hdrinline
    dst_mac (defined in seastar::net::eth_hdr)seastar::net::eth_hdr
    eth_proto (defined in seastar::net::eth_hdr)seastar::net::eth_hdr
    src_mac (defined in seastar::net::eth_hdr)seastar::net::eth_hdr
    + + + + diff --git a/master/structseastar_1_1net_1_1eth__hdr.html b/master/structseastar_1_1net_1_1eth__hdr.html new file mode 100644 index 000000000..34a6a2243 --- /dev/null +++ b/master/structseastar_1_1net_1_1eth__hdr.html @@ -0,0 +1,106 @@ + + + + + + + +Seastar: seastar::net::eth_hdr Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::eth_hdr Struct Reference
    +
    +
    + + + + + +

    +Public Member Functions

    +template<typename Adjuster >
    auto adjust_endianness (Adjuster a)
     
    + + + + + + + +

    +Public Attributes

    +ethernet_address dst_mac
     
    +ethernet_address src_mac
     
    +packed< uint16_t > eth_proto
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1ethernet-members.html b/master/structseastar_1_1net_1_1ethernet-members.html new file mode 100644 index 000000000..5651d62dd --- /dev/null +++ b/master/structseastar_1_1net_1_1ethernet-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::ethernet Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::ethernet, including all inherited members.

    + + + + +
    address typedef (defined in seastar::net::ethernet)seastar::net::ethernet
    arp_hardware_type() (defined in seastar::net::ethernet)seastar::net::ethernetinlinestatic
    broadcast_address() (defined in seastar::net::ethernet)seastar::net::ethernetinlinestatic
    + + + + diff --git a/master/structseastar_1_1net_1_1ethernet.html b/master/structseastar_1_1net_1_1ethernet.html new file mode 100644 index 000000000..8bb43ec68 --- /dev/null +++ b/master/structseastar_1_1net_1_1ethernet.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: seastar::net::ethernet Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::ethernet Struct Reference
    +
    +
    + + + + +

    +Public Types

    +using address = ethernet_address
     
    + + + + + +

    +Static Public Member Functions

    +static address broadcast_address ()
     
    +static constexpr uint16_t arp_hardware_type ()
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1ethernet__address-members.html b/master/structseastar_1_1net_1_1ethernet__address-members.html new file mode 100644 index 000000000..1607f294b --- /dev/null +++ b/master/structseastar_1_1net_1_1ethernet__address-members.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::ethernet_address Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::ethernet_address, including all inherited members.

    + + + + + + + + + + + +
    adjust_endianness(Adjuster) noexcept (defined in seastar::net::ethernet_address)seastar::net::ethernet_addressinline
    consume(const char *&p) noexcept (defined in seastar::net::ethernet_address)seastar::net::ethernet_addressinlinestatic
    ethernet_address() noexcept (defined in seastar::net::ethernet_address)seastar::net::ethernet_addressinline
    ethernet_address(const uint8_t *eaddr) noexcept (defined in seastar::net::ethernet_address)seastar::net::ethernet_addressinline
    ethernet_address(std::initializer_list< uint8_t > eaddr) noexcept (defined in seastar::net::ethernet_address)seastar::net::ethernet_addressinline
    mac (defined in seastar::net::ethernet_address)seastar::net::ethernet_address
    produce(char *&p) const noexcept (defined in seastar::net::ethernet_address)seastar::net::ethernet_addressinline
    read(const char *p) noexcept (defined in seastar::net::ethernet_address)seastar::net::ethernet_addressinlinestatic
    size() noexcept (defined in seastar::net::ethernet_address)seastar::net::ethernet_addressinlinestatic
    write(char *p) const noexcept (defined in seastar::net::ethernet_address)seastar::net::ethernet_addressinline
    + + + + diff --git a/master/structseastar_1_1net_1_1ethernet__address.html b/master/structseastar_1_1net_1_1ethernet__address.html new file mode 100644 index 000000000..45e12091a --- /dev/null +++ b/master/structseastar_1_1net_1_1ethernet__address.html @@ -0,0 +1,125 @@ + + + + + + + +Seastar: seastar::net::ethernet_address Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::ethernet_address Struct Reference
    +
    +
    + + + + + + + + + + + + + +

    +Public Member Functions

    ethernet_address (const uint8_t *eaddr) noexcept
     
    ethernet_address (std::initializer_list< uint8_t > eaddr) noexcept
     
    +template<typename Adjuster >
    void adjust_endianness (Adjuster) noexcept
     
    +void write (char *p) const noexcept
     
    +void produce (char *&p) const noexcept
     
    + + + + + + + +

    +Static Public Member Functions

    +static ethernet_address read (const char *p) noexcept
     
    +static ethernet_address consume (const char *&p) noexcept
     
    +static constexpr size_t size () noexcept
     
    + + + +

    +Public Attributes

    +std::array< uint8_t, 6 > mac
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1icmp__hdr-members.html b/master/structseastar_1_1net_1_1icmp__hdr-members.html new file mode 100644 index 000000000..4cdeab3cc --- /dev/null +++ b/master/structseastar_1_1net_1_1icmp__hdr-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::icmp_hdr Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::icmp_hdr, including all inherited members.

    + + + + + + + +
    adjust_endianness(Adjuster a) (defined in seastar::net::icmp_hdr)seastar::net::icmp_hdrinline
    code (defined in seastar::net::icmp_hdr)seastar::net::icmp_hdr
    csum (defined in seastar::net::icmp_hdr)seastar::net::icmp_hdr
    msg_type enum name (defined in seastar::net::icmp_hdr)seastar::net::icmp_hdr
    rest (defined in seastar::net::icmp_hdr)seastar::net::icmp_hdr
    type (defined in seastar::net::icmp_hdr)seastar::net::icmp_hdr
    + + + + diff --git a/master/structseastar_1_1net_1_1icmp__hdr.html b/master/structseastar_1_1net_1_1icmp__hdr.html new file mode 100644 index 000000000..84e3bf9d9 --- /dev/null +++ b/master/structseastar_1_1net_1_1icmp__hdr.html @@ -0,0 +1,117 @@ + + + + + + + +Seastar: seastar::net::icmp_hdr Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::icmp_hdr Struct Reference
    +
    +
    + + + + +

    +Public Types

    enum class  msg_type : uint8_t { echo_reply = 0 +, echo_request = 8 + }
     
    + + + + +

    +Public Member Functions

    +template<typename Adjuster >
    auto adjust_endianness (Adjuster a)
     
    + + + + + + + + + +

    +Public Attributes

    +msg_type type
     
    +uint8_t code
     
    +packed< uint16_t > csum
     
    +packed< uint32_t > rest
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1ip__hdr-members.html b/master/structseastar_1_1net_1_1ip__hdr-members.html new file mode 100644 index 000000000..5df077ad5 --- /dev/null +++ b/master/structseastar_1_1net_1_1ip__hdr-members.html @@ -0,0 +1,100 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::ip_hdr Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::ip_hdr, including all inherited members.

    + + + + + + + + + + + + + + + + + + + +
    adjust_endianness(Adjuster a) (defined in seastar::net::ip_hdr)seastar::net::ip_hdrinline
    csum (defined in seastar::net::ip_hdr)seastar::net::ip_hdr
    df() (defined in seastar::net::ip_hdr)seastar::net::ip_hdrinline
    dscp (defined in seastar::net::ip_hdr)seastar::net::ip_hdr
    dst_ip (defined in seastar::net::ip_hdr)seastar::net::ip_hdr
    ecn (defined in seastar::net::ip_hdr)seastar::net::ip_hdr
    frag (defined in seastar::net::ip_hdr)seastar::net::ip_hdr
    frag_bits enum name (defined in seastar::net::ip_hdr)seastar::net::ip_hdr
    id (defined in seastar::net::ip_hdr)seastar::net::ip_hdr
    ihl (defined in seastar::net::ip_hdr)seastar::net::ip_hdr
    ip_proto (defined in seastar::net::ip_hdr)seastar::net::ip_hdr
    len (defined in seastar::net::ip_hdr)seastar::net::ip_hdr
    mf() (defined in seastar::net::ip_hdr)seastar::net::ip_hdrinline
    offset() (defined in seastar::net::ip_hdr)seastar::net::ip_hdrinline
    options (defined in seastar::net::ip_hdr)seastar::net::ip_hdr
    src_ip (defined in seastar::net::ip_hdr)seastar::net::ip_hdr
    ttl (defined in seastar::net::ip_hdr)seastar::net::ip_hdr
    ver (defined in seastar::net::ip_hdr)seastar::net::ip_hdr
    + + + + diff --git a/master/structseastar_1_1net_1_1ip__hdr.html b/master/structseastar_1_1net_1_1ip__hdr.html new file mode 100644 index 000000000..d10964c37 --- /dev/null +++ b/master/structseastar_1_1net_1_1ip__hdr.html @@ -0,0 +1,155 @@ + + + + + + + +Seastar: seastar::net::ip_hdr Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::ip_hdr Struct Reference
    +
    +
    + + + + +

    +Public Types

    enum class  frag_bits : uint8_t { mf = 13 +, df = 14 +, reserved = 15 +, offset_shift = 3 + }
     
    + + + + + + + + + + +

    +Public Member Functions

    +template<typename Adjuster >
    auto adjust_endianness (Adjuster a)
     
    +bool mf ()
     
    +bool df ()
     
    +uint16_t offset ()
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +uint8_t ihl: 4
     
    +uint8_t ver: 4
     
    +uint8_t dscp: 6
     
    +uint8_t ecn: 2
     
    +packed< uint16_t > len
     
    +packed< uint16_t > id
     
    +packed< uint16_t > frag
     
    +uint8_t ttl
     
    +uint8_t ip_proto
     
    +packed< uint16_t > csum
     
    +ipv4_address src_ip
     
    +ipv4_address dst_ip
     
    +uint8_t options [0]
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1ip__packet__filter-members.html b/master/structseastar_1_1net_1_1ip__packet__filter-members.html new file mode 100644 index 000000000..c27b04185 --- /dev/null +++ b/master/structseastar_1_1net_1_1ip__packet__filter-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::ip_packet_filter Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::ip_packet_filter, including all inherited members.

    + + + +
    handle(packet &p, ip_hdr *iph, ethernet_address from, bool &handled)=0 (defined in seastar::net::ip_packet_filter)seastar::net::ip_packet_filterpure virtual
    ~ip_packet_filter() (defined in seastar::net::ip_packet_filter)seastar::net::ip_packet_filterinlinevirtual
    + + + + diff --git a/master/structseastar_1_1net_1_1ip__packet__filter.html b/master/structseastar_1_1net_1_1ip__packet__filter.html new file mode 100644 index 000000000..5ab50d8f5 --- /dev/null +++ b/master/structseastar_1_1net_1_1ip__packet__filter.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::net::ip_packet_filter Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::ip_packet_filter Struct Referenceabstract
    +
    +
    + + + + +

    +Public Member Functions

    +virtual future handle (packet &p, ip_hdr *iph, ethernet_address from, bool &handled)=0
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1ipv4__address-members.html b/master/structseastar_1_1net_1_1ipv4__address-members.html new file mode 100644 index 000000000..764efcd48 --- /dev/null +++ b/master/structseastar_1_1net_1_1ipv4__address-members.html @@ -0,0 +1,95 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::ipv4_address Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::ipv4_address, including all inherited members.

    + + + + + + + + + + + + + + +
    adjust_endianness(Adjuster a) (defined in seastar::net::ipv4_address)seastar::net::ipv4_addressinline
    consume(const char *&p) noexcept (defined in seastar::net::ipv4_address)seastar::net::ipv4_addressinlinestatic
    ip (defined in seastar::net::ipv4_address)seastar::net::ipv4_address
    ipv4_address() noexcept (defined in seastar::net::ipv4_address)seastar::net::ipv4_addressinline
    ipv4_address(uint32_t ip) noexcept (defined in seastar::net::ipv4_address)seastar::net::ipv4_addressinlineexplicit
    ipv4_address(const std::string &addr) (defined in seastar::net::ipv4_address)seastar::net::ipv4_addressexplicit
    ipv4_address(ipv4_addr addr) noexcept (defined in seastar::net::ipv4_address)seastar::net::ipv4_addressinline
    operator!= (defined in seastar::net::ipv4_address)seastar::net::ipv4_addressfriend
    operator== (defined in seastar::net::ipv4_address)seastar::net::ipv4_addressfriend
    produce(char *&p) const noexcept (defined in seastar::net::ipv4_address)seastar::net::ipv4_addressinline
    read(const char *p) noexcept (defined in seastar::net::ipv4_address)seastar::net::ipv4_addressinlinestatic
    size() (defined in seastar::net::ipv4_address)seastar::net::ipv4_addressinlinestatic
    write(char *p) const noexcept (defined in seastar::net::ipv4_address)seastar::net::ipv4_addressinline
    + + + + diff --git a/master/structseastar_1_1net_1_1ipv4__address.html b/master/structseastar_1_1net_1_1ipv4__address.html new file mode 100644 index 000000000..f2112ccc3 --- /dev/null +++ b/master/structseastar_1_1net_1_1ipv4__address.html @@ -0,0 +1,128 @@ + + + + + + + +Seastar: seastar::net::ipv4_address Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::ipv4_address Struct Reference
    +
    +
    + + + + + + + + + + + + + + + +

    +Public Member Functions

    ipv4_address (uint32_t ip) noexcept
     
    ipv4_address (const std::string &addr)
     
    ipv4_address (ipv4_addr addr) noexcept
     
    +template<typename Adjuster >
    auto adjust_endianness (Adjuster a)
     
    +void write (char *p) const noexcept
     
    +void produce (char *&p) const noexcept
     
    + + + + + + + +

    +Static Public Member Functions

    +static ipv4_address read (const char *p) noexcept
     
    +static ipv4_address consume (const char *&p) noexcept
     
    +static constexpr size_t size ()
     
    + + + +

    +Public Attributes

    +packed< uint32_t > ip
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1ipv4__frag__id-members.html b/master/structseastar_1_1net_1_1ipv4__frag__id-members.html new file mode 100644 index 000000000..c5004cec3 --- /dev/null +++ b/master/structseastar_1_1net_1_1ipv4__frag__id-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::ipv4_frag_id Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::ipv4_frag_id, including all inherited members.

    + + + + + + +
    dst_ip (defined in seastar::net::ipv4_frag_id)seastar::net::ipv4_frag_id
    identification (defined in seastar::net::ipv4_frag_id)seastar::net::ipv4_frag_id
    operator==(const ipv4_frag_id &x) const (defined in seastar::net::ipv4_frag_id)seastar::net::ipv4_frag_idinline
    protocol (defined in seastar::net::ipv4_frag_id)seastar::net::ipv4_frag_id
    src_ip (defined in seastar::net::ipv4_frag_id)seastar::net::ipv4_frag_id
    + + + + diff --git a/master/structseastar_1_1net_1_1ipv4__frag__id.html b/master/structseastar_1_1net_1_1ipv4__frag__id.html new file mode 100644 index 000000000..bf5fdcc39 --- /dev/null +++ b/master/structseastar_1_1net_1_1ipv4__frag__id.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar::net::ipv4_frag_id Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::ipv4_frag_id Struct Reference
    +
    +
    + + + + +

    +Classes

    struct  hash
     
    + + + +

    +Public Member Functions

    +bool operator== (const ipv4_frag_id &x) const
     
    + + + + + + + + + +

    +Public Attributes

    +ipv4_address src_ip
     
    +ipv4_address dst_ip
     
    +uint16_t identification
     
    +uint8_t protocol
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1ipv4__frag__id_1_1hash-members.html b/master/structseastar_1_1net_1_1ipv4__frag__id_1_1hash-members.html new file mode 100644 index 000000000..0eb7cdf9e --- /dev/null +++ b/master/structseastar_1_1net_1_1ipv4__frag__id_1_1hash-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::ipv4_frag_id::hash Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::ipv4_frag_id::hash, including all inherited members.

    + + +
    operator()(const ipv4_frag_id &id) const noexcept (defined in seastar::net::ipv4_frag_id::hash)seastar::net::ipv4_frag_id::hashinline
    + + + + diff --git a/master/structseastar_1_1net_1_1ipv4__frag__id_1_1hash.html b/master/structseastar_1_1net_1_1ipv4__frag__id_1_1hash.html new file mode 100644 index 000000000..b9ac6806e --- /dev/null +++ b/master/structseastar_1_1net_1_1ipv4__frag__id_1_1hash.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: seastar::net::ipv4_frag_id::hash Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::ipv4_frag_id::hash Struct Reference
    +
    +
    +
    +Inheritance diagram for seastar::net::ipv4_frag_id::hash:
    +
    +
    + +
    + + + + +

    +Public Member Functions

    +size_t operator() (const ipv4_frag_id &id) const noexcept
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1ipv4__frag__id_1_1hash.png b/master/structseastar_1_1net_1_1ipv4__frag__id_1_1hash.png new file mode 100644 index 0000000000000000000000000000000000000000..7a279d517f54bf3412cd8774b3f2ac663764d750 GIT binary patch literal 1281 zcmeAS@N?(olHy`uVBq!ia0y~yU~&So12~w0@>!EF;% zOb?4qTJr6N)1)gr(H@g#C31TPRmVkSyqWRao0&V;x?NOk!V=~yGWAQBg`R)E{-I&Z zi`Km`+cqc%*y#s{DUX-^ZE!a}R&e5M6ppB~xBhY*&ex9#IG;9aquz!rJ~S`sQm_iwXZhrooJD_P(k;)s#RC( zn}(^|bV59eE*{>rbLTvhSO>!j94oyM%HwxX?XT9)~8=ei`s^JsD3oN9HB z^Tw8d!e3XfC38>NbRlEmNvWlgpLC|wW{RgR+&rr<>c#p^7oJ-EQ{!gM+-bIL=6d<- zw=H)bH?7z#vz|LL>hHEKGI}ZD8MiVQ?tLB~dSczxLcasEoy>H0+`8oNchY%&woG}z zhJY`>cAT&|K4XnntIwpORa}vCmpz%A@?g*F!|L_xCd96IJf%S#D6{Hkv!<%%;#C|T zmwJEj@yc(yaQU@;{iG7Xa;tw)rQ0tSDA}9?#b&yqXI7i8is##nttu-eam4gIF)qax zz0N-S7J*$)cAGH7oMm26yoPasq+MOZw=b(7ethx&&sqd`=jV6l?@KYvdia<<8E1CIL-YO_JC1?GQPnYSE|H3?lUAin6go9Pu0@~l0{hKpy`o)hwHkQxGc@r7oWZUyQH&U!)*XFjA-oobK*}5zR z!qYw(#=O+cl+!Vd`T3)F-Vvw6=L;Q7Y`)#!ZF-C?n&W|*3gb+s{T7;%6H3Eolzw)`d+)aq^TNfXthmIaUWZD(I_h+~`n~R!TRlJvAHpE3}m_}UMun{8F z`bIt1XS?Q{{qrQ|U$4xR5@M}1IjGI;%AK;!CoSsQ4D)1Q7T51A2tIIf z+kQTAUf$u*gy3yejByD-`Nn0DD-Kz16F9K;g_#hLlHCA|AP3cLz$jgDM2yLRVd@Ph iV4P0^g?z)kpX}Q*+`JSmUPu7TD+W(jKbLh*2~7YCT0j5* literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1net_1_1ipv4__traits-members.html b/master/structseastar_1_1net_1_1ipv4__traits-members.html new file mode 100644 index 000000000..c7988aacf --- /dev/null +++ b/master/structseastar_1_1net_1_1ipv4__traits-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::ipv4_traits Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::ipv4_traits, including all inherited members.

    + + + + + + + +
    address_type typedef (defined in seastar::net::ipv4_traits)seastar::net::ipv4_traits
    inet_type typedef (defined in seastar::net::ipv4_traits)seastar::net::ipv4_traits
    ip_hdr_len_min (defined in seastar::net::ipv4_traits)seastar::net::ipv4_traitsstatic
    packet_provider_type typedef (defined in seastar::net::ipv4_traits)seastar::net::ipv4_traits
    tcp_pseudo_header_checksum(checksummer &csum, ipv4_address src, ipv4_address dst, uint16_t len) (defined in seastar::net::ipv4_traits)seastar::net::ipv4_traitsinlinestatic
    udp_pseudo_header_checksum(checksummer &csum, ipv4_address src, ipv4_address dst, uint16_t len) (defined in seastar::net::ipv4_traits)seastar::net::ipv4_traitsinlinestatic
    + + + + diff --git a/master/structseastar_1_1net_1_1ipv4__traits.html b/master/structseastar_1_1net_1_1ipv4__traits.html new file mode 100644 index 000000000..d6482c977 --- /dev/null +++ b/master/structseastar_1_1net_1_1ipv4__traits.html @@ -0,0 +1,163 @@ + + + + + + + +Seastar: seastar::net::ipv4_traits Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::ipv4_traits Struct Reference
    +
    +
    + + + + +

    +Classes

    struct  l4packet
     
    + + + + + + + +

    +Public Types

    +using address_type = ipv4_address
     
    +using inet_type = ipv4_l4< ip_protocol_num::tcp >
     
    +using packet_provider_type = std::function< std::optional< l4packet >()>
     
    + + + + + +

    +Static Public Member Functions

    +static void tcp_pseudo_header_checksum (checksummer &csum, ipv4_address src, ipv4_address dst, uint16_t len)
     
    +static void udp_pseudo_header_checksum (checksummer &csum, ipv4_address src, ipv4_address dst, uint16_t len)
     
    + + + +

    +Static Public Attributes

    +static constexpr uint8_t ip_hdr_len_min = ipv4_hdr_len_min
     
    +

    Class Documentation

    + +

    ◆ seastar::net::ipv4_traits::l4packet

    + +
    +
    + + + + +
    struct seastar::net::ipv4_traits::l4packet
    +
    + + + + + + + + + + + + + + +
    Class Members
    +ethernet_address +e_dst +
    +packet +p +
    +ip_protocol_num +proto_num +
    +ipv4_address +to +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1ipv6__address-members.html b/master/structseastar_1_1net_1_1ipv6__address-members.html new file mode 100644 index 000000000..1e66dc936 --- /dev/null +++ b/master/structseastar_1_1net_1_1ipv6__address-members.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::ipv6_address Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::ipv6_address, including all inherited members.

    + + + + + + + + + + + + + + + + + + +
    adjust_endianness(Adjuster a) (defined in seastar::net::ipv6_address)seastar::net::ipv6_addressinline
    bytes() const noexcept (defined in seastar::net::ipv6_address)seastar::net::ipv6_addressinline
    consume(const char *&p) noexcept (defined in seastar::net::ipv6_address)seastar::net::ipv6_addressstatic
    ip (defined in seastar::net::ipv6_address)seastar::net::ipv6_address
    ipv6_address() noexcept (defined in seastar::net::ipv6_address)seastar::net::ipv6_address
    ipv6_address(const ::in6_addr &) noexcept (defined in seastar::net::ipv6_address)seastar::net::ipv6_addressexplicit
    ipv6_address(const ipv6_bytes &) noexcept (defined in seastar::net::ipv6_address)seastar::net::ipv6_addressexplicit
    ipv6_address(const std::string &) (defined in seastar::net::ipv6_address)seastar::net::ipv6_addressexplicit
    ipv6_address(const ipv6_addr &addr) noexcept (defined in seastar::net::ipv6_address)seastar::net::ipv6_address
    ipv6_bytes typedef (defined in seastar::net::ipv6_address)seastar::net::ipv6_address
    is_unspecified() const noexcept (defined in seastar::net::ipv6_address)seastar::net::ipv6_address
    operator!=(const ipv6_address &y) const noexcept (defined in seastar::net::ipv6_address)seastar::net::ipv6_addressinline
    operator==(const ipv6_address &y) const noexcept (defined in seastar::net::ipv6_address)seastar::net::ipv6_addressinline
    produce(char *&p) const noexcept (defined in seastar::net::ipv6_address)seastar::net::ipv6_address
    read(const char *) noexcept (defined in seastar::net::ipv6_address)seastar::net::ipv6_addressstatic
    size() (defined in seastar::net::ipv6_address)seastar::net::ipv6_addressinlinestatic
    write(char *p) const noexcept (defined in seastar::net::ipv6_address)seastar::net::ipv6_address
    + + + + diff --git a/master/structseastar_1_1net_1_1ipv6__address.html b/master/structseastar_1_1net_1_1ipv6__address.html new file mode 100644 index 000000000..c6f1e5ab1 --- /dev/null +++ b/master/structseastar_1_1net_1_1ipv6__address.html @@ -0,0 +1,150 @@ + + + + + + + +Seastar: seastar::net::ipv6_address Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::ipv6_address Struct Reference
    +
    +
    + + + + +

    +Public Types

    +using ipv6_bytes = std::array< uint8_t, 16 >
     
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    ipv6_address (const ::in6_addr &) noexcept
     
    ipv6_address (const ipv6_bytes &) noexcept
     
    ipv6_address (const std::string &)
     
    ipv6_address (const ipv6_addr &addr) noexcept
     
    +template<typename Adjuster >
    auto adjust_endianness (Adjuster a)
     
    +bool operator== (const ipv6_address &y) const noexcept
     
    +bool operator!= (const ipv6_address &y) const noexcept
     
    +const ipv6_bytes & bytes () const noexcept
     
    +bool is_unspecified () const noexcept
     
    +void write (char *p) const noexcept
     
    +void produce (char *&p) const noexcept
     
    + + + + + + + +

    +Static Public Member Functions

    +static ipv6_address read (const char *) noexcept
     
    +static ipv6_address consume (const char *&p) noexcept
     
    +static constexpr size_t size ()
     
    + + + +

    +Public Attributes

    +ipv6_bytes ip
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1l4connid-members.html b/master/structseastar_1_1net_1_1l4connid-members.html new file mode 100644 index 000000000..45a709414 --- /dev/null +++ b/master/structseastar_1_1net_1_1l4connid-members.html @@ -0,0 +1,90 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::l4connid< InetTraits > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1net_1_1l4connid.html b/master/structseastar_1_1net_1_1l4connid.html new file mode 100644 index 000000000..bedbf808f --- /dev/null +++ b/master/structseastar_1_1net_1_1l4connid.html @@ -0,0 +1,127 @@ + + + + + + + +Seastar: seastar::net::l4connid< InetTraits > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::l4connid< InetTraits > Struct Template Reference
    +
    +
    + + + + +

    +Classes

    struct  connid_hash
     
    + + + + + +

    +Public Types

    +using ipaddr = typename InetTraits::address_type
     
    +using inet_type = typename InetTraits::inet_type
     
    + + + + + +

    +Public Member Functions

    +bool operator== (const l4connid &x) const
     
    +uint32_t hash (rss_key_type rss_key)
     
    + + + + + + + + + +

    +Public Attributes

    +ipaddr local_ip
     
    +ipaddr foreign_ip
     
    +uint16_t local_port
     
    +uint16_t foreign_port
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1l4connid_1_1connid__hash-members.html b/master/structseastar_1_1net_1_1l4connid_1_1connid__hash-members.html new file mode 100644 index 000000000..867e3ee00 --- /dev/null +++ b/master/structseastar_1_1net_1_1l4connid_1_1connid__hash-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::l4connid< InetTraits >::connid_hash Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::l4connid< InetTraits >::connid_hash, including all inherited members.

    + + +
    operator()(const l4connid< InetTraits > &id) const noexcept (defined in seastar::net::l4connid< InetTraits >::connid_hash)seastar::net::l4connid< InetTraits >::connid_hashinline
    + + + + diff --git a/master/structseastar_1_1net_1_1l4connid_1_1connid__hash.html b/master/structseastar_1_1net_1_1l4connid_1_1connid__hash.html new file mode 100644 index 000000000..f871ace0c --- /dev/null +++ b/master/structseastar_1_1net_1_1l4connid_1_1connid__hash.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: seastar::net::l4connid< InetTraits >::connid_hash Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::l4connid< InetTraits >::connid_hash Struct Reference
    +
    +
    +
    +Inheritance diagram for seastar::net::l4connid< InetTraits >::connid_hash:
    +
    +
    + +
    + + + + +

    +Public Member Functions

    +size_t operator() (const l4connid< InetTraits > &id) const noexcept
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1l4connid_1_1connid__hash.png b/master/structseastar_1_1net_1_1l4connid_1_1connid__hash.png new file mode 100644 index 0000000000000000000000000000000000000000..10b4e1bf7d887b3f025eee624a3ce94318586238 GIT binary patch literal 1290 zcmeAS@N?(olHy`uVBq!ia0y~yU~&Mm12~w0Z-9nbFa~=QOED#dHeWBo$>(Ub6`* zPj5I(GC9CDX^D)q$0Rl&XG$`&=OqRprzl6kQ_A4BL-y-v^~n5_TfZ#5wM`{cZMnn? z=f+*u-|J6jx_ms4v$bwzqsq#|Km(Z9nXWF(v+v!gk|`w2TOxg~)+d~+_FAAF-_fmZ zed|8O?Up;Y;bIQ+-+%?KOTIn}iaT=Q+VPZy&m=XL{GI*h^*g&Kx2^?8@09O4)cMQD zEWqRUcjm@l>~i)u#mu}{tYo{z7ODPa-mU1f%CT96vrj!rT6tj)$K1RH@|;_w*BD;- z7BknqxMkL!R@qm@z1MsvsVwzgucKL?v0!F*_CK+2%#D1!A-B^u1qkzA>DeG#v7hNO zix>ZYVa_kXjrUA1#CtE8@a=u0-P(qyV)1X@eoc#iZF~9uq-an-BGWp-%>a!q5 zKQJ(Z&doQwVA_@^?>VcBSH;uP4;ZW;s)4NkVpxMb0jQ-9D9sEE|5FaQ!9KXfDv%!Nwb9(nt#)>XirV|^@7?^d098QHwbu)k9 z>1LUboXfx#p~AqNz_71ty4V4RZk7a~Uh$8Qm?RP=GVnAo{!ogG0qJRAG+>B7(#@UF z;L2pc!1kcKqL2|}HhYX-!h@npCZI~@ifter1`N+1vVhbaV3^Y`%yEE0f`Pd}&QAek z3D1E_i$;8k8uq(_lOuxx!}$$943c4N2_30SCpH){IO_;Iv`uA{NSeuDw1($^z-g8V ziKz^2JgHTV$JeI(G_Fe8dw)u)KkLSthQHOezYEfK=WQKC5Ps#^6s8cc + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::native_stack_options Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::native_stack_options, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    describe(options_descriptor &descriptor) constseastar::program_options::option_group
    dhcpseastar::net::native_stack_options
    dpdk_optsseastar::net::native_stack_options
    dpdk_pmdseastar::net::native_stack_options
    gw_ipv4_addrseastar::net::native_stack_options
    host_ipv4_addrseastar::net::native_stack_options
    hw_queue_weightseastar::net::native_stack_options
    lroseastar::net::native_stack_options
    mutate(options_mutator &mutator)seastar::program_options::option_group
    name() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    net_config (defined in seastar::net::native_stack_options)seastar::net::native_stack_options
    net_config_file (defined in seastar::net::native_stack_options)seastar::net::native_stack_options
    netmask_ipv4_addrseastar::net::native_stack_options
    operator bool() constseastar::program_options::option_groupinline
    operator=(option_group &&)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    operator=(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(option_group *parent, std::string name)seastar::program_options::option_groupexplicit
    option_group(option_group *parent, std::string name, unused)seastar::program_options::option_groupexplicit
    option_group(option_group &&) (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    tap_deviceseastar::net::native_stack_options
    udpv4_queue_sizeseastar::net::native_stack_options
    used() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    value_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    values() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    values() (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    virtio_optsseastar::net::native_stack_options
    ~option_group()=default (defined in seastar::program_options::option_group)seastar::program_options::option_groupvirtual
    + + + + diff --git a/master/structseastar_1_1net_1_1native__stack__options.html b/master/structseastar_1_1net_1_1native__stack__options.html new file mode 100644 index 000000000..c28d6c869 --- /dev/null +++ b/master/structseastar_1_1net_1_1native__stack__options.html @@ -0,0 +1,419 @@ + + + + + + + +Seastar: seastar::net::native_stack_options Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::native_stack_options Struct Reference
    +
    +
    +

    Detailed Description

    +

    Native stack configuration.

    +
    +

    #include <seastar/net/native-stack.hh>

    +
    +Inheritance diagram for seastar::net::native_stack_options:
    +
    +
    + + +seastar::program_options::option_group + +
    + + + + + + +

    +Public Types

    +using value_list_type = boost::intrusive::list< basic_value, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    +using option_group_list_type = boost::intrusive::list< option_group, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    + + + + + + + + + + + + + + + + +

    +Public Member Functions

    operator bool () const
     Does the option group has any values contained in it?
     
    +bool used () const
     
    +const std::string & name () const
     
    +const value_list_type & values () const
     
    +value_list_type & values ()
     
    void describe (options_descriptor &descriptor) const
     
    void mutate (options_mutator &mutator)
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +program_options::value< std::string > net_config
     
    +program_options::value< std::string > net_config_file
     
    program_options::value< std::string > tap_device
     Tap device to connect to. More...
     
    program_options::value< std::string > host_ipv4_addr
     Static IPv4 address to use. More...
     
    program_options::value< std::string > gw_ipv4_addr
     Static IPv4 gateway to use. More...
     
    program_options::value< std::string > netmask_ipv4_addr
     Static IPv4 netmask to use. More...
     
    program_options::value< int > udpv4_queue_size
     Default size of the UDPv4 per-channel packet queue. More...
     
    program_options::value< bool > dhcp
     Use DHCP discovery. More...
     
    program_options::value< float > hw_queue_weight
     Weighing of a hardware network queue relative to a software queue. More...
     
    program_options::value dpdk_pmd
     Use DPDK PMD drivers. More...
     
    program_options::value< std::string > lro
     Enable LRO (on/off). More...
     
    +virtio_options virtio_opts
     Virtio configuration.
     
    dpdk_options dpdk_opts
     
    +

    Member Function Documentation

    + +

    ◆ describe()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::describe (options_descriptordescriptor) const
    +
    +inherited
    +
    +

    Describe the content of this option group to the visitor.

    +

    The content is visited in a depth-first manner:

      +
    • First the option groups itself is visited with options_descriptor::visit_group_start(). If this returns false the entire content of the group, including all its subgroups and values are skipped and options_descriptor::visit_group_end() is called immediately. Otherwise visiting the content of the group proceeds.
    • +
    • All the values contained therein are visited. For each value the following happens:
        +
      • First options_descriptor::visit_value_metadata() is called with generic metadata that all values have. If this return false the value is skipped, otherwise visiting the value proceeds.
      • +
      • Then the appropriate overload of options_descriptor::visit_value() is called, with a pointer to the default value of the respective value. The pointer is null if there is no default value.
      • +
      • For selection_value, options_descriptor::visit_selection_value() will be called instead of options_descriptor::visit_value(). After the value is visited, the option_group instance belonging to each candidate (if set) will be visited.
      • +
      +
    • +
    • All the nested option_group instances in the current group are visited.
    • +
    • Finally options_descriptor::visit_group_end() is called.
    • +
    + +
    +
    + +

    ◆ mutate()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::mutate (options_mutatormutator)
    +
    +inherited
    +
    +

    Mutate the content of this option group by the visitor.

    +

    The visiting algorithm is identical to that of describe(), with the following differences:

      +
    • options_mutator::visit_value() is allowed to mutate the value through the passed-in reference. It should return true if it did so and false otherwise.
    • +
    • When visiting a selection value, only the nested group belonging to the selected value is visited afterwards.
    • +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ dhcp

    + +
    +
    + + + + +
    program_options::value<bool> seastar::net::native_stack_options::dhcp
    +
    + +

    Use DHCP discovery.

    +

    Default: true.

    + +
    +
    + +

    ◆ dpdk_opts

    + +
    +
    + + + + +
    dpdk_options seastar::net::native_stack_options::dpdk_opts
    +
    +

    DPDK configuration.

    +
    Note
    Unused when seastar is compiled without DPDK support.
    + +
    +
    + +

    ◆ dpdk_pmd

    + +
    +
    + + + + +
    program_options::value seastar::net::native_stack_options::dpdk_pmd
    +
    + +

    Use DPDK PMD drivers.

    +
    Note
    Unused when seastar is compiled without DPDK support.
    + +
    +
    + +

    ◆ gw_ipv4_addr

    + +
    +
    + + + + +
    program_options::value<std::string> seastar::net::native_stack_options::gw_ipv4_addr
    +
    + +

    Static IPv4 gateway to use.

    +

    Default: 192.168.122.1.

    + +
    +
    + +

    ◆ host_ipv4_addr

    + +
    +
    + + + + +
    program_options::value<std::string> seastar::net::native_stack_options::host_ipv4_addr
    +
    + +

    Static IPv4 address to use.

    +

    Default: 192.168.122.2.

    + +
    +
    + +

    ◆ hw_queue_weight

    + +
    +
    + + + + +
    program_options::value<float> seastar::net::native_stack_options::hw_queue_weight
    +
    + +

    Weighing of a hardware network queue relative to a software queue.

    +

    Values:

      +
    • 0.0: no work
    • +
    • 1.0: equal share
    • +
    +

    Default: 1.0.

    + +
    +
    + +

    ◆ lro

    + +
    +
    + + + + +
    program_options::value<std::string> seastar::net::native_stack_options::lro
    +
    + +

    Enable LRO (on/off).

    +

    Default: on.

    + +
    +
    + +

    ◆ netmask_ipv4_addr

    + +
    +
    + + + + +
    program_options::value<std::string> seastar::net::native_stack_options::netmask_ipv4_addr
    +
    + +

    Static IPv4 netmask to use.

    +

    Default: 255.255.255.0.

    + +
    +
    + +

    ◆ tap_device

    + +
    +
    + + + + +
    program_options::value<std::string> seastar::net::native_stack_options::tap_device
    +
    + +

    Tap device to connect to.

    +

    Default: tap0.

    + +
    +
    + +

    ◆ udpv4_queue_size

    + +
    +
    + + + + +
    program_options::value<int> seastar::net::native_stack_options::udpv4_queue_size
    +
    + +

    Default size of the UDPv4 per-channel packet queue.

    +

    Default: ipv4_udp::default_queue_size.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1native__stack__options.png b/master/structseastar_1_1net_1_1native__stack__options.png new file mode 100644 index 0000000000000000000000000000000000000000..b982e9dc7e401ecb6a92c2daf62d296c5ee9536d GIT binary patch literal 1084 zcmeAS@N?(olHy`uVBq!ia0vp^FM+s&gBeJgI@;&~DTx4|5ZC|z{{xvX-h3_XKQsZz z0^DzrEOFthl*?jZ-tlyQ7{{u|?0N!|)j2lO=}7GQ9nyl6$t5=)c?%7NxiTcV+vs z<7eFqtTP|q)OcCF^TWIQ|HEGY*)yZ-VBhgAr}l2}pRjCO)aHdVY(LD{9qs>B@sjU1 zy~Rmoj{{4;FMFSS^R|NQWTW$X&Gvp#>G_Nob~WZ+vY)s&{C(!^FW1ADnA%5AHBC(o ztq!ge-}>F}O0{Ql&&TbrJTI+$C39`+c{#&l75#sFl6x*rn`3fJBKIUv`rSLk+|b&t2)|1m}P=I^`Om;bCd z9DBC=v`Nr5)1J-uEWe#S=PjnP-^HqZij0fX&1t!lQnyaKw>9&Y=J6?Kg;cgr%dL0I zpPzi6E%;~VB^j?m{ZAFro2SW%z0dQGIzR1h<@^4F8vC`Xk1zJG-L&#!=B1zP*F8(a z>|9qhpW+MsHc$1gOS$5=C;tRq?yO#w?ZEw7B~##H?&hbF?|;q9Ys$QPIrpvZyPrm3 z57%tnzT%2ib@0=>E0>+z-xIXC=F7V5d|98>-?}-jVq#Ywr~s zn*P7*yGw8P{?EosvhQ_t$h`h$eE058wjjZY`&HFN1vi3;r4vge+7_}i{@D@75W7P9 z()HEiSMogEFZc!gR{VO4JHgkFE5Vz1{9%q0$3kvF2CE6s2)ksyM7?g~W20I9^?PR8 z7X05KvEWw!WTrQ-l{61T%1-EuU+}Xyy5#g@D?fYr`I{aa-8Rx!H`J^&ojz~Zrw3uP zqt&SfNmipZ90lQf*)%dDeef*9GDB!=$ksHUxwd|-WT=v z+SfyCHMZ;(z2n6tk}F&#d!O@?{^svTY;9-mRn7cY{%GE|Pi#$D)$baz!n59Q>Reaz zHF9atj&oU`L*$J!7k?A;eqNGy?Oy4|OYcv=Vg1qiOYc#=pVif+e + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::qp_stats Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::qp_stats, including all inherited members.

    + + + + +
    qp_stats() (defined in seastar::net::qp_stats)seastar::net::qp_statsinline
    rx (defined in seastar::net::qp_stats)seastar::net::qp_stats
    tx (defined in seastar::net::qp_stats)seastar::net::qp_stats
    + + + + diff --git a/master/structseastar_1_1net_1_1qp__stats.html b/master/structseastar_1_1net_1_1qp__stats.html new file mode 100644 index 000000000..6cffb60c2 --- /dev/null +++ b/master/structseastar_1_1net_1_1qp__stats.html @@ -0,0 +1,119 @@ + + + + + + + +Seastar: seastar::net::qp_stats Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::qp_stats Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +struct {
    +struct qp_stats_good good
     
    +   struct {
    +uint64_t no_mem
     
    +uint64_t total
     
    +uint64_t csum
     
       } bad
     
    rx
     
    +struct {
    +struct qp_stats_good good
     
    +uint64_t linearized
     
    tx
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1qp__stats__good-members.html b/master/structseastar_1_1net_1_1qp__stats__good-members.html new file mode 100644 index 000000000..1bc92a5ab --- /dev/null +++ b/master/structseastar_1_1net_1_1qp__stats__good-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::qp_stats_good Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::qp_stats_good, including all inherited members.

    + + + + + + + + + + +
    bytes (defined in seastar::net::qp_stats_good)seastar::net::qp_stats_good
    copy_bytes (defined in seastar::net::qp_stats_good)seastar::net::qp_stats_good
    copy_frags (defined in seastar::net::qp_stats_good)seastar::net::qp_stats_good
    last_bunch (defined in seastar::net::qp_stats_good)seastar::net::qp_stats_good
    nr_frags (defined in seastar::net::qp_stats_good)seastar::net::qp_stats_good
    packets (defined in seastar::net::qp_stats_good)seastar::net::qp_stats_good
    update_copy_stats(uint64_t nr_frags, uint64_t bytes)seastar::net::qp_stats_goodinline
    update_frags_stats(uint64_t nfrags, uint64_t nbytes)seastar::net::qp_stats_goodinline
    update_pkts_bunch(uint64_t count)seastar::net::qp_stats_goodinline
    + + + + diff --git a/master/structseastar_1_1net_1_1qp__stats__good.html b/master/structseastar_1_1net_1_1qp__stats__good.html new file mode 100644 index 000000000..dc5dbc6d3 --- /dev/null +++ b/master/structseastar_1_1net_1_1qp__stats__good.html @@ -0,0 +1,240 @@ + + + + + + + +Seastar: seastar::net::qp_stats_good Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::qp_stats_good Struct Reference
    +
    +
    + + + + + + + + +

    +Public Member Functions

    void update_pkts_bunch (uint64_t count)
     
    void update_copy_stats (uint64_t nr_frags, uint64_t bytes)
     
    void update_frags_stats (uint64_t nfrags, uint64_t nbytes)
     
    + + + + + + + + + + + + + +

    +Public Attributes

    +uint64_t bytes
     
    +uint64_t nr_frags
     
    +uint64_t copy_frags
     
    +uint64_t copy_bytes
     
    +uint64_t packets
     
    +uint64_t last_bunch
     
    +

    Member Function Documentation

    + +

    ◆ update_copy_stats()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    void seastar::net::qp_stats_good::update_copy_stats (uint64_t nr_frags,
    uint64_t bytes 
    )
    +
    +inline
    +
    +

    Increment the appropriate counters when a few fragments have been processed in a copy-way.

    +
    Parameters
    + + + +
    nr_fragsNumber of copied fragments
    bytesNumber of copied bytes
    +
    +
    + +
    +
    + +

    ◆ update_frags_stats()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    void seastar::net::qp_stats_good::update_frags_stats (uint64_t nfrags,
    uint64_t nbytes 
    )
    +
    +inline
    +
    +

    Increment total fragments and bytes statistics

    +
    Parameters
    + + + +
    nfragsNumber of processed fragments
    nbytesNumber of bytes in the processed fragments
    +
    +
    + +
    +
    + +

    ◆ update_pkts_bunch()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::net::qp_stats_good::update_pkts_bunch (uint64_t count)
    +
    +inline
    +
    +

    Update the packets bunch related statistics.

    +

    Update the last packets bunch size and the total packets counter.

    +
    Parameters
    + + +
    countNumber of packets in the last packets bunch.
    +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1tcp__hdr-members.html b/master/structseastar_1_1net_1_1tcp__hdr-members.html new file mode 100644 index 000000000..aca6428af --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__hdr-members.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::tcp_hdr Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::tcp_hdr, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + +
    ack (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    checksum (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    data_offset (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    dst_port (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    f_ack (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    f_fin (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    f_psh (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    f_rst (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    f_syn (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    f_urg (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    len (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdrstatic
    read(const char *p) (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdrinlinestatic
    rsvd1 (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    rsvd2 (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    seq (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    src_port (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    urgent (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    window (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdr
    write(char *p) const (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdrinline
    write_nbo_checksum(char *p, uint16_t checksum_in_network_byte_order) (defined in seastar::net::tcp_hdr)seastar::net::tcp_hdrinlinestatic
    + + + + diff --git a/master/structseastar_1_1net_1_1tcp__hdr.html b/master/structseastar_1_1net_1_1tcp__hdr.html new file mode 100644 index 000000000..76a96d705 --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__hdr.html @@ -0,0 +1,161 @@ + + + + + + + +Seastar: seastar::net::tcp_hdr Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    + +
    + + + + +

    +Public Member Functions

    +void write (char *p) const
     
    + + + + + +

    +Static Public Member Functions

    +static tcp_hdr read (const char *p)
     
    +static void write_nbo_checksum (char *p, uint16_t checksum_in_network_byte_order)
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +uint16_t src_port
     
    +uint16_t dst_port
     
    +tcp_seq seq
     
    +tcp_seq ack
     
    +uint8_t rsvd1: 4
     
    +uint8_t data_offset: 4
     
    +uint8_t f_fin: 1
     
    +uint8_t f_syn: 1
     
    +uint8_t f_rst: 1
     
    +uint8_t f_psh: 1
     
    +uint8_t f_ack: 1
     
    +uint8_t f_urg: 1
     
    +uint8_t rsvd2: 2
     
    +uint16_t window
     
    +uint16_t checksum
     
    +uint16_t urgent
     
    + + + +

    +Static Public Attributes

    +static constexpr size_t len = 20
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1tcp__option-members.html b/master/structseastar_1_1net_1_1tcp__option-members.html new file mode 100644 index 000000000..ab27a1371 --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__option-members.html @@ -0,0 +1,97 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::tcp_option Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::tcp_option, including all inherited members.

    + + + + + + + + + + + + + + + + +
    _local_mss (defined in seastar::net::tcp_option)seastar::net::tcp_option
    _local_win_scale (defined in seastar::net::tcp_option)seastar::net::tcp_option
    _mss_received (defined in seastar::net::tcp_option)seastar::net::tcp_option
    _remote_mss (defined in seastar::net::tcp_option)seastar::net::tcp_option
    _remote_win_scale (defined in seastar::net::tcp_option)seastar::net::tcp_option
    _sack_received (defined in seastar::net::tcp_option)seastar::net::tcp_option
    _timestamps_received (defined in seastar::net::tcp_option)seastar::net::tcp_option
    _win_scale_received (defined in seastar::net::tcp_option)seastar::net::tcp_option
    align (defined in seastar::net::tcp_option)seastar::net::tcp_optionstatic
    fill(void *h, const tcp_hdr *th, uint8_t option_size) (defined in seastar::net::tcp_option)seastar::net::tcp_option
    get_size(bool syn_on, bool ack_on) (defined in seastar::net::tcp_option)seastar::net::tcp_option
    option_kind enum name (defined in seastar::net::tcp_option)seastar::net::tcp_option
    option_len enum name (defined in seastar::net::tcp_option)seastar::net::tcp_option
    parse(uint8_t *beg, uint8_t *end) (defined in seastar::net::tcp_option)seastar::net::tcp_option
    write(char *p, option_kind kind, option_len len) (defined in seastar::net::tcp_option)seastar::net::tcp_optioninlinestatic
    + + + + diff --git a/master/structseastar_1_1net_1_1tcp__option.html b/master/structseastar_1_1net_1_1tcp__option.html new file mode 100644 index 000000000..e53a388d2 --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__option.html @@ -0,0 +1,182 @@ + + + + + + + +Seastar: seastar::net::tcp_option Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    + +
    + + + + + + + + + + + + + + +

    +Classes

    struct  eol
     
    struct  mss
     
    struct  nop
     
    struct  sack
     
    struct  timestamps
     
    struct  win_scale
     
    + + + + + +

    +Public Types

    enum class  option_kind : uint8_t {
    +  mss = 2 +, win_scale = 3 +, sack = 4 +, timestamps = 8 +,
    +  nop = 1 +, eol = 0 +
    + }
     
    enum class  option_len : uint8_t {
    +  mss = 4 +, win_scale = 3 +, sack = 2 +, timestamps = 10 +,
    +  nop = 1 +, eol = 1 +
    + }
     
    + + + + + + + +

    +Public Member Functions

    +void parse (uint8_t *beg, uint8_t *end)
     
    +uint8_t fill (void *h, const tcp_hdr *th, uint8_t option_size)
     
    +uint8_t get_size (bool syn_on, bool ack_on)
     
    + + + +

    +Static Public Member Functions

    +static void write (char *p, option_kind kind, option_len len)
     
    + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +bool _mss_received = false
     
    +bool _win_scale_received = false
     
    +bool _timestamps_received = false
     
    +bool _sack_received = false
     
    +uint16_t _remote_mss = 536
     
    +uint16_t _local_mss
     
    +uint8_t _remote_win_scale = 0
     
    +uint8_t _local_win_scale = 0
     
    + + + +

    +Static Public Attributes

    +static const uint8_t align = 4
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1tcp__option_1_1eol-members.html b/master/structseastar_1_1net_1_1tcp__option_1_1eol-members.html new file mode 100644 index 000000000..becbd719d --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__option_1_1eol-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::tcp_option::eol Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::tcp_option::eol, including all inherited members.

    + + + + +
    kind (defined in seastar::net::tcp_option::eol)seastar::net::tcp_option::eolstatic
    len (defined in seastar::net::tcp_option::eol)seastar::net::tcp_option::eolstatic
    write(char *p) const (defined in seastar::net::tcp_option::eol)seastar::net::tcp_option::eolinline
    + + + + diff --git a/master/structseastar_1_1net_1_1tcp__option_1_1eol.html b/master/structseastar_1_1net_1_1tcp__option_1_1eol.html new file mode 100644 index 000000000..887c466b0 --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__option_1_1eol.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: seastar::net::tcp_option::eol Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::tcp_option::eol Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +void write (char *p) const
     
    + + + + + +

    +Static Public Attributes

    +static constexpr option_kind kind = option_kind::eol
     
    +static constexpr option_len len = option_len::eol
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1tcp__option_1_1mss-members.html b/master/structseastar_1_1net_1_1tcp__option_1_1mss-members.html new file mode 100644 index 000000000..8c4584972 --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__option_1_1mss-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::tcp_option::mss Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::tcp_option::mss, including all inherited members.

    + + + + + + +
    kind (defined in seastar::net::tcp_option::mss)seastar::net::tcp_option::mssstatic
    len (defined in seastar::net::tcp_option::mss)seastar::net::tcp_option::mssstatic
    mss (defined in seastar::net::tcp_option::mss)seastar::net::tcp_option::mss
    read(const char *p) (defined in seastar::net::tcp_option::mss)seastar::net::tcp_option::mssinlinestatic
    write(char *p) const (defined in seastar::net::tcp_option::mss)seastar::net::tcp_option::mssinline
    + + + + diff --git a/master/structseastar_1_1net_1_1tcp__option_1_1mss.html b/master/structseastar_1_1net_1_1tcp__option_1_1mss.html new file mode 100644 index 000000000..7318802f6 --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__option_1_1mss.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: seastar::net::tcp_option::mss Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::tcp_option::mss Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +void write (char *p) const
     
    + + + +

    +Static Public Member Functions

    +static tcp_option::mss read (const char *p)
     
    + + + + + +

    +Static Public Attributes

    +static constexpr option_kind kind = option_kind::mss
     
    +static constexpr option_len len = option_len::mss
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1tcp__option_1_1nop-members.html b/master/structseastar_1_1net_1_1tcp__option_1_1nop-members.html new file mode 100644 index 000000000..c5192b086 --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__option_1_1nop-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::tcp_option::nop Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::tcp_option::nop, including all inherited members.

    + + + + +
    kind (defined in seastar::net::tcp_option::nop)seastar::net::tcp_option::nopstatic
    len (defined in seastar::net::tcp_option::nop)seastar::net::tcp_option::nopstatic
    write(char *p) const (defined in seastar::net::tcp_option::nop)seastar::net::tcp_option::nopinline
    + + + + diff --git a/master/structseastar_1_1net_1_1tcp__option_1_1nop.html b/master/structseastar_1_1net_1_1tcp__option_1_1nop.html new file mode 100644 index 000000000..e953d5d3d --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__option_1_1nop.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: seastar::net::tcp_option::nop Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::tcp_option::nop Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +void write (char *p) const
     
    + + + + + +

    +Static Public Attributes

    +static constexpr option_kind kind = option_kind::nop
     
    +static constexpr option_len len = option_len::nop
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1tcp__option_1_1sack-members.html b/master/structseastar_1_1net_1_1tcp__option_1_1sack-members.html new file mode 100644 index 000000000..7c067ecf4 --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__option_1_1sack-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::tcp_option::sack Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::tcp_option::sack, including all inherited members.

    + + + + + +
    kind (defined in seastar::net::tcp_option::sack)seastar::net::tcp_option::sackstatic
    len (defined in seastar::net::tcp_option::sack)seastar::net::tcp_option::sackstatic
    read(const char *p) (defined in seastar::net::tcp_option::sack)seastar::net::tcp_option::sackinlinestatic
    write(char *p) const (defined in seastar::net::tcp_option::sack)seastar::net::tcp_option::sackinline
    + + + + diff --git a/master/structseastar_1_1net_1_1tcp__option_1_1sack.html b/master/structseastar_1_1net_1_1tcp__option_1_1sack.html new file mode 100644 index 000000000..26b553fbf --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__option_1_1sack.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: seastar::net::tcp_option::sack Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::tcp_option::sack Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +void write (char *p) const
     
    + + + +

    +Static Public Member Functions

    +static tcp_option::sack read (const char *p)
     
    + + + + + +

    +Static Public Attributes

    +static constexpr option_kind kind = option_kind::sack
     
    +static constexpr option_len len = option_len::sack
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1tcp__option_1_1timestamps-members.html b/master/structseastar_1_1net_1_1tcp__option_1_1timestamps-members.html new file mode 100644 index 000000000..fb3a51445 --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__option_1_1timestamps-members.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::tcp_option::timestamps Member List
    +
    + + + + + diff --git a/master/structseastar_1_1net_1_1tcp__option_1_1timestamps.html b/master/structseastar_1_1net_1_1tcp__option_1_1timestamps.html new file mode 100644 index 000000000..fce957043 --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__option_1_1timestamps.html @@ -0,0 +1,119 @@ + + + + + + + +Seastar: seastar::net::tcp_option::timestamps Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::tcp_option::timestamps Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +void write (char *p) const
     
    + + + +

    +Static Public Member Functions

    +static tcp_option::timestamps read (const char *p)
     
    + + + + + +

    +Public Attributes

    +uint32_t t1
     
    +uint32_t t2
     
    + + + + + +

    +Static Public Attributes

    +static constexpr option_kind kind = option_kind::timestamps
     
    +static constexpr option_len len = option_len::timestamps
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1tcp__option_1_1win__scale-members.html b/master/structseastar_1_1net_1_1tcp__option_1_1win__scale-members.html new file mode 100644 index 000000000..b606668e4 --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__option_1_1win__scale-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::tcp_option::win_scale Member List
    +
    + + + + + diff --git a/master/structseastar_1_1net_1_1tcp__option_1_1win__scale.html b/master/structseastar_1_1net_1_1tcp__option_1_1win__scale.html new file mode 100644 index 000000000..7f53ee1b1 --- /dev/null +++ b/master/structseastar_1_1net_1_1tcp__option_1_1win__scale.html @@ -0,0 +1,116 @@ + + + + + + + +Seastar: seastar::net::tcp_option::win_scale Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::tcp_option::win_scale Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +void write (char *p) const
     
    + + + +

    +Static Public Member Functions

    +static tcp_option::win_scale read (const char *p)
     
    + + + +

    +Public Attributes

    +uint8_t shift
     
    + + + + + +

    +Static Public Attributes

    +static constexpr option_kind kind = option_kind::win_scale
     
    +static constexpr option_len len = option_len::win_scale
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1udp__channel__state-members.html b/master/structseastar_1_1net_1_1udp__channel__state-members.html new file mode 100644 index 000000000..3fa773515 --- /dev/null +++ b/master/structseastar_1_1net_1_1udp__channel__state-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::udp_channel_state Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::udp_channel_state, including all inherited members.

    + + + + + + +
    _queue (defined in seastar::net::udp_channel_state)seastar::net::udp_channel_state
    _user_queue_space (defined in seastar::net::udp_channel_state)seastar::net::udp_channel_state
    complete_send(size_t len) (defined in seastar::net::udp_channel_state)seastar::net::udp_channel_stateinline
    udp_channel_state(size_t queue_size) (defined in seastar::net::udp_channel_state)seastar::net::udp_channel_stateinline
    wait_for_send_buffer(size_t len) (defined in seastar::net::udp_channel_state)seastar::net::udp_channel_stateinline
    + + + + diff --git a/master/structseastar_1_1net_1_1udp__channel__state.html b/master/structseastar_1_1net_1_1udp__channel__state.html new file mode 100644 index 000000000..af21f8c2a --- /dev/null +++ b/master/structseastar_1_1net_1_1udp__channel__state.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: seastar::net::udp_channel_state Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::udp_channel_state Struct Reference
    +
    +
    + + + + + + + + +

    +Public Member Functions

    udp_channel_state (size_t queue_size)
     
    +future wait_for_send_buffer (size_t len)
     
    +void complete_send (size_t len)
     
    + + + + + +

    +Public Attributes

    +queue< datagram_queue
     
    +semaphore _user_queue_space = {212992}
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1udp__hdr-members.html b/master/structseastar_1_1net_1_1udp__hdr-members.html new file mode 100644 index 000000000..2da75f068 --- /dev/null +++ b/master/structseastar_1_1net_1_1udp__hdr-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::udp_hdr Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::udp_hdr, including all inherited members.

    + + + + + + +
    adjust_endianness(Adjuster a) (defined in seastar::net::udp_hdr)seastar::net::udp_hdrinline
    cksum (defined in seastar::net::udp_hdr)seastar::net::udp_hdr
    dst_port (defined in seastar::net::udp_hdr)seastar::net::udp_hdr
    len (defined in seastar::net::udp_hdr)seastar::net::udp_hdr
    src_port (defined in seastar::net::udp_hdr)seastar::net::udp_hdr
    + + + + diff --git a/master/structseastar_1_1net_1_1udp__hdr.html b/master/structseastar_1_1net_1_1udp__hdr.html new file mode 100644 index 000000000..a24ed161b --- /dev/null +++ b/master/structseastar_1_1net_1_1udp__hdr.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: seastar::net::udp_hdr Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::udp_hdr Struct Reference
    +
    +
    + + + + + +

    +Public Member Functions

    +template<typename Adjuster >
    auto adjust_endianness (Adjuster a)
     
    + + + + + + + + + +

    +Public Attributes

    +packed< uint16_t > src_port
     
    +packed< uint16_t > dst_port
     
    +packed< uint16_t > len
     
    +packed< uint16_t > cksum
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1virtio__options-members.html b/master/structseastar_1_1net_1_1virtio__options-members.html new file mode 100644 index 000000000..8e86724a7 --- /dev/null +++ b/master/structseastar_1_1net_1_1virtio__options-members.html @@ -0,0 +1,103 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::net::virtio_options Member List
    +
    +
    + +

    This is the complete list of members for seastar::net::virtio_options, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + +
    csum_offloadseastar::net::virtio_options
    describe(options_descriptor &descriptor) constseastar::program_options::option_group
    event_indexseastar::net::virtio_options
    mutate(options_mutator &mutator)seastar::program_options::option_group
    name() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    operator bool() constseastar::program_options::option_groupinline
    operator=(option_group &&)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    operator=(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(option_group *parent, std::string name)seastar::program_options::option_groupexplicit
    option_group(option_group *parent, std::string name, unused)seastar::program_options::option_groupexplicit
    option_group(option_group &&) (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    tsoseastar::net::virtio_options
    ufoseastar::net::virtio_options
    used() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    value_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    values() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    values() (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    virtio_ring_sizeseastar::net::virtio_options
    ~option_group()=default (defined in seastar::program_options::option_group)seastar::program_options::option_groupvirtual
    + + + + diff --git a/master/structseastar_1_1net_1_1virtio__options.html b/master/structseastar_1_1net_1_1virtio__options.html new file mode 100644 index 000000000..d93e62f41 --- /dev/null +++ b/master/structseastar_1_1net_1_1virtio__options.html @@ -0,0 +1,307 @@ + + + + + + + +Seastar: seastar::net::virtio_options Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::net::virtio_options Struct Reference
    +
    +
    +

    Detailed Description

    +

    Virtio configuration.

    +
    +

    #include <seastar/net/virtio.hh>

    +
    +Inheritance diagram for seastar::net::virtio_options:
    +
    +
    + + +seastar::program_options::option_group + +
    + + + + + + +

    +Public Types

    +using value_list_type = boost::intrusive::list< basic_value, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    +using option_group_list_type = boost::intrusive::list< option_group, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    + + + + + + + + + + + + + + + + +

    +Public Member Functions

    operator bool () const
     Does the option group has any values contained in it?
     
    +bool used () const
     
    +const std::string & name () const
     
    +const value_list_type & values () const
     
    +value_list_type & values ()
     
    void describe (options_descriptor &descriptor) const
     
    void mutate (options_mutator &mutator)
     
    + + + + + + + + + + + + + + + + +

    +Public Attributes

    program_options::value< std::string > event_index
     Enable event-index feature (on / off). More...
     
    program_options::value< std::string > csum_offload
     Enable checksum offload feature (on / off). More...
     
    program_options::value< std::string > tso
     Enable TCP segment offload feature (on / off). More...
     
    program_options::value< std::string > ufo
     Enable UDP fragmentation offload feature (on / off). More...
     
    program_options::value< unsigned > virtio_ring_size
     Virtio ring size (must be power-of-two). More...
     
    +

    Member Function Documentation

    + +

    ◆ describe()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::describe (options_descriptordescriptor) const
    +
    +inherited
    +
    +

    Describe the content of this option group to the visitor.

    +

    The content is visited in a depth-first manner:

      +
    • First the option groups itself is visited with options_descriptor::visit_group_start(). If this returns false the entire content of the group, including all its subgroups and values are skipped and options_descriptor::visit_group_end() is called immediately. Otherwise visiting the content of the group proceeds.
    • +
    • All the values contained therein are visited. For each value the following happens:
        +
      • First options_descriptor::visit_value_metadata() is called with generic metadata that all values have. If this return false the value is skipped, otherwise visiting the value proceeds.
      • +
      • Then the appropriate overload of options_descriptor::visit_value() is called, with a pointer to the default value of the respective value. The pointer is null if there is no default value.
      • +
      • For selection_value, options_descriptor::visit_selection_value() will be called instead of options_descriptor::visit_value(). After the value is visited, the option_group instance belonging to each candidate (if set) will be visited.
      • +
      +
    • +
    • All the nested option_group instances in the current group are visited.
    • +
    • Finally options_descriptor::visit_group_end() is called.
    • +
    + +
    +
    + +

    ◆ mutate()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::mutate (options_mutatormutator)
    +
    +inherited
    +
    +

    Mutate the content of this option group by the visitor.

    +

    The visiting algorithm is identical to that of describe(), with the following differences:

      +
    • options_mutator::visit_value() is allowed to mutate the value through the passed-in reference. It should return true if it did so and false otherwise.
    • +
    • When visiting a selection value, only the nested group belonging to the selected value is visited afterwards.
    • +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ csum_offload

    + +
    +
    + + + + +
    program_options::value<std::string> seastar::net::virtio_options::csum_offload
    +
    + +

    Enable checksum offload feature (on / off).

    +

    Default: on.

    + +
    +
    + +

    ◆ event_index

    + +
    +
    + + + + +
    program_options::value<std::string> seastar::net::virtio_options::event_index
    +
    + +

    Enable event-index feature (on / off).

    +

    Default: on.

    + +
    +
    + +

    ◆ tso

    + +
    +
    + + + + +
    program_options::value<std::string> seastar::net::virtio_options::tso
    +
    + +

    Enable TCP segment offload feature (on / off).

    +

    Default: on.

    + +
    +
    + +

    ◆ ufo

    + +
    +
    + + + + +
    program_options::value<std::string> seastar::net::virtio_options::ufo
    +
    + +

    Enable UDP fragmentation offload feature (on / off).

    +

    Default: on.

    + +
    +
    + +

    ◆ virtio_ring_size

    + +
    +
    + + + + +
    program_options::value<unsigned> seastar::net::virtio_options::virtio_ring_size
    +
    + +

    Virtio ring size (must be power-of-two).

    +

    Default: 256.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1net_1_1virtio__options.png b/master/structseastar_1_1net_1_1virtio__options.png new file mode 100644 index 0000000000000000000000000000000000000000..d3d2807b6e7bfb2f21e8ee0ffe31f8904bedca6a GIT binary patch literal 1027 zcmeAS@N?(olHy`uVBq!ia0vp^FM+s&gBeJgI@;&~DTx4|5ZC|z{{xvX-h3_XKQsZz z0^&~UuEqXANo8w*7AEm=v!s`;Ly3*N-c~n|NF>e_7_NHi5|f-g+U}cBL;(bzXO1$frI$d4cf7{}nxxK3Qr@C)5Gb_&=zI$f%>Fg;tw;4q34SutG z?sc7xx``#6npPbxo7UcTIi04vH~Vt-a*<#o?+I7>a^9zZdK>)acY@abIVP<^ce+jP z9iO8uFZMpqKkEFn*xlbV4Q9qq-TV3Cal2ca3XNZWYJR<>GVGq~EcU4~tKQ_Q-gPZk z{Pvh|81wlb)_FIbb4FZSJy6DMyC;>(~znNVR?WD8X7PaY?d7;7Xy# z-fv71lP5FXm_$6jvs}PQ!ilAU@yQZ~Z6JK5cT3{TTdC6L|DIfb-j>1cwYul+`diA! zRxkOSp81na{O+$Ey_+welDU4<^uyN~^W>vUGH{w*2~oAoB?eH5K2b;C(YA%Ax+@YX>`edw literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1pollable__fd__state_1_1speculation-members.html b/master/structseastar_1_1pollable__fd__state_1_1speculation-members.html new file mode 100644 index 000000000..2bb239367 --- /dev/null +++ b/master/structseastar_1_1pollable__fd__state_1_1speculation-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::pollable_fd_state::speculation Member List
    +
    +
    + +

    This is the complete list of members for seastar::pollable_fd_state::speculation, including all inherited members.

    + + + +
    events (defined in seastar::pollable_fd_state::speculation)seastar::pollable_fd_state::speculation
    speculation(int epoll_events_guessed=0) (defined in seastar::pollable_fd_state::speculation)seastar::pollable_fd_state::speculationinlineexplicit
    + + + + diff --git a/master/structseastar_1_1pollable__fd__state_1_1speculation.html b/master/structseastar_1_1pollable__fd__state_1_1speculation.html new file mode 100644 index 000000000..804c58fd6 --- /dev/null +++ b/master/structseastar_1_1pollable__fd__state_1_1speculation.html @@ -0,0 +1,99 @@ + + + + + + + +Seastar: seastar::pollable_fd_state::speculation Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::pollable_fd_state::speculation Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    speculation (int epoll_events_guessed=0)
     
    + + + +

    +Public Attributes

    +int events = 0
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1pollfn-members.html b/master/structseastar_1_1pollfn-members.html new file mode 100644 index 000000000..5bfbce577 --- /dev/null +++ b/master/structseastar_1_1pollfn-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::pollfn Member List
    +
    +
    + +

    This is the complete list of members for seastar::pollfn, including all inherited members.

    + + + + + + +
    exit_interrupt_mode()=0 (defined in seastar::pollfn)seastar::pollfnpure virtual
    poll()=0 (defined in seastar::pollfn)seastar::pollfnpure virtual
    pure_poll()=0 (defined in seastar::pollfn)seastar::pollfnpure virtual
    try_enter_interrupt_mode()=0 (defined in seastar::pollfn)seastar::pollfnpure virtual
    ~pollfn() (defined in seastar::pollfn)seastar::pollfninlinevirtual
    + + + + diff --git a/master/structseastar_1_1pollfn.html b/master/structseastar_1_1pollfn.html new file mode 100644 index 000000000..60df5b763 --- /dev/null +++ b/master/structseastar_1_1pollfn.html @@ -0,0 +1,110 @@ + + + + + + + +Seastar: seastar::pollfn Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::pollfn Struct Referenceabstract
    +
    +
    +
    +Inheritance diagram for seastar::pollfn:
    +
    +
    + + +seastar::simple_pollfn< Passive > + +
    + + + + + + + + + + +

    +Public Member Functions

    +virtual bool poll ()=0
     
    +virtual bool pure_poll ()=0
     
    +virtual bool try_enter_interrupt_mode ()=0
     
    +virtual void exit_interrupt_mode ()=0
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1pollfn.png b/master/structseastar_1_1pollfn.png new file mode 100644 index 0000000000000000000000000000000000000000..661314aa2c32eb2273dc6ede991a8d9af9517ef2 GIT binary patch literal 694 zcmeAS@N?(olHy`uVBq!ia0vp^CxAGBgBeI>Z$8xoq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0Ts>VJLn;{G&VAeWT7iePz4^-b`X{rW zG5aKJetFidNIBeADS*BDK-vFEL0oDY7BDlp6w0pb$*6P>l{leb^JQpm9GB;$$u zECrG&mgmalw;%qs<81fjmnS98iF7}Fn!S@Nh<~f(tf#CwKi|FeEsN!SVst_*ck=hL zyqG@@dp0xu2&tbO6X2%^Pl1t$p}MWKsNtV$(}^=0Cr(DK=a8<)vL^h2^oQ z{j(V7T&+FF#PXonmW}0s94kkIItcImzc9$_57lIw)*0)cvVNH2d!FDp) zVNo{YkDvyI3KH;~&~uje*M+i_|pTFsC-M02r!1~R155!flU%K+f&||WiTK?*4VHeJ& zm6RD*zB6axmlv$OK%^ly|Gp0<)pe-|NsBoui!cVh24am8q+6FU9wx$ sT*(s{|C640G6ESUjZfx$X8ywO>!_*qbHai9z(mI2>FVdQ&MBb@04niBM*si- literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1prefetcher-members.html b/master/structseastar_1_1prefetcher-members.html new file mode 100644 index 000000000..f594487ec --- /dev/null +++ b/master/structseastar_1_1prefetcher-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::prefetcher< N, RW, LOC > Member List
    +
    +
    + +

    This is the complete list of members for seastar::prefetcher< N, RW, LOC >, including all inherited members.

    + + +
    prefetcher(uintptr_t ptr) (defined in seastar::prefetcher< N, RW, LOC >)seastar::prefetcher< N, RW, LOC >inline
    + + + + diff --git a/master/structseastar_1_1prefetcher.html b/master/structseastar_1_1prefetcher.html new file mode 100644 index 000000000..19fe1f0d3 --- /dev/null +++ b/master/structseastar_1_1prefetcher.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::prefetcher< N, RW, LOC > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::prefetcher< N, RW, LOC > Struct Template Reference
    +
    +
    + + + + +

    +Public Member Functions

    prefetcher (uintptr_t ptr)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1prefetcher_3_010_00_01RW_00_01LOC_01_4-members.html b/master/structseastar_1_1prefetcher_3_010_00_01RW_00_01LOC_01_4-members.html new file mode 100644 index 000000000..b9dd6844e --- /dev/null +++ b/master/structseastar_1_1prefetcher_3_010_00_01RW_00_01LOC_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::prefetcher< 0, RW, LOC > Member List
    +
    +
    + +

    This is the complete list of members for seastar::prefetcher< 0, RW, LOC >, including all inherited members.

    + + +
    prefetcher(uintptr_t ptr) (defined in seastar::prefetcher< 0, RW, LOC >)seastar::prefetcher< 0, RW, LOC >inline
    + + + + diff --git a/master/structseastar_1_1prefetcher_3_010_00_01RW_00_01LOC_01_4.html b/master/structseastar_1_1prefetcher_3_010_00_01RW_00_01LOC_01_4.html new file mode 100644 index 000000000..41175b4de --- /dev/null +++ b/master/structseastar_1_1prefetcher_3_010_00_01RW_00_01LOC_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::prefetcher< 0, RW, LOC > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::prefetcher< 0, RW, LOC > Struct Template Reference
    +
    +
    + + + + +

    +Public Member Functions

    prefetcher (uintptr_t ptr)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1prometheus_1_1config-members.html b/master/structseastar_1_1prometheus_1_1config-members.html new file mode 100644 index 000000000..b72274563 --- /dev/null +++ b/master/structseastar_1_1prometheus_1_1config-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::prometheus::config Member List
    +
    + + + + + diff --git a/master/structseastar_1_1prometheus_1_1config.html b/master/structseastar_1_1prometheus_1_1config.html new file mode 100644 index 000000000..786d6c0c8 --- /dev/null +++ b/master/structseastar_1_1prometheus_1_1config.html @@ -0,0 +1,191 @@ + + + + + + + +Seastar: seastar::prometheus::config Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::prometheus::config Struct Reference
    +
    +
    +

    Detailed Description

    +

    Holds prometheus related configuration

    +
    +

    #include <seastar/core/prometheus.hh>

    + + + + + + + + + + + + + + + + +

    +Public Attributes

    +sstring metric_help
     Default help message for the returned metrics.
     
    +sstring hostname
     hostname is deprecated, use label instead
     
    +std::optional< metrics::label_instancelabel
     A label that will be added to all metrics, we advice not to use it and set it on the prometheus server.
     
    +sstring prefix = "seastar"
     a prefix that will be added to metric names
     
    +bool allow_protobuf = false
     
    +

    Member Data Documentation

    + +

    ◆ allow_protobuf

    + +
    +
    + + + + +
    bool seastar::prometheus::config::allow_protobuf = false
    +
    + +
    +
    + +

    ◆ hostname

    + +
    +
    + + + + +
    sstring seastar::prometheus::config::hostname
    +
    + +

    hostname is deprecated, use label instead

    + +
    +
    + +

    ◆ label

    + +
    +
    + + + + +
    std::optional<metrics::label_instance> seastar::prometheus::config::label
    +
    + +

    A label that will be added to all metrics, we advice not to use it and set it on the prometheus server.

    + +
    +
    + +

    ◆ metric_help

    + +
    +
    + + + + +
    sstring seastar::prometheus::config::metric_help
    +
    + +

    Default help message for the returned metrics.

    + +
    +
    + +

    ◆ prefix

    + +
    +
    + + + + +
    sstring seastar::prometheus::config::prefix = "seastar"
    +
    + +

    a prefix that will be added to metric names

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1promise__expiry-members.html b/master/structseastar_1_1promise__expiry-members.html new file mode 100644 index 000000000..7bd7d5928 --- /dev/null +++ b/master/structseastar_1_1promise__expiry-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::promise_expiry< T > Member List
    +
    +
    + +

    This is the complete list of members for seastar::promise_expiry< T >, including all inherited members.

    + + +
    operator()(promise< T... > &pr) noexcept (defined in seastar::promise_expiry< T >)seastar::promise_expiry< T >inline
    + + + + diff --git a/master/structseastar_1_1promise__expiry.html b/master/structseastar_1_1promise__expiry.html new file mode 100644 index 000000000..2e21cce8a --- /dev/null +++ b/master/structseastar_1_1promise__expiry.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::promise_expiry< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::promise_expiry< T > Struct Template Reference
    +
    +
    + + + + +

    +Public Member Functions

    +void operator() (promise< T... > &pr) noexcept
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1reactor__options-members.html b/master/structseastar_1_1reactor__options-members.html new file mode 100644 index 000000000..c51a18e42 --- /dev/null +++ b/master/structseastar_1_1reactor__options-members.html @@ -0,0 +1,122 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::reactor_options Member List
    +
    +
    + +

    This is the complete list of members for seastar::reactor_options, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    abort_on_seastar_bad_allocseastar::reactor_options
    aio_fsyncseastar::reactor_options
    blocked_reactor_notify_msseastar::reactor_options
    blocked_reactor_report_format_onelineseastar::reactor_options
    blocked_reactor_reports_per_minuteseastar::reactor_options
    describe(options_descriptor &descriptor) constseastar::program_options::option_group
    dump_memory_diagnostics_on_alloc_failure_kindseastar::reactor_options
    force_aio_syscallsseastar::reactor_options
    heapprofseastar::reactor_options
    idle_poll_time_usseastar::reactor_options
    io_flow_ratio_thresholdseastar::reactor_options
    io_latency_goal_msseastar::reactor_options
    kernel_page_cacheseastar::reactor_options
    linux_aio_nowaitseastar::reactor_options
    max_networking_io_control_blocksseastar::reactor_options
    max_task_backlogseastar::reactor_options
    mutate(options_mutator &mutator)seastar::program_options::option_group
    name() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    network_stackseastar::reactor_options
    no_handle_interruptseastar::reactor_options
    operator bool() constseastar::program_options::option_groupinline
    operator=(option_group &&)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    operator=(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(option_group *parent, std::string name)seastar::program_options::option_groupexplicit
    option_group(option_group *parent, std::string name, unused)seastar::program_options::option_groupexplicit
    option_group(option_group &&) (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    overprovisionedseastar::reactor_options
    poll_aioseastar::reactor_options
    poll_modeseastar::reactor_options
    reactor_backendseastar::reactor_options
    relaxed_dmaseastar::reactor_options
    task_quota_msseastar::reactor_options
    unsafe_bypass_fsyncseastar::reactor_options
    used() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    value_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    values() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    values() (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    ~option_group()=default (defined in seastar::program_options::option_group)seastar::program_options::option_groupvirtual
    + + + + diff --git a/master/structseastar_1_1reactor__options.html b/master/structseastar_1_1reactor__options.html new file mode 100644 index 000000000..b6a79b250 --- /dev/null +++ b/master/structseastar_1_1reactor__options.html @@ -0,0 +1,621 @@ + + + + + + + +Seastar: seastar::reactor_options Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::reactor_options Struct Reference
    +
    +
    +

    Detailed Description

    +

    Configuration for the reactor.

    +
    +

    #include <seastar/core/reactor_config.hh>

    +
    +Inheritance diagram for seastar::reactor_options:
    +
    +
    + + +seastar::program_options::option_group + +
    + + + + + + +

    +Public Types

    +using value_list_type = boost::intrusive::list< basic_value, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    +using option_group_list_type = boost::intrusive::list< option_group, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    + + + + + + + + + + + + + + + + +

    +Public Member Functions

    operator bool () const
     Does the option group has any values contained in it?
     
    +bool used () const
     
    +const std::string & name () const
     
    +const value_list_type & values () const
     
    +value_list_type & values ()
     
    void describe (options_descriptor &descriptor) const
     
    void mutate (options_mutator &mutator)
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    program_options::selection_value< network_stack_factory > network_stack
     Select network stack to use. More...
     
    +program_options::value poll_mode
     Poll continuously (100% cpu use).
     
    program_options::value< unsigned > idle_poll_time_us
     Idle polling time in microseconds. More...
     
    program_options::value< bool > poll_aio
     Busy-poll for disk I/O. More...
     
    program_options::value< double > task_quota_ms
     Max time (ms) between polls. More...
     
    program_options::value< double > io_latency_goal_ms
     Max time (ms) IO operations must take. More...
     
    program_options::value< double > io_flow_ratio_threshold
     
    program_options::value< unsigned > max_task_backlog
     Maximum number of task backlog to allow. More...
     
    program_options::value< unsigned > blocked_reactor_notify_ms
     Threshold in milliseconds over which the reactor is considered blocked if no progress is made. More...
     
    program_options::value< unsigned > blocked_reactor_reports_per_minute
     Maximum number of backtraces reported by stall detector per minute. More...
     
    program_options::value< bool > blocked_reactor_report_format_oneline
     Print a simplified backtrace on a single line. More...
     
    +program_options::value relaxed_dma
     Allow using buffered I/O if DMA is not available (reduces performance).
     
    +program_options::value< bool > linux_aio_nowait
     Use the Linux NOWAIT AIO feature, which reduces reactor stalls due to aio (autodetected).
     
    program_options::value< bool > unsafe_bypass_fsync
     Bypass fsync(), may result in data loss. More...
     
    program_options::value< bool > kernel_page_cache
     Use the kernel page cache. More...
     
    program_options::value overprovisioned
     Run in an overprovisioned environment (such as docker or a laptop). More...
     
    +program_options::value abort_on_seastar_bad_alloc
     Abort when seastar allocator cannot allocate memory.
     
    program_options::value< bool > force_aio_syscalls
     Force io_getevents(2) to issue a system call, instead of bypassing the kernel when possible. More...
     
    program_options::value< memory::alloc_failure_kinddump_memory_diagnostics_on_alloc_failure_kind
     Dump diagnostics of the seastar allocator state on allocation failure. More...
     
    program_options::selection_value< reactor_backend_selector > reactor_backend
     Internal reactor implementation. More...
     
    program_options::value< bool > aio_fsync
     Use Linux aio for fsync() calls. More...
     
    program_options::value< unsigned > max_networking_io_control_blocks
     Maximum number of I/O control blocks (IOCBs) to allocate per shard. More...
     
    program_options::value< unsigned > heapprof
     Enable seastar heap profiling. More...
     
    +program_options::value no_handle_interrupt
     Ignore SIGINT (for gdb).
     
    +

    Member Function Documentation

    + +

    ◆ describe()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::describe (options_descriptordescriptor) const
    +
    +inherited
    +
    +

    Describe the content of this option group to the visitor.

    +

    The content is visited in a depth-first manner:

      +
    • First the option groups itself is visited with options_descriptor::visit_group_start(). If this returns false the entire content of the group, including all its subgroups and values are skipped and options_descriptor::visit_group_end() is called immediately. Otherwise visiting the content of the group proceeds.
    • +
    • All the values contained therein are visited. For each value the following happens:
        +
      • First options_descriptor::visit_value_metadata() is called with generic metadata that all values have. If this return false the value is skipped, otherwise visiting the value proceeds.
      • +
      • Then the appropriate overload of options_descriptor::visit_value() is called, with a pointer to the default value of the respective value. The pointer is null if there is no default value.
      • +
      • For selection_value, options_descriptor::visit_selection_value() will be called instead of options_descriptor::visit_value(). After the value is visited, the option_group instance belonging to each candidate (if set) will be visited.
      • +
      +
    • +
    • All the nested option_group instances in the current group are visited.
    • +
    • Finally options_descriptor::visit_group_end() is called.
    • +
    + +
    +
    + +

    ◆ mutate()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::mutate (options_mutatormutator)
    +
    +inherited
    +
    +

    Mutate the content of this option group by the visitor.

    +

    The visiting algorithm is identical to that of describe(), with the following differences:

      +
    • options_mutator::visit_value() is allowed to mutate the value through the passed-in reference. It should return true if it did so and false otherwise.
    • +
    • When visiting a selection value, only the nested group belonging to the selected value is visited afterwards.
    • +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ aio_fsync

    + +
    +
    + + + + +
    program_options::value<bool> seastar::reactor_options::aio_fsync
    +
    + +

    Use Linux aio for fsync() calls.

    +

    This reduces latency. Requires Linux 4.18 or later.

    + +
    +
    + +

    ◆ blocked_reactor_notify_ms

    + +
    +
    + + + + +
    program_options::value<unsigned> seastar::reactor_options::blocked_reactor_notify_ms
    +
    + +

    Threshold in milliseconds over which the reactor is considered blocked if no progress is made.

    +

    Default: 25.

    + +
    +
    + +

    ◆ blocked_reactor_report_format_oneline

    + +
    +
    + + + + +
    program_options::value<bool> seastar::reactor_options::blocked_reactor_report_format_oneline
    +
    + +

    Print a simplified backtrace on a single line.

    +

    Default: true.

    + +
    +
    + +

    ◆ blocked_reactor_reports_per_minute

    + +
    +
    + + + + +
    program_options::value<unsigned> seastar::reactor_options::blocked_reactor_reports_per_minute
    +
    + +

    Maximum number of backtraces reported by stall detector per minute.

    +

    Default: 5.

    + +
    +
    + +

    ◆ dump_memory_diagnostics_on_alloc_failure_kind

    + +
    +
    + + + + +
    program_options::value<memory::alloc_failure_kind> seastar::reactor_options::dump_memory_diagnostics_on_alloc_failure_kind
    +
    + +

    Dump diagnostics of the seastar allocator state on allocation failure.

    +

    See memory::alloc_failure_kind for allowed values. The diagnostics will be written to the seastar_memory logger, with error level. Default: memory::alloc_failure_kind::critical.

    Note
    Even if the seastar_memory logger is set to debug or trace level, the diagnostics will be logged irrespective of this setting.
    + +
    +
    + +

    ◆ force_aio_syscalls

    + +
    +
    + + + + +
    program_options::value<bool> seastar::reactor_options::force_aio_syscalls
    +
    + +

    Force io_getevents(2) to issue a system call, instead of bypassing the kernel when possible.

    +

    This makes strace output more useful, but slows down the application. Default: false.

    + +
    +
    + +

    ◆ heapprof

    + +
    +
    + + + + +
    program_options::value<unsigned> seastar::reactor_options::heapprof
    +
    + +

    Enable seastar heap profiling.

    +

    Allocations will be sampled every N bytes on average. Zero means off.

    +

    Default: 0

    +
    Note
    Unused when seastar was compiled without heap profiling support.
    + +
    +
    + +

    ◆ idle_poll_time_us

    + +
    +
    + + + + +
    program_options::value<unsigned> seastar::reactor_options::idle_poll_time_us
    +
    + +

    Idle polling time in microseconds.

    +

    Reduce for overprovisioned environments or laptops.

    + +
    +
    + +

    ◆ io_flow_ratio_threshold

    + +
    +
    + + + + +
    program_options::value<double> seastar::reactor_options::io_flow_ratio_threshold
    +
    +

    \bried Dispatch rate to completion rate ratio threshold

    +

    Describes the worst ratio at which seastar reactor is allowed to delay IO requests completion. If exceeded, the scheduler will consider it's disk that's the reason for completion slow-down and will scale down

    +

    Default: 1.1

    + +
    +
    + +

    ◆ io_latency_goal_ms

    + +
    +
    + + + + +
    program_options::value<double> seastar::reactor_options::io_latency_goal_ms
    +
    + +

    Max time (ms) IO operations must take.

    +

    Default: 1.5 * task_quota_ms value

    + +
    +
    + +

    ◆ kernel_page_cache

    + +
    +
    + + + + +
    program_options::value<bool> seastar::reactor_options::kernel_page_cache
    +
    + +

    Use the kernel page cache.

    +

    This disables DMA (O_DIRECT). Useful for short-lived functional tests with a small data set. Default: false.

    + +
    +
    + +

    ◆ max_networking_io_control_blocks

    + +
    +
    + + + + +
    program_options::value<unsigned> seastar::reactor_options::max_networking_io_control_blocks
    +
    + +

    Maximum number of I/O control blocks (IOCBs) to allocate per shard.

    +

    This translates to the number of sockets supported per shard. Requires tuning /proc/sys/fs/aio-max-nr. Only valid for the linux-aio reactor backend (see reactor_backend).

    +

    Default: 10000.

    + +
    +
    + +

    ◆ max_task_backlog

    + +
    +
    + + + + +
    program_options::value<unsigned> seastar::reactor_options::max_task_backlog
    +
    + +

    Maximum number of task backlog to allow.

    +

    When the number of tasks grow above this, we stop polling (e.g. I/O) until it goes back below the limit. Default: 1000.

    + +
    +
    + +

    ◆ network_stack

    + +
    +
    + + + + +
    program_options::selection_value<network_stack_factory> seastar::reactor_options::network_stack
    +
    + +

    Select network stack to use.

    +

    Each network stack has it corresponding program_options::option_group to further tune it. The available stacks are:

    + +
    +
    + +

    ◆ overprovisioned

    + +
    +
    + + + + +
    program_options::value seastar::reactor_options::overprovisioned
    +
    + +

    Run in an overprovisioned environment (such as docker or a laptop).

    +

    Equivalent to:

    + +
    +
    + +

    ◆ poll_aio

    + +
    +
    + + + + +
    program_options::value<bool> seastar::reactor_options::poll_aio
    +
    + +

    Busy-poll for disk I/O.

    +

    Reduces latency and increases throughput.

    + +
    +
    + +

    ◆ reactor_backend

    + +
    +
    + + + + +
    program_options::selection_value<reactor_backend_selector> seastar::reactor_options::reactor_backend
    +
    + +

    Internal reactor implementation.

    +

    Available backends:

      +
    • linux-aio
    • +
    • epoll
    • +
    • io_uring
    • +
    +

    Default: linux-aio (if available).

    + +
    +
    + +

    ◆ task_quota_ms

    + +
    +
    + + + + +
    program_options::value<double> seastar::reactor_options::task_quota_ms
    +
    + +

    Max time (ms) between polls.

    +

    Default: 0.5.

    + +
    +
    + +

    ◆ unsafe_bypass_fsync

    + +
    +
    + + + + +
    program_options::value<bool> seastar::reactor_options::unsafe_bypass_fsync
    +
    + +

    Bypass fsync(), may result in data loss.

    +

    Use for testing on consumer drives. Default: false.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1reactor__options.png b/master/structseastar_1_1reactor__options.png new file mode 100644 index 0000000000000000000000000000000000000000..608d629799c5284de3c20036f75777709c3e4dfc GIT binary patch literal 1012 zcmeAS@N?(olHy`uVBq!ia0vp^FM+s&gBeJgI@;&~DTx4|5ZC|z{{xvX-h3_XKQsZz z0^8|-FtYQ`(xz{ zzg?Hjy?({$+1!4<|Ekq@@nA!X4>Q6txvSYTYr?XPL^j)3obkOJytlJt^4`-cX56g^ z@xA?JuWog@$MGdTn@>OJpM33RG{c*_2Wl_bPuv^+{-xc^_3J&d>)wT4n=v)?ZST+6 zEBB_Y$n^{jtzZ34W$vnT{iRR0wy(;P{yB5is#}vL!-z{BQcfJU91mVsF_bLK^N{b4 z3)rnF>uBxxw*5-BeuJr{W`i#A_&}{xTjC2R9wjB&6P~UvIVVBHOO{Ll!JW>J4~bvf z_e@tQ=#~BCu8uiZmM5xQGSC%WmG*Mo;~n>Jcu#xsH^=z$owJ8y&vu_SIhB(wk-j(h z&Fs0;bvo)Mmhfp>b+mkn+}1hmYE;$rWtq!Gf{nZmd_VnQN?qu;K6m-s8K;je_k1oNqkeYtC%sEHE1m?TzK^`* zTOyv+|IU2kyxq$yd2bxH@|1G)W-1Z?47(PUN=wv1{({7k57@-u-@R4X@|w?=e1S>(_c-Pwg+? z*Isf~T5#h0tABj>%kvzxls;{LvP4Mp)~3qwZCeS; zTb8ZzLF@N2Tzj&F0jQ8@{9Us}V3z>n0%lm0ZB^a7KjEK6z_Gls+;|c zzwn~Y-O@Q?^LB0hzVUaGla~|<(z=e=OTk=JU8fmcd>twe_5BXa?6{W zHyHF@_+AnTD4c%DBHrxM6?1*{yF0G0-;l+i_ww%>+0UBWE>7!ReS!NuzvupGd%x~n z!u;3pOV=aeOZsW=JF9oi-h2FeiMNzO{kHwg7VFKnmUHT?pY~Pr%DtV{rEacs*Ji!H zzFGW1+Sb0;;uHN`wdYPt3{t57rO2A0sm{7V6^NHU|8ChLV0FP>Fmq=?jr&t!U>0TY MboFyt=akR{0Foc_8~^|S literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1resource_1_1configuration-members.html b/master/structseastar_1_1resource_1_1configuration-members.html new file mode 100644 index 000000000..1958717d0 --- /dev/null +++ b/master/structseastar_1_1resource_1_1configuration-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::resource::configuration Member List
    +
    + + + + + diff --git a/master/structseastar_1_1resource_1_1configuration.html b/master/structseastar_1_1resource_1_1configuration.html new file mode 100644 index 000000000..58002cc54 --- /dev/null +++ b/master/structseastar_1_1resource_1_1configuration.html @@ -0,0 +1,243 @@ + + + + + + + +Seastar: seastar::resource::configuration Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::resource::configuration Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +optional< size_t > total_memory
     
    +optional< size_t > reserve_memory
     
    +size_t reserve_additional_memory_per_shard
     
    +size_t cpus
     
    +cpuset cpu_set
     
    +bool assign_orphan_cpus = false
     
    +std::vector< dev_t > devices
     
    +unsigned num_io_groups
     
    +hwloc::internal::topology_holder topology
     
    +

    Member Data Documentation

    + +

    ◆ assign_orphan_cpus

    + +
    +
    + + + + +
    bool seastar::resource::configuration::assign_orphan_cpus = false
    +
    + +
    +
    + +

    ◆ cpu_set

    + +
    +
    + + + + +
    cpuset seastar::resource::configuration::cpu_set
    +
    + +
    +
    + +

    ◆ cpus

    + +
    +
    + + + + +
    size_t seastar::resource::configuration::cpus
    +
    + +
    +
    + +

    ◆ devices

    + +
    +
    + + + + +
    std::vector<dev_t> seastar::resource::configuration::devices
    +
    + +
    +
    + +

    ◆ num_io_groups

    + +
    +
    + + + + +
    unsigned seastar::resource::configuration::num_io_groups
    +
    + +
    +
    + +

    ◆ reserve_additional_memory_per_shard

    + +
    +
    + + + + +
    size_t seastar::resource::configuration::reserve_additional_memory_per_shard
    +
    + +
    +
    + +

    ◆ reserve_memory

    + +
    +
    + + + + +
    optional<size_t> seastar::resource::configuration::reserve_memory
    +
    + +
    +
    + +

    ◆ topology

    + +
    +
    + + + + +
    hwloc::internal::topology_holder seastar::resource::configuration::topology
    +
    + +
    +
    + +

    ◆ total_memory

    + +
    +
    + + + + +
    optional<size_t> seastar::resource::configuration::total_memory
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1resource_1_1cpu-members.html b/master/structseastar_1_1resource_1_1cpu-members.html new file mode 100644 index 000000000..62c3c3011 --- /dev/null +++ b/master/structseastar_1_1resource_1_1cpu-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::resource::cpu Member List
    +
    +
    + +

    This is the complete list of members for seastar::resource::cpu, including all inherited members.

    + + + +
    cpu_id (defined in seastar::resource::cpu)seastar::resource::cpu
    mem (defined in seastar::resource::cpu)seastar::resource::cpu
    + + + + diff --git a/master/structseastar_1_1resource_1_1cpu.html b/master/structseastar_1_1resource_1_1cpu.html new file mode 100644 index 000000000..e00e216c7 --- /dev/null +++ b/master/structseastar_1_1resource_1_1cpu.html @@ -0,0 +1,124 @@ + + + + + + + +Seastar: seastar::resource::cpu Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::resource::cpu Struct Reference
    +
    +
    + + + + + + +

    +Public Attributes

    +unsigned cpu_id
     
    +std::vector< memorymem
     
    +

    Member Data Documentation

    + +

    ◆ cpu_id

    + +
    +
    + + + + +
    unsigned seastar::resource::cpu::cpu_id
    +
    + +
    +
    + +

    ◆ mem

    + +
    +
    + + + + +
    std::vector<memory> seastar::resource::cpu::mem
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1resource_1_1hwloc_1_1internal_1_1topology__holder.html b/master/structseastar_1_1resource_1_1hwloc_1_1internal_1_1topology__holder.html new file mode 100644 index 000000000..9e26ce373 --- /dev/null +++ b/master/structseastar_1_1resource_1_1hwloc_1_1internal_1_1topology__holder.html @@ -0,0 +1,82 @@ + + + + + + + +Seastar: seastar::resource::hwloc::internal::topology_holder Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::resource::hwloc::internal::topology_holder Struct Reference
    +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1resource_1_1io__queue__topology-members.html b/master/structseastar_1_1resource_1_1io__queue__topology-members.html new file mode 100644 index 000000000..04d5a6bfb --- /dev/null +++ b/master/structseastar_1_1resource_1_1io__queue__topology-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::resource::io_queue_topology Member List
    +
    + + + + + diff --git a/master/structseastar_1_1resource_1_1io__queue__topology.html b/master/structseastar_1_1resource_1_1io__queue__topology.html new file mode 100644 index 000000000..0e041c99a --- /dev/null +++ b/master/structseastar_1_1resource_1_1io__queue__topology.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar::resource::io_queue_topology Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::resource::io_queue_topology Struct Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    io_queue_topology (const io_queue_topology &)=delete
     
    io_queue_topology (io_queue_topology &&)
     
    + + + + + + + + + + + +

    +Public Attributes

    +std::vector< std::unique_ptr< io_queue > > queues
     
    +std::vector< unsigned > shard_to_group
     
    +std::vector< unsigned > shards_in_group
     
    +std::vector< std::shared_ptr< io_group > > groups
     
    +util::spinlock lock
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1resource_1_1memory-members.html b/master/structseastar_1_1resource_1_1memory-members.html new file mode 100644 index 000000000..fa3603dc4 --- /dev/null +++ b/master/structseastar_1_1resource_1_1memory-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::resource::memory Member List
    +
    +
    + +

    This is the complete list of members for seastar::resource::memory, including all inherited members.

    + + + +
    bytes (defined in seastar::resource::memory)seastar::resource::memory
    nodeid (defined in seastar::resource::memory)seastar::resource::memory
    + + + + diff --git a/master/structseastar_1_1resource_1_1memory.html b/master/structseastar_1_1resource_1_1memory.html new file mode 100644 index 000000000..76b81f557 --- /dev/null +++ b/master/structseastar_1_1resource_1_1memory.html @@ -0,0 +1,124 @@ + + + + + + + +Seastar: seastar::resource::memory Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::resource::memory Struct Reference
    +
    +
    + + + + + + +

    +Public Attributes

    +size_t bytes
     
    +unsigned nodeid
     
    +

    Member Data Documentation

    + +

    ◆ bytes

    + +
    +
    + + + + +
    size_t seastar::resource::memory::bytes
    +
    + +
    +
    + +

    ◆ nodeid

    + +
    +
    + + + + +
    unsigned seastar::resource::memory::nodeid
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1resource_1_1resources-members.html b/master/structseastar_1_1resource_1_1resources-members.html new file mode 100644 index 000000000..79ce539d8 --- /dev/null +++ b/master/structseastar_1_1resource_1_1resources-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::resource::resources Member List
    +
    +
    + +

    This is the complete list of members for seastar::resource::resources, including all inherited members.

    + + + + +
    cpus (defined in seastar::resource::resources)seastar::resource::resources
    ioq_topology (defined in seastar::resource::resources)seastar::resource::resources
    numa_node_id_to_cpuset (defined in seastar::resource::resources)seastar::resource::resources
    + + + + diff --git a/master/structseastar_1_1resource_1_1resources.html b/master/structseastar_1_1resource_1_1resources.html new file mode 100644 index 000000000..6cba1cca0 --- /dev/null +++ b/master/structseastar_1_1resource_1_1resources.html @@ -0,0 +1,141 @@ + + + + + + + +Seastar: seastar::resource::resources Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::resource::resources Struct Reference
    +
    +
    + + + + + + + + +

    +Public Attributes

    +std::vector< cpucpus
     
    +std::unordered_map< dev_t, io_queue_topologyioq_topology
     
    +std::unordered_map< unsigned, cpuset > numa_node_id_to_cpuset
     
    +

    Member Data Documentation

    + +

    ◆ cpus

    + +
    +
    + + + + +
    std::vector<cpu> seastar::resource::resources::cpus
    +
    + +
    +
    + +

    ◆ ioq_topology

    + +
    +
    + + + + +
    std::unordered_map<dev_t, io_queue_topology> seastar::resource::resources::ioq_topology
    +
    + +
    +
    + +

    ◆ numa_node_id_to_cpuset

    + +
    +
    + + + + +
    std::unordered_map<unsigned , cpuset> seastar::resource::resources::numa_node_id_to_cpuset
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1cancellable-members.html b/master/structseastar_1_1rpc_1_1cancellable-members.html new file mode 100644 index 000000000..da12dc26f --- /dev/null +++ b/master/structseastar_1_1rpc_1_1cancellable-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::cancellable Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::cancellable, including all inherited members.

    + + + + + + + + + + +
    cancel() (defined in seastar::rpc::cancellable)seastar::rpc::cancellableinline
    cancel_send (defined in seastar::rpc::cancellable)seastar::rpc::cancellable
    cancel_wait (defined in seastar::rpc::cancellable)seastar::rpc::cancellable
    cancellable()=default (defined in seastar::rpc::cancellable)seastar::rpc::cancellable
    cancellable(cancellable &&x) (defined in seastar::rpc::cancellable)seastar::rpc::cancellableinline
    operator=(cancellable &&x) (defined in seastar::rpc::cancellable)seastar::rpc::cancellableinline
    send_back_pointer (defined in seastar::rpc::cancellable)seastar::rpc::cancellable
    wait_back_pointer (defined in seastar::rpc::cancellable)seastar::rpc::cancellable
    ~cancellable() (defined in seastar::rpc::cancellable)seastar::rpc::cancellableinline
    + + + + diff --git a/master/structseastar_1_1rpc_1_1cancellable.html b/master/structseastar_1_1rpc_1_1cancellable.html new file mode 100644 index 000000000..49584ca4c --- /dev/null +++ b/master/structseastar_1_1rpc_1_1cancellable.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar::rpc::cancellable Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::cancellable Struct Reference
    +
    +
    + + + + + + + + +

    +Public Member Functions

    cancellable (cancellable &&x)
     
    +cancellableoperator= (cancellable &&x)
     
    +void cancel ()
     
    + + + + + + + + + +

    +Public Attributes

    +std::function< void()> cancel_send
     
    +std::function< void()> cancel_wait
     
    +cancellable ** send_back_pointer = nullptr
     
    +cancellable ** wait_back_pointer = nullptr
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1client_1_1reply__handler-members.html b/master/structseastar_1_1rpc_1_1client_1_1reply__handler-members.html new file mode 100644 index 000000000..986e01de0 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1client_1_1reply__handler-members.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::client::reply_handler< Reply, Func > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::client::reply_handler< Reply, Func >, including all inherited members.

    + + + + + + + + + + + + +
    cancel() override (defined in seastar::rpc::client::reply_handler< Reply, Func >)seastar::rpc::client::reply_handler< Reply, Func >inlinevirtual
    func (defined in seastar::rpc::client::reply_handler< Reply, Func >)seastar::rpc::client::reply_handler< Reply, Func >
    operator()(client &client, id_type msg_id, rcv_buf data) override (defined in seastar::rpc::client::reply_handler< Reply, Func >)seastar::rpc::client::reply_handler< Reply, Func >inlinevirtual
    pcancel (defined in seastar::rpc::client::reply_handler_base)seastar::rpc::client::reply_handler_base
    reply (defined in seastar::rpc::client::reply_handler< Reply, Func >)seastar::rpc::client::reply_handler< Reply, Func >
    reply_handler(Func &&f) (defined in seastar::rpc::client::reply_handler< Reply, Func >)seastar::rpc::client::reply_handler< Reply, Func >inline
    start (defined in seastar::rpc::client::reply_handler_base)seastar::rpc::client::reply_handler_base
    t (defined in seastar::rpc::client::reply_handler_base)seastar::rpc::client::reply_handler_base
    timeout() override (defined in seastar::rpc::client::reply_handler< Reply, Func >)seastar::rpc::client::reply_handler< Reply, Func >inlinevirtual
    ~reply_handler() (defined in seastar::rpc::client::reply_handler< Reply, Func >)seastar::rpc::client::reply_handler< Reply, Func >inlinevirtual
    ~reply_handler_base() (defined in seastar::rpc::client::reply_handler_base)seastar::rpc::client::reply_handler_baseinlinevirtual
    + + + + diff --git a/master/structseastar_1_1rpc_1_1client_1_1reply__handler.html b/master/structseastar_1_1rpc_1_1client_1_1reply__handler.html new file mode 100644 index 000000000..6a3982d9c --- /dev/null +++ b/master/structseastar_1_1rpc_1_1client_1_1reply__handler.html @@ -0,0 +1,122 @@ + + + + + + + +Seastar: seastar::rpc::client::reply_handler< Reply, Func > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::client::reply_handler< Reply, Func > Struct Template Referencefinal
    +
    +
    + +

    Inherits seastar::rpc::client::reply_handler_base.

    + + + + + + + + + + +

    +Public Member Functions

    reply_handler (Func &&f)
     
    +virtual void operator() (client &client, id_type msg_id, rcv_buf data) override
     
    +virtual void timeout () override
     
    +virtual void cancel () override
     
    + + + + + + + + + + + +

    +Public Attributes

    +Func func
     
    +Reply reply
     
    +timer< rpc_clock_typet
     
    +cancellablepcancel = nullptr
     
    +rpc_clock_type::time_point start
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1client__info-members.html b/master/structseastar_1_1rpc_1_1client__info-members.html new file mode 100644 index 000000000..14e37ec74 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1client__info-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::client_info Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::client_info, including all inherited members.

    + + + + + + + + + + +
    addr (defined in seastar::rpc::client_info)seastar::rpc::client_info
    attach_auxiliary(const sstring &key, T &&object) (defined in seastar::rpc::client_info)seastar::rpc::client_infoinline
    conn_id (defined in seastar::rpc::client_info)seastar::rpc::client_info
    retrieve_auxiliary(const sstring &key) (defined in seastar::rpc::client_info)seastar::rpc::client_infoinline
    retrieve_auxiliary(const sstring &key) const (defined in seastar::rpc::client_info)seastar::rpc::client_infoinline
    retrieve_auxiliary_opt(const sstring &key) noexcept (defined in seastar::rpc::client_info)seastar::rpc::client_infoinline
    retrieve_auxiliary_opt(const sstring &key) const noexcept (defined in seastar::rpc::client_info)seastar::rpc::client_infoinline
    server (defined in seastar::rpc::client_info)seastar::rpc::client_info
    user_data (defined in seastar::rpc::client_info)seastar::rpc::client_info
    + + + + diff --git a/master/structseastar_1_1rpc_1_1client__info.html b/master/structseastar_1_1rpc_1_1client__info.html new file mode 100644 index 000000000..e2903a54a --- /dev/null +++ b/master/structseastar_1_1rpc_1_1client__info.html @@ -0,0 +1,125 @@ + + + + + + + +Seastar: seastar::rpc::client_info Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::client_info Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +template<typename T >
    void attach_auxiliary (const sstring &key, T &&object)
     
    +template<typename T >
    T & retrieve_auxiliary (const sstring &key)
     
    +template<typename T >
    std::add_const_t< T > & retrieve_auxiliary (const sstring &key) const
     
    +template<typename T >
    T * retrieve_auxiliary_opt (const sstring &key) noexcept
     
    +template<typename T >
    const T * retrieve_auxiliary_opt (const sstring &key) const noexcept
     
    + + + + + + + + + +

    +Public Attributes

    +socket_address addr
     
    +rpc::serverserver
     
    +connection_id conn_id
     
    +std::unordered_map< sstring, boost::any > user_data
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1connection_1_1outgoing__entry-members.html b/master/structseastar_1_1rpc_1_1connection_1_1outgoing__entry-members.html new file mode 100644 index 000000000..a66f855b9 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1connection_1_1outgoing__entry-members.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::connection::outgoing_entry Member List
    +
    + + + + + diff --git a/master/structseastar_1_1rpc_1_1connection_1_1outgoing__entry.html b/master/structseastar_1_1rpc_1_1connection_1_1outgoing__entry.html new file mode 100644 index 000000000..96243566b --- /dev/null +++ b/master/structseastar_1_1rpc_1_1connection_1_1outgoing__entry.html @@ -0,0 +1,130 @@ + + + + + + + +Seastar: seastar::rpc::connection::outgoing_entry Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::connection::outgoing_entry Struct Reference
    +
    +
    +
    +Inheritance diagram for seastar::rpc::connection::outgoing_entry:
    +
    +
    + +
    + + + + +

    +Public Types

    +using container_t = bi::list< outgoing_entry, bi::constant_time_size< false > >
     
    + + + + + + + + + +

    +Public Member Functions

    outgoing_entry (snd_buf b)
     
    outgoing_entry (outgoing_entry &&)=delete
     
    outgoing_entry (const outgoing_entry &)=delete
     
    +void uncancellable ()
     
    + + + + + + + + + +

    +Public Attributes

    +timer< rpc_clock_typet
     
    +snd_buf buf
     
    +promise done
     
    +cancellablepcancel = nullptr
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1connection_1_1outgoing__entry.png b/master/structseastar_1_1rpc_1_1connection_1_1outgoing__entry.png new file mode 100644 index 0000000000000000000000000000000000000000..1b64398dd1eb32356257b8f9e25633a32a2fc3c4 GIT binary patch literal 1136 zcmeAS@N?(olHy`uVBq!ia0y~yU~B}k12~w0sBJof`rCVzItm9h7}*)ctS{++|)lEZbD zIL|4{377R>=iNR(^_|(5AC|fXnLjVib6yuNY`!P@yzLwp5j%tYYgZklzc#Mv&%J1O zW8?X4KTJf+H@&r5W69+(sVs}-n)vS7o)3%Cl6QZ;es^Bmv~;o4$8P1Mrv>faX0v0j zUu0)@Tj=?kcTI0!Sw2aVa7cI-_boPK%e4hZf93Dp{Ce48_nq&Za$lP5z8}7)bmuFl z7r`R?-aT&FW+nIg&f9lNmliX)@tou2;jVF5a5J~`?eDV(roIo)y|%y1X~Fr|vsspf z`q%0O?(LUf6nYvy?^d z6Ll7+@5TSWX;yxfv3SwlZd>i4V0FhgZZ31JhGEY09}^CAd^l)n(63jUuv=IC#)2JT z%{P*+?R|5&^Y7vH+e269JMHsloxVHh=GxLqg{^mYE*GA!cdGPrZL_`Fg`?V4&70fr?&){|AA_$RDXVxTR)?|S#pXp@8naK3`icZ@w*}q;2-; zOudK-`PV;EWOC*@&*yxfRhQfOqb;ZQ-t#-c+jyIfW}kGZp7Ysg)3@!ZAFfnyvDnnj zoOq}9>)j;1vWD|7<(P7X7y530{$cMrD)H%Wv3bPnufBSHkk>P4L_2 zf9|}fJyK_{WMIKwr`edQUA%o}-s^AAjLYlZao^d$Wo})e&b%jedG}oNCEjeiQ@-tN z;t#E+)&CTjf6RFI(uqO;rF*kQ)Elb~C58|4cJbZl^;h5U+O1)KUgxLzs~Z=y%vbq$ rPvO516T|-%T?`J(kTEQ-e=)mM-QD^>cVjWIcwq2!^>bP0l+XkKuwocT literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1rpc_1_1deferred__snd__buf-members.html b/master/structseastar_1_1rpc_1_1deferred__snd__buf-members.html new file mode 100644 index 000000000..f855e0390 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1deferred__snd__buf-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::deferred_snd_buf Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::deferred_snd_buf, including all inherited members.

    + + + +
    data (defined in seastar::rpc::deferred_snd_buf)seastar::rpc::deferred_snd_buf
    pr (defined in seastar::rpc::deferred_snd_buf)seastar::rpc::deferred_snd_buf
    + + + + diff --git a/master/structseastar_1_1rpc_1_1deferred__snd__buf.html b/master/structseastar_1_1rpc_1_1deferred__snd__buf.html new file mode 100644 index 000000000..8ef806173 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1deferred__snd__buf.html @@ -0,0 +1,124 @@ + + + + + + + +Seastar: seastar::rpc::deferred_snd_buf Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::deferred_snd_buf Struct Reference
    +
    +
    + + + + + + +

    +Public Attributes

    +promise pr
     
    +snd_buf data
     
    +

    Member Data Documentation

    + +

    ◆ data

    + +
    +
    + + + + +
    snd_buf seastar::rpc::deferred_snd_buf::data
    +
    + +
    +
    + +

    ◆ pr

    + +
    +
    + + + + +
    promise seastar::rpc::deferred_snd_buf::pr
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1do__want__client__info.html b/master/structseastar_1_1rpc_1_1do__want__client__info.html new file mode 100644 index 000000000..51493e5d8 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1do__want__client__info.html @@ -0,0 +1,82 @@ + + + + + + + +Seastar: seastar::rpc::do_want_client_info Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::do_want_client_info Struct Reference
    +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1do__want__time__point.html b/master/structseastar_1_1rpc_1_1do__want__time__point.html new file mode 100644 index 000000000..520177e6c --- /dev/null +++ b/master/structseastar_1_1rpc_1_1do__want__time__point.html @@ -0,0 +1,82 @@ + + + + + + + +Seastar: seastar::rpc::do_want_time_point Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::do_want_time_point Struct Reference
    +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1dont__want__client__info.html b/master/structseastar_1_1rpc_1_1dont__want__client__info.html new file mode 100644 index 000000000..40de14d3f --- /dev/null +++ b/master/structseastar_1_1rpc_1_1dont__want__client__info.html @@ -0,0 +1,82 @@ + + + + + + + +Seastar: seastar::rpc::dont_want_client_info Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::dont_want_client_info Struct Reference
    +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1dont__want__time__point.html b/master/structseastar_1_1rpc_1_1dont__want__time__point.html new file mode 100644 index 000000000..c0de0b2f9 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1dont__want__time__point.html @@ -0,0 +1,82 @@ + + + + + + + +Seastar: seastar::rpc::dont_want_time_point Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::dont_want_time_point Struct Reference
    +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1marshall__one-members.html b/master/structseastar_1_1rpc_1_1marshall__one-members.html new file mode 100644 index 000000000..be117b661 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1marshall__one-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::marshall_one< Serializer, Output > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::marshall_one< Serializer, Output >, including all inherited members.

    + + +
    put_connection_id(const connection_id &cid, Output &out) (defined in seastar::rpc::marshall_one< Serializer, Output >)seastar::rpc::marshall_one< Serializer, Output >inlinestatic
    + + + + diff --git a/master/structseastar_1_1rpc_1_1marshall__one.html b/master/structseastar_1_1rpc_1_1marshall__one.html new file mode 100644 index 000000000..b0cd38bc7 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1marshall__one.html @@ -0,0 +1,106 @@ + + + + + + + +Seastar: seastar::rpc::marshall_one< Serializer, Output > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::marshall_one< Serializer, Output > Struct Template Reference
    +
    +
    + + + + + + + + + + + + +

    +Classes

    struct  helper
     
    struct  helper< sink< T... > >
     
    struct  helper< source< T... > >
     
    struct  helper< std::reference_wrapper< const T > >
     
    struct  helper< tuple< T... > >
     
    + + + +

    +Static Public Member Functions

    +static void put_connection_id (const connection_id &cid, Output &out)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1marshall__one_1_1helper-members.html b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper-members.html new file mode 100644 index 000000000..309e2ab54 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::marshall_one< Serializer, Output >::helper< T > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::marshall_one< Serializer, Output >::helper< T >, including all inherited members.

    + + +
    doit(Serializer &serializer, Output &out, const T &arg) (defined in seastar::rpc::marshall_one< Serializer, Output >::helper< T >)seastar::rpc::marshall_one< Serializer, Output >::helper< T >inlinestatic
    + + + + diff --git a/master/structseastar_1_1rpc_1_1marshall__one_1_1helper.html b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper.html new file mode 100644 index 000000000..df77956a7 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::rpc::marshall_one< Serializer, Output >::helper< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::marshall_one< Serializer, Output >::helper< T > Struct Template Reference
    +
    +
    + + + + +

    +Static Public Member Functions

    +static void doit (Serializer &serializer, Output &out, const T &arg)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4-members.html b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4-members.html new file mode 100644 index 000000000..77b28330b --- /dev/null +++ b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::marshall_one< Serializer, Output >::helper< sink< T... > > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::marshall_one< Serializer, Output >::helper< sink< T... > >, including all inherited members.

    + + +
    doit(Serializer &, Output &out, const sink< T... > &arg) (defined in seastar::rpc::marshall_one< Serializer, Output >::helper< sink< T... > >)seastar::rpc::marshall_one< Serializer, Output >::helper< sink< T... > >inlinestatic
    + + + + diff --git a/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4.html b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4.html new file mode 100644 index 000000000..d40c2f950 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::rpc::marshall_one< Serializer, Output >::helper< sink< T... > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::marshall_one< Serializer, Output >::helper< sink< T... > > Struct Template Reference
    +
    +
    + + + + +

    +Static Public Member Functions

    +static void doit (Serializer &, Output &out, const sink< T... > &arg)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4-members.html b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4-members.html new file mode 100644 index 000000000..99b533919 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::marshall_one< Serializer, Output >::helper< source< T... > > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::marshall_one< Serializer, Output >::helper< source< T... > >, including all inherited members.

    + + +
    doit(Serializer &, Output &out, const source< T... > &arg) (defined in seastar::rpc::marshall_one< Serializer, Output >::helper< source< T... > >)seastar::rpc::marshall_one< Serializer, Output >::helper< source< T... > >inlinestatic
    + + + + diff --git a/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4.html b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4.html new file mode 100644 index 000000000..edcf36d39 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::rpc::marshall_one< Serializer, Output >::helper< source< T... > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::marshall_one< Serializer, Output >::helper< source< T... > > Struct Template Reference
    +
    +
    + + + + +

    +Static Public Member Functions

    +static void doit (Serializer &, Output &out, const source< T... > &arg)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4-members.html b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4-members.html new file mode 100644 index 000000000..61c371b75 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::marshall_one< Serializer, Output >::helper< std::reference_wrapper< const T > > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::marshall_one< Serializer, Output >::helper< std::reference_wrapper< const T > >, including all inherited members.

    + + +
    doit(Serializer &serializer, Output &out, const std::reference_wrapper< const T > &arg) (defined in seastar::rpc::marshall_one< Serializer, Output >::helper< std::reference_wrapper< const T > >)seastar::rpc::marshall_one< Serializer, Output >::helper< std::reference_wrapper< const T > >inlinestatic
    + + + + diff --git a/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4.html b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4.html new file mode 100644 index 000000000..8d7d7675f --- /dev/null +++ b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::rpc::marshall_one< Serializer, Output >::helper< std::reference_wrapper< const T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::marshall_one< Serializer, Output >::helper< std::reference_wrapper< const T > > Struct Template Reference
    +
    +
    + + + + +

    +Static Public Member Functions

    +static void doit (Serializer &serializer, Output &out, const std::reference_wrapper< const T > &arg)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4-members.html b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4-members.html new file mode 100644 index 000000000..dbf36d26f --- /dev/null +++ b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::marshall_one< Serializer, Output >::helper< tuple< T... > > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::marshall_one< Serializer, Output >::helper< tuple< T... > >, including all inherited members.

    + + +
    doit(Serializer &serializer, Output &out, const tuple< T... > &arg) (defined in seastar::rpc::marshall_one< Serializer, Output >::helper< tuple< T... > >)seastar::rpc::marshall_one< Serializer, Output >::helper< tuple< T... > >inlinestatic
    + + + + diff --git a/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4.html b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4.html new file mode 100644 index 000000000..3f5eee249 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1marshall__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::rpc::marshall_one< Serializer, Output >::helper< tuple< T... > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::marshall_one< Serializer, Output >::helper< tuple< T... > > Struct Template Reference
    +
    +
    + + + + +

    +Static Public Member Functions

    +static void doit (Serializer &serializer, Output &out, const tuple< T... > &arg)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1negotiation__frame-members.html b/master/structseastar_1_1rpc_1_1negotiation__frame-members.html new file mode 100644 index 000000000..28ce6ba06 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1negotiation__frame-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::negotiation_frame Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::negotiation_frame, including all inherited members.

    + + + +
    len (defined in seastar::rpc::negotiation_frame)seastar::rpc::negotiation_frame
    magic (defined in seastar::rpc::negotiation_frame)seastar::rpc::negotiation_frame
    + + + + diff --git a/master/structseastar_1_1rpc_1_1negotiation__frame.html b/master/structseastar_1_1rpc_1_1negotiation__frame.html new file mode 100644 index 000000000..90223c1ae --- /dev/null +++ b/master/structseastar_1_1rpc_1_1negotiation__frame.html @@ -0,0 +1,124 @@ + + + + + + + +Seastar: seastar::rpc::negotiation_frame Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::negotiation_frame Struct Reference
    +
    +
    + + + + + + +

    +Public Attributes

    +char magic [sizeof(rpc_magic) - 1]
     
    +uint32_t len
     
    +

    Member Data Documentation

    + +

    ◆ len

    + +
    +
    + + + + +
    uint32_t seastar::rpc::negotiation_frame::len
    +
    + +
    +
    + +

    ◆ magic

    + +
    +
    + + + + +
    char seastar::rpc::negotiation_frame::magic[sizeof(rpc_magic) - 1]
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1no__wait__type.html b/master/structseastar_1_1rpc_1_1no__wait__type.html new file mode 100644 index 000000000..0be223d32 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1no__wait__type.html @@ -0,0 +1,82 @@ + + + + + + + +Seastar: seastar::rpc::no_wait_type Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::no_wait_type Struct Reference
    +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1rcv__buf-members.html b/master/structseastar_1_1rpc_1_1rcv__buf-members.html new file mode 100644 index 000000000..1220ce63f --- /dev/null +++ b/master/structseastar_1_1rpc_1_1rcv__buf-members.html @@ -0,0 +1,90 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::rcv_buf Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::rcv_buf, including all inherited members.

    + + + + + + + + + +
    bufs (defined in seastar::rpc::rcv_buf)seastar::rpc::rcv_buf
    iterator typedef (defined in seastar::rpc::rcv_buf)seastar::rpc::rcv_buf
    rcv_buf() (defined in seastar::rpc::rcv_buf)seastar::rpc::rcv_bufinline
    rcv_buf(size_t size_) (defined in seastar::rpc::rcv_buf)seastar::rpc::rcv_bufinlineexplicit
    rcv_buf(temporary_buffer< char > b) (defined in seastar::rpc::rcv_buf)seastar::rpc::rcv_bufinlineexplicit
    rcv_buf(std::vector< temporary_buffer< char > > bufs, size_t size) (defined in seastar::rpc::rcv_buf)seastar::rpc::rcv_bufinlineexplicit
    size (defined in seastar::rpc::rcv_buf)seastar::rpc::rcv_buf
    su (defined in seastar::rpc::rcv_buf)seastar::rpc::rcv_buf
    + + + + diff --git a/master/structseastar_1_1rpc_1_1rcv__buf.html b/master/structseastar_1_1rpc_1_1rcv__buf.html new file mode 100644 index 000000000..366e134c5 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1rcv__buf.html @@ -0,0 +1,118 @@ + + + + + + + +Seastar: seastar::rpc::rcv_buf Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::rcv_buf Struct Reference
    +
    +
    + + + + +

    +Public Types

    +using iterator = std::vector< temporary_buffer< char > >::iterator
     
    + + + + + + + +

    +Public Member Functions

    rcv_buf (size_t size_)
     
    rcv_buf (temporary_buffer< char > b)
     
    rcv_buf (std::vector< temporary_buffer< char > > bufs, size_t size)
     
    + + + + + + + +

    +Public Attributes

    +uint32_t size = 0
     
    +std::optional< semaphore_units<> > su
     
    +std::variant< std::vector< temporary_buffer< char > >, temporary_buffer< char > > bufs
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1rcv__reply-members.html b/master/structseastar_1_1rpc_1_1rcv__reply-members.html new file mode 100644 index 000000000..e8f83c070 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1rcv__reply-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::rcv_reply< Serializer, T > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::rcv_reply< Serializer, T >, including all inherited members.

    + + +
    get_reply(rpc::client &dst, rcv_buf input) (defined in seastar::rpc::rcv_reply< Serializer, T >)seastar::rpc::rcv_reply< Serializer, T >inline
    + + + + diff --git a/master/structseastar_1_1rpc_1_1rcv__reply.html b/master/structseastar_1_1rpc_1_1rcv__reply.html new file mode 100644 index 000000000..c630bdd78 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1rcv__reply.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar::rpc::rcv_reply< Serializer, T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::rcv_reply< Serializer, T > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::rpc::rcv_reply< Serializer, T >:
    +
    +
    + + +seastar::rpc::rcv_reply_base< T, T > + +
    + + + + + + +

    +Public Member Functions

    +void get_reply (rpc::client &dst, rcv_buf input)
     
    +void set_value (V &&... v)
     
    + + + + + +

    +Public Attributes

    +bool done
     
    +promise< T... > p
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1rcv__reply.png b/master/structseastar_1_1rpc_1_1rcv__reply.png new file mode 100644 index 0000000000000000000000000000000000000000..6bf3304d480da02ab9d6adda719a71c10c06560c GIT binary patch literal 858 zcmeAS@N?(olHy`uVBq!ia0vp^FM&9KgBeJk)>)JTq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0UV6GXhEy=VoqMrtjRKGB_TyWB{hwd6 zoNJaqNyghVxf8E#W>Zzm5qhNk+2;Iqfz2v+9hyTX{ko(ub;-UfK31NWvPELHADwk= z|KV!SZ@&&N5k0(F-1}0g|D|g=_L(!@m-o*ac!jN3^JK103ai@sar*3}pUT)jX@|+qaGR3FfPF3LDyWOMx z@JetUJ>V|riFoq(cSO}#2}S6}=${mB<6H`SG{ z_6}N}^@#BJqA>S)<-TTyd+YccqF3-4k zi|d^I!n~Dpj!kCjwrQ8o<_GTmX^?M!+iKfGagXj*MvP7uTbjH@UsZfs9nFzl7_m3H z^~$bUnwtARUiZ9fAbT?){oeaTS&QyxbGFUBY~(og@rxYi#T?JCtU0iDcSlrYi1*iP z=Q7{y-MOOZeec|3-|sD2^C->w_TE=o^Y=aC-VmPu>i)*>ZD-jEvVP2Cy7KjJ_~}J# zJ65UJ-E-KrrT6gr1G^pm*Zb9Ti986I?!ox42NYCNOBiZjeipX#y + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::rcv_reply< Serializer, future< T... > > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::rcv_reply< Serializer, future< T... > >, including all inherited members.

    + + +
    get_reply(rpc::client &dst, rcv_buf input) (defined in seastar::rpc::rcv_reply< Serializer, future< T... > >)seastar::rpc::rcv_reply< Serializer, future< T... > >inline
    + + + + diff --git a/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_01T_8_8_8_01_4_01_4.html b/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_01T_8_8_8_01_4_01_4.html new file mode 100644 index 000000000..f14978229 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_01T_8_8_8_01_4_01_4.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar::rpc::rcv_reply< Serializer, future< T... > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::rcv_reply< Serializer, future< T... > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::rpc::rcv_reply< Serializer, future< T... > >:
    +
    +
    + + +seastar::rpc::rcv_reply_base< std::tuple< T... >, T... > + +
    + + + + + + +

    +Public Member Functions

    +void get_reply (rpc::client &dst, rcv_buf input)
     
    +void set_value (V &&... v)
     
    + + + + + +

    +Public Attributes

    +bool done
     
    +promise< T... > p
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_01T_8_8_8_01_4_01_4.png b/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_01T_8_8_8_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..603528482a919cb2bb23478f5dcd6975864b34ce GIT binary patch literal 1108 zcmeAS@N?(olHy`uVBq!ia0y~yV6+9Y12~w0WK2ZRd>|ze;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|!2H6Lfg-goZ25LbUHw>Hl?_Fwet z+y#49&gu^!)FadD0uBv(^ip`u2mTcEdV-ccZkF zh+8wh{Odl-rQ~^g>XL7_qW3MdSZ?&wZIa1~joB}6=4h_-ZJgm^G~rm|WzFC!>wmA) z4R60ne_!*r?vtZyIrH+e*r(T;i~ipHbl-9P+AnDfBa6PS-u7=g`|iz|cl}@bs>z3> zJa?V6Osg#S`VF&7Pj>%pT7TJi`%?}XpQ`_#=f@%vjlud82j{5aLjc;WT= zGag^8_FT`RHQ%;xl)k}t^H`Mi-3X4_^IOf{c4^O?J1^Su=D)ys`d{vN zdX*T;-!7f1?YX^V>u2vtSEpJ{Qdu4s_37A?`~}-(?)-jU=DYr&+oU;FsSB-(>utX8 zQ~10uBhd5J7a?2EUzah1oPF<{V!o$yKG!n-NvdUNVUXdfV(_c2VXqJ}qvR)Pwn8E-&uYlKW^t&p4j@Z`qyuHtL9EVc5uR-!*X7w zw|sBwY!M58q5Ev^`oE`aADF+ClI~DD+Aa{cBt7psbLN_*X?O3|n2L!P=R16yc4v3l zyRV%lmiKzzzT0+d=F}C5hIxDVUo9z`y|`56$GhVEH#=9~zqIC9UP5(Vc+lr15>@YX z{si?$yT@{`-*Rr_^KYFyj^6)rw|SoRUp|InUoG(m)Bb43Xv#KNS6#PaNdIM5bvkly zeaQd*4|TrpYF{s7ytk + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::rcv_reply< Serializer, future<> > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::rcv_reply< Serializer, future<> >, including all inherited members.

    + + +
    get_reply(rpc::client &, rcv_buf) (defined in seastar::rpc::rcv_reply< Serializer, void >)seastar::rpc::rcv_reply< Serializer, void >inline
    + + + + diff --git a/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_4_01_4.html b/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_4_01_4.html new file mode 100644 index 000000000..8e72e8df7 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_4_01_4.html @@ -0,0 +1,115 @@ + + + + + + + +Seastar: seastar::rpc::rcv_reply< Serializer, future<> > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::rcv_reply< Serializer, future<> > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::rpc::rcv_reply< Serializer, future<> >:
    +
    +
    + + +seastar::rpc::rcv_reply< Serializer, void > +seastar::rpc::rcv_reply_base< void, void > + +
    + + + + + + +

    +Public Member Functions

    +void get_reply (rpc::client &, rcv_buf)
     
    +void set_value (V &&... v)
     
    + + + + + +

    +Public Attributes

    +bool done
     
    +promise< T... > p
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_4_01_4.png b/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01future_3_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..41ced1c39a711728d3deb368c5b3050b62ec4f16 GIT binary patch literal 1489 zcmb`Hc~Fx_7{)&k5f4B>6zC`t5-G!_L8v5%6+Vs#B0{1@g#h7dDL7cdVK_2Ugm^(d z3@Qjpji?9&Q^OTgq970;0SOQZm$X>Wa9WZeR~np-o&MeK%)9$MGdsIG&u`wP`uTcl zZ!*~g0Dv~e3-kv7H9eKi)>@~U6SR??f55|Cpu}NxEMN;S&)E14xlJ7^9v}5_~r_GKStxs}BHRxez z>#85qzuI138GZV|DTHOrAt)Ojpic`s0)u=oAoP9<%^h03rd>j4!v&$z6eW!W^N*99 zNUHU~W^ctwUn%LzV(Nt@_Zj)U!N-nd|DA&muN>IekUkJ$bM)&e;|&<(SJdTgx>!%D+_vpaTb^0L4btoOHtnT~Js6H{hq>6WyNWkXq! zZn3O2q=3eMU0z4(Uu_uKEFRBp!f#g>6a-Jo^V2!AISU(8e8x%|d13Xe>fc=NFP7K& zh9NHzdt8*WdON7jz2==2<|~wu@0MBHI`cWxg1E=Y&#wP8@h54lvN2EES}X3^O=23K z^cgV@og;8r!V3~~ za2>?qIR>U(RL zOi*0|p||^kCY%Nw#c1$sl7UjV`YlK+_y~+*N&O#8r`g)2+jUN0jtu0e9&rPN-~O8` z$}^0{NGEP6xjA5FSr#}V6k@R{rq4f)g4LWXJi%(*5O%21-y>3K^-xytzUsnV`8kp7 zH;pYk_*kbX2WQHPjU6rO_8H_zbL@P3jkglPq4!S4uI zm++$AUW2)Fk8~R2pL;iXIz&wG!q=^AC1<0VSF1RerUX=<;#~$*Y1dW$T=}Qi=EZZF z?Cs8nn>fk3`=ei$bRg{~InpQO%M-5!LN{2zo()#fOSN5XF1cc=PjeiBRZnNTJDJQ+ z%vsYOlE>;u4AWVB^8`9NlHh5=b`&q+LW6oQIVN)Iun7iLm4?K0<2d@`iPRt33F3;O`8>vx1WTcX ztd&FY>XyoFVbJ_H*8gB$OE?znBL#{iYO{Ls^||>V@P}MR_oCc`tAj%nxc)sA*;<4y z?*<42=&Si)H1;C&{=1oX0`tT1-7jCL=k}rCRN(lRb43Q=su?SzYv8i323tDNpK)2z z&b+Zo{mi+uhkUJ7w;zdGA~;ouZCVuXr*?4Nn(m@|BaW51jT1-ozHojp4BdY|!B@K; zlY`U8-#-4JG@%Y*#FYy8;${oCsA&0lBIM9fP-(kPLLcM1$$kgzVJ>C+epEztpe-jx zt%$DzGr3MQzK8>&ns#O-3=0ZoBFdE~P8DieWXC_jdhOjm+9e2&SjbAMsco?b9TgeF zQAJK?Ub&IAL+tdQic&8orb^>M7sNhv-?t+?njPBmiS z4qHr^vM}J`$N_fHLvQ0nx^K(4c0%Q#`OM;0O3fPt3`iILt2tvoXD*pDy%iKw U#Z5yIRsS!5arXr)U4t+F1=kzJm;e9( literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01void_01_4-members.html b/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01void_01_4-members.html new file mode 100644 index 000000000..68caf673b --- /dev/null +++ b/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01void_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::rcv_reply< Serializer, void > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::rcv_reply< Serializer, void >, including all inherited members.

    + + +
    get_reply(rpc::client &, rcv_buf) (defined in seastar::rpc::rcv_reply< Serializer, void >)seastar::rpc::rcv_reply< Serializer, void >inline
    + + + + diff --git a/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01void_01_4.html b/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01void_01_4.html new file mode 100644 index 000000000..ab01b3e24 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01void_01_4.html @@ -0,0 +1,115 @@ + + + + + + + +Seastar: seastar::rpc::rcv_reply< Serializer, void > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::rcv_reply< Serializer, void > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::rpc::rcv_reply< Serializer, void >:
    +
    +
    + + +seastar::rpc::rcv_reply_base< void, void > +seastar::rpc::rcv_reply< Serializer, future<> > + +
    + + + + + + +

    +Public Member Functions

    +void get_reply (rpc::client &, rcv_buf)
     
    +void set_value (V &&... v)
     
    + + + + + +

    +Public Attributes

    +bool done
     
    +promise< T... > p
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01void_01_4.png b/master/structseastar_1_1rpc_1_1rcv__reply_3_01Serializer_00_01void_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..a57317fe0382043955ac780a80876a4e434a81f7 GIT binary patch literal 1492 zcmbu9e>~H99LK*y*K`;wF^AO*SCf^C=!ei(HXG*=)}c`(*&cK*zmlmdKjsdz(P((M zhgf(Fp<3og`f+~b{ODA)`PHG(Olq6U7Q4CYad-dsc|1Pv_v`g|d>-#VUeC|to$crA zrN7B+6954EcpP{P03b#hO^0f0>YoAFtD0u&M-1>(tJNAgx1dO1Jj~aqzi($}=Z5St zq{c$ykNNronn&yB`I7(#0N4JhaQ+v4vVNLa?9%sv>_?TWq zV5*VFUahsJdI@K%JqhnEYCxlU3qkaC79H&mXP!>U>_OqxU715zMWC4lpEkENLNAR` z*)b!jx8g6&-gV_yPxAR;@>t}P5=t}n`2(7OUa+JZb)t@^KO1nyv0mb4Y+b(nrZ#gN z$$y$Vp_p|JRym|Q6?LfpXe_wSb=mHaWC|eR?}BzgVvL39A@`@VvV6FpfwH0ctzI(8 zDr-E4m`Ccbd$O!vB`2rl;Z8(uAL2o~DCbts!CdL(o!y}2emx@h0F_|BrM7`10d3AZ zAC;<*U&JwcYRp{t4Eg4?n@fG9gQ7(NdzvIWi`0E8R`rmx3RFGGFP?2v@DNGF!-(+r zieyu|UX;)MweB_BD4!$GEUYb>2vND{L)4_!{K_K|lLB=6qfmyT1iV`oM;Z=wxynEv ziZ;a z6&5;}$tXrg3}A$lul@En?Y%*nTa6=7<@H$G8@XYbLkZpw$9W^SD1x>Wlxyaj-FDrr zU@9qMaNL%_FAs;s-Ry<7Vn!!QduAkinD=1)#pVs1x8XcB`#a17TY9`jhCwFE9KI9t zsEb^(NCp{c$zC9rXuuBq>crQPsog%HM*f!xdB{i_UgOL;EqaQHHiR+d(b1~w$_rLK2Ri_gLo3ZAWj=5_*gw3on zNPCIbZdnyZ1ddC+ODCyB%W&0 z={0KN77T|Ji$;#4AXivW!vt*>?y`pF6#F3H4~G!(I=iinIyJ06+YE~hgGLfobyUIY zHR4+3?bY>Ph6hl%#E zKj!ahZdP9tDaVu_{>H5Gn+PbO)fkj9a;@ZomJFw=oUS(Sjw;6QLkEf~BShJSd3OEP zEdPsR`%T*=eZ6O=i?-i3zIb8Jyd#fekJT1d&6H&=bZ4CThxN_INxTQFBnOd%Sbh!K zguR8&8zz|xX?#k@&y8y#;W3DV?vHC*HgJqz`SnLeesF6G9-G!<_OJfp^oBMTB%1QL zpnnPrZxqpf42iv?6I^&z;J_$wgsTK$R^nx5+Cy7W#)>7^EM$4b6Xk`e6GhvMr`J&` ze>j6g3~~;UURHKn3=eYZOT`8IN*$Z6ns^zBtOd`oyqtHu`7gP%$bk~^fEhmJMX1YS zH@m@$xkb)(zVCKgG$`nuXP2YNcanZxnWWB;wV9RtQEL=SF1Gs=@2B+`3%*Do4+|B@ Yy1tme{+bNDW(5OyPhYU! + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::rcv_reply_base< Payload, T > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1rpc_1_1rcv__reply__base.html b/master/structseastar_1_1rpc_1_1rcv__reply__base.html new file mode 100644 index 000000000..20fa4924f --- /dev/null +++ b/master/structseastar_1_1rpc_1_1rcv__reply__base.html @@ -0,0 +1,103 @@ + + + + + + + +Seastar: seastar::rpc::rcv_reply_base< Payload, T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::rcv_reply_base< Payload, T > Struct Template Reference
    +
    +
    + + + + + +

    +Public Member Functions

    +template<typename... V>
    void set_value (V &&... v)
     
    + + + + + +

    +Public Attributes

    +bool done = false
     
    +promise< T... > p
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1remove__optional-members.html b/master/structseastar_1_1rpc_1_1remove__optional-members.html new file mode 100644 index 000000000..afee42d4f --- /dev/null +++ b/master/structseastar_1_1rpc_1_1remove__optional-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::remove_optional< T > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::remove_optional< T >, including all inherited members.

    + + +
    type typedef (defined in seastar::rpc::remove_optional< T >)seastar::rpc::remove_optional< T >
    + + + + diff --git a/master/structseastar_1_1rpc_1_1remove__optional.html b/master/structseastar_1_1rpc_1_1remove__optional.html new file mode 100644 index 000000000..ace7c8197 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1remove__optional.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: seastar::rpc::remove_optional< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::remove_optional< T > Struct Template Reference
    +
    +
    + + + + +

    +Public Types

    +using type = T
     
    +

    Member Typedef Documentation

    + +

    ◆ type

    + +
    +
    +
    +template<typename T >
    + + + + +
    using seastar::rpc::remove_optional< T >::type = T
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1remove__optional_3_01optional_3_01T_01_4_01_4-members.html b/master/structseastar_1_1rpc_1_1remove__optional_3_01optional_3_01T_01_4_01_4-members.html new file mode 100644 index 000000000..e72344c12 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1remove__optional_3_01optional_3_01T_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::remove_optional< optional< T > > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::remove_optional< optional< T > >, including all inherited members.

    + + +
    type typedef (defined in seastar::rpc::remove_optional< optional< T > >)seastar::rpc::remove_optional< optional< T > >
    + + + + diff --git a/master/structseastar_1_1rpc_1_1remove__optional_3_01optional_3_01T_01_4_01_4.html b/master/structseastar_1_1rpc_1_1remove__optional_3_01optional_3_01T_01_4_01_4.html new file mode 100644 index 000000000..b92698610 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1remove__optional_3_01optional_3_01T_01_4_01_4.html @@ -0,0 +1,109 @@ + + + + + + + +Seastar: seastar::rpc::remove_optional< optional< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::remove_optional< optional< T > > Struct Template Reference
    +
    +
    + + + + +

    +Public Types

    +using type = T
     
    +

    Member Typedef Documentation

    + +

    ◆ type

    + +
    +
    +
    +template<typename T >
    + + + + +
    using seastar::rpc::remove_optional< optional< T > >::type = T
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1rpc__handler-members.html b/master/structseastar_1_1rpc_1_1rpc__handler-members.html new file mode 100644 index 000000000..87c14dcd0 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1rpc__handler-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::rpc_handler Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::rpc_handler, including all inherited members.

    + + + + +
    func (defined in seastar::rpc::rpc_handler)seastar::rpc::rpc_handler
    sg (defined in seastar::rpc::rpc_handler)seastar::rpc::rpc_handler
    use_gate (defined in seastar::rpc::rpc_handler)seastar::rpc::rpc_handler
    + + + + diff --git a/master/structseastar_1_1rpc_1_1rpc__handler.html b/master/structseastar_1_1rpc_1_1rpc__handler.html new file mode 100644 index 000000000..00bd0a519 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1rpc__handler.html @@ -0,0 +1,141 @@ + + + + + + + +Seastar: seastar::rpc::rpc_handler Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::rpc_handler Struct Reference
    +
    +
    + + + + + + + + +

    +Public Attributes

    +scheduling_group sg
     
    +rpc_handler_func func
     
    +gate use_gate
     
    +

    Member Data Documentation

    + +

    ◆ func

    + +
    +
    + + + + +
    rpc_handler_func seastar::rpc::rpc_handler::func
    +
    + +
    +
    + +

    ◆ sg

    + +
    +
    + + + + +
    scheduling_group seastar::rpc::rpc_handler::sg
    +
    + +
    +
    + +

    ◆ use_gate

    + +
    +
    + + + + +
    gate seastar::rpc::rpc_handler::use_gate
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1serialize__helper.html b/master/structseastar_1_1rpc_1_1serialize__helper.html new file mode 100644 index 000000000..53308b4b9 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1serialize__helper.html @@ -0,0 +1,82 @@ + + + + + + + +Seastar: seastar::rpc::serialize_helper< IsSmartPtr > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::serialize_helper< IsSmartPtr > Struct Template Reference
    +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1serialize__helper_3_01false_01_4-members.html b/master/structseastar_1_1rpc_1_1serialize__helper_3_01false_01_4-members.html new file mode 100644 index 000000000..70b065802 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1serialize__helper_3_01false_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::serialize_helper< false > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::serialize_helper< false >, including all inherited members.

    + + +
    serialize(Serializer &serializer, Output &out, const T &t) (defined in seastar::rpc::serialize_helper< false >)seastar::rpc::serialize_helper< false >inlinestatic
    + + + + diff --git a/master/structseastar_1_1rpc_1_1serialize__helper_3_01false_01_4.html b/master/structseastar_1_1rpc_1_1serialize__helper_3_01false_01_4.html new file mode 100644 index 000000000..eadf932c6 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1serialize__helper_3_01false_01_4.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: seastar::rpc::serialize_helper< false > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::serialize_helper< false > Struct Reference
    +
    +
    + + + + + +

    +Static Public Member Functions

    +template<typename Serializer , typename Output , typename T >
    static void serialize (Serializer &serializer, Output &out, const T &t)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1serialize__helper_3_01true_01_4-members.html b/master/structseastar_1_1rpc_1_1serialize__helper_3_01true_01_4-members.html new file mode 100644 index 000000000..4c970fa25 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1serialize__helper_3_01true_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::serialize_helper< true > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::serialize_helper< true >, including all inherited members.

    + + +
    serialize(Serializer &serializer, Output &out, const T &t) (defined in seastar::rpc::serialize_helper< true >)seastar::rpc::serialize_helper< true >inlinestatic
    + + + + diff --git a/master/structseastar_1_1rpc_1_1serialize__helper_3_01true_01_4.html b/master/structseastar_1_1rpc_1_1serialize__helper_3_01true_01_4.html new file mode 100644 index 000000000..824c0a127 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1serialize__helper_3_01true_01_4.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: seastar::rpc::serialize_helper< true > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::serialize_helper< true > Struct Reference
    +
    +
    + + + + + +

    +Static Public Member Functions

    +template<typename Serializer , typename Output , typename T >
    static void serialize (Serializer &serializer, Output &out, const T &t)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1signature.html b/master/structseastar_1_1rpc_1_1signature.html new file mode 100644 index 000000000..add49aca2 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1signature.html @@ -0,0 +1,82 @@ + + + + + + + +Seastar: seastar::rpc::signature< Function > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::signature< Function > Struct Template Reference
    +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1signature_3_01Ret_07In_8_8_8_08_4-members.html b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07In_8_8_8_08_4-members.html new file mode 100644 index 000000000..119878082 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07In_8_8_8_08_4-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::signature< Ret(In...)> Member List
    +
    + + + + + diff --git a/master/structseastar_1_1rpc_1_1signature_3_01Ret_07In_8_8_8_08_4.html b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07In_8_8_8_08_4.html new file mode 100644 index 000000000..c85623291 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07In_8_8_8_08_4.html @@ -0,0 +1,185 @@ + + + + + + + +Seastar: seastar::rpc::signature< Ret(In...)> Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::signature< Ret(In...)> Struct Template Reference
    +
    +
    + + + + + + + + + + + + +

    +Public Types

    +using ret_type = Ret
     
    +using arg_types = std::tuple< In... >
     
    +using clean = signature
     
    +using want_client_info = dont_want_client_info
     
    +using want_time_point = dont_want_time_point
     
    +

    Member Typedef Documentation

    + +

    ◆ arg_types

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(In...)>::arg_types = std::tuple<In...>
    +
    + +
    +
    + +

    ◆ clean

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(In...)>::clean = signature
    +
    + +
    +
    + +

    ◆ ret_type

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(In...)>::ret_type = Ret
    +
    + +
    +
    + +

    ◆ want_client_info

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(In...)>::want_client_info = dont_want_client_info
    +
    + +
    +
    + +

    ◆ want_time_point

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(In...)>::want_time_point = dont_want_time_point
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01In_8_8_8_08_4-members.html b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01In_8_8_8_08_4-members.html new file mode 100644 index 000000000..23556a178 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01In_8_8_8_08_4-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::signature< Ret(client_info &, In...)> Member List
    +
    + + + + + diff --git a/master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01In_8_8_8_08_4.html b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01In_8_8_8_08_4.html new file mode 100644 index 000000000..51186f05c --- /dev/null +++ b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01In_8_8_8_08_4.html @@ -0,0 +1,185 @@ + + + + + + + +Seastar: seastar::rpc::signature< Ret(client_info &, In...)> Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::signature< Ret(client_info &, In...)> Struct Template Reference
    +
    +
    + + + + + + + + + + + + +

    +Public Types

    +using ret_type = Ret
     
    +using arg_types = std::tuple< In... >
     
    +using clean = signature< Ret(In...)>
     
    +using want_client_info = do_want_client_info
     
    +using want_time_point = dont_want_time_point
     
    +

    Member Typedef Documentation

    + +

    ◆ arg_types

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(client_info &, In...)>::arg_types = std::tuple<In...>
    +
    + +
    +
    + +

    ◆ clean

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(client_info &, In...)>::clean = signature<Ret (In...)>
    +
    + +
    +
    + +

    ◆ ret_type

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(client_info &, In...)>::ret_type = Ret
    +
    + +
    +
    + +

    ◆ want_client_info

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(client_info &, In...)>::want_client_info = do_want_client_info
    +
    + +
    +
    + +

    ◆ want_time_point

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(client_info &, In...)>::want_time_point = dont_want_time_point
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4-members.html b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4-members.html new file mode 100644 index 000000000..c592f2c8f --- /dev/null +++ b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::signature< Ret(client_info &, opt_time_point, In...)> Member List
    +
    + + + + + diff --git a/master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4.html b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4.html new file mode 100644 index 000000000..82b3cd266 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4.html @@ -0,0 +1,185 @@ + + + + + + + +Seastar: seastar::rpc::signature< Ret(client_info &, opt_time_point, In...)> Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::signature< Ret(client_info &, opt_time_point, In...)> Struct Template Reference
    +
    +
    + + + + + + + + + + + + +

    +Public Types

    +using ret_type = Ret
     
    +using arg_types = std::tuple< In... >
     
    +using clean = signature< Ret(In...)>
     
    +using want_client_info = do_want_client_info
     
    +using want_time_point = do_want_time_point
     
    +

    Member Typedef Documentation

    + +

    ◆ arg_types

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(client_info &, opt_time_point, In...)>::arg_types = std::tuple<In...>
    +
    + +
    +
    + +

    ◆ clean

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(client_info &, opt_time_point, In...)>::clean = signature<Ret (In...)>
    +
    + +
    +
    + +

    ◆ ret_type

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(client_info &, opt_time_point, In...)>::ret_type = Ret
    +
    + +
    +
    + +

    ◆ want_client_info

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(client_info &, opt_time_point, In...)>::want_client_info = do_want_client_info
    +
    + +
    +
    + +

    ◆ want_time_point

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(client_info &, opt_time_point, In...)>::want_time_point = do_want_time_point
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01In_8_8_8_08_4-members.html b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01In_8_8_8_08_4-members.html new file mode 100644 index 000000000..efd2b3bf3 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01In_8_8_8_08_4-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::signature< Ret(const client_info &, In...)> Member List
    +
    + + + + + diff --git a/master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01In_8_8_8_08_4.html b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01In_8_8_8_08_4.html new file mode 100644 index 000000000..827a120d4 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01In_8_8_8_08_4.html @@ -0,0 +1,185 @@ + + + + + + + +Seastar: seastar::rpc::signature< Ret(const client_info &, In...)> Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::signature< Ret(const client_info &, In...)> Struct Template Reference
    +
    +
    + + + + + + + + + + + + +

    +Public Types

    +using ret_type = Ret
     
    +using arg_types = std::tuple< In... >
     
    +using clean = signature< Ret(In...)>
     
    +using want_client_info = do_want_client_info
     
    +using want_time_point = dont_want_time_point
     
    +

    Member Typedef Documentation

    + +

    ◆ arg_types

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(const client_info &, In...)>::arg_types = std::tuple<In...>
    +
    + +
    +
    + +

    ◆ clean

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(const client_info &, In...)>::clean = signature<Ret (In...)>
    +
    + +
    +
    + +

    ◆ ret_type

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(const client_info &, In...)>::ret_type = Ret
    +
    + +
    +
    + +

    ◆ want_client_info

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(const client_info &, In...)>::want_client_info = do_want_client_info
    +
    + +
    +
    + +

    ◆ want_time_point

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(const client_info &, In...)>::want_time_point = dont_want_time_point
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4-members.html b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4-members.html new file mode 100644 index 000000000..663bca04a --- /dev/null +++ b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::signature< Ret(const client_info &, opt_time_point, In...)> Member List
    +
    + + + + + diff --git a/master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4.html b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4.html new file mode 100644 index 000000000..59178dc99 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07const_01client__info_01_6_00_01opt__time__point_00_01In_8_8_8_08_4.html @@ -0,0 +1,185 @@ + + + + + + + +Seastar: seastar::rpc::signature< Ret(const client_info &, opt_time_point, In...)> Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::signature< Ret(const client_info &, opt_time_point, In...)> Struct Template Reference
    +
    +
    + + + + + + + + + + + + +

    +Public Types

    +using ret_type = Ret
     
    +using arg_types = std::tuple< In... >
     
    +using clean = signature< Ret(In...)>
     
    +using want_client_info = do_want_client_info
     
    +using want_time_point = do_want_time_point
     
    +

    Member Typedef Documentation

    + +

    ◆ arg_types

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(const client_info &, opt_time_point, In...)>::arg_types = std::tuple<In...>
    +
    + +
    +
    + +

    ◆ clean

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(const client_info &, opt_time_point, In...)>::clean = signature<Ret (In...)>
    +
    + +
    +
    + +

    ◆ ret_type

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(const client_info &, opt_time_point, In...)>::ret_type = Ret
    +
    + +
    +
    + +

    ◆ want_client_info

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(const client_info &, opt_time_point, In...)>::want_client_info = do_want_client_info
    +
    + +
    +
    + +

    ◆ want_time_point

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(const client_info &, opt_time_point, In...)>::want_time_point = do_want_time_point
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1signature_3_01Ret_07opt__time__point_00_01In_8_8_8_08_4-members.html b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07opt__time__point_00_01In_8_8_8_08_4-members.html new file mode 100644 index 000000000..cd2cbaa95 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07opt__time__point_00_01In_8_8_8_08_4-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::signature< Ret(opt_time_point, In...)> Member List
    +
    + + + + + diff --git a/master/structseastar_1_1rpc_1_1signature_3_01Ret_07opt__time__point_00_01In_8_8_8_08_4.html b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07opt__time__point_00_01In_8_8_8_08_4.html new file mode 100644 index 000000000..c1fc4b02d --- /dev/null +++ b/master/structseastar_1_1rpc_1_1signature_3_01Ret_07opt__time__point_00_01In_8_8_8_08_4.html @@ -0,0 +1,185 @@ + + + + + + + +Seastar: seastar::rpc::signature< Ret(opt_time_point, In...)> Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::signature< Ret(opt_time_point, In...)> Struct Template Reference
    +
    +
    + + + + + + + + + + + + +

    +Public Types

    +using ret_type = Ret
     
    +using arg_types = std::tuple< In... >
     
    +using clean = signature< Ret(In...)>
     
    +using want_client_info = dont_want_client_info
     
    +using want_time_point = do_want_time_point
     
    +

    Member Typedef Documentation

    + +

    ◆ arg_types

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(opt_time_point, In...)>::arg_types = std::tuple<In...>
    +
    + +
    +
    + +

    ◆ clean

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(opt_time_point, In...)>::clean = signature<Ret (In...)>
    +
    + +
    +
    + +

    ◆ ret_type

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(opt_time_point, In...)>::ret_type = Ret
    +
    + +
    +
    + +

    ◆ want_client_info

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(opt_time_point, In...)>::want_client_info = dont_want_client_info
    +
    + +
    +
    + +

    ◆ want_time_point

    + +
    +
    +
    +template<typename Ret , typename... In>
    + + + + +
    using seastar::rpc::signature< Ret(opt_time_point, In...)>::want_time_point = do_want_time_point
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1snd__buf-members.html b/master/structseastar_1_1rpc_1_1snd__buf-members.html new file mode 100644 index 000000000..58f60f286 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1snd__buf-members.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::snd_buf Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::snd_buf, including all inherited members.

    + + + + + + + + + + + + +
    bufs (defined in seastar::rpc::snd_buf)seastar::rpc::snd_buf
    chunk_size (defined in seastar::rpc::snd_buf)seastar::rpc::snd_bufstatic
    front() (defined in seastar::rpc::snd_buf)seastar::rpc::snd_buf
    iterator typedef (defined in seastar::rpc::snd_buf)seastar::rpc::snd_buf
    operator=(snd_buf &&) noexcept (defined in seastar::rpc::snd_buf)seastar::rpc::snd_buf
    size (defined in seastar::rpc::snd_buf)seastar::rpc::snd_buf
    snd_buf() (defined in seastar::rpc::snd_buf)seastar::rpc::snd_bufinline
    snd_buf(snd_buf &&) noexcept (defined in seastar::rpc::snd_buf)seastar::rpc::snd_buf
    snd_buf(size_t size_) (defined in seastar::rpc::snd_buf)seastar::rpc::snd_bufexplicit
    snd_buf(temporary_buffer< char > b) (defined in seastar::rpc::snd_buf)seastar::rpc::snd_bufinlineexplicit
    snd_buf(std::vector< temporary_buffer< char > > bufs, size_t size) (defined in seastar::rpc::snd_buf)seastar::rpc::snd_bufinlineexplicit
    + + + + diff --git a/master/structseastar_1_1rpc_1_1snd__buf.html b/master/structseastar_1_1rpc_1_1snd__buf.html new file mode 100644 index 000000000..b509dc7ea --- /dev/null +++ b/master/structseastar_1_1rpc_1_1snd__buf.html @@ -0,0 +1,131 @@ + + + + + + + +Seastar: seastar::rpc::snd_buf Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    + +
    + + + + +

    +Public Types

    +using iterator = std::vector< temporary_buffer< char > >::iterator
     
    + + + + + + + + + + + + + +

    +Public Member Functions

    snd_buf (snd_buf &&) noexcept
     
    +snd_bufoperator= (snd_buf &&) noexcept
     
    snd_buf (size_t size_)
     
    snd_buf (temporary_buffer< char > b)
     
    snd_buf (std::vector< temporary_buffer< char > > bufs, size_t size)
     
    +temporary_buffer< char > & front ()
     
    + + + + + +

    +Public Attributes

    +uint32_t size = 0
     
    +std::variant< std::vector< temporary_buffer< char > >, temporary_buffer< char > > bufs
     
    + + + +

    +Static Public Attributes

    +static constexpr size_t chunk_size = 128*1024
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1stats-members.html b/master/structseastar_1_1rpc_1_1stats-members.html new file mode 100644 index 000000000..67bc4ccb8 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1stats-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::stats Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::stats, including all inherited members.

    + + + + + + + + + + +
    counter_type typedef (defined in seastar::rpc::stats)seastar::rpc::stats
    delay_samples (defined in seastar::rpc::stats)seastar::rpc::stats
    delay_total (defined in seastar::rpc::stats)seastar::rpc::stats
    exception_received (defined in seastar::rpc::stats)seastar::rpc::stats
    pending (defined in seastar::rpc::stats)seastar::rpc::stats
    replied (defined in seastar::rpc::stats)seastar::rpc::stats
    sent_messages (defined in seastar::rpc::stats)seastar::rpc::stats
    timeout (defined in seastar::rpc::stats)seastar::rpc::stats
    wait_reply (defined in seastar::rpc::stats)seastar::rpc::stats
    + + + + diff --git a/master/structseastar_1_1rpc_1_1stats.html b/master/structseastar_1_1rpc_1_1stats.html new file mode 100644 index 000000000..b73c76729 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1stats.html @@ -0,0 +1,248 @@ + + + + + + + +Seastar: seastar::rpc::stats Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::stats Struct Reference
    +
    +
    + + + + +

    +Public Types

    +using counter_type = uint64_t
     
    + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +counter_type replied = 0
     
    +counter_type pending = 0
     
    +counter_type exception_received = 0
     
    +counter_type sent_messages = 0
     
    +counter_type wait_reply = 0
     
    +counter_type timeout = 0
     
    +counter_type delay_samples = 0
     
    +std::chrono::duration< double > delay_total = std::chrono::duration<double>(0)
     
    +

    Member Typedef Documentation

    + +

    ◆ counter_type

    + +
    +
    + + + + +
    using seastar::rpc::stats::counter_type = uint64_t
    +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ delay_samples

    + +
    +
    + + + + +
    counter_type seastar::rpc::stats::delay_samples = 0
    +
    + +
    +
    + +

    ◆ delay_total

    + +
    +
    + + + + +
    std::chrono::duration<double> seastar::rpc::stats::delay_total = std::chrono::duration<double>(0)
    +
    + +
    +
    + +

    ◆ exception_received

    + +
    +
    + + + + +
    counter_type seastar::rpc::stats::exception_received = 0
    +
    + +
    +
    + +

    ◆ pending

    + +
    +
    + + + + +
    counter_type seastar::rpc::stats::pending = 0
    +
    + +
    +
    + +

    ◆ replied

    + +
    +
    + + + + +
    counter_type seastar::rpc::stats::replied = 0
    +
    + +
    +
    + +

    ◆ sent_messages

    + +
    +
    + + + + +
    counter_type seastar::rpc::stats::sent_messages = 0
    +
    + +
    +
    + +

    ◆ timeout

    + +
    +
    + + + + +
    counter_type seastar::rpc::stats::timeout = 0
    +
    + +
    +
    + +

    ◆ wait_reply

    + +
    +
    + + + + +
    counter_type seastar::rpc::stats::wait_reply = 0
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1unmarshal__one-members.html b/master/structseastar_1_1rpc_1_1unmarshal__one-members.html new file mode 100644 index 000000000..e13a13706 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1unmarshal__one-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::unmarshal_one< Serializer, Input > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::unmarshal_one< Serializer, Input >, including all inherited members.

    + + +
    get_connection_id(Input &in) (defined in seastar::rpc::unmarshal_one< Serializer, Input >)seastar::rpc::unmarshal_one< Serializer, Input >inlinestatic
    + + + + diff --git a/master/structseastar_1_1rpc_1_1unmarshal__one.html b/master/structseastar_1_1rpc_1_1unmarshal__one.html new file mode 100644 index 000000000..917f402b8 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1unmarshal__one.html @@ -0,0 +1,108 @@ + + + + + + + +Seastar: seastar::rpc::unmarshal_one< Serializer, Input > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::unmarshal_one< Serializer, Input > Struct Template Reference
    +
    +
    + + + + + + + + + + + + + + +

    +Classes

    struct  helper
     
    struct  helper< optional< T > >
     
    struct  helper< sink< T... > >
     
    struct  helper< source< T... > >
     
    struct  helper< std::reference_wrapper< const T > >
     
    struct  helper< tuple< T... > >
     
    + + + +

    +Static Public Member Functions

    +static connection_id get_connection_id (Input &in)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper-members.html b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper-members.html new file mode 100644 index 000000000..e361c652c --- /dev/null +++ b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::unmarshal_one< Serializer, Input >::helper< T > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::unmarshal_one< Serializer, Input >::helper< T >, including all inherited members.

    + + +
    doit(connection &c, Input &in) (defined in seastar::rpc::unmarshal_one< Serializer, Input >::helper< T >)seastar::rpc::unmarshal_one< Serializer, Input >::helper< T >inlinestatic
    + + + + diff --git a/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper.html b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper.html new file mode 100644 index 000000000..afff32f3c --- /dev/null +++ b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::rpc::unmarshal_one< Serializer, Input >::helper< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::unmarshal_one< Serializer, Input >::helper< T > Struct Template Reference
    +
    +
    + + + + +

    +Static Public Member Functions

    +static T doit (connection &c, Input &in)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01optional_3_01T_01_4_01_4-members.html b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01optional_3_01T_01_4_01_4-members.html new file mode 100644 index 000000000..4843a81aa --- /dev/null +++ b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01optional_3_01T_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::unmarshal_one< Serializer, Input >::helper< optional< T > > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01optional_3_01T_01_4_01_4.html b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01optional_3_01T_01_4_01_4.html new file mode 100644 index 000000000..dd0f4be0a --- /dev/null +++ b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01optional_3_01T_01_4_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::rpc::unmarshal_one< Serializer, Input >::helper< optional< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::unmarshal_one< Serializer, Input >::helper< optional< T > > Struct Template Reference
    +
    +
    + + + + +

    +Static Public Member Functions

    +static optional< T > doit (connection &c, Input &in)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4-members.html b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4-members.html new file mode 100644 index 000000000..63cb84e8b --- /dev/null +++ b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::unmarshal_one< Serializer, Input >::helper< sink< T... > > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4.html b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4.html new file mode 100644 index 000000000..fda9449a9 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01sink_3_01T_8_8_8_01_4_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::rpc::unmarshal_one< Serializer, Input >::helper< sink< T... > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::unmarshal_one< Serializer, Input >::helper< sink< T... > > Struct Template Reference
    +
    +
    + + + + +

    +Static Public Member Functions

    +static sink< T... > doit (connection &c, Input &in)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4-members.html b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4-members.html new file mode 100644 index 000000000..239fc97a7 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::unmarshal_one< Serializer, Input >::helper< source< T... > > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4.html b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4.html new file mode 100644 index 000000000..5782bc95d --- /dev/null +++ b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01source_3_01T_8_8_8_01_4_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::rpc::unmarshal_one< Serializer, Input >::helper< source< T... > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::unmarshal_one< Serializer, Input >::helper< source< T... > > Struct Template Reference
    +
    +
    + + + + +

    +Static Public Member Functions

    +static source< T... > doit (connection &c, Input &in)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4-members.html b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4-members.html new file mode 100644 index 000000000..f376f956d --- /dev/null +++ b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::unmarshal_one< Serializer, Input >::helper< std::reference_wrapper< const T > > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4.html b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4.html new file mode 100644 index 000000000..616caa7f6 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01std_1_1reference__wrapper_3_01const_01T_01_4_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::rpc::unmarshal_one< Serializer, Input >::helper< std::reference_wrapper< const T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::unmarshal_one< Serializer, Input >::helper< std::reference_wrapper< const T > > Struct Template Reference
    +
    +
    + + + + +

    +Static Public Member Functions

    +static T doit (connection &c, Input &in)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4-members.html b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4-members.html new file mode 100644 index 000000000..0f667efa2 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::unmarshal_one< Serializer, Input >::helper< tuple< T... > > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4.html b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4.html new file mode 100644 index 000000000..6e62c504c --- /dev/null +++ b/master/structseastar_1_1rpc_1_1unmarshal__one_1_1helper_3_01tuple_3_01T_8_8_8_01_4_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: seastar::rpc::unmarshal_one< Serializer, Input >::helper< tuple< T... > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::unmarshal_one< Serializer, Input >::helper< tuple< T... > > Struct Template Reference
    +
    +
    + + + + +

    +Static Public Member Functions

    +static tuple< T... > doit (connection &c, Input &in)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1wait__signature-members.html b/master/structseastar_1_1rpc_1_1wait__signature-members.html new file mode 100644 index 000000000..edc956ba5 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1wait__signature-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::wait_signature< T > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::wait_signature< T >, including all inherited members.

    + + + +
    cleaned_type typedef (defined in seastar::rpc::wait_signature< T >)seastar::rpc::wait_signature< T >
    type typedef (defined in seastar::rpc::wait_signature< T >)seastar::rpc::wait_signature< T >
    + + + + diff --git a/master/structseastar_1_1rpc_1_1wait__signature.html b/master/structseastar_1_1rpc_1_1wait__signature.html new file mode 100644 index 000000000..3e22d75b4 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1wait__signature.html @@ -0,0 +1,128 @@ + + + + + + + +Seastar: seastar::rpc::wait_signature< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::wait_signature< T > Struct Template Reference
    +
    +
    + + + + + + +

    +Public Types

    +using type = wait_type
     
    +using cleaned_type = T
     
    +

    Member Typedef Documentation

    + +

    ◆ cleaned_type

    + +
    +
    +
    +template<typename T >
    + + + + +
    using seastar::rpc::wait_signature< T >::cleaned_type = T
    +
    + +
    +
    + +

    ◆ type

    + +
    +
    +
    +template<typename T >
    + + + + +
    using seastar::rpc::wait_signature< T >::type = wait_type
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01T_8_8_8_01_4_01_4-members.html b/master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01T_8_8_8_01_4_01_4-members.html new file mode 100644 index 000000000..4e2342239 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01T_8_8_8_01_4_01_4-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::wait_signature< future< T... > > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01T_8_8_8_01_4_01_4.html b/master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01T_8_8_8_01_4_01_4.html new file mode 100644 index 000000000..021891aea --- /dev/null +++ b/master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01T_8_8_8_01_4_01_4.html @@ -0,0 +1,128 @@ + + + + + + + +Seastar: seastar::rpc::wait_signature< future< T... > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::wait_signature< future< T... > > Struct Template Reference
    +
    +
    + + + + + + +

    +Public Types

    +using type = wait_type
     
    +using cleaned_type = future< T... >
     
    +

    Member Typedef Documentation

    + +

    ◆ cleaned_type

    + +
    +
    +
    +template<typename... T>
    + + + + +
    using seastar::rpc::wait_signature< future< T... > >::cleaned_type = future<T...>
    +
    + +
    +
    + +

    ◆ type

    + +
    +
    +
    +template<typename... T>
    + + + + +
    using seastar::rpc::wait_signature< future< T... > >::type = wait_type
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01no__wait__type_01_4_01_4-members.html b/master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01no__wait__type_01_4_01_4-members.html new file mode 100644 index 000000000..a0481eb86 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01no__wait__type_01_4_01_4-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::wait_signature< future< no_wait_type > > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01no__wait__type_01_4_01_4.html b/master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01no__wait__type_01_4_01_4.html new file mode 100644 index 000000000..4993df6d7 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1wait__signature_3_01future_3_01no__wait__type_01_4_01_4.html @@ -0,0 +1,124 @@ + + + + + + + +Seastar: seastar::rpc::wait_signature< future< no_wait_type > > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::wait_signature< future< no_wait_type > > Struct Reference
    +
    +
    + + + + + + +

    +Public Types

    +using type = no_wait_type
     
    +using cleaned_type = future<>
     
    +

    Member Typedef Documentation

    + +

    ◆ cleaned_type

    + +
    +
    + + + + +
    using seastar::rpc::wait_signature< future< no_wait_type > >::cleaned_type = future<>
    +
    + +
    +
    + +

    ◆ type

    + +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1wait__signature_3_01no__wait__type_01_4-members.html b/master/structseastar_1_1rpc_1_1wait__signature_3_01no__wait__type_01_4-members.html new file mode 100644 index 000000000..db2605f8b --- /dev/null +++ b/master/structseastar_1_1rpc_1_1wait__signature_3_01no__wait__type_01_4-members.html @@ -0,0 +1,84 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::wait_signature< no_wait_type > Member List
    +
    +
    + +

    This is the complete list of members for seastar::rpc::wait_signature< no_wait_type >, including all inherited members.

    + + + +
    cleaned_type typedef (defined in seastar::rpc::wait_signature< no_wait_type >)seastar::rpc::wait_signature< no_wait_type >
    type typedef (defined in seastar::rpc::wait_signature< no_wait_type >)seastar::rpc::wait_signature< no_wait_type >
    + + + + diff --git a/master/structseastar_1_1rpc_1_1wait__signature_3_01no__wait__type_01_4.html b/master/structseastar_1_1rpc_1_1wait__signature_3_01no__wait__type_01_4.html new file mode 100644 index 000000000..a09cf8a6b --- /dev/null +++ b/master/structseastar_1_1rpc_1_1wait__signature_3_01no__wait__type_01_4.html @@ -0,0 +1,124 @@ + + + + + + + +Seastar: seastar::rpc::wait_signature< no_wait_type > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::rpc::wait_signature< no_wait_type > Struct Reference
    +
    +
    + + + + + + +

    +Public Types

    +using type = no_wait_type
     
    +using cleaned_type = void
     
    +

    Member Typedef Documentation

    + +

    ◆ cleaned_type

    + +
    +
    + + + + +
    using seastar::rpc::wait_signature< no_wait_type >::cleaned_type = void
    +
    + +
    +
    + +

    ◆ type

    + +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1rpc_1_1wait__type.html b/master/structseastar_1_1rpc_1_1wait__type.html new file mode 100644 index 000000000..8cc10f5e5 --- /dev/null +++ b/master/structseastar_1_1rpc_1_1wait__type.html @@ -0,0 +1,82 @@ + + + + + + + +Seastar: seastar::rpc::wait_type Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::rpc::wait_type Struct Reference
    +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1scheduling__group__key__config-members.html b/master/structseastar_1_1scheduling__group__key__config-members.html new file mode 100644 index 000000000..bdaae929b --- /dev/null +++ b/master/structseastar_1_1scheduling__group__key__config-members.html @@ -0,0 +1,90 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::scheduling_group_key_config Member List
    +
    + + + + + diff --git a/master/structseastar_1_1scheduling__group__key__config.html b/master/structseastar_1_1scheduling__group__key__config.html new file mode 100644 index 000000000..4168c3dc3 --- /dev/null +++ b/master/structseastar_1_1scheduling__group__key__config.html @@ -0,0 +1,199 @@ + + + + + + + +Seastar: seastar::scheduling_group_key_config Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::scheduling_group_key_config Struct Reference
    +
    +
    +

    Detailed Description

    +

    Represents a configuration for a specific scheduling group value, it contains all that is needed to maintain a scheduling group specific value when it needs to be created, due to, for example, a new scheduling_group being created.

    +
    Note
    is is recomended to use make_scheduling_group_key_config in order to create and configure this syructure. The only reason that one might want to not use this method is because of a need for specific intervention in the construction or destruction of the value. Even then, it is recommended to first create the configuration with make_scheduling_group_key_config and only the change it.
    +
    +

    #include <seastar/core/scheduling.hh>

    + + + + + + +

    +Public Member Functions

     scheduling_group_key_config ()
     
     scheduling_group_key_config (const std::type_info &type_info)
     
    + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +size_t allocation_size
     The allocation size for the value (usually: sizeof(T))
     
    +size_t alignment
     The required alignment of the value (usually: alignof(T))
     
    +std::type_index type_index
     Holds the type information for debug mode runtime validation.
     
    +std::function< void(void *)> constructor
     A function that will be called for each newly allocated value.
     
    +std::function< void(void *)> rename
     A function that will be called for each value after the scheduling group is renamed.
     
    std::function< void(void *)> destructor
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ scheduling_group_key_config() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + +
    seastar::scheduling_group_key_config::scheduling_group_key_config ()
    +
    +inline
    +
    +

    Constructs a default configuration

    + +
    +
    + +

    ◆ scheduling_group_key_config() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + +
    seastar::scheduling_group_key_config::scheduling_group_key_config (const std::type_info & type_info)
    +
    +inline
    +
    +

    Creates a configuration that is made for a specific type. It does not contain the right alignment and allocation sizes neither the correct construction or destruction logic, but only the indication for the intended type which is used in debug mode to make sure that the correct type is reffered to when accessing the value.

    Parameters
    + + +
    type_info- the type information class (create with typeid(T)).
    +
    +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ destructor

    + +
    +
    + + + + +
    std::function<void (void*)> seastar::scheduling_group_key_config::destructor
    +
    +

    A function that will be called for each element that is about to be dealocated.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1data__type__for.html b/master/structseastar_1_1scollectd_1_1data__type__for.html new file mode 100644 index 000000000..8aa6b6ee9 --- /dev/null +++ b/master/structseastar_1_1scollectd_1_1data__type__for.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: seastar::scollectd::data_type_for< T, En > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::scollectd::data_type_for< T, En > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::scollectd::data_type_for< T, En >:
    +
    +
    + + +seastar::scollectd::data_type_for< typed< T > > + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1data__type__for.png b/master/structseastar_1_1scollectd_1_1data__type__for.png new file mode 100644 index 0000000000000000000000000000000000000000..acf1385fcea6f9c565278cc4ff9eb4da8bff6863 GIT binary patch literal 1044 zcmeAS@N?(olHy`uVBq!ia0y~yU=#B(0?)>Rb+784HqnnCgY|F!m9!~X zAM+;WZ+hSx^J`hXSATuh`rUTeChD~6^lu6c+-G;Z@x1wE!HmGojgO9>ustVg;hz7M z^@@-1=IHMGk-~b*dh|JB3k>zQ?mm>$TE}}&WXBGd!@+ZcpBQm0Ynbf6<#Et&@9!;= zGhf$Usk-{HxMt4dOFR2_%sIXDLDIE1WnKE`iyfWyVkd2`eWELDBwl;H{=j0TKTi60 z{O<>d*iP@R4GDj7`rYIz$)d{Lao2vGp7ndf{yBx&F>&9fPk527C;w%7#epp~w-#P} zx~D|$YQpIUHvQiwFPiIk_npjK_qA@Tm>;yguAKaj$>7RSJEk4YYMIPBFAg85F1l&I z?(c(rQzeZLwA!70_wB3Dxx9w`>*F`{GyK~*iQ6Hhh_S;2vlRpmwXi#vn}^_-lF3` z()Wm(r>19_inwQ&m)<0isWB>=T01?0t}snk^3<-fV!Lnk@Y(sH=6^PiDQlSe7#!_C4>VRkO?v*yzB_6E#<1))*XD=cG?#gHF>0Oj z-PiY@ZBkFYJh@BKRC?tP!=nCTS1UxU-;LaS!Rn#;!ry+2vrix0bLAb^X3<~l)xi%Q zg-OqQG$*O3IYIQ~O7BvMTZKJejZ`kbU3_gq-~7i5k1s8jFT7bBUtl>mhWpK_&oLJ! zc+Y=jP_qB^t(^NEhqu1n{f}8r^x=K8tj!DKoC3eZ=zR;!mD%^^+N)HFU#WZ7e4YOB zdgLqp^gB}1r~h4gIz{YPYJDfWPj!N|$*wum&n=e9k(~4VV%*)g3NOo^zp%+N4U$!v zX~_Hcoz0{rvomIFQ`vh>eBq=sJ25|&@XfR(rnQ1v yCwr~mDSQ69j~u!oMH82-P@kTAdt1o=@9YyYEiWv!Hmm_=VFpiEKbLh*2~7aW!tb5{ literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01is__callable_35c0ca2f0a42f3af2902b730a47b963e6.html b/master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01is__callable_35c0ca2f0a42f3af2902b730a47b963e6.html new file mode 100644 index 000000000..e9b242ee1 --- /dev/null +++ b/master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01is__callable_35c0ca2f0a42f3af2902b730a47b963e6.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: seastar::scollectd::data_type_for< T, std::enable_if_t< is_callable< T >::value, void > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::scollectd::data_type_for< T, std::enable_if_t< is_callable< T >::value, void > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::scollectd::data_type_for< T, std::enable_if_t< is_callable< T >::value, void > >:
    +
    +
    + + +seastar::scollectd::data_type_for< std::invoke_result_t< T > > + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01is__callable_35c0ca2f0a42f3af2902b730a47b963e6.png b/master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01is__callable_35c0ca2f0a42f3af2902b730a47b963e6.png new file mode 100644 index 0000000000000000000000000000000000000000..06a4625be08ac3f20520c1f168ffc121be80a2b8 GIT binary patch literal 1441 zcmcJPdpOez7{`C3MJ_u%!lbh5pmb3=VwpX2O*`)LD2bg@N0x*RZ8Ebda$J{HRB{Q4 zKJW9q@B4k<=Y5{{kN5Mu8Gb$<`Z}gM z008KtkGKT@07#QXyC zz~?BS9{OS*%bjU{-*wO$J?BUF3~(?MQExy{Xu|ahM1nS?k$;ts!kn3; z8kQlAWG%A zU$ltL33DtX-XyxntmxH{#N0vSKNmO5-;o|+?t6dwGQ8~M+DbY;2^Ujut_0JiGZ7DW zV1G+#@#Gv7LA~3{J%*mt(U7C?`^4UZD$A!!ncC`ckKB}QzS$7(s$KzL|;eWqwc`oLdE$z>HlLYF!FdTKdiPO`aq zJJ;1#q+mQbJ!^PVGPr|kIAP%(Morc{6=Y$BP@0M;1_V`8XgqEYdOVB3!^~eXN3vmc z65<)p0B342skP@zPW*bz|K8UTi^&hSQX^ol;S|&cG6ZbyVYOadWiTeUY~7fNBS$4X z3TxAxb{T|RTkr1Rq~-xogP~dBs%}8s5&u);mr7Ris7`Hj{yJN-hLhPhO9iD03F}`x z0^4|jrL`n-NFEVLzs-?7uWm#n(|*8BVM>7-Hr)78&Y6LtPQiY3=HCP?TEL0-}J}9qXUG|0P-ipmTB*!$zJ_tz> zi>JreEG)@_VsB^NR-Vh0?_hTMv$ww0Tx$}mT@%RyF?08C;u>X82>JsfC9ADmiY0ph zTC$Ro&sA0t;Sm0@2(i3##rVy34s4ahw)LK#opSuEJ22idRLf=;g`D`%f0dC1`FgEKL1Rit-#{3h$jk5tKrT}${;VU|ZZyqH~lNo<=+ zuW$6lqSEX}oRbcRco8@_nI1%v^RxJHRNc81sJF7O{Jh0IrDsR~@z?dZ@xrUtF>wZh zth@w!$>o=33A5t(<0AjPLgpQ3!$A|Kzo;SY>C|B1&aM{T6{R$3Lf@;;DsxV+tF27Y z$`kiX;N^@nvK1kcS27@Zw0j^zW;EUr^_Y2OTb`@Jdpf#baz1Vz2CJRL%HJ~A)j}CL z{R_1xqWFl^(P&2Xq6d3SC)7304z#&-weU3_A91nUyXkDRRuLOYLl-sJy&?(k59l^p z(Vys==4A9qV#y$1FpzArAqW&bA^lzRy+)D+2je1}s%%%Kxi%rzwshiCr}~ixlb%mv literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__floefb1fea89ef879d2424c4cbcbf5c1652.html b/master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__floefb1fea89ef879d2424c4cbcbf5c1652.html new file mode 100644 index 000000000..c496ddceb --- /dev/null +++ b/master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__floefb1fea89ef879d2424c4cbcbf5c1652.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: seastar::scollectd::data_type_for< T, std::enable_if_t< std::is_floating_point_v< T >, void > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::scollectd::data_type_for< T, std::enable_if_t< std::is_floating_point_v< T >, void > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::scollectd::data_type_for< T, std::enable_if_t< std::is_floating_point_v< T >, void > >:
    +
    +
    + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__floefb1fea89ef879d2424c4cbcbf5c1652.png b/master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__floefb1fea89ef879d2424c4cbcbf5c1652.png new file mode 100644 index 0000000000000000000000000000000000000000..cebe20c3ba52383a9d5c06481c79dba07ae20959 GIT binary patch literal 1535 zcmcgsX;71A5PmU(U_h{AK+Z&B06(EN;9#*qf|x)OB49uT#DIw0hQT0+CB_3hJ~=`- zl-pK73rMkYRDqash*6P(B!Zj*%6$_-0;Zw;(I5Tao!Q-IcXnoLCFD zo2e8M1Aq-E1$I?MC~VZcL7c+rxYFIpa=BaqM<=D{lIwX2^tTFyLgkx17)7WW$#8Z9 zilTK9zjU_*Kskv@I^cd@X)3qv!o*JXI4r@;du-H}3(arfLNe3wQ>h0ea zrun5Y;73Fh)emLw|;OaS^WfQoboU#U4hr zb0bg5NCHx?&_Bq+yQM<)x7%~$t*>O}95x5z-BDv{%WV5o7a1Fs z*E-rH{iB;>eGIM;Wd}tdpbT*6f0U->Y)L^Lf}Cc4Ae zc$-knsoeehJhhB7YiRw~$_&RtR>aa?l1USut#8Z8S5>i}qJk2N7yY-btz#!e!299%Spv($|RwWB8HZM3ZlO&PqLwP8g3J z8_1M=|#f72$I1SD*u~QI&i_!tz3MDZtZ_0O5OC#q>22G!y_l$iN!|_3e!c zcxg-O1|d*v1wg1;K>u$t$mJi(lbXsxfDg&VEBddq@u>fo*lymSWhfd>Wf@Y2<{}C- z%1Qg&cXlIio?lcb){GS$)l?__q4uul*oG3465U$VvG5R)@OxU4j|1!!s1{dCf^DL1 zqU`uCOeLz|aE=d6-LC#LBh0-dA@tXkX!&$mV=0r`mMqTCQ|WdjcDqQrT#nUU-&+Tt zt`qN&XJ0i~Msv?D?dvqbX`OKB01}0qIkB9@24gp9^aW;F{M3v zy3jUROI0_JJ=S?&qsYy?VG}S?wl5mh5M;FB7Fv8R^EO-^zLAeJ?#(5M}!=@FFk?Y1wA5txPU~)|UT67XyCp7xt zo){LF9w`a_DsX|PUN~3V&K9`Hi%>LJD*8xnMO??X>)O?k#s+;(T)(!vPBWIxk&fKye^b@7+JMx z@oZW`-fJf=*qXNstl~A^7z}La3nzjR>*6TT-)MHNFAk-N=GwffvY{h#2ExNkYh+gz zW=P(I05Op{SBYoR8e~Ucz1HyBS>V&$vt4Prkx-=x5CbN6P+;R0KL*gTyRm*rMkdOa kl;UhChiQ<5Vr`{gRIm&iQw}ImJZk``WM@*Dz3-L308b*eQUCw| literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__int8bb9c47ea63565f41486d8397e60995d.html b/master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__int8bb9c47ea63565f41486d8397e60995d.html new file mode 100644 index 000000000..346f8e1e4 --- /dev/null +++ b/master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__int8bb9c47ea63565f41486d8397e60995d.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: seastar::scollectd::data_type_for< T, std::enable_if_t< std::is_integral_v< T > &&std::is_unsigned_v< T >, void > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::scollectd::data_type_for< T, std::enable_if_t< std::is_integral_v< T > &&std::is_unsigned_v< T >, void > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::scollectd::data_type_for< T, std::enable_if_t< std::is_integral_v< T > &&std::is_unsigned_v< T >, void > >:
    +
    +
    + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__int8bb9c47ea63565f41486d8397e60995d.png b/master/structseastar_1_1scollectd_1_1data__type__for_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__int8bb9c47ea63565f41486d8397e60995d.png new file mode 100644 index 0000000000000000000000000000000000000000..e49147852a55d0a1f70acaa6373d9e9ff35a2aef GIT binary patch literal 1743 zcmcgtdpOf;9RDe~Wfe`Q>#Q0@?$X7^%q80l%P1NaB4r1Oa*1hjIx3eVmxNFgC$Xd~ zhanTok|?o|vDR%ex3S!Ie)XJx`}e%h^S_xYv}T^u25o7DgSfZ(w9 zZUC?%1GI@ME5S2w>ti{1Z6p%h9pv&K=I1eKRC>z~#LwN_+`KAfP#b)zM7p_<01)(J z^>(g|*fazBpiI9BGR zUh28Y;z;4x+y|H|lQlq*JzOF?N`z>VxP3|w*Ejl(zO|u?0_XZ9_2%yG;vAN3$Mp%! z=-!n1h2JRKY4{fF8t)eWaCwt@9rS#D?+NmV)qz|G#W{XN(~#t!-VqDS=#%mM^|c*O zZj`}wzDWFgCT~QdmM?D^&`qoQi094vxlOi?^mf89gQW&B(g<3uan)RPgArG}SF&2w zZ17mr)zbdOXYSc|Uj+*9vC{Fp?m!YT)n?d-rjM12eLY$8;=pJvobSCr^tunR8p~7Z zCF?QcjfHg~g~`PQ&fV_9kIC@&WSSB8G5)QV+2A(|M9e14zAZi;+jYD;cVcQosP(qD z9(ng!aqen+%5THj^7|Q?Go}Q~TaJbc<gtHR90sN_o8+X})f#bF1J_d~i>DiqMZV6p9XoJEoVZ!Jqf{2m zMl3lkwy1rVtGH&u9)vDTjZ3O>8N6vExfWzM^5B28GT=HO`FdCk-fahtltIq|g>YA( zi#4xlePLi~zF-EZHs>!YU;)j5s%IkFh6}t~YfMO0V+$Q>us!@OX)*h{JRG6w+8bnpIxRXa8bCoE=ToX{b ziR}$hdcZ|LjFB0ow~=H4Bba6lV z%n&-j!q}2$>Y*A@9S`Snf}@7YU%w=iGoEeX2mdWy4i#=Z6jy)yB6@cCG(Yvu8DKkAZqv5;$Z!`QE6hHfFLAL3UJmQa3wl46SQMTQopqUFldChs0{o=c~YS`6~57>O-U-@HQK=g!O2);EnG4tO7o z)qOHwsMla2@_am2glET(eX4~{Ou?Ma?iaRiFdnzv$6mT%*;fsLL3&uP*v~D*eqO4v z3(AHDezLgAh2K9t$zOIoHhZ%InIvSmu8uz&j83uoYL~Ot-%@vv^JPD6G3jZxf7D4B zTLFsN3&?npGfF1S7rp~ogw3LpEwSx91igW6ho)899(7q+Fp&~Ddd`(b^{vwt5zITJQbAlb6QY7qKjdF VGP8~@-UFu(fOBxMud+Q({}( + + + + + + +Seastar: seastar::scollectd::data_type_for< typed< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::scollectd::data_type_for< typed< T > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::scollectd::data_type_for< typed< T > >:
    +
    +
    + + +seastar::scollectd::data_type_for< T, En > + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1data__type__for_3_01typed_3_01T_01_4_01_4.png b/master/structseastar_1_1scollectd_1_1data__type__for_3_01typed_3_01T_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..036c343b7d0266775496511d50879316c700811c GIT binary patch literal 1004 zcmeAS@N?(olHy`uVBq!ia0y~yU=#F=LxV!zt1J~i)3#uB09XYS4yeJQipR4u?bcE;hjM<=;H zsJ@&kwzH)B+ww)$T#w}zo!rsl@K*QW$(=rGt34bA9d^ViZm#Q#dTUkJ*IyjN_FZ!N z-S4c^FKdRJR${WZAb5#5{RQD??s3&ILoW)TVNw@yS>|1kn zy6N}KTFd8a3o9ezc@Av9BA#!cJMWrF+l=YI0_WZ_w)lPVUQrakl;86;@>^wA@=ZGQ zW1gL^=l2V)Hzs{4FRj;`|8#3<-2WeYBPacvR2RB0;{CKG?=R|GyHEP!KP5)xi&e#m`SqIaAOV2lK#)*eg!UVHFq372Yt$N6ICV7=rOmskG28<2L~Dd+mb z7yd!yZ``ZPw!0b4ITvZ4Wf>&fkQd`uyI!90j?3i@jB&4fS2~#I z9eTRiO-}WE)9bSg;j?^Le=y(Gk6%;HyyhiPR-)X-oxy%BYP_+70=>8XKVz4xRfU4M SXdEzWGI+ZBxvX + + + + + + +Seastar: seastar::scollectd::is_callable< T, std::enable_if_t< std::is_fundamental_v< T >, void > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::scollectd::is_callable< T, std::enable_if_t< std::is_fundamental_v< T >, void > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::scollectd::is_callable< T, std::enable_if_t< std::is_fundamental_v< T >, void > >:
    +
    +
    + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1is__callable_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__fundam691d139f22c6f61584588d14c6b15105.png b/master/structseastar_1_1scollectd_1_1is__callable_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is__fundam691d139f22c6f61584588d14c6b15105.png new file mode 100644 index 0000000000000000000000000000000000000000..12a96afa0280d68a71876aa94c75c80a634e0519 GIT binary patch literal 1151 zcmcJPeK6Yx7{`BRIoc+&b~V~+vp+EDw2G;>lA~Pqn<7l-T&8LvbdHcBG-PQ_d%aQS zCBbUBdhM#x>WfUG7L3$u7T0=9#Cc7q{GyZ}{gLdq-LALW|9kGf&-e4(J%4@gx#uP& zgpAvJcrO3|IPmj;Z~!ntP^OrhqMf+yn2nk> zxtDAG!GnrQOFDf?YWquZU0fL(><8QUb+_MvO1b-ya(|7E^hs>OAo7mgNY-GeRiXOSrj6QI$Kd#LBX2q01 z-OZOdD;#iEzNRxzEHxApR5VbG6J-z@(go{ELPswpv?PVhTlZy>JoN(TRXe|K`Z-Td z@Q@3l+7%Ktp4>yj6cpJlomP2hf=1wRRnSN^5ti>7wrrLMp4rCJekx`tapf#EW)mjXHh_m5$rVUZ6o_aSl3rTr% zE?S|Q+cYn}P(FD5KpUQRjJFs!dZSi1dYD8huQ)3F;p=>f?uU$NaUNW^b0>j9E88 zAN0*m3C;}idEQ5321+;-+QJ_-2{z!Z@6ulX-rp*2K;B_OK4GKXe>c3G_&kCil#K{xI@! zi?MUvaPDpBZCIm7pNRLmlK|CPl1O?{!nC(u)OBKyFLQ-sVFM@MTD~WmXd+UnulNT zA(jJcP1JMMTSg~%;O)*1(B2)2RpS?^rpTSd4)qIav|%$BPXThOnfT(;|LUKEFEj#; X_8vF + + + + + + +Seastar: seastar::scollectd::is_callable< T, std::enable_if_t<!std::is_void_v< std::invoke_result_t< T > >, void > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::scollectd::is_callable< T, std::enable_if_t<!std::is_void_v< std::invoke_result_t< T > >, void > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::scollectd::is_callable< T, std::enable_if_t<!std::is_void_v< std::invoke_result_t< T > >, void > >:
    +
    +
    + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1is__callable_3_01T_00_01std_1_1enable__if__t_3_9std_1_1is__void__v6ef63c309456a52af7019db17223ca10.png b/master/structseastar_1_1scollectd_1_1is__callable_3_01T_00_01std_1_1enable__if__t_3_9std_1_1is__void__v6ef63c309456a52af7019db17223ca10.png new file mode 100644 index 0000000000000000000000000000000000000000..265b80be2293317d2300b6d697b83535744695f7 GIT binary patch literal 1345 zcmeAS@N?(olHy`uVBq!ia0y~yU2mw#|0i;u87S%cZ5W!$455Tv6qu$E1l%sv|T!jV4WLYMrE_?5T;$ zS+Q5-YV=3PNl`JTo>B=5b*88+O)bFyXMt(z~J^M{j~I|(dnsM0w#U2><*Ze0(4gGYMf^LOGxpdW*{ z#Jnc;s4Pvu!r@=2q~rq%kR6;2j1~{M4=_kH?2gc2V4iUB`t)8V0|rhA=dijoYXZZ& z0`EPWyRAQbN^UG zh%Vf_W!8^6#;b)TCtogken4(h^l|o`F>CH!-Esfd%YLuQ7@G#=b*f*sw=&Hrj$Co_ zhwj2x8@Zhr=X`1mU{K!F@~e#RKwXU3tF>>E-hJCv6SH6Z>f7b|mQ#{X@Bg(h#J;bx z<#_1n8&;e*`qNS>wp(5Dyz{(bV%+v8mt$V7IDPZi%59lv9!<-hb7gx?!_mi4>oqsO zJYDX)VsZh zcX3>;I(9qhFNgbeQ@iu6Quo(NN*|lcxpmvq$}f7;AOFY|YcKr0z0~rq)$QY^A+=$9 zb_S($_Uh$q+v8q*``&7~UFCbTetE3;erIREU9*iPPm|6@w-}{-{wq$IK0AKRR2hbkcLyt~D<(d+AU^MA%Ix$UQKz9#97>{31VzrQu|B3vr|idKs{xL%fT zE59vXrkJN3vVZg3XPazy*w($5-XOnu$JT&SsZzsN$2a_WFOvKI&ia&^Zz_rnZI?M2 z>}UM1{>orK!P@n2xRdRY`h5)VCT#psr75rT=El1DqX!04&dJqfMhAzmVButYx0u}f3hpeb!19j4)78&qol`;+0L|TIvH$=8 literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1scollectd_1_1options-members.html b/master/structseastar_1_1scollectd_1_1options-members.html new file mode 100644 index 000000000..8d9eccb12 --- /dev/null +++ b/master/structseastar_1_1scollectd_1_1options-members.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::scollectd::options Member List
    +
    +
    + +

    This is the complete list of members for seastar::scollectd::options, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + +
    collectdseastar::scollectd::options
    collectd_addressseastar::scollectd::options
    collectd_hostnameseastar::scollectd::options
    collectd_poll_periodseastar::scollectd::options
    describe(options_descriptor &descriptor) constseastar::program_options::option_group
    mutate(options_mutator &mutator)seastar::program_options::option_group
    name() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    operator bool() constseastar::program_options::option_groupinline
    operator=(option_group &&)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    operator=(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(option_group *parent, std::string name)seastar::program_options::option_groupexplicit
    option_group(option_group *parent, std::string name, unused)seastar::program_options::option_groupexplicit
    option_group(option_group &&) (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    used() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    value_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    values() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    values() (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    ~option_group()=default (defined in seastar::program_options::option_group)seastar::program_options::option_groupvirtual
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1options.html b/master/structseastar_1_1scollectd_1_1options.html new file mode 100644 index 000000000..745c797d3 --- /dev/null +++ b/master/structseastar_1_1scollectd_1_1options.html @@ -0,0 +1,280 @@ + + + + + + + +Seastar: seastar::scollectd::options Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::scollectd::options Struct Reference
    +
    +
    +
    +Inheritance diagram for seastar::scollectd::options:
    +
    +
    + + +seastar::program_options::option_group + +
    + + + + + + +

    +Public Types

    +using value_list_type = boost::intrusive::list< basic_value, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    +using option_group_list_type = boost::intrusive::list< option_group, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    + + + + + + + + + + + + + + + + +

    +Public Member Functions

    operator bool () const
     Does the option group has any values contained in it?
     
    +bool used () const
     
    +const std::string & name () const
     
    +const value_list_type & values () const
     
    +value_list_type & values ()
     
    void describe (options_descriptor &descriptor) const
     
    void mutate (options_mutator &mutator)
     
    + + + + + + + + + + + + +

    +Public Attributes

    program_options::value< bool > collectd
     Enable collectd daemon. More...
     
    program_options::value< std::string > collectd_address
     Address to send/broadcast metrics to. More...
     
    program_options::value< unsigned > collectd_poll_period
     Poll period (ms). More...
     
    program_options::value< std::string > collectd_hostname
     
    +

    Member Function Documentation

    + +

    ◆ describe()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::describe (options_descriptordescriptor) const
    +
    +inherited
    +
    +

    Describe the content of this option group to the visitor.

    +

    The content is visited in a depth-first manner:

      +
    • First the option groups itself is visited with options_descriptor::visit_group_start(). If this returns false the entire content of the group, including all its subgroups and values are skipped and options_descriptor::visit_group_end() is called immediately. Otherwise visiting the content of the group proceeds.
    • +
    • All the values contained therein are visited. For each value the following happens:
        +
      • First options_descriptor::visit_value_metadata() is called with generic metadata that all values have. If this return false the value is skipped, otherwise visiting the value proceeds.
      • +
      • Then the appropriate overload of options_descriptor::visit_value() is called, with a pointer to the default value of the respective value. The pointer is null if there is no default value.
      • +
      • For selection_value, options_descriptor::visit_selection_value() will be called instead of options_descriptor::visit_value(). After the value is visited, the option_group instance belonging to each candidate (if set) will be visited.
      • +
      +
    • +
    • All the nested option_group instances in the current group are visited.
    • +
    • Finally options_descriptor::visit_group_end() is called.
    • +
    + +
    +
    + +

    ◆ mutate()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::mutate (options_mutatormutator)
    +
    +inherited
    +
    +

    Mutate the content of this option group by the visitor.

    +

    The visiting algorithm is identical to that of describe(), with the following differences:

      +
    • options_mutator::visit_value() is allowed to mutate the value through the passed-in reference. It should return true if it did so and false otherwise.
    • +
    • When visiting a selection value, only the nested group belonging to the selected value is visited afterwards.
    • +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ collectd

    + +
    +
    + + + + +
    program_options::value<bool> seastar::scollectd::options::collectd
    +
    + +

    Enable collectd daemon.

    +

    Default: false.

    + +
    +
    + +

    ◆ collectd_address

    + +
    +
    + + + + +
    program_options::value<std::string> seastar::scollectd::options::collectd_address
    +
    + +

    Address to send/broadcast metrics to.

    +

    Default: 239.192.74.66:25826.

    + +
    +
    + +

    ◆ collectd_hostname

    + +
    +
    + + + + +
    program_options::value<std::string> seastar::scollectd::options::collectd_hostname
    +
    +
    + +

    ◆ collectd_poll_period

    + +
    +
    + + + + +
    program_options::value<unsigned> seastar::scollectd::options::collectd_poll_period
    +
    + +

    Poll period (ms).

    +

    Frequency of sending counter metrics (0 disables). Default: 1000.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1options.png b/master/structseastar_1_1scollectd_1_1options.png new file mode 100644 index 0000000000000000000000000000000000000000..2431dcf90886f7b7d03d25993525d393bbac4f43 GIT binary patch literal 1016 zcmeAS@N?(olHy`uVBq!ia0vp^FM+s&gBeJgI@;&~DTx4|5ZC|z{{xvX-h3_XKQsZz z0^J>v#P-tj0n6R2&5|dI{&w^6s+e_+|s{8LU`d5A4v~JJ$fKXfax@D_YZF{l=Mwm=)6F9`d^kY{ZgL8(&rQ5k8 zR}wwaFE|DqSNwX5JHgkFE5Vz1TrhW8=Bze>$sH$veisx3`W;BTQs7lm3eSl9ap2bR zJ+3ZAe~nglcr34za#P{$U+Q#mZU60x`}uWU(_YlR7ry*yM%(V0;nR<6Y|KskQg!^s z>bci-Zu~8~q`Ks;qso)qyJ_2VuHD&fVq4Z_=(?Gub8Tw1-Q+y^}u=(yiWmx;l#W@~-8jZ_mE_Y2|n5W>$XK%FA!=YQLYH zwd?ouz-2o5dr#krX1ly#gA{S`z7e?o!<95%B&muJp$6F6|alv%>*@PvDLix==YTQ&1FS@EsB z9>B_c$DjRdw-Oi~=-k7V+{N<&_OQAF=gO(+06&+7RpWeGI zbTi|nFl)vyFPSg#EmxYOrOvtlEp8*6t?|xZLq7IwzpXB?cY4_V@s>MOFsUc z@#WJSU4Nx{QBp^|zw3OpQ~&Gqt?bTayYJ6z&w4U1SzE=tAlQEW-sl$3sb{ou{NKjL z`%S!L6@BI2`c(Y`(@WBF{J1{+mTDJypkt}opbNrx_n%d4F=+V57-GJ&V~vaW4q!HA N@O1TaS?83{1OOV?+v@-T literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1scollectd_1_1registration-members.html b/master/structseastar_1_1scollectd_1_1registration-members.html new file mode 100644 index 000000000..9ccbf8e50 --- /dev/null +++ b/master/structseastar_1_1scollectd_1_1registration-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::scollectd::registration Member List
    +
    +
    + +

    This is the complete list of members for seastar::scollectd::registration, including all inherited members.

    + + + + + + + + + + +
    operator=(const registration &)=delete (defined in seastar::scollectd::registration)seastar::scollectd::registration
    operator=(registration &&)=default (defined in seastar::scollectd::registration)seastar::scollectd::registration
    registration()=default (defined in seastar::scollectd::registration)seastar::scollectd::registration
    registration(const type_instance_id &id) (defined in seastar::scollectd::registration)seastar::scollectd::registration
    registration(type_instance_id &&id) (defined in seastar::scollectd::registration)seastar::scollectd::registration
    registration(const registration &)=delete (defined in seastar::scollectd::registration)seastar::scollectd::registration
    registration(registration &&)=default (defined in seastar::scollectd::registration)seastar::scollectd::registration
    unregister() (defined in seastar::scollectd::registration)seastar::scollectd::registrationinline
    ~registration() (defined in seastar::scollectd::registration)seastar::scollectd::registration
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1registration.html b/master/structseastar_1_1scollectd_1_1registration.html new file mode 100644 index 000000000..bb63cd102 --- /dev/null +++ b/master/structseastar_1_1scollectd_1_1registration.html @@ -0,0 +1,115 @@ + + + + + + + +Seastar: seastar::scollectd::registration Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::scollectd::registration Struct Reference
    +
    +
    +

    Detailed Description

    +

    Anchor for polled registration. Iff the registered type is in some way none-persistent, use this as receiver of the reg and ensure it dies before the added value(s).

    +

    Use: uint64_t v = 0; registration r = add_polled_metric(v); ++r; <scope end, above dies>

    +
    +

    #include <seastar/core/scollectd.hh>

    + + + + + + + + + + + + + + + + +

    +Public Member Functions

    registration (const type_instance_id &id)
     
    registration (type_instance_id &&id)
     
    registration (const registration &)=delete
     
    registration (registration &&)=default
     
    +registrationoperator= (const registration &)=delete
     
    +registrationoperator= (registration &&)=default
     
    +void unregister ()
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1typed-members.html b/master/structseastar_1_1scollectd_1_1typed-members.html new file mode 100644 index 000000000..93e8bea08 --- /dev/null +++ b/master/structseastar_1_1scollectd_1_1typed-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::scollectd::typed< T > Member List
    +
    +
    + +

    This is the complete list of members for seastar::scollectd::typed< T >, including all inherited members.

    + + + + +
    type (defined in seastar::scollectd::typed< T >)seastar::scollectd::typed< T >
    typed(data_type t, T &&v) (defined in seastar::scollectd::typed< T >)seastar::scollectd::typed< T >inline
    value (defined in seastar::scollectd::typed< T >)seastar::scollectd::typed< T >
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1typed.html b/master/structseastar_1_1scollectd_1_1typed.html new file mode 100644 index 000000000..06971c0c9 --- /dev/null +++ b/master/structseastar_1_1scollectd_1_1typed.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: seastar::scollectd::typed< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::scollectd::typed< T > Struct Template Reference
    +
    +
    + + + + +

    +Public Member Functions

    typed (data_type t, T &&v)
     
    + + + + + +

    +Public Attributes

    +data_type type
     
    +T value
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1typed__value-members.html b/master/structseastar_1_1scollectd_1_1typed__value-members.html new file mode 100644 index 000000000..45f91efc4 --- /dev/null +++ b/master/structseastar_1_1scollectd_1_1typed__value-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::scollectd::typed_value Member List
    +
    +
    + +

    This is the complete list of members for seastar::scollectd::typed_value, including all inherited members.

    + + + + + + +
    type() const (defined in seastar::scollectd::typed_value)seastar::scollectd::typed_valueinline
    type_instance() const (defined in seastar::scollectd::typed_value)seastar::scollectd::typed_valueinline
    typed_value(const type_id &tid, const scollectd::type_instance &ti, description, Args &&... args)seastar::scollectd::typed_value
    typed_value(const type_id &tid, const scollectd::type_instance &ti, Args &&... args) (defined in seastar::scollectd::typed_value)seastar::scollectd::typed_valueinline
    values() const (defined in seastar::scollectd::typed_value)seastar::scollectd::typed_valueinline
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1typed__value.html b/master/structseastar_1_1scollectd_1_1typed__value.html new file mode 100644 index 000000000..b36cee63a --- /dev/null +++ b/master/structseastar_1_1scollectd_1_1typed__value.html @@ -0,0 +1,158 @@ + + + + + + + +Seastar: seastar::scollectd::typed_value Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::scollectd::typed_value Struct Reference
    +
    +
    +
    +Inheritance diagram for seastar::scollectd::typed_value:
    +
    +
    + + +seastar::scollectd::typed_value_impl< Type > + +
    + + + + + + + + + + + + + + +

    +Public Member Functions

    template<typename... Args>
     typed_value (const type_id &tid, const scollectd::type_instance &ti, description, Args &&... args)
     
    +template<typename... Args>
     typed_value (const type_id &tid, const scollectd::type_instance &ti, Args &&... args)
     
    +const scollectd::type_instance & type_instance () const
     
    +const shared_ptr< value_list > & values () const
     
    +const type_id & type () const
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ typed_value()

    + +
    +
    +
    +template<typename... Args>
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    seastar::scollectd::typed_value::typed_value (const type_id & tid,
    const scollectd::type_instance & ti,
    description d,
    Args &&... args 
    )
    +
    +

    Wraps N values of a given type (type_id). Used to group types into a plugin_instance_metrics

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1typed__value.png b/master/structseastar_1_1scollectd_1_1typed__value.png new file mode 100644 index 0000000000000000000000000000000000000000..90668d8a09e76f69c9aa23532bf50ffc2056f20f GIT binary patch literal 926 zcmeAS@N?(olHy`uVBq!ia0y~yVB`d{12~w0q^(22T_7b9;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z^v=(;uuoF_;&8YO^+0K-1y~58}tl~HsALON3@_PbGiiu=l^W2+$^hg zy7bH~t!09~zb;>9{Lt|)Xnut8{BNC&M_lJ?OibJREOz-}vwzAvli5o0cbZtAIxIUm znQ!j7zNm@YuReMnyP5exY?QgogY92ud+ylDY_hZT$nov64?_0OXvts6uzyv2trf$) zWuSoY0|!Ko3NU!S95t4FAo-V(gI9>{i2ni(A&1GlEH`5426cpLmQDpm3r-(9xR*(JSPAZPF4`artrS2((^g?Ywazc|H)MK4q5@Ua>5gkE>Ax(4;9a- zi%3zxe(i72E&E9&@&D6>CS7?MS>w5Daqp3H>lD`5KYd@A8<%OKukt49=c@j{d)F|LswXmT=uw>enIn0fc(eQIfbef#gew6OB| zn;CjjbpGCV-|Fp!!c|s9r@!O+zvA(_zMNF`lU=q9%$b}*&dej1XGOdgP8K^|o1{>9QN3+d-ts?hN@Bi(Wb6$2nnBTc=EVKkvQHoO zoiuFsOLwncx_|Z2^EG85J7>s#?wGXZ#$`p%{ENFDPWmFX_i?V`BXy4*JC#?STszaZ z{LQ?pUyYv&+It<^9^zTm7*`eD^ + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::scollectd::typed_value_impl< Type > Member List
    +
    +
    + +

    This is the complete list of members for seastar::scollectd::typed_value_impl< Type >, including all inherited members.

    + + + + + + + + + +
    type() const (defined in seastar::scollectd::typed_value)seastar::scollectd::typed_valueinline
    type_instance() const (defined in seastar::scollectd::typed_value)seastar::scollectd::typed_valueinline
    typed_value(const type_id &tid, const scollectd::type_instance &ti, description, Args &&... args)seastar::scollectd::typed_value
    typed_value(const type_id &tid, const scollectd::type_instance &ti, Args &&... args) (defined in seastar::scollectd::typed_value)seastar::scollectd::typed_valueinline
    typed_value_impl(const scollectd::type_instance &ti, Args &&... args) (defined in seastar::scollectd::typed_value_impl< Type >)seastar::scollectd::typed_value_impl< Type >inline
    typed_value_impl(scollectd::type_instance ti, description d, Args &&... args) (defined in seastar::scollectd::typed_value_impl< Type >)seastar::scollectd::typed_value_impl< Type >inline
    typed_value_impl(description d, Args &&... args) (defined in seastar::scollectd::typed_value_impl< Type >)seastar::scollectd::typed_value_impl< Type >inline
    values() const (defined in seastar::scollectd::typed_value)seastar::scollectd::typed_valueinline
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1typed__value__impl.html b/master/structseastar_1_1scollectd_1_1typed__value__impl.html new file mode 100644 index 000000000..a9199ed54 --- /dev/null +++ b/master/structseastar_1_1scollectd_1_1typed__value__impl.html @@ -0,0 +1,124 @@ + + + + + + + +Seastar: seastar::scollectd::typed_value_impl< Type > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::scollectd::typed_value_impl< Type > Struct Template Reference
    +
    +
    +

    Detailed Description

    +
    template<known_type Type>
    +struct seastar::scollectd::typed_value_impl< Type >

    Template wrapper for type_id values, deriving type_id string from the known_types enum, for auto-completetion joy.

    +
    +

    #include <seastar/core/scollectd.hh>

    +
    +Inheritance diagram for seastar::scollectd::typed_value_impl< Type >:
    +
    +
    + + +seastar::scollectd::typed_value + +
    + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    +template<typename ... Args>
     typed_value_impl (const scollectd::type_instance &ti, Args &&... args)
     
    +template<typename ... Args>
     typed_value_impl (scollectd::type_instance ti, description d, Args &&... args)
     
    +template<typename ... Args>
     typed_value_impl (description d, Args &&... args)
     
    +const scollectd::type_instance & type_instance () const
     
    +const shared_ptr< value_list > & values () const
     
    +const type_id & type () const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1scollectd_1_1typed__value__impl.png b/master/structseastar_1_1scollectd_1_1typed__value__impl.png new file mode 100644 index 0000000000000000000000000000000000000000..c23f503e3b9801c4b3391efc05d30c41743494a3 GIT binary patch literal 916 zcmeAS@N?(olHy`uVBq!ia0y~yVB`d{12~w0q^(22T_7b9;1lBd|Nnm=^TnI5rTvE{ z09jys;J^Xa&O7ozE=Ng_UoZnu5eQs86=KA|z^v@);uuoF_;&8Yyw3_euKebg?){&* ze~sc1wn=H1uYH~Tu4J#-k*#ML&%{qljm&v1->q^pMMzCi^Q4N8Q_v;;Ng9(%j)xsT zxSemy$JGhx@AJeJJey}8`R+Nz{m`Y_E9-w3&$#p=&hyB|U+e$A`Mh)Ix0QX8;nVfr zJ=F0me|uVGTZv_1h^~uPr1AH{H6DSLIu@xynr>^HC%wB>?$L6zquMs-LrnJnERCw5 ze>_($jxX#9pLAnd%H7(xn|oWI->Y>?`n*@=;vu!~61CMC?>B8$xx4Ls$(fM<8(;1G z#Qptn`Hjex$=kvV&q{ds__wRn9<5vHf2VlNL}b=ie9;j5`?~9oFz+ve?pOz%`j+ z(V2rP4JwljI2C}w$K+weIhg^Zi5Q_rdp)KEb>;qD%y1)&4``di1kV{P6H1zob23WeaE9p|1(V{8j|Pl zCEhx|QG54U@%g*I-tRji+9_tXb9wLn_mA`BkIs!%(2{FtJThZr`o+2D692ZJO6M)Q zA$<6pm+a=PU75!Mu6-%_!g}Y1@a3N6)sN!lORU~;SDj5ryf*2^)#IA>*0SNXNwYp~ z@$Z>_Fz!wr` + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::scollectd::value< T >::wrap< W > Member List
    +
    + + + + + diff --git a/master/structseastar_1_1scollectd_1_1value_1_1wrap.html b/master/structseastar_1_1scollectd_1_1value_1_1wrap.html new file mode 100644 index 000000000..f4368ce39 --- /dev/null +++ b/master/structseastar_1_1scollectd_1_1value_1_1wrap.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: seastar::scollectd::value< T >::wrap< W > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::scollectd::value< T >::wrap< W > Struct Template Reference
    +
    +
    + + + + + + +

    +Public Member Functions

    wrap (const W &v)
     
    +const W & operator() () const
     
    + + + +

    +Public Attributes

    +const W & _v
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1semaphore__default__exception__factory-members.html b/master/structseastar_1_1semaphore__default__exception__factory-members.html new file mode 100644 index 000000000..fe6b8c194 --- /dev/null +++ b/master/structseastar_1_1semaphore__default__exception__factory-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::semaphore_default_exception_factory Member List
    +
    + + + + + diff --git a/master/structseastar_1_1semaphore__default__exception__factory.html b/master/structseastar_1_1semaphore__default__exception__factory.html new file mode 100644 index 000000000..edbdd5833 --- /dev/null +++ b/master/structseastar_1_1semaphore__default__exception__factory.html @@ -0,0 +1,114 @@ + + + + + + + +Seastar: seastar::semaphore_default_exception_factory Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::semaphore_default_exception_factory Struct Reference
    +
    +
    +

    Detailed Description

    +

    Exception Factory for standard semaphore

    +

    constructs standard semaphore exceptions

    See also
    semaphore_timed_out and broken_semaphore
    +
    +

    #include <seastar/core/semaphore.hh>

    +
    +Inheritance diagram for seastar::semaphore_default_exception_factory:
    +
    +
    + + +seastar::basic_semaphore< semaphore_default_exception_factory, typename timer<>::clock > +seastar::basic_semaphore< semaphore_default_exception_factory > +seastar::basic_semaphore< semaphore_default_exception_factory, rpc_clock_type > + +
    + + + + + + + + +

    +Static Public Member Functions

    +static semaphore_timed_out timeout () noexcept
     
    +static broken_semaphore broken () noexcept
     
    +static semaphore_aborted aborted () noexcept
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1semaphore__default__exception__factory.png b/master/structseastar_1_1semaphore__default__exception__factory.png new file mode 100644 index 0000000000000000000000000000000000000000..f24a75982050ade2b63ba73bff69d7255b92fe35 GIT binary patch literal 2464 zcmc&$X;f257KZi&6p8eVI1H;j)4|}vzJwh&#HWy;%_103cES>bNFWeFu(e0oG}s_S z1KKn>5&_vIm>?pgX$UYP&|wQ23?d}ZM39heUV=aT+rQ@3d3BfbRn>j>-ulkF>5KG& zY8hy$si{GMlgH1hscB$A-FN#oaE2ew2n5AHeZBoW6$%BYepp&dEqZwy)Ku?_7cU?; zr}l#8_RD9HKd6Bq3EG^j5E^)2Kcv}jq|VjSNQ#CACUW*EN>T%gD=sxb@P>}kO_8M$|I4@oDF zII!3e-Y&gW_6h8?hz?FVO%>Bd8u8o}$zytHQG~H#Kc6K5dMMfze#^_r7ZmKx{^TW? zJZiB2YR{|EI-ChH&VvQ%$pl^OIwE!`(}PL-9Fv&pq)zE5Az zT~(H+<+<`rYaYkGL(kYT#A_4?7K8#WU>`CX02M2!%XG~cbM40cvts~pbgYjpqyCb{3|P5&I=s*w%;pe z=n&#hyT!SjzJCYQXW7IRW|ij+7TFtEI5P&l50Y-4>_`e<|VX zS3nd8=ZPJdWRK^C48~KzEIF-7uL8?nrSisPRb2iKOFhTFn$BV6fxov&w2qUc90B1q zE<5Id)A+SoPsL*kw52y2NZO0t>GPbdM7@eyNw^O z@TrP2KvRMt_psC9JEKK0zrClEG>S2;uP>HCM1K=KwrD6EpJUvJ#D^5d(XWlX%|_Bh zg2f3Rk)T$*K6eA>Mfo(vO&6jth(()JTxiGy`;k|uf$SZ$)nKL9A#|Z*9GOTnw*32B zy*mN%p-IvM&=NyeiN!IHFb$qWlg&RKWRIVoBqp@H=yA~LdsiO)E)HH_J!0!J=7Ww~E+;Y+h{hV!-$#ubYvso#-# zeCraIOwQ~m5mDXMyDu~eA<<{f@c$Kr9;xW;Hm8pa23a=oQw7!H^*Ul^R#Q71l_6Yy zVryv1U#DMUcu(ICoX6vg+|cgG>mRA%vME%_Q|pyg>4|~9O=gADiF2-wA+PAka+}vf z!Io#L`#U4M2`dD~f1;MZvx^?S?B{IGvo{LGHryUU6o~7&A)-D~(^5 zT%POQ`J6dz$DO&81gvVM%>hHQf>iz+D+fK6h(j%x+-S!ZHB?tRn2Wq&ZJ_M=)}7>OR0kM7CKY;YFjXa!Dy{T*k0_hH*;MX3BX2 z+YokcD;d^~5}5;dhGXqaG2HDljML)p$M>JFcDt{=>0g!sfLGLGGZS+gywg959gZ4x z#(^HaSf*)T9`O>G{o;YT3q7)svWyF${}f4QU8jW%G72Gw4}dJQgi(2+DyC|r5=bD+ zWKLj}EOV^?qzXV$k`@IF1SG9t8x^1&t|Tog_@M^?hvs}0U~4;Z9D?UqXkW-X2MXI_ n8=EZ+bU2Q<>TfZon?lo?a?~XNF7*O`r_=yX + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::shared_ptr_count_base Member List
    +
    +
    + +

    This is the complete list of members for seastar::shared_ptr_count_base, including all inherited members.

    + + + +
    count (defined in seastar::shared_ptr_count_base)seastar::shared_ptr_count_base
    ~shared_ptr_count_base() (defined in seastar::shared_ptr_count_base)seastar::shared_ptr_count_baseinlinevirtual
    + + + + diff --git a/master/structseastar_1_1shared__ptr__count__base.html b/master/structseastar_1_1shared__ptr__count__base.html new file mode 100644 index 000000000..a92edb982 --- /dev/null +++ b/master/structseastar_1_1shared__ptr__count__base.html @@ -0,0 +1,106 @@ + + + + + + + +Seastar: seastar::shared_ptr_count_base Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::shared_ptr_count_base Struct Reference
    +
    +
    +
    +Inheritance diagram for seastar::shared_ptr_count_base:
    +
    +
    + + +seastar::enable_shared_from_this< connection > +seastar::enable_shared_from_this< T > +seastar::shared_ptr_count_for< T > +seastar::http::experimental::connection +seastar::rpc::server::connection +seastar::async_sharded_service< T > + +
    + + + + +

    +Public Attributes

    +shared_ptr_counter_type count = 0
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1shared__ptr__count__base.png b/master/structseastar_1_1shared__ptr__count__base.png new file mode 100644 index 0000000000000000000000000000000000000000..9e46cea0be15cda785bd2655a87688821f9bebb2 GIT binary patch literal 3271 zcmd582m{iT!CG(@E5@)Ovze}EmMwOi4{(7lNAto zE@^7qM^?CkM)lC?Caq(uks9%O#(O;Of3izfIP`&@Cd!dEocvTMzHDk8yEHt}MTYbk z9>J$z!mzMVP4zrMcZd*7A7bXSi&(b4i|2h~WV}QzD|$BPz-;$yr*n{xFaVYRIONL4 zM;LopX@g)PIyJ+#!rON>VLP?7z52zSo5UyWs$;$6B5HO3o4Gpj0apouw7JD7AN{b- zkmhB>RvmJcSZ3FoYM-{8nITk83NlvqA3GP-PU>117?@rbM}AK1U#gPsY7u#J1R3dS z(VKrZ*n%6p*5{LG=)CLv%lG`g%N>k-%*oeN`?)d8K(yModG|zRH7h>1Y}89)nMCsx z4V$}Tg}VfA$Q{|Wxoez?zgpc-URqDL=I`MTw`@#j@7(Db-&rg*Z)tvcaHsL@x=qtH z&)k_q@17eH*CucLCW1&4rS2*IdKCAWCRLr&G0r>$6r z@J-QD*MR(kScwY4_oCN-`AQF94v5-F%z^AB5;MuYpfPCPc1wl5*6#HM@XMzQ7%qAp z1;f)|$bvuxhj#@d4nt6W1On&;K$S5J#~?6kbSe+cM(^EpfvPf3%JUqXY|R@m%|vg` zHE;#T>Z&mj+bS3>rod%sEdEQ7^ps{~2md>S=vEOoCSaW874_^e_`%sJs2Ed^^NU)$ z!0_alwpDB5t#(az#xo;ZlWg-3@oej)v;JJ!{9IFWBW-T?>sT-0S-~)KcIZ?M4t)Oe zyJmNG+l01()c^oW#jCh;e@!OlVffp7o+4XGSMGEWY}H3Yx~jzoZ=lAQH5l!x5BoC$ z>2(cnPWPM{9zECSKUsRNT}y~$d)w+g&W*@^O*?OpAMw7oSIEl|dvu7`!Ww;gJ;246 zceyc)K>DK{WAwh>Ve&ccp!$(Zy0?O@x#m0xa8Ek>&?S4x-E7`}($YP_)SEq2ed1%- zMQUq81FdvJybh0EL6NK(uN(6d^P{kIS3(XFWt#N5w^ZHMi0xE1T5*T}t+s7=Us`ic zFDz#6Qt^0AwCwKL9v3+EKCtG`1z7!rnN46$7TdB`NWJ|PCpvXXdlB0xU1 z+0>JBeZ zv2DA|byYss6kURo!Ya`L_MgJkQ*``3ygGsE*~W-Trl1PRCTPl+M+m`9BPce zxjATc%Za9dY_w-|wT*WroVx3}H+mce7jK@WVf0x{fxIFBCbh_NF-y}DCKJ73u&AHj zejClSE8hxq^tk$+WRds8)$|G9^~=tGlCeFZ+|FG|aQ7;TX$}Co-{)qcd4&*o4{Jg) zzUlu#4Zxc`*$0Cw1gqi?jf`aG;X<+TrP)aEglqqm56fA*!aZt{%S;jx`72u zA;>yyY~(wm8#)^C*5p2zLAFd0%xg}SnkV1}CqmA)Ky366ihkSrH$^)B-)K#yq%og| zL?CnuuPG_IZCPL7V4r*?M6XFs6S?XU4mbE6*=2`aYKpv(hDQ8VgFma_?)hE(KUf}q z3*tMJzb%$C=iv4T8p|7XnPWL}xIx3OJa_*23eUMcLT`Ymcdz*^F!09l6A-uEgXvCP zrPI+B#CV+n%;tstea&pN;;%|<$Sw@DrEq?R zJrQ;eEUW03b)6l{l@M7>+EYfu7Jzi~LM#9xn1)?ZiR@RK+PW2$iQT8;=Ji>|U1Yzj zsA>wjrUTA9i&)YN{UXq)TIJr>b(k=PYNo;t_F4BGAqw=(i!c~&}t;x}9Ul_@|ZciZheXo8I z9%4egaoV)*HOv^pY+i7IicNr~HUlI9s%+G0G+kW7T?lWyz9>5Z7iKArZqW5bn5TVw zz>u3*m}c+(aJRZNv9Fm2elQHf?s!&#xtm^k)EvcbQ(~DE;R#>b1xbg!2dvpW%_uyr zpUc?}Gz`a;jjkK*$n?kw-q#R33Zj)KD=0Z`mZCG28BrtkdR$CB0qF2p6Z?v{AFpLm z1V!$9k29;cNf)g9QJ>Ey>QqwFDy!p!+?aS7IaN5BB-D3v2q8{Xc7l9&#X>=SkUF^Jo?w4$%AS3>*87`rw!3>WnU`Br@USqMQp(ExA3PQGs8Zi z6w|G!Z8BO6lsa^z*u}xei&HpMf*~3Rwi>T~Q15Zta?&ZF1k?1FOPX=Nkm72It0bHI zTZL&|^U?X25XAcBvn90Kv{2Jm!{-Lw{k199W6@kuX`L{lH9Rlw0GL0Iz}FtGW%qhV zj#n=@lpd|jWl2PEqFN}&mKs&-2yfR-r9M9xG`pStMH(Xx=(z1+ZeZynxq1vr%Sq}} z^alUk7bRSK(B{fO1(d?Kx={u!K>`)W;}mg~=y0O|^~+Faa5S}6k3BiHA3QUum5Ek^ zvl?z2oK`rJg5w>9m(RSuz8{R3)`b~44Vi^jggtL?1T5=>zRMfA!R<#1#5$1NHWR22 zaZrht|KW0oo<2*f9I~ar0V>g-4b~T4%S7WJ3!rNLRSCobW>`*477_z7uU#rc$y##A c#YUN;^YNf+I%D%7^w%K=>^ta4b?{61JAE!rM*si- literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1shared__ptr__count__for-members.html b/master/structseastar_1_1shared__ptr__count__for-members.html new file mode 100644 index 000000000..fa865d0b0 --- /dev/null +++ b/master/structseastar_1_1shared__ptr__count__for-members.html @@ -0,0 +1,86 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::shared_ptr_count_for< T > Member List
    +
    +
    + +

    This is the complete list of members for seastar::shared_ptr_count_for< T >, including all inherited members.

    + + + + + +
    count (defined in seastar::shared_ptr_count_base)seastar::shared_ptr_count_base
    data (defined in seastar::shared_ptr_count_for< T >)seastar::shared_ptr_count_for< T >
    shared_ptr_count_for(A &&... a) (defined in seastar::shared_ptr_count_for< T >)seastar::shared_ptr_count_for< T >inline
    ~shared_ptr_count_base() (defined in seastar::shared_ptr_count_base)seastar::shared_ptr_count_baseinlinevirtual
    + + + + diff --git a/master/structseastar_1_1shared__ptr__count__for.html b/master/structseastar_1_1shared__ptr__count__for.html new file mode 100644 index 000000000..e4f1c63c9 --- /dev/null +++ b/master/structseastar_1_1shared__ptr__count__for.html @@ -0,0 +1,112 @@ + + + + + + + +Seastar: seastar::shared_ptr_count_for< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::shared_ptr_count_for< T > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for seastar::shared_ptr_count_for< T >:
    +
    +
    + + +seastar::shared_ptr_count_base + +
    + + + + + +

    +Public Member Functions

    +template<typename... A>
     shared_ptr_count_for (A &&... a)
     
    + + + + + +

    +Public Attributes

    +T data
     
    +shared_ptr_counter_type count = 0
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1shared__ptr__count__for.png b/master/structseastar_1_1shared__ptr__count__for.png new file mode 100644 index 0000000000000000000000000000000000000000..eeac1bd72411224bce40a1e68c2467fee511e19d GIT binary patch literal 763 zcmeAS@N?(olHy`uVBq!ia0vp^SAaNxgBeJMDXxA3q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0x;$MRLn;{G&b`?8Sb@it-#qC5|H<2Z z6>rQ)xpdB_{A5s}Ye((}&IkK8>6|Vy-RN;?tI0x@Ocq}aPbo)zM^(>PuMb?=EVtWx z)!JS2_@TUzqCKx5DD&@X*Ef1J3{S{mz>zTi`3 z)t{pH^AWP!-(8%O{-aW3dXSvQsX5~3i!AG+)qY>i_udu#x2R>M_{LwkZIiG1Ppb3P|KsR+ zsrr}5m8ykz=iS^sY0LWJxZ>q1nFe5=3VTg*yC9ntIqhi@(~k*x4B?kW7v^o}4vH0g zb*{vAmABK`SL_CDY9a?XW(6=PXE-tTEZ}4{Xd)!=VPBBf%Pb|v7;j;&1Ynpp2$nFt zI`GiKEF%6#-LbE6XBe!sw(=Fcz29C{$jkp#<=lhl>GG#{_-)#^qkr!2!!gdeNu_GP zZ@HyQhCdd*ZqK^)TzGohliR_Zs3CjqG@E&GOK{dgpOV<)eTNr*co%ljdQXm0^7Xkp zb|$~8yd7Kr=hV^LyWR@t_W%3AT0HOJ^#!wbUFbQrz3gFP_^i)Y&sN$asewP{;2ld1=Oa*E8(P(J6f|9;5_JsSKX3elF{r G5}E*mKWk6` literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01false_01_4-members.html b/master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01false_01_4-members.html new file mode 100644 index 000000000..2c682fb5a --- /dev/null +++ b/master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01false_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::shared_ptr_make_helper< T, false > Member List
    +
    +
    + +

    This is the complete list of members for seastar::shared_ptr_make_helper< T, false >, including all inherited members.

    + + +
    make(A &&... a) (defined in seastar::shared_ptr_make_helper< T, false >)seastar::shared_ptr_make_helper< T, false >inlinestatic
    + + + + diff --git a/master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01false_01_4.html b/master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01false_01_4.html new file mode 100644 index 000000000..9e896ea9f --- /dev/null +++ b/master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01false_01_4.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: seastar::shared_ptr_make_helper< T, false > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::shared_ptr_make_helper< T, false > Struct Template Reference
    +
    +
    + + + + + +

    +Static Public Member Functions

    +template<typename... A>
    static shared_ptr< T > make (A &&... a)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01true_01_4-members.html b/master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01true_01_4-members.html new file mode 100644 index 000000000..0a8dbf3c6 --- /dev/null +++ b/master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01true_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::shared_ptr_make_helper< T, true > Member List
    +
    +
    + +

    This is the complete list of members for seastar::shared_ptr_make_helper< T, true >, including all inherited members.

    + + +
    make(A &&... a) (defined in seastar::shared_ptr_make_helper< T, true >)seastar::shared_ptr_make_helper< T, true >inlinestatic
    + + + + diff --git a/master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01true_01_4.html b/master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01true_01_4.html new file mode 100644 index 000000000..5de2f85c7 --- /dev/null +++ b/master/structseastar_1_1shared__ptr__make__helper_3_01T_00_01true_01_4.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: seastar::shared_ptr_make_helper< T, true > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::shared_ptr_make_helper< T, true > Struct Template Reference
    +
    +
    + + + + + +

    +Static Public Member Functions

    +template<typename... A>
    static shared_ptr< T > make (A &&... a)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1simple__pollfn-members.html b/master/structseastar_1_1simple__pollfn-members.html new file mode 100644 index 000000000..a4e20dfc4 --- /dev/null +++ b/master/structseastar_1_1simple__pollfn-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::simple_pollfn< Passive > Member List
    +
    +
    + +

    This is the complete list of members for seastar::simple_pollfn< Passive >, including all inherited members.

    + + + + + + +
    exit_interrupt_mode() override final (defined in seastar::simple_pollfn< Passive >)seastar::simple_pollfn< Passive >inlinevirtual
    poll()=0 (defined in seastar::pollfn)seastar::pollfnpure virtual
    pure_poll() override final (defined in seastar::simple_pollfn< Passive >)seastar::simple_pollfn< Passive >inlinevirtual
    try_enter_interrupt_mode() override final (defined in seastar::simple_pollfn< Passive >)seastar::simple_pollfn< Passive >inlinevirtual
    ~pollfn() (defined in seastar::pollfn)seastar::pollfninlinevirtual
    + + + + diff --git a/master/structseastar_1_1simple__pollfn.html b/master/structseastar_1_1simple__pollfn.html new file mode 100644 index 000000000..d52b5ccfc --- /dev/null +++ b/master/structseastar_1_1simple__pollfn.html @@ -0,0 +1,195 @@ + + + + + + + +Seastar: seastar::simple_pollfn< Passive > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::simple_pollfn< Passive > Struct Template Referenceabstract
    +
    +
    +
    +Inheritance diagram for seastar::simple_pollfn< Passive >:
    +
    +
    + + +seastar::pollfn + +
    + + + + + + + + + + +

    +Public Member Functions

    virtual bool pure_poll () override final
     
    virtual bool try_enter_interrupt_mode () override final
     
    virtual void exit_interrupt_mode () override final
     
    +virtual bool poll ()=0
     
    +

    Member Function Documentation

    + +

    ◆ exit_interrupt_mode()

    + +
    +
    +
    +template<bool Passive>
    + + + + + +
    + + + + + + + +
    virtual void seastar::simple_pollfn< Passive >::exit_interrupt_mode ()
    +
    +inlinefinaloverridevirtual
    +
    + +

    Implements seastar::pollfn.

    + +
    +
    + +

    ◆ pure_poll()

    + +
    +
    +
    +template<bool Passive>
    + + + + + +
    + + + + + + + +
    virtual bool seastar::simple_pollfn< Passive >::pure_poll ()
    +
    +inlinefinaloverridevirtual
    +
    + +

    Implements seastar::pollfn.

    + +
    +
    + +

    ◆ try_enter_interrupt_mode()

    + +
    +
    +
    +template<bool Passive>
    + + + + + +
    + + + + + + + +
    virtual bool seastar::simple_pollfn< Passive >::try_enter_interrupt_mode ()
    +
    +inlinefinaloverridevirtual
    +
    + +

    Implements seastar::pollfn.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1simple__pollfn.png b/master/structseastar_1_1simple__pollfn.png new file mode 100644 index 0000000000000000000000000000000000000000..f0420524ab988e639b83dc3ba0cd75e298b3b718 GIT binary patch literal 688 zcmeAS@N?(olHy`uVBq!ia0vp^CxAGBgBeI>Z$8xoq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0>^)r^Ln;{G&V7AuwE+){diRy@^-r94 zsuVi?e8H$99+@P%K<(R&zTeXmCECanh3fQs3;}w-c}bSy%Osb;7Sb(+ccbUx+`sA!+#a^PQ-#SEBk#KMy9g?ybe*`r!RFHsWLcKI?9aS3cheP#UVw@n`+&ll@jl4fUa}D_<8{9sBVSG`d zaLQPLp_i}mjqC6EvOx~dVstc5o-W#LCvJYZTXUJ|$)8uV=GultpNsd2{+4=DVe0Q& zmyf-(_3)e;dFHhwPf)Ed<5~0GQpI~WifZG(-{ji#a9{V?x=hDw8NTM%&zDwA+xPWe zL|#+K$(t6+y}xq>CbKwi&zm|u$Zxk}><7Lhb8glOTviLcFZMlDz*6M%MX#)wvYYRX zZ_K~Fw(G`=zOW;8m!>c7PF$>X{M-q?qu0}y9LYS_k!T(taya36&zInAPQCthZJWQB zRb=Ic-`Eyb7QgN6o!!CQ52o0?Ex!7X!Fm^eiq(|jG{$#fAuI%ip2;OXk;vd$@?2>=lvJVXEh literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1slab__page__desc-members.html b/master/structseastar_1_1slab__page__desc-members.html new file mode 100644 index 000000000..b290c6372 --- /dev/null +++ b/master/structseastar_1_1slab__page__desc-members.html @@ -0,0 +1,93 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::slab_page_desc Member List
    +
    +
    + +

    This is the complete list of members for seastar::slab_page_desc, including all inherited members.

    + + + + + + + + + + + + +
    allocate_object() (defined in seastar::slab_page_desc)seastar::slab_page_descinline
    empty() const (defined in seastar::slab_page_desc)seastar::slab_page_descinline
    free_object(void *object) (defined in seastar::slab_page_desc)seastar::slab_page_descinline
    free_objects() (defined in seastar::slab_page_desc)seastar::slab_page_descinline
    index() const (defined in seastar::slab_page_desc)seastar::slab_page_descinline
    magic() const (defined in seastar::slab_page_desc)seastar::slab_page_descinline
    refcnt() (defined in seastar::slab_page_desc)seastar::slab_page_descinline
    size() const (defined in seastar::slab_page_desc)seastar::slab_page_descinline
    slab_class_id() const (defined in seastar::slab_page_desc)seastar::slab_page_descinline
    slab_page() const (defined in seastar::slab_page_desc)seastar::slab_page_descinline
    slab_page_desc(void *slab_page, size_t objects, size_t object_size, uint8_t slab_class_id, uint32_t index) (defined in seastar::slab_page_desc)seastar::slab_page_descinline
    + + + + diff --git a/master/structseastar_1_1slab__page__desc.html b/master/structseastar_1_1slab__page__desc.html new file mode 100644 index 000000000..3d5b02416 --- /dev/null +++ b/master/structseastar_1_1slab__page__desc.html @@ -0,0 +1,122 @@ + + + + + + + +Seastar: seastar::slab_page_desc Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::slab_page_desc Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    slab_page_desc (void *slab_page, size_t objects, size_t object_size, uint8_t slab_class_id, uint32_t index)
     
    +bool empty () const
     
    +size_t size () const
     
    +uint32_t & refcnt ()
     
    +uint32_t index () const
     
    +uint16_t magic () const
     
    +uint8_t slab_class_id () const
     
    +void * slab_page () const
     
    +std::vector< uintptr_t > & free_objects ()
     
    +void * allocate_object ()
     
    +void free_object (void *object)
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1smp__message__queue_1_1tx__side_1_1aa-members.html b/master/structseastar_1_1smp__message__queue_1_1tx__side_1_1aa-members.html new file mode 100644 index 000000000..6e2f8f6b8 --- /dev/null +++ b/master/structseastar_1_1smp__message__queue_1_1tx__side_1_1aa-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::smp_message_queue::tx_side::aa Member List
    +
    +
    + +

    This is the complete list of members for seastar::smp_message_queue::tx_side::aa, including all inherited members.

    + + +
    pending_fifo (defined in seastar::smp_message_queue::tx_side::aa)seastar::smp_message_queue::tx_side::aa
    + + + + diff --git a/master/structseastar_1_1smp__message__queue_1_1tx__side_1_1aa.html b/master/structseastar_1_1smp__message__queue_1_1tx__side_1_1aa.html new file mode 100644 index 000000000..f78fb6376 --- /dev/null +++ b/master/structseastar_1_1smp__message__queue_1_1tx__side_1_1aa.html @@ -0,0 +1,107 @@ + + + + + + + +Seastar: seastar::smp_message_queue::tx_side::aa Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::smp_message_queue::tx_side::aa Struct Reference
    +
    +
    + + + + +

    +Public Attributes

    +std::deque< work_item * > pending_fifo
     
    +

    Member Data Documentation

    + +

    ◆ pending_fifo

    + +
    +
    + + + + +
    std::deque<work_item*> seastar::smp_message_queue::tx_side::aa::pending_fifo
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1smp__options-members.html b/master/structseastar_1_1smp__options-members.html new file mode 100644 index 000000000..f9b92c3f0 --- /dev/null +++ b/master/structseastar_1_1smp__options-members.html @@ -0,0 +1,113 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::smp_options Member List
    +
    +
    + +

    This is the complete list of members for seastar::smp_options, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    allow_cpus_in_remote_numa_nodesseastar::smp_options
    cpusetseastar::smp_options
    describe(options_descriptor &descriptor) constseastar::program_options::option_group
    enable_glibc_exception_scaling_workaroundseastar::smp_options
    hugepagesseastar::smp_options
    io_propertiesseastar::smp_options
    io_properties_fileseastar::smp_options
    lock_memoryseastar::smp_options
    mbindseastar::smp_options
    memoryseastar::smp_options
    memory_allocatorseastar::smp_options
    mutate(options_mutator &mutator)seastar::program_options::option_group
    name() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    num_io_groupsseastar::smp_options
    operator bool() constseastar::program_options::option_groupinline
    operator=(option_group &&)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    operator=(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(option_group *parent, std::string name)seastar::program_options::option_groupexplicit
    option_group(option_group *parent, std::string name, unused)seastar::program_options::option_groupexplicit
    option_group(option_group &&) (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group(const option_group &)=delete (defined in seastar::program_options::option_group)seastar::program_options::option_group
    option_group_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    reserve_memoryseastar::smp_options
    smpseastar::smp_options
    smp_options(program_options::option_group *parent_group) (defined in seastar::smp_options)seastar::smp_options
    thread_affinityseastar::smp_options
    used() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    value_list_type typedef (defined in seastar::program_options::option_group)seastar::program_options::option_group
    values() const (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    values() (defined in seastar::program_options::option_group)seastar::program_options::option_groupinline
    ~option_group()=default (defined in seastar::program_options::option_group)seastar::program_options::option_groupvirtual
    + + + + diff --git a/master/structseastar_1_1smp__options.html b/master/structseastar_1_1smp__options.html new file mode 100644 index 000000000..13ac513ae --- /dev/null +++ b/master/structseastar_1_1smp__options.html @@ -0,0 +1,360 @@ + + + + + + + +Seastar: seastar::smp_options Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::smp_options Struct Reference
    +
    +
    +

    Detailed Description

    +

    Configuration for the multicore aspect of seastar.

    +
    +

    #include <seastar/core/smp_options.hh>

    +
    +Inheritance diagram for seastar::smp_options:
    +
    +
    + + +seastar::program_options::option_group + +
    + + + + + + +

    +Public Types

    +using value_list_type = boost::intrusive::list< basic_value, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    +using option_group_list_type = boost::intrusive::list< option_group, boost::intrusive::base_hook< list_base_hook >, boost::intrusive::constant_time_size< false > >
     
    + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    smp_options (program_options::option_group *parent_group)
     
    operator bool () const
     Does the option group has any values contained in it?
     
    +bool used () const
     
    +const std::string & name () const
     
    +const value_list_type & values () const
     
    +value_list_type & values ()
     
    void describe (options_descriptor &descriptor) const
     
    void mutate (options_mutator &mutator)
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +program_options::value< unsigned > smp
     Number of threads (default: one per CPU).
     
    +program_options::value< resource::cpuset > cpuset
     CPUs to use (in cpuset(7) format; default: all)).
     
    +program_options::value< std::string > memory
     Memory to use, in bytes (ex: 4G) (default: all).
     
    +program_options::value< std::string > reserve_memory
     Memory reserved to OS (if memory not specified).
     
    +program_options::value< std::string > hugepages
     Path to accessible hugetlbfs mount (typically /dev/hugepages/something).
     
    +program_options::value< bool > lock_memory
     Lock all memory (prevents swapping).
     
    program_options::value< bool > thread_affinity
     
    program_options::value< unsigned > num_io_groups
     Number of IO groups. More...
     
    +program_options::value< std::string > io_properties_file
     Path to a YAML file describing the characteristics of the I/O Subsystem.
     
    +program_options::value< std::string > io_properties
     A YAML string describing the characteristics of the I/O Subsystem.
     
    program_options::value< bool > mbind
     
    program_options::value< bool > enable_glibc_exception_scaling_workaround
     
    program_options::value< bool > allow_cpus_in_remote_numa_nodes
     
    seastar::memory_allocator memory_allocator = memory_allocator::seastar
     
    +

    Member Function Documentation

    + +

    ◆ describe()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::describe (options_descriptordescriptor) const
    +
    +inherited
    +
    +

    Describe the content of this option group to the visitor.

    +

    The content is visited in a depth-first manner:

      +
    • First the option groups itself is visited with options_descriptor::visit_group_start(). If this returns false the entire content of the group, including all its subgroups and values are skipped and options_descriptor::visit_group_end() is called immediately. Otherwise visiting the content of the group proceeds.
    • +
    • All the values contained therein are visited. For each value the following happens:
        +
      • First options_descriptor::visit_value_metadata() is called with generic metadata that all values have. If this return false the value is skipped, otherwise visiting the value proceeds.
      • +
      • Then the appropriate overload of options_descriptor::visit_value() is called, with a pointer to the default value of the respective value. The pointer is null if there is no default value.
      • +
      • For selection_value, options_descriptor::visit_selection_value() will be called instead of options_descriptor::visit_value(). After the value is visited, the option_group instance belonging to each candidate (if set) will be visited.
      • +
      +
    • +
    • All the nested option_group instances in the current group are visited.
    • +
    • Finally options_descriptor::visit_group_end() is called.
    • +
    + +
    +
    + +

    ◆ mutate()

    + +
    +
    + + + + + +
    + + + + + + + + +
    void seastar::program_options::option_group::mutate (options_mutatormutator)
    +
    +inherited
    +
    +

    Mutate the content of this option group by the visitor.

    +

    The visiting algorithm is identical to that of describe(), with the following differences:

      +
    • options_mutator::visit_value() is allowed to mutate the value through the passed-in reference. It should return true if it did so and false otherwise.
    • +
    • When visiting a selection value, only the nested group belonging to the selected value is visited afterwards.
    • +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ allow_cpus_in_remote_numa_nodes

    + +
    +
    + + + + +
    program_options::value<bool> seastar::smp_options::allow_cpus_in_remote_numa_nodes
    +
    +

    If some CPUs are found not to have any local NUMA nodes, allow assigning them to remote ones.

    Note
    Unused when seastar is compiled without HWLOC support.
    + +
    +
    + +

    ◆ enable_glibc_exception_scaling_workaround

    + +
    +
    + + + + +
    program_options::value<bool> seastar::smp_options::enable_glibc_exception_scaling_workaround
    +
    +

    Enable workaround for glibc/gcc c++ exception scalablity problem.

    +

    Default: true.

    Note
    Unused when seastar is compiled without the exception scaling support.
    + +
    +
    + +

    ◆ mbind

    + +
    +
    + + + + +
    program_options::value<bool> seastar::smp_options::mbind
    +
    +

    Enable mbind.

    +

    Default: true.

    + +
    +
    + +

    ◆ memory_allocator

    + +
    +
    + + + + +
    seastar::memory_allocator seastar::smp_options::memory_allocator = memory_allocator::seastar
    +
    +

    Memory allocator to use.

    +

    The following options only have effect if the memory_allocator::seastar is used:

    + +
    +
    + +

    ◆ num_io_groups

    + +
    +
    + + + + +
    program_options::value<unsigned> seastar::smp_options::num_io_groups
    +
    + +

    Number of IO groups.

    +

    Each IO group will be responsible for a fraction of the IO requests. Defaults to the number of NUMA nodes

    Note
    Unused when seastar is compiled without HWLOC support.
    + +
    +
    + +

    ◆ thread_affinity

    + +
    +
    + + + + +
    program_options::value<bool> seastar::smp_options::thread_affinity
    +
    +

    Pin threads to their cpus (disable for overprovisioning).

    +

    Default: true.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1smp__options.png b/master/structseastar_1_1smp__options.png new file mode 100644 index 0000000000000000000000000000000000000000..a41b920de010cd95d64a7a2efc6189c9135dc3a9 GIT binary patch literal 1001 zcmeAS@N?(olHy`uVBq!ia0vp^FM+s&gBeJgI@;&~DTx4|5ZC|z{{xvX-h3_XKQsZz z0^9Uy?^GeT6JsEWEgSDL&}N6mgB+sQsx&&rBQPHE0m^^mIG_Sm}e$CTe@Gf(NO`>qsu zuC#W$00^emwUb+PBGfQs_J;S{PT>{*Oq%em$&hs75+4INoCN+ctLKXTsnerlxjq_FclcbNX)susK5 zwy%cwWt6#+(*D&yt!;bmG=#W3sXyuI>XHK{GF4>T5??qn)UT6v5P#M7rR+89R_RNE zTZFIFdF=hp6ft=+6EF~o#xctUoL)GwH1IuH!mtg5O9Wr;p53=UfA00~lbE(#sb2Ef zJ?o#6I4I16TTU9Ro!)Kp?TwxE_4V<2(Tf@PEZXkze9H5bO)Cw~&wQTjRkQCz(|UXU z3H`mi4^;Ph&nnXC3y%sn5ZJWQdDr8Kz6|=S9KZIdiaifmlo`8wzt^vmuXN{?dhJzB<}s~^pgOPpuF+*P9?{K}5+dOM%-n)q+8l4{>u{xb67H{Pq<9~PA{$4@_d z+;e%|w0qMMgB0Y|JQ@E5_;Dq8gYb9#QVzwE1@acxc6#odT`UC5mkge+elF{r5}E*T CH|fFv literal 0 HcmV?d00001 diff --git a/master/structseastar_1_1smp__submit__to__options-members.html b/master/structseastar_1_1smp__submit__to__options-members.html new file mode 100644 index 000000000..59d2c0bf9 --- /dev/null +++ b/master/structseastar_1_1smp__submit__to__options-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::smp_submit_to_options Member List
    +
    +
    + +

    This is the complete list of members for seastar::smp_submit_to_options, including all inherited members.

    + + + + +
    service_groupseastar::smp_submit_to_options
    smp_submit_to_options(smp_service_group service_group=default_smp_service_group(), smp_timeout_clock::time_point timeout=smp_no_timeout) noexcept (defined in seastar::smp_submit_to_options)seastar::smp_submit_to_optionsinline
    timeoutseastar::smp_submit_to_options
    + + + + diff --git a/master/structseastar_1_1smp__submit__to__options.html b/master/structseastar_1_1smp__submit__to__options.html new file mode 100644 index 000000000..68b55bd85 --- /dev/null +++ b/master/structseastar_1_1smp__submit__to__options.html @@ -0,0 +1,122 @@ + + + + + + + +Seastar: seastar::smp_submit_to_options Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::smp_submit_to_options Struct Reference
    +
    +
    +

    Detailed Description

    +

    Options controlling the behaviour of smp::submit_to().

    +
    +

    #include <seastar/core/smp.hh>

    + + + + +

    +Public Member Functions

    smp_submit_to_options (smp_service_group service_group=default_smp_service_group(), smp_timeout_clock::time_point timeout=smp_no_timeout) noexcept
     
    + + + + + + +

    +Public Attributes

    +smp_service_group service_group = default_smp_service_group()
     Controls resource allocation.
     
    smp_timeout_clock::time_point timeout = smp_no_timeout
     
    +

    Member Data Documentation

    + +

    ◆ timeout

    + +
    +
    + + + + +
    smp_timeout_clock::time_point seastar::smp_submit_to_options::timeout = smp_no_timeout
    +
    +

    The timeout is relevant only to the time the call spends waiting to be processed by the remote shard, and not to the time it takes to be executed there.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1unaligned-members.html b/master/structseastar_1_1unaligned-members.html new file mode 100644 index 000000000..2fa56cde7 --- /dev/null +++ b/master/structseastar_1_1unaligned-members.html @@ -0,0 +1,87 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::unaligned< T > Member List
    +
    +
    + +

    This is the complete list of members for seastar::unaligned< T >, including all inherited members.

    + + + + + + +
    operator T() const noexcept (defined in seastar::unaligned< T >)seastar::unaligned< T >inline
    operator=(const T &x) noexcept (defined in seastar::unaligned< T >)seastar::unaligned< T >inline
    raw (defined in seastar::unaligned< T >)seastar::unaligned< T >
    unaligned() noexcept=default (defined in seastar::unaligned< T >)seastar::unaligned< T >
    unaligned(T x) noexcept (defined in seastar::unaligned< T >)seastar::unaligned< T >inline
    + + + + diff --git a/master/structseastar_1_1unaligned.html b/master/structseastar_1_1unaligned.html new file mode 100644 index 000000000..41ea6554a --- /dev/null +++ b/master/structseastar_1_1unaligned.html @@ -0,0 +1,105 @@ + + + + + + + +Seastar: seastar::unaligned< T > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::unaligned< T > Struct Template Reference
    +
    +
    + + + + + + + + +

    +Public Member Functions

    unaligned (T x) noexcept
     
    +unalignedoperator= (const T &x) noexcept
     
    operator T () const noexcept
     
    + + + +

    +Public Attributes

    +T raw
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structseastar_1_1unix__domain__addr-members.html b/master/structseastar_1_1unix__domain__addr-members.html new file mode 100644 index 000000000..64053513b --- /dev/null +++ b/master/structseastar_1_1unix__domain__addr-members.html @@ -0,0 +1,91 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::unix_domain_addr Member List
    +
    +
    + +

    This is the complete list of members for seastar::unix_domain_addr, including all inherited members.

    + + + + + + + + + + +
    name (defined in seastar::unix_domain_addr)seastar::unix_domain_addr
    operator!=(const unix_domain_addr &a) const (defined in seastar::unix_domain_addr)seastar::unix_domain_addrinline
    operator==(const unix_domain_addr &a) const (defined in seastar::unix_domain_addr)seastar::unix_domain_addrinline
    path_bytes() const (defined in seastar::unix_domain_addr)seastar::unix_domain_addrinline
    path_count (defined in seastar::unix_domain_addr)seastar::unix_domain_addr
    path_length() const (defined in seastar::unix_domain_addr)seastar::unix_domain_addrinline
    path_length_aux() const (defined in seastar::unix_domain_addr)seastar::unix_domain_addrinline
    unix_domain_addr(const std::string &fn) (defined in seastar::unix_domain_addr)seastar::unix_domain_addrinlineexplicit
    unix_domain_addr(const char *fn) (defined in seastar::unix_domain_addr)seastar::unix_domain_addrinlineexplicit
    + + + + diff --git a/master/structseastar_1_1unix__domain__addr.html b/master/structseastar_1_1unix__domain__addr.html new file mode 100644 index 000000000..9b728cdc7 --- /dev/null +++ b/master/structseastar_1_1unix__domain__addr.html @@ -0,0 +1,126 @@ + + + + + + + +Seastar: seastar::unix_domain_addr Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::unix_domain_addr Struct Reference
    +
    +
    +

    Detailed Description

    +

    A helper struct for creating/manipulating UNIX-domain sockets.

    +

    A UNIX-domain socket is either named or unnamed. If named, the name is either a path in the filesystem namespace, or an abstract-domain identifier. Abstract-domain names start with a null byte, and may contain non-printable characters.

    +

    std::string() can hold a sequence of arbitrary bytes, and has a length() attribute that does not rely on using strlen(). Thus it is used here to hold the address.

    +
    +

    #include <seastar/net/unix_address.hh>

    + + + + + + + + + + + + + + + + +

    +Public Member Functions

    unix_domain_addr (const std::string &fn)
     
    unix_domain_addr (const char *fn)
     
    +int path_length () const
     
    +int path_length_aux () const
     
    +const char * path_bytes () const
     
    +bool operator== (const unix_domain_addr &a) const
     
    +bool operator!= (const unix_domain_addr &a) const
     
    + + + + + +

    +Public Attributes

    +const std::string name
     
    +const int path_count
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1basic__sstring_3_01char__type_00_01size__type_00_01max__size_00_01NulTerminate_01_4_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1basic__sstring_3_01char__type_00_01size__type_00_01max__size_00_01NulTerminate_01_4_01_4.html new file mode 100644 index 000000000..64f49b335 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1basic__sstring_3_01char__type_00_01size__type_00_01max__size_00_01NulTerminate_01_4_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash< seastar::basic_sstring< char_type, size_type, max_size, NulTerminate > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::basic_sstring< char_type, size_type, max_size, NulTerminate > > Struct Template Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (const seastar::basic_sstring< char_type, size_type, max_size, NulTerminate > &s) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1basic__sstring_3_01char__type_00_01size__type_00_01max__size_00fbbc76df89680f75689dd49cecc4b76c.html b/master/structstd_1_1hash_3_01seastar_1_1basic__sstring_3_01char__type_00_01size__type_00_01max__size_00fbbc76df89680f75689dd49cecc4b76c.html new file mode 100644 index 000000000..6f5409253 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1basic__sstring_3_01char__type_00_01size__type_00_01max__size_00fbbc76df89680f75689dd49cecc4b76c.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::basic_sstring< char_type, size_type, max_size, NulTerminate > > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::basic_sstring< char_type, size_type, max_size, NulTerminate > >, including all inherited members.

    + + +
    operator()(const seastar::basic_sstring< char_type, size_type, max_size, NulTerminate > &s) const (defined in std::hash< seastar::basic_sstring< char_type, size_type, max_size, NulTerminate > >)std::hash< seastar::basic_sstring< char_type, size_type, max_size, NulTerminate > >inline
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1checked__ptr_3_01T_01_4_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1checked__ptr_3_01T_01_4_01_4-members.html new file mode 100644 index 000000000..e106875fa --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1checked__ptr_3_01T_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::checked_ptr< T > > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::checked_ptr< T > >, including all inherited members.

    + + +
    operator()(const seastar::checked_ptr< T > &p) conststd::hash< seastar::checked_ptr< T > >inline
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1checked__ptr_3_01T_01_4_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1checked__ptr_3_01T_01_4_01_4.html new file mode 100644 index 000000000..219ada293 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1checked__ptr_3_01T_01_4_01_4.html @@ -0,0 +1,132 @@ + + + + + + + +Seastar: std::hash< seastar::checked_ptr< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::checked_ptr< T > > Struct Template Reference
    +
    +
    +

    Detailed Description

    +
    template<typename T>
    +struct std::hash< seastar::checked_ptr< T > >

    std::hash specialization for seastar::checked_ptr class

    +
    +

    #include <seastar/core/checked_ptr.hh>

    + + + + +

    +Public Member Functions

    size_t operator() (const seastar::checked_ptr< T > &p) const
     
    +

    Member Function Documentation

    + +

    ◆ operator()()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + + +
    size_t std::hash< seastar::checked_ptr< T > >::operator() (const seastar::checked_ptr< T > & p) const
    +
    +inline
    +
    +

    Get the hash value for the given seastar::checked_ptr object. The hash will calculated using the seastar::checked_ptr::hash method.

    Parameters
    + + +
    pobject for hash value calculation
    +
    +
    +
    Returns
    The hash value for the given object
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1ipv4__addr_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1ipv4__addr_01_4-members.html new file mode 100644 index 000000000..7950ac616 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1ipv4__addr_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::ipv4_addr > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::ipv4_addr >, including all inherited members.

    + + +
    operator()(const seastar::ipv4_addr &) const (defined in std::hash< seastar::ipv4_addr >)std::hash< seastar::ipv4_addr >
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1ipv4__addr_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1ipv4__addr_01_4.html new file mode 100644 index 000000000..771d0e433 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1ipv4__addr_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash< seastar::ipv4_addr > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::ipv4_addr > Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (const seastar::ipv4_addr &) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4-members.html new file mode 100644 index 000000000..2c691b677 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::lw_shared_ptr< T > > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::lw_shared_ptr< T > >, including all inherited members.

    + + +
    operator()(const seastar::lw_shared_ptr< T > &p) const (defined in std::hash< seastar::lw_shared_ptr< T > >)std::hash< seastar::lw_shared_ptr< T > >inline
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4.html new file mode 100644 index 000000000..3ae7e5421 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: std::hash< seastar::lw_shared_ptr< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::lw_shared_ptr< T > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for std::hash< seastar::lw_shared_ptr< T > >:
    +
    +
    + +
    + + + + +

    +Public Member Functions

    +size_t operator() (const seastar::lw_shared_ptr< T > &p) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4.png b/master/structstd_1_1hash_3_01seastar_1_1lw__shared__ptr_3_01T_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..9a8ef791003edcb287928c72ebb56e3d78a1f4f0 GIT binary patch literal 735 zcmeAS@N?(olHy`uVBq!ia0vp^pMf}lgBeKvUa;90NJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~<$1a|hEy=Vo%^A%`-UD(0fw7Zkp$(_1ZIs-)>^Ll*bS zcP#Fc?5@8&V;vEBd*!|I*~>q@ZGT+6Qh&u;#o~;>i_6x&|G0XNS8Wx)_NyHUe#JM> z8l0al7+*WD`b=rSuIE3U9(89`zrU?|fAN-NgD$5Z{P&-%-hY15m)ToqsGi&}wpr!p z^`vPk|7T6Pc_v4XvBurJ;iQS;=eK6^Us}$TKY6(zJ%w$CzxHW{e_KECJc!pmPXZ(U z%;uRlQw}jKyOhNCVf|5{cG2P;H=kEAR%(01K3>?KeEn?JahtNVhKYL&_kXJE{3$p` z*Xif?*LHV~DVE%>pQC*^I^ylIgAYI3u#o{+<9igfBc5?x?_%p zks@)1?*gZ9wN2rxRlH^LRW@vKXsXP+{u#yBj|v}rDOg;3W!3I!yKGdIpP7V*#%&Cq ze0f!n_wDEFzXsSEYE3czlrv!+W3lWM^Yg`jPr1(OpTU2=`1y`~Rr8W7kMTv8Prl%M zd;8n(Z|_=sxo#!aJAK!-?}sG6zg;uC?#EiDAKJfeTG!96%np3}U2ehRjKAAwGTyu1 tbB1AlwjuM6>!46Ne*Ny59Ie01Oh+a!{TBD_956L9c)I$ztaD0e0szkvd2s*$ literal 0 HcmV?d00001 diff --git a/master/structstd_1_1hash_3_01seastar_1_1memory_1_1allocation__site_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1memory_1_1allocation__site_01_4-members.html new file mode 100644 index 000000000..80f70518f --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1memory_1_1allocation__site_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::memory::allocation_site > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::memory::allocation_site >, including all inherited members.

    + + +
    operator()(const seastar::memory::allocation_site &bi) const (defined in std::hash< seastar::memory::allocation_site >)std::hash< seastar::memory::allocation_site >inline
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1memory_1_1allocation__site_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1memory_1_1allocation__site_01_4.html new file mode 100644 index 000000000..c1eb6ad8c --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1memory_1_1allocation__site_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash< seastar::memory::allocation_site > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::memory::allocation_site > Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (const seastar::memory::allocation_site &bi) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1labels__type_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1labels__type_01_4-members.html new file mode 100644 index 000000000..7de230f7c --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1labels__type_01_4-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::metrics::impl::labels_type > Member List
    +
    + + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1labels__type_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1labels__type_01_4.html new file mode 100644 index 000000000..d1dce2096 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1labels__type_01_4.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: std::hash< seastar::metrics::impl::labels_type > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::metrics::impl::labels_type > Struct Reference
    +
    +
    + + + + + + +

    +Public Types

    +using argument_type = seastar::metrics::impl::labels_type
     
    +using result_type = ::std::size_t
     
    + + + +

    +Public Member Functions

    +result_type operator() (argument_type const &s) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1metric__id_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1metric__id_01_4-members.html new file mode 100644 index 000000000..cf6a7a6a0 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1metric__id_01_4-members.html @@ -0,0 +1,85 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::metrics::impl::metric_id > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::metrics::impl::metric_id >, including all inherited members.

    + + + + +
    argument_type typedef (defined in std::hash< seastar::metrics::impl::metric_id >)std::hash< seastar::metrics::impl::metric_id >
    operator()(argument_type const &s) const (defined in std::hash< seastar::metrics::impl::metric_id >)std::hash< seastar::metrics::impl::metric_id >inline
    result_type typedef (defined in std::hash< seastar::metrics::impl::metric_id >)std::hash< seastar::metrics::impl::metric_id >
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1metric__id_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1metric__id_01_4.html new file mode 100644 index 000000000..a1b18c1ea --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1metrics_1_1impl_1_1metric__id_01_4.html @@ -0,0 +1,102 @@ + + + + + + + +Seastar: std::hash< seastar::metrics::impl::metric_id > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::metrics::impl::metric_id > Struct Reference
    +
    +
    + + + + + + +

    +Public Types

    +typedef seastar::metrics::impl::metric_id argument_type
     
    +typedef ::std::size_t result_type
     
    + + + +

    +Public Member Functions

    +result_type operator() (argument_type const &s) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1net_1_1inet__address_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1net_1_1inet__address_01_4-members.html new file mode 100644 index 000000000..b042d7ebf --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1net_1_1inet__address_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::net::inet_address > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::net::inet_address >, including all inherited members.

    + + +
    operator()(const seastar::net::inet_address &) const (defined in std::hash< seastar::net::inet_address >)std::hash< seastar::net::inet_address >
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1net_1_1inet__address_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1net_1_1inet__address_01_4.html new file mode 100644 index 000000000..169bd1edd --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1net_1_1inet__address_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash< seastar::net::inet_address > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::net::inet_address > Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (const seastar::net::inet_address &) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv4__address_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv4__address_01_4-members.html new file mode 100644 index 000000000..60cd808c4 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv4__address_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::net::ipv4_address > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::net::ipv4_address >, including all inherited members.

    + + +
    operator()(seastar::net::ipv4_address a) const (defined in std::hash< seastar::net::ipv4_address >)std::hash< seastar::net::ipv4_address >inline
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv4__address_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv4__address_01_4.html new file mode 100644 index 000000000..b8239a6d0 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv4__address_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash< seastar::net::ipv4_address > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::net::ipv4_address > Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (seastar::net::ipv4_address a) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv6__address_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv6__address_01_4-members.html new file mode 100644 index 000000000..812096b91 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv6__address_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::net::ipv6_address > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::net::ipv6_address >, including all inherited members.

    + + +
    operator()(const seastar::net::ipv6_address &) const (defined in std::hash< seastar::net::ipv6_address >)std::hash< seastar::net::ipv6_address >
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv6__address_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv6__address_01_4.html new file mode 100644 index 000000000..508037535 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1net_1_1ipv6__address_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash< seastar::net::ipv6_address > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::net::ipv6_address > Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (const seastar::net::ipv6_address &) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1rpc_1_1connection__id_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1rpc_1_1connection__id_01_4-members.html new file mode 100644 index 000000000..632d26015 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1rpc_1_1connection__id_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::rpc::connection_id > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::rpc::connection_id >, including all inherited members.

    + + +
    operator()(const seastar::rpc::connection_id &id) const (defined in std::hash< seastar::rpc::connection_id >)std::hash< seastar::rpc::connection_id >inline
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1rpc_1_1connection__id_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1rpc_1_1connection__id_01_4.html new file mode 100644 index 000000000..e6eb5be3f --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1rpc_1_1connection__id_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash< seastar::rpc::connection_id > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::rpc::connection_id > Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (const seastar::rpc::connection_id &id) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1rpc_1_1streaming__domain__type_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1rpc_1_1streaming__domain__type_01_4-members.html new file mode 100644 index 000000000..99283a9c5 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1rpc_1_1streaming__domain__type_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::rpc::streaming_domain_type > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::rpc::streaming_domain_type >, including all inherited members.

    + + +
    operator()(const seastar::rpc::streaming_domain_type &domain) const (defined in std::hash< seastar::rpc::streaming_domain_type >)std::hash< seastar::rpc::streaming_domain_type >inline
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1rpc_1_1streaming__domain__type_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1rpc_1_1streaming__domain__type_01_4.html new file mode 100644 index 000000000..b82194ccd --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1rpc_1_1streaming__domain__type_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash< seastar::rpc::streaming_domain_type > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::rpc::streaming_domain_type > Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (const seastar::rpc::streaming_domain_type &domain) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1scheduling__group_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1scheduling__group_01_4-members.html new file mode 100644 index 000000000..f2e7273c2 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1scheduling__group_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::scheduling_group > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::scheduling_group >, including all inherited members.

    + + +
    operator()(seastar::scheduling_group sg) const noexcept (defined in std::hash< seastar::scheduling_group >)std::hash< seastar::scheduling_group >inline
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1scheduling__group_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1scheduling__group_01_4.html new file mode 100644 index 000000000..206af5717 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1scheduling__group_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash< seastar::scheduling_group > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::scheduling_group > Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (seastar::scheduling_group sg) const noexcept
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4-members.html new file mode 100644 index 000000000..12c2814ae --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::shared_ptr< T > > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::shared_ptr< T > >, including all inherited members.

    + + +
    operator()(const seastar::shared_ptr< T > &p) const (defined in std::hash< seastar::shared_ptr< T > >)std::hash< seastar::shared_ptr< T > >inline
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4.html new file mode 100644 index 000000000..f4e9f6824 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: std::hash< seastar::shared_ptr< T > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::shared_ptr< T > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for std::hash< seastar::shared_ptr< T > >:
    +
    +
    + +
    + + + + +

    +Public Member Functions

    +size_t operator() (const seastar::shared_ptr< T > &p) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4.png b/master/structstd_1_1hash_3_01seastar_1_1shared__ptr_3_01T_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..327ae891483ad546dccd35235a833afb7fa814f1 GIT binary patch literal 707 zcmeAS@N?(olHy`uVBq!ia0vp^4}ds;gBeJgTXrr3QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;$_L( zlfESXEk2NRp|4-X_p;1^cII~8^3(?Z_;v!{vx;l2#Uy z@14sxut&^y_|E5deD>@`8@r|%^z+!BVQf6{J}0`_L`KQ>)`om&40!V zXL1r5|E$Vm(9SMBa67l~&{f9wHQB;?{2Uv0Y^!IOw^f$q!S7m@oIXzz-M@Ve?W2MVk*dov+)Lv(L|NZr!YH6~}DD zvl`;qO+5UUUp?ctre+;)-`|?6=WZ3=G?_WSrt9SQvy7jE^_jZXoH6TJe3UaK`K;OE z2Sr%|^H%qsWAFZ>dCT^Qk!yRyL%sQizO&kH8n5Ew`)jplE}wP`W7ze@ueNriZt4ey z;MCxwe!bD5d}W7Lzg&1(I*FyM9Ior0 zyRGj!_8@>kdx4hg;{T7eW?kJTzfX-}Ur_yb_WcqcR#>!7XLz3l3NdM5K$!u9(DvS< ew6xc+_}k~VAAkBQrW%;y7(8A5T-G@yGywn>Sw55i literal 0 HcmV?d00001 diff --git a/master/structstd_1_1hash_3_01seastar_1_1simple__backtrace_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1simple__backtrace_01_4-members.html new file mode 100644 index 000000000..98247c09b --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1simple__backtrace_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::simple_backtrace > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::simple_backtrace >, including all inherited members.

    + + +
    operator()(const seastar::simple_backtrace &b) const (defined in std::hash< seastar::simple_backtrace >)std::hash< seastar::simple_backtrace >inline
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1simple__backtrace_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1simple__backtrace_01_4.html new file mode 100644 index 000000000..cfe705a06 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1simple__backtrace_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash< seastar::simple_backtrace > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::simple_backtrace > Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (const seastar::simple_backtrace &b) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1socket__address_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1socket__address_01_4-members.html new file mode 100644 index 000000000..ee6377af1 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1socket__address_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::socket_address > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::socket_address >, including all inherited members.

    + + +
    operator()(const seastar::socket_address &) const (defined in std::hash< seastar::socket_address >)std::hash< seastar::socket_address >
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1socket__address_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1socket__address_01_4.html new file mode 100644 index 000000000..e1b4ba6b0 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1socket__address_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash< seastar::socket_address > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::socket_address > Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (const seastar::socket_address &) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1tasktrace_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1tasktrace_01_4-members.html new file mode 100644 index 000000000..15359d6ba --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1tasktrace_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::tasktrace > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::tasktrace >, including all inherited members.

    + + +
    operator()(const seastar::tasktrace &b) const (defined in std::hash< seastar::tasktrace >)std::hash< seastar::tasktrace >inline
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1tasktrace_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1tasktrace_01_4.html new file mode 100644 index 000000000..56e1bd06b --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1tasktrace_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash< seastar::tasktrace > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::tasktrace > Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (const seastar::tasktrace &b) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1transport_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1transport_01_4-members.html new file mode 100644 index 000000000..706b60ecb --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1transport_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::transport > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::transport >, including all inherited members.

    + + +
    operator()(seastar::transport tr) const (defined in std::hash< seastar::transport >)std::hash< seastar::transport >inline
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1transport_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1transport_01_4.html new file mode 100644 index 000000000..9fff2da9c --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1transport_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash< seastar::transport > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::transport > Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (seastar::transport tr) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1unix__domain__addr_01_4-members.html b/master/structstd_1_1hash_3_01seastar_1_1unix__domain__addr_01_4-members.html new file mode 100644 index 000000000..1a2dc46aa --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1unix__domain__addr_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash< seastar::unix_domain_addr > Member List
    +
    +
    + +

    This is the complete list of members for std::hash< seastar::unix_domain_addr >, including all inherited members.

    + + +
    operator()(const seastar::unix_domain_addr &) const (defined in std::hash< seastar::unix_domain_addr >)std::hash< seastar::unix_domain_addr >
    + + + + diff --git a/master/structstd_1_1hash_3_01seastar_1_1unix__domain__addr_01_4.html b/master/structstd_1_1hash_3_01seastar_1_1unix__domain__addr_01_4.html new file mode 100644 index 000000000..487442093 --- /dev/null +++ b/master/structstd_1_1hash_3_01seastar_1_1unix__domain__addr_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash< seastar::unix_domain_addr > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash< seastar::unix_domain_addr > Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (const seastar::unix_domain_addr &) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_1_1sockaddr__in_01_4-members.html b/master/structstd_1_1hash_3_1_1sockaddr__in_01_4-members.html new file mode 100644 index 000000000..37238b655 --- /dev/null +++ b/master/structstd_1_1hash_3_1_1sockaddr__in_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash<::sockaddr_in > Member List
    +
    +
    + +

    This is the complete list of members for std::hash<::sockaddr_in >, including all inherited members.

    + + +
    operator()(::sockaddr_in a) const (defined in std::hash<::sockaddr_in >)std::hash<::sockaddr_in >inline
    + + + + diff --git a/master/structstd_1_1hash_3_1_1sockaddr__in_01_4.html b/master/structstd_1_1hash_3_1_1sockaddr__in_01_4.html new file mode 100644 index 000000000..9e1c47cc8 --- /dev/null +++ b/master/structstd_1_1hash_3_1_1sockaddr__in_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash<::sockaddr_in > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash<::sockaddr_in > Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (::sockaddr_in a) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1hash_3_1_1sockaddr__un_01_4-members.html b/master/structstd_1_1hash_3_1_1sockaddr__un_01_4-members.html new file mode 100644 index 000000000..717f77b8b --- /dev/null +++ b/master/structstd_1_1hash_3_1_1sockaddr__un_01_4-members.html @@ -0,0 +1,83 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::hash<::sockaddr_un > Member List
    +
    +
    + +

    This is the complete list of members for std::hash<::sockaddr_un >, including all inherited members.

    + + +
    operator()(const ::sockaddr_un &) const (defined in std::hash<::sockaddr_un >)std::hash<::sockaddr_un >
    + + + + diff --git a/master/structstd_1_1hash_3_1_1sockaddr__un_01_4.html b/master/structstd_1_1hash_3_1_1sockaddr__un_01_4.html new file mode 100644 index 000000000..ec796d44a --- /dev/null +++ b/master/structstd_1_1hash_3_1_1sockaddr__un_01_4.html @@ -0,0 +1,92 @@ + + + + + + + +Seastar: std::hash<::sockaddr_un > Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    std::hash<::sockaddr_un > Struct Reference
    +
    +
    + + + + +

    +Public Member Functions

    +size_t operator() (const ::sockaddr_un &) const
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1tuple__element_3_01I_00_01seastar_1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.html b/master/structstd_1_1tuple__element_3_01I_00_01seastar_1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.html new file mode 100644 index 000000000..65b2245bc --- /dev/null +++ b/master/structstd_1_1tuple__element_3_01I_00_01seastar_1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.html @@ -0,0 +1,88 @@ + + + + + + + +Seastar: std::tuple_element< I, seastar::rpc::tuple< T... > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::tuple_element< I, seastar::rpc::tuple< T... > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for std::tuple_element< I, seastar::rpc::tuple< T... > >:
    +
    +
    + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1tuple__element_3_01I_00_01seastar_1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.png b/master/structstd_1_1tuple__element_3_01I_00_01seastar_1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..a5bbb6b7c32f610f35a69f1409e78f0dd2d10b23 GIT binary patch literal 925 zcmeAS@N?(olHy`uVBq!ia0y~yU{nOM12~w0Wa25~pFm0?z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-optS5v!~B@vz30lq40XDvgiGS`UWK_0-jbUJ)O^+R+rU$sEE8DlzV&GI)B@s=9s#$ zlGX83`*=QWY}*h z-}3n0F8jUHa*NE?>*X`6`OdQa{8F4@TXlceX|GdH{=Z3DZz?ab#4MyXWK!OvH4F3i zX8ynbI%bm0JM$@hmp*&iUi-M3$Me$LKN-%GzRc!yp7cbpP35FA%BNR z{*hIH!H2_{fiFIOAxDCr1XDo;2bU{D@F9T){~wGWfHHE490!zn7%N&78Tt)a9tgHE z*Z?KnC739X{9)sqmex4)CJT=OgM<*OiE|fjo$$KsSDIaX)jKJf=;`0X-bZY>&C6QQ zvOoRB-ScA3{%cRZZ4TPL$38o_dFhok2ZFS|u5{0uaQgQ2bVt4a(X*e-mpK=-Zo2N@ zt84q&s*g@^tmJu>9v(aRd?MEQvgY}wGtS#rU(Nev^(XDdy)PCw%-%Ax@yKr7{bt6(XA7dem+m`tWNnP< zznbZ}^UvC+&W + + + + + + +Seastar: std::tuple_size< seastar::rpc::tuple< T... > > Struct Template Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    std::tuple_size< seastar::rpc::tuple< T... > > Struct Template Reference
    +
    +
    +
    +Inheritance diagram for std::tuple_size< seastar::rpc::tuple< T... > >:
    +
    +
    + +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/master/structstd_1_1tuple__size_3_01seastar_1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.png b/master/structstd_1_1tuple__size_3_01seastar_1_1rpc_1_1tuple_3_01T_8_8_8_01_4_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..e4ba10b9fb74d3d24f0bdc6872d51be473f8828d GIT binary patch literal 764 zcmVvTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0007uNklZ^{Kch6v0uDQ5x%#PfoQv!lRADxE&xyjTYEh`)9$X~>e?uCNs=160>PyK%3`%- zb*g2nxH>kfX!0+5N2sEN7uv19~<-y#|bKpScCL z*r>}%$yk!k>L`F~@2ETPIZ1k>>j4a9Y-dXTD*%$TS6>Z4lD=30AOHjaN%E^F05dbk z0{Bxs06fb(fXBl*0q+2w@%tv=9zYbq01yBGJSzYIcvb)a@T>p;;8_6xz_S7XfM*2& z0M7~l0G<^906Z%I0C-ja0Pw5;0PvSGGxIDAz^?*800;m8epLaOI%#Z0r-SPl#eH9G z^JT8>09$ks0D%3v1HfLh3xF530bO=A&e!B?beJ&q3c&O5#Jxd(9GPCEe`&R`pFrW7W&#S!t$TDh0B1i`6iS*7GF;(FTx{Dkc|MU&q(+yaX^m zQ!p)mvafPr)vL-(eLTCqlsO5|P!mCU1hxSvi_DUZsRot)Of!}vl044)2LUvedvgRD z2=XG>*x(*@U}^bB1p{jU}+VA@>F(eK%MD3Yd{5{yBR%SPS=1r zQRiErSnlFmU}iku0xLe%EwI^_R?+$8PRNe{Kv(w4LYcP%&7>m$0000 + + + + + + +Seastar: seastar/coroutine/switch_to.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    switch_to.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2022-present ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/coroutine.hh>
    + +
    26
    +
    27namespace seastar::coroutine {
    +
    28
    +
    54
    +
    55struct [[nodiscard("must co_await a switch_to object")]] switch_to final : task {
    +
    56 scheduling_group _prev_sg;
    +
    57 scheduling_group _switch_to_sg;
    +
    58 task* _task = nullptr;
    +
    59public:
    +
    60 explicit switch_to(scheduling_group new_sg) noexcept
    +
    61 : _prev_sg(current_scheduling_group())
    +
    62 , _switch_to_sg(std::move(new_sg))
    +
    63 { }
    +
    64
    +
    65 switch_to(const switch_to&) = delete;
    +
    66 switch_to(switch_to&&) = delete;
    +
    67
    +
    68 bool await_ready() const noexcept {
    +
    69 return current_scheduling_group() == _switch_to_sg;
    +
    70 }
    +
    71
    +
    72 template<typename T>
    +
    73 void await_suspend(std::coroutine_handle<T> hndl) noexcept {
    +
    74 auto& t = hndl.promise();
    +
    75 t.set_scheduling_group(_switch_to_sg);
    +
    76 _task = &t;
    +
    77 schedule(_task);
    +
    78 }
    +
    79
    +
    80 scheduling_group await_resume() {
    +
    81 return _prev_sg;
    +
    82 }
    +
    83
    +
    84 virtual void run_and_dispose() noexcept override { }
    +
    85
    +
    86 virtual task* waiting_task() noexcept override {
    +
    87 return _task;
    +
    88 }
    +
    89};
    +
    90
    +
    91} // namespace seastar::coroutine
    +
    Identifies function calls that are accounted as a group.
    Definition: scheduling.hh:285
    +
    Definition: task.hh:34
    +
    scheduling_group current_scheduling_group() noexcept
    Returns the current scheduling group.
    Definition: scheduling.hh:399
    + +
    Definition: switch_to.hh:55
    +
    virtual task * waiting_task() noexcept override
    Returns the next task which is waiting for this task to complete execution, or nullptr.
    Definition: switch_to.hh:86
    +
    + + + + diff --git a/master/sync_off.png b/master/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/master/sync_on.png b/master/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/master/systemwide__memory__barrier_8hh_source.html b/master/systemwide__memory__barrier_8hh_source.html new file mode 100644 index 000000000..4337fdd7d --- /dev/null +++ b/master/systemwide__memory__barrier_8hh_source.html @@ -0,0 +1,115 @@ + + + + + + + +Seastar: seastar/core/systemwide_memory_barrier.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    systemwide_memory_barrier.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2015 Scylla DB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24namespace seastar {
    +
    25
    +
    27
    +
    28// cause all threads to invoke a full memory barrier
    +
    29void systemwide_memory_barrier();
    +
    30// attempt to invoke a systemwide memory barrier; return false
    +
    31// if doing so would cause lock contention in the kernel
    +
    32bool try_systemwide_memory_barrier();
    +
    33
    +
    35
    +
    36}
    +
    37
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/tab_a.png b/master/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/master/tab_b.png b/master/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/master/tabs.css b/master/tabs.css new file mode 100644 index 000000000..fb0977a52 --- /dev/null +++ b/master/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#666;-webkit-transition:all 0.25s;transition:all 0.25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px, 1px, 1px, 1px)}#main-menu-state:not(:checked)~#main-menu{display:none}#main-menu-state:checked~#main-menu{display:block}@media (min-width: 768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked)~#main-menu{display:block}}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/master/task_8hh_source.html b/master/task_8hh_source.html new file mode 100644 index 000000000..82916e523 --- /dev/null +++ b/master/task_8hh_source.html @@ -0,0 +1,166 @@ + + + + + + + +Seastar: seastar/core/task.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    task.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2015 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    + +
    25#include <seastar/util/backtrace.hh>
    +
    26
    +
    27#ifndef SEASTAR_MODULE
    +
    28#include <utility>
    +
    29#endif
    +
    30
    +
    31namespace seastar {
    +
    32
    +
    33SEASTAR_MODULE_EXPORT
    +
    34class task {
    +
    35protected:
    + +
    37private:
    +
    38#ifdef SEASTAR_TASK_BACKTRACE
    + +
    40#endif
    +
    41protected:
    +
    42 // Task destruction is performed by run_and_dispose() via a concrete type,
    +
    43 // so no need for a virtual destructor here. Derived classes that implement
    +
    44 // run_and_dispose() should be declared final to avoid losing concrete type
    +
    45 // information via inheritance.
    +
    46 ~task() = default;
    +
    47
    +
    48 scheduling_group set_scheduling_group(scheduling_group new_sg) noexcept{
    +
    49 return std::exchange(_sg, new_sg);
    +
    50 }
    +
    51public:
    +
    52 explicit task(scheduling_group sg = current_scheduling_group()) noexcept : _sg(sg) {}
    +
    53 virtual void run_and_dispose() noexcept = 0;
    +
    55 virtual task* waiting_task() noexcept = 0;
    +
    56 scheduling_group group() const { return _sg; }
    +
    57 shared_backtrace get_backtrace() const;
    +
    58#ifdef SEASTAR_TASK_BACKTRACE
    +
    59 void make_backtrace() noexcept;
    +
    60#else
    +
    61 void make_backtrace() noexcept {}
    +
    62#endif
    +
    63};
    +
    64
    +
    65inline
    +
    66shared_backtrace task::get_backtrace() const {
    +
    67#ifdef SEASTAR_TASK_BACKTRACE
    +
    68 return _bt;
    +
    69#else
    +
    70 return {};
    +
    71#endif
    +
    72}
    +
    73
    +
    74SEASTAR_MODULE_EXPORT_BEGIN
    +
    75
    +
    76void schedule(task* t) noexcept;
    +
    77void schedule_checked(task* t) noexcept;
    +
    78void schedule_urgent(task* t) noexcept;
    +
    79
    +
    80SEASTAR_MODULE_EXPORT_END
    +
    81}
    +
    Definition: shared_ptr.hh:268
    +
    Identifies function calls that are accounted as a group.
    Definition: scheduling.hh:285
    +
    Definition: task.hh:34
    +
    virtual task * waiting_task() noexcept=0
    Returns the next task which is waiting for this task to complete execution, or nullptr.
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    scheduling_group current_scheduling_group() noexcept
    Returns the current scheduling group.
    Definition: scheduling.hh:399
    + +
    + + + + diff --git a/master/tcp-stack_8hh_source.html b/master/tcp-stack_8hh_source.html new file mode 100644 index 000000000..7f792df5b --- /dev/null +++ b/master/tcp-stack_8hh_source.html @@ -0,0 +1,133 @@ + + + + + + + +Seastar: seastar/net/tcp-stack.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    tcp-stack.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22// tcp/network-stack integration
    +
    23
    +
    24#pragma once
    +
    25
    +
    26#include <seastar/core/future.hh>
    +
    27#include <seastar/core/internal/api-level.hh>
    +
    28
    +
    29namespace seastar {
    +
    30
    +
    31struct listen_options;
    +
    32
    +
    33class server_socket;
    +
    34class socket;
    +
    35class connected_socket;
    +
    36
    +
    37namespace net {
    +
    38
    +
    39struct ipv4_traits;
    +
    40template <typename InetTraits>
    +
    41class tcp;
    +
    42
    +
    43server_socket
    +
    44tcpv4_listen(tcp<ipv4_traits>& tcpv4, uint16_t port, listen_options opts);
    +
    45
    + +
    47tcpv4_socket(tcp<ipv4_traits>& tcpv4);
    +
    48
    +
    49}
    +
    50
    +
    51}
    +
    Definition: api.hh:283
    +
    ::seastar::socket socket(shared_ptr< certificate_credentials >, sstring name)
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/tcp_8hh_source.html b/master/tcp_8hh_source.html new file mode 100644 index 000000000..dc44c4943 --- /dev/null +++ b/master/tcp_8hh_source.html @@ -0,0 +1,2288 @@ + + + + + + + +Seastar: seastar/net/tcp.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    tcp.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <unordered_map>
    +
    26#include <map>
    +
    27#include <functional>
    +
    28#include <deque>
    +
    29#include <chrono>
    +
    30#include <random>
    +
    31#include <stdexcept>
    +
    32#include <system_error>
    +
    33#include <gnutls/crypto.h>
    +
    34#endif
    +
    35#include <seastar/core/shared_ptr.hh>
    +
    36#include <seastar/core/queue.hh>
    +
    37#include <seastar/core/semaphore.hh>
    +
    38#include <seastar/core/byteorder.hh>
    + +
    40#include <seastar/net/net.hh>
    +
    41#include <seastar/net/ip_checksum.hh>
    +
    42#include <seastar/net/ip.hh>
    +
    43#include <seastar/net/const.hh>
    +
    44#include <seastar/net/packet-util.hh>
    +
    45#include <seastar/util/std-compat.hh>
    +
    46
    +
    47namespace seastar {
    +
    48
    +
    49using namespace std::chrono_literals;
    +
    50
    +
    51namespace net {
    +
    52
    +
    53struct tcp_hdr;
    +
    54
    +
    55inline auto tcp_error(int err) {
    +
    56 return std::system_error(err, std::system_category());
    +
    57}
    +
    58
    +
    59inline auto tcp_reset_error() {
    +
    60 return tcp_error(ECONNRESET);
    +
    61};
    +
    62
    +
    63inline auto tcp_connect_error() {
    +
    64 return tcp_error(ECONNABORTED);
    +
    65}
    +
    66
    +
    67inline auto tcp_refused_error() {
    +
    68 return tcp_error(ECONNREFUSED);
    +
    69};
    +
    70
    +
    71enum class tcp_state : uint16_t {
    +
    72 CLOSED = (1 << 0),
    +
    73 LISTEN = (1 << 1),
    +
    74 SYN_SENT = (1 << 2),
    +
    75 SYN_RECEIVED = (1 << 3),
    +
    76 ESTABLISHED = (1 << 4),
    +
    77 FIN_WAIT_1 = (1 << 5),
    +
    78 FIN_WAIT_2 = (1 << 6),
    +
    79 CLOSE_WAIT = (1 << 7),
    +
    80 CLOSING = (1 << 8),
    +
    81 LAST_ACK = (1 << 9),
    +
    82 TIME_WAIT = (1 << 10)
    +
    83};
    +
    84
    +
    85inline tcp_state operator|(tcp_state s1, tcp_state s2) {
    +
    86 return tcp_state(uint16_t(s1) | uint16_t(s2));
    +
    87}
    +
    88
    +
    89template <typename... Args>
    +
    90void tcp_debug(const char* fmt, Args&&... args) {
    +
    91#if TCP_DEBUG
    +
    92 print(fmt, std::forward<Args>(args)...);
    +
    93#endif
    +
    94}
    +
    95
    +
    96struct tcp_option {
    +
    97 // The kind and len field are fixed and defined in TCP protocol
    +
    98 enum class option_kind: uint8_t { mss = 2, win_scale = 3, sack = 4, timestamps = 8, nop = 1, eol = 0 };
    +
    99 enum class option_len: uint8_t { mss = 4, win_scale = 3, sack = 2, timestamps = 10, nop = 1, eol = 1 };
    +
    100 static void write(char* p, option_kind kind, option_len len) {
    +
    101 p[0] = static_cast<uint8_t>(kind);
    +
    102 if (static_cast<uint8_t>(len) > 1) {
    +
    103 p[1] = static_cast<uint8_t>(len);
    +
    104 }
    +
    105 }
    +
    106 struct mss {
    +
    107 static constexpr option_kind kind = option_kind::mss;
    +
    108 static constexpr option_len len = option_len::mss;
    +
    109 uint16_t mss;
    +
    110 static tcp_option::mss read(const char* p) {
    + +
    112 x.mss = read_be<uint16_t>(p + 2);
    +
    113 return x;
    +
    114 }
    +
    115 void write(char* p) const {
    +
    116 tcp_option::write(p, kind, len);
    +
    117 write_be<uint16_t>(p + 2, mss);
    +
    118 }
    +
    119 };
    +
    120 struct win_scale {
    +
    121 static constexpr option_kind kind = option_kind::win_scale;
    +
    122 static constexpr option_len len = option_len::win_scale;
    +
    123 uint8_t shift;
    +
    124 static tcp_option::win_scale read(const char* p) {
    + +
    126 x.shift = p[2];
    +
    127 return x;
    +
    128 }
    +
    129 void write(char* p) const {
    +
    130 tcp_option::write(p, kind, len);
    +
    131 p[2] = shift;
    +
    132 }
    +
    133 };
    +
    134 struct sack {
    +
    135 static constexpr option_kind kind = option_kind::sack;
    +
    136 static constexpr option_len len = option_len::sack;
    +
    137 static tcp_option::sack read(const char* p) {
    +
    138 return {};
    +
    139 }
    +
    140 void write(char* p) const {
    +
    141 tcp_option::write(p, kind, len);
    +
    142 }
    +
    143 };
    +
    144 struct timestamps {
    +
    145 static constexpr option_kind kind = option_kind::timestamps;
    +
    146 static constexpr option_len len = option_len::timestamps;
    +
    147 uint32_t t1;
    +
    148 uint32_t t2;
    +
    149 static tcp_option::timestamps read(const char* p) {
    + +
    151 ts.t1 = read_be<uint32_t>(p + 2);
    +
    152 ts.t2 = read_be<uint32_t>(p + 6);
    +
    153 return ts;
    +
    154 }
    +
    155 void write(char* p) const {
    +
    156 tcp_option::write(p, kind, len);
    +
    157 write_be<uint32_t>(p + 2, t1);
    +
    158 write_be<uint32_t>(p + 6, t2);
    +
    159 }
    +
    160 };
    +
    161 struct nop {
    +
    162 static constexpr option_kind kind = option_kind::nop;
    +
    163 static constexpr option_len len = option_len::nop;
    +
    164 void write(char* p) const {
    +
    165 tcp_option::write(p, kind, len);
    +
    166 }
    +
    167 };
    +
    168 struct eol {
    +
    169 static constexpr option_kind kind = option_kind::eol;
    +
    170 static constexpr option_len len = option_len::eol;
    +
    171 void write(char* p) const {
    +
    172 tcp_option::write(p, kind, len);
    +
    173 }
    +
    174 };
    +
    175 static const uint8_t align = 4;
    +
    176
    +
    177 void parse(uint8_t* beg, uint8_t* end);
    +
    178 uint8_t fill(void* h, const tcp_hdr* th, uint8_t option_size);
    +
    179 uint8_t get_size(bool syn_on, bool ack_on);
    +
    180
    +
    181 // For option negotiattion
    +
    182 bool _mss_received = false;
    +
    183 bool _win_scale_received = false;
    +
    184 bool _timestamps_received = false;
    +
    185 bool _sack_received = false;
    +
    186
    +
    187 // Option data
    +
    188 uint16_t _remote_mss = 536;
    +
    189 uint16_t _local_mss;
    +
    190 uint8_t _remote_win_scale = 0;
    +
    191 uint8_t _local_win_scale = 0;
    +
    192};
    +
    193inline char*& operator+=(char*& x, tcp_option::option_len len) { x += uint8_t(len); return x; }
    +
    194inline const char*& operator+=(const char*& x, tcp_option::option_len len) { x += uint8_t(len); return x; }
    +
    195inline uint8_t& operator+=(uint8_t& x, tcp_option::option_len len) { x += uint8_t(len); return x; }
    +
    196
    +
    197struct tcp_seq {
    +
    198 uint32_t raw;
    +
    199};
    +
    200
    +
    201inline tcp_seq ntoh(tcp_seq s) {
    +
    202 return tcp_seq { ntoh(s.raw) };
    +
    203}
    +
    204
    +
    205inline tcp_seq hton(tcp_seq s) {
    +
    206 return tcp_seq { hton(s.raw) };
    +
    207}
    +
    208
    +
    209inline
    +
    210std::ostream& operator<<(std::ostream& os, tcp_seq s) {
    +
    211 return os << s.raw;
    +
    212}
    +
    213
    +
    214inline tcp_seq make_seq(uint32_t raw) { return tcp_seq{raw}; }
    +
    215inline tcp_seq& operator+=(tcp_seq& s, int32_t n) { s.raw += n; return s; }
    +
    216inline tcp_seq& operator-=(tcp_seq& s, int32_t n) { s.raw -= n; return s; }
    +
    217inline tcp_seq operator+(tcp_seq s, int32_t n) { return s += n; }
    +
    218inline tcp_seq operator-(tcp_seq s, int32_t n) { return s -= n; }
    +
    219inline int32_t operator-(tcp_seq s, tcp_seq q) { return s.raw - q.raw; }
    +
    220inline bool operator==(tcp_seq s, tcp_seq q) { return s.raw == q.raw; }
    +
    221inline bool operator!=(tcp_seq s, tcp_seq q) { return !(s == q); }
    +
    222inline bool operator<(tcp_seq s, tcp_seq q) { return s - q < 0; }
    +
    223inline bool operator>(tcp_seq s, tcp_seq q) { return q < s; }
    +
    224inline bool operator<=(tcp_seq s, tcp_seq q) { return !(s > q); }
    +
    225inline bool operator>=(tcp_seq s, tcp_seq q) { return !(s < q); }
    +
    226
    +
    227struct tcp_hdr {
    +
    228 static constexpr size_t len = 20;
    +
    229 uint16_t src_port;
    +
    230 uint16_t dst_port;
    +
    231 tcp_seq seq;
    +
    232 tcp_seq ack;
    +
    233 uint8_t rsvd1 : 4;
    +
    234 uint8_t data_offset : 4;
    +
    235 uint8_t f_fin : 1;
    +
    236 uint8_t f_syn : 1;
    +
    237 uint8_t f_rst : 1;
    +
    238 uint8_t f_psh : 1;
    +
    239 uint8_t f_ack : 1;
    +
    240 uint8_t f_urg : 1;
    +
    241 uint8_t rsvd2 : 2;
    +
    242 uint16_t window;
    +
    243 uint16_t checksum;
    +
    244 uint16_t urgent;
    +
    245 static tcp_hdr read(const char* p) {
    +
    246 tcp_hdr h;
    +
    247 h.src_port = read_be<uint16_t>(p + 0);
    +
    248 h.dst_port = read_be<uint16_t>(p + 2);
    +
    249 h.seq = tcp_seq{read_be<uint32_t>(p + 4)};
    +
    250 h.ack = tcp_seq{read_be<uint32_t>(p + 8)};
    +
    251 h.rsvd1 = p[12] & 15;
    +
    252 h.data_offset = uint8_t(p[12]) >> 4;
    +
    253 h.f_fin = (uint8_t(p[13]) >> 0) & 1;
    +
    254 h.f_syn = (uint8_t(p[13]) >> 1) & 1;
    +
    255 h.f_rst = (uint8_t(p[13]) >> 2) & 1;
    +
    256 h.f_psh = (uint8_t(p[13]) >> 3) & 1;
    +
    257 h.f_ack = (uint8_t(p[13]) >> 4) & 1;
    +
    258 h.f_urg = (uint8_t(p[13]) >> 5) & 1;
    +
    259 h.rsvd2 = (uint8_t(p[13]) >> 6) & 3;
    +
    260 h.window = read_be<uint16_t>(p + 14);
    +
    261 h.checksum = read_be<uint16_t>(p + 16);
    +
    262 h.urgent = read_be<uint16_t>(p + 18);
    +
    263 return h;
    +
    264 }
    +
    265 void write(char* p) const {
    +
    266 write_be<uint16_t>(p + 0, src_port);
    +
    267 write_be<uint16_t>(p + 2, dst_port);
    +
    268 write_be<uint32_t>(p + 4, seq.raw);
    +
    269 write_be<uint32_t>(p + 8, ack.raw);
    +
    270 p[12] = rsvd1 | (data_offset << 4);
    +
    271 p[13] = (f_fin << 0)
    +
    272 | (f_syn << 1)
    +
    273 | (f_rst << 2)
    +
    274 | (f_psh << 3)
    +
    275 | (f_ack << 4)
    +
    276 | (f_urg << 5)
    +
    277 | (rsvd2 << 6);
    +
    278 write_be<uint16_t>(p + 14, window);
    +
    279 write_be<uint16_t>(p + 16, checksum);
    +
    280 write_be<uint16_t>(p + 18, urgent);
    +
    281 }
    +
    282 static void write_nbo_checksum(char* p, uint16_t checksum_in_network_byte_order) {
    +
    283 std::copy_n(reinterpret_cast<const char*>(&checksum_in_network_byte_order), 2, p + 16);
    +
    284 }
    +
    285};
    +
    286
    +
    287struct tcp_tag {};
    + +
    289
    +
    290template <typename InetTraits>
    +
    291class tcp {
    +
    292public:
    +
    293 using ipaddr = typename InetTraits::address_type;
    +
    294 using inet_type = typename InetTraits::inet_type;
    + +
    296 using connid_hash = typename connid::connid_hash;
    +
    297 class connection;
    +
    298 class listener;
    +
    299private:
    +
    300 class tcb;
    +
    301
    +
    302 class tcb : public enable_lw_shared_from_this<tcb> {
    +
    303 using clock_type = lowres_clock;
    +
    304 static constexpr tcp_state CLOSED = tcp_state::CLOSED;
    +
    305 static constexpr tcp_state LISTEN = tcp_state::LISTEN;
    +
    306 static constexpr tcp_state SYN_SENT = tcp_state::SYN_SENT;
    +
    307 static constexpr tcp_state SYN_RECEIVED = tcp_state::SYN_RECEIVED;
    +
    308 static constexpr tcp_state ESTABLISHED = tcp_state::ESTABLISHED;
    +
    309 static constexpr tcp_state FIN_WAIT_1 = tcp_state::FIN_WAIT_1;
    +
    310 static constexpr tcp_state FIN_WAIT_2 = tcp_state::FIN_WAIT_2;
    +
    311 static constexpr tcp_state CLOSE_WAIT = tcp_state::CLOSE_WAIT;
    +
    312 static constexpr tcp_state CLOSING = tcp_state::CLOSING;
    +
    313 static constexpr tcp_state LAST_ACK = tcp_state::LAST_ACK;
    +
    314 static constexpr tcp_state TIME_WAIT = tcp_state::TIME_WAIT;
    +
    315 tcp_state _state = CLOSED;
    +
    316 tcp& _tcp;
    +
    317 connection* _conn = nullptr;
    +
    318 promise<> _connect_done;
    +
    319 std::optional<promise<>> _fin_recvd_promise = promise<>();
    +
    320 ipaddr _local_ip;
    +
    321 ipaddr _foreign_ip;
    +
    322 uint16_t _local_port;
    +
    323 uint16_t _foreign_port;
    +
    324 struct unacked_segment {
    +
    325 packet p;
    +
    326 uint16_t data_len;
    +
    327 unsigned nr_transmits;
    +
    328 clock_type::time_point tx_time;
    +
    329 };
    +
    330 struct send {
    +
    331 tcp_seq unacknowledged;
    +
    332 tcp_seq next;
    +
    333 uint32_t window;
    +
    334 uint8_t window_scale;
    +
    335 uint16_t mss;
    +
    336 tcp_seq urgent;
    +
    337 tcp_seq wl1;
    +
    338 tcp_seq wl2;
    +
    339 tcp_seq initial;
    +
    340 std::deque<unacked_segment> data;
    +
    341 std::deque<packet> unsent;
    +
    342 uint32_t unsent_len = 0;
    +
    343 bool closed = false;
    +
    344 promise<> _window_opened;
    +
    345 // Wait for all data are acked
    +
    346 std::optional<promise<>> _all_data_acked_promise;
    +
    347 // Limit number of data queued into send queue
    +
    348 size_t max_queue_space = 212992;
    +
    349 size_t current_queue_space = 0;
    +
    350 // wait for there is at least one byte available in the queue
    +
    351 std::optional<promise<>> _send_available_promise;
    +
    352 // Round-trip time variation
    +
    353 std::chrono::milliseconds rttvar;
    +
    354 // Smoothed round-trip time
    +
    355 std::chrono::milliseconds srtt;
    +
    356 bool first_rto_sample = true;
    +
    357 clock_type::time_point syn_tx_time;
    +
    358 // Congestion window
    +
    359 uint32_t cwnd;
    +
    360 // Slow start threshold
    +
    361 uint32_t ssthresh;
    +
    362 // Duplicated ACKs
    +
    363 uint16_t dupacks = 0;
    +
    364 unsigned syn_retransmit = 0;
    +
    365 unsigned fin_retransmit = 0;
    +
    366 uint32_t limited_transfer = 0;
    +
    367 uint32_t partial_ack = 0;
    +
    368 tcp_seq recover;
    +
    369 bool window_probe = false;
    +
    370 uint8_t zero_window_probing_out = 0;
    +
    371 } _snd;
    +
    372 struct receive {
    +
    373 tcp_seq next;
    +
    374 uint32_t window;
    +
    375 uint8_t window_scale;
    +
    376 uint16_t mss;
    +
    377 tcp_seq urgent;
    +
    378 tcp_seq initial;
    +
    379 std::deque<packet> data;
    +
    380 // The total size of data stored in std::deque<packet> data
    +
    381 size_t data_size = 0;
    +
    382 tcp_packet_merger out_of_order;
    +
    383 std::optional<promise<>> _data_received_promise;
    +
    384 // The maximun memory buffer size allowed for receiving
    +
    385 // Currently, it is the same as default receive window size when window scaling is enabled
    +
    386 size_t max_receive_buf_size = 3737600;
    +
    387 } _rcv;
    +
    388 tcp_option _option;
    +
    389 timer<lowres_clock> _delayed_ack;
    +
    390 // Retransmission timeout
    +
    391 std::chrono::milliseconds _rto{1000};
    +
    392 std::chrono::milliseconds _persist_time_out{1000};
    +
    393 static constexpr std::chrono::milliseconds _rto_min{1000};
    +
    394 static constexpr std::chrono::milliseconds _rto_max{60000};
    +
    395 // Clock granularity
    +
    396 static constexpr std::chrono::milliseconds _rto_clk_granularity{1};
    +
    397 static constexpr uint16_t _max_nr_retransmit{5};
    +
    398 timer<lowres_clock> _retransmit;
    +
    399 timer<lowres_clock> _persist;
    +
    400 uint16_t _nr_full_seg_received = 0;
    +
    401 struct isn_secret {
    +
    402 // 512 bits secretkey for ISN generating
    +
    403 uint32_t key[16];
    +
    404 isn_secret () {
    +
    405 std::random_device rd;
    +
    406 std::default_random_engine e(rd());
    +
    407 std::uniform_int_distribution<uint32_t> dist{};
    +
    408 for (auto& k : key) {
    +
    409 k = dist(e);
    +
    410 }
    +
    411 }
    +
    412 };
    +
    413 static isn_secret _isn_secret;
    +
    414 tcp_seq get_isn();
    + +
    416 bool _poll_active = false;
    +
    417 uint32_t get_default_receive_window_size() {
    +
    418 // Linux's default window size
    +
    419 constexpr uint32_t size = 29200;
    +
    420 return size << _rcv.window_scale;
    +
    421 }
    +
    422 // Returns the current receive window according to available receiving buffer size
    +
    423 uint32_t get_modified_receive_window_size() {
    +
    424 uint32_t left = _rcv.data_size > _rcv.max_receive_buf_size ? 0 : _rcv.max_receive_buf_size - _rcv.data_size;
    +
    425 return std::min(left, get_default_receive_window_size());
    +
    426 }
    +
    427 public:
    +
    428 tcb(tcp& t, connid id);
    +
    429 void input_handle_listen_state(tcp_hdr* th, packet p);
    +
    430 void input_handle_syn_sent_state(tcp_hdr* th, packet p);
    +
    431 void input_handle_other_state(tcp_hdr* th, packet p);
    +
    432 void output_one(bool data_retransmit = false);
    +
    433 future<> wait_for_data();
    +
    434 future<> wait_input_shutdown();
    +
    435 void abort_reader() noexcept;
    +
    436 future<> wait_for_all_data_acked();
    +
    437 future<> wait_send_available();
    +
    438 future<> send(packet p);
    +
    439 void connect();
    +
    440 packet read();
    +
    441 void close() noexcept;
    +
    442 void remove_from_tcbs() {
    +
    443 auto id = connid{_local_ip, _foreign_ip, _local_port, _foreign_port};
    +
    444 _tcp._tcbs.erase(id);
    +
    445 }
    +
    446 std::optional<typename InetTraits::l4packet> get_packet();
    +
    447 void output() {
    +
    448 if (!_poll_active) {
    +
    449 _poll_active = true;
    +
    450 // FIXME: future is discarded
    +
    451 (void)_tcp.poll_tcb(_foreign_ip, this->shared_from_this()).then_wrapped([this] (auto&& f) {
    +
    452 try {
    +
    453 f.get();
    +
    454 } catch(arp_queue_full_error& ex) {
    +
    455 // retry later
    +
    456 _poll_active = false;
    +
    457 this->start_retransmit_timer();
    +
    458 } catch(arp_timeout_error& ex) {
    +
    459 if (this->in_state(SYN_SENT)) {
    +
    460 _connect_done.set_exception(ex);
    +
    461 this->cleanup();
    +
    462 }
    +
    463 // in other states connection should time out
    +
    464 }
    +
    465 });
    +
    466 }
    +
    467 }
    +
    468 future<> connect_done() {
    +
    469 return _connect_done.get_future();
    +
    470 }
    +
    471 tcp_state& state() {
    +
    472 return _state;
    +
    473 }
    +
    474 private:
    +
    475 void respond_with_reset(tcp_hdr* th);
    +
    476 bool merge_out_of_order();
    +
    477 void insert_out_of_order(tcp_seq seq, packet p);
    +
    478 void trim_receive_data_after_window();
    +
    479 bool should_send_ack(uint16_t seg_len);
    +
    480 void clear_delayed_ack() noexcept;
    +
    481 packet get_transmit_packet();
    +
    482 void retransmit_one() {
    +
    483 bool data_retransmit = true;
    +
    484 output_one(data_retransmit);
    +
    485 }
    +
    486 void start_retransmit_timer() {
    +
    487 auto now = clock_type::now();
    +
    488 start_retransmit_timer(now);
    +
    489 };
    +
    490 void start_retransmit_timer(clock_type::time_point now) {
    +
    491 auto tp = now + _rto;
    +
    492 _retransmit.rearm(tp);
    +
    493 };
    +
    494 void stop_retransmit_timer() noexcept {
    +
    495 _retransmit.cancel();
    +
    496 };
    +
    497 void start_persist_timer() {
    +
    498 auto now = clock_type::now();
    +
    499 start_persist_timer(now);
    +
    500 };
    +
    501 void start_persist_timer(clock_type::time_point now) {
    +
    502 auto tp = now + _persist_time_out;
    +
    503 _persist.rearm(tp);
    +
    504 };
    +
    505 void stop_persist_timer() {
    +
    506 _persist.cancel();
    +
    507 };
    +
    508 void persist();
    +
    509 void retransmit();
    +
    510 void fast_retransmit();
    +
    511 void update_rto(clock_type::time_point tx_time);
    +
    512 void update_cwnd(uint32_t acked_bytes);
    +
    513 void cleanup();
    +
    514 uint32_t can_send() {
    +
    515 if (_snd.window_probe) {
    +
    516 return 1;
    +
    517 }
    +
    518
    +
    519 // Can not send if send window is zero
    +
    520 if (_snd.window == 0) {
    +
    521 return 0;
    +
    522 }
    +
    523
    +
    524 // Can not send if send window is less than unacknowledged data size
    +
    525 auto window_used = uint32_t(_snd.next - _snd.unacknowledged);
    +
    526 if (window_used > _snd.window) {
    +
    527 return 0;
    +
    528 }
    +
    529
    +
    530 // Can not send more than advertised window allows or unsent data size
    +
    531 auto x = std::min(_snd.window - window_used, _snd.unsent_len);
    +
    532
    +
    533 // Can not send more than congestion window allows
    +
    534 x = std::min(_snd.cwnd, x);
    +
    535 if (_snd.dupacks == 1 || _snd.dupacks == 2) {
    +
    536 // RFC5681 Step 3.1
    +
    537 // Send cwnd + 2 * smss per RFC3042
    +
    538 auto flight = flight_size();
    +
    539 auto max = _snd.cwnd + 2 * _snd.mss;
    +
    540 x = flight <= max ? std::min(x, max - flight) : 0;
    +
    541 _snd.limited_transfer += x;
    +
    542 } else if (_snd.dupacks >= 3) {
    +
    543 // RFC5681 Step 3.5
    +
    544 // Sent 1 full-sized segment at most
    +
    545 x = std::min(uint32_t(_snd.mss), x);
    +
    546 }
    +
    547 return x;
    +
    548 }
    +
    549 uint32_t flight_size() {
    +
    550 uint32_t size = 0;
    +
    551 std::for_each(_snd.data.begin(), _snd.data.end(), [&] (unacked_segment& seg) { size += seg.p.len(); });
    +
    552 return size;
    +
    553 }
    +
    554 uint16_t local_mss() {
    +
    555 return _tcp.hw_features().mtu - net::tcp_hdr_len_min - InetTraits::ip_hdr_len_min;
    +
    556 }
    +
    557 void queue_packet(packet p) {
    +
    558 _packetq.emplace_back(typename InetTraits::l4packet{_foreign_ip, std::move(p)});
    +
    559 }
    +
    560 void signal_data_received() {
    +
    561 if (_rcv._data_received_promise) {
    +
    562 _rcv._data_received_promise->set_value();
    +
    563 _rcv._data_received_promise = {};
    +
    564 }
    +
    565 }
    +
    566 void signal_all_data_acked() {
    +
    567 if (_snd._all_data_acked_promise && _snd.unsent_len == 0) {
    +
    568 _snd._all_data_acked_promise->set_value();
    +
    569 _snd._all_data_acked_promise = {};
    +
    570 }
    +
    571 }
    +
    572 void signal_send_available() {
    +
    573 if (_snd._send_available_promise && _snd.max_queue_space > _snd.current_queue_space) {
    +
    574 _snd._send_available_promise->set_value();
    +
    575 _snd._send_available_promise = {};
    +
    576 }
    +
    577 }
    +
    578 void do_syn_sent() {
    +
    579 _state = SYN_SENT;
    +
    580 _snd.syn_tx_time = clock_type::now();
    +
    581 // Send <SYN> to remote
    +
    582 output();
    +
    583 }
    +
    584 void do_syn_received() {
    +
    585 _state = SYN_RECEIVED;
    +
    586 _snd.syn_tx_time = clock_type::now();
    +
    587 // Send <SYN,ACK> to remote
    +
    588 output();
    +
    589 }
    +
    590 void do_established() {
    +
    591 _state = ESTABLISHED;
    +
    592 update_rto(_snd.syn_tx_time);
    +
    593 _connect_done.set_value();
    +
    594 }
    +
    595 void do_reset() {
    +
    596 _state = CLOSED;
    +
    597 cleanup();
    +
    598 if (_rcv._data_received_promise) {
    +
    599 _rcv._data_received_promise->set_exception(tcp_reset_error());
    +
    600 _rcv._data_received_promise = std::nullopt;
    +
    601 }
    +
    602 if (_snd._all_data_acked_promise) {
    +
    603 _snd._all_data_acked_promise->set_exception(tcp_reset_error());
    +
    604 _snd._all_data_acked_promise = std::nullopt;
    +
    605 }
    +
    606 if (_snd._send_available_promise) {
    +
    607 _snd._send_available_promise->set_exception(tcp_reset_error());
    +
    608 _snd._send_available_promise = std::nullopt;
    +
    609 }
    +
    610 }
    +
    611 void do_time_wait() {
    +
    612 // FIXME: Implement TIME_WAIT state timer
    +
    613 _state = TIME_WAIT;
    +
    614 cleanup();
    +
    615 }
    +
    616 void do_closed() {
    +
    617 _state = CLOSED;
    +
    618 cleanup();
    +
    619 }
    +
    620 void do_setup_isn() {
    +
    621 _snd.initial = get_isn();
    +
    622 _snd.unacknowledged = _snd.initial;
    +
    623 _snd.next = _snd.initial + 1;
    +
    624 _snd.recover = _snd.initial;
    +
    625 }
    +
    626 void do_local_fin_acked() {
    +
    627 _snd.unacknowledged += 1;
    +
    628 _snd.next += 1;
    +
    629 }
    +
    630 bool syn_needs_on() const noexcept {
    +
    631 return in_state(SYN_SENT | SYN_RECEIVED);
    +
    632 }
    +
    633 bool fin_needs_on() const noexcept {
    +
    634 return in_state(FIN_WAIT_1 | CLOSING | LAST_ACK) && _snd.closed &&
    +
    635 _snd.unsent_len == 0;
    +
    636 }
    +
    637 bool ack_needs_on() const noexcept {
    +
    638 return !in_state(CLOSED | LISTEN | SYN_SENT);
    +
    639 }
    +
    640 bool foreign_will_not_send() const noexcept {
    +
    641 return in_state(CLOSING | TIME_WAIT | CLOSE_WAIT | LAST_ACK | CLOSED);
    +
    642 }
    +
    643 bool in_state(tcp_state state) const noexcept {
    +
    644 return uint16_t(_state) & uint16_t(state);
    +
    645 }
    +
    646 void exit_fast_recovery() {
    +
    647 _snd.dupacks = 0;
    +
    648 _snd.limited_transfer = 0;
    +
    649 _snd.partial_ack = 0;
    +
    650 }
    +
    651 uint32_t data_segment_acked(tcp_seq seg_ack);
    +
    652 bool segment_acceptable(tcp_seq seg_seq, unsigned seg_len);
    +
    653 void init_from_options(tcp_hdr* th, uint8_t* opt_start, uint8_t* opt_end);
    +
    654 friend class connection;
    +
    655 };
    +
    656 inet_type& _inet;
    +
    657 std::unordered_map<connid, lw_shared_ptr<tcb>, connid_hash> _tcbs;
    +
    658 std::unordered_map<uint16_t, listener*> _listening;
    +
    659 std::random_device _rd;
    +
    660 std::default_random_engine _e;
    +
    661 std::uniform_int_distribution<uint16_t> _port_dist{41952, 65535};
    + +
    663 // queue for packets that do not belong to any tcb
    + +
    665 semaphore _queue_space = {212992};
    +
    666 metrics::metric_groups _metrics;
    +
    667public:
    +
    668 const inet_type& inet() const {
    +
    669 return _inet;
    +
    670 }
    + + +
    673 public:
    +
    674 explicit connection(lw_shared_ptr<tcb> tcbp) : _tcb(std::move(tcbp)) { _tcb->_conn = this; }
    +
    675 connection(const connection&) = delete;
    +
    676 connection(connection&& x) noexcept : _tcb(std::move(x._tcb)) {
    +
    677 _tcb->_conn = this;
    +
    678 }
    +
    679 ~connection();
    +
    680 void operator=(const connection&) = delete;
    +
    681 connection& operator=(connection&& x) {
    +
    682 if (this != &x) {
    +
    683 this->~connection();
    +
    684 new (this) connection(std::move(x));
    +
    685 }
    +
    686 return *this;
    +
    687 }
    +
    688 future<> connected() {
    +
    689 return _tcb->connect_done();
    +
    690 }
    +
    691 future<> send(packet p) {
    +
    692 return _tcb->send(std::move(p));
    +
    693 }
    +
    694 future<> wait_for_data() {
    +
    695 return _tcb->wait_for_data();
    +
    696 }
    +
    697 future<> wait_input_shutdown() {
    +
    698 return _tcb->wait_input_shutdown();
    +
    699 }
    +
    700 packet read() {
    +
    701 return _tcb->read();
    +
    702 }
    +
    703 ipaddr foreign_ip() {
    +
    704 return _tcb->_foreign_ip;
    +
    705 }
    +
    706 uint16_t foreign_port() {
    +
    707 return _tcb->_foreign_port;
    +
    708 }
    +
    709 ipaddr local_ip() {
    +
    710 return _tcb->_local_ip;
    +
    711 }
    +
    712 uint16_t local_port() {
    +
    713 return _tcb->_local_port;
    +
    714 }
    +
    715 void shutdown_connect();
    +
    716 void close_read() noexcept;
    +
    717 void close_write() noexcept;
    +
    718 };
    +
    719 class listener {
    +
    720 tcp& _tcp;
    +
    721 uint16_t _port;
    + +
    723 size_t _pending = 0;
    +
    724 private:
    +
    725 listener(tcp& t, uint16_t port, size_t queue_length)
    +
    726 : _tcp(t), _port(port), _q(queue_length) {
    +
    727 _tcp._listening.emplace(_port, this);
    +
    728 }
    +
    729 public:
    +
    730 listener(listener&& x)
    +
    731 : _tcp(x._tcp), _port(x._port), _q(std::move(x._q)) {
    +
    732 _tcp._listening[_port] = this;
    +
    733 x._port = 0;
    +
    734 }
    +
    735 ~listener() {
    +
    736 if (_port) {
    +
    737 _tcp._listening.erase(_port);
    +
    738 }
    +
    739 }
    +
    740 future<connection> accept() {
    +
    741 return _q.pop_eventually();
    +
    742 }
    +
    743 void abort_accept() {
    +
    744 _q.abort(std::make_exception_ptr(std::system_error(ECONNABORTED, std::system_category())));
    +
    745 }
    +
    746 bool full() { return _pending + _q.size() >= _q.max_size(); }
    +
    747 void inc_pending() { _pending++; }
    +
    748 void dec_pending() { _pending--; }
    +
    749
    +
    750 const tcp& get_tcp() const {
    +
    751 return _tcp;
    +
    752 }
    +
    753 uint16_t port() const {
    +
    754 return _port;
    +
    755 }
    +
    756 friend class tcp;
    +
    757 };
    +
    758public:
    +
    759 explicit tcp(inet_type& inet);
    +
    760 void received(packet p, ipaddr from, ipaddr to);
    +
    761 bool forward(forward_hash& out_hash_data, packet& p, size_t off);
    +
    762 listener listen(uint16_t port, size_t queue_length = 100);
    + +
    764 const net::hw_features& hw_features() const { return _inet._inet.hw_features(); }
    +
    765 future<> poll_tcb(ipaddr to, lw_shared_ptr<tcb> tcb);
    +
    766 void add_connected_tcb(lw_shared_ptr<tcb> tcbp, uint16_t local_port) {
    +
    767 auto it = _listening.find(local_port);
    +
    768 if (it != _listening.end()) {
    +
    769 it->second->_q.push(connection(tcbp));
    +
    770 it->second->dec_pending();
    +
    771 }
    +
    772 }
    +
    773private:
    +
    774 void send_packet_without_tcb(ipaddr from, ipaddr to, packet p);
    +
    775 void respond_with_reset(tcp_hdr* rth, ipaddr local_ip, ipaddr foreign_ip);
    +
    776 friend class listener;
    +
    777};
    +
    778
    +
    779template <typename InetTraits>
    +
    780tcp<InetTraits>::tcp(inet_type& inet)
    +
    781 : _inet(inet)
    +
    782 , _e(_rd()) {
    +
    783 namespace sm = metrics;
    +
    784
    +
    785 _metrics.add_group("tcp", {
    +
    786 sm::make_counter("linearizations", [] { return tcp_packet_merger::linearizations(); },
    +
    787 sm::description("Counts a number of times a buffer linearization was invoked during the buffers merge process. "
    +
    788 "Divide it by a total TCP receive packet rate to get an everage number of lineraizations per TCP packet."))
    +
    789 });
    +
    790
    +
    791 _inet.register_packet_provider([this, tcb_polled = 0u] () mutable {
    +
    792 std::optional<typename InetTraits::l4packet> l4p;
    +
    793 auto c = _poll_tcbs.size();
    +
    794 if (!_packetq.empty() && (!(tcb_polled % 128) || c == 0)) {
    +
    795 l4p = std::move(_packetq.front());
    +
    796 _packetq.pop_front();
    +
    797 _queue_space.signal(l4p.value().p.len());
    +
    798 } else {
    +
    799 while (c--) {
    +
    800 tcb_polled++;
    +
    801 lw_shared_ptr<tcb> tcb;
    +
    802 ethernet_address dst;
    +
    803 std::tie(tcb, dst) = std::move(_poll_tcbs.front());
    +
    804 _poll_tcbs.pop_front();
    +
    805 l4p = tcb->get_packet();
    +
    806 if (l4p) {
    +
    807 l4p.value().e_dst = dst;
    +
    808 break;
    +
    809 }
    +
    810 }
    +
    811 }
    +
    812 return l4p;
    +
    813 });
    +
    814}
    +
    815
    +
    816template <typename InetTraits>
    +
    817future<> tcp<InetTraits>::poll_tcb(ipaddr to, lw_shared_ptr<tcb> tcb) {
    +
    818 return _inet.get_l2_dst_address(to).then([this, tcb = std::move(tcb)] (ethernet_address dst) {
    +
    819 _poll_tcbs.emplace_back(std::move(tcb), dst);
    +
    820 });
    +
    821}
    +
    822
    +
    823template <typename InetTraits>
    +
    824auto tcp<InetTraits>::listen(uint16_t port, size_t queue_length) -> listener {
    +
    825 return listener(*this, port, queue_length);
    +
    826}
    +
    827
    +
    828template <typename InetTraits>
    +
    829auto tcp<InetTraits>::connect(socket_address sa) -> connection {
    +
    830 connid id;
    +
    831 auto src_ip = _inet._inet.host_address();
    +
    832 auto dst_ip = ipv4_address(sa);
    +
    833 auto dst_port = net::ntoh(sa.u.in.sin_port);
    +
    834
    +
    835 if (smp::count > 1) {
    +
    836 do {
    +
    837 id = connid{src_ip, dst_ip, _port_dist(_e), dst_port};
    +
    838 } while (_inet._inet.netif()->hash2cpu(id.hash(_inet._inet.netif()->rss_key())) != this_shard_id()
    +
    839 || _tcbs.find(id) != _tcbs.end());
    +
    840 } else {
    +
    841 id = connid{src_ip, dst_ip, _port_dist(_e), dst_port};
    +
    842 }
    +
    843
    +
    844 auto tcbp = make_lw_shared<tcb>(*this, id);
    +
    845 _tcbs.insert({id, tcbp});
    +
    846 tcbp->connect();
    +
    847 return connection(tcbp);
    +
    848}
    +
    849
    +
    850template <typename InetTraits>
    +
    851bool tcp<InetTraits>::forward(forward_hash& out_hash_data, packet& p, size_t off) {
    +
    852 auto th = p.get_header(off, tcp_hdr::len);
    +
    853 if (th) {
    +
    854 // src_port, dst_port in network byte order
    +
    855 out_hash_data.push_back(uint8_t(th[0]));
    +
    856 out_hash_data.push_back(uint8_t(th[1]));
    +
    857 out_hash_data.push_back(uint8_t(th[2]));
    +
    858 out_hash_data.push_back(uint8_t(th[3]));
    +
    859 }
    +
    860 return true;
    +
    861}
    +
    862
    +
    863template <typename InetTraits>
    +
    864void tcp<InetTraits>::received(packet p, ipaddr from, ipaddr to) {
    +
    865 auto th = p.get_header(0, tcp_hdr::len);
    +
    866 if (!th) {
    +
    867 return;
    +
    868 }
    +
    869 // data_offset is correct even before ntoh()
    +
    870 auto data_offset = uint8_t(th[12]) >> 4;
    +
    871 if (size_t(data_offset * 4) < tcp_hdr::len) {
    +
    872 return;
    +
    873 }
    +
    874
    +
    875 if (!hw_features().rx_csum_offload) {
    +
    876 checksummer csum;
    +
    877 InetTraits::tcp_pseudo_header_checksum(csum, from, to, p.len());
    +
    878 csum.sum(p);
    +
    879 if (csum.get() != 0) {
    +
    880 return;
    +
    881 }
    +
    882 }
    +
    883 auto h = tcp_hdr::read(th);
    +
    884 auto id = connid{to, from, h.dst_port, h.src_port};
    +
    885 auto tcbi = _tcbs.find(id);
    +
    886 lw_shared_ptr<tcb> tcbp;
    +
    887 if (tcbi == _tcbs.end()) {
    +
    888 auto listener = _listening.find(id.local_port);
    +
    889 if (listener == _listening.end() || listener->second->full()) {
    +
    890 // 1) In CLOSE state
    +
    891 // 1.1 all data in the incoming segment is discarded. An incoming
    +
    892 // segment containing a RST is discarded. An incoming segment not
    +
    893 // containing a RST causes a RST to be sent in response.
    +
    894 // FIXME:
    +
    895 // if ACK off: <SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK>
    +
    896 // if ACK on: <SEQ=SEG.ACK><CTL=RST>
    +
    897 return respond_with_reset(&h, id.local_ip, id.foreign_ip);
    +
    898 } else {
    +
    899 // 2) In LISTEN state
    +
    900 // 2.1 first check for an RST
    +
    901 if (h.f_rst) {
    +
    902 // An incoming RST should be ignored
    +
    903 return;
    +
    904 }
    +
    905 // 2.2 second check for an ACK
    +
    906 if (h.f_ack) {
    +
    907 // Any acknowledgment is bad if it arrives on a connection
    +
    908 // still in the LISTEN state.
    +
    909 // <SEQ=SEG.ACK><CTL=RST>
    +
    910 return respond_with_reset(&h, id.local_ip, id.foreign_ip);
    +
    911 }
    +
    912 // 2.3 third check for a SYN
    +
    913 if (h.f_syn) {
    +
    914 // check the security
    +
    915 // NOTE: Ignored for now
    +
    916 tcbp = make_lw_shared<tcb>(*this, id);
    +
    917 _tcbs.insert({id, tcbp});
    +
    918 // TODO: we need to remove the tcb and decrease the pending if
    +
    919 // it stays SYN_RECEIVED state forever.
    +
    920 listener->second->inc_pending();
    +
    921
    +
    922 return tcbp->input_handle_listen_state(&h, std::move(p));
    +
    923 }
    +
    924 // 2.4 fourth other text or control
    +
    925 // So you are unlikely to get here, but if you do, drop the
    +
    926 // segment, and return.
    +
    927 return;
    +
    928 }
    +
    929 } else {
    +
    930 tcbp = tcbi->second;
    +
    931 if (tcbp->state() == tcp_state::SYN_SENT) {
    +
    932 // 3) In SYN_SENT State
    +
    933 return tcbp->input_handle_syn_sent_state(&h, std::move(p));
    +
    934 } else {
    +
    935 // 4) In other state, can be one of the following:
    +
    936 // SYN_RECEIVED, ESTABLISHED, FIN_WAIT_1, FIN_WAIT_2
    +
    937 // CLOSE_WAIT, CLOSING, LAST_ACK, TIME_WAIT
    +
    938 return tcbp->input_handle_other_state(&h, std::move(p));
    +
    939 }
    +
    940 }
    +
    941}
    +
    942
    +
    943// Send packet does not belong to any tcb
    +
    944template <typename InetTraits>
    +
    945void tcp<InetTraits>::send_packet_without_tcb(ipaddr from, ipaddr to, packet p) {
    +
    946 if (_queue_space.try_wait(p.len())) { // drop packets that do not fit the queue
    +
    947 // FIXME: future is discarded
    +
    948 (void)_inet.get_l2_dst_address(to).then([this, to, p = std::move(p)] (ethernet_address e_dst) mutable {
    +
    949 _packetq.emplace_back(ipv4_traits::l4packet{to, std::move(p), e_dst, ip_protocol_num::tcp});
    +
    950 });
    +
    951 }
    +
    952}
    +
    953
    +
    954template <typename InetTraits>
    +
    955tcp<InetTraits>::connection::~connection() {
    +
    956 if (_tcb) {
    +
    957 _tcb->_conn = nullptr;
    +
    958 close_read();
    +
    959 close_write();
    +
    960 }
    +
    961}
    +
    962
    +
    963template <typename InetTraits>
    +
    964tcp<InetTraits>::tcb::tcb(tcp& t, connid id)
    +
    965 : _tcp(t)
    +
    966 , _local_ip(id.local_ip)
    +
    967 , _foreign_ip(id.foreign_ip)
    +
    968 , _local_port(id.local_port)
    +
    969 , _foreign_port(id.foreign_port)
    +
    970 , _delayed_ack([this] { _nr_full_seg_received = 0; output(); })
    +
    971 , _retransmit([this] { retransmit(); })
    +
    972 , _persist([this] { persist(); }) {
    +
    973}
    +
    974
    +
    975template <typename InetTraits>
    +
    976void tcp<InetTraits>::tcb::respond_with_reset(tcp_hdr* rth) {
    +
    977 _tcp.respond_with_reset(rth, _local_ip, _foreign_ip);
    +
    978}
    +
    979
    +
    980template <typename InetTraits>
    +
    981void tcp<InetTraits>::respond_with_reset(tcp_hdr* rth, ipaddr local_ip, ipaddr foreign_ip) {
    +
    982 if (rth->f_rst) {
    +
    983 return;
    +
    984 }
    +
    985 packet p;
    +
    986 auto th = p.prepend_uninitialized_header(tcp_hdr::len);
    +
    987 auto h = tcp_hdr{};
    +
    988 h.src_port = rth->dst_port;
    +
    989 h.dst_port = rth->src_port;
    +
    990 if (rth->f_ack) {
    +
    991 h.seq = rth->ack;
    +
    992 }
    +
    993 // If this RST packet is in response to a SYN packet. We ACK the ISN.
    +
    994 if (rth->f_syn) {
    +
    995 h.ack = rth->seq + 1;
    +
    996 h.f_ack = true;
    +
    997 }
    +
    998 h.f_rst = true;
    +
    999 h.data_offset = tcp_hdr::len / 4;
    +
    1000 h.checksum = 0;
    +
    1001 h.write(th);
    +
    1002
    +
    1003 checksummer csum;
    +
    1004 offload_info oi;
    +
    1005 InetTraits::tcp_pseudo_header_checksum(csum, local_ip, foreign_ip, tcp_hdr::len);
    +
    1006 uint16_t checksum;
    +
    1007 if (hw_features().tx_csum_l4_offload) {
    +
    1008 checksum = ~csum.get();
    +
    1009 oi.needs_csum = true;
    +
    1010 } else {
    +
    1011 csum.sum(p);
    +
    1012 checksum = csum.get();
    +
    1013 oi.needs_csum = false;
    +
    1014 }
    +
    1015 tcp_hdr::write_nbo_checksum(th, checksum);
    +
    1016
    +
    1017 oi.protocol = ip_protocol_num::tcp;
    +
    1018 oi.tcp_hdr_len = tcp_hdr::len;
    +
    1019 p.set_offload_info(oi);
    +
    1020
    +
    1021 send_packet_without_tcb(local_ip, foreign_ip, std::move(p));
    +
    1022}
    +
    1023
    +
    1024template <typename InetTraits>
    +
    1025uint32_t tcp<InetTraits>::tcb::data_segment_acked(tcp_seq seg_ack) {
    +
    1026 uint32_t total_acked_bytes = 0;
    +
    1027 // Full ACK of segment
    +
    1028 while (!_snd.data.empty()
    +
    1029 && (_snd.unacknowledged + _snd.data.front().p.len() <= seg_ack)) {
    +
    1030 auto acked_bytes = _snd.data.front().p.len();
    +
    1031 _snd.unacknowledged += acked_bytes;
    +
    1032 // Ignore retransmitted segments when setting the RTO
    +
    1033 if (_snd.data.front().nr_transmits == 0) {
    +
    1034 update_rto(_snd.data.front().tx_time);
    +
    1035 }
    +
    1036 update_cwnd(acked_bytes);
    +
    1037 total_acked_bytes += acked_bytes;
    +
    1038 _snd.current_queue_space -= _snd.data.front().data_len;
    +
    1039 signal_send_available();
    +
    1040 _snd.data.pop_front();
    +
    1041 }
    +
    1042 // Partial ACK of segment
    +
    1043 if (_snd.unacknowledged < seg_ack) {
    +
    1044 auto acked_bytes = seg_ack - _snd.unacknowledged;
    +
    1045 if (!_snd.data.empty()) {
    +
    1046 auto& unacked_seg = _snd.data.front();
    +
    1047 unacked_seg.p.trim_front(acked_bytes);
    +
    1048 }
    +
    1049 _snd.unacknowledged = seg_ack;
    +
    1050 update_cwnd(acked_bytes);
    +
    1051 total_acked_bytes += acked_bytes;
    +
    1052 }
    +
    1053 return total_acked_bytes;
    +
    1054}
    +
    1055
    +
    1056template <typename InetTraits>
    +
    1057bool tcp<InetTraits>::tcb::segment_acceptable(tcp_seq seg_seq, unsigned seg_len) {
    +
    1058 if (seg_len == 0 && _rcv.window == 0) {
    +
    1059 // SEG.SEQ = RCV.NXT
    +
    1060 return seg_seq == _rcv.next;
    +
    1061 } else if (seg_len == 0 && _rcv.window > 0) {
    +
    1062 // RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND
    +
    1063 return (_rcv.next <= seg_seq) && (seg_seq < _rcv.next + _rcv.window);
    +
    1064 } else if (seg_len > 0 && _rcv.window > 0) {
    +
    1065 // RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND
    +
    1066 // or
    +
    1067 // RCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND
    +
    1068 bool x = (_rcv.next <= seg_seq) && seg_seq < (_rcv.next + _rcv.window);
    +
    1069 bool y = (_rcv.next <= seg_seq + seg_len - 1) && (seg_seq + seg_len - 1 < _rcv.next + _rcv.window);
    +
    1070 return x || y;
    +
    1071 } else {
    +
    1072 // SEG.LEN > 0 RCV.WND = 0, not acceptable
    +
    1073 return false;
    +
    1074 }
    +
    1075}
    +
    1076
    +
    1077template <typename InetTraits>
    +
    1078void tcp<InetTraits>::tcb::init_from_options(tcp_hdr* th, uint8_t* opt_start, uint8_t* opt_end) {
    +
    1079 // Handle tcp options
    +
    1080 _option.parse(opt_start, opt_end);
    +
    1081
    +
    1082 // Remote receive window scale factor
    +
    1083 _snd.window_scale = _option._remote_win_scale;
    +
    1084 // Local receive window scale factor
    +
    1085 _rcv.window_scale = _option._local_win_scale;
    +
    1086
    +
    1087 // Maximum segment size remote can receive
    +
    1088 _snd.mss = _option._remote_mss;
    +
    1089 // Maximum segment size local can receive
    +
    1090 _rcv.mss = _option._local_mss = local_mss();
    +
    1091
    +
    1092 _rcv.window = get_default_receive_window_size();
    +
    1093 _snd.window = th->window << _snd.window_scale;
    +
    1094
    +
    1095 // Segment sequence number used for last window update
    +
    1096 _snd.wl1 = th->seq;
    +
    1097 // Segment acknowledgment number used for last window update
    +
    1098 _snd.wl2 = th->ack;
    +
    1099
    +
    1100 // Setup initial congestion window
    +
    1101 if (2190 < _snd.mss) {
    +
    1102 _snd.cwnd = 2 * _snd.mss;
    +
    1103 } else if (1095 < _snd.mss && _snd.mss <= 2190) {
    +
    1104 _snd.cwnd = 3 * _snd.mss;
    +
    1105 } else {
    +
    1106 _snd.cwnd = 4 * _snd.mss;
    +
    1107 }
    +
    1108
    +
    1109 // Setup initial slow start threshold
    +
    1110 _snd.ssthresh = th->window << _snd.window_scale;
    +
    1111}
    +
    1112
    +
    1113template <typename InetTraits>
    +
    1114void tcp<InetTraits>::tcb::input_handle_listen_state(tcp_hdr* th, packet p) {
    +
    1115 auto opt_len = th->data_offset * 4 - tcp_hdr::len;
    +
    1116 auto opt_start = reinterpret_cast<uint8_t*>(p.get_header(0, th->data_offset * 4)) + tcp_hdr::len;
    +
    1117 auto opt_end = opt_start + opt_len;
    +
    1118 p.trim_front(th->data_offset * 4);
    +
    1119 tcp_seq seg_seq = th->seq;
    +
    1120
    +
    1121 // Set RCV.NXT to SEG.SEQ+1, IRS is set to SEG.SEQ
    +
    1122 _rcv.next = seg_seq + 1;
    +
    1123 _rcv.initial = seg_seq;
    +
    1124
    +
    1125 // ISS should be selected and a SYN segment sent of the form:
    +
    1126 // <SEQ=ISS><ACK=RCV.NXT><CTL=SYN,ACK>
    +
    1127 // SND.NXT is set to ISS+1 and SND.UNA to ISS
    +
    1128 // NOTE: In previous code, _snd.next is set to ISS + 1 only when SYN is
    +
    1129 // ACKed. Now, we set _snd.next to ISS + 1 here, so in output_one(): we
    +
    1130 // have
    +
    1131 // th->seq = syn_on ? _snd.initial : _snd.next
    +
    1132 // to make sure retransmitted SYN has correct SEQ number.
    +
    1133 do_setup_isn();
    +
    1134
    +
    1135 _rcv.urgent = _rcv.next;
    +
    1136
    +
    1137 tcp_debug("listen: LISTEN -> SYN_RECEIVED\n");
    +
    1138 init_from_options(th, opt_start, opt_end);
    +
    1139 do_syn_received();
    +
    1140}
    +
    1141
    +
    1142template <typename InetTraits>
    +
    1143void tcp<InetTraits>::tcb::input_handle_syn_sent_state(tcp_hdr* th, packet p) {
    +
    1144 auto opt_len = th->data_offset * 4 - tcp_hdr::len;
    +
    1145 auto opt_start = reinterpret_cast<uint8_t*>(p.get_header(0, th->data_offset * 4)) + tcp_hdr::len;
    +
    1146 auto opt_end = opt_start + opt_len;
    +
    1147 p.trim_front(th->data_offset * 4);
    +
    1148 tcp_seq seg_seq = th->seq;
    +
    1149 auto seg_ack = th->ack;
    +
    1150
    +
    1151 bool acceptable = false;
    +
    1152 // 3.1 first check the ACK bit
    +
    1153 if (th->f_ack) {
    +
    1154 // If SEG.ACK =< ISS, or SEG.ACK > SND.NXT, send a reset (unless the
    +
    1155 // RST bit is set, if so drop the segment and return)
    +
    1156 if (seg_ack <= _snd.initial || seg_ack > _snd.next) {
    +
    1157 return respond_with_reset(th);
    +
    1158 }
    +
    1159
    +
    1160 // If SND.UNA =< SEG.ACK =< SND.NXT then the ACK is acceptable.
    +
    1161 acceptable = _snd.unacknowledged <= seg_ack && seg_ack <= _snd.next;
    +
    1162 }
    +
    1163
    +
    1164 // 3.2 second check the RST bit
    +
    1165 if (th->f_rst) {
    +
    1166 // If the ACK was acceptable then signal the user "error: connection
    +
    1167 // reset", drop the segment, enter CLOSED state, delete TCB, and
    +
    1168 // return. Otherwise (no ACK) drop the segment and return.
    +
    1169 if (acceptable) {
    +
    1170 _connect_done.set_exception(tcp_refused_error());
    +
    1171 return do_reset();
    +
    1172 } else {
    +
    1173 return;
    +
    1174 }
    +
    1175 }
    +
    1176
    +
    1177 // 3.3 third check the security and precedence
    +
    1178 // NOTE: Ignored for now
    +
    1179
    +
    1180 // 3.4 fourth check the SYN bit
    +
    1181 if (th->f_syn) {
    +
    1182 // RCV.NXT is set to SEG.SEQ+1, IRS is set to SEG.SEQ. SND.UNA should
    +
    1183 // be advanced to equal SEG.ACK (if there is an ACK), and any segments
    +
    1184 // on the retransmission queue which are thereby acknowledged should be
    +
    1185 // removed.
    +
    1186 _rcv.next = seg_seq + 1;
    +
    1187 _rcv.initial = seg_seq;
    +
    1188 if (th->f_ack) {
    +
    1189 // TODO: clean retransmission queue
    +
    1190 _snd.unacknowledged = seg_ack;
    +
    1191 }
    +
    1192 if (_snd.unacknowledged > _snd.initial) {
    +
    1193 // If SND.UNA > ISS (our SYN has been ACKed), change the connection
    +
    1194 // state to ESTABLISHED, form an ACK segment
    +
    1195 // <SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>
    +
    1196 tcp_debug("syn: SYN_SENT -> ESTABLISHED\n");
    +
    1197 init_from_options(th, opt_start, opt_end);
    +
    1198 do_established();
    +
    1199 output();
    +
    1200 } else {
    +
    1201 // Otherwise enter SYN_RECEIVED, form a SYN,ACK segment
    +
    1202 // <SEQ=ISS><ACK=RCV.NXT><CTL=SYN,ACK>
    +
    1203 tcp_debug("syn: SYN_SENT -> SYN_RECEIVED\n");
    +
    1204 do_syn_received();
    +
    1205 }
    +
    1206 }
    +
    1207
    +
    1208 // 3.5 fifth, if neither of the SYN or RST bits is set then drop the
    +
    1209 // segment and return.
    +
    1210 return;
    +
    1211}
    +
    1212
    +
    1213template <typename InetTraits>
    +
    1214void tcp<InetTraits>::tcb::input_handle_other_state(tcp_hdr* th, packet p) {
    +
    1215 p.trim_front(th->data_offset * 4);
    +
    1216 bool do_output = false;
    +
    1217 bool do_output_data = false;
    +
    1218 tcp_seq seg_seq = th->seq;
    +
    1219 auto seg_ack = th->ack;
    +
    1220 auto seg_len = p.len();
    +
    1221
    +
    1222 // 4.1 first check sequence number
    +
    1223 if (!segment_acceptable(seg_seq, seg_len)) {
    +
    1224 //<SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>
    +
    1225 return output();
    +
    1226 }
    +
    1227
    +
    1228 // In the following it is assumed that the segment is the idealized
    +
    1229 // segment that begins at RCV.NXT and does not exceed the window.
    +
    1230 if (seg_seq < _rcv.next) {
    +
    1231 // ignore already acknowledged data
    +
    1232 auto dup = std::min(uint32_t(_rcv.next - seg_seq), seg_len);
    +
    1233 p.trim_front(dup);
    +
    1234 seg_len -= dup;
    +
    1235 seg_seq += dup;
    +
    1236 }
    +
    1237 // FIXME: We should trim data outside the right edge of the receive window as well
    +
    1238
    +
    1239 if (seg_seq != _rcv.next) {
    +
    1240 insert_out_of_order(seg_seq, std::move(p));
    +
    1241 // A TCP receiver SHOULD send an immediate duplicate ACK
    +
    1242 // when an out-of-order segment arrives.
    +
    1243 return output();
    +
    1244 }
    +
    1245
    +
    1246 // 4.2 second check the RST bit
    +
    1247 if (th->f_rst) {
    +
    1248 if (in_state(SYN_RECEIVED)) {
    +
    1249 // If this connection was initiated with a passive OPEN (i.e.,
    +
    1250 // came from the LISTEN state), then return this connection to
    +
    1251 // LISTEN state and return. The user need not be informed. If
    +
    1252 // this connection was initiated with an active OPEN (i.e., came
    +
    1253 // from SYN_SENT state) then the connection was refused, signal
    +
    1254 // the user "connection refused". In either case, all segments
    +
    1255 // on the retransmission queue should be removed. And in the
    +
    1256 // active OPEN case, enter the CLOSED state and delete the TCB,
    +
    1257 // and return.
    +
    1258 _connect_done.set_exception(tcp_refused_error());
    +
    1259 return do_reset();
    +
    1260 }
    +
    1261 if (in_state(ESTABLISHED | FIN_WAIT_1 | FIN_WAIT_2 | CLOSE_WAIT)) {
    +
    1262 // If the RST bit is set then, any outstanding RECEIVEs and SEND
    +
    1263 // should receive "reset" responses. All segment queues should be
    +
    1264 // flushed. Users should also receive an unsolicited general
    +
    1265 // "connection reset" signal. Enter the CLOSED state, delete the
    +
    1266 // TCB, and return.
    +
    1267 return do_reset();
    +
    1268 }
    +
    1269 if (in_state(CLOSING | LAST_ACK | TIME_WAIT)) {
    +
    1270 // If the RST bit is set then, enter the CLOSED state, delete the
    +
    1271 // TCB, and return.
    +
    1272 return do_closed();
    +
    1273 }
    +
    1274 }
    +
    1275
    +
    1276 // 4.3 third check security and precedence
    +
    1277 // NOTE: Ignored for now
    +
    1278
    +
    1279 // 4.4 fourth, check the SYN bit
    +
    1280 if (th->f_syn) {
    +
    1281 // SYN_RECEIVED, ESTABLISHED, FIN_WAIT_1, FIN_WAIT_2
    +
    1282 // CLOSE_WAIT, CLOSING, LAST_ACK, TIME_WAIT
    +
    1283
    +
    1284 // If the SYN is in the window it is an error, send a reset, any
    +
    1285 // outstanding RECEIVEs and SEND should receive "reset" responses,
    +
    1286 // all segment queues should be flushed, the user should also
    +
    1287 // receive an unsolicited general "connection reset" signal, enter
    +
    1288 // the CLOSED state, delete the TCB, and return.
    +
    1289 respond_with_reset(th);
    +
    1290 return do_reset();
    +
    1291
    +
    1292 // If the SYN is not in the window this step would not be reached
    +
    1293 // and an ack would have been sent in the first step (sequence
    +
    1294 // number check).
    +
    1295 }
    +
    1296
    +
    1297 // 4.5 fifth check the ACK field
    +
    1298 if (!th->f_ack) {
    +
    1299 // if the ACK bit is off drop the segment and return
    +
    1300 return;
    +
    1301 } else {
    +
    1302 // SYN_RECEIVED STATE
    +
    1303 if (in_state(SYN_RECEIVED)) {
    +
    1304 // If SND.UNA =< SEG.ACK =< SND.NXT then enter ESTABLISHED state
    +
    1305 // and continue processing.
    +
    1306 if (_snd.unacknowledged <= seg_ack && seg_ack <= _snd.next) {
    +
    1307 tcp_debug("SYN_RECEIVED -> ESTABLISHED\n");
    +
    1308 do_established();
    +
    1309 _tcp.add_connected_tcb(this->shared_from_this(), _local_port);
    +
    1310 } else {
    +
    1311 // <SEQ=SEG.ACK><CTL=RST>
    +
    1312 return respond_with_reset(th);
    +
    1313 }
    +
    1314 }
    +
    1315 auto update_window = [this, th, seg_seq, seg_ack] {
    +
    1316 tcp_debug("window update seg_seq=%d, seg_ack=%d, old window=%d new window=%d\n",
    +
    1317 seg_seq, seg_ack, _snd.window, th->window << _snd.window_scale);
    +
    1318 _snd.window = th->window << _snd.window_scale;
    +
    1319 _snd.wl1 = seg_seq;
    +
    1320 _snd.wl2 = seg_ack;
    +
    1321 _snd.zero_window_probing_out = 0;
    +
    1322 if (_snd.window == 0) {
    +
    1323 _persist_time_out = _rto;
    +
    1324 start_persist_timer();
    +
    1325 } else {
    +
    1326 stop_persist_timer();
    +
    1327 }
    +
    1328 };
    +
    1329 // ESTABLISHED STATE or
    +
    1330 // CLOSE_WAIT STATE: Do the same processing as for the ESTABLISHED state.
    +
    1331 if (in_state(ESTABLISHED | CLOSE_WAIT)){
    +
    1332 // When we are in zero window probing phase and packets_out = 0 we bypass "duplicated ack" check
    +
    1333 auto packets_out = _snd.next - _snd.unacknowledged - _snd.zero_window_probing_out;
    +
    1334 // If SND.UNA < SEG.ACK =< SND.NXT then, set SND.UNA <- SEG.ACK.
    +
    1335 if (_snd.unacknowledged < seg_ack && seg_ack <= _snd.next) {
    +
    1336 // Remote ACKed data we sent
    +
    1337 auto acked_bytes = data_segment_acked(seg_ack);
    +
    1338
    +
    1339 // If SND.UNA < SEG.ACK =< SND.NXT, the send window should be updated.
    +
    1340 if (_snd.wl1 < seg_seq || (_snd.wl1 == seg_seq && _snd.wl2 <= seg_ack)) {
    +
    1341 update_window();
    +
    1342 }
    +
    1343
    +
    1344 // some data is acked, try send more data
    +
    1345 do_output_data = true;
    +
    1346
    +
    1347 auto set_retransmit_timer = [this] {
    +
    1348 if (_snd.data.empty()) {
    +
    1349 // All outstanding segments are acked, turn off the timer.
    +
    1350 stop_retransmit_timer();
    +
    1351 // Signal the waiter of this event
    +
    1352 signal_all_data_acked();
    +
    1353 } else {
    +
    1354 // Restart the timer becasue new data is acked.
    +
    1355 start_retransmit_timer();
    +
    1356 }
    +
    1357 };
    +
    1358
    +
    1359 if (_snd.dupacks >= 3) {
    +
    1360 // We are in fast retransmit / fast recovery phase
    +
    1361 uint32_t smss = _snd.mss;
    +
    1362 if (seg_ack > _snd.recover) {
    +
    1363 tcp_debug("ack: full_ack\n");
    +
    1364 // Set cwnd to min (ssthresh, max(FlightSize, SMSS) + SMSS)
    +
    1365 _snd.cwnd = std::min(_snd.ssthresh, std::max(flight_size(), smss) + smss);
    +
    1366 // Exit the fast recovery procedure
    +
    1367 exit_fast_recovery();
    +
    1368 set_retransmit_timer();
    +
    1369 } else {
    +
    1370 tcp_debug("ack: partial_ack\n");
    +
    1371 // Retransmit the first unacknowledged segment
    +
    1372 fast_retransmit();
    +
    1373 // Deflate the congestion window by the amount of new data
    +
    1374 // acknowledged by the Cumulative Acknowledgment field
    +
    1375 _snd.cwnd -= acked_bytes;
    +
    1376 // If the partial ACK acknowledges at least one SMSS of new
    +
    1377 // data, then add back SMSS bytes to the congestion window
    +
    1378 if (acked_bytes >= smss) {
    +
    1379 _snd.cwnd += smss;
    +
    1380 }
    +
    1381 // Send a new segment if permitted by the new value of
    +
    1382 // cwnd. Do not exit the fast recovery procedure For
    +
    1383 // the first partial ACK that arrives during fast
    +
    1384 // recovery, also reset the retransmit timer.
    +
    1385 if (++_snd.partial_ack == 1) {
    +
    1386 start_retransmit_timer();
    +
    1387 }
    +
    1388 }
    +
    1389 } else {
    +
    1390 // RFC5681: The fast retransmit algorithm uses the arrival
    +
    1391 // of 3 duplicate ACKs (as defined in section 2, without
    +
    1392 // any intervening ACKs which move SND.UNA) as an
    +
    1393 // indication that a segment has been lost.
    +
    1394 //
    +
    1395 // So, here we reset dupacks to zero becasue this ACK moves
    +
    1396 // SND.UNA.
    +
    1397 exit_fast_recovery();
    +
    1398 set_retransmit_timer();
    +
    1399 }
    +
    1400 } else if ((packets_out > 0) && !_snd.data.empty() && seg_len == 0 &&
    +
    1401 th->f_fin == 0 && th->f_syn == 0 &&
    +
    1402 th->ack == _snd.unacknowledged &&
    +
    1403 uint32_t(th->window << _snd.window_scale) == _snd.window) {
    +
    1404 // Note:
    +
    1405 // RFC793 states:
    +
    1406 // If the ACK is a duplicate (SEG.ACK < SND.UNA), it can be ignored
    +
    1407 // RFC5681 states:
    +
    1408 // The TCP sender SHOULD use the "fast retransmit" algorithm to detect
    +
    1409 // and repair loss, based on incoming duplicate ACKs.
    +
    1410 // Here, We follow RFC5681.
    +
    1411 _snd.dupacks++;
    +
    1412 uint32_t smss = _snd.mss;
    +
    1413 // 3 duplicated ACKs trigger a fast retransmit
    +
    1414 if (_snd.dupacks == 1 || _snd.dupacks == 2) {
    +
    1415 // RFC5681 Step 3.1
    +
    1416 // Send cwnd + 2 * smss per RFC3042
    +
    1417 do_output_data = true;
    +
    1418 } else if (_snd.dupacks == 3) {
    +
    1419 // RFC6582 Step 3.2
    +
    1420 if (seg_ack - 1 > _snd.recover) {
    +
    1421 _snd.recover = _snd.next - 1;
    +
    1422 // RFC5681 Step 3.2
    +
    1423 _snd.ssthresh = std::max((flight_size() - _snd.limited_transfer) / 2, 2 * smss);
    +
    1424 fast_retransmit();
    +
    1425 } else {
    +
    1426 // Do not enter fast retransmit and do not reset ssthresh
    +
    1427 }
    +
    1428 // RFC5681 Step 3.3
    +
    1429 _snd.cwnd = _snd.ssthresh + 3 * smss;
    +
    1430 } else if (_snd.dupacks > 3) {
    +
    1431 // RFC5681 Step 3.4
    +
    1432 _snd.cwnd += smss;
    +
    1433 // RFC5681 Step 3.5
    +
    1434 do_output_data = true;
    +
    1435 }
    +
    1436 } else if (seg_ack > _snd.next) {
    +
    1437 // If the ACK acks something not yet sent (SEG.ACK > SND.NXT)
    +
    1438 // then send an ACK, drop the segment, and return
    +
    1439 return output();
    +
    1440 } else if (_snd.window == 0 && th->window > 0) {
    +
    1441 update_window();
    +
    1442 do_output_data = true;
    +
    1443 }
    +
    1444 }
    +
    1445 // FIN_WAIT_1 STATE
    +
    1446 if (in_state(FIN_WAIT_1)) {
    +
    1447 // In addition to the processing for the ESTABLISHED state, if
    +
    1448 // our FIN is now acknowledged then enter FIN-WAIT-2 and continue
    +
    1449 // processing in that state.
    +
    1450 if (seg_ack == _snd.next + 1) {
    +
    1451 tcp_debug("ack: FIN_WAIT_1 -> FIN_WAIT_2\n");
    +
    1452 _state = FIN_WAIT_2;
    +
    1453 do_local_fin_acked();
    +
    1454 }
    +
    1455 }
    +
    1456 // FIN_WAIT_2 STATE
    +
    1457 if (in_state(FIN_WAIT_2)) {
    +
    1458 // In addition to the processing for the ESTABLISHED state, if
    +
    1459 // the retransmission queue is empty, the user’s CLOSE can be
    +
    1460 // acknowledged ("ok") but do not delete the TCB.
    +
    1461 // TODO
    +
    1462 }
    +
    1463 // CLOSING STATE
    +
    1464 if (in_state(CLOSING)) {
    +
    1465 if (seg_ack == _snd.next + 1) {
    +
    1466 tcp_debug("ack: CLOSING -> TIME_WAIT\n");
    +
    1467 do_local_fin_acked();
    +
    1468 return do_time_wait();
    +
    1469 } else {
    +
    1470 return;
    +
    1471 }
    +
    1472 }
    +
    1473 // LAST_ACK STATE
    +
    1474 if (in_state(LAST_ACK)) {
    +
    1475 if (seg_ack == _snd.next + 1) {
    +
    1476 tcp_debug("ack: LAST_ACK -> CLOSED\n");
    +
    1477 do_local_fin_acked();
    +
    1478 return do_closed();
    +
    1479 }
    +
    1480 }
    +
    1481 // TIME_WAIT STATE
    +
    1482 if (in_state(TIME_WAIT)) {
    +
    1483 // The only thing that can arrive in this state is a
    +
    1484 // retransmission of the remote FIN. Acknowledge it, and restart
    +
    1485 // the 2 MSL timeout.
    +
    1486 // TODO
    +
    1487 }
    +
    1488 }
    +
    1489
    +
    1490 // 4.6 sixth, check the URG bit
    +
    1491 if (th->f_urg) {
    +
    1492 // TODO
    +
    1493 }
    +
    1494
    +
    1495 // 4.7 seventh, process the segment text
    +
    1496 if (in_state(ESTABLISHED | FIN_WAIT_1 | FIN_WAIT_2)) {
    +
    1497 if (p.len()) {
    +
    1498 // Once the TCP takes responsibility for the data it advances
    +
    1499 // RCV.NXT over the data accepted, and adjusts RCV.WND as
    +
    1500 // apporopriate to the current buffer availability. The total of
    +
    1501 // RCV.NXT and RCV.WND should not be reduced.
    +
    1502 _rcv.data_size += p.len();
    +
    1503 _rcv.data.push_back(std::move(p));
    +
    1504 _rcv.next += seg_len;
    +
    1505 auto merged = merge_out_of_order();
    +
    1506 _rcv.window = get_modified_receive_window_size();
    +
    1507 signal_data_received();
    +
    1508 // Send an acknowledgment of the form:
    +
    1509 // <SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>
    +
    1510 // This acknowledgment should be piggybacked on a segment being
    +
    1511 // transmitted if possible without incurring undue delay.
    +
    1512 if (merged) {
    +
    1513 // TCP receiver SHOULD send an immediate ACK when the
    +
    1514 // incoming segment fills in all or part of a gap in the
    +
    1515 // sequence space.
    +
    1516 do_output = true;
    +
    1517 } else {
    +
    1518 do_output = should_send_ack(seg_len);
    +
    1519 }
    +
    1520 }
    +
    1521 } else if (in_state(CLOSE_WAIT | CLOSING | LAST_ACK | TIME_WAIT)) {
    +
    1522 // This should not occur, since a FIN has been received from the
    +
    1523 // remote side. Ignore the segment text.
    +
    1524 return;
    +
    1525 }
    +
    1526
    +
    1527 // 4.8 eighth, check the FIN bit
    +
    1528 if (th->f_fin) {
    +
    1529 if (_fin_recvd_promise) {
    +
    1530 _fin_recvd_promise->set_value();
    +
    1531 _fin_recvd_promise.reset();
    +
    1532 }
    +
    1533 if (in_state(CLOSED | LISTEN | SYN_SENT)) {
    +
    1534 // Do not process the FIN if the state is CLOSED, LISTEN or SYN-SENT
    +
    1535 // since the SEG.SEQ cannot be validated; drop the segment and return.
    +
    1536 return;
    +
    1537 }
    +
    1538 auto fin_seq = seg_seq + seg_len;
    +
    1539 if (fin_seq == _rcv.next) {
    +
    1540 _rcv.next = fin_seq + 1;
    +
    1541 signal_data_received();
    +
    1542
    +
    1543 // If this <FIN> packet contains data as well, we can ACK both data
    +
    1544 // and <FIN> in a single packet, so canncel the previous ACK.
    +
    1545 clear_delayed_ack();
    +
    1546 do_output = false;
    +
    1547 // Send ACK for the FIN!
    +
    1548 output();
    +
    1549
    +
    1550 if (in_state(SYN_RECEIVED | ESTABLISHED)) {
    +
    1551 tcp_debug("fin: SYN_RECEIVED or ESTABLISHED -> CLOSE_WAIT\n");
    +
    1552 _state = CLOSE_WAIT;
    +
    1553 }
    +
    1554 if (in_state(FIN_WAIT_1)) {
    +
    1555 // If our FIN has been ACKed (perhaps in this segment), then
    +
    1556 // enter TIME-WAIT, start the time-wait timer, turn off the other
    +
    1557 // timers; otherwise enter the CLOSING state.
    +
    1558 // Note: If our FIN has been ACKed, we should be in FIN_WAIT_2
    +
    1559 // not FIN_WAIT_1 if we reach here.
    +
    1560 tcp_debug("fin: FIN_WAIT_1 -> CLOSING\n");
    +
    1561 _state = CLOSING;
    +
    1562 }
    +
    1563 if (in_state(FIN_WAIT_2)) {
    +
    1564 tcp_debug("fin: FIN_WAIT_2 -> TIME_WAIT\n");
    +
    1565 return do_time_wait();
    +
    1566 }
    +
    1567 }
    +
    1568 }
    +
    1569 if (do_output || (do_output_data && can_send())) {
    +
    1570 // Since we will do output, we can canncel scheduled delayed ACK.
    +
    1571 clear_delayed_ack();
    +
    1572 output();
    +
    1573 }
    +
    1574}
    +
    1575
    +
    1576template <typename InetTraits>
    +
    1577packet tcp<InetTraits>::tcb::get_transmit_packet() {
    +
    1578 // easy case: empty queue
    +
    1579 if (_snd.unsent.empty()) {
    +
    1580 return packet();
    +
    1581 }
    +
    1582 auto can_send = this->can_send();
    +
    1583 // Max number of TCP payloads we can pass to NIC
    +
    1584 uint32_t len;
    +
    1585 if (_tcp.hw_features().tx_tso) {
    +
    1586 // FIXME: Info tap device the size of the splitted packet
    +
    1587 len = _tcp.hw_features().max_packet_len - net::tcp_hdr_len_min - InetTraits::ip_hdr_len_min;
    +
    1588 } else {
    +
    1589 len = std::min(uint16_t(_tcp.hw_features().mtu - net::tcp_hdr_len_min - InetTraits::ip_hdr_len_min), _snd.mss);
    +
    1590 }
    +
    1591 can_send = std::min(can_send, len);
    +
    1592 // easy case: one small packet
    +
    1593 if (_snd.unsent.size() == 1 && _snd.unsent.front().len() <= can_send) {
    +
    1594 auto p = std::move(_snd.unsent.front());
    +
    1595 _snd.unsent.pop_front();
    +
    1596 _snd.unsent_len -= p.len();
    +
    1597 return p;
    +
    1598 }
    +
    1599 // moderate case: need to split one packet
    +
    1600 if (_snd.unsent.front().len() > can_send) {
    +
    1601 auto p = _snd.unsent.front().share(0, can_send);
    +
    1602 _snd.unsent.front().trim_front(can_send);
    +
    1603 _snd.unsent_len -= p.len();
    +
    1604 return p;
    +
    1605 }
    +
    1606 // hard case: merge some packets, possibly split last
    +
    1607 auto p = std::move(_snd.unsent.front());
    +
    1608 _snd.unsent.pop_front();
    +
    1609 can_send -= p.len();
    +
    1610 while (!_snd.unsent.empty()
    +
    1611 && _snd.unsent.front().len() <= can_send) {
    +
    1612 can_send -= _snd.unsent.front().len();
    +
    1613 p.append(std::move(_snd.unsent.front()));
    +
    1614 _snd.unsent.pop_front();
    +
    1615 }
    +
    1616 if (!_snd.unsent.empty() && can_send) {
    +
    1617 auto& q = _snd.unsent.front();
    +
    1618 p.append(q.share(0, can_send));
    +
    1619 q.trim_front(can_send);
    +
    1620 }
    +
    1621 _snd.unsent_len -= p.len();
    +
    1622 return p;
    +
    1623}
    +
    1624
    +
    1625template <typename InetTraits>
    +
    1626void tcp<InetTraits>::tcb::output_one(bool data_retransmit) {
    +
    1627 if (in_state(CLOSED)) {
    +
    1628 return;
    +
    1629 }
    +
    1630
    +
    1631 packet p = data_retransmit ? _snd.data.front().p.share() : get_transmit_packet();
    +
    1632 packet clone = p.share(); // early clone to prevent share() from calling packet::unuse_internal_data() on header.
    +
    1633 uint16_t len = p.len();
    +
    1634 bool syn_on = syn_needs_on();
    +
    1635 bool ack_on = ack_needs_on();
    +
    1636
    +
    1637 auto options_size = _option.get_size(syn_on, ack_on);
    +
    1638 auto th = p.prepend_uninitialized_header(tcp_hdr::len + options_size);
    +
    1639 auto h = tcp_hdr{};
    +
    1640
    +
    1641 h.src_port = _local_port;
    +
    1642 h.dst_port = _foreign_port;
    +
    1643
    +
    1644 h.f_syn = syn_on;
    +
    1645 h.f_ack = ack_on;
    +
    1646 if (ack_on) {
    +
    1647 clear_delayed_ack();
    +
    1648 }
    +
    1649 h.f_urg = false;
    +
    1650 h.f_psh = false;
    +
    1651
    +
    1652 tcp_seq seq;
    +
    1653 if (data_retransmit) {
    +
    1654 seq = _snd.unacknowledged;
    +
    1655 } else {
    +
    1656 seq = syn_on ? _snd.initial : _snd.next;
    +
    1657 _snd.next += len;
    +
    1658 }
    +
    1659 h.seq = seq;
    +
    1660 h.ack = _rcv.next;
    +
    1661 h.data_offset = (tcp_hdr::len + options_size) / 4;
    +
    1662 h.window = _rcv.window >> _rcv.window_scale;
    +
    1663 h.checksum = 0;
    +
    1664
    +
    1665 // FIXME: does the FIN have to fit in the window?
    +
    1666 bool fin_on = fin_needs_on();
    +
    1667 h.f_fin = fin_on;
    +
    1668
    +
    1669 // Add tcp options
    +
    1670 _option.fill(th, &h, options_size);
    +
    1671 h.write(th);
    +
    1672
    +
    1673 offload_info oi;
    +
    1674 checksummer csum;
    +
    1675 uint16_t pseudo_hdr_seg_len = 0;
    +
    1676
    +
    1677 oi.tcp_hdr_len = tcp_hdr::len + options_size;
    +
    1678
    +
    1679 if (_tcp.hw_features().tx_csum_l4_offload) {
    +
    1680 oi.needs_csum = true;
    +
    1681
    +
    1682 //
    +
    1683 // tx checksum offloading: both virtio-net's VIRTIO_NET_F_CSUM dpdk's
    +
    1684 // PKT_TX_TCP_CKSUM - requires th->checksum to be initialized to ones'
    +
    1685 // complement sum of the pseudo header.
    +
    1686 //
    +
    1687 // For TSO the csum should be calculated for a pseudo header with
    +
    1688 // segment length set to 0. All the rest is the same as for a TCP Tx
    +
    1689 // CSUM offload case.
    +
    1690 //
    +
    1691 if (_tcp.hw_features().tx_tso && len > _snd.mss) {
    +
    1692 oi.tso_seg_size = _snd.mss;
    +
    1693 } else {
    +
    1694 pseudo_hdr_seg_len = tcp_hdr::len + options_size + len;
    +
    1695 }
    +
    1696 } else {
    +
    1697 pseudo_hdr_seg_len = tcp_hdr::len + options_size + len;
    +
    1698 oi.needs_csum = false;
    +
    1699 }
    +
    1700
    +
    1701 InetTraits::tcp_pseudo_header_checksum(csum, _local_ip, _foreign_ip,
    +
    1702 pseudo_hdr_seg_len);
    +
    1703
    +
    1704 uint16_t checksum;
    +
    1705 if (_tcp.hw_features().tx_csum_l4_offload) {
    +
    1706 checksum = ~csum.get();
    +
    1707 } else {
    +
    1708 csum.sum(p);
    +
    1709 checksum = csum.get();
    +
    1710 }
    +
    1711 tcp_hdr::write_nbo_checksum(th, checksum);
    +
    1712
    +
    1713 oi.protocol = ip_protocol_num::tcp;
    +
    1714
    +
    1715 p.set_offload_info(oi);
    +
    1716
    +
    1717 if (!data_retransmit && (len || syn_on || fin_on)) {
    +
    1718 auto now = clock_type::now();
    +
    1719 if (len) {
    +
    1720 unsigned nr_transmits = 0;
    +
    1721 _snd.data.emplace_back(unacked_segment{std::move(clone),
    +
    1722 len, nr_transmits, now});
    +
    1723 }
    +
    1724 if (!_retransmit.armed()) {
    +
    1725 start_retransmit_timer(now);
    +
    1726 }
    +
    1727 }
    +
    1728
    +
    1729
    +
    1730 // if advertised TCP receive window is 0 we may only transmit zero window probing segment.
    +
    1731 // Payload size of this segment is 1. Queueing anything bigger when _snd.window == 0 is bug
    +
    1732 // and violation of RFC
    +
    1733 assert((_snd.window > 0) || ((_snd.window == 0) && (len <= 1)));
    +
    1734 queue_packet(std::move(p));
    +
    1735}
    +
    1736
    +
    1737template <typename InetTraits>
    +
    1738future<> tcp<InetTraits>::tcb::wait_for_data() {
    +
    1739 if (!_rcv.data.empty() || foreign_will_not_send()) {
    +
    1740 return make_ready_future<>();
    +
    1741 }
    +
    1742 _rcv._data_received_promise = promise<>();
    +
    1743 return _rcv._data_received_promise->get_future();
    +
    1744}
    +
    1745
    +
    1746template <typename InetTraits>
    +
    1747future<> tcp<InetTraits>::tcb::wait_input_shutdown() {
    +
    1748 if (!_fin_recvd_promise) {
    +
    1749 return make_ready_future<>();
    +
    1750 }
    +
    1751 return _fin_recvd_promise->get_future();
    +
    1752}
    +
    1753
    +
    1754template <typename InetTraits>
    +
    1755void
    +
    1756tcp<InetTraits>::tcb::abort_reader() noexcept {
    +
    1757 if (_rcv._data_received_promise) {
    +
    1758 _rcv._data_received_promise->set_exception(
    +
    1759 std::make_exception_ptr(std::system_error(ECONNABORTED, std::system_category())));
    +
    1760 _rcv._data_received_promise = std::nullopt;
    +
    1761 }
    +
    1762 if (_fin_recvd_promise) {
    +
    1763 _fin_recvd_promise->set_value();
    +
    1764 _fin_recvd_promise.reset();
    +
    1765 }
    +
    1766}
    +
    1767
    +
    1768template <typename InetTraits>
    +
    1769future<> tcp<InetTraits>::tcb::wait_for_all_data_acked() {
    +
    1770 if (_snd.data.empty() && _snd.unsent_len == 0) {
    +
    1771 return make_ready_future<>();
    +
    1772 }
    +
    1773 _snd._all_data_acked_promise = promise<>();
    +
    1774 return _snd._all_data_acked_promise->get_future();
    +
    1775}
    +
    1776
    +
    1777template <typename InetTraits>
    + +
    1779 // An initial send sequence number (ISS) is selected. A SYN segment of the
    +
    1780 // form <SEQ=ISS><CTL=SYN> is sent. Set SND.UNA to ISS, SND.NXT to ISS+1,
    +
    1781 // enter SYN-SENT state, and return.
    +
    1782 do_setup_isn();
    +
    1783
    +
    1784 // Local receive window scale factor
    +
    1785 _rcv.window_scale = _option._local_win_scale = 7;
    +
    1786 // Maximum segment size local can receive
    +
    1787 _rcv.mss = _option._local_mss = local_mss();
    +
    1788 _rcv.window = get_default_receive_window_size();
    +
    1789
    +
    1790 do_syn_sent();
    +
    1791}
    +
    1792
    +
    1793template <typename InetTraits>
    +
    1794packet tcp<InetTraits>::tcb::read() {
    +
    1795 packet p;
    +
    1796 for (auto&& q : _rcv.data) {
    +
    1797 p.append(std::move(q));
    +
    1798 }
    +
    1799 _rcv.data_size = 0;
    +
    1800 _rcv.data.clear();
    +
    1801 _rcv.window = get_default_receive_window_size();
    +
    1802 return p;
    +
    1803}
    +
    1804
    +
    1805template <typename InetTraits>
    +
    1806future<> tcp<InetTraits>::tcb::wait_send_available() {
    +
    1807 if (_snd.max_queue_space > _snd.current_queue_space) {
    +
    1808 return make_ready_future<>();
    +
    1809 }
    +
    1810 _snd._send_available_promise = promise<>();
    +
    1811 return _snd._send_available_promise->get_future();
    +
    1812}
    +
    1813
    +
    1814template <typename InetTraits>
    +
    1815future<> tcp<InetTraits>::tcb::send(packet p) {
    +
    1816 // We can not send after the connection is closed
    +
    1817 if (_snd.closed || in_state(CLOSED)) {
    +
    1818 return make_exception_future<>(tcp_reset_error());
    +
    1819 }
    +
    1820
    +
    1821 auto len = p.len();
    +
    1822 _snd.current_queue_space += len;
    +
    1823 _snd.unsent_len += len;
    +
    1824 _snd.unsent.push_back(std::move(p));
    +
    1825
    +
    1826 if (can_send() > 0) {
    +
    1827 output();
    +
    1828 }
    +
    1829
    +
    1830 return wait_send_available();
    +
    1831}
    +
    1832
    +
    1833template <typename InetTraits>
    +
    1834void tcp<InetTraits>::tcb::close() noexcept {
    +
    1835 if (in_state(CLOSED) || _snd.closed) {
    +
    1836 return;
    +
    1837 }
    +
    1838 // TODO: We should return a future to upper layer
    +
    1839 (void)wait_for_all_data_acked().then([this, zis = this->shared_from_this()] () mutable {
    +
    1840 _snd.closed = true;
    +
    1841 tcp_debug("close: unsent_len=%d\n", _snd.unsent_len);
    +
    1842 if (in_state(CLOSE_WAIT)) {
    +
    1843 tcp_debug("close: CLOSE_WAIT -> LAST_ACK\n");
    +
    1844 _state = LAST_ACK;
    +
    1845 } else if (in_state(ESTABLISHED)) {
    +
    1846 tcp_debug("close: ESTABLISHED -> FIN_WAIT_1\n");
    +
    1847 _state = FIN_WAIT_1;
    +
    1848 }
    +
    1849 // Send <FIN> to remote
    +
    1850 // Note: we call output_one to make sure a packet with FIN actually
    +
    1851 // sent out. If we only call output() and _packetq is not empty,
    +
    1852 // tcp::tcb::get_packet(), packet with FIN will not be generated.
    +
    1853 output_one();
    +
    1854 output();
    +
    1855 });
    +
    1856}
    +
    1857
    +
    1858template <typename InetTraits>
    +
    1859bool tcp<InetTraits>::tcb::should_send_ack(uint16_t seg_len) {
    +
    1860 // We've received a TSO packet, do ack immediately
    +
    1861 if (seg_len > _rcv.mss) {
    +
    1862 _nr_full_seg_received = 0;
    +
    1863 _delayed_ack.cancel();
    +
    1864 return true;
    +
    1865 }
    +
    1866
    +
    1867 // We've received a full sized segment, ack for every second full sized segment
    +
    1868 if (seg_len == _rcv.mss) {
    +
    1869 if (_nr_full_seg_received++ >= 1) {
    +
    1870 _nr_full_seg_received = 0;
    +
    1871 _delayed_ack.cancel();
    +
    1872 return true;
    +
    1873 }
    +
    1874 }
    +
    1875
    +
    1876 // If the timer is armed and its callback hasn't been run.
    +
    1877 if (_delayed_ack.armed()) {
    +
    1878 return false;
    +
    1879 }
    +
    1880
    +
    1881 // If the timer is not armed, schedule a delayed ACK.
    +
    1882 // The maximum delayed ack timer allowed by RFC1122 is 500ms, most
    +
    1883 // implementations use 200ms.
    +
    1884 _delayed_ack.arm(200ms);
    +
    1885 return false;
    +
    1886}
    +
    1887
    +
    1888template <typename InetTraits>
    +
    1889void tcp<InetTraits>::tcb::clear_delayed_ack() noexcept {
    +
    1890 _delayed_ack.cancel();
    +
    1891}
    +
    1892
    +
    1893template <typename InetTraits>
    +
    1894bool tcp<InetTraits>::tcb::merge_out_of_order() {
    +
    1895 bool merged = false;
    +
    1896 if (_rcv.out_of_order.map.empty()) {
    +
    1897 return merged;
    +
    1898 }
    +
    1899 for (auto it = _rcv.out_of_order.map.begin(); it != _rcv.out_of_order.map.end();) {
    +
    1900 auto& p = it->second;
    +
    1901 auto seg_beg = it->first;
    +
    1902 auto seg_len = p.len();
    +
    1903 auto seg_end = seg_beg + seg_len;
    +
    1904 if (seg_beg <= _rcv.next && _rcv.next < seg_end) {
    +
    1905 // This segment has been received out of order and its previous
    +
    1906 // segment has been received now
    +
    1907 auto trim = _rcv.next - seg_beg;
    +
    1908 if (trim) {
    +
    1909 p.trim_front(trim);
    +
    1910 seg_len -= trim;
    +
    1911 }
    +
    1912 _rcv.next += seg_len;
    +
    1913 _rcv.data_size += p.len();
    +
    1914 _rcv.data.push_back(std::move(p));
    +
    1915 // Since c++11, erase() always returns the value of the following element
    +
    1916 it = _rcv.out_of_order.map.erase(it);
    +
    1917 merged = true;
    +
    1918 } else if (_rcv.next >= seg_end) {
    +
    1919 // This segment has been receive already, drop it
    +
    1920 it = _rcv.out_of_order.map.erase(it);
    +
    1921 } else {
    +
    1922 // seg_beg > _rcv.need, can not merge. Note, seg_beg can grow only,
    +
    1923 // so we can stop looking here.
    +
    1924 it++;
    +
    1925 break;
    +
    1926 }
    +
    1927 }
    +
    1928 return merged;
    +
    1929}
    +
    1930
    +
    1931template <typename InetTraits>
    +
    1932void tcp<InetTraits>::tcb::insert_out_of_order(tcp_seq seg, packet p) {
    +
    1933 _rcv.out_of_order.merge(seg, std::move(p));
    +
    1934}
    +
    1935
    +
    1936template <typename InetTraits>
    +
    1937void tcp<InetTraits>::tcb::trim_receive_data_after_window() {
    +
    1938 abort();
    +
    1939}
    +
    1940
    +
    1941template <typename InetTraits>
    +
    1942void tcp<InetTraits>::tcb::persist() {
    +
    1943 tcp_debug("persist timer fired\n");
    +
    1944 // Send 1 byte packet to probe peer's window size
    +
    1945 _snd.window_probe = true;
    +
    1946 _snd.zero_window_probing_out++;
    +
    1947 output_one();
    +
    1948 _snd.window_probe = false;
    +
    1949
    +
    1950 output();
    +
    1951 // Perform binary exponential back-off per RFC1122
    +
    1952 _persist_time_out = std::min(_persist_time_out * 2, _rto_max);
    +
    1953 start_persist_timer();
    +
    1954}
    +
    1955
    +
    1956template <typename InetTraits>
    +
    1957void tcp<InetTraits>::tcb::retransmit() {
    +
    1958 auto output_update_rto = [this] {
    +
    1959 output();
    +
    1960 // According to RFC6298, Update RTO <- RTO * 2 to perform binary exponential back-off
    +
    1961 this->_rto = std::min(this->_rto * 2, this->_rto_max);
    +
    1962 start_retransmit_timer();
    +
    1963 };
    +
    1964
    +
    1965 // Retransmit SYN
    +
    1966 if (syn_needs_on()) {
    +
    1967 if (_snd.syn_retransmit++ < _max_nr_retransmit) {
    +
    1968 output_update_rto();
    +
    1969 } else {
    +
    1970 _connect_done.set_exception(tcp_connect_error());
    +
    1971 cleanup();
    +
    1972 return;
    +
    1973 }
    +
    1974 }
    +
    1975
    +
    1976 // Retransmit FIN
    +
    1977 if (fin_needs_on()) {
    +
    1978 if (_snd.fin_retransmit++ < _max_nr_retransmit) {
    +
    1979 output_update_rto();
    +
    1980 } else {
    +
    1981 cleanup();
    +
    1982 return;
    +
    1983 }
    +
    1984 }
    +
    1985
    +
    1986 // Retransmit Data
    +
    1987 if (_snd.data.empty()) {
    +
    1988 return;
    +
    1989 }
    +
    1990
    +
    1991 // If there are unacked data, retransmit the earliest segment
    +
    1992 auto& unacked_seg = _snd.data.front();
    +
    1993
    +
    1994 // According to RFC5681
    +
    1995 // Update ssthresh only for the first retransmit
    +
    1996 uint32_t smss = _snd.mss;
    +
    1997 if (unacked_seg.nr_transmits == 0) {
    +
    1998 _snd.ssthresh = std::max(flight_size() / 2, 2 * smss);
    +
    1999 }
    +
    2000 // RFC6582 Step 4
    +
    2001 _snd.recover = _snd.next - 1;
    +
    2002 // Start the slow start process
    +
    2003 _snd.cwnd = smss;
    +
    2004 // End fast recovery
    +
    2005 exit_fast_recovery();
    +
    2006
    +
    2007 if (unacked_seg.nr_transmits < _max_nr_retransmit) {
    +
    2008 unacked_seg.nr_transmits++;
    +
    2009 } else {
    +
    2010 // Delete connection when max num of retransmission is reached
    +
    2011 do_reset();
    +
    2012 return;
    +
    2013 }
    +
    2014 retransmit_one();
    +
    2015
    +
    2016 output_update_rto();
    +
    2017}
    +
    2018
    +
    2019template <typename InetTraits>
    +
    2020void tcp<InetTraits>::tcb::fast_retransmit() {
    +
    2021 if (!_snd.data.empty()) {
    +
    2022 auto& unacked_seg = _snd.data.front();
    +
    2023 unacked_seg.nr_transmits++;
    +
    2024 retransmit_one();
    +
    2025 output();
    +
    2026 }
    +
    2027}
    +
    2028
    +
    2029template <typename InetTraits>
    +
    2030void tcp<InetTraits>::tcb::update_rto(clock_type::time_point tx_time) {
    +
    2031 // Update RTO according to RFC6298
    +
    2032 auto R = std::chrono::duration_cast<std::chrono::milliseconds>(clock_type::now() - tx_time);
    +
    2033 if (_snd.first_rto_sample) {
    +
    2034 _snd.first_rto_sample = false;
    +
    2035 // RTTVAR <- R/2
    +
    2036 // SRTT <- R
    +
    2037 _snd.rttvar = R / 2;
    +
    2038 _snd.srtt = R;
    +
    2039 } else {
    +
    2040 // RTTVAR <- (1 - beta) * RTTVAR + beta * |SRTT - R'|
    +
    2041 // SRTT <- (1 - alpha) * SRTT + alpha * R'
    +
    2042 // where alpha = 1/8 and beta = 1/4
    +
    2043 auto delta = _snd.srtt > R ? (_snd.srtt - R) : (R - _snd.srtt);
    +
    2044 _snd.rttvar = _snd.rttvar * 3 / 4 + delta / 4;
    +
    2045 _snd.srtt = _snd.srtt * 7 / 8 + R / 8;
    +
    2046 }
    +
    2047 // RTO <- SRTT + max(G, K * RTTVAR)
    +
    2048 _rto = _snd.srtt + std::max(_rto_clk_granularity, 4 * _snd.rttvar);
    +
    2049
    +
    2050 // Make sure 1 sec << _rto << 60 sec
    +
    2051 _rto = std::max(_rto, _rto_min);
    +
    2052 _rto = std::min(_rto, _rto_max);
    +
    2053}
    +
    2054
    +
    2055template <typename InetTraits>
    +
    2056void tcp<InetTraits>::tcb::update_cwnd(uint32_t acked_bytes) {
    +
    2057 uint32_t smss = _snd.mss;
    +
    2058 if (_snd.cwnd < _snd.ssthresh) {
    +
    2059 // In slow start phase
    +
    2060 _snd.cwnd += std::min(acked_bytes, smss);
    +
    2061 } else {
    +
    2062 // In congestion avoidance phase
    +
    2063 uint32_t round_up = 1;
    +
    2064 _snd.cwnd += std::max(round_up, smss * smss / _snd.cwnd);
    +
    2065 }
    +
    2066}
    +
    2067
    +
    2068template <typename InetTraits>
    +
    2069void tcp<InetTraits>::tcb::cleanup() {
    +
    2070 _snd.unsent.clear();
    +
    2071 _snd.data.clear();
    +
    2072 _rcv.out_of_order.map.clear();
    +
    2073 _rcv.data_size = 0;
    +
    2074 _rcv.data.clear();
    +
    2075 stop_retransmit_timer();
    +
    2076 clear_delayed_ack();
    +
    2077 remove_from_tcbs();
    +
    2078}
    +
    2079
    +
    2080template <typename InetTraits>
    +
    2081tcp_seq tcp<InetTraits>::tcb::get_isn() {
    +
    2082 // Per RFC6528, TCP SHOULD generate its Initial Sequence Numbers
    +
    2083 // with the expression:
    +
    2084 // ISN = M + F(localip, localport, remoteip, remoteport, secretkey)
    +
    2085 // M is the 4 microsecond timer
    +
    2086 using namespace std::chrono;
    +
    2087 uint32_t hash[4];
    +
    2088 hash[0] = _local_ip.ip;
    +
    2089 hash[1] = _foreign_ip.ip;
    +
    2090 hash[2] = (_local_port << 16) + _foreign_port;
    +
    2091 gnutls_hash_hd_t md5_hash_handle;
    +
    2092 // GnuTLS digests do not init at all, so this should never fail.
    +
    2093 gnutls_hash_init(&md5_hash_handle, GNUTLS_DIG_MD5);
    +
    2094 gnutls_hash(md5_hash_handle, hash, 3 * sizeof(hash[0]));
    +
    2095 gnutls_hash(md5_hash_handle, _isn_secret.key, sizeof(_isn_secret.key));
    +
    2096 // reuse "hash" for the output of digest
    +
    2097 assert(sizeof(hash) == gnutls_hash_get_len(GNUTLS_DIG_MD5));
    +
    2098 gnutls_hash_deinit(md5_hash_handle, hash);
    +
    2099 auto seq = hash[0];
    +
    2100 auto m = duration_cast<microseconds>(clock_type::now().time_since_epoch());
    +
    2101 seq += m.count() / 4;
    +
    2102 return make_seq(seq);
    +
    2103}
    +
    2104
    +
    2105template <typename InetTraits>
    +
    2106std::optional<typename InetTraits::l4packet> tcp<InetTraits>::tcb::get_packet() {
    +
    2107 _poll_active = false;
    +
    2108 if (_packetq.empty()) {
    +
    2109 output_one();
    +
    2110 }
    +
    2111
    +
    2112 if (in_state(CLOSED)) {
    +
    2113 return std::optional<typename InetTraits::l4packet>();
    +
    2114 }
    +
    2115
    +
    2116 assert(!_packetq.empty());
    +
    2117
    +
    2118 auto p = std::move(_packetq.front());
    +
    2119 _packetq.pop_front();
    +
    2120 if (!_packetq.empty() || (_snd.dupacks < 3 && can_send() > 0 && (_snd.window > 0))) {
    +
    2121 // If there are packets to send in the queue or tcb is allowed to send
    +
    2122 // more add tcp back to polling set to keep sending. In addition, dupacks >= 3
    +
    2123 // is an indication that an segment is lost, stop sending more in this case.
    +
    2124 // Finally - we can't send more until window is opened again.
    +
    2125 output();
    +
    2126 }
    +
    2127 return p;
    +
    2128}
    +
    2129
    +
    2130template <typename InetTraits>
    +
    2131void tcp<InetTraits>::connection::close_read() noexcept {
    +
    2132 _tcb->abort_reader();
    +
    2133}
    +
    2134
    +
    2135template <typename InetTraits>
    +
    2136void tcp<InetTraits>::connection::close_write() noexcept {
    +
    2137 _tcb->close();
    +
    2138}
    +
    2139
    +
    2140template <typename InetTraits>
    +
    2141void tcp<InetTraits>::connection::shutdown_connect() {
    +
    2142 if (_tcb->syn_needs_on()) {
    +
    2143 _tcb->_connect_done.set_exception(tcp_refused_error());
    +
    2144 _tcb->cleanup();
    +
    2145 } else {
    +
    2146 close_read();
    +
    2147 close_write();
    +
    2148 }
    +
    2149}
    +
    2150
    +
    2151template <typename InetTraits>
    +
    2152typename tcp<InetTraits>::tcb::isn_secret tcp<InetTraits>::tcb::_isn_secret;
    +
    2153
    +
    2154}
    +
    2155
    +
    2156}
    + +
    bool try_wait(size_t nr=1) noexcept
    Definition: semaphore.hh:434
    +
    void signal(size_t nr=1) noexcept
    Definition: semaphore.hh:396
    + +
    Definition: shared_ptr.hh:148
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Low-resolution and efficient steady clock.
    Definition: lowres_clock.hh:56
    +
    static time_point now() noexcept
    Definition: lowres_clock.hh:74
    + +
    holds the metric definition.
    Definition: metrics_registration.hh:94
    +
    metric_groups & add_group(const group_name_type &name, const std::initializer_list< metric_definition > &l)
    Add metrics belonging to the same group.
    + +
    Definition: arp.hh:205
    +
    Definition: net.hh:51
    + +
    Definition: packet.hh:87
    +
    Definition: tcp.hh:671
    +
    Definition: tcp.hh:719
    +
    Definition: tcp.hh:291
    + +
    void set_value(A &&... a) noexcept
    Sets the promises value.
    Definition: future.hh:990
    +
    void set_exception(std::exception_ptr &&ex) noexcept
    Marks the promise as failed.
    Definition: future.hh:998
    +
    Definition: queue.hh:44
    +
    size_t size() const noexcept
    Returns the number of items currently in the queue.
    Definition: queue.hh:109
    +
    future< T > pop_eventually() noexcept
    Definition: queue.hh:225
    +
    size_t max_size() const noexcept
    Definition: queue.hh:117
    +
    void abort(std::exception_ptr ex) noexcept
    Definition: queue.hh:131
    +
    Definition: socket_defs.hh:47
    + +
    bool cancel() noexcept
    +
    void rearm(time_point until, std::optional< duration > period={}) noexcept
    Definition: timer.hh:167
    +
    future< T > get_future() noexcept
    Gets the promise's associated future.
    Definition: future.hh:1926
    +
    future now()
    Returns a ready future.
    Definition: later.hh:35
    +
    impl::metric_definition_impl make_counter(metric_name_type name, T &&val, description d=description(), std::vector< label_instance > labels={})
    create a counter metric
    Definition: metrics.hh:528
    +
    server_socket listen(socket_address sa)
    +
    future< connected_socket > connect(socket_address sa)
    +
    header for metrics creation.
    +
    Definition: net.hh:75
    +
    Definition: tcp.hh:197
    +
    Definition: tcp.hh:287
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    shard_id this_shard_id() noexcept
    Returns shard_id of the of the current shard.
    Definition: shard_id.hh:52
    +
    Definition: ethernet.hh:37
    + +
    Definition: ip.hh:108
    +
    Definition: tcp.hh:227
    +
    Definition: tcp.hh:168
    +
    Definition: tcp.hh:106
    +
    Definition: tcp.hh:161
    +
    Definition: tcp.hh:134
    + + +
    Definition: tcp.hh:96
    +
    + + + + diff --git a/master/temporary__buffer_8hh_source.html b/master/temporary__buffer_8hh_source.html new file mode 100644 index 000000000..a7168fe55 --- /dev/null +++ b/master/temporary__buffer_8hh_source.html @@ -0,0 +1,253 @@ + + + + + + + +Seastar: seastar/core/temporary_buffer.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    temporary_buffer.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <algorithm>
    +
    26#include <cstddef>
    +
    27#include <string_view>
    +
    28#include <malloc.h>
    +
    29#endif
    +
    30#include <seastar/core/deleter.hh>
    +
    31#include <seastar/util/eclipse.hh>
    +
    32#include <seastar/util/std-compat.hh>
    +
    33#include <seastar/util/modules.hh>
    +
    34
    +
    35namespace seastar {
    +
    36
    +
    39
    +
    65SEASTAR_MODULE_EXPORT
    +
    66template <typename CharType>
    + +
    68 static_assert(sizeof(CharType) == 1, "must buffer stream of bytes");
    +
    69 CharType* _buffer;
    +
    70 size_t _size;
    +
    71 deleter _deleter;
    +
    72public:
    +
    77 explicit temporary_buffer(size_t size)
    +
    78 : _buffer(static_cast<CharType*>(malloc(size * sizeof(CharType)))), _size(size)
    +
    79 , _deleter(make_free_deleter(_buffer)) {
    +
    80 if (size && !_buffer) {
    +
    81 throw std::bad_alloc();
    +
    82 }
    +
    83 }
    +
    84 //explicit temporary_buffer(CharType* borrow, size_t size) : _buffer(borrow), _size(size) {}
    + +
    87 : _buffer(nullptr)
    +
    88 , _size(0) {}
    +
    89 temporary_buffer(const temporary_buffer&) = delete;
    +
    90
    +
    92 temporary_buffer(temporary_buffer&& x) noexcept : _buffer(x._buffer), _size(x._size), _deleter(std::move(x._deleter)) {
    +
    93 x._buffer = nullptr;
    +
    94 x._size = 0;
    +
    95 }
    +
    96
    +
    103 temporary_buffer(CharType* buf, size_t size, deleter d) noexcept
    +
    104 : _buffer(buf), _size(size), _deleter(std::move(d)) {}
    +
    109 temporary_buffer(const CharType* src, size_t size) : temporary_buffer(size) {
    +
    110 std::copy_n(src, size, _buffer);
    +
    111 }
    +
    112 void operator=(const temporary_buffer&) = delete;
    + +
    115 if (this != &x) {
    +
    116 _buffer = x._buffer;
    +
    117 _size = x._size;
    +
    118 _deleter = std::move(x._deleter);
    +
    119 x._buffer = nullptr;
    +
    120 x._size = 0;
    +
    121 }
    +
    122 return *this;
    +
    123 }
    +
    125 const CharType* get() const noexcept { return _buffer; }
    +
    128 CharType* get_write() noexcept { return _buffer; }
    +
    130 size_t size() const noexcept { return _size; }
    +
    132 const CharType* begin() const noexcept { return _buffer; }
    +
    134 const CharType* end() const noexcept { return _buffer + _size; }
    +
    140 temporary_buffer prefix(size_t size) && noexcept {
    +
    141 auto ret = std::move(*this);
    +
    142 ret._size = size;
    +
    143 return ret;
    +
    144 }
    +
    148 CharType operator[](size_t pos) const noexcept {
    +
    149 return _buffer[pos];
    +
    150 }
    +
    152 bool empty() const noexcept { return !size(); }
    +
    154 explicit operator bool() const noexcept { return size(); }
    + +
    161 return temporary_buffer(_buffer, _size, _deleter.share());
    +
    162 }
    +
    170 temporary_buffer share(size_t pos, size_t len) {
    +
    171 auto ret = share();
    +
    172 ret._buffer += pos;
    +
    173 ret._size = len;
    +
    174 return ret;
    +
    175 }
    + +
    180 return {_buffer, _size};
    +
    181 }
    +
    186 void trim_front(size_t pos) noexcept {
    +
    187 _buffer += pos;
    +
    188 _size -= pos;
    +
    189 }
    +
    194 void trim(size_t pos) noexcept {
    +
    195 _size = pos;
    +
    196 }
    +
    203 deleter release() noexcept {
    +
    204 return std::move(_deleter);
    +
    205 }
    +
    212 static temporary_buffer aligned(size_t alignment, size_t size) {
    +
    213 void *ptr = nullptr;
    +
    214 auto ret = ::posix_memalign(&ptr, alignment, size * sizeof(CharType));
    +
    215 auto buf = static_cast<CharType*>(ptr);
    +
    216 if (ret) {
    +
    217 throw std::bad_alloc();
    +
    218 }
    +
    219 return temporary_buffer(buf, size, make_free_deleter(buf));
    +
    220 }
    +
    221
    +
    222 static temporary_buffer copy_of(std::string_view view) {
    +
    223 void* ptr = ::malloc(view.size());
    +
    224 if (!ptr) {
    +
    225 throw std::bad_alloc();
    +
    226 }
    +
    227 auto buf = static_cast<CharType*>(ptr);
    +
    228 memcpy(buf, view.data(), view.size());
    +
    229 return temporary_buffer(buf, view.size(), make_free_deleter(buf));
    +
    230 }
    +
    231
    +
    236 bool operator==(const temporary_buffer& o) const noexcept {
    +
    237 return size() == o.size() && std::equal(begin(), end(), o.begin());
    +
    238 }
    +
    239
    +
    244 bool operator!=(const temporary_buffer& o) const noexcept {
    +
    245 return !(*this == o);
    +
    246 }
    +
    247};
    +
    248
    +
    250
    +
    251}
    +
    Definition: deleter.hh:52
    +
    Definition: temporary_buffer.hh:67
    +
    temporary_buffer(CharType *buf, size_t size, deleter d) noexcept
    Definition: temporary_buffer.hh:103
    +
    temporary_buffer clone() const
    Definition: temporary_buffer.hh:179
    +
    temporary_buffer(temporary_buffer &&x) noexcept
    Moves a temporary_buffer.
    Definition: temporary_buffer.hh:92
    +
    void trim(size_t pos) noexcept
    Definition: temporary_buffer.hh:194
    +
    deleter release() noexcept
    Definition: temporary_buffer.hh:203
    +
    const CharType * begin() const noexcept
    Gets a pointer to the beginning of the buffer.
    Definition: temporary_buffer.hh:132
    +
    bool empty() const noexcept
    Checks whether the buffer is empty.
    Definition: temporary_buffer.hh:152
    +
    const CharType * end() const noexcept
    Gets a pointer to the end of the buffer.
    Definition: temporary_buffer.hh:134
    +
    bool operator==(const temporary_buffer &o) const noexcept
    Definition: temporary_buffer.hh:236
    +
    temporary_buffer share(size_t pos, size_t len)
    Definition: temporary_buffer.hh:170
    +
    temporary_buffer & operator=(temporary_buffer &&x) noexcept
    Moves a temporary_buffer.
    Definition: temporary_buffer.hh:114
    +
    temporary_buffer share()
    Definition: temporary_buffer.hh:160
    +
    temporary_buffer() noexcept
    Creates an empty temporary_buffer that does not point at anything.
    Definition: temporary_buffer.hh:86
    +
    temporary_buffer(size_t size)
    Definition: temporary_buffer.hh:77
    +
    void trim_front(size_t pos) noexcept
    Definition: temporary_buffer.hh:186
    +
    size_t size() const noexcept
    Gets the buffer size.
    Definition: temporary_buffer.hh:130
    +
    const CharType * get() const noexcept
    Gets a pointer to the beginning of the buffer.
    Definition: temporary_buffer.hh:125
    +
    CharType * get_write() noexcept
    Definition: temporary_buffer.hh:128
    +
    CharType operator[](size_t pos) const noexcept
    Definition: temporary_buffer.hh:148
    +
    static temporary_buffer aligned(size_t alignment, size_t size)
    Definition: temporary_buffer.hh:212
    +
    temporary_buffer(const CharType *src, size_t size)
    Definition: temporary_buffer.hh:109
    +
    bool operator!=(const temporary_buffer &o) const noexcept
    Definition: temporary_buffer.hh:244
    +
    temporary_buffer prefix(size_t size) &&noexcept
    Definition: temporary_buffer.hh:140
    +
    deleter share()
    Definition: deleter.hh:205
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/test__case_8hh_source.html b/master/test__case_8hh_source.html new file mode 100644 index 000000000..87f05c3e0 --- /dev/null +++ b/master/test__case_8hh_source.html @@ -0,0 +1,135 @@ + + + + + + + +Seastar: seastar/testing/test_case.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    test_case.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright (C) 2018 ScyllaDB Ltd.
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#include <boost/preprocessor/control/iif.hpp>
    +
    26#include <boost/preprocessor/comparison/equal.hpp>
    +
    27#include <boost/preprocessor/variadic/size.hpp>
    +
    28
    +
    29#include <seastar/core/future.hh>
    +
    30
    +
    31#include <seastar/testing/seastar_test.hh>
    +
    32
    +
    33#define SEASTAR_TEST_CASE_WITH_DECO(name, decorators) \
    +
    34 struct name : public seastar::testing::seastar_test { \
    +
    35 using seastar::testing::seastar_test::seastar_test; \
    +
    36 seastar::future<> run_test_case() const override; \
    +
    37 }; \
    +
    38 static const name name ## _instance( \
    +
    39 #name, \
    +
    40 __FILE__, \
    +
    41 __LINE__, \
    +
    42 decorators); /* NOLINT(cert-err58-cpp) */ \
    +
    43 seastar::future<> name::run_test_case() const
    +
    44
    +
    45#define SEASTAR_TEST_CASE_WITHOUT_DECO(name) \
    +
    46 SEASTAR_TEST_CASE_WITH_DECO( \
    +
    47 name, \
    +
    48 boost::unit_test::decorator::collector_t::instance())
    +
    49
    +
    50#define SEASTAR_TEST_CASE(...) \
    +
    51 SEASTAR_TEST_INVOKE( \
    +
    52 BOOST_PP_IIF( \
    +
    53 BOOST_PP_EQUAL(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), 1), \
    +
    54 SEASTAR_TEST_CASE_WITHOUT_DECO, \
    +
    55 SEASTAR_TEST_CASE_WITH_DECO), \
    +
    56 __VA_ARGS__)
    +
    + + + + diff --git a/master/test__runner_8hh_source.html b/master/test__runner_8hh_source.html new file mode 100644 index 000000000..1d8d134bf --- /dev/null +++ b/master/test__runner_8hh_source.html @@ -0,0 +1,151 @@ + + + + + + + +Seastar: seastar/testing/test_runner.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    test_runner.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2015 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <memory>
    +
    25#include <functional>
    +
    26#include <atomic>
    +
    27#include <random>
    +
    28#include <seastar/core/future.hh>
    +
    29#include <seastar/core/posix.hh>
    +
    30#include <seastar/testing/exchanger.hh>
    +
    31#include <seastar/testing/random.hh>
    +
    32
    +
    33namespace seastar {
    +
    34
    +
    35namespace testing {
    +
    36
    + +
    38private:
    +
    39 std::unique_ptr<posix_thread> _thread;
    +
    40 std::atomic<bool> _started{false};
    + +
    42 bool _done = false;
    +
    43 int _exit_code{0};
    +
    44
    +
    45 struct start_thread_args {
    +
    46 int ac;
    +
    47 char** av;
    +
    48 start_thread_args(int ac_, char** av_) noexcept : ac(ac_), av(av_) {}
    +
    49 };
    +
    50 std::unique_ptr<start_thread_args> _st_args;
    +
    51 int start_thread(int ac, char** av);
    +
    52public:
    +
    53 // Returns whether initialization was successful.
    +
    54 // Will return as soon as the seastar::app was started.
    +
    55 bool start(int argc, char** argv);
    + +
    57 void run_sync(std::function<future<>()> task);
    +
    58 // Returns the return value of the underlying `seastar::app::run()`.
    +
    59 int finalize();
    +
    60};
    +
    61
    +
    62test_runner& global_test_runner();
    +
    63
    +
    64}
    +
    65
    +
    66}
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: task.hh:34
    +
    Definition: exchanger.hh:51
    +
    Definition: test_runner.hh:37
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    + +
    + + + + diff --git a/master/testing_2on__internal__error_8hh_source.html b/master/testing_2on__internal__error_8hh_source.html new file mode 100644 index 000000000..0731abee5 --- /dev/null +++ b/master/testing_2on__internal__error_8hh_source.html @@ -0,0 +1,122 @@ + + + + + + + +Seastar: seastar/testing/on_internal_error.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    on_internal_error.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2020 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24namespace seastar {
    +
    25namespace testing {
    +
    26
    +
    27// Disables aborting in on_internal_error() for a scope.
    +
    28//
    +
    29// Intended for tests, which want to test error paths that invoke
    +
    30// on_internal_error() without aborting, at the same time, having it enabled
    +
    31// for other, indirectly affected code paths, that are not a direct target of
    +
    32// the test.
    + +
    34 bool _prev;
    +
    35public:
    + + +
    38};
    +
    39
    +
    40}
    +
    41}
    +
    Definition: on_internal_error.hh:33
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/thread_8hh_source.html b/master/thread_8hh_source.html new file mode 100644 index 000000000..d5d96b080 --- /dev/null +++ b/master/thread_8hh_source.html @@ -0,0 +1,281 @@ + + + + + + + +Seastar: seastar/core/thread.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    thread.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright (C) 2015 Cloudius Systems, Ltd.
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#ifndef SEASTAR_MODULE
    +
    26#include <seastar/core/thread_impl.hh>
    +
    27#include <seastar/core/future.hh>
    +
    28#include <seastar/core/do_with.hh>
    +
    29#include <seastar/core/timer.hh>
    + +
    31#include <memory>
    +
    32#include <type_traits>
    +
    33#include <seastar/util/std-compat.hh>
    +
    34#include <seastar/util/modules.hh>
    +
    35#include <ucontext.h>
    +
    36#include <boost/intrusive/list.hpp>
    +
    37#endif
    +
    38
    +
    68
    +
    70namespace seastar {
    +
    71
    +
    74SEASTAR_MODULE_EXPORT_BEGIN
    +
    75class thread;
    +
    76class thread_attributes;
    +
    77
    + +
    80public:
    +
    81 std::optional<seastar::scheduling_group> sched_group;
    +
    82 // For stack_size 0, a default value will be used (128KiB when writing this comment)
    +
    83 size_t stack_size = 0;
    +
    84};
    +
    85SEASTAR_MODULE_EXPORT_END
    +
    86
    +
    88extern thread_local jmp_buf_link g_unthreaded_context;
    +
    89
    +
    90// Internal class holding thread state. We can't hold this in
    +
    91// \c thread itself because \c thread is movable, and we want pointers
    +
    92// to this state to be captured.
    +
    93class thread_context final : private task {
    +
    94 struct stack_deleter {
    +
    95 void operator()(char *ptr) const noexcept;
    +
    96 int valgrind_id;
    +
    97 stack_deleter(int valgrind_id);
    +
    98 };
    +
    99 using stack_holder = std::unique_ptr<char[], stack_deleter>;
    +
    100
    +
    101 stack_holder _stack;
    +
    102 noncopyable_function<void ()> _func;
    +
    103 jmp_buf_link _context;
    +
    104 promise<> _done;
    +
    105 bool _joined = false;
    +
    106
    +
    107 boost::intrusive::list_member_hook<> _all_link;
    +
    108 using all_thread_list = boost::intrusive::list<thread_context,
    +
    109 boost::intrusive::member_hook<thread_context, boost::intrusive::list_member_hook<>,
    +
    110 &thread_context::_all_link>,
    +
    111 boost::intrusive::constant_time_size<false>>;
    +
    112
    +
    113 static thread_local all_thread_list _all_threads;
    +
    114private:
    +
    115 static void s_main(int lo, int hi); // all parameters MUST be 'int' for makecontext
    +
    116 void setup(size_t stack_size);
    +
    117 void main();
    +
    118 stack_holder make_stack(size_t stack_size);
    +
    119 virtual void run_and_dispose() noexcept override; // from task class
    +
    120public:
    +
    121 thread_context(thread_attributes attr, noncopyable_function<void ()> func);
    +
    122 ~thread_context();
    +
    123 void switch_in();
    +
    124 void switch_out();
    +
    125 bool should_yield() const;
    +
    126 void reschedule();
    +
    127 void yield();
    +
    128 task* waiting_task() noexcept override { return _done.waiting_task(); }
    +
    129 friend class thread;
    +
    130 friend void thread_impl::switch_in(thread_context*);
    +
    131 friend void thread_impl::switch_out(thread_context*);
    +
    132 friend scheduling_group thread_impl::sched_group(const thread_context*);
    +
    133};
    +
    134
    +
    136
    +
    137SEASTAR_MODULE_EXPORT
    +
    144class thread {
    +
    145 std::unique_ptr<thread_context> _context;
    +
    146 static thread_local thread* _current;
    +
    147public:
    +
    150 thread() = default;
    +
    155 template <typename Func>
    +
    156 thread(Func func);
    +
    162 template <typename Func>
    +
    163 thread(thread_attributes attr, Func func);
    +
    165 thread(thread&& x) noexcept = default;
    +
    167 thread& operator=(thread&& x) noexcept = default;
    +
    171 ~thread() { assert(!_context || _context->_joined); }
    +
    176 future<> join();
    +
    181 static void yield();
    +
    186 static bool should_yield();
    +
    187
    +
    192 static void maybe_yield();
    +
    193
    +
    194 static bool running_in_thread() {
    +
    195 return thread_impl::get() != nullptr;
    +
    196 }
    +
    197};
    +
    198
    +
    199template <typename Func>
    +
    200inline
    + +
    202 : _context(std::make_unique<thread_context>(std::move(attr), std::move(func))) {
    +
    203}
    +
    204
    +
    205template <typename Func>
    +
    206inline
    + +
    208 : thread(thread_attributes(), std::move(func)) {
    +
    209}
    +
    210
    +
    211inline
    + + +
    214 _context->_joined = true;
    +
    215 return _context->_done.get_future();
    +
    216}
    +
    217
    +
    218SEASTAR_MODULE_EXPORT_BEGIN
    +
    242template <typename Func, typename... Args>
    +
    243inline
    +
    244futurize_t<std::invoke_result_t<Func, Args...>>
    +
    245async(thread_attributes attr, Func&& func, Args&&... args) noexcept {
    +
    246 using return_type = std::invoke_result_t<Func, Args...>;
    +
    247 struct work {
    + +
    249 Func func;
    +
    250 std::tuple<Args...> args;
    + +
    252 thread th{};
    +
    253 };
    +
    254
    +
    255 try {
    +
    256 auto wp = std::make_unique<work>(work{std::move(attr), std::forward<Func>(func), std::forward_as_tuple(std::forward<Args>(args)...)});
    +
    257 auto& w = *wp;
    +
    258 auto ret = w.pr.get_future();
    +
    259 w.th = thread(std::move(w.attr), [&w] {
    +
    260 futurize<return_type>::apply(std::move(w.func), std::move(w.args)).forward_to(std::move(w.pr));
    +
    261 });
    +
    262 return w.th.join().then([ret = std::move(ret)] () mutable {
    +
    263 return std::move(ret);
    +
    264 }).finally([wp = std::move(wp)] {});
    +
    265 } catch (...) {
    +
    266 return futurize<return_type>::make_exception_future(std::current_exception());
    +
    267 }
    +
    268}
    +
    269
    +
    279template <typename Func, typename... Args>
    +
    280inline
    +
    281futurize_t<std::invoke_result_t<Func, Args...>>
    +
    282async(Func&& func, Args&&... args) noexcept {
    +
    283 return async(thread_attributes{}, std::forward<Func>(func), std::forward<Args>(args)...);
    +
    284}
    +
    286
    +
    287SEASTAR_MODULE_EXPORT_END
    +
    288}
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    + +
    Definition: task.hh:34
    +
    thread - stateful thread of execution
    Definition: thread.hh:144
    +
    ~thread()
    Destroys a thread object.
    Definition: thread.hh:171
    +
    thread(thread &&x) noexcept=default
    Moves a thread object.
    +
    static void maybe_yield()
    Yield if this thread ought to call yield() now.
    +
    static void yield()
    Voluntarily defer execution of current thread.
    +
    thread()=default
    Constructs a thread object that does not represent a thread of execution.
    +
    static bool should_yield()
    Checks whether this thread ought to call yield() now.
    +
    thread & operator=(thread &&x) noexcept=default
    Move-assigns a thread object.
    +
    future yield() noexcept
    Returns a future which is not ready but is scheduled to resolve soon.
    +
    Class that holds attributes controling the behavior of a thread.
    Definition: thread.hh:79
    +
    futurize_t< std::invoke_result_t< Func, Args... > > async(thread_attributes attr, Func &&func, Args &&... args) noexcept
    Definition: thread.hh:245
    +
    future join()
    Waits for thread execution to terminate.
    Definition: thread.hh:213
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    STL namespace.
    + +
    Converts a type to a future type, if it isn't already.
    Definition: future.hh:1853
    + +
    + + + + diff --git a/master/thread__cputime__clock_8hh_source.html b/master/thread__cputime__clock_8hh_source.html new file mode 100644 index 000000000..b2073de0b --- /dev/null +++ b/master/thread__cputime__clock_8hh_source.html @@ -0,0 +1,131 @@ + + + + + + + +Seastar: seastar/core/thread_cputime_clock.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    thread_cputime_clock.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2018 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <chrono>
    +
    26#include <time.h>
    +
    27#include <cassert>
    +
    28#endif
    +
    29
    +
    30namespace seastar {
    +
    31
    + +
    33public:
    +
    34 using rep = int64_t;
    +
    35 using period = std::chrono::nanoseconds::period;
    +
    36 using duration = std::chrono::duration<rep, period>;
    +
    37 using time_point = std::chrono::time_point<thread_cputime_clock, duration>;
    +
    38public:
    +
    39 static time_point now() {
    +
    40 using namespace std::chrono_literals;
    +
    41
    +
    42 struct timespec tp;
    +
    43 [[gnu::unused]] auto ret = clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tp);
    +
    44 assert(ret == 0);
    +
    45 return time_point(tp.tv_nsec * 1ns + tp.tv_sec * 1s);
    +
    46 }
    +
    47};
    +
    48
    +
    49}
    +
    50
    +
    Definition: thread_cputime_clock.hh:32
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/thread__impl_8hh_source.html b/master/thread__impl_8hh_source.html new file mode 100644 index 000000000..079997c42 --- /dev/null +++ b/master/thread__impl_8hh_source.html @@ -0,0 +1,162 @@ + + + + + + + +Seastar: seastar/core/thread_impl.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    thread_impl.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright (C) 2016 ScyllaDB.
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24#include <seastar/core/preempt.hh>
    +
    25#include <seastar/util/std-compat.hh>
    +
    26#include <setjmp.h>
    +
    27#include <ucontext.h>
    +
    28#include <chrono>
    +
    29
    +
    30namespace seastar {
    +
    32using thread_clock = std::chrono::steady_clock;
    +
    33
    +
    35class thread_context;
    +
    36class scheduling_group;
    +
    37
    +
    38struct jmp_buf_link {
    +
    39#ifdef SEASTAR_ASAN_ENABLED
    +
    40 ucontext_t context;
    +
    41 void* fake_stack = nullptr;
    +
    42 const void* stack_bottom;
    +
    43 size_t stack_size;
    +
    44#else
    +
    45 jmp_buf jmpbuf;
    +
    46#endif
    +
    47 jmp_buf_link* link;
    +
    48 thread_context* thread;
    +
    49public:
    +
    50 void initial_switch_in(ucontext_t* initial_context, const void* stack_bottom, size_t stack_size);
    +
    51 void switch_in();
    +
    52 void switch_out();
    +
    53 void initial_switch_in_completed();
    +
    54 void final_switch_out();
    +
    55};
    +
    56
    +
    57extern thread_local jmp_buf_link* g_current_context;
    +
    58
    +
    59namespace thread_impl {
    +
    60
    +
    61inline thread_context* get() {
    +
    62 return g_current_context->thread;
    +
    63}
    +
    64
    +
    65inline bool should_yield() {
    +
    66 if (need_preempt()) {
    +
    67 return true;
    +
    68 } else {
    +
    69 return false;
    +
    70 }
    +
    71}
    +
    72
    +
    73scheduling_group sched_group(const thread_context*);
    +
    74
    +
    75void yield();
    +
    76void switch_in(thread_context* to);
    +
    77void switch_out(thread_context* from);
    +
    78void init();
    +
    79
    +
    80}
    +
    81}
    +
    83
    +
    84
    +
    future yield() noexcept
    Returns a future which is not ready but is scheduled to resolve soon.
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/thread__test__case_8hh_source.html b/master/thread__test__case_8hh_source.html new file mode 100644 index 000000000..1cfef29c4 --- /dev/null +++ b/master/thread__test__case_8hh_source.html @@ -0,0 +1,141 @@ + + + + + + + +Seastar: seastar/testing/thread_test_case.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    thread_test_case.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright (C) 2018 ScyllaDB Ltd.
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#include <seastar/core/future.hh>
    +
    26#include <seastar/core/thread.hh>
    +
    27
    +
    28#include <boost/preprocessor/control/iif.hpp>
    +
    29#include <boost/preprocessor/comparison/equal.hpp>
    +
    30#include <boost/preprocessor/variadic/size.hpp>
    +
    31
    +
    32#include <seastar/testing/seastar_test.hh>
    +
    33
    +
    34#define SEASTAR_THREAD_TEST_CASE_WITH_DECO(name, decorators) \
    +
    35 struct name : public seastar::testing::seastar_test { \
    +
    36 using seastar::testing::seastar_test::seastar_test; \
    +
    37 seastar::future<> run_test_case() const override { \
    +
    38 return seastar::async([this] { \
    +
    39 do_run_test_case(); \
    +
    40 }); \
    +
    41 } \
    +
    42 void do_run_test_case() const; \
    +
    43 }; \
    +
    44 static const name name ## _instance( \
    +
    45 #name, \
    +
    46 __FILE__, \
    +
    47 __LINE__, \
    +
    48 decorators); /* NOLINT(cert-err58-cpp) */ \
    +
    49 void name::do_run_test_case() const
    +
    50
    +
    51#define SEASTAR_THREAD_TEST_CASE_WITHOUT_DECO(name) \
    +
    52 SEASTAR_THREAD_TEST_CASE_WITH_DECO( \
    +
    53 name, \
    +
    54 boost::unit_test::decorator::collector_t::instance())
    +
    55
    +
    56#define SEASTAR_THREAD_TEST_CASE(...) \
    +
    57 SEASTAR_TEST_INVOKE( \
    +
    58 BOOST_PP_IIF( \
    +
    59 BOOST_PP_EQUAL(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), 1), \
    +
    60 SEASTAR_THREAD_TEST_CASE_WITHOUT_DECO, \
    +
    61 SEASTAR_THREAD_TEST_CASE_WITH_DECO), \
    +
    62 __VA_ARGS__)
    +
    + + + + diff --git a/master/timed__out__error_8hh_source.html b/master/timed__out__error_8hh_source.html new file mode 100644 index 000000000..69df7f32e --- /dev/null +++ b/master/timed__out__error_8hh_source.html @@ -0,0 +1,140 @@ + + + + + + + +Seastar: seastar/core/timed_out_error.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    timed_out_error.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright 2020 ScyllaDB
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#ifndef SEASTAR_MODULE
    +
    26#include <fmt/core.h>
    +
    27#include <exception>
    +
    28#include <seastar/util/modules.hh>
    +
    29#endif
    +
    30
    +
    31namespace seastar {
    +
    32
    +
    33SEASTAR_MODULE_EXPORT
    +
    34class timed_out_error : public std::exception {
    +
    35public:
    +
    36 virtual const char* what() const noexcept {
    +
    37 return "timedout";
    +
    38 }
    +
    39};
    +
    40
    +
    41SEASTAR_MODULE_EXPORT
    + +
    43 static auto timeout() {
    +
    44 return timed_out_error();
    +
    45 }
    +
    46};
    +
    47
    +
    48} // namespace seastar
    +
    49
    +
    50#if FMT_VERSION < 100000
    +
    51// fmt v10 introduced formatter for std::exception
    +
    52template <>
    +
    53struct fmt::formatter<seastar::timed_out_error> : fmt::formatter<string_view> {
    +
    54 auto format(const seastar::timed_out_error& e, fmt::format_context& ctx) const {
    +
    55 return fmt::format_to(ctx.out(), "{}", e.what());
    +
    56 }
    +
    57};
    +
    58#endif
    +
    Definition: timed_out_error.hh:34
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: timed_out_error.hh:42
    +
    + + + + diff --git a/master/timer-set_8hh_source.html b/master/timer-set_8hh_source.html new file mode 100644 index 000000000..ee1750cda --- /dev/null +++ b/master/timer-set_8hh_source.html @@ -0,0 +1,330 @@ + + + + + + + +Seastar: seastar/core/timer-set.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    timer-set.hh
    +
    +
    +
    1/*
    +
    2 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    3 */
    +
    4
    +
    5/*
    +
    6 * Imported from OSv:
    +
    7 *
    +
    8 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    9 *
    +
    10 * This work is open source software, licensed under the terms of the
    +
    11 * BSD license as described in the LICENSE file in the top-level directory.
    +
    12 */
    +
    13
    +
    14#pragma once
    +
    15
    +
    16#include <seastar/core/bitset-iter.hh>
    + +
    18#ifndef SEASTAR_MODULE
    +
    19#include <boost/intrusive/list.hpp>
    +
    20#include <exception>
    +
    21#include <array>
    +
    22#include <bitset>
    +
    23#include <limits>
    +
    24#endif
    +
    25
    +
    26namespace seastar {
    +
    27
    +
    28namespace internal {
    +
    29void log_timer_callback_exception(std::exception_ptr) noexcept;
    +
    30}
    +
    31
    +
    43template<typename Timer, boost::intrusive::list_member_hook<> Timer::*link>
    +
    44class timer_set {
    +
    45public:
    +
    46 using time_point = typename Timer::time_point;
    +
    47 using timer_list_t = boost::intrusive::list<Timer, boost::intrusive::member_hook<Timer, boost::intrusive::list_member_hook<>, link>>;
    +
    48private:
    +
    49 using duration = typename Timer::duration;
    +
    50 using timestamp_t = typename Timer::duration::rep;
    +
    51
    +
    52 static constexpr timestamp_t max_timestamp = std::numeric_limits<timestamp_t>::max();
    +
    53 static constexpr int timestamp_bits = std::numeric_limits<timestamp_t>::digits;
    +
    54
    +
    55 // The last bucket is reserved for active timers with timeout <= _last.
    +
    56 static constexpr int n_buckets = timestamp_bits + 1;
    +
    57
    +
    58 std::array<timer_list_t, n_buckets> _buckets;
    +
    59 timestamp_t _last;
    +
    60 timestamp_t _next;
    +
    61
    +
    62 std::bitset<n_buckets> _non_empty_buckets;
    +
    63private:
    +
    64 static timestamp_t get_timestamp(time_point _time_point) noexcept
    +
    65 {
    +
    66 return _time_point.time_since_epoch().count();
    +
    67 }
    +
    68
    +
    69 static timestamp_t get_timestamp(Timer& timer) noexcept
    +
    70 {
    +
    71 return get_timestamp(timer.get_timeout());
    +
    72 }
    +
    73
    +
    74 int get_index(timestamp_t timestamp) const noexcept
    +
    75 {
    +
    76 if (timestamp <= _last) {
    +
    77 return n_buckets - 1;
    +
    78 }
    +
    79
    +
    80 auto index = bitsets::count_leading_zeros(timestamp ^ _last);
    +
    81 assert(index < n_buckets - 1);
    +
    82 return index;
    +
    83 }
    +
    84
    +
    85 int get_index(Timer& timer) const noexcept
    +
    86 {
    +
    87 return get_index(get_timestamp(timer));
    +
    88 }
    +
    89
    +
    90 int get_last_non_empty_bucket() const noexcept
    +
    91 {
    +
    92 return bitsets::get_last_set(_non_empty_buckets);
    +
    93 }
    +
    94
    +
    95public:
    +
    96 timer_set() noexcept
    +
    97 : _last(0)
    +
    98 , _next(max_timestamp)
    +
    99 , _non_empty_buckets(0)
    +
    100 {
    +
    101 }
    +
    102
    +
    103 ~timer_set() {
    +
    104 for (auto&& list : _buckets) {
    +
    105 while (!list.empty()) {
    +
    106 auto& timer = *list.begin();
    +
    107 timer.cancel();
    +
    108 }
    +
    109 }
    +
    110 }
    +
    111
    +
    129 bool insert(Timer& timer) noexcept
    +
    130 {
    +
    131 auto timestamp = get_timestamp(timer);
    +
    132 auto index = get_index(timestamp);
    +
    133
    +
    134 _buckets[index].push_back(timer);
    +
    135 _non_empty_buckets[index] = true;
    +
    136
    +
    137 if (timestamp < _next) {
    +
    138 _next = timestamp;
    +
    139 return true;
    +
    140 }
    +
    141 return false;
    +
    142 }
    +
    143
    +
    155 void remove(Timer& timer) noexcept
    +
    156 {
    +
    157 auto index = get_index(timer);
    +
    158 auto& list = _buckets[index];
    +
    159 list.erase(list.iterator_to(timer));
    +
    160 if (list.empty()) {
    +
    161 _non_empty_buckets[index] = false;
    +
    162 }
    +
    163 }
    +
    164
    +
    168 void remove(Timer& timer, timer_list_t& expired) noexcept
    +
    169 {
    +
    170 if (timer._expired) {
    +
    171 expired.erase(expired.iterator_to(timer));
    +
    172 timer._expired = false;
    +
    173 } else {
    +
    174 remove(timer);
    +
    175 }
    +
    176 }
    +
    177
    +
    192 timer_list_t expire(time_point now) noexcept
    +
    193 {
    +
    194 timer_list_t exp;
    +
    195 auto timestamp = get_timestamp(now);
    +
    196
    +
    197 if (timestamp < _last) {
    +
    198 abort();
    +
    199 }
    +
    200
    +
    201 auto index = get_index(timestamp);
    +
    202
    +
    203 for (int i : bitsets::for_each_set(_non_empty_buckets, index + 1)) {
    +
    204 exp.splice(exp.end(), _buckets[i]);
    +
    205 _non_empty_buckets[i] = false;
    +
    206 }
    +
    207
    +
    208 _last = timestamp;
    +
    209 _next = max_timestamp;
    +
    210
    +
    211 auto& list = _buckets[index];
    +
    212 while (!list.empty()) {
    +
    213 auto& timer = *list.begin();
    +
    214 list.pop_front();
    +
    215 if (timer.get_timeout() <= now) {
    +
    216 exp.push_back(timer);
    +
    217 } else {
    +
    218 insert(timer);
    +
    219 }
    +
    220 }
    +
    221
    +
    222 _non_empty_buckets[index] = !list.empty();
    +
    223
    +
    224 if (_next == max_timestamp && _non_empty_buckets.any()) {
    +
    225 for (auto& timer : _buckets[get_last_non_empty_bucket()]) {
    +
    226 _next = std::min(_next, get_timestamp(timer));
    +
    227 }
    +
    228 }
    +
    229 return exp;
    +
    230 }
    +
    231
    +
    232 template <typename EnableFunc>
    +
    233 void complete(timer_list_t& expired_timers, EnableFunc&& enable_fn) noexcept(noexcept(enable_fn())) {
    +
    234 expired_timers = expire(this->now());
    +
    235 for (auto& t : expired_timers) {
    +
    236 t._expired = true;
    +
    237 }
    +
    238 const auto prev_sg = current_scheduling_group();
    +
    239 while (!expired_timers.empty()) {
    +
    240 auto t = &*expired_timers.begin();
    +
    241 expired_timers.pop_front();
    +
    242 t->_queued = false;
    +
    243 if (t->_armed) {
    +
    244 t->_armed = false;
    +
    245 if (t->_period) {
    +
    246 t->readd_periodic();
    +
    247 }
    +
    248 try {
    +
    249 *internal::current_scheduling_group_ptr() = t->_sg;
    +
    250 t->_callback();
    +
    251 } catch (...) {
    +
    252 internal::log_timer_callback_exception(std::current_exception());
    +
    253 }
    +
    254 }
    +
    255 }
    +
    256 // complete_timers() can be called from the context of run_tasks()
    +
    257 // as well so we need to restore the previous scheduling group (set by run_tasks()).
    +
    258 *internal::current_scheduling_group_ptr() = prev_sg;
    +
    259 enable_fn();
    +
    260 }
    +
    261
    +
    268 time_point get_next_timeout() const noexcept
    +
    269 {
    +
    270 return time_point(duration(std::max(_last, _next)));
    +
    271 }
    +
    272
    +
    276 void clear() noexcept
    +
    277 {
    +
    278 for (int i : bitsets::for_each_set(_non_empty_buckets)) {
    +
    279 _buckets[i].clear();
    +
    280 }
    +
    281 }
    +
    282
    +
    283 size_t size() const noexcept
    +
    284 {
    +
    285 size_t res = 0;
    +
    286 for (int i : bitsets::for_each_set(_non_empty_buckets)) {
    +
    287 res += _buckets[i].size();
    +
    288 }
    +
    289 return res;
    +
    290 }
    +
    291
    +
    295 bool empty() const noexcept
    +
    296 {
    +
    297 return _non_empty_buckets.none();
    +
    298 }
    +
    299
    +
    300 time_point now() noexcept {
    +
    301 return Timer::clock::now();
    +
    302 }
    +
    303};
    +
    304}
    +
    Definition: timer-set.hh:44
    +
    bool insert(Timer &timer) noexcept
    Definition: timer-set.hh:129
    +
    void clear() noexcept
    Definition: timer-set.hh:276
    +
    time_point get_next_timeout() const noexcept
    Definition: timer-set.hh:268
    +
    void remove(Timer &timer, timer_list_t &expired) noexcept
    Definition: timer-set.hh:168
    +
    timer_list_t expire(time_point now) noexcept
    Definition: timer-set.hh:192
    +
    void remove(Timer &timer) noexcept
    Definition: timer-set.hh:155
    +
    bool empty() const noexcept
    Definition: timer-set.hh:295
    +
    Definition: timer.hh:83
    +
    time_point get_timeout() const noexcept
    Definition: timer.hh:217
    +
    bool cancel() noexcept
    +
    future now()
    Returns a ready future.
    Definition: later.hh:35
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    scheduling_group current_scheduling_group() noexcept
    Returns the current scheduling group.
    Definition: scheduling.hh:399
    + +
    + + + + diff --git a/master/timer_8hh.html b/master/timer_8hh.html new file mode 100644 index 000000000..e03f68f1f --- /dev/null +++ b/master/timer_8hh.html @@ -0,0 +1,111 @@ + + + + + + + +Seastar: seastar/core/timer.hh File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    timer.hh File Reference
    +
    +
    +
    #include <seastar/core/future.hh>
    +#include <seastar/core/scheduling.hh>
    +#include <seastar/core/timer-set.hh>
    +#include <seastar/util/std-compat.hh>
    +#include <seastar/util/modules.hh>
    +#include <boost/intrusive/list.hpp>
    +#include <chrono>
    +#include <optional>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Classes

    class  seastar::timer< Clock >
     
    + + + + +

    +Namespaces

    namespace  seastar
     Seastar API namespace.
     
    + + + +

    +Typedefs

    +using seastar::steady_clock_type = std::chrono::steady_clock
     
    +
    + + + + diff --git a/master/timer_8hh_source.html b/master/timer_8hh_source.html new file mode 100644 index 000000000..b567b6b9a --- /dev/null +++ b/master/timer_8hh_source.html @@ -0,0 +1,228 @@ + + + + + + + +Seastar: seastar/core/timer.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    timer.hh
    +
    +
    +Go to the documentation of this file.
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2015 Cloudius Systems
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/future.hh>
    + +
    26#include <seastar/core/timer-set.hh>
    +
    27#include <seastar/util/std-compat.hh>
    +
    28#include <seastar/util/modules.hh>
    +
    29#ifndef SEASTAR_MODULE
    +
    30#include <boost/intrusive/list.hpp>
    +
    31#include <chrono>
    +
    32#include <optional>
    +
    33#endif
    +
    34
    +
    36
    +
    51
    +
    52namespace seastar {
    +
    53
    +
    54SEASTAR_MODULE_EXPORT_BEGIN
    +
    55
    +
    56using steady_clock_type = std::chrono::steady_clock;
    +
    57
    +
    58
    +
    61
    +
    82template <typename Clock = steady_clock_type>
    +
    83class timer {
    +
    84public:
    +
    85 typedef typename Clock::time_point time_point;
    +
    86 typedef typename Clock::duration duration;
    +
    87 typedef Clock clock;
    +
    88private:
    +
    89 using callback_t = noncopyable_function<void()>;
    +
    90 boost::intrusive::list_member_hook<> _link;
    + +
    92 callback_t _callback;
    +
    93 time_point _expiry;
    +
    94 std::optional<duration> _period;
    +
    95 bool _armed = false;
    +
    96 bool _queued = false;
    +
    97 bool _expired = false;
    +
    98 void readd_periodic() noexcept;
    +
    99 void arm_state(time_point until, std::optional<duration> period) noexcept {
    +
    100 assert(!_armed);
    +
    101 _period = period;
    +
    102 _armed = true;
    +
    103 _expired = false;
    +
    104 _expiry = until;
    +
    105 _queued = true;
    +
    106 }
    +
    107public:
    +
    109 timer() noexcept {}; // implementation is required (instead of = default) for noexcept due to a bug in gcc 9.3.1,
    +
    110 // since boost::intrusive::list_member_hook default constructor is not specified as noexcept.
    +
    115 timer(timer&& t) noexcept : _sg(t._sg), _callback(std::move(t._callback)), _expiry(std::move(t._expiry)), _period(std::move(t._period)),
    +
    116 _armed(t._armed), _queued(t._queued), _expired(t._expired) {
    +
    117 _link.swap_nodes(t._link);
    +
    118 t._queued = false;
    +
    119 t._armed = false;
    +
    120 }
    +
    125 timer(scheduling_group sg, noncopyable_function<void ()>&& callback) noexcept : _sg(sg), _callback{std::move(callback)} {
    +
    126 }
    +
    130 explicit timer(noncopyable_function<void ()>&& callback) noexcept : timer(current_scheduling_group(), std::move(callback)) {
    +
    131 }
    + +
    138 void set_callback(scheduling_group sg, noncopyable_function<void ()>&& callback) noexcept {
    +
    139 _sg = sg;
    +
    140 _callback = std::move(callback);
    +
    141 }
    +
    145 void set_callback(noncopyable_function<void ()>&& callback) noexcept {
    +
    146 set_callback(current_scheduling_group(), std::move(callback));
    +
    147 }
    +
    159 void arm(time_point until, std::optional<duration> period = {}) noexcept;
    +
    167 void rearm(time_point until, std::optional<duration> period = {}) noexcept {
    +
    168 if (_armed) {
    +
    169 cancel();
    +
    170 }
    +
    171 arm(until, period);
    +
    172 }
    +
    181 void arm(duration delta) noexcept {
    +
    182 return arm(Clock::now() + delta);
    +
    183 }
    +
    188 void arm_periodic(duration delta) noexcept {
    +
    189 arm(Clock::now() + delta, {delta});
    +
    190 }
    +
    196 void rearm_periodic(duration delta) noexcept {
    +
    197 if (_armed) {
    +
    198 cancel();
    +
    199 }
    +
    200 arm_periodic(delta);
    +
    201 }
    +
    205 bool armed() const noexcept { return _armed; }
    +
    212 bool cancel() noexcept;
    +
    217 time_point get_timeout() const noexcept {
    +
    218 return _expiry;
    +
    219 }
    +
    220
    +
    221 friend class timer_set<timer, &timer::_link>;
    + +
    223};
    +
    224
    +
    225extern template class timer<steady_clock_type>;
    +
    226
    +
    227
    +
    229SEASTAR_MODULE_EXPORT_END
    +
    230}
    +
    231
    +
    Identifies function calls that are accounted as a group.
    Definition: scheduling.hh:285
    +
    Definition: timer-set.hh:44
    +
    Definition: timer.hh:83
    +
    time_point get_timeout() const noexcept
    Definition: timer.hh:217
    +
    void arm(time_point until, std::optional< duration > period={}) noexcept
    +
    bool armed() const noexcept
    Definition: timer.hh:205
    +
    ~timer()
    Destroys the timer. The timer is cancelled if armed.
    +
    void arm(duration delta) noexcept
    Definition: timer.hh:181
    +
    bool cancel() noexcept
    +
    timer(scheduling_group sg, noncopyable_function< void()> &&callback) noexcept
    Definition: timer.hh:125
    +
    void rearm(time_point until, std::optional< duration > period={}) noexcept
    Definition: timer.hh:167
    +
    timer(noncopyable_function< void()> &&callback) noexcept
    Definition: timer.hh:130
    +
    void rearm_periodic(duration delta) noexcept
    Definition: timer.hh:196
    +
    void arm_periodic(duration delta) noexcept
    Definition: timer.hh:188
    +
    timer() noexcept
    Constructs a timer with no callback set and no expiration time.
    Definition: timer.hh:109
    +
    void set_callback(noncopyable_function< void()> &&callback) noexcept
    Definition: timer.hh:145
    +
    timer(timer &&t) noexcept
    Definition: timer.hh:115
    +
    void set_callback(scheduling_group sg, noncopyable_function< void()> &&callback) noexcept
    Definition: timer.hh:138
    +
    future now()
    Returns a ready future.
    Definition: later.hh:35
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    scheduling_group current_scheduling_group() noexcept
    Returns the current scheduling group.
    Definition: scheduling.hh:399
    +
    Definition: noncopyable_function.hh:37
    + + +
    + + + + diff --git a/master/tls_8hh_source.html b/master/tls_8hh_source.html new file mode 100644 index 000000000..2189a0d32 --- /dev/null +++ b/master/tls_8hh_source.html @@ -0,0 +1,471 @@ + + + + + + + +Seastar: seastar/net/tls.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    tls.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2015 Cloudius Systems
    +
    20 */
    +
    21#pragma once
    +
    22
    +
    23#ifndef SEASTAR_MODULE
    +
    24#include <functional>
    +
    25#include <unordered_set>
    +
    26#include <map>
    +
    27#include <boost/any.hpp>
    +
    28#include <fmt/format.h>
    +
    29#endif
    +
    30
    +
    31#include <seastar/core/future.hh>
    +
    32#include <seastar/core/internal/api-level.hh>
    +
    33#include <seastar/core/sstring.hh>
    +
    34#include <seastar/core/shared_ptr.hh>
    +
    35#include <seastar/net/socket_defs.hh>
    +
    36#include <seastar/net/inet_address.hh>
    +
    37#include <seastar/util/std-compat.hh>
    +
    38#include <seastar/util/modules.hh>
    +
    39#include <seastar/net/api.hh>
    +
    40
    +
    41namespace seastar {
    +
    42
    +
    43class socket;
    +
    44
    +
    45class server_socket;
    +
    46class connected_socket;
    +
    47class socket_address;
    +
    48
    +
    59SEASTAR_MODULE_EXPORT
    +
    60namespace tls {
    +
    61
    +
    62 enum class x509_crt_format {
    +
    63 DER,
    +
    64 PEM,
    +
    65 };
    +
    66
    +
    67 typedef std::basic_string_view<char> blob;
    +
    68
    +
    69 class session;
    +
    70 class server_session;
    +
    71 class server_credentials;
    +
    72 class certificate_credentials;
    +
    73 class credentials_builder;
    +
    74
    +
    79 class dh_params {
    +
    80 public:
    +
    81 // Key strength
    +
    82 enum class level {
    +
    83 LEGACY = 2,
    +
    84 MEDIUM = 3,
    +
    85 HIGH = 4,
    +
    86 ULTRA = 5
    +
    87 };
    +
    88 dh_params(level = level::LEGACY);
    +
    89 // loads a key from data
    +
    90 dh_params(const blob&, x509_crt_format);
    +
    91 ~dh_params();
    +
    92
    +
    93 dh_params(dh_params&&) noexcept;
    +
    94 dh_params& operator=(dh_params&&) noexcept;
    +
    95
    +
    96 dh_params(const dh_params&) = delete;
    +
    97 dh_params& operator=(const dh_params&) = delete;
    +
    98
    +
    100 static future<dh_params> from_file(const sstring&, x509_crt_format);
    +
    101 private:
    +
    102 class impl;
    +
    103 friend class server_credentials;
    +
    104 friend class certificate_credentials;
    +
    105 std::unique_ptr<impl> _impl;
    +
    106 };
    +
    107
    +
    108 class x509_cert {
    +
    109 x509_cert(const blob&, x509_crt_format);
    +
    110
    +
    111 static future<x509_cert> from_file(const sstring&, x509_crt_format);
    +
    112 private:
    +
    113 class impl;
    + +
    115 shared_ptr<impl> _impl;
    +
    116 };
    +
    117
    + +
    119 protected:
    +
    120 abstract_credentials() = default;
    + +
    122 abstract_credentials& operator=(abstract_credentials&) = default;
    +
    123 abstract_credentials& operator=(abstract_credentials&&) = default;
    +
    124 virtual ~abstract_credentials() {};
    +
    125 public:
    +
    126 virtual void set_x509_trust(const blob&, x509_crt_format) = 0;
    +
    127 virtual void set_x509_crl(const blob&, x509_crt_format) = 0;
    +
    128 virtual void set_x509_key(const blob& cert, const blob& key, x509_crt_format) = 0;
    +
    129
    +
    130 virtual void set_simple_pkcs12(const blob&, x509_crt_format, const sstring& password) = 0;
    +
    131
    +
    132 virtual future<> set_x509_trust_file(const sstring& cafile, x509_crt_format);
    +
    133 virtual future<> set_x509_crl_file(const sstring& crlfile, x509_crt_format);
    +
    134 virtual future<> set_x509_key_file(const sstring& cf, const sstring& kf, x509_crt_format);
    +
    135
    +
    136 virtual future<> set_simple_pkcs12_file(const sstring& pkcs12file, x509_crt_format, const sstring& password);
    +
    137 };
    +
    138
    +
    139 template<typename Base>
    + +
    141
    +
    147 enum class session_type {
    +
    148 CLIENT, SERVER,
    +
    149 };
    +
    150
    +
    158 using dn_callback = noncopyable_function<void(session_type type, sstring subject, sstring issuer)>;
    +
    159
    + +
    170 public:
    + + +
    173
    + + +
    176
    + +
    178 certificate_credentials& operator=(const certificate_credentials&) = delete;
    +
    179
    +
    180 void set_x509_trust(const blob&, x509_crt_format) override;
    +
    181 void set_x509_crl(const blob&, x509_crt_format) override;
    +
    182 void set_x509_key(const blob& cert, const blob& key, x509_crt_format) override;
    +
    183 void set_simple_pkcs12(const blob&, x509_crt_format, const sstring& password) override;
    +
    184
    + +
    190
    +
    191 // TODO add methods for certificate verification
    +
    192
    +
    199 void set_priority_string(const sstring&);
    +
    200
    + +
    223
    +
    224 private:
    +
    225 class impl;
    +
    226 friend class session;
    +
    227 friend class server_session;
    +
    228 friend class server_credentials;
    +
    229 friend class credentials_builder;
    +
    230 template<typename Base>
    +
    231 friend class reloadable_credentials;
    +
    232 shared_ptr<impl> _impl;
    +
    233 };
    +
    234
    +
    236 class verification_error : public std::runtime_error {
    +
    237 public:
    +
    238 using runtime_error::runtime_error;
    +
    239 };
    +
    240
    +
    241 enum class client_auth {
    +
    242 NONE, REQUEST, REQUIRE
    +
    243 };
    +
    244
    + +
    250 NONE, TLS13_SESSION_TICKET
    +
    251 };
    +
    252
    + +
    258 public:
    + + + +
    262
    + +
    264 server_credentials& operator=(server_credentials&&) noexcept;
    +
    265
    +
    266 server_credentials(const server_credentials&) = delete;
    +
    267 server_credentials& operator=(const server_credentials&) = delete;
    +
    268
    +
    269 void set_client_auth(client_auth);
    +
    270
    + +
    278 };
    +
    279
    +
    280 class reloadable_credentials_base;
    +
    281
    +
    282 using reload_callback = std::function<void(const std::unordered_set<sstring>&, std::exception_ptr)>;
    +
    283
    + +
    295 public:
    +
    296 void set_dh_level(dh_params::level = dh_params::level::LEGACY);
    +
    297
    +
    298 void set_x509_trust(const blob&, x509_crt_format) override ;
    +
    299 void set_x509_crl(const blob&, x509_crt_format) override;
    +
    300 void set_x509_key(const blob& cert, const blob& key, x509_crt_format) override;
    +
    301 void set_simple_pkcs12(const blob&, x509_crt_format, const sstring& password) override;
    +
    302
    +
    303 future<> set_x509_trust_file(const sstring& cafile, x509_crt_format) override;
    +
    304 future<> set_x509_crl_file(const sstring& crlfile, x509_crt_format) override;
    +
    305 future<> set_x509_key_file(const sstring& cf, const sstring& kf, x509_crt_format) override;
    +
    306 future<> set_simple_pkcs12_file(const sstring& pkcs12file, x509_crt_format, const sstring& password) override;
    +
    307
    +
    308 future<> set_system_trust();
    +
    309 void set_client_auth(client_auth);
    +
    310 void set_priority_string(const sstring&);
    +
    311 void set_session_resume_mode(session_resume_mode);
    +
    312
    +
    313 void apply_to(certificate_credentials&) const;
    +
    314
    +
    315 shared_ptr<certificate_credentials> build_certificate_credentials() const;
    +
    316 shared_ptr<server_credentials> build_server_credentials() const;
    +
    317
    +
    318 // same as above, but any files used for certs/keys etc will be watched
    +
    319 // for modification and reloaded if changed
    +
    320 future<shared_ptr<certificate_credentials>> build_reloadable_certificate_credentials(reload_callback = {}, std::optional<std::chrono::milliseconds> tolerance = {}) const;
    +
    321 future<shared_ptr<server_credentials>> build_reloadable_server_credentials(reload_callback = {}, std::optional<std::chrono::milliseconds> tolerance = {}) const;
    +
    322 private:
    +
    323 friend class reloadable_credentials_base;
    +
    324
    +
    325 std::multimap<sstring, boost::any> _blobs;
    +
    326 client_auth _client_auth = client_auth::NONE;
    +
    327 session_resume_mode _session_resume_mode = session_resume_mode::NONE;
    +
    328 sstring _priority;
    +
    329 };
    +
    330
    +
    331 using session_data = std::vector<uint8_t>;
    +
    332
    +
    334 struct tls_options {
    + +
    338 sstring server_name = {};
    +
    339
    + +
    343 };
    +
    344
    +
    356 [[deprecated("Use overload with tls_options parameter")]]
    + +
    358 [[deprecated("Use overload with tls_options parameter")]]
    + +
    361
    + + +
    374
    +
    386 [[deprecated("Use overload with tls_options parameter")]]
    + +
    389
    + +
    401
    +
    410 [[deprecated("Use overload with tls_options parameter")]]
    + + +
    414
    + +
    423
    + +
    432 // Wraps an existing server socket in SSL
    + +
    435
    + +
    447
    + +
    452 dnsname = 1, // string value representing a 'DNS' entry
    +
    453 rfc822name, // string value representing an 'email' entry
    +
    454 uri, // string value representing an 'uri' entry
    +
    455 ipaddress, // inet_address value representing an 'IP' entry
    +
    456 othername, // string value
    +
    457 dn, // string value
    +
    458 };
    +
    459
    +
    460 // Subject alt name entry
    + +
    462 using value_type = std::variant<
    +
    463 sstring,
    + +
    465 >;
    + +
    467 value_type value;
    +
    468 };
    +
    469
    +
    478 future<std::vector<subject_alt_name>> get_alt_name_information(connected_socket& socket, std::unordered_set<subject_alt_name_type> types = {});
    +
    479
    + +
    488
    + +
    501
    +
    502 std::ostream& operator<<(std::ostream&, const subject_alt_name::value_type&);
    +
    503 std::ostream& operator<<(std::ostream&, const subject_alt_name&);
    +
    504
    + +
    520 std::ostream& operator<<(std::ostream&, subject_alt_name_type);
    +
    521
    +
    527 const std::error_category& error_category();
    +
    528
    + +
    534 extern const int ERROR_UNKNOWN_CIPHER_TYPE;
    +
    535 extern const int ERROR_INVALID_SESSION;
    +
    536 extern const int ERROR_UNEXPECTED_HANDSHAKE_PACKET;
    +
    537 extern const int ERROR_UNKNOWN_CIPHER_SUITE;
    +
    538 extern const int ERROR_UNKNOWN_ALGORITHM;
    +
    539 extern const int ERROR_UNSUPPORTED_SIGNATURE_ALGORITHM;
    +
    540 extern const int ERROR_SAFE_RENEGOTIATION_FAILED;
    +
    541 extern const int ERROR_UNSAFE_RENEGOTIATION_DENIED;
    +
    542 extern const int ERROR_UNKNOWN_SRP_USERNAME;
    +
    543 extern const int ERROR_PREMATURE_TERMINATION;
    +
    544 extern const int ERROR_PUSH;
    +
    545 extern const int ERROR_PULL;
    +
    546 extern const int ERROR_UNEXPECTED_PACKET;
    +
    547 extern const int ERROR_UNSUPPORTED_VERSION;
    +
    548 extern const int ERROR_NO_CIPHER_SUITES;
    +
    549 extern const int ERROR_DECRYPTION_FAILED;
    +
    550 extern const int ERROR_MAC_VERIFY_FAILED;
    +
    551}
    +
    552}
    +
    553
    +
    554template <> struct fmt::formatter<seastar::tls::subject_alt_name_type> : fmt::formatter<string_view> {
    +
    555 template <typename FormatContext>
    +
    556 auto format(seastar::tls::subject_alt_name_type type, FormatContext& ctx) const {
    +
    557 return formatter<string_view>::format(format_as(type), ctx);
    +
    558 }
    +
    559};
    +
    560
    +
    561template <> struct fmt::formatter<seastar::tls::subject_alt_name::value_type> : fmt::formatter<string_view> {
    +
    562 template <typename FormatContext>
    +
    563 auto format(const seastar::tls::subject_alt_name::value_type& value, FormatContext& ctx) const {
    +
    564 return std::visit([&](const auto& v) {
    +
    565 return fmt::format_to(ctx.out(), "{}", v);
    +
    566 }, value);
    +
    567 }
    +
    568};
    +
    569
    +
    570template <> struct fmt::formatter<seastar::tls::subject_alt_name> : fmt::formatter<string_view> {
    +
    571 template <typename FormatContext>
    +
    572 auto format(const seastar::tls::subject_alt_name& name, FormatContext& ctx) const {
    +
    573 return fmt::format_to(ctx.out(), "{}={}", name.type, name.value);
    +
    574 }
    +
    575};
    +
    Definition: api.hh:183
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: inet_address.hh:50
    +
    A listening socket, waiting to accept incoming network connections.
    Definition: api.hh:326
    + +
    Definition: socket_defs.hh:47
    +
    Definition: api.hh:283
    + + +
    void set_priority_string(const sstring &)
    + +
    void set_dn_verification_callback(dn_callback)
    +
    Definition: tls.hh:294
    +
    Definition: tls.hh:79
    +
    static future< dh_params > from_file(const sstring &, x509_crt_format)
    +
    Definition: tls.hh:257
    +
    void set_session_resume_mode(session_resume_mode)
    +
    Definition: tls.hh:236
    +
    Definition: tls.hh:108
    +
    auto visit(Variant &&variant, Args &&... args)
    Definition: variant_utils.hh:68
    +
    holds the implementation parts of the metrics layer, do not use directly.
    +
    sstring server_name
    server name to be used for the SNI TLS extension
    Definition: tls.hh:338
    +
    future< connected_socket > wrap_client(shared_ptr< certificate_credentials >, connected_socket &&, sstring name)
    +
    session_type
    Definition: tls.hh:147
    +
    std::string_view format_as(subject_alt_name_type)
    +
    session_resume_mode
    Definition: tls.hh:249
    +
    subject_alt_name_type
    Definition: tls.hh:451
    +
    future< session_data > get_session_resume_data(connected_socket &)
    +
    session_data session_resume_data
    Optional session resume data. Must be retrieved via get_session_resume_data below.
    Definition: tls.hh:342
    +
    future< std::optional< session_dn > > get_dn_information(connected_socket &socket)
    +
    bool wait_for_eof_on_shutdown
    whether to wait for EOF from server on session termination
    Definition: tls.hh:336
    +
    future< std::vector< subject_alt_name > > get_alt_name_information(connected_socket &socket, std::unordered_set< subject_alt_name_type > types={})
    +
    ::seastar::socket socket(shared_ptr< certificate_credentials >, sstring name)
    +
    const std::error_category & error_category()
    +
    future< connected_socket > connect(shared_ptr< certificate_credentials >, socket_address, sstring name)
    +
    server_socket listen(shared_ptr< server_credentials >, socket_address sa, listen_options opts=listen_options())
    +
    const int ERROR_UNKNOWN_COMPRESSION_ALGORITHM
    +
    future< bool > check_session_is_resumed(connected_socket &socket)
    + +
    Definition: tls.hh:461
    +
    TLS configuration options.
    Definition: tls.hh:334
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: noncopyable_function.hh:37
    +
    Definition: api.hh:392
    +
    + + + + diff --git a/master/tmp__file_8hh_source.html b/master/tmp__file_8hh_source.html new file mode 100644 index 000000000..18a7c97d5 --- /dev/null +++ b/master/tmp__file_8hh_source.html @@ -0,0 +1,254 @@ + + + + + + + +Seastar: seastar/util/tmp_file.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    tmp_file.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright 2020 ScyllaDB
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#include <seastar/core/future.hh>
    +
    26#include <seastar/core/file.hh>
    +
    27#include <seastar/core/thread.hh>
    +
    28#include <seastar/util/std-compat.hh>
    +
    29
    +
    30namespace seastar {
    +
    31
    +
    32const std::filesystem::path& default_tmpdir();
    +
    33void set_default_tmpdir(std::filesystem::path);
    +
    34
    +
    35class tmp_file {
    +
    36 std::filesystem::path _path;
    +
    37 file _file;
    +
    38 bool _is_open = false;
    +
    39
    +
    40 static_assert(std::is_nothrow_constructible_v<std::filesystem::path>,
    +
    41 "filesystem::path's constructor must not throw");
    +
    42 static_assert(std::is_nothrow_move_constructible_v<std::filesystem::path>,
    +
    43 "filesystem::path's move constructor must not throw");
    +
    44public:
    +
    45 tmp_file() noexcept = default;
    +
    46 tmp_file(const tmp_file&) = delete;
    +
    47 tmp_file(tmp_file&& x) noexcept;
    +
    48
    +
    49 tmp_file& operator=(tmp_file&&) noexcept = default;
    +
    50
    +
    51 ~tmp_file();
    +
    52
    +
    53 future<> open(std::filesystem::path path_template = default_tmpdir(),
    +
    54 open_flags oflags = open_flags::rw,
    +
    55 file_open_options options = {}) noexcept;
    +
    56 future<> close() noexcept;
    +
    57 future<> remove() noexcept;
    +
    58
    +
    59 template <typename Func>
    +
    60 static future<> do_with(std::filesystem::path path_template, Func&& func,
    +
    61 open_flags oflags = open_flags::rw,
    +
    62 file_open_options options = {}) noexcept {
    +
    63 static_assert(std::is_nothrow_move_constructible_v<Func>,
    +
    64 "Func's move constructor must not throw");
    +
    65 return seastar::do_with(tmp_file(), [func = std::move(func), path_template = std::move(path_template), oflags, options = std::move(options)] (tmp_file& t) mutable {
    +
    66 return t.open(std::move(path_template), oflags, std::move(options)).then([&t, func = std::move(func)] () mutable {
    +
    67 return func(t);
    +
    68 }).finally([&t] {
    +
    69 return t.close().finally([&t] {
    +
    70 return t.remove();
    +
    71 });
    +
    72 });
    +
    73 });
    +
    74 }
    +
    75
    +
    76 template <typename Func>
    +
    77 static future<> do_with(Func&& func) noexcept {
    +
    78 return do_with(default_tmpdir(), std::move(func));
    +
    79 }
    +
    80
    +
    81 bool has_path() const {
    +
    82 return !_path.empty();
    +
    83 }
    +
    84
    +
    85 bool is_open() const {
    +
    86 return _is_open;
    +
    87 }
    +
    88
    +
    89 const std::filesystem::path& get_path() const {
    +
    90 return _path;
    +
    91 }
    +
    92
    +
    93 file& get_file() {
    +
    94 return _file;
    +
    95 }
    +
    96};
    +
    97
    +
    116future<tmp_file> make_tmp_file(std::filesystem::path path_template = default_tmpdir(),
    +
    117 open_flags oflags = open_flags::rw, file_open_options options = {}) noexcept;
    +
    118
    +
    119class tmp_dir {
    +
    120 std::filesystem::path _path;
    +
    121
    +
    122public:
    +
    123 tmp_dir() = default;
    +
    124 tmp_dir(const tmp_dir&) = delete;
    +
    125 tmp_dir(tmp_dir&& x) = default;
    +
    126
    +
    127 tmp_dir& operator=(tmp_dir&&) noexcept = default;
    +
    128
    +
    129 ~tmp_dir();
    +
    130
    +
    131 future<> create(std::filesystem::path path_template = default_tmpdir(),
    +
    132 file_permissions create_permissions = file_permissions::default_dir_permissions) noexcept;
    +
    133 future<> remove() noexcept;
    +
    134
    +
    135 template <typename Func>
    +
    136 requires std::is_nothrow_move_constructible_v<Func>
    +
    137 static future<> do_with(std::filesystem::path path_template, Func&& func,
    +
    138 file_permissions create_permissions = file_permissions::default_dir_permissions) noexcept {
    +
    139 static_assert(std::is_nothrow_move_constructible_v<Func>,
    +
    140 "Func's move constructor must not throw");
    +
    141 return seastar::do_with(tmp_dir(), [func = std::move(func), path_template = std::move(path_template), create_permissions] (tmp_dir& t) mutable {
    +
    142 return t.create(std::move(path_template), create_permissions).then([&t, func = std::move(func)] () mutable {
    +
    143 return func(t);
    +
    144 }).finally([&t] {
    +
    145 return t.remove();
    +
    146 });
    +
    147 });
    +
    148 }
    +
    149
    +
    150 template <typename Func>
    +
    151 static future<> do_with(Func&& func) noexcept {
    +
    152 return do_with(default_tmpdir(), std::move(func));
    +
    153 }
    +
    154
    +
    155 template <typename Func>
    +
    156 requires std::is_nothrow_move_constructible_v<Func>
    +
    157 static future<> do_with_thread(Func&& func) noexcept {
    +
    158 static_assert(std::is_nothrow_move_constructible_v<Func>,
    +
    159 "Func's move constructor must not throw");
    +
    160 return async([func = std::move(func)] () mutable {
    +
    161 auto t = tmp_dir();
    +
    162 t.create().get();
    +
    163 futurize_invoke(func, t).finally([&t] {
    +
    164 return t.remove();
    +
    165 }).get();
    +
    166 });
    +
    167 }
    +
    168
    +
    169 bool has_path() const {
    +
    170 return !_path.empty();
    +
    171 }
    +
    172
    +
    173 const std::filesystem::path& get_path() const {
    +
    174 return _path;
    +
    175 }
    +
    176};
    +
    177
    +
    195future<tmp_dir> make_tmp_dir(std::filesystem::path path_template = default_tmpdir(),
    +
    196 file_permissions create_permissions = file_permissions::default_dir_permissions) noexcept;
    +
    197
    +
    198} // namespace seastar
    +
    Definition: file.hh:193
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    future< T > finally(Func &&func) noexcept
    Definition: future.hh:1640
    +
    Definition: tmp_file.hh:119
    +
    Definition: tmp_file.hh:35
    +
    open_flags
    Definition: file-types.hh:41
    +
    auto do_with(T1 &&rv1, T2 &&rv2, More &&... more) noexcept
    Definition: do_with.hh:135
    +
    futurize_t< std::invoke_result_t< Func, Args... > > async(thread_attributes attr, Func &&func, Args &&... args) noexcept
    Definition: thread.hh:245
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    future< tmp_dir > make_tmp_dir(std::filesystem::path path_template=default_tmpdir(), file_permissions create_permissions=file_permissions::default_dir_permissions) noexcept
    +
    future< tmp_file > make_tmp_file(std::filesystem::path path_template=default_tmpdir(), open_flags oflags=open_flags::rw, file_open_options options={}) noexcept
    +
    Definition: file.hh:88
    +
    + + + + diff --git a/master/toeplitz_8hh_source.html b/master/toeplitz_8hh_source.html new file mode 100644 index 000000000..7f45fbe34 --- /dev/null +++ b/master/toeplitz_8hh_source.html @@ -0,0 +1,182 @@ + + + + + + + +Seastar: seastar/net/toeplitz.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    toeplitz.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*-
    +
    19 * Copyright (c) 2010 David Malone <dwmalone@FreeBSD.org>
    +
    20 * All rights reserved.
    +
    21 *
    +
    22 * Redistribution and use in source and binary forms, with or without
    +
    23 * modification, are permitted provided that the following conditions
    +
    24 * are met:
    +
    25 * 1. Redistributions of source code must retain the above copyright
    +
    26 * notice, this list of conditions and the following disclaimer.
    +
    27 * 2. Redistributions in binary form must reproduce the above copyright
    +
    28 * notice, this list of conditions and the following disclaimer in the
    +
    29 * documentation and/or other materials provided with the distribution.
    +
    30 *
    +
    31 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    +
    32 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +
    33 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +
    34 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    +
    35 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +
    36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +
    37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +
    38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +
    39 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +
    40 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +
    41 * SUCH DAMAGE.
    +
    42 */
    +
    43
    +
    44#pragma once
    +
    45
    +
    46#ifndef SEASTAR_MODULE
    +
    47#include <cstdint>
    +
    48#include <string_view>
    +
    49#include <vector>
    +
    50#endif
    +
    51
    +
    52namespace seastar {
    +
    53
    +
    54using rss_key_type = std::basic_string_view<uint8_t>;
    +
    55
    +
    56// Mellanox Linux's driver key
    +
    57static constexpr uint8_t default_rsskey_40bytes_v[] = {
    +
    58 0xd1, 0x81, 0xc6, 0x2c, 0xf7, 0xf4, 0xdb, 0x5b,
    +
    59 0x19, 0x83, 0xa2, 0xfc, 0x94, 0x3e, 0x1a, 0xdb,
    +
    60 0xd9, 0x38, 0x9e, 0x6b, 0xd1, 0x03, 0x9c, 0x2c,
    +
    61 0xa7, 0x44, 0x99, 0xad, 0x59, 0x3d, 0x56, 0xd9,
    +
    62 0xf3, 0x25, 0x3c, 0x06, 0x2a, 0xdc, 0x1f, 0xfc
    +
    63};
    +
    64
    +
    65static constexpr rss_key_type default_rsskey_40bytes{default_rsskey_40bytes_v, sizeof(default_rsskey_40bytes_v)};
    +
    66
    +
    67// Intel's i40e PMD default RSS key
    +
    68static constexpr uint8_t default_rsskey_52bytes_v[] = {
    +
    69 0x44, 0x39, 0x79, 0x6b, 0xb5, 0x4c, 0x50, 0x23,
    +
    70 0xb6, 0x75, 0xea, 0x5b, 0x12, 0x4f, 0x9f, 0x30,
    +
    71 0xb8, 0xa2, 0xc0, 0x3d, 0xdf, 0xdc, 0x4d, 0x02,
    +
    72 0xa0, 0x8c, 0x9b, 0x33, 0x4a, 0xf6, 0x4a, 0x4c,
    +
    73 0x05, 0xc6, 0xfa, 0x34, 0x39, 0x58, 0xd8, 0x55,
    +
    74 0x7d, 0x99, 0x58, 0x3a, 0xe1, 0x38, 0xc9, 0x2e,
    +
    75 0x81, 0x15, 0x03, 0x66
    +
    76};
    +
    77
    +
    78static constexpr rss_key_type default_rsskey_52bytes{default_rsskey_52bytes_v, sizeof(default_rsskey_52bytes_v)};
    +
    79
    +
    80template<typename T>
    +
    81inline uint32_t
    +
    82toeplitz_hash(rss_key_type key, const T& data)
    +
    83{
    +
    84 uint32_t hash = 0, v;
    +
    85
    +
    86 /* XXXRW: Perhaps an assertion about key length vs. data length? */
    +
    87
    +
    88 v = (key[0]<<24) + (key[1]<<16) + (key[2] <<8) + key[3];
    +
    89 for (unsigned i = 0; i < data.size(); i++) {
    +
    90 for (unsigned b = 0; b < 8; b++) {
    +
    91 if (data[i] & (1<<(7-b)))
    +
    92 hash ^= v;
    +
    93 v <<= 1;
    +
    94 if ((i + 4) < key.size() &&
    +
    95 (key[i+4] & (1<<(7-b))))
    +
    96 v |= 1;
    +
    97 }
    +
    98 }
    +
    99 return (hash);
    +
    100}
    +
    101
    +
    102}
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/transfer_8hh_source.html b/master/transfer_8hh_source.html new file mode 100644 index 000000000..1f9c266e5 --- /dev/null +++ b/master/transfer_8hh_source.html @@ -0,0 +1,159 @@ + + + + + + + +Seastar: seastar/core/transfer.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    transfer.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24// Helper functions for copying or moving multiple objects in an exception
    +
    25// safe manner, then destroying the sources.
    +
    26//
    +
    27// To transfer, call transfer_pass1(allocator, &from, &to) on all object pairs,
    +
    28// (this copies the object from @from to @to). If no exceptions are encountered,
    +
    29// call transfer_pass2(allocator, &from, &to). This destroys the object at the
    +
    30// origin. If exceptions were encountered, simply destroy all copied objects.
    +
    31//
    +
    32// As an optimization, if the objects are moveable without throwing (noexcept)
    +
    33// transfer_pass1() simply moves the objects and destroys the source, and
    +
    34// transfer_pass2() does nothing.
    +
    35
    +
    36#ifndef SEASTAR_MODULE
    +
    37#include <memory>
    +
    38#include <type_traits>
    +
    39#include <utility>
    +
    40#include <seastar/util/modules.hh>
    +
    41#endif
    +
    42
    +
    43namespace seastar {
    +
    44SEASTAR_MODULE_EXPORT_BEGIN
    +
    45
    +
    46template <typename T, typename Alloc>
    +
    47inline
    +
    48void
    +
    49transfer_pass1(Alloc& a, T* from, T* to,
    +
    50 std::enable_if_t<std::is_nothrow_move_constructible_v<T>>* = nullptr) {
    +
    51 std::allocator_traits<Alloc>::construct(a, to, std::move(*from));
    +
    52 std::allocator_traits<Alloc>::destroy(a, from);
    +
    53}
    +
    54
    +
    55template <typename T, typename Alloc>
    +
    56inline
    +
    57void
    +
    58transfer_pass2(Alloc&, T*, T*,
    +
    59 std::enable_if_t<std::is_nothrow_move_constructible_v<T>>* = nullptr) {
    +
    60}
    +
    61
    +
    62template <typename T, typename Alloc>
    +
    63inline
    +
    64void
    +
    65transfer_pass1(Alloc& a, T* from, T* to,
    +
    66 std::enable_if_t<!std::is_nothrow_move_constructible_v<T>>* = nullptr) {
    +
    67 std::allocator_traits<Alloc>::construct(a, to, *from);
    +
    68}
    +
    69
    +
    70template <typename T, typename Alloc>
    +
    71inline
    +
    72void
    +
    73transfer_pass2(Alloc& a, T* from, T*,
    +
    74 std::enable_if_t<!std::is_nothrow_move_constructible_v<T>>* = nullptr) {
    +
    75 std::allocator_traits<Alloc>::destroy(a, from);
    +
    76}
    +
    77SEASTAR_MODULE_EXPORT_END
    +
    78}
    +
    79
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/transform__iterator_8hh_source.html b/master/transform__iterator_8hh_source.html new file mode 100644 index 000000000..6e310f38a --- /dev/null +++ b/master/transform__iterator_8hh_source.html @@ -0,0 +1,138 @@ + + + + + + + +Seastar: seastar/util/transform_iterator.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    transform_iterator.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24namespace seastar {
    +
    25
    +
    26template <typename Iterator, typename Func>
    + +
    28 Iterator _i;
    +
    29 Func _f;
    +
    30public:
    +
    31 transform_iterator(Iterator i, Func f) : _i(i), _f(f) {}
    +
    32 auto operator*() { return _f(*_i); }
    +
    33 transform_iterator& operator++() {
    +
    34 ++_i;
    +
    35 return *this;
    +
    36 }
    +
    37 transform_iterator operator++(int) {
    +
    38 transform_iterator ret(*this);
    +
    39 _i++;
    +
    40 return ret;
    +
    41 }
    +
    42 bool operator==(const transform_iterator& x) const {
    +
    43 return _i == x._i;
    +
    44 }
    +
    45 bool operator!=(const transform_iterator& x) const {
    +
    46 return !operator==(x);
    +
    47 }
    +
    48};
    +
    49
    +
    50template <typename Iterator, typename Func>
    +
    51inline
    + +
    53make_transform_iterator(Iterator i, Func f) {
    + +
    55}
    +
    56
    +
    57}
    +
    Definition: transform_iterator.hh:27
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/transformers_8hh_source.html b/master/transformers_8hh_source.html new file mode 100644 index 000000000..17fadbc5c --- /dev/null +++ b/master/transformers_8hh_source.html @@ -0,0 +1,131 @@ + + + + + + + +Seastar: seastar/http/transformers.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    transformers.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2015 Cloudius Systems
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/http/handlers.hh>
    +
    25#include <seastar/http/file_handler.hh>
    +
    26#include <seastar/util/modules.hh>
    +
    27
    +
    28namespace seastar {
    +
    29
    +
    30namespace httpd {
    +
    31
    +
    43SEASTAR_MODULE_EXPORT
    + +
    45public:
    +
    46 virtual output_stream<char> transform(std::unique_ptr<http::request> req,
    +
    47 const sstring& extension, output_stream<char>&& s);
    +
    52 explicit content_replace(const sstring& extension = "")
    +
    53 : extension(extension) {
    +
    54 }
    +
    55private:
    +
    56 sstring extension;
    +
    57};
    +
    58
    +
    59}
    +
    60
    +
    61}
    +
    Definition: transformers.hh:44
    +
    content_replace(const sstring &extension="")
    Definition: transformers.hh:52
    +
    virtual output_stream< char > transform(std::unique_ptr< http::request > req, const sstring &extension, output_stream< char > &&s)
    +
    Definition: file_handler.hh:44
    + +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/tuple__utils_8hh_source.html b/master/tuple__utils_8hh_source.html new file mode 100644 index 000000000..d2ced61dd --- /dev/null +++ b/master/tuple__utils_8hh_source.html @@ -0,0 +1,219 @@ + + + + + + + +Seastar: seastar/util/tuple_utils.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    tuple_utils.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2017 ScyllaDB.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <tuple>
    +
    25#include <utility>
    +
    26#include <stddef.h>
    +
    27
    +
    28namespace seastar {
    +
    29
    +
    31namespace internal {
    +
    32
    +
    33template<typename Tuple>
    +
    34Tuple untuple(Tuple t) {
    +
    35 return t;
    +
    36}
    +
    37
    +
    38template<typename T>
    +
    39T untuple(std::tuple<T> t) {
    +
    40 return std::get<0>(std::move(t));
    +
    41}
    +
    42
    +
    43template<typename Tuple, typename Function, size_t... I>
    +
    44void tuple_for_each_helper(Tuple&& t, Function&& f, std::index_sequence<I...>&&) {
    +
    45 auto ignore_me = { (f(std::get<I>(std::forward<Tuple>(t))), 1)... };
    +
    46 (void)ignore_me;
    +
    47}
    +
    48
    +
    49template<typename Tuple, typename MapFunction, size_t... I>
    +
    50auto tuple_map_helper(Tuple&& t, MapFunction&& f, std::index_sequence<I...>&&) {
    +
    51 return std::make_tuple(f(std::get<I>(std::forward<Tuple>(t)))...);
    +
    52}
    +
    53
    +
    54template<size_t I, typename IndexSequence>
    +
    55struct prepend;
    +
    56
    +
    57template<size_t I, size_t... Is>
    +
    58struct prepend<I, std::index_sequence<Is...>> {
    +
    59 using type = std::index_sequence<I, Is...>;
    +
    60};
    +
    61
    +
    62template<template<typename> class Filter, typename Tuple, typename IndexSequence>
    +
    63struct tuple_filter;
    +
    64
    +
    65template<template<typename> class Filter, typename T, typename... Ts, size_t I, size_t... Is>
    +
    66struct tuple_filter<Filter, std::tuple<T, Ts...>, std::index_sequence<I, Is...>> {
    +
    67 using tail = typename tuple_filter<Filter, std::tuple<Ts...>, std::index_sequence<Is...>>::type;
    +
    68 using type = std::conditional_t<Filter<T>::value, typename prepend<I, tail>::type, tail>;
    +
    69};
    +
    70
    +
    71template<template<typename> class Filter>
    +
    72struct tuple_filter<Filter, std::tuple<>, std::index_sequence<>> {
    +
    73 using type = std::index_sequence<>;
    +
    74};
    +
    75
    +
    76template<typename Tuple, size_t... I>
    +
    77auto tuple_filter_helper(Tuple&& t, std::index_sequence<I...>&&) {
    +
    78 return std::make_tuple(std::get<I>(std::forward<Tuple>(t))...);
    +
    79}
    +
    80
    +
    81}
    +
    83
    +
    86
    +
    95template<template<typename> class MapClass, typename Tuple>
    + +
    97
    +
    99
    +
    100template<template<typename> class MapClass, typename... Elements>
    +
    101struct tuple_map_types<MapClass, std::tuple<Elements...>> {
    +
    102 using type = std::tuple<typename MapClass<Elements>::type...>;
    +
    103};
    +
    104
    +
    107
    +
    117template<template<typename> class FilterClass, typename... Elements>
    +
    118auto tuple_filter_by_type(const std::tuple<Elements...>& t) {
    +
    119 using sequence = typename internal::tuple_filter<FilterClass, std::tuple<Elements...>,
    +
    120 std::index_sequence_for<Elements...>>::type;
    +
    121 return internal::tuple_filter_helper(t, sequence());
    +
    122}
    +
    123template<template<typename> class FilterClass, typename... Elements>
    +
    124auto tuple_filter_by_type(std::tuple<Elements...>&& t) {
    +
    125 using sequence = typename internal::tuple_filter<FilterClass, std::tuple<Elements...>,
    +
    126 std::index_sequence_for<Elements...>>::type;
    +
    127 return internal::tuple_filter_helper(std::move(t), sequence());
    +
    128}
    +
    129
    +
    138template<typename Function, typename... Elements>
    +
    139auto tuple_map(const std::tuple<Elements...>& t, Function&& f) {
    +
    140 return internal::tuple_map_helper(t, std::forward<Function>(f),
    +
    141 std::index_sequence_for<Elements...>());
    +
    142}
    +
    143template<typename Function, typename... Elements>
    +
    144auto tuple_map(std::tuple<Elements...>&& t, Function&& f) {
    +
    145 return internal::tuple_map_helper(std::move(t), std::forward<Function>(f),
    +
    146 std::index_sequence_for<Elements...>());
    +
    147}
    +
    148
    +
    156template<typename Function, typename... Elements>
    +
    157void tuple_for_each(const std::tuple<Elements...>& t, Function&& f) {
    +
    158 return internal::tuple_for_each_helper(t, std::forward<Function>(f),
    +
    159 std::index_sequence_for<Elements...>());
    +
    160}
    +
    161template<typename Function, typename... Elements>
    +
    162void tuple_for_each(std::tuple<Elements...>& t, Function&& f) {
    +
    163 return internal::tuple_for_each_helper(t, std::forward<Function>(f),
    +
    164 std::index_sequence_for<Elements...>());
    +
    165}
    +
    166template<typename Function, typename... Elements>
    +
    167void tuple_for_each(std::tuple<Elements...>&& t, Function&& f) {
    +
    168 return internal::tuple_for_each_helper(std::move(t), std::forward<Function>(f),
    +
    169 std::index_sequence_for<Elements...>());
    +
    170}
    +
    171
    +
    173
    +
    174}
    +
    auto tuple_map(const std::tuple< Elements... > &t, Function &&f)
    Definition: tuple_utils.hh:139
    +
    void tuple_for_each(const std::tuple< Elements... > &t, Function &&f)
    Definition: tuple_utils.hh:157
    +
    auto tuple_filter_by_type(const std::tuple< Elements... > &t)
    Definition: tuple_utils.hh:118
    +
    Definition: tuple_utils.hh:96
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    STL namespace.
    +
    + + + + diff --git a/master/tutorial.html b/master/tutorial.html new file mode 100644 index 000000000..eff746d10 --- /dev/null +++ b/master/tutorial.html @@ -0,0 +1,3726 @@ + + + + + + + + + Asynchronous Programming with Seastar + + + + +
    +

    Asynchronous Programming with Seastar

    +

    Nadav Har’El - nyh@ScyllaDB.com

    +

    Avi Kivity - avi@ScyllaDB.com

    +
    + +

    1 Introduction

    +

    Seastar, which we introduce in this document, is a +C++ library for writing highly efficient complex server applications on +modern multi-core machines.

    +

    Traditionally, the programming languages libraries and frameworks +used for writing server applications have been divided into two distinct +camps: those focusing on efficiency, and those focusing on complexity. +Some frameworks are extremely efficient and yet allow building only +simple applications (e.g., DPDK allows applications which process +packets individually), while other frameworks allow building extremely +complex applications, at the cost of run-time efficiency. Seastar is our +attempt to get the best of both worlds: To create a library which allows +building highly complex server applications, and yet achieve optimal +performance.

    +

    The inspiration and first use case of Seastar was Scylla, a rewrite +of Apache Cassandra. Cassandra is a very complex application, and yet, +with Seastar we were able to re-implement it with as much as 10-fold +throughput increase, as well as significantly lower and more consistent +latencies.

    +

    Seastar offers a complete asynchronous programming framework, which +uses two concepts - futures and +continuations - to uniformly represent, and handle, +every type of asynchronous event, including network I/O, disk I/O, and +complex combinations of other events.

    +

    Since modern multi-core and multi-socket machines have steep +penalties for sharing data between cores (atomic instructions, cache +line bouncing and memory fences), Seastar programs use the share-nothing +programming model, i.e., the available memory is divided between the +cores, each core works on data in its own part of memory, and +communication between cores happens via explicit message passing (which +itself happens using the SMP’s shared memory hardware, of course).

    +

    1.1 Asynchronous programming

    +

    A server for a network protocol, such as the classic HTTP (Web) or +SMTP (e-mail) servers, inherently deals with parallelism: Multiple +clients send requests in parallel, and we cannot finish handling one +request before starting to handle the next: A request may, and often +does, need to block because of various reasons — a full TCP window +(i.e., a slow connection), disk I/O, or even the client holding on to an +inactive connection — and the server needs to handle other connections +as well.

    +

    The most straightforward way to handle such parallel connections, +employed by classic network servers such as Inetd, Apache Httpd and +Sendmail, is to use a separate operating-system process per connection. +This technique evolved over the years to improve its performance: At +first, a new process was spawned to handle each new connection; Later, a +pool of existing processes was kept and each new connection was assigned +to an unemployed process from the pool; Finally, the processes were +replaced by threads. However, the common idea behind all these +implementations is that at each moment, each process handles exclusively +a single connection. Therefore, the server code is free to use blocking +system calls, such as reading or writing to a connection, or reading +from disk, and if this process blocks, all is well because we have many +additional processes ready to handle other connections.

    +

    Programming a server which uses a process (or a thread) per +connection is known as synchronous programming, because the +code is written linearly, and one line of code starts to run after the +previous line finished. For example, the code may read a request from a +socket, parse the request, and then piecemeal read a file from disk and +write it back to the socket. Such code is easy to write, almost like +traditional non-parallel programs. In fact, it’s even possible to run an +external non-parallel program to handle each request — this is for +example how Apache HTTPd ran “CGI” programs, the first implementation of +dynamic Web-page generation.

    +
    +

    NOTE: although the synchronous server application is written in a +linear, non-parallel, fashion, behind the scenes the kernel helps ensure +that everything happens in parallel and the machine’s resources — CPUs, +disk and network — are fully utilized. Beyond the process parallelism +(we have multiple processes handling multiple connections in parallel), +the kernel may even parallelize the work of one individual connection — +for example process an outstanding disk request (e.g., read from a disk +file) in parallel with handling the network connection (send +buffered-but-yet-unsent data, and buffer newly-received data until the +application is ready to read it).

    +
    +

    But synchronous, process-per-connection, server programming didn’t +come without disadvantages and costs. Slowly but surely, server authors +realized that starting a new process is slow, context switching is slow, +and each process comes with significant overheads — most notably the +size of its stack. Server and kernel authors worked hard to mitigate +these overheads: They switched from processes to threads, from creating +new threads to thread pools, they lowered default stack size of each +thread, and increased the virtual memory size to allow more +partially-utilized stacks. But still, servers with synchronous designs +had unsatisfactory performance, and scaled badly as the number of +concurrent connections grew. In 1999, Dan Kegel popularized “the C10K +problem”, the need of a single server to efficiently handle 10,000 +concurrent connections — most of them slow or even inactive.

    +

    The solution, which became popular in the following decade, was to +abandon the cozy but inefficient synchronous server design, and switch +to a new type of server design — the asynchronous, or +event-driven, server. An event-driven server has just one +thread, or more accurately, one thread per CPU. This single thread runs +a tight loop which, at each iteration, checks, using poll() +(or the more efficient epoll) for new events on many open +file descriptors, e.g., sockets. For example, an event can be a socket +becoming readable (new data has arrived from the remote end) or becoming +writable (we can send more data on this connection). The application +handles this event by doing some non-blocking operations, modifying one +or more of the file descriptors, and maintaining its knowledge of the +state of this connection.

    +

    However, writers of asynchronous server applications faced, and still +face today, two significant challenges:

    +
      +
    • Complexity: Writing a simple asynchronous server +is straightforward. But writing a complex asynchronous server +is notoriously difficult. The handling of a single connection, instead +of being a simple easy-to-read function call, now involves a large +number of small callback functions, and a complex state machine to +remember which function needs to be called when each event +occurs.

    • +
    • Non-blocking: Having just one thread per core is +important for the performance of the server application, because context +switches are slow. However, if we only have one thread per core, the +event-handling functions must never block, or the core will +remain idle. But some existing programming languages and frameworks +leave the server author no choice but to use blocking functions, and +therefore multiple threads. For example, Cassandra was +written as an asynchronous server application; But because disk I/O was +implemented with mmaped files, which can uncontrollably +block the whole thread when accessed, they are forced to run multiple +threads per CPU.

    • +
    +

    Moreover, when the best possible performance is desired, the server +application, and its programming framework, has no choice but to also +take the following into account:

    +
      +
    • Modern Machines: Modern machines are very +different from those of just 10 years ago. They have many cores and deep +memory hierarchies (from L1 caches to NUMA) which reward certain +programming practices and penalizes others: Unscalable programming +practices (such as taking locks) can devastate performance on many +cores; Shared memory and lock-free synchronization primitives are +available (i.e., atomic operations and memory-ordering fences) but are +dramatically slower than operations that involve only data in a single +core’s cache, and also prevent the application from scaling to many +cores.

    • +
    • Programming Language: High-level languages such +Java, Javascript, and similar “modern” languages are convenient, but +each comes with its own set of assumptions which conflict with the +requirements listed above. These languages, aiming to be portable, also +give the programmer less control over the performance of critical code. +For really optimal performance, we need a programming language which +gives the programmer full control, zero run-time overheads, and on the +other hand — sophisticated compile-time code generation and +optimization.

    • +
    +

    Seastar is a framework for writing asynchronous server applications +which aims to solve all four of the above challenges: It is a framework +for writing complex asynchronous applications involving both +network and disk I/O. The framework’s fast path is entirely +single-threaded (per core), scalable to many cores and minimizes the use +of costly sharing of memory between cores. It is a C++14 library, giving +the user sophisticated compile-time features and full control over +performance, without run-time overhead.

    +

    1.2 Seastar

    +

    Seastar is an event-driven framework allowing you to write +non-blocking, asynchronous code in a relatively straightforward manner +(once understood). Its APIs are based on futures. Seastar utilizes the +following concepts to achieve extreme performance:

    +
      +
    • Cooperative micro-task scheduler: instead of +running threads, each core runs a cooperative task scheduler. Each task +is typically very lightweight – only running for as long as it takes to +process the last I/O operation’s result and to submit a new one.
    • +
    • Share-nothing SMP architecture: each core runs +independently of other cores in an SMP system. Memory, data structures, +and CPU time are not shared; instead, inter-core communication uses +explicit message passing. A Seastar core is often termed a shard. TODO: +more here https://github.com/scylladb/seastar/wiki/SMP
    • +
    • Future based APIs: futures allow you to submit an +I/O operation and to chain tasks to be executed on completion of the I/O +operation. It is easy to run multiple I/O operations in parallel - for +example, in response to a request coming from a TCP connection, you can +issue multiple disk I/O requests, send messages to other cores on the +same system, or send requests to other nodes in the cluster, wait for +some or all of the results to complete, aggregate the results, and send +a response.
    • +
    • Share-nothing TCP stack: while Seastar can use the +host operating system’s TCP stack, it also provides its own +high-performance TCP/IP stack built on top of the task scheduler and the +share-nothing architecture. The stack provides zero-copy in both +directions: you can process data directly from the TCP stack’s buffers, +and send the contents of your own data structures as part of a message +without incurring a copy. Read more…
    • +
    • DMA-based storage APIs: as with the networking +stack, Seastar provides zero-copy storage APIs, allowing you to DMA your +data to and from your storage devices.
    • +
    +

    This tutorial is intended for developers already familiar with the +C++ language, and will cover how to use Seastar to create a new +application.

    +

    TODO: copy text from https://github.com/scylladb/seastar/wiki/SMP +https://github.com/scylladb/seastar/wiki/Networking

    +

    2 Getting started

    +

    The simplest Seastar program is this:

    +
    #include <seastar/core/app-template.hh>
    +#include <seastar/core/reactor.hh>
    +#include <iostream>
    +
    +int main(int argc, char** argv) {
    +    seastar::app_template app;
    +    app.run(argc, argv, [] {
    +            std::cout << "Hello world\n";
    +            return seastar::make_ready_future<>();
    +    });
    +}
    +

    As we do in this example, each Seastar program must define and run, +an app_template object. This object starts the main event +loop (the Seastar engine) on one or more CPUs, and then runs +the given function - in this case an unnamed function, a lambda +- once.

    +

    The return make_ready_future<>(); causes the event +loop, and the whole application, to exit immediately after printing the +“Hello World” message. In a more typical Seastar application, we will +want event loop to remain alive and process incoming packets (for +example), until explicitly exited. Such applications will return a +future which determines when to exit the application. We will +introduce futures and how to use them below. In any case, the regular C +exit() should not be used, because it prevents Seastar or +the application from cleaning up appropriately.

    +

    As shown in this example, all Seastar functions and types live in the +“seastar” namespace. An user can either type this namespace +prefix every time, or use shortcuts like +“using seastar::app_template” or even +“using namespace seastar” to avoid typing this prefix. We +generally recommend to use the namespace prefixes seastar +and std explicitly, and will follow this style in all the +examples below.

    +

    To compile this program (it’s present in the +demos/hello-world.cc file) you can just use Docker.

    +
    $ docker build -t seastar-dev  -f ./docker/dev/Dockerfile .
    +$ scripts/build.sh dev
    +$ docker run -it --rm -v $(pwd):/seastar seastar-dev /seastar/build/dev/demos/hello-world_demo -c1
    +

    Without the docker help, first make sure you have downloaded, built, +and optionally installed Seastar, and put the above program in a source +file anywhere you want, let’s call the file +getting-started.cc.

    +

    Linux’s pkg-config +is one way for easily determining the compilation and linking parameters +needed for using various libraries - such as Seastar. For example, if +Seastar was built in the directory $SEASTAR but not +installed, one can compile getting-started.cc with it using +the command:

    +
    c++ getting-started.cc `pkg-config --cflags --libs --static $SEASTAR/build/release/seastar.pc`
    +

    The “--static” is needed because currently, Seastar is +built as a static library, so we need to tell pkg-config to +include its dependencies in the link command (whereas, had Seastar been +a shared library, it could have pulled in its own dependencies).

    +

    If Seastar was installed, the pkg-config +command line is even shorter:

    +
    c++ getting-started.cc `pkg-config --cflags --libs --static seastar`
    +

    Alternatively, one can easily build a Seastar program with CMake. +Given the following CMakeLists.txt

    +
    cmake_minimum_required (VERSION 3.5)
    +
    +project (SeastarExample)
    +
    +find_package (Seastar REQUIRED)
    +
    +add_executable (example
    +  getting-started.cc)
    +
    +target_link_libraries (example
    +  PRIVATE Seastar::seastar)
    +

    you can compile the example with the following commands:

    +
    $ mkdir build
    +$ cd build
    +$ cmake ..
    +$ make
    +

    The program now runs as expected:

    +
    $ ./example
    +Hello world
    +$
    +

    3 Threads and memory

    +

    3.1 Seastar threads

    +

    As explained in the introduction, Seastar-based programs run a single +thread on each CPU. Each of these threads runs its own event loop, known +as the engine in Seastar nomenclature. By default, the Seastar +application will take over all the available cores, starting one thread +per core. We can see this with the following program, printing +seastar::smp::count which is the number of started +threads:

    +
    #include <seastar/core/app-template.hh>
    +#include <seastar/core/reactor.hh>
    +#include <iostream>
    +
    +int main(int argc, char** argv) {
    +    seastar::app_template app;
    +    app.run(argc, argv, [] {
    +            std::cout << seastar::smp::count << "\n";
    +            return seastar::make_ready_future<>();
    +    });
    +}
    +

    On a machine with 4 hardware threads (two cores, and hyperthreading +enabled), Seastar will by default start 4 engine threads:

    +
    $ ./a.out
    +4
    +

    Each of these 4 engine threads will be pinned (a la +taskset(1)) to a different hardware thread. Note how, +as we mentioned above, the app’s initialization function is run only on +one thread, so we see the ouput “4” only once. Later in the tutorial +we’ll see how to make use of all threads.

    +

    The user can pass a command line parameter, -c, to tell +Seastar to start fewer threads than the available number of hardware +threads. For example, to start Seastar on only 2 threads, the user can +do:

    +
    $ ./a.out -c2
    +2
    +

    When the machine is configured as in the example above - two cores +with two hyperthreads on each - and only two threads are requested, +Seastar ensures that each thread is pinned to a different core, and we +don’t get the two threads competing as hyperthreads of the same core +(which would, of course, damage performance).

    +

    We cannot start more threads than the number of hardware threads, as +allowing this will be grossly inefficient. Trying it will result in an +error:

    +
    $ ./a.out -c5
    +Could not initialize seastar: std::runtime_error (insufficient processing units)
    +

    The error is an exception thrown from app.run, which was caught by +seastar itself and turned into a non-zero exit code. Note that catching +the exceptions this way does not catch exceptions +thrown in the application’s actual asynchronous code. We will discuss +these later in this tutorial.

    +

    3.2 Seastar memory

    +

    As explained in the introduction, Seastar applications shard their +memory. Each thread is preallocated with a large piece of memory (on the +same NUMA node it is running on), and uses only that memory for its +allocations (such as malloc() or new).

    +

    By default, the machine’s entire memory except a +certain reservation left for the OS (defaulting to the maximum of 1.5G +or 7% of total memory) is pre-allocated for the application in this +manner. This default can be changed by either changing the +amount reserved for the OS (not used by Seastar) with the +--reserve-memory option, or by explicitly giving the amount +of memory given to the Seastar application, with the -m +option. This amount of memory can be in bytes, or using the units “k”, +“M”, “G” or “T”. These units use the power-of-two values: “M” is a +mebibyte, 2^20 (=1,048,576) bytes, not a +megabyte (10^6 or 1,000,000 bytes).

    +

    Trying to give Seastar more memory than physical memory immediately +fails:

    +
    $ ./a.out -m10T
    +Couldn't start application: std::runtime_error (insufficient physical memory)
    +

    4 Introducing futures and +continuations

    +

    Futures and continuations, which we will introduce now, are the +building blocks of asynchronous programming in Seastar. Their strength +lies in the ease of composing them together into a large, complex, +asynchronous program, while keeping the code fairly readable and +understandable.

    +

    A future is a result of a computation +that may not be available yet. Examples include:

    +
      +
    • a data buffer that we are reading from the network
    • +
    • the expiration of a timer
    • +
    • the completion of a disk write
    • +
    • the result of a computation that requires the values from one or +more other futures.
    • +
    +

    The type future<int> variable holds an int that +will eventually be available - at this point might already be available, +or might not be available yet. The method available() tests if a value +is already available, and the method get() gets the value. The type +future<> indicates something which will eventually +complete, but not return any value.

    +

    A future is usually returned by an asynchronous +function, a function which returns a future and arranges for +this future to be eventually resolved. Because asynchronous functions +promise to eventually resolve the future which they returned, +asynchronous functions are sometimes called “promises”; But we will +avoid this term because it tends to confuse more than it explains.

    +

    One simple example of an asynchronous function is Seastar’s function +sleep():

    +
    future<> sleep(std::chrono::duration<Rep, Period> dur);
    +

    This function arranges a timer so that the returned future becomes +available (without an associated value) when the given time duration +elapses.

    +

    A continuation is a callback (typically a lambda) to +run when a future becomes available. A continuation is attached to a +future with the then() method. Here is a simple +example:

    +
    #include <seastar/core/app-template.hh>
    +#include <seastar/core/sleep.hh>
    +#include <iostream>
    +
    +int main(int argc, char** argv) {
    +    seastar::app_template app;
    +    app.run(argc, argv, [] {
    +        std::cout << "Sleeping... " << std::flush;
    +        using namespace std::chrono_literals;
    +        return seastar::sleep(1s).then([] {
    +            std::cout << "Done.\n";
    +        });
    +    });
    +}
    +

    In this example we see us getting a future from +seastar::sleep(1s), and attaching to it a continuation +which prints a “Done.” message. The future will become available after 1 +second has passed, at which point the continuation is executed. Running +this program, we indeed see the message “Sleeping…” immediately, and one +second later the message “Done.” appears and the program exits.

    +

    The return value of then() is itself a future which is +useful for chaining multiple continuations one after another, as we will +explain below. But here we just note that we return this +future from app.run’s function, so that the program will +exit only after both the sleep and its continuation are done.

    +

    To avoid repeating the boilerplate “app_engine” part in every code +example in this tutorial, let’s create a simple main() with which we +will compile the following examples. This main just calls function +future<> f(), does the appropriate exception +handling, and exits when the future returned by f is +resolved:

    +
    #include <seastar/core/app-template.hh>
    +#include <seastar/util/log.hh>
    +#include <iostream>
    +#include <stdexcept>
    +
    +extern seastar::future<> f();
    +
    +int main(int argc, char** argv) {
    +    seastar::app_template app;
    +    try {
    +        app.run(argc, argv, f);
    +    } catch(...) {
    +        std::cerr << "Couldn't start application: "
    +                  << std::current_exception() << "\n";
    +        return 1;
    +    }
    +    return 0;
    +}
    +

    Compiling together with this main.cc, the above sleep() +example code becomes:

    +
    #include <seastar/core/sleep.hh>
    +#include <iostream>
    +
    +seastar::future<> f() {
    +    std::cout << "Sleeping... " << std::flush;
    +    using namespace std::chrono_literals;
    +    return seastar::sleep(1s).then([] {
    +        std::cout << "Done.\n";
    +    });
    +}
    +

    So far, this example was not very interesting - there is no +parallelism, and the same thing could have been achieved by the normal +blocking POSIX sleep(). Things become much more interesting +when we start several sleep() futures in parallel, and attach a +different continuation to each. Futures and continuation make +parallelism very easy and natural:

    +
    #include <seastar/core/sleep.hh>
    +#include <iostream>
    +
    +seastar::future<> f() {
    +    std::cout << "Sleeping... " << std::flush;
    +    using namespace std::chrono_literals;
    +    seastar::sleep(200ms).then([] { std::cout << "200ms " << std::flush; });
    +    seastar::sleep(100ms).then([] { std::cout << "100ms " << std::flush; });
    +    return seastar::sleep(1s).then([] { std::cout << "Done.\n"; });
    +}
    +

    Each sleep() and then() call returns +immediately: sleep() just starts the requested timer, and +then() sets up the function to call when the timer expires. +So all three lines happen immediately and f returns. Only then, the +event loop starts to wait for the three outstanding futures to become +ready, and when each one becomes ready, the continuation attached to it +is run. The output of the above program is of course:

    +
    $ ./a.out
    +Sleeping... 100ms 200ms Done.
    +

    sleep() returns future<>, meaning it +will complete at a future time, but once complete, does not return any +value. More interesting futures do specify a value of any type (or +multiple values) that will become available later. In the following +example, we have a function returning a future<int>, +and a continuation to be run once this value becomes available. Note how +the continuation gets the future’s value as a parameter:

    +
    #include <seastar/core/sleep.hh>
    +#include <iostream>
    +
    +seastar::future<int> slow() {
    +    using namespace std::chrono_literals;
    +    return seastar::sleep(100ms).then([] { return 3; });
    +}
    +
    +seastar::future<> f() {
    +    return slow().then([] (int val) {
    +        std::cout << "Got " << val << "\n";
    +    });
    +}
    +

    The function slow() deserves more explanation. As usual, +this function returns a future<int> immediately, and +doesn’t wait for the sleep to complete, and the code in f() +can chain a continuation to this future’s completion. The future +returned by slow() is itself a chain of futures: It will +become ready once sleep’s future becomes ready and then the value 3 is +returned. We’ll explain below in more details how then() +returns a future, and how this allows chaining futures.

    +

    This example begins to show the convenience of the futures +programming model, which allows the programmer to neatly encapsulate +complex asynchronous operations. slow() might involve a +complex asynchronous operation requiring multiple steps, but its user +can use it just as easily as a simple sleep(), and +Seastar’s engine takes care of running the continuations whose futures +have become ready at the right time.

    +

    4.1 Ready futures

    +

    A future value might already be ready when then() is +called to chain a continuation to it. This important case is optimized, +and the continuation is run immediately instead of being registered to +run later in the next iteration of the event loop.

    +

    make_ready_future<> can be used to return a future +which is already ready. The following example is identical to the +previous one, except the promise function fast() returns a +future which is already ready, and not one which will be ready in a +second as in the previous example. The nice thing is that the consumer +of the future does not care, and uses the future in the same way in both +cases.

    +
    #include <seastar/core/future.hh>
    +#include <iostream>
    +
    +seastar::future<int> fast() {
    +    return seastar::make_ready_future<int>(3);
    +}
    +
    +seastar::future<> f() {
    +    return fast().then([] (int val) {
    +        std::cout << "Got " << val << "\n";
    +    });
    +}
    +

    4.2 Preemption and Task Quota

    +

    As described above, an existing fiber of execution will yield back to +the event loop when it performs a blocking operation such as IO or +sleeping, as it has no more work to do until this blocking operation +completes. Should a fiber have a lot of CPU bound work to do without any +intervening blocking operations, however, it is important that execution +is still yielded back to the event loop periodically.

    +

    This is implemented via preemption: which can only occur at +specific preemption points. At these points the fiber’s remaining +task quota is checked and it has been exceeded the fiber +yields. The task quota is a measure of how long tasks should be allowed +to run before yielding to the event loop, and is set to 500 µs by +default.

    +

    It is important not to starve the event loop, as this would starve +continuations of futures that weren’t ready but have since become ready, +and also starve the important polling done by the event +loop (e.g., checking whether there is new activity on the network card). +For example, iterating over a large container while doing CPU-bound work +without any suspension points could starve the reactor and cause a +reactor stall, which refers to a substantial period of time +(e.g., more than 20 milliseconds) during which a task does not +yield.

    +

    Many seastar constructs such as looping constructs have built-in +preemption points. You may also insert your own preemption points by +calling seastar::maybe_yield, which performs a preemption +check. Coroutines will also perform a preemption check at each +co_await. Note that there is not a preemption +check between continuations attached to a future with +then(), so a recursive future loop without explicit +preemption checks may starve the reactor.

    +

    5 Coroutines

    +

    Note: coroutines require C++20 and a supporting compiler. Clang 10 +and above is known to work.

    +

    The simplest way to write efficient asynchronous code with Seastar is +to use coroutines. Coroutines don’t share most of the pitfalls of +traditional continuations (below), and so are the preferred way to write +new code.

    +

    A coroutine is a function that returns a +seastar::future<T> and uses the co_await +or co_return keywords. Coroutines are invisible to their +callers and callees; they integrate with traditional Seastar code in +either role. If you are not familiar with C++ coroutines, you may want +to consult A +more general introduction to C++ coroutines; this section focuses on +how coroutines integrate with Seastar.

    +

    Here’s an example of a simple Seastar coroutine:

    +
    #include <seastar/core/coroutine.hh>
    +
    +seastar::future<int> read();
    +seastar::future<> write(int n);
    +
    +seastar::future<int> slow_fetch_and_increment() {
    +    auto n = co_await read();     // #1
    +    co_await seastar::sleep(1s);  // #2
    +    auto new_n = n + 1;           // #3
    +    co_await write(new_n);        // #4
    +    co_return n;                  // #5
    +}
    +

    In #1, we call the read() function, which returns a +future. The co_await keyword instructs Seastar to inspect +the returned future. If the future is ready, then the value (an +int) is extracted from the future and assigned to +n. If the future is not ready, the coroutine arranges for +itself to be called when the future becomes ready, and control is +returned to Seastar. Once the future becomes ready, the coroutine is +awakened and the value is extracted from the future and assigned to +n.

    +

    In #2, we call seastar::sleep() and wait for the +returned future to become ready, which it will in a second. This +demonstrates that n is preserved across +co_await calls, and the author of the coroutine need not +arrange for storage for coroutine local variables.

    +

    Line #3 demonstrates the addition operation, with which the reader is +assumed to be familiar.

    +

    In #4, we call a function that returns a +seastar::future<>. In this case, the future carries +no value, and so no value is extracted and assigned.

    +

    Line #5 demonstrates returning a value. The integer value is used to +satisfy the future<int> that our caller got when +calling the coroutine.

    +

    5.1 Lambda coroutines

    +

    A lambda function can be a coroutine. Due to an interaction between +how C++ lambda coroutines are specified and how Seastar coroutines work, +using lambda coroutines as continuations can result in use-after-free. +To avoid such problems, take one of the following approaches:

    +
      +
    1. Use lambda coroutines as arguments to functions that explicitly +claim support for them
    2. +
    3. Wrap lambda coroutines with +seastar::coroutine::lambda(), and ensure the lambda +coroutine is fully awaited within the statement it is defined in.
    4. +
    +

    An example of wrapping a lambda coroutine is:

    +
    #include <seastar/core/coroutine.hh>
    +#include <seastar/coroutine/maybe_yield.hh>
    +
    +future<> foo() {
    +    int n = 3;
    +    int m = co_await seastar::yield().then(seastar::coroutine::lambda([n] () -> future<int> {
    +        co_await seastar::coroutine::maybe_yield();
    +        // `n` can be safely used here
    +        co_return n;
    +    }));
    +    assert(n == m);
    +}
    +

    Notes: 1. seastar::future::then() accepts a continuation +2. We wrap the argument to seastar::future::then() with +seastar::coroutine::lambda() 3. We ensure evaluation of the +lambda completes within the same expression using the outer +co_await.

    +

    More information can be found in +lambda-coroutine-fiasco.md.

    +

    5.2 Generators in coroutines

    +

    Sometimes, it would be convenient to model a view of +input_range with a coroutine which emits the elements one +after another asynchronously. From the consumer of the view’s +perspective, it can retrieve the elements by co_awaiting +the return value of the coroutine. From the coroutine’s perspective, it +is able to produce the elements multiple times using +co_yield without “leaving” the coroutine. A function +producing a sequence of values can be named “generator”. But unlike the +regular coroutine which returns a single +seastar::future<T>, a generator should return +seastar::coroutine::experimental::generator<T, Container>. +Where T is the type of the elements, while +Container is a template, which is used to store the +elements. Because, underneath of Seastar’s generator implementation, a +bounded buffer is used for holding the elements not yet retrieved by the +consumer, there is a design decision to make – what kind of container +should be used, and what its maximum size should be. To define the +bounded buffer, developers need to:

    +
      +
    1. specify the type of the container’s type by via the second template +parameter of the generator
    2. +
    3. specify the size of the bounded buffer by passing the size as the +first parameter of the generator coroutine. The type of the size have to +be seastar::coroutine::experimental::buffer_size_t.
    4. +
    +

    But there is an exception, if the buffer’s size is one, we assume +that the programmer is likely to use std::optional for the +bounded buffer, so it’s not required to pass the maximum size of the +buffer as the first parameter in this case. But if a coroutine uses +std::optional as its buffer, and its function signature +still lists the size as its first parameter, it will not break anything. +As this parameter will just be ignored by the underlying +implementation.

    +

    Following is an example

    +
    #include <seastar/core/circular_buffer.hh>
    +#include <seastar/core/coroutine.hh>
    +#include <seastar/core/sleep.hh>
    +#include <seastar/coroutine/generator.hh>
    +
    +seastar::future<Preprocessed> prepare_ingredients(Ingredients&&);
    +seastar::future<Dish> cook_a_dish(Preprocessed&&);
    +seastar::future<> consume_a_dish(Dish&&);
    +
    +seastar::coroutine::experimental::generator<Dish, seastar::circular_buffer>
    +make_dishes(coroutine::experimental::buffer_size_t max_dishes_on_table,
    +            Ingredients&& ingredients) {
    +    while (ingredients) {
    +        auto some_ingredients = ingredients.alloc();
    +        auto preprocessed = co_await prepare_ingredients(std::move(some_ingredients));
    +        co_yield co_await cook_a_dish(std::move(preprocessed));
    +    }
    +}
    +
    +seastar::future<> have_a_dinner(unsigned max_dishes_on_table) {
    +    Ingredients ingredients;
    +    auto dishes = make_dishes(coroutine::experimental::buffer_size_t{max_dishes_on_table},
    +                              std::move(ingredients));
    +    while (auto dish = co_await dishes()) {
    +        co_await consume_a_dish(std::move(dish));
    +    }
    +}
    +

    In this hypothetical kitchen, a chef and a diner are working in +parallel. Instead of preparing all dishes beforehand, the chef cooks the +dishes while the diner is consuming them one after another. Under most +circumstances, neither the chef or the diner is blocked by its peer. The +dishes are buffered using the specified +seastar::circular_buffer<Dish>. But if the diner is +too slow so that there are max_dishes_on_table dishes left +on the table, the chef would wait until the number of dishes is less +than this setting. Please note, as explained above, despite that this +parameter is not referenced by the coroutine’s body, it is actually +passed to the generator’s promise constructor, which in turn creates the +buffer, as we are not using std::optional here. On the +other hand, apparently, if there is no dishes on the table, the diner +would wait for new ones to be prepared by the chef.

    +

    Please note, generator<T, Container> is still at +its early stage of developing, the public interface this template is +subject to change before it is stabilized enough.

    +

    5.3 Exceptions in coroutines

    +

    Coroutines automatically translate exceptions to futures and +back.

    +

    Calling co_await foo(), when foo() returns +an exceptional future, will throw the exception carried by the +future.

    +

    Similarly throwing within a coroutine will cause the coroutine to +return an exceptional future.

    +

    Example:

    +
    #include <seastar/core/coroutine.hh>
    +
    +seastar::future<> function_returning_an_exceptional_future();
    +
    +seastar::future<> exception_handling() {
    +    try {
    +        co_await function_returning_an_exceptional_future();
    +    } catch (...) {
    +        // exception will be handled here
    +    }
    +    throw 3; // will be captured by coroutine and returned as
    +             // an exceptional future
    +}
    +

    In certain cases, exceptions can also be propagated directly, without +throwing or rethrowing them. It can be achieved by returning a +coroutine::exception wrapper, but it unfortunately only +works for coroutines which return future<T>, not +future<>, due to the limitations in compilers. In +particular, the example above won’t compile if the return type is +changed to future<>.

    +

    Example:

    +
    seastar::future<int> exception_propagating() {
    +    std::exception_ptr eptr;
    +    try {
    +        co_await function_returning_an_exceptional_future();
    +    } catch (...) {
    +        eptr = std::current_exception();
    +    }
    +    if (eptr) {
    +        co_return seastar::coroutine::exception(eptr); // Saved exception pointer can be propagated without rethrowing
    +    }
    +    co_return seastar::coroutine::make_exception(3); // Custom exceptions can be propagated without throwing
    +}
    +

    5.4 Concurrency in coroutines

    +

    The co_await operator allows for simple sequential +execution. Multiple coroutines can execute in parallel, but each +coroutine has only one outstanding computation at a time.

    +

    The seastar::coroutine::all class template allows a +coroutine to fork into several concurrently executing sub-coroutines (or +Seastar fibers, see below) and join again when they complete. Consider +this example:

    +
    #include <seastar/core/coroutines.hh>
    +#include <seastar/coroutine/all.hh>
    +
    +seastar::future<int> read(int key);
    +
    +seastar::future<int> parallel_sum(int key1, int key2) {
    +    int [a, b] = co_await seastar::coroutine::all(
    +        [&] {
    +            return read(key1);
    +        },
    +        [&] {
    +            return read(key2);
    +        }
    +    );
    +    co_return a + b;
    +}
    +

    Here, two read() calls are launched concurrently. The coroutine is +paused until both reads complete, and the values returned are assigned +to a and b. If read(key) is an +operation that involves I/O, then the concurrent execution will complete +sooner than if we co_awaited each call separately, since +I/O can be overlapped.

    +

    Note that all waits for all of its sub-computations, +even if some throw an exception. If an exception is thrown, it is +propagated to the calling coroutine.

    +

    The seastar::coroutine::parallel_for_each class template +allows a coroutine to fork into several concurrently executing function +invocations (or Seastar fibers, see below) over a range of elements and +join again when they complete. Consider this example:

    +
    #include <seastar/core/coroutines.hh>
    +#include <seastar/coroutine/parallel_for_each.hh>
    +
    +seastar::future<bool> all_exist(std::vector<seastar::sstring> filenames) {
    +    bool res = true;
    +    co_await seastar::coroutine::parallel_for_each(filenames, [&res] (const seastar::sstring& name) -> seastar::future<> {
    +        res &= co_await seastar::file_exists(name);
    +    });
    +    co_return res;
    +}
    +

    Here, the lambda function passed to parallel_for_each is launched +concurrently for each element in the filenames vector. The coroutine is +paused until all calls complete.

    +

    5.5 Breaking up long running +computations

    +

    Seastar is generally used for I/O, and coroutines usually launch I/O +operations and consume their results, with little computation in +between. But occasionally a long running computation is needed, and this +risks preventing the reactor from performing I/O and scheduling other +tasks.

    +

    A coroutine will automatically yield in a co_await +expression; but in a computation we do not co_await +anything. We can use the seastar::coroutine::maybe_yield +class in such cases:

    +
    #include <seastar/coroutine/maybe_yield>
    +
    +seastar::future<int> long_loop(int n) {
    +    float acc = 0;
    +    for (int i = 0; i < n; ++i) {
    +        acc += std::sin(float(i));
    +        // Give the Seastar reactor opportunity to perform I/O or schedule
    +        // other tasks.
    +        co_await seastar::coroutine::maybe_yield();
    +    }
    +    co_return acc;
    +}
    +

    5.6 Bypassing preemption checks in +coroutines

    +

    By default, co_await-ing a future performs a preemption +check, and will suspend if the task quota is already depleted. However, +in certain cases it might be useful to be able to assume that awaiting a +ready future will not yield. For such cases, it’s possible to explicitly +bypass the preemption check:

    +
    #include <seastar/core/coroutine.hh>
    +
    +struct resource;
    +seastar::future<int> compute_always_ready(int i, resource& r);
    +
    +seastar::future<int> accumulate(int n, resource& important_resource) {
    +    float acc = 0;
    +    for (int i = 0; i < n; ++i) {
    +        // This await will not yield the control, so we're sure that nobody will
    +        // be able to touch important_resource while we accumulate all the results.
    +        acc += co_await seastar::coroutine::without_preemption_check(compute_always_ready(i, important_resource));
    +    }
    +    co_return acc;
    +}
    +

    6 Continuations

    +

    6.1 Capturing state in +continuations

    +

    We’ve already seen that Seastar continuations are lambdas, +passed to the then() method of a future. In the examples +we’ve seen so far, lambdas have been nothing more than anonymous +functions. But C++11 lambdas have one more trick up their sleeve, which +is extremely important for future-based asynchronous programming in +Seastar: Lambdas can capture state. Consider the +following example:

    +
    #include <seastar/core/sleep.hh>
    +#include <iostream>
    +
    +seastar::future<int> incr(int i) {
    +    using namespace std::chrono_literals;
    +    return seastar::sleep(10ms).then([i] { return i + 1; });
    +}
    +
    +seastar::future<> f() {
    +    return incr(3).then([] (int val) {
    +        std::cout << "Got " << val << "\n";
    +    });
    +}
    +

    The future operation incr(i) takes some time to complete +(it needs to sleep a bit first…), and in that duration, it needs to save +the i value it is working on. In the early event-driven +programming models, the programmer needed to explicitly define an object +for holding this state, and to manage all these objects. Everything is +much simpler in Seastar, with C++11’s lambdas: The capture +syntax[i]” in the above example means that the value +of i, as it existed when incr() was called() is captured into the +lambda. The lambda is not just a function - it is in fact an +object, with both code and data. In essence, the compiler +created for us automatically the state object, and we neither need to +define it, nor to keep track of it (it gets saved together with the +continuation, when the continuation is deferred, and gets deleted +automatically after the continuation runs).

    +

    One implementation detail worth understanding is that when a +continuation has captured state and is run immediately, this capture +incurs no runtime overhead. However, when the continuation cannot be run +immediately (because the future is not yet ready) and needs to be saved +till later, memory needs to be allocated on the heap for this data, and +the continuation’s captured data needs to be copied there. This has +runtime overhead, but it is unavoidable, and is very small compared to +the related overhead in the threaded programming model (in a threaded +program, this sort of state usually resides on the stack of the blocked +thread, but the stack is much larger than our tiny capture state, takes +up a lot of memory and causes a lot of cache pollution on context +switches between those threads).

    +

    In the above example, we captured i by value - +i.e., a copy of the value of i was saved into the +continuation. C++ has two additional capture options: capturing by +reference and capturing by move:

    +

    Using capture-by-reference in a continuation is usually a mistake, +and can lead to serious bugs. For example, if in the above example we +captured a reference to i, instead of copying it,

    +
    seastar::future<int> incr(int i) {
    +    using namespace std::chrono_literals;
    +    // Oops, the "&" below is wrong:
    +    return seastar::sleep(10ms).then([&i] { return i + 1; });
    +}
    +

    this would have meant that the continuation would contain the address +of i, not its value. But i is a stack +variable, and the incr() function returns immediately, so when the +continuation eventually gets to run, long after incr() returns, this +address will contain unrelated content.

    +

    An exception to the capture-by-reference-is-usually-a-mistake rule is +the do_with() idiom, which we will introduce later. This +idiom ensures that an object lives throughout the life of the +continuation, and makes capture-by-reference possible, and very +convenient.

    +

    Using capture-by-move in continuations is also very useful +in Seastar applications. By moving an object into a +continuation, we transfer ownership of this object to the continuation, +and make it easy for the object to be automatically deleted when the +continuation ends. For example, consider a traditional function taking a +std::unique_ptr<T>.

    +
    int do_something(std::unique_ptr<T> obj) {
    +     // do some computation based on the contents of obj, let's say the result is 17
    +     return 17;
    +     // at this point, obj goes out of scope so the compiler delete()s it.
    +

    By using unique_ptr in this way, the caller passes an object to the +function, but tells it the object is now its exclusive responsibility - +and when the function is done with the object, it automatically deletes +it. How do we use unique_ptr in a continuation? The following won’t +work:

    +
    seastar::future<int> slow_do_something(std::unique_ptr<T> obj) {
    +    using namespace std::chrono_literals;
    +    // The following line won't compile...
    +    return seastar::sleep(10ms).then([obj] () mutable { return do_something(std::move(obj)); });
    +}
    +

    The problem is that a unique_ptr cannot be passed into a continuation +by value, as this would require copying it, which is forbidden because +it violates the guarantee that only one copy of this pointer exists. We +can, however, move obj into the continuation:

    +
    seastar::future<int> slow_do_something(std::unique_ptr<T> obj) {
    +    using namespace std::chrono_literals;
    +    return seastar::sleep(10ms).then([obj = std::move(obj)] () mutable {
    +        return do_something(std::move(obj));
    +    });
    +}
    +

    Here the use of std::move() causes obj’s move-assignment +is used to move the object from the outer function into the +continuation. The notion of move (move semantics), introduced +in C++11, is similar to a shallow copy followed by invalidating the +source copy (so that the two copies do not co-exist, as forbidden by +unique_ptr). After moving obj into the continuation, the top-level +function can no longer use it (in this case it’s of course ok, because +we return anyway).

    +

    The [obj = ...] capture syntax we used here is new to +C++14. This is the main reason why Seastar requires C++14, and does not +support older C++11 compilers.

    +

    The extra () mutable syntax was needed here because by +default when C++ captures a value (in this case, the value of +std::move(obj)) into a lambda, it makes this value read-only, so our +lambda cannot, in this example, move it again. Adding +mutable removes this artificial restriction.

    +

    6.2 Evaluation order considerations +(C++14 only)

    +

    C++14 (and below) does not guarantee that lambda captures in +continuations will be evaluated after the futures they relate to are +evaluated (See +https://en.cppreference.com/w/cpp/language/eval_order).

    +

    Consequently, avoid the programming pattern below:

    +
        return do_something(obj).then([obj = std::move(obj)] () mutable {
    +        return do_something_else(std::move(obj));
    +    });
    +

    In the example above, [obj = std::move(obj)] might be +evaluated before do_something(obj) is called, potentially +leading to use-after-move of obj.

    +

    To guarantee the desired evaluation order, the expression above may +be broken into separate statements as follows:

    +
        auto fut = do_something(obj);
    +    return fut.then([obj = std::move(obj)] () mutable {
    +        return do_something_else(std::move(obj));
    +    });
    +

    This was changed in C++17. The expression that creates the object the +function then is called on (the future) is evaluated before +all the arguments to the function, so this style is not required in +C++17 and above.

    +

    6.3 Chaining continuations

    +

    TODO: We already saw chaining example in slow() above. talk about the +return from then, and returning a future and chaining more thens.

    +

    7 Handling exceptions

    +

    An exception thrown in a continuation is implicitly captured by the +system and stored in the future. A future that stores such an exception +is similar to a ready future in that it can cause its continuation to be +launched, but it does not contain a value – only the exception.

    +

    Calling .then() on such a future skips over the +continuation, and transfers the exception for the input future (the +object on which .then() is called) to the output future +(.then()’s return value).

    +

    This default handling parallels normal exception behavior – if an +exception is thrown in straight-line code, all following lines are +skipped:

    +
    line1();
    +line2(); // throws!
    +line3(); // skipped
    +

    is similar to

    +
    return line1().then([] {
    +    return line2(); // throws!
    +}).then([] {
    +    return line3(); // skipped
    +});
    +

    Usually, aborting the current chain of operations and returning an +exception is what’s needed, but sometimes more fine-grained control is +required. There are several primitives for handling exceptions:

    +
      +
    1. .then_wrapped(): instead of passing the values carried +by the future into the continuation, .then_wrapped() passes +the input future to the continuation. The future is guaranteed to be in +ready state, so the continuation can examine whether it contains a value +or an exception, and take appropriate action.
    2. +
    3. .finally(): similar to a Java finally block, a +.finally() continuation is executed whether or not its +input future carries an exception or not. The result of the finally +continuation is its input future, so .finally() can be used +to insert code in a flow that is executed unconditionally, but otherwise +does not alter the flow.
    4. +
    +

    The following example illustrates usage of then_wrapped +and finally:

    +
    #include <seastar/core/future.hh>
    +#include <iostream>
    +#include <exception>
    +
    +seastar::future<> pass() {
    +    std::cout << "I passed!!!" << std::endl;
    +    return seastar::make_ready_future<>();
    +}
    +
    +seastar::future<> fail() {
    +    std::cout << "I failed." << std::endl;
    +    return seastar::make_exception_future<>(std::exception());
    +}
    +
    +seastar::future<> f() {
    +    return pass().then([] {
    +        std::cout << "Oh no! I'm gonna fail!" << std::endl;
    +        return fail(); // throws
    +    }).then([] () { // skipped
    +        std::cout << "If I got to this place I will pass!" << std::endl;
    +        return pass();
    +    }).then_wrapped([] (seastar::future<> f) {
    +        if (f.failed()) {
    +            std::cout << "The input future failed!" << std::endl;
    +            return f;
    +        }
    +
    +        std::cout << "If I got to this place I will pass!" << std::endl;
    +        return pass();
    +    }).finally([] () {
    +        std::cout << "This code will run, regardless of any exceptions" << std::endl;
    +    });
    +}
    +

    This time the output will be

    +
    I passed!!!
    +Oh no! I'm gonna fail!
    +I failed.
    +The input future failed!
    +This code will run, regardless of any exceptions
    +ERROR [...] Exiting on unhandled exception: std::exception (std::exception)
    +

    TODO: Also mention handle_exception - although perhaps delay that to +a later chapter?

    +

    7.1 Exceptions vs. exceptional +futures

    +

    An asynchronous function can fail in one of two ways: It can fail +immediately, by throwing an exception, or it can return a future which +will eventually fail (resolve to an exception). These two modes of +failure appear similar to the uninitiated, but behave differently when +attempting to handle exceptions using finally(), +handle_exception(), or then_wrapped(). For +example, consider the code:

    +
    #include <seastar/core/future.hh>
    +#include <iostream>
    +#include <exception>
    +
    +class my_exception : public std::exception {
    +    virtual const char* what() const noexcept override { return "my exception"; }
    +};
    +
    +seastar::future<> fail() {
    +    return seastar::make_exception_future<>(my_exception());
    +}
    +
    +seastar::future<> f() {
    +    return fail().finally([] {
    +        std::cout << "cleaning up\n";
    +    });
    +}
    +

    This code will, as expected, print the “cleaning up” message - the +asynchronous function fail() returns a future which +resolves to a failure, and the finally() continuation is +run despite this failure, as expected.

    +

    Now consider that in the above example we had a different definition +for fail():

    +
    seastar::future<> fail() {
    +    throw my_exception();
    +}
    +

    Here, fail() does not return a failing future. Rather, +it fails to return a future at all! The exception it throws stops the +entire function f(), and the finally() +continuation does not not get attached to the future (which was never +returned), and will never run. The “cleaning up” message is not printed +now.

    +

    We recommend that to reduce the chance for such errors, asynchronous +functions should always return a failed future rather than throw an +actual exception. If the asynchronous function calls another function +before returning a future, and that second function might +throw, it should use try/catch to catch the +exception and convert it into a failed future:

    +
    void inner() {
    +    throw my_exception();
    +}
    +seastar::future<> fail() {
    +    try {
    +        inner();
    +    } catch(...) {
    +        return seastar::make_exception_future(std::current_exception());
    +    }
    +    return seastar::make_ready_future<>();
    +}
    +

    Here, fail() catches the exception thrown by +inner(), whatever it might be, and returns a failed future +with that failure. Written this way, the finally() +continuation will be reached, and the “cleaning up” message printed.

    +
    +

    Despite this recommendation that asynchronous functions avoid +throwing, some asynchronous functions do throw exceptions in addition to +returning exceptional futures. A common example are functions which +allocate memory and throw std::bad_alloc when running out +of memory, instead of returning a future. The +future<> seastar::semaphore::wait() method is one +such function: It returns a future which may be exceptional if the +semaphore was broken() or the wait timed out, but may also +throw an exception when failing to allocate memory it needs to +hold the list of waiters. Therefore, unless a function — including +asynchronous functions — is explicitly tagged “noexcept”, +the application should be prepared to handle exceptions thrown from it. +In modern C++, code usually uses RAII to be exception-safe without +sprinkling it with try/catch. +seastar::defer() is a RAII-based idiom that ensures that +some cleanup code is run even if an exception is thrown.

    +
    +

    Seastar has a convenient generic function, +futurize_invoke(), which can be useful here. +futurize_invoke(func, args...) runs a function which may +return either a future value or an immediate value, and in both cases +convert the result into a future value. futurize_invoke() +also converts an immediate exception thrown by the function, if any, +into a failed future, just like we did above. So using +futurize_invoke() we can make the above example work even +if fail() did throw exceptions:

    +
    seastar::future<> fail() {
    +    throw my_exception();
    +}
    +seastar::future<> f() {
    +    return seastar::futurize_invoke(fail).finally([] {
    +        std::cout << "cleaning up\n";
    +    });
    +}
    +

    Note that most of this discussion becomes moot if the risk of +exception is inside a continuation. Consider the following +code:

    +
    seastar::future<> f() {
    +    return seastar::sleep(1s).then([] {
    +        throw my_exception();
    +    }).finally([] {
    +        std::cout << "cleaning up\n";
    +    });
    +}
    +

    Here, the lambda function of the first continuation does throw an +exception instead of returning a failed future. However, we do +not have the same problem as before, which only happened +because an asynchronous function threw an exception before +returning a valid future. Here, f() does return a valid +future immediately - the failure will only be known later, after +sleep() resolves. The message in finally() +will be printed. The methods which attach continuations (such as +then() and finally()) run the continuation the +same way, so continuation functions may return immediate values or, in +this case, throw an immediate exception, and still work properly.

    +

    8 Lifetime management

    +

    An asynchronous function starts an operation which may continue long +after the function returns: The function itself returns a +future<T> almost immediately, but it may take a while +until this future is resolved.

    +

    When such an asynchronous operation needs to operate on existing +objects, or to use temporary objects, we need to worry about the +lifetime of these objects: We need to ensure that these objects +do not get destroyed before the asynchronous function completes (or it +will try to use the freed object and malfunction or crash), and to also +ensure that the object finally get destroyed when it is no longer needed +(otherwise we will have a memory leak). Seastar offers a variety of +mechanisms for safely and efficiently keeping objects alive for the +right duration. In this section we will explore these mechanisms, and +when to use each mechanism.

    +

    8.1 Passing ownership to +continuation

    +

    The most straightforward way to ensure that an object is alive when a +continuation runs and is destroyed afterwards is to pass its ownership +to the continuation. When continuation owns the object, the +object will be kept until the continuation runs, and will be destroyed +as soon as the continuation is not needed (i.e., it may have run, or +skipped in case of exception and then() continuation).

    +

    We already saw above that the way for a continuation to get ownership +of an object is through capturing:

    +
    seastar::future<> slow_incr(int i) {
    +    return seastar::sleep(10ms).then([i] { return i + 1; });
    +}
    +

    Here the continuation captures the value of i. In other +words, the continuation includes a copy of i. When the +continuation runs 10ms later, it will have access to this value, and as +soon as the continuation finishes its object is destroyed, together with +its captured copy of i. The continuation owns this copy of +i.

    +

    Capturing by value as we did here - making a copy of the object we +need in the continuation - is useful mainly for very small objects such +as the integer in the previous example. Other objects are expensive to +copy, or sometimes even cannot be copied. For example, the following is +not a good idea:

    +
    seastar::future<> slow_op(std::vector<int> v) {
    +    // this makes another copy of v:
    +    return seastar::sleep(10ms).then([v] { /* do something with v */ });
    +}
    +

    This would be inefficient - as the vector v, potentially +very long, will be copied and the copy will be saved in the +continuation. In this example, there is no reason to copy v +- it was anyway passed to the function by value and will not be used +again after capturing it into the continuation, as right after the +capture, the function returns and destroys its copy of +v.

    +

    For such cases, C++14 allows moving the object into the +continuation:

    +
    seastar::future<> slow_op(std::vector<int> v) {
    +    // v is not copied again, but instead moved:
    +    return seastar::sleep(10ms).then([v = std::move(v)] { /* do something with v */ });
    +}
    +

    Now, instead of copying the object v into the +continuation, it is moved into the continuation. The +C++11-introduced move constructor moves the vector’s data into the +continuation and clears the original vector. Moving is a quick operation +- for a vector it only requires copying a few small fields such as the +pointer to the data. As before, once the continuation is dismissed the +vector is destroyed - and its data array (which was moved in the move +operation) is finally freed.

    +

    TODO: talk about temporary_buffer as an example of an object designed +to be moved in this way.

    +

    In some cases, moving the object is undesirable. For example, some +code keeps references to an object or one of its fields and the +references become invalid if the object is moved. In some complex +objects, even the move constructor is slow. For these cases, C++ +provides the useful wrapper std::unique_ptr<T>. A +unique_ptr<T> object owns an object of type +T allocated on the heap. When a +unique_ptr<T> is moved, the object of type T is not +touched at all - just the pointer to it is moved. An example of using +std::unique_ptr<T> in capture is:

    +
    seastar::future<> slow_op(std::unique_ptr<T> p) {
    +    return seastar::sleep(10ms).then([p = std::move(p)] { /* do something with *p */ });
    +}
    +

    std::unique_ptr<T> is the standard C++ mechanism +for passing unique ownership of an object to a function: The object is +only owned by one piece of code at a time, and ownership is transferred +by moving the unique_ptr object. A unique_ptr +cannot be copied: If we try to capture p by value, not by move, we will +get a compilation error.

    +

    8.2 Keeping ownership at the +caller

    +

    The technique we described above - giving the continuation ownership +of the object it needs to work on - is powerful and safe. But often it +becomes hard and verbose to use. When an asynchronous operation involves +not just one continuation but a chain of continuations that each needs +to work on the same object, we need to pass the ownership of the object +between each successive continuation, which can become inconvenient. It +is especially inconvenient when we need to pass the same object into two +separate asynchronous functions (or continuations) - after we move the +object into one, the object needs to be returned so it can be moved +again into the second. E.g.,

    +
    seastar::future<> slow_op(T o) {
    +    return seastar::sleep(10ms).then([o = std::move(o)] {
    +        // first continuation, doing something with o
    +        ...
    +        // return o so the next continuation can use it!
    +        return std::move(o);
    +    }).then([](T o) {
    +        // second continuation, doing something with o
    +        ...
    +    });
    +}
    +

    This complexity arises because we wanted asynchronous functions and +continuations to take the ownership of the objects they operated on. A +simpler approach would be to have the caller of the +asynchronous function continue to be the owner of the object, and just +pass references to the object to the various other asynchronous +functions and continuations which need the object. For example:

    +
    seastar::future<> slow_op(T& o) {           // <-- pass by reference
    +    return seastar::sleep(10ms).then([&o] {// <-- capture by reference
    +        // first continuation, doing something with o
    +        ...
    +    }).then([&o]) {                        // <-- another capture by reference
    +        // second continuation, doing something with o
    +        ...
    +    });
    +}
    +

    This approach raises a question: The caller of slow_op +is now responsible for keeping the object o alive while the +asynchronous code started by slow_op needs this object. But +how will this caller know how long this object is actually needed by the +asynchronous operation it started?

    +

    The most reasonable answer is that an asynchronous function may need +access to its parameters until the future it returns is resolved - at +which point the asynchronous code completes and no longer needs access +to its parameters. We therefore recommend that Seastar code adopt the +following convention:

    +
    +

    Whenever an asynchronous function takes a parameter by +reference, the caller must ensure that the referred object lives until +the future returned by the function is resolved.

    +
    +

    Note that this is merely a convention suggested by Seastar, and +unfortunately nothing in the C++ language enforces it. C++ programmers +in non-Seastar programs often pass large objects to functions as a const +reference just to avoid a slow copy, and assume that the called function +will not save this reference anywhere. But in Seastar code, +that is a dangerous practice because even if the asynchronous function +did not intend to save the reference anywhere, it may end up doing it +implicitly by passing this reference to another function and eventually +capturing it in a continuation.

    +
    +

    It would be nice if future versions of C++ could help us catch +incorrect uses of references. Perhaps we could have a tag for a special +kind of reference, an “immediate reference” which a function can use use +immediately (i.e, before returning a future), but cannot be captured +into a continuation.

    +
    +

    With this convention in place, it is easy to write complex +asynchronous functions functions like slow_op which pass +the object around, by reference, until the asynchronous operation is +done. But how does the caller ensure that the object lives until the +returned future is resolved? The following is wrong:

    +
    seastar::future<> f() {
    +    T obj; // wrong! will be destroyed too soon!
    +    return slow_op(obj);
    +}
    +

    It is wrong because the object obj here is local to the +call of f, and is destroyed as soon as f +returns a future - not when this returned future is resolved! The +correct thing for a caller to do would be to create the object +obj on the heap (so it does not get destroyed as soon as +f returns), and then run slow_op(obj) and when +that future resolves (i.e., with .finally()), destroy the +object.

    +

    Seastar provides a convenient idiom, do_with() for doing +this correctly:

    +
    seastar::future<> f() {
    +    return seastar::do_with(T(), [] (auto& obj) {
    +        // obj is passed by reference to slow_op, and this is fine:
    +        return slow_op(obj);
    +    }
    +}
    +

    do_with will do the given function +with the given object alive.

    +

    do_with saves the given object on the heap, and calls +the given lambda with a reference to the new object. Finally it ensures +that the new object is destroyed after the returned future is resolved. +Usually, do_with is given an rvalue, i.e., an unnamed temporary +object or an std::move()ed object, and do_with +moves that object into its final place on the heap. do_with +returns a future which resolves after everything described above is done +(the lambda’s future is resolved and the object is destroyed).

    +

    For convenience, do_with can also be given multiple +objects to hold alive. For example here we create two objects and hold +alive them until the future resolves:

    +
    seastar::future<> f() {
    +    return seastar::do_with(T1(), T2(), [] (auto& obj1, auto& obj2) {
    +        return slow_op(obj1, obj2);
    +    }
    +}
    +

    While do_with can the lifetime of the objects it holds, +if the user accidentally makes copies of these objects, these copies +might have the wrong lifetime. Unfortunately, a simple typo like +forgetting an “&” can cause such accidental copies. For example, the +following code is broken:

    +
    seastar::future<> f() {
    +    return seastar::do_with(T(), [] (T obj) { // WRONG: should be T&, not T
    +        return slow_op(obj);
    +    }
    +}
    +

    In this wrong snippet, obj is mistakenly not a reference +to the object which do_with allocated, but rather a copy of +it - a copy which is destroyed as soon as the lambda function returns, +rather than when the future it returns resolved. Such code will most +likely crash because the object is used after being freed. Unfortunately +the compiler will not warn about such mistakes. Users should get used to +always using the type “auto&” with do_with - as in the +above correct examples - to reduce the chance of such mistakes.

    +

    For the same reason, the following code snippet is also wrong:

    +
    seastar::future<> slow_op(T obj); // WRONG: should be T&, not T
    +seastar::future<> f() {
    +    return seastar::do_with(T(), [] (auto& obj) {
    +        return slow_op(obj);
    +    }
    +}
    +

    Here, although obj was correctly passed to the lambda by +reference, we later accidentally passed slow_op() a copy of +it (because here slow_op takes the object by value, not by +reference), and this copy will be destroyed as soon as +slow_op returns, not waiting until the returned future +resolves.

    +

    When using do_with, always remember it requires adhering +to the convention described above: The asynchronous function which we +call inside do_with must not use the objects held by +do_with after the returned future is resolved. It +is a serious use-after-free bug for an asynchronous function to return a +future which resolves while still having background operations using the +do_with()ed objects.

    +

    In general, it is rarely a good idea for an asynchronous function to +resolve while leaving behind background operations - even if those +operations do not use the do_with()ed objects. Background +operations that we do not wait for may cause us to run out of memory (if +we don’t limit their number) and make it difficult to shut down the +application cleanly.

    +

    8.3 Sharing ownership (reference +counting)

    +

    In the beginning of this chapter, we already noted that capturing a +copy of an object into a continuation is the simplest way to ensure that +the object is alive when the continuation runs and destroyed afterwards. +However, complex objects are often expensive (in time and memory) to +copy. Some objects cannot be copied at all, or are read-write and the +continuation should modify the original object, not a new copy. The +solution to all these issues are reference counted, +a.k.a. shared objects:

    +

    A simple example of a reference-counted object in Seastar is a +seastar::file, an object holding an open file object (we +will introduce seastar::file in a later section). A +file object can be copied, but copying does not involve +copying the file descriptor (let alone the file). Instead, both copies +point to the same open file, and a reference count is increased by 1. +When a file object is destroyed, the file’s reference count is decreased +by one, and only when the reference count reaches 0 the underlying file +is actually closed.

    +

    The fact that file objects can be copied very quickly +and all copies actually point to the same file, make it very convenient +to pass them to asynchronous code; For example,

    +
    seastar::future<uint64_t> slow_size(file f) {
    +    return seastar::sleep(10ms).then([f] {
    +        return f.size();
    +    });
    +}
    +

    Note how calling slow_size is as simple as calling +slow_size(f), passing a copy of f, without +needing to do anything special to ensure that f is only +destroyed when no longer needed. That simply happens naturally when +nothing refers to f any more.

    +

    You may wonder why return f.size() in the above example +is safe: Doesn’t it start an asynchronous operation on f +(the file’s size may be stored on disk, so not immediately available), +and f may be immediately destroyed when we return and +nothing keeps holding a copy of f? If f is +really the last reference, that is indeed a bug, but there is another +one: the file is never closed. The assumption that makes the code valid +is that there is another reference to f that will be used +to close it. The close member function holds on to the reference count +of that object, so it continues to live even if nothing else keeps +holding on to it. Since all futures produced by a file object complete +before it is closed, all that is needed for correctness is to remember +to always close files.

    +

    The reference counting has a run-time cost, but it is usually very +small; It is important to remember that Seastar objects are always used +by a single CPU only, so the reference-count increment and decrement +operations are not the slow atomic operations often used for reference +counting, but just regular CPU-local integer operations. Moreover, +judicious use of std::move() and the compiler’s optimizer +can reduce the number of unnecessary back-and-forth increment and +decrement of the reference count.

    +

    C++11 offers a standard way of creating reference-counted shared +objects - using the template std::shared_ptr<T>. A +shared_ptr can be used to wrap any type into a +reference-counted shared object like seastar::file above. +However, the standard std::shared_ptr was designed with +multi-threaded applications in mind so it uses slow atomic +increment/decrement operations for the reference count which we already +noted is unnecessary in Seastar. For this reason Seastar offers its own +single-threaded implementation of this template, +seastar::shared_ptr<T>. It is similar to +std::shared_ptr<T> except no atomic operations are +used.

    +

    Additionally, Seastar also provides an even lower overhead variant of +shared_ptr: seastar::lw_shared_ptr<T>. +The full-featured shared_ptr is complicated by the need to +support polymorphic types correctly (a shared object created of one +class, and accessed through a pointer to a base class). It makes +shared_ptr need to add two words to the shared object, and +two words to each shared_ptr copy. The simplified +lw_shared_ptr - which does not support +polymorphic types - adds just one word in the object (the reference +count) and each copy is just one word - just like copying a regular +pointer. For this reason, the light-weight +seastar::lw_shared_ptr<T> should be preferred when +possible (T is not a polymorphic type), otherwise +seastar::shared_ptr<T>. The slower +std::shared_ptr<T> should never be used in sharded +Seastar applications.

    +

    8.4 Saving objects on the +stack

    +

    Wouldn’t it be convenient if we could save objects on a stack just +like we normally do in synchronous code? I.e., something like:

    +
    int i = ...;
    +seastar::sleep(10ms).get();
    +return i;
    +

    Seastar allows writing such code, by using a +seastar::thread object which comes with its own stack. A +complete example using a seastar::thread might look like +this:

    +
    seastar::future<> slow_incr(int i) {
    +    return seastar::async([i] {
    +        seastar::sleep(10ms).get();
    +        // We get here after the 10ms of wait, i is still available.
    +        return i + 1;
    +    });
    +}
    +

    We present seastar::thread, +seastar::async() and seastar::future::get() in +the seastar::thread section.

    +

    9 Advanced futures

    +

    9.1 Futures and interruption

    +

    TODO: A future, e.g., sleep(10s) cannot be interrupted. So if we need +to, the promise needs to have a mechanism to interrupt it. Mention +pipe’s close feature, semaphore stop feature, etc.

    +

    9.2 Futures are single use

    +

    TODO: Talk about if we have a future<int> +variable, as soon as we get() or then() it, it +becomes invalid - we need to store the value somewhere else. Think if +there’s an alternative we can suggest

    +

    10 Fibers

    +

    Seastar continuations are normally short, but often chained to one +another, so that one continuation does a bit of work and then schedules +another continuation for later. Such chains can be long, and often even +involve loopings - see the following section, “Loops”. We call such +chains “fibers” of execution.

    +

    These fibers are not threads - each is just a string of continuations +- but they share some common requirements with traditional threads. For +example, we want to avoid one fiber getting starved while a second fiber +continuously runs its continuations one after another. As another +example, fibers may want to communicate - e.g., one fiber produces data +that a second fiber consumes, and we wish to ensure that both fibers get +a chance to run, and that if one stops prematurely, the other doesn’t +hang forever.

    +

    TODO: Mention fiber-related sections like loops, semaphores, gates, +pipes, etc.

    +

    11 Loops

    +

    A majority of time-consuming computations involve using loops. +Seastar provides several primitives for expressing them in a way that +composes nicely with the future/promise model. A very important aspect +of Seastar loop primitives is that each iteration is followed by a +preemption point, thus allowing other tasks to run in between +iterations.

    +

    11.1 repeat

    +

    A loop created with repeat executes its body until it +receives a stop_iteration object, which informs if the +iteration should continue (stop_iteration::no) or stop +(stop_iteration::yes). Next iteration will be launched only +after the first one has finished. The loop body passed to +repeat is expected to have a +future<stop_iteration> return type.

    +
    seastar::future<int> recompute_number(int number);
    +
    +seastar::future<> push_until_100(seastar::lw_shared_ptr<std::vector<int>> queue, int element) {
    +    return seastar::repeat([queue, element] {
    +        if (queue->size() == 100) {
    +            return make_ready_future<stop_iteration>(stop_iteration::yes);
    +        }
    +        return recompute_number(element).then([queue] (int new_element) {
    +            queue->push_back(new_element);
    +            return stop_iteration::no;
    +        });
    +    });
    +}
    +

    11.2 do_until

    +

    Do until is a close relative of repeat, but it uses an +explicitly passed condition to decide whether it should stop iterating. +The above example could be expressed with do_until as +follows:

    +
    seastar::future<int> recompute_number(int number);
    +
    +seastar::future<> push_until_100(seastar::lw_shared_ptr<std::vector<int>> queue, int element) {
    +    return seastar::do_until([queue] { return queue->size() == 100; }, [queue, element] {
    +        return recompute_number(element).then([queue] (int new_element) {
    +            queue->push_back(new_element);
    +        });
    +    });
    +}
    +

    Note that the loop body is expected to return a +future<>, which allows composing complex +continuations inside the loop.

    +

    11.3 do_for_each

    +

    A do_for_each is an equivalent of a for +loop in Seastar world. It accepts a range (or a pair of iterators) and a +function body, which it applies to each argument, in order, one by one. +The next iteration will be launched only after the first one has +finished, as was the case with repeat. As usual, +do_for_each expects its loop body to return a +future<>.

    +
    seastar::future<> append(seastar::lw_shared_ptr<std::vector<int>> queue1, seastar::lw_shared_ptr<std::vector<int>> queue2) {
    +    return seastar::do_for_each(queue2, [queue1] (int element) {
    +        queue1->push_back(element);
    +    });
    +}
    +
    +seastar::future<> append_iota(seastar::lw_shared_ptr<std::vector<int>> queue1, int n) {
    +    return seastar::do_for_each(boost::make_counting_iterator<size_t>(0), boost::make_counting_iterator<size_t>(n), [queue1] (int element) {
    +        queue1->push_back(element);
    +    });
    +}
    +

    do_for_each accepts either an lvalue reference to a +container or a pair of iterators. It implies that the responsibility to +ensure that the container is alive during the whole loop execution +belongs to the caller. If the container needs its lifetime prolonged, it +can be easily achieved with do_with:

    +
    seastar::future<> do_something(int number);
    +
    +seastar::future<> do_for_all(std::vector<int> numbers) {
    +    // Note that the "numbers" vector will be destroyed as soon as this function
    +    // returns, so we use do_with to guarantee it lives during the whole loop execution:
    +    return seastar::do_with(std::move(numbers), [] (std::vector<int>& numbers) {
    +        return seastar::do_for_each(numbers, [] (int number) {
    +            return do_something(number);
    +        });
    +    });
    +}
    +

    11.4 parallel_for_each

    +

    Parallel for each is a high concurrency variant of +do_for_each. When using parallel_for_each, all +iterations are queued simultaneously - which means that there’s no +guarantee in which order they finish their operations.

    +
    seastar::future<> flush_all_files(seastar::lw_shared_ptr<std::vector<seastar::file>> files) {
    +    return seastar::parallel_for_each(files, [] (seastar::file f) {
    +        // file::flush() returns a future<>
    +        return f.flush();
    +    });
    +}
    +

    parallel_for_each is a powerful tool, as it allows +spawning many tasks in parallel. It can be a great performance gain, but +there are also caveats. First of all, too high concurrency may be +troublesome - the details can be found in chapter Limiting +parallelism of loops.

    +

    To restrict the concurrency of parallel_for_each by an +integer number, use max_concurrent_for_each that is +described below. More details about dealing with parallelism can be +found in chapter Limiting parallelism of loops.

    +

    Secondly, take note that the order in which iterations will be +executed within a parallel_for_each loop is arbitrary - if +a strict ordering is needed, consider using do_for_each +instead.

    +

    TODO: map_reduce, as a shortcut (?) for parallel_for_each which needs +to produce some results (e.g., logical_or of boolean results), so we +don’t need to create a lw_shared_ptr explicitly (or do_with).

    +

    TODO: See seastar commit “input_stream: Fix possible infinite +recursion in consume()” for an example on why recursion is a possible, +but bad, replacement for repeat(). See also my comment on +https://groups.google.com/d/msg/seastar-dev/CUkLVBwva3Y/3DKGw-9aAQAJ on +why Seastar’s iteration primitives should be used over tail call +optimization.

    +

    11.5 max_concurrent_for_each

    +

    Max concurrent for each is a variant of +parallel_for_each with restricted parallelism. It accepts +an additional parameter - max_concurrent - with which, up +to max_concurrent iterations are queued simultaneously, +with no guarantee in which order they finish their operations.

    +
    seastar::future<> flush_all_files(seastar::lw_shared_ptr<std::vector<seastar::file>> files, size_t max_concurrent) {
    +    return seastar::max_concurrent_for_each(files, max_concurrent, [] (seastar::file f) {
    +        return f.flush();
    +    });
    +}
    +

    Determining the maximum concurrency limit is out of the scope of this +document. It should typically be derived from the actual capabilities of +the system the software is running on, like the number of parallel +execution units or I/O channels, so to optimize utilization of resources +without overwhelming the system.

    +

    12 when_all: Waiting for multiple +futures

    +

    Above we’ve seen parallel_for_each(), which starts a +number of asynchronous operations, and then waits for all to complete. +Seastar has another idiom, when_all(), for waiting for +several already-existing futures to complete.

    +

    The first variant of when_all() is variadic, i.e., the +futures are given as separate parameters, the exact number of which is +known at compile time. The individual futures may have different types. +For example,

    +
    #include <seastar/core/sleep.hh>
    +
    +future<> f() {
    +    using namespace std::chrono_literals;
    +    future<int> slow_two = sleep(2s).then([] { return 2; });
    +    return when_all(sleep(1s), std::move(slow_two),
    +                    make_ready_future<double>(3.5)
    +           ).discard_result();
    +}
    +

    This starts three futures - one which sleeps for one second (and +doesn’t return anything), one which sleeps for two seconds and returns +the integer 2, and one which returns the double 3.5 immediately - and +then waits for them. The when_all() function returns a +future which resolves as soon as all three futures resolves, i.e., after +two seconds. This future also has a value, which we shall explain below, +but in this example, we simply waited for the future to resolve and +discarded its value.

    +

    Note that when_all() accept only rvalues, which can be +temporaries (like the return value of an asynchronous function or +make_ready_future) or an std::move()’ed +variable holding a future.

    +

    The future returned by when_all() resolves to a tuple of +futures which are already resolved, and contain the results of the three +input futures. Continuing the above example,

    +
    future<> f() {
    +    using namespace std::chrono_literals;
    +    future<int> slow_two = sleep(2s).then([] { return 2; });
    +    return when_all(sleep(1s), std::move(slow_two),
    +                    make_ready_future<double>(3.5)
    +           ).then([] (auto tup) {
    +            std::cout << std::get<0>(tup).available() << "\n";
    +            std::cout << std::get<1>(tup).get() << "\n";
    +            std::cout << std::get<2>(tup).get() << "\n";
    +    });
    +}
    +

    The output of this program (which comes after two seconds) is +1, 2, 3.5: the first future in the tuple is available (but +has no value), the second has the integer value 2, and the third a +double value 3.5 - as expected.

    +

    One or more of the waited futures might resolve in an exception, but +this does not change how when_all() works: It still waits +for all the futures to resolve, each with either a value or an +exception, and in the returned tuple some of the futures may contain an +exception instead of a value. For example,

    +
    future<> f() {
    +    using namespace std::chrono_literals;
    +    future<> slow_success = sleep(1s);
    +    future<> slow_exception = sleep(2s).then([] { throw 1; });
    +    return when_all(std::move(slow_success), std::move(slow_exception)
    +           ).then([] (auto tup) {
    +            std::cout << std::get<0>(tup).available() << "\n";
    +            std::cout << std::get<1>(tup).failed() << "\n";
    +            std::get<1>(tup).ignore_ready_future();
    +    });
    +}
    +

    Both futures are available() (resolved), but the second +has failed() (resulted in an exception instead of a value). +Note how we called ignore_ready_future() on this failed +future, because silently ignoring a failed future is considered a bug, +and will result in an “Exceptional future ignored” error message. More +typically, an application will log the failed future instead of ignoring +it.

    +

    The above example demonstrate that when_all() is +inconvenient and verbose to use properly. The results are wrapped in a +tuple, leading to verbose tuple syntax, and uses ready futures which +must all be inspected individually for an exception to avoid error +messages.

    +

    So Seastar also provides an easier to use +when_all_succeed() function. This function too returns a +future which resolves when all the given futures have resolved. If all +of them succeeded, it passes a tuple of the resulting values to +continuation, without wrapping each of them in a future first. +Sometimes, it could be tedious to unpack the tuple for consuming the +resulting values. In that case, then_unpack() can be used +in place of then(). then_unpack() unpacks the +returned tuple and passes its elements to the following continuation as +its parameters. If, however, one or more of the futures failed, +when_all_succeed() resolves to a failed future, containing +the exception from one of the failed futures. If more than one of the +given future failed, one of those will be passed on (it is unspecified +which one is chosen), and the rest will be silently ignored. For +example,

    +
    using namespace seastar;
    +future<> f() {
    +    using namespace std::chrono_literals;
    +    return when_all_succeed(sleep(1s), make_ready_future<int>(2),
    +                    make_ready_future<double>(3.5)
    +            ).then_unpack([] (int i, double d) {
    +        std::cout << i << " " << d << "\n";
    +    });
    +}
    +

    Note how the integer and double values held by the futures are +conveniently passed, individually to the continuation. Since +sleep() does not contain a value, it is waited for, but no +third value is passed to the continuation. That also means that if we +when_all_succeed() on several future<> +(without a value), the result is a +future<tuple<>>:

    +
    using namespace seastar;
    +future<> f() {
    +    using namespace std::chrono_literals;
    +    return when_all_succeed(sleep(1s), sleep(2s), sleep(3s)).then_unpack([] {
    +        return make_ready_future<>();
    +    });
    +}
    +

    This example simply waits for 3 seconds (the maximum of 1, 2 and 3 +seconds).

    +

    An example of when_all_succeed() with an exception:

    +
    using namespace seastar;
    +future<> f() {
    +    using namespace std::chrono_literals;
    +    return when_all_succeed(make_ready_future<int>(2),
    +                    make_exception_future<double>("oops")
    +            ).then_unpack([] (int i, double d) {
    +        std::cout << i << " " << d << "\n";
    +    }).handle_exception([] (std::exception_ptr e) {
    +        std::cout << "exception: " << e << "\n";
    +    });
    +}
    +

    In this example, one of the futures fails, so the result of +when_all_succeed is a failed future, so the normal +continuation is not run, and the handle_exception() +continuation is done.

    +

    TODO: also explain when_all and +when_all_succeed for vectors.

    +

    13 Semaphores

    +

    Seastar’s semaphores are the standard computer-science semaphores, +adapted for futures. A semaphore is a counter into which you can deposit +units or take them away. Taking units from the counter may wait if not +enough units are available.

    +

    13.1 Limiting parallelism with +semaphores

    +

    The most common use for a semaphore in Seastar is for limiting +parallelism, i.e., limiting the number of instances of some code which +can run in parallel. This can be important when each of the parallel +invocations uses a limited resource (e.g., memory) so letting an +unlimited number of them run in parallel can exhaust this resource.

    +

    Consider a case where an external source of events (e.g., an incoming +network request) causes an asynchronous function g() to be +called. Imagine that we want to limit the number of concurrent +g() operations to 100. I.e., If g() is started when 100 +other invocations are still ongoing, we want it to delay its real work +until one of the other invocations has completed. We can do this with a +semaphore:

    +
    seastar::future<> g() {
    +    static thread_local seastar::semaphore limit(100);
    +    return limit.wait(1).then([] {
    +        return slow(); // do the real work of g()
    +    }).finally([] {
    +        limit.signal(1);
    +    });
    +}
    +

    In this example, the semaphore starts with the counter at 100. The +asynchronous operation slow() is only started when we can +reduce the counter by one (wait(1)), and when +slow() is done, either successfully or with exception, the +counter is increased back by one (signal(1)). This way, +when 100 operations have already started their work and have not yet +finished, the 101st operation will wait, until one of the ongoing +operations finishes and returns a unit to the semaphore. This ensures +that at each time we have at most 100 concurrent slow() +operations running in the above code.

    +

    Note how we used a static thread_local semaphore, so +that all calls to g() from the same shard count towards the +same limit; As usual, a Seastar application is sharded so this limit is +separate per shard (CPU thread). This is usually fine, because sharded +applications consider resources to be separate per shard.

    +

    Luckily, the above code happens to be exception safe: +limit.wait(1) can throw an exception when it runs out of +memory (keeping a list of waiters), and in that case the semaphore +counter is not decreased but the continuations below are not run so it +is not increased either. limit.wait(1) can also return an +exceptional future when the semaphore is broken (we’ll discuss +this later) but in that case the extra signal() call is +ignored. Finally, slow() may also throw, or return an +exceptional future, but the finally() ensures the semaphore +is still increased.

    +

    However, as the application code becomes more complex, it becomes +harder to ensure that we never forget to call signal() +after the operation is done, regardless of which code path or exceptions +happen. As an example of what might go wrong, consider the following +buggy code snippet, which differs subtly from the above one, +and also appears, on first sight, to be correct:

    +
    seastar::future<> g() {
    +    static thread_local seastar::semaphore limit(100);
    +    return limit.wait(1).then([] {
    +        return slow().finally([] { limit.signal(1); });
    +    });
    +}
    +

    But this version is not exception safe: Consider +what happens if slow() throws an exception before returning +a future (this is different from slow() returning an +exceptional future - we discussed this difference in the section about +exception handling). In this case, we decreased the counter, but the +finally() will never be reached, and the counter will never +be increased back. There is a way to fix this code, by replacing the +call to slow() with +seastar::futurize_invoke(slow). But the point we’re trying +to make here is not how to fix buggy code, but rather that by using the +separate semaphore::wait() and +semaphore::signal() functions, you can very easily get +things wrong.

    +

    For exception safety, in C++ it is generally not recommended to have +separate resource acquisition and release functions. Instead, C++ offers +safer mechanisms for acquiring a resource (in this case semaphore units) +and later releasing it: lambda functions, and RAII (“resource +acquisition is initialization”):

    +

    The lambda-based solution is a function +seastar::with_semaphore() which is a shortcut for the code +in the examples above:

    +
    seastar::future<> g() {
    +    static thread_local seastar::semaphore limit(100);
    +    return seastar::with_semaphore(limit, 1, [] {
    +        return slow(); // do the real work of g()
    +    });
    +}
    +

    with_semaphore(), like the earlier code snippets, waits +for the given number of units from the semaphore, then runs the given +lambda, and when the future returned by the lambda is resolved, +with_semaphore() returns back the units to the semaphore. +with_semaphore() returns a future which only resolves after +all these steps are done.

    +

    The function seastar::get_units() is more general. It +provides an exception-safe alternative to +seastar::semaphore’s separate wait() and +signal() methods, based on C++’s RAII philosophy: The +function returns an opaque units object, which while held, keeps the +semaphore’s counter decreased - and as soon as this object is +destructed, the counter is increased back. With this interface you +cannot forget to increase the counter, or increase it twice, or increase +without decreasing: The counter will always be decreased once when the +units object is created, and if that succeeded, increased when the +object is destructed. When the units object is moved into a +continuation, no matter how this continuation ends, when the +continuation is destructed, the units object is destructed and the units +are returned to the semaphore’s counter. The above examples, written +with get_units(), looks like this:

    +
    seastar::future<> g() {
    +    static thread_local semaphore limit(100);
    +    return seastar::get_units(limit, 1).then([] (auto units) {
    +        return slow().finally([units = std::move(units)] {});
    +    });
    +}
    +

    Note the somewhat convoluted way that get_units() needs +to be used: The continuations must be nested because we need the +units object to be moved to the last continuation. If +slow() returns a future (and does not throw immediately), +the finally() continuation captures the units +object until everything is done, but does not run any code.

    +

    Seastar’s programmers should generally avoid using the the +semaphore::wait() and semaphore::signal() +functions directly, and always prefer either +with_semaphore() (when applicable) or +get_units().

    +

    13.2 Limiting resource use

    +

    Because semaphores support waiting for any number of units, not just +1, we can use them for more than simple limiting of the number +of parallel invocation. For example, consider we have an asynchronous +function using_lots_of_memory(size_t bytes), which uses +bytes bytes of memory, and we want to ensure that not more +than 1 MB of memory is used by all parallel invocations of this function +— and that additional calls are delayed until previous calls have +finished. We can do this with a semaphore:

    +
    seastar::future<> using_lots_of_memory(size_t bytes) {
    +    static thread_local seastar::semaphore limit(1000000); // limit to 1MB
    +    return seastar::with_semaphore(limit, bytes, [bytes] {
    +        // do something allocating 'bytes' bytes of memory
    +    });
    +}
    +

    Watch out that in the above example, a call to +using_lots_of_memory(2000000) will return a future that +never resolves, because the semaphore will never contain enough units to +satisfy the semaphore wait. using_lots_of_memory() should +probably check whether bytes is above the limit, and throw +an exception in that case. Seastar doesn’t do this for you.

    +

    13.3 Limiting parallelism of +loops

    +

    Above, we looked at a function g() which gets called by +some external event, and wanted to control its parallelism. In this +section, we look at parallelism of loops, which also can be controlled +with semaphores.

    +

    Consider the following simple loop:

    +
    #include <seastar/core/sleep.hh>
    +seastar::future<> slow() {
    +    std::cerr << ".";
    +    return seastar::sleep(std::chrono::seconds(1));
    +}
    +seastar::future<> f() {
    +    return seastar::repeat([] {
    +        return slow().then([] { return seastar::stop_iteration::no; });
    +    });
    +}
    +

    This loop runs the slow() function (taking one second to +complete) without any parallelism — the next slow() call +starts only when the previous one completed. But what if we do not need +to serialize the calls to slow(), and want to allow +multiple instances of it to be ongoing concurrently?

    +

    Naively, we could achieve more parallelism, by starting the next call +to slow() right after the previous call — ignoring the +future returned by the previous call to slow() and not +waiting for it to resolve:

    +
    seastar::future<> f() {
    +    return seastar::repeat([] {
    +        slow();
    +        return seastar::stop_iteration::no;
    +    });
    +}
    +

    But in this loop, there is no limit to the amount of parallelism — +millions of sleep() calls might be active in parallel, +before the first one ever returned. Eventually, this loop may consume +all available memory and crash.

    +

    Using a semaphore allows us to run many instances of +slow() in parallel, but limit the number of these parallel +instances to, in the following example, 100:

    +
    seastar::future<> f() {
    +    return seastar::do_with(seastar::semaphore(100), [] (auto& limit) {
    +        return seastar::repeat([&limit] {
    +            return limit.wait(1).then([&limit] {
    +                seastar::futurize_invoke(slow).finally([&limit] {
    +                    limit.signal(1);
    +                });
    +                return seastar::stop_iteration::no;
    +            });
    +        });
    +    });
    +}
    +

    Note how this code differs from the code we saw above for limiting +the number of parallel invocations of a function g():

    +
      +
    1. Here we cannot use a single thread_local semaphore. +Each call to f() has its loop with parallelism of 100, so +needs its own semaphore “limit”, kept alive during the loop +with do_with().
    2. +
    3. Here we do not wait for slow() to complete before +continuing the loop, i.e., we do not return the future +chain starting at futurize_invoke(slow). The loop continues +to the next iteration when a semaphore unit becomes available, while (in +our example) 99 other operations might be ongoing in the background and +we do not wait for them.
    4. +
    +

    In the examples in this section, we cannot use the +with_semaphore() shortcut. with_semaphore() +returns a future which only resolves after the lambda’s returned future +resolves. But in the above example, the loop needs to know when just the +semaphore units are available, to start the next iteration — and not +wait for the previous iteration to complete. We could not achieve that +with with_semaphore(). But the more general exception-safe +idiom, seastar::get_units(), can be used in this case, and +is recommended:

    +
    seastar::future<> f() {
    +    return seastar::do_with(seastar::semaphore(100), [] (auto& limit) {
    +        return seastar::repeat([&limit] {
    +            return seastar::get_units(limit, 1).then([] (auto units) {
    +                slow().finally([units = std::move(units)] {});
    +                return seastar::stop_iteration::no;
    +            });
    +        });
    +    });
    +}
    +

    The above examples are not realistic, because they have a +never-ending loop and the future returned by f() will never +resolve. In more realistic cases, the loop has an end, and at the end of +the loop we need to wait for all the background operations which the +loop started. We can do this by wait()ing on the original +count of the semaphore: When the full count is finally available, it +means that all the operations have completed. For example, the +following loop ends after 456 iterations:

    +
    seastar::future<> f() {
    +    return seastar::do_with(seastar::semaphore(100), [] (auto& limit) {
    +        return seastar::do_for_each(boost::counting_iterator<int>(0),
    +                boost::counting_iterator<int>(456), [&limit] (int i) {
    +            return seastar::get_units(limit, 1).then([] (auto units) {
    +                slow().finally([units = std::move(units)] {});
    +            });
    +        }).finally([&limit] {
    +            return limit.wait(100);
    +        });
    +    });
    +}
    +

    The last finally is what ensures that we wait for the +last operations to complete: After the repeat loop ends +(whether successfully or prematurely because of an exception in one of +the iterations), we do a wait(100) to wait for the +semaphore to reach its original value 100, meaning that all operations +that we started have completed. Without this finally, the +future returned by f() will resolve before all the +iterations of the loop actually completed (the last 100 may still be +running).

    +

    In the idiom we saw in the above example, the same semaphore is used +both for limiting the number of background operations, and later to wait +for all of them to complete. Sometimes, we want several different loops +to use the same semaphore to limit their total parallelism. In +that case we must use a separate mechanism for waiting for the +completion of the background operations started by the loop. The most +convenient way to wait for ongoing operations is using a gate, which we +will describe in detail later. A typical example of a loop whose +parallelism is limited by an external semaphore:

    +
    thread_local seastar::semaphore limit(100);
    +seastar::future<> f() {
    +    return seastar::do_with(seastar::gate(), [] (auto& gate) {
    +        return seastar::do_for_each(boost::counting_iterator<int>(0),
    +                boost::counting_iterator<int>(456), [&gate] (int i) {
    +            return seastar::get_units(limit, 1).then([&gate] (auto units) {
    +                gate.enter();
    +                seastar::futurize_invoke(slow).finally([&gate, units = std::move(units)] {
    +                    gate.leave();
    +                });
    +            });
    +        }).finally([&gate] {
    +            return gate.close();
    +        });
    +    });
    +}
    +

    In this code, we use the external semaphore limit to +limit the number of concurrent operations, but additionally have a gate +specific to this loop to help us wait for all ongoing operations to +complete.

    +

    TODO: also allow get_units() or something similar on a +gate, and use that instead of the explicit gate.enter/gate.leave.

    +

    TODO: say something about semaphore fairness - if someone is waiting +for a lot of units and later someone asks for 1 unit, will both wait or +will the request for 1 unit be satisfied?

    +

    TODO: say something about broken semaphores? (or in later section +especially about breaking/closing/shutting down/etc?)

    +

    TODO: Have a few paragraphs, or even a section, on additional uses of +semaphores. One is for mutual exclusion using semaphore(1) - we need to +explain why although why in Seastar we don’t have multiple threads +touching the same data, if code is composed of different continuations +(i.e., a fiber) it can switch to a different fiber in the middle, so if +data needs to be protected between two continuations, it needs a mutex. +Another example is something akin to wait_all: we start with a +semaphore(0), run a known number N of asynchronous functions with +finally sem.signal(), and from all this return the future sem.wait(N). +PERHAPS even have a separate section on mutual exclusion, where we begin +with semaphore(1) but also mention shared_mutex

    +

    14 Pipes

    +

    Seastar’s pipe<T> is a mechanism to transfer data +between two fibers, one producing data, and the other consuming it. It +has a fixed-size buffer to ensures a balanced execution of the two +fibers, because the producer fiber blocks when it writes to a full pipe, +until the consumer fiber gets to run and read from the pipe.

    +

    A pipe<T> resembles a Unix pipe, in that it has a +read side, a write side, and a fixed-sized buffer between them, and +supports either end to be closed independently (and EOF or broken pipe +when using the other side). A pipe<T> object holds +the reader and write sides of the pipe as two separate objects. These +objects can be moved into two different fibers. Importantly, if one of +the pipe ends is destroyed (i.e., the continuations capturing it end), +the other end of the pipe will stop blocking, so the other fiber will +not hang.

    +

    The pipe’s read and write interfaces are future-based blocking. I.e., +the write() and read() methods return a future which is fulfilled when +the operation is complete. The pipe is single-reader single-writer, +meaning that until the future returned by read() is fulfilled, read() +must not be called again (and same for write). Note: The pipe reader and +writer are movable, but not copyable. It is often convenient to +wrap each end in a shared pointer, so it can be copied (e.g., used in an +std::function which needs to be copyable) or easily captured into +multiple continuations.

    +

    15 Shutting down a service with a +gate

    +

    Consider an application which has some long operation +slow(), and many such operations may be started at any +time. A number of slow() operations may even even be active +in parallel. Now, you want to shut down this service, but want to make +sure that before that, all outstanding operations are completed. +Moreover, you don’t want to allow new slow() operations to +start while the shut-down is in progress.

    +

    This is the purpose of a seastar::gate. A gate +g maintains an internal counter of operations in progress. +We call g.enter() when entering an operation (i.e., before +running slow()), and call g.leave() when +leaving the operation (when a call to slow() completed). +The method g.close() closes the gate, which means +it forbids any further calls to g.enter() (such attempts +will generate an exception); Moreover g.close() returns a +future which resolves when all the existing operations have completed. +In other words, when g.close() resolves, we know that no +more invocations of slow() can be in progress - because the +ones that already started have completed, and new ones could not have +started.

    +

    The construct

    +
    seastar::with_gate(g, [] { return slow(); })
    +

    can be used as a shortcut to the idiom

    +
    g.enter();
    +slow().finally([&g] { g.leave(); });
    +

    Here is a typical example of using a gate:

    +
    #include <seastar/core/sleep.hh>
    +#include <seastar/core/gate.hh>
    +#include <boost/iterator/counting_iterator.hpp>
    +
    +seastar::future<> slow(int i) {
    +    std::cerr << "starting " << i << "\n";
    +    return seastar::sleep(std::chrono::seconds(10)).then([i] {
    +        std::cerr << "done " << i << "\n";
    +    });
    +}
    +seastar::future<> f() {
    +    return seastar::do_with(seastar::gate(), [] (auto& g) {
    +        return seastar::do_for_each(boost::counting_iterator<int>(1),
    +                boost::counting_iterator<int>(6),
    +                [&g] (int i) {
    +            seastar::with_gate(g, [i] { return slow(i); });
    +            // wait one second before starting the next iteration
    +            return seastar::sleep(std::chrono::seconds(1));
    +        }).then([&g] {
    +            seastar::sleep(std::chrono::seconds(1)).then([&g] {
    +                // This will fail, because it will be after the close()
    +                seastar::with_gate(g, [] { return slow(6); });
    +            });
    +            return g.close();
    +        });
    +    });
    +}
    +

    In this example, we have a function +future<> slow() taking 10 seconds to complete. We run +it in a loop 5 times, waiting 1 second between calls, and surround each +call with entering and leaving the gate (using with_gate). +After the 5th call, while all calls are still ongoing (because each +takes 10 seconds to complete), we close the gate and wait for it before +exiting the program. We also test that new calls cannot begin after +closing the gate, by trying to enter the gate again one second after +closing it.

    +

    The output of this program looks like this:

    +
    starting 1
    +starting 2
    +starting 3
    +starting 4
    +starting 5
    +WARNING: exceptional future ignored of type 'seastar::gate_closed_exception': gate closed
    +done 1
    +done 2
    +done 3
    +done 4
    +done 5
    +

    Here, the invocations of slow() were started at 1 second +intervals. After the “starting 5” message, we closed the +gate and another attempt to use it resulted in a +seastar::gate_closed_exception, which we ignored and hence +this message. At this point the application waits for the future +returned by g.close(). This will happen once all the +slow() invocations have completed: Immediately after +printing “done 5”, the test program stops.

    +

    As explained so far, a gate can prevent new invocations of an +operation, and wait for any in-progress operations to complete. However, +these in-progress operations may take a very long time to complete. +Often, a long operation would like to know that a shut-down has been +requested, so it could stop its work prematurely. An operation can check +whether its gate was closed by calling the gate’s check() +method: If the gate is already closed, the check() method +throws an exception (the same +seastar::gate_closed_exception that enter() +would throw at that point). The intent is that the exception will cause +the operation calling it to stop at this point.

    +

    In the previous example code, we had an un-interruptible operation +slow() which slept for 10 seconds. Let’s replace it by a +loop of 10 one-second sleeps, calling g.check() each +second:

    +
    seastar::future<> slow(int i, seastar::gate &g) {
    +    std::cerr << "starting " << i << "\n";
    +    return seastar::do_for_each(boost::counting_iterator<int>(0),
    +                                boost::counting_iterator<int>(10),
    +            [&g] (int) {
    +        g.check();
    +        return seastar::sleep(std::chrono::seconds(1));
    +    }).finally([i] {
    +        std::cerr << "done " << i << "\n";
    +    });
    +}
    +

    Now, just one second after gate is closed (after the “starting 5” +message is printed), all the slow() operations notice the +gate was closed, and stop. As expected, the exception stops the +do_for_each() loop, and the finally() +continuation is performed so we see the “done” messages for all five +operations.

    +

    16 Introducing shared-nothing +programming

    +

    TODO: Explain in more detail Seastar’s shared-nothing approach where +the entire memory is divided up-front to cores, malloc/free and pointers +only work on one core.

    +

    TODO: Introduce our shared_ptr (and lw_shared_ptr) and sstring and +say the standard ones use locked instructions which are unnecessary when +we assume these objects (like all others) are for a single thread. Our +futures and continuations do the same.

    +

    17 More about Seastar’s event +loop

    +

    TODO: Mention the event loop (scheduler). remind that continuations +on the same thread do not run in parallel, so do not need locks, atomic +variables, etc (different threads shouldn’t access the same data - more +on that below). continuations obviously must not use blocking +operations, or they block the whole thread.

    +

    TODO: Talk about polling that we currently do, and how today even +sleep() or waiting for incoming connections or whatever, takes 100% of +all CPUs.

    +

    18 Introducing Seastar’s network +stack

    +

    TODO: Mention the two modes of operation: Posix and native (i.e., +take a L2 (Ethernet) interface (vhost or dpdk) and on top of it we built +(in Seastar itself) an L3 interface (TCP/IP)).

    +

    For optimal performance, Seastar’s network stack is sharded just like +Seastar applications are: each shard (thread) takes responsibility for a +different subset of the connections. Each incoming connection is +directed to one of the threads, and after a connection is established, +it continues to be handled on the same thread.

    +

    In the examples we saw earlier, main() ran our function +f() only once, on the first thread. Unless the server is +run with the "-c1" option (one thread only), this will mean +that any connection arriving to a different thread will not be handled. +So in all the examples below, we will need to run the same service loop +on all cores. We can easily do this with the smp::submit_to +function:

    +
    seastar::future<> service_loop();
    +
    +seastar::future<> f() {
    +    return seastar::parallel_for_each(boost::irange<unsigned>(0, seastar::smp::count),
    +            [] (unsigned c) {
    +        return seastar::smp::submit_to(c, service_loop);
    +    });
    +}
    +

    Here we ask each of Seastar cores (from 0 to +smp::count-1) to run the same function +service_loop(). Each of these invocations returns a future, +and f() will return when all of them have returned (in the +examples below, they will never return - we will discuss shutting down +services in later sections).

    +

    We begin with a simple example of a TCP network server written in +Seastar. This server repeatedly accepts connections on TCP port 1234, +and returns an empty response:

    +
    #include <seastar/core/seastar.hh>
    +#include <seastar/core/reactor.hh>
    +#include <seastar/core/future-util.hh>
    +#include <seastar/net/api.hh>
    +
    +seastar::future<> service_loop() {
    +    return seastar::do_with(seastar::listen(seastar::make_ipv4_address({1234})),
    +            [] (auto& listener) {
    +        return seastar::keep_doing([&listener] () {
    +            return listener.accept().then(
    +                [] (seastar::accept_result res) {
    +                    std::cout << "Accepted connection from " << res.remote_address << "\n";
    +            });
    +        });
    +    });
    +}
    +

    This code works as follows:

    +
      +
    1. The listen() call creates a server_socket +object, listener, which listens on TCP port 1234 (on any +network interface).
    2. +
    3. We use do_with() to ensure that the listener socket +lives throughout the loop.
    4. +
    5. To handle one connection, we call listener’s +accept() method. This method returns a +future<accept_result>, i.e., is eventually resolved +with an incoming TCP connection from a client +(accept_result.connection) and the client’s IP address and +port (accept_result.remote_address).
    6. +
    7. To repeatedly accept new connections, we use the +keep_doing() loop idiom. keep_doing() runs its +lambda parameter over and over, starting the next iteration as soon as +the future returned by the previous iteration completes. The iterations +only stop if an exception is encountered. The future returned by +keep_doing() itself completes only when the iteration stops +(i.e., only on exception).
    8. +
    +

    Output from this server looks like the following example:

    +
    $ ./a.out
    +Accepted connection from 127.0.0.1:47578
    +Accepted connection from 127.0.0.1:47582
    +...
    +

    If you run the above example server immediately after killing the +previous server, it often fails to start again, complaining that:

    +
    $ ./a.out
    +program failed with uncaught exception: bind: Address already in use
    +

    This happens because by default, Seastar refuses to reuse the local +port if there are any vestiges of old connections using that port. In +our silly server, because the server is the side which first closes the +connection, each connection lingers for a while in the +“TIME_WAIT” state after being closed, and these prevent +listen() on the same port from succeeding. Luckily, we can +give listen an option to work despite these remaining +TIME_WAIT. This option is analogous to +socket(7)’s SO_REUSEADDR option:

    +
        seastar::listen_options lo;
    +    lo.reuse_address = true;
    +    return seastar::do_with(seastar::listen(seastar::make_ipv4_address({1234}), lo),
    +

    Most servers will always turn on this reuse_address +listen option. Stevens’ book “Unix Network Programming” even says that +“All TCP servers should specify this socket option to allow the server +to be restarted”. Therefore in the future Seastar should probably +default to this option being on — even if for historic reasons this is +not the default in Linux’s socket API.

    +

    Let’s advance our example server by outputting some canned response +to each connection, instead of closing each connection immediately with +an empty reply.

    +
    #include <seastar/core/seastar.hh>
    +#include <seastar/core/reactor.hh>
    +#include <seastar/core/future-util.hh>
    +#include <seastar/net/api.hh>
    +
    +const char* canned_response = "Seastar is the future!\n";
    +
    +seastar::future<> service_loop() {
    +    seastar::listen_options lo;
    +    lo.reuse_address = true;
    +    return seastar::do_with(seastar::listen(seastar::make_ipv4_address({1234}), lo),
    +            [] (auto& listener) {
    +        return seastar::keep_doing([&listener] () {
    +            return listener.accept().then(
    +                    [] (seastar::accept_result res) {
    +                auto s = std::move(res.connection);
    +                auto out = s.output();
    +                return seastar::do_with(std::move(s), std::move(out),
    +                        [] (auto& s, auto& out) {
    +                    return out.write(canned_response).then([&out] {
    +                        return out.close();
    +                    });
    +                });
    +            });
    +        });
    +    });
    +}
    +

    The new part of this code begins by taking the +connected_socket’s output(), which returns an +output_stream<char> object. On this output stream +out we can write our response using the +write() method. The simple-looking write() +operation is in fact a complex asynchronous operation behind the scenes, +possibly causing multiple packets to be sent, retransmitted, etc., as +needed. write() returns a future saying when it is ok to +write() again to this output stream; This does not +necessarily guarantee that the remote peer received all the data we sent +it, but it guarantees that the output stream has enough buffer space (or +in the TCP case, there is enough room in the TCP congestion window) to +allow another write to begin.

    +

    After write()ing the response to out, the +example code calls out.close() and waits for the future it +returns. This is necessary, because write() attempts to +batch writes so might not have yet written anything to the TCP stack at +this point, and only when close() concludes can we be sure that all the +data we wrote to the output stream has actually reached the TCP stack — +and only at this point we may finally dispose of the out +and s objects.

    +

    Indeed, this server returns the expected response:

    +
    $ telnet localhost 1234
    +...
    +Seastar is the future!
    +Connection closed by foreign host.
    +

    In the above example we only saw writing to the socket. Real servers +will also want to read from the socket. The +connected_socket’s input() method returns an +input_stream<char> object which can be used to read +from the socket. The simplest way to read from this stream is using the +read() method which returns a future +temporary_buffer<char>, containing some more bytes +read from the socket — or an empty buffer when the remote end shut down +the connection.

    +

    temporary_buffer<char> is a convenient and safe +way to pass around byte buffers that are only needed temporarily (e.g., +while processing a request). As soon as this object goes out of scope +(by normal return, or exception), the memory it holds gets automatically +freed. Ownership of buffer can also be transferred by +std::move()ing it. We’ll discuss +temporary_buffer in more details in a later section.

    +

    Let’s look at a simple example server involving both reads an writes. +This is a simple echo server, as described in RFC 862: The server +listens for connections from the client, and once a connection is +established, any data received is simply sent back - until the client +closes the connection.

    +
    #include <seastar/core/seastar.hh>
    +#include <seastar/core/reactor.hh>
    +#include <seastar/core/future-util.hh>
    +#include <seastar/net/api.hh>
    +
    +seastar::future<> handle_connection(seastar::connected_socket s) {
    +    auto out = s.output();
    +    auto in = s.input();
    +    return do_with(std::move(s), std::move(out), std::move(in),
    +            [] (auto& s, auto& out, auto& in) {
    +        return seastar::repeat([&out, &in] {
    +            return in.read().then([&out] (auto buf) {
    +                if (buf) {
    +                    return out.write(std::move(buf)).then([&out] {
    +                        return out.flush();
    +                    }).then([] {
    +                        return seastar::stop_iteration::no;
    +                    });
    +                } else {
    +                    return seastar::make_ready_future<seastar::stop_iteration>(
    +                            seastar::stop_iteration::yes);
    +                }
    +            });
    +        }).then([&out] {
    +            return out.close();
    +        });
    +    });
    +}
    +
    +seastar::future<> service_loop_3() {
    +    seastar::listen_options lo;
    +    lo.reuse_address = true;
    +    return seastar::do_with(seastar::listen(seastar::make_ipv4_address({1234}), lo),
    +            [] (auto& listener) {
    +        return seastar::keep_doing([&listener] () {
    +            return listener.accept().then(
    +                    [] (seastar::accept_result res) {
    +                // Note we ignore, not return, the future returned by
    +                // handle_connection(), so we do not wait for one
    +                // connection to be handled before accepting the next one.
    +                (void)handle_connection(std::move(res.connection)).handle_exception(
    +                        [] (std::exception_ptr ep) {
    +                    fmt::print(stderr, "Could not handle connection: {}\n", ep);
    +                });
    +            });
    +        });
    +    });
    +}
    +

    The main function service_loop() loops accepting new +connections, and for each connection calls +handle_connection() to handle this connection. Our +handle_connection() returns a future saying when handling +this connection completed, but importantly, we do +not wait for this future: Remember that +keep_doing will only start the next iteration when the +future returned by the previous iteration is resolved. Because we want +to allow parallel ongoing connections, we don’t want the next +accept() to wait until the previously accepted connection +was closed. So we call handle_connection() to start the +handling of the connection, but return nothing from the continuation, +which resolves that future immediately, so keep_doing will +continue to the next accept().

    +

    This demonstrates how easy it is to run parallel fibers +(chains of continuations) in Seastar - When a continuation runs an +asynchronous function but ignores the future it returns, the +asynchronous operation continues in parallel, but never waited for.

    +

    It is often a mistake to silently ignore an exception, so if the +future we’re ignoring might resolve with an except, it is recommended to +handle this case, e.g. using a handle_exception() +continuation. In our case, a failed connection is fine (e.g., the client +might close its connection will we’re sending it output), so we did not +bother to handle the exception.

    +

    The handle_connection() function itself is +straightforward — it repeatedly calls read() read on the +input stream, to receive a temporary_buffer with some data, +and then moves this temporary buffer into a write() call on +the output stream. The buffer will eventually be freed, automatically, +when the write() is done with it. When read() +eventually returns an empty buffer signifying the end of input, we stop +repeat’s iteration by returning a +stop_iteration::yes.

    +

    19 Sharded services

    +

    In the previous section we saw that a Seastar application usually +needs to run its code on all available CPU cores. We saw that the +seastar::smp::submit_to() function allows the main +function, which initially runs only on the first core, to start the +server’s code on all seastar::smp::count cores.

    +

    However, usually one needs not just to run code on each core, but +also to have an object that contains the state of this code. +Additionally, one may like to interact with those different objects, and +also have a mechanism to stop the service running on the different +cores.

    +

    The seastar::sharded<T> template provides a +structured way create such a sharded service. It creates a +separate object of type T in each core, and provides +mechanisms to interact with those copies, to start some code on each, +and finally to cleanly stop the service.

    +

    To use seastar::sharded, first create a class for the +object holding the state of the service on a single core. For +example:

    +
    #include <seastar/core/future.hh>
    +#include <iostream>
    +
    +class my_service {
    +public:
    +    std::string _str;
    +    my_service(const std::string& str) : _str(str) { }
    +    seastar::future<> run() {
    +        std::cerr << "running on " << seastar::engine().cpu_id() <<
    +            ", _str = " << _str << "\n";
    +        return seastar::make_ready_future<>();
    +    }
    +    seastar::future<> stop() {
    +        return seastar::make_ready_future<>();
    +    }
    +};
    +

    The only mandatory method in this object is stop(), +which will be called in each core when we want to stop the sharded +service and want to wait until it stops on all cores.

    +

    Now let’s see how to use it:

    +
    #include <seastar/core/sharded.hh>
    +
    +seastar::sharded<my_service> s;
    +
    +seastar::future<> f() {
    +    return s.start(std::string("hello")).then([] {
    +        return s.invoke_on_all([] (my_service& local_service) {
    +            return local_service.run();
    +        });
    +    }).then([] {
    +        return s.stop();
    +    });
    +}
    +

    The s.start() starts the service by creating a +my_service object on each of the cores. The arguments to +s.start(), if any (in this example, +std::string("hello")), are passed to +my_service’s constructor.

    +

    But s.start() did not start running any code yet +(besides the object’s constructor). For that, we have the +s.invoke_on_all() which runs the given lambda on all the +cores - giving each lambda the local my_service object on +that core. In this example, we have a run() method on each +object, so we run that.

    +

    Finally, at the end of the run we want to give the service on all +cores a chance to shut down cleanly, so we call s.stop(). +This will call the stop() method on each core’s object, and +wait for all of them to finish. Calling s.stop() before +destroying s is mandatory - Seastar will warn you if you +forget to do it.

    +

    In addition to invoke_on_all() which runs the same code +on all shards, another feature a sharded service often needs is for one +shard to invoke code another specific shard. This is done by calling the +sharded service’s invoke_on() method. For example:

    +
    seastar::sharded<my_service> s;
    +...
    +return s.invoke_on(0, [] (my_service& local_service) {
    +    std::cerr << "invoked on " << seastar::engine().cpu_id() <<
    +        ", _str = " << local_service._str << "\n";
    +});
    +

    This runs the lambda function on shard 0, with a reference to the +local my_service object on that shard.

    +

    20 Shutting down cleanly

    +

    TODO: Handling interrupt, shutting down services, etc.

    +

    Move the seastar::gate section here.

    +

    21 Command line options

    +

    21.1 Standard Seastar command-line +options

    +

    All Seastar applications accept a standard set of command-line +arguments, such as those we’ve already seen above: The -c +option for controlling the number of threads used, or -m +for determining the amount of memory given to the application.

    +

    TODO: list and explain more of these options.

    +

    Every Seastar application also accepts the -h (or +--help) option, which lists and explains all the available +options — the standard Seastar ones, and the user-defined ones as +explained below.

    +

    21.2 User-defined command-line +options

    +

    Seastar parses the command line options (argv[]) when it +is passed to app_template::run(), looking for its own +standard options. Therefore, it is not recommended that the application +tries to parse argv[] on its own because the application +might not understand some of the standard Seastar options and not be +able to correctly skip them.

    +

    Rather, applications which want to have command-line options of their +own should tell Seastar’s command line parser of these additional +application-specific options, and ask Seastar’s command line parser to +recognize them too. Seastar’s command line parser is actually the Boost +library’s boost::program_options. An application adds its +own option by using the add_options() and +add_positional_options() methods on the +app_template to define options, and later calling +configuration() to retrieve the setting of these options. +For example,

    +
    #include <iostream>
    +#include <seastar/core/app-template.hh>
    +#include <seastar/core/reactor.hh>
    +int main(int argc, char** argv) {
    +    seastar::app_template app;
    +    namespace bpo = boost::program_options;
    +    app.add_options()
    +        ("flag", "some optional flag")
    +        ("size,s", bpo::value<int>()->default_value(100), "size")
    +        ;
    +    app.add_positional_options({
    +       { "filename", bpo::value<std::vector<seastar::sstring>>()->default_value({}),
    +         "sstable files to verify", -1}
    +    });
    +    app.run(argc, argv, [&app] {
    +        auto& args = app.configuration();
    +        if (args.count("flag")) {
    +            std::cout << "Flag is on\n";
    +        }
    +        std::cout << "Size is " << args["size"].as<int>() << "\n";
    +        auto& filenames = args["filename"].as<std::vector<seastar::sstring>>();
    +        for (auto&& fn : filenames) {
    +            std::cout << fn << "\n";
    +        }
    +        return seastar::make_ready_future<>();
    +    });
    +    return 0;
    +}
    +

    In this example, we add via add_options() two +application-specific options: --flag is an optional +parameter which doesn’t take any additional arguments, and +--size (or -s) takes an integer value, which +defaults (if this option is missing) to 100. Additionally, we ask via +add_positional_options() that an unlimited number of +arguments that do not begin with a “-” — the so-called +positional arguments — be collected to a vector of strings +under the “filename” option. Some example outputs from this program:

    +
    $ ./a.out
    +Size is 100
    +$ ./a.out --flag
    +Flag is on
    +Size is 100
    +$ ./a.out --flag -s 3
    +Flag is on
    +Size is 3
    +$ ./a.out --size 3 hello hi
    +Size is 3
    +hello
    +hi
    +$ ./a.out --filename hello --size 3 hi
    +Size is 3
    +hello
    +hi
    +

    boost::program_options has more powerful features, such +as required options, option checking and combining, various option +types, and more. Please refer to Boost’s documentation for more +information.

    +

    22 Debugging a Seastar program

    +

    22.1 Debugging ignored +exceptions

    +

    If a future resolves with an exception, and the application neglects +to handle that exception or to explicitly ignore it, the application may +have missed an important problem. This is likely to be an application +bug.

    +

    Therefore, Seastar prints a warning message to the log if a future is +destroyed when it stores an exception that hasn’t been handled.

    +

    For example, consider this code:

    +
    #include <seastar/core/future.hh>
    +#include <seastar/core/sleep.hh>
    +#include <seastar/core/app-template.hh>
    +
    +class myexception {};
    +
    +seastar::future<> g() {
    +    return seastar::make_exception_future<>(myexception());
    +}
    +
    +seastar::future<> f() {
    +    g();
    +    return seastar::sleep(std::chrono::seconds(1));
    +}
    +
    +int main(int argc, char** argv) {
    +    seastar::app_template app;
    +    app.run(argc, argv, f);
    +}
    +

    Here, the main function f() calls g(), but +doesn’t do anything with the future it returns. But this future resolves +with an exception, and this exception is silently ignored. So Seastar +prints this warning message about the ignored exception:

    +
    WARN  2020-03-31 11:08:09,208 [shard 0] seastar - Exceptional future ignored: myexception, backtrace:   /lib64/libasan.so.5+0x6ce7f
    +  0x1a64193
    +  0x1a6265f
    +  0xf326cc
    +  0xeaf1a0
    +  0xeaffe4
    +  0xead7be
    +  0xeb5917
    +  0xee2477
    +  0xec312e
    +  0xec8fcf
    +  0xeec765
    +  0xee1b29
    +  0xed9fab
    +  0xec27c8
    +  0xec867f
    +  0xf00acc
    +  0xef179d
    +  0xef1824
    +  0xef18b5
    +  0xee4827
    +  0xee470f
    +  0xf00f81
    +  0xebac29
    +  0xeb9095
    +  0xeb9174
    +  0xeb925a
    +  0xeb9964
    +  0xebef89
    +  0x10f74c3
    +  0x10fb439
    +  0x11005fd
    +  0xec4f08
    +  0xec2f43
    +  0xec3461
    +  0xeadabe
    +  /lib64/libc.so.6+0x271a2
    +  0xead52d
    +

    This message says that an exceptional future was ignored, and that +the type of the exception was “myexception”. The type of +the exception is usually not enough to pinpoint where the problem +happened, so the warning message also includes the backtrace - the call +chain - leading to where the exceptional future was destroyed. The +backtrace is given as a list of addresses, where code in other shared +libraries is written as a shared library plus offset (when ASLR is +enabled, the shared libraries are mapped in a different address each +time).

    +

    Seastar includes a utility, seastar-addr2line, for +translating these addresses into readable backtraces including exact +method names, source files and line numbers. This utility needs the +unstripped executable. Typically, a stripped executable is used +for production, but an unstripped copy is kept separately to be used in +debugging - including seastar-addr2line.

    +

    To decode the backtrace, we run

    +
    seastar-addr2line -e a.out
    +

    And then paste the list of addresses in the warning message, and +conclude with a control-D (it’s also possible, if you want, +to put the list of addresses in the seastar-addr2line +command line). The result looks like this:

    +
    void seastar::backtrace<seastar::current_backtrace()::{lambda(seastar::frame)#1}>(seastar::current_backtrace()::{lambda(seastar::frame)#1}&&) at include/seastar/util/backtrace.hh:56
    +seastar::current_backtrace() at src/util/backtrace.cc:84
    +seastar::report_failed_future(std::__exception_ptr::exception_ptr const&) at src/core/future.cc:116
    +seastar::future_state_base::~future_state_base() at include/seastar/core/future.hh:335
    +seastar::future_state<>::~future_state() at include/seastar/core/future.hh:414
    + (inlined by) seastar::future<>::~future() at include/seastar/core/future.hh:990
    +f() at test.cc:12
    +std::_Function_handler<seastar::future<> (), seastar::future<> (*)()>::_M_invoke(std::_Any_data const&) at /usr/include/c++/9/bits/std_function.h:286
    +std::function<seastar::future<> ()>::operator()() const at /usr/include/c++/9/bits/std_function.h:690
    +seastar::app_template::run(int, char**, std::function<seastar::future<> ()>&&)::{lambda()#1}::operator()() const at src/core/app-template.cc:131
    +std::_Function_handler<seastar::future<int> (), seastar::app_template::run(int, char**, std::function<seastar::future<> ()>&&)::{lambda()#1}>::_M_invoke(std::_Any_data const&) at /usr/include/c++/9/bits/std_function.h:286
    +std::function<seastar::future<int> ()>::operator()() const at /usr/include/c++/9/bits/std_function.h:690
    +seastar::future<int> seastar::futurize<seastar::future<int> >::invoke<std::function<seastar::future<int> ()>&>(std::function<seastar::future<int> ()>&) at include/seastar/core/future.hh:1670
    +auto seastar::futurize_invoke<std::function<seastar::future<int> ()>&>(std::function<seastar::future<int> ()>&) at include/seastar/core/future.hh:1754
    +seastar::app_template::run(int, char**, std::function<seastar::future<int> ()>&&)::{lambda()#1}::operator()() at src/core/app-template.cc:120 (discriminator 4)
    +std::_Function_handler<void (), seastar::app_template::run(int, char**, std::function<seastar::future<int> ()>&&)::{lambda()#1}>::_M_invoke(std::_Any_data const&) at /usr/include/c++/9/bits/std_function.h:300
    +std::function<void ()>::operator()() const at /usr/include/c++/9/bits/std_function.h:690
    +seastar::apply_helper<std::function<void ()>&, std::tuple<>&&, std::integer_sequence<unsigned long> >::apply(std::function<void ()>&, std::tuple<>&&) at include/seastar/core/apply.hh:36
    +auto seastar::apply<std::function<void ()>&>(std::function<void ()>&, std::tuple<>&&) at include/seastar/core/apply.hh:44
    +seastar::future<> seastar::futurize<void>::apply<std::function<void ()>&>(std::function<void ()>&, std::tuple<>&&) at include/seastar/core/future.hh:1634
    +auto seastar::futurize_apply<std::function<void ()>&>(std::function<void ()>&, std::tuple<>&&) at include/seastar/core/future.hh:1766
    +seastar::future<>::then<std::function<void ()>, seastar::future<> >(std::function<void ()>&&)::{lambda()#1}::operator()() at include/seastar/core/future.hh:1191
    +seastar::noncopyable_function<seastar::future<> ()>::direct_vtable_for<seastar::future<>::then<std::function<void ()>, seastar::future<> >(std::function<void ()>&&)::{lambda()#1}>::call(seastar::noncopyable_function<seastar::future<> ()> const*) at include/seastar/util/noncopyable_function.hh:101
    +seastar::noncopyable_function<seastar::future<> ()>::operator()() const at include/seastar/util/noncopyable_function.hh:184
    +seastar::apply_helper<seastar::noncopyable_function<seastar::future<> ()>, std::tuple<>&&, std::integer_sequence<unsigned long> >::apply(seastar::noncopyable_function<seastar::future<> ()>&&, std::tuple<>&&) at include/seastar/core/apply.hh:36
    +auto seastar::apply<seastar::noncopyable_function<seastar::future<> ()>>(seastar::noncopyable_function<seastar::future<> ()>&&, std::tuple<>&&) at include/seastar/core/apply.hh:44
    +seastar::future<> seastar::futurize<seastar::future<> >::apply<seastar::noncopyable_function<seastar::future<> ()>>(seastar::noncopyable_function<seastar::future<> ()>&&, std::tuple<>&&) at include/seastar/core/future.hh:1660
    +seastar::future<>::then_impl_nrvo<seastar::noncopyable_function<seastar::future<> ()>, seastar::future<> >(seastar::noncopyable_function<seastar::future<> ()>&&)::{lambda()#1}::operator()() const::{lambda(seastar::internal::promise_base_with_type<>&, seastar::future_state<>&&)#1}::operator()(seastar::internal::promise_base_with_type<>, seastar::future_state<>) at include/seastar/core/future.hh:1213
    +seastar::continuation<seastar::internal::promise_base_with_type<>, seastar::future<>::then_impl_nrvo<seastar::noncopyable_function<seastar::future<> ()>, seastar::future<> >(seastar::noncopyable_function<seastar::future<> ()>&&)::{lambda()#1}::operator()() const::{lambda(seastar::internal::promise_base_with_type<>&, seastar::future_state<>&&)#1}>::run_and_dispose() at include/seastar/core/future.hh:509
    +seastar::reactor::run_tasks(seastar::reactor::task_queue&) at src/core/reactor.cc:2124
    +seastar::reactor::run_some_tasks() at src/core/reactor.cc:2539 (discriminator 2)
    +seastar::reactor::run() at src/core/reactor.cc:2694
    +seastar::app_template::run_deprecated(int, char**, std::function<void ()>&&) at src/core/app-template.cc:199 (discriminator 1)
    +seastar::app_template::run(int, char**, std::function<seastar::future<int> ()>&&) at src/core/app-template.cc:115 (discriminator 2)
    +seastar::app_template::run(int, char**, std::function<seastar::future<> ()>&&) at src/core/app-template.cc:130 (discriminator 2)
    +main at test.cc:19 (discriminator 1)
    +__libc_start_main at /usr/src/debug/glibc-2.30-34-g994e529a37/csu/../csu/libc-start.c:308
    +_start at ??:?
    +

    Most of the lines at the bottom of this backtrace are not +interesting, and just showing the internal details of how Seastar ended +up running the main function f(). The only interesting part +is the first few lines:

    +
    seastar::report_failed_future(std::__exception_ptr::exception_ptr const&) at src/core/future.cc:116
    +seastar::future_state_base::~future_state_base() at include/seastar/core/future.hh:335
    +seastar::future_state<>::~future_state() at include/seastar/core/future.hh:414
    + (inlined by) seastar::future<>::~future() at include/seastar/core/future.hh:990
    +f() at test.cc:12
    +

    Here we see that the warning message was printed by the +seastar::report_failed_future() function which was called +when destroying a future (future<>::~future) that had +not been handled. The future’s destructor was called in line 11 of our +test code (26.cc), which is indeed the line where we called +g() and ignored its result. This backtrace gives us an +accurate understanding of where our code destroyed an exceptional future +without handling it first, which is usually helpful in solving these +kinds of bugs. Note that this technique does not tell us where the +exception was first created, nor what code passed around the exceptional +future before it was destroyed - we just learn where the future was +destroyed. To learn where the exception was originally thrown, see the +next section:

    +

    22.2 Finding where an exception was +thrown

    +

    Sometimes an application logs an exception, and we want to know where +in the code the exception was originally thrown. Unlike languages like +Java, C++ does not have a builtin method of attaching a backtrace to +every exception. So Seastar provides functions which allow adding to an +exception the backtrace recorded when throwing it.

    +

    For example, in the following code we throw and catch an +std::runtime_error normally:

    +
    #include <seastar/core/future.hh>
    +#include <seastar/util/log.hh>
    +#include <exception>
    +#include <iostream>
    +
    +seastar::future<> g() {
    +    return seastar::make_exception_future<>(std::runtime_error("hello"));
    +}
    +
    +seastar::future<> f() {
    +    return g().handle_exception([](std::exception_ptr e) {
    +        std::cerr << "Exception: " << e << "\n";
    +    });
    +}
    +

    The output is

    +
    Exception: std::runtime_error (hello)
    +

    From this output, we have no way of knowing that the exception was +thrown in g(). We can solve this if we use +make_exception_future_with_backtrace instead of +make_exception_future:

    +
    #include <util/backtrace.hh>
    +seastar::future<> g() {
    +    return seastar::make_exception_future_with_backtrace<>(std::runtime_error("hello"));
    +}
    +

    Now the output looks like

    +
    Exception: seastar::internal::backtraced<std::runtime_error> (hello Backtrace:   0x678bd3
    +  0x677204
    +  0x67736b
    +  0x678cd5
    +  0x4f923c
    +  0x4f9c38
    +  0x4ff4d0
    +...
    +)
    +

    Which, as above, can be converted to a human-readable backtrace by +using the seastar-addr2line script.

    +

    In addition to +seastar::make_exception_future_with_backtrace(), Seastar +also provides a function throw_with_backtrace(), to throw +an exception instead of returning an exceptional future. For +example:

    +
        seastar::throw_with_backtrace<std::runtime_error>("hello");
    +

    In the current implementation, both +make_exception_future_with_backtrace and +throw_with_backtrace require that the original exception +type (in the above example, std::runtime_error) is a +subclass of the std::exception class. The original +exception provides a what() string, and the wrapped +exception adds the backtrace to this string, as demonstrated above. +Moreover, the wrapped exception type is a subclass of the +original exception type, which allows catch(...) code to +continue filtering by the exception original type - despite the addition +of the backtrace.

    +

    22.3 Debugging with gdb

    +
    handle SIGUSR1 pass noprint
    +handle SIGALRM pass noprint
    +

    23 Promise objects

    +

    As we already defined above, An asynchronous +function, also called a promise, is a function +which returns a future and arranges for this future to be eventually +resolved. As we already saw, an asynchronous function is usually written +in terms of other asynchronous functions, for example we saw the +function slow() which waits for the existing asynchronous +function sleep() to complete, and then returns 3:

    +
    seastar::future<int> slow() {
    +    using namespace std::chrono_literals;
    +    return seastar::sleep(100ms).then([] { return 3; });
    +}
    +

    The most basic building block for writing promises is the +promise object, an object of type +promise<T>. A promise<T> has a +method future<T> get_future() to returns a future, +and a method set_value(T), to resolve this future. An +asynchronous function can create a promise object, return its future, +and the set_value method to be eventually called - which +will finally resolve the future it returned.

    +

    In the following example we create a promise that manages the process +of printing 10 messages, once every second. We start by creating an +empty promise to work with. We then spin up a +seastart::thread to perform the work we want. When the +work, printing those messages, is completed we call +promise::set_value to mark the completion of the task. +Other than that we wait for the future which is generated by our +promise, just like any other future.

    +
    #include <seastar/core/future.hh>
    +#include <seastar/core/do_with.hh>
    +#include <seastar/core/sleep.hh>
    +#include <seastar/core/thread.hh>
    +#include <iostream>
    +
    +
    +seastar::future<> f() {
    +    return seastar::do_with(seastar::promise<>(), [](auto& promise) {
    +        (void)seastar::async([&promise]() {
    +                using namespace std::chrono_literals;
    +                for (int i = 0; i < 10; i++) {
    +                    std::cout << i << "..." << std::flush;
    +                    seastar::sleep(1s).wait();
    +                }
    +                std::cout << std::endl;
    +
    +                promise.set_value();
    +        });
    +
    +        return promise.get_future();
    +    });
    +}
    +

    24 Memory allocation in +Seastar

    +

    24.1 Per-thread memory +allocation

    +

    Seastar requires that applications be sharded, i.e., that code +running on different threads operate on different objects in memory. We +already saw in Seastar memory how Seastar +takes over a given amount of memory (often, most of the machine’s +memory) and divides it equally between the different threads. Modern +multi-socket machines have non-uniform memory access (NUMA), meaning +that some parts of memory are closer to some of the cores, and Seastar +takes this knowledge into account when dividing the memory between +threads. Currently, the division of memory between threads is static, +and equal - the threads are expected to experience roughly equal amount +of load and require roughly equal amounts of memory.

    +

    To achieve this per-thread allocation, Seastar redefines the C +library functions malloc(), free(), and their +numerous relatives — calloc(), realloc(), +posix_memalign(), memalign(), +malloc_usable_size(), and malloc_trim(). It +also redefines the C++ memory allocation functions, +operator new, operator delete, and all their +variants (including array versions, the C++14 delete taking a size, and +the C++17 variants taking required alignment).

    +

    It is important to remember that Seastar’s different threads +can see memory allocated by other threads, but they are +nonetheless strongly discouraged from actually doing this. Sharing data +objects between threads on modern multi-core machines results in stiff +performance penalties from locks, memory barriers, and cache-line +bouncing. Rather, Seastar encourages applications to avoid sharing +objects between threads when possible (by sharding — each +thread owns a subset of the objects), and when threads do need to +interact they do so with explicit message passing, with +submit_to(), as we shall see later.

    +

    24.2 Foreign pointers

    +

    An object allocated on one thread will be owned by this thread, and +eventually should be freed by the same thread. Freeing memory on the +wrong thread is strongly discouraged, but is currently +supported (albeit slowly) to support library code beyond Seastar’s +control. For example, std::exception_ptr allocates memory; +So if we invoke an asynchronous operation on a remote thread and this +operation returns an exception, when we free the returned +std::exception_ptr this will happen on the “wrong” core. So +Seastar allows it, but inefficiently.

    +

    In most cases objects should spend their entire life on a single +thread and be used only by this thread. But in some cases we want to +reassign ownership of an object which started its life on one thread, to +a different thread. This can be done using a +seastar::foreign_ptr<>. A pointer, or smart pointer, +to an object is wrapped in a seastar::foreign_ptr<P>. +This wrapper can then be moved into code running in a different thread +(e.g., using submit_to()).

    +

    The most common use-case is a +seastar::foreign_ptr<std::unique_ptr<T>>. The +thread receiving this foreign_ptr will get exclusive use of +the object, and when it destroys this wrapper, it will go back to the +original thread to destroy the object. Note that the object is not only +freed on the original shard - it is also destroyed (i.e., its +destructor is run) there. This is often important when the object’s +destructor needs to access other state which belongs to the original +shard - e.g., unlink itself from a container.

    +

    Although foreign_ptr ensures that the object’s +destructor automatically runs on the object’s home thread, it +does not absolve the user from worrying where to run the object’s other +methods. Some simple methods, e.g., methods which just read from the +object’s fields, can be run on the receiving thread. However, other +methods may need to access other data owned by the object’s home shard, +or need to prevent concurrent operations. Even if we’re sure that object +is now used exclusively by the receiving thread, such methods must still +be run, explicitly, on the home thread:

    +
        // fp is some foreign_ptr<>
    +    return smp::submit_to(fp.get_owner_shard(), [p=fp.get()]
    +        { return p->some_method(); });
    +

    So seastar::foreign_ptr<> not only has functional +benefits (namely, to run the destructor on the home shard), it also has +documentational benefits - it warns the programmer to watch out +every time the object is used, that this is a foreign pointer, +and if we want to do anything non-trivial with the pointed object, we +may need to do it on the home shard.

    +

    Above, we discussed the case of transferring ownership of an object +to a another shard, via +seastar::foreign_ptr<std::unique_ptr<T>>. +However, sometimes the sender does not want to relinquish ownership of +the object. Sometimes, it wants the remote thread to operate on its +object and return with the object intact. Sometimes, it wants to send +the same object to multiple shards. In such cases, +seastar::foreign_ptr<seastar::lw_shared_ptr<T>> +is useful. The user needs to watch out, of course, not to operate on the +same object from multiple threads concurrently. If this cannot be +ensured by program logic alone, some methods of serialization must be +used - such as running the operations on the home shard with +submit_to() as described above.

    +

    Normally, a seastar::foreign_ptr cannot not be copied - +only moved. However, when it holds a smart pointer that can be copied +(namely, a shared_ptr), one may want to make an additional +copy of that pointer and create a second foreign_ptr. Doing +this is inefficient and asynchronous (it requires communicating with the +original owner of the object to create the copies), so a method +future<foreign_ptr> copy() needs to be explicitly +used instead of the normal copy constructor.

    +

    25 Seastar::thread

    +

    Seastar’s programming model, using futures and continuations, is very +powerful and efficient. However, as we’ve already seen in examples +above, it is also relatively verbose: Every time that we need to wait +before proceeding with a computation, we need to write another +continuation. We also need to worry about passing the data between the +different continuations (using techniques like those described in the Lifetime management section). Simple +flow-control constructs such as loops also become more involved using +continuations. For example, consider this simple classical synchronous +code:

    +
        std::cout << "Hi.\n";
    +    for (int i = 1; i < 4; i++) {
    +        sleep(1);
    +        std::cout << i << "\n";
    +    }
    +

    In Seastar, using futures and continuations, we need to write +something like this:

    +
        std::cout << "Hi.\n";
    +    return seastar::do_for_each(boost::counting_iterator<int>(1),
    +        boost::counting_iterator<int>(4), [] (int i) {
    +        return seastar::sleep(std::chrono::seconds(1)).then([i] {
    +            std::cout << i << "\n";
    +        });
    +    });
    +

    But Seastar also allows, via seastar::thread, to write +code which looks more like synchronous code. A +seastar::thread provides an execution environment where +blocking is tolerated; You can issue an asynchronous function, and wait +for it in the same function, rather then establishing a callback to be +called with future<>::then():

    +
        seastar::thread th([] {
    +        std::cout << "Hi.\n";
    +        for (int i = 1; i < 4; i++) {
    +            seastar::sleep(std::chrono::seconds(1)).get();
    +            std::cout << i << "\n";
    +        }
    +    });
    +

    A seastar::thread is not a separate +operating system thread. It still uses continuations, which are +scheduled on Seastar’s single thread (per core). It works as +follows:

    +

    The seastar::thread allocates a 128KB stack, and runs +the given function until the it blocks on the call to a +future’s get() method. Outside a +seastar::thread context, get() may only be +called on a future which is already available. But inside a thread, +calling get() on a future which is not yet available stops +running the thread function, and schedules a continuation for this +future, which continues to run the thread’s function (on the same saved +stack) when the future becomes available.

    +

    Just like normal Seastar continuations, seastar::threads +always run on the same core they were launched on. They are also +cooperative: they are never preempted except when +seastar::future::get() blocks or on explicit calls to +seastar::thread::yield().

    +

    It is worth reiterating that a seastar::thread is not a +POSIX thread, and it can only block on Seastar futures, not on blocking +system calls. The above example used seastar::sleep(), not +the sleep() system call. The seastar::thread’s +function can throw and catch exceptions normally. Remember that +get() will throw an exception if the future resolves with +an exception.

    +

    In addition to seastar::future::get(), we also have +seastar::future::wait() to wait without fetching +the future’s result. This can sometimes be useful when you want to avoid +throwing an exception when the future failed (as get() +does). For example:

    +
        future<char> getchar();
    +    int try_getchar() noexcept { // run this in seastar::thread context
    +        future fut = get_char();
    +        fut.wait();
    +        if (fut.failed()) {
    +            return -1;
    +        } else {
    +            // Here we already know that get() will return immediately,
    +            // and will not throw.
    +            return fut.get();
    +        }
    +    }
    +

    25.1 Starting and ending a +seastar::thread

    +

    After we created a seastar::thread object, we need wait +until it ends, using its join() method. We also need to +keep that object alive until join() completes. A complete +example using seastar::thread will therefore look like +this:

    +
    #include <seastar/core/sleep.hh>
    +#include <seastar/core/thread.hh>
    +seastar::future<> f() {
    +    seastar::thread th([] {
    +        std::cout << "Hi.\n";
    +        for (int i = 1; i < 4; i++) {
    +            seastar::sleep(std::chrono::seconds(1)).get();
    +            std::cout << i << "\n";
    +        }
    +    });
    +    return do_with(std::move(th), [] (auto& th) {
    +        return th.join();
    +    });
    +}
    +

    The seastar::async() function provides a convenient +shortcut for creating a seastar::thread and returning a +future which resolves when the thread completes:

    +
    #include <seastar/core/sleep.hh>
    +#include <seastar/core/thread.hh>
    +seastar::future<> f() {
    +    return seastar::async([] {
    +        std::cout << "Hi.\n";
    +        for (int i = 1; i < 4; i++) {
    +            seastar::sleep(std::chrono::seconds(1)).get();
    +            std::cout << i << "\n";
    +        }
    +    });
    +}
    +

    seastar::async()’s lambda may return a value, and +seastar::async() returns it when it completes. For +example:

    +
    seastar::future<seastar::sstring> read_file(sstring file_name) {
    +    return seastar::async([file_name] () {  // lambda executed in a thread
    +        file f = seastar::open_file_dma(file_name).get();  // get() call "blocks"
    +        auto buf = f.dma_read(0, 512).get();  // "block" again
    +        return seastar::sstring(buf.get(), buf.size());
    +    });
    +};
    +

    While seastar::threads and seastar::async() +make programming more convenient, they also add overhead beyond that of +programming directly with continuations. Most notably, each +seastar::thread requires additional memory for its stack. +It is therefore not a good idea to use a seastar::thread to +handle a highly concurrent operation. For example, if you need to handle +10,000 concurrent requests, do not use a seastar::thread to +handle each — use futures and continuations. But if you are writing code +where you know that only a few instances will ever run concurrently, +e.g., a background cleanup operation in your application, +seastar::thread is a good match. +seastar::thread is also great for code which doesn’t care +about performance — such as test code.

    +

    26 Isolation of application +components

    +

    Seastar makes multi-tasking very easy - as easy as running an +asynchronous function. It is therefore easy for a server to do many +unrelated things in parallel. For example, a server might be in the +process of answering 100 users’ requests, and at the same time also be +making progress on some long background operation.

    +

    But in the above example, what percentage of the CPU and disk +throughput will the background operation get? How long can one of the +user’s requests be delayed by the background operation? Without the +mechanisms we describe in this section, these questions cannot be +reliably answered:

    +
      +
    • The background operation may be a very “considerate” single fiber, +i.e., run a very short continuation and then schedule the next +continuation to run later. At each point the scheduler sees 100 +request-handling continuations and just one of the background +continuations ready to run. The background task gets around 1% of the +CPU time, and users’ requests are hardly delayed.
    • +
    • On the other hand, the background operation may spawn 1,000 fibers +in parallel and have 1,000 ready-to-run continuations at each time. The +background operation will get about 90% of the runtime, and the +continuation handling a user’s request may get stuck behind 1,000 of +these background continuations, and experience huge latency.
    • +
    +

    Complex Seastar applications often have different components which +run in parallel and have different performance objectives. In the above +example we saw two components - user requests and the background +operation. The first goal of the mechanisms we describe in this section +is to isolate the performance of each component from the +others; In other words, the throughput and latency of one component +should not depend on decisions that another component makes - e.g., how +many continuations it runs in parallel. The second goal is to allow the +application to control this isolation, e.g., in the above +example allow the application to explicitly control the amount of CPU +the background operation receives, so that it completes at a desired +pace.

    +

    In the above examples we used CPU time as the limited resource that +the different components need to share effectively. As we show later, +another important shared resource is disk I/O.

    +

    26.1 Scheduling groups (CPU +scheduler)

    +

    Consider the following asynchronous function loop(), +which loops until some shared variable stop becomes true. +It keeps a counter of the number of iterations until +stopping, and returns this counter when finally stopping.

    +
    seastar::future<long> loop(int parallelism, bool& stop) {
    +    return seastar::do_with(0L, [parallelism, &stop] (long& counter) {
    +        return seastar::parallel_for_each(boost::irange<unsigned>(0, parallelism),
    +            [&stop, &counter]  (unsigned c) {
    +                return seastar::do_until([&stop] { return stop; }, [&counter] {
    +                    ++counter;
    +                    return seastar::make_ready_future<>();
    +                });
    +            }).then([&counter] { return counter; });
    +    });
    +}
    +

    The parallelism parameter determines the parallelism of +the silly counting operation: parallelism=1 means we have +just one loop incrementing the counter; parallelism=10 +means we start 10 loops in parallel all incrementing the same +counter.

    +

    What happens if we start two loop() calls in parallel +and let them run for 10 seconds?

    +
    seastar::future<> f() {
    +    return seastar::do_with(false, [] (bool& stop) {
    +        seastar::sleep(std::chrono::seconds(10)).then([&stop] {
    +            stop = true;
    +        });
    +        return seastar::when_all_succeed(loop(1, stop), loop(1, stop)).then_unpack(
    +            [] (long n1, long n2) {
    +                std::cout << "Counters: " << n1 << ", " << n2 << "\n";
    +            });
    +    });
    +}
    +

    It turns out that if the two loop() calls had the same +parallelism 1, we get roughly the same amount of work from +both of them:

    +
    Counters: 3'559'635'758, 3'254'521'376
    +

    But if for example we ran a loop(1) in parallel with a +loop(10), the result is that the loop(10) gets +10 times more work done:

    +
    Counters: 629'482'397, 6'320'167'297
    +

    Why does the amount of work that loop(1) can do in ten seconds +depends on the parallelism chosen by its competitor, and how can we +solve this?

    +

    The reason this happens is as follows: When a future resolves and a +continuation was linked to it, this continuation becomes ready to run. +By default, Seastar’s scheduler keeps a single list of ready-to-run +continuations (in each shard, of course), and runs the continuations at +the same order they became ready to run. In the above example, +loop(1) always has one ready-to-run continuation, but +loop(10), which runs 10 loops in parallel, always has ten +ready-to-run continuations. So for every continuation of +loop(1), Seastar’s default scheduler will run 10 +continuations of loop(10), which is why loop(10) gets 10 +times more work done.

    +

    To solve this, Seastar allows an application to define separate +components known as scheduling groups, which each has a +separate list of ready-to-run continuations. Each scheduling group gets +to run its own continuations on a desired percentage of the CPU time, +but the number of runnable continuations in one scheduling group does +not affect the amount of CPU that another scheduling group gets. Let’s +look at how this is done:

    +

    A scheduling group is defined by a value of type +scheduling_group. This value is opaque, but internally it +is a small integer (similar to a process ID in Linux). We use the +seastar::with_scheduling_group() function to run code in +the desired scheduling group:

    +
    seastar::future<long>
    +loop_in_sg(int parallelism, bool& stop, seastar::scheduling_group sg) {
    +    return seastar::with_scheduling_group(sg, [parallelism, &stop] {
    +        return loop(parallelism, stop);
    +    });
    +}
    +

    TODO: explain what with_scheduling_group group really +does, how the group is “inherited” to the continuations started inside +it.

    +

    Now let’s create two scheduling groups, and run loop(1) +in the first scheduling group and loop(10) in the second +scheduling group:

    +
    seastar::future<> f() {
    +    return seastar::when_all_succeed(
    +            seastar::create_scheduling_group("loop1", 100),
    +            seastar::create_scheduling_group("loop2", 100)).then_unpack(
    +        [] (seastar::scheduling_group sg1, seastar::scheduling_group sg2) {
    +        return seastar::do_with(false, [sg1, sg2] (bool& stop) {
    +            seastar::sleep(std::chrono::seconds(10)).then([&stop] {
    +                stop = true;
    +            });
    +            return seastar::when_all_succeed(loop_in_sg(1, stop, sg1), loop_in_sg(10, stop, sg2)).then_unpack(
    +                [] (long n1, long n2) {
    +                    std::cout << "Counters: " << n1 << ", " << n2 << "\n";
    +                });
    +        });
    +    });
    +}
    +

    Here we created two scheduling groups, sg1 and +sg2. Each scheduling group has an arbitrary name (which is +used for diagnostic purposes only), and a number of shares, a +number traditionally between 1 and 1000: If one scheduling group has +twice the number of shares than a second scheduling group, it will get +twice the amount of CPU time. In this example, we used the same number +of shares (100) for both groups, so they should get equal CPU time.

    +

    Unlike most objects in Seastar which are separate per shard, Seastar +wants the identities and numbering of the scheduling groups to be the +same on all shards, because it is important when invoking tasks on +remote shards. For this reason, the function to create a scheduling +group, seastar::create_scheduling_group(), is an +asynchronous function returning a +future<scheduling_group>.

    +

    Running the above example, with both scheduling group set up with the +same number of shares (100), indeed results in both scheduling groups +getting the same amount of CPU time:

    +
    Counters: 3'353'900'256, 3'350'871'461
    +

    Note how now both loops got the same amount of work done - despite +one loop having 10 times the parallelism of the second loop.

    +

    If we change the definition of the second scheduling group to have +200 shares, twice the number of shares of the first scheduling group, +we’ll see the second scheduling group getting twice the amount of CPU +time:

    +
    Counters: 2'273'783'385, 4'549'995'716
    +

    26.2 Latency

    +

    TODO: Task quota, preempt, loops with built-in preemption check, +etc.

    +

    26.3 Disk I/O scheduler

    +

    TODO

    +

    26.4 Network scheduler

    +

    TODO: Say that not yet available. Give example of potential problem - +e.g., sharing a slow WAN link.

    +

    26.5 Controllers

    +

    TODO: Talk about how to dynamically change the number of shares, and +why.

    +

    26.6 Multi-tenancy

    +

    TODO

    + + diff --git a/master/udp_8hh_source.html b/master/udp_8hh_source.html new file mode 100644 index 000000000..9770565ac --- /dev/null +++ b/master/udp_8hh_source.html @@ -0,0 +1,151 @@ + + + + + + + +Seastar: seastar/net/udp.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    udp.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 *
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#ifndef SEASTAR_MODULE
    +
    26#include <unordered_map>
    +
    27#include <assert.h>
    +
    28#endif
    +
    29
    +
    30#include <seastar/core/shared_ptr.hh>
    +
    31#include <seastar/net/api.hh>
    +
    32#include <seastar/net/const.hh>
    +
    33#include <seastar/net/net.hh>
    +
    34#include <seastar/util/modules.hh>
    +
    35
    +
    36namespace seastar {
    +
    37
    +
    38namespace net {
    +
    39
    +
    40struct udp_hdr {
    +
    41 packed<uint16_t> src_port;
    +
    42 packed<uint16_t> dst_port;
    + +
    44 packed<uint16_t> cksum;
    +
    45
    +
    46 template<typename Adjuster>
    +
    47 auto adjust_endianness(Adjuster a) {
    +
    48 return a(src_port, dst_port, len, cksum);
    +
    49 }
    +
    50} __attribute__((packed));
    +
    51
    + +
    53 queue<datagram> _queue;
    +
    54 // Limit number of data queued into send queue
    +
    55 semaphore _user_queue_space = {212992};
    +
    56 udp_channel_state(size_t queue_size) : _queue(queue_size) {}
    +
    57 future<> wait_for_send_buffer(size_t len) { return _user_queue_space.wait(len); }
    +
    58 void complete_send(size_t len) { _user_queue_space.signal(len); }
    +
    59};
    +
    60
    +
    61}
    +
    62
    +
    63}
    + +
    future wait(size_t nr=1) noexcept
    Definition: semaphore.hh:299
    +
    void signal(size_t nr=1) noexcept
    Definition: semaphore.hh:396
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: queue.hh:44
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: udp.hh:52
    +
    Definition: udp.hh:40
    +
    Definition: unaligned.hh:58
    +
    + + + + diff --git a/master/unaligned_8hh_source.html b/master/unaligned_8hh_source.html new file mode 100644 index 000000000..0dc433a76 --- /dev/null +++ b/master/unaligned_8hh_source.html @@ -0,0 +1,163 @@ + + + + + + + +Seastar: seastar/core/unaligned.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    unaligned.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2015 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24// The following unaligned_cast<T*>(p) is a portable replacement for
    +
    25// reinterpret_cast<T*>(p) which should be used every time address p
    +
    26// is not guaranteed to be properly aligned to alignof(T).
    +
    27//
    +
    28// On architectures like x86 and ARM, where unaligned access is allowed,
    +
    29// unaligned_cast will behave the same as reinterpret_cast and will generate
    +
    30// the same code.
    +
    31//
    +
    32// Certain architectures (e.g., MIPS) make it extremely slow or outright
    +
    33// forbidden to use ordinary machine instructions on a primitive type at an
    +
    34// unaligned addresses - e.g., access a uint32_t at an address which is not
    +
    35// a multiple of 4. Gcc's "undefined behavior sanitizer" (enabled in our debug
    +
    36// build) also catches such unaligned accesses and reports them as errors,
    +
    37// even when running on x86.
    +
    38//
    +
    39// Therefore, reinterpret_cast<int32_t*> on an address which is not guaranteed
    +
    40// to be a multiple of 4 may generate extremely slow code or runtime errors,
    +
    41// and must be avoided. The compiler needs to be told about the unaligned
    +
    42// access, so it can generate reasonably-efficient code for the access
    +
    43// (in MIPS, this means generating two instructions "lwl" and "lwr", instead
    +
    44// of the one instruction "lw" which faults on unaligned/ access). The way to
    +
    45// tell the compiler this is with __attribute__((packed)). This will also
    +
    46// cause the sanitizer not to generate runtime alignment checks for this
    +
    47// access.
    +
    48
    +
    49#ifndef SEASTAR_MODULE
    +
    50#include <type_traits>
    +
    51#include <seastar/util/modules.hh>
    +
    52#endif
    +
    53
    +
    54namespace seastar {
    +
    55
    +
    56SEASTAR_MODULE_EXPORT
    +
    57template <typename T>
    +
    58struct unaligned {
    +
    59 // This is made to support only simple types, so it is fine to
    +
    60 // require them to be trivially copy constructible.
    +
    61 static_assert(std::is_trivially_copy_constructible_v<T>);
    +
    62 T raw;
    +
    63 unaligned() noexcept = default;
    +
    64 unaligned(T x) noexcept : raw(x) {}
    +
    65 unaligned& operator=(const T& x) noexcept { raw = x; return *this; }
    +
    66 operator T() const noexcept { return raw; }
    +
    67} __attribute__((packed));
    +
    68
    +
    69
    +
    70template <typename T, typename F>
    +
    71[[deprecated("violates strict aliasing rules. See issue #165.")]]
    +
    72inline auto unaligned_cast(F* p) noexcept {
    +
    73 return reinterpret_cast<unaligned<std::remove_pointer_t<T>>*>(p);
    +
    74}
    +
    75
    +
    76template <typename T, typename F>
    +
    77[[deprecated("violates strict aliasing rules. See issue #165.")]]
    +
    78inline auto unaligned_cast(const F* p) noexcept {
    +
    79 return reinterpret_cast<const unaligned<std::remove_pointer_t<T>>*>(p);
    +
    80}
    +
    81
    +
    82}
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: unaligned.hh:58
    +
    + + + + diff --git a/master/uname_8hh_source.html b/master/uname_8hh_source.html new file mode 100644 index 000000000..8b7c34f35 --- /dev/null +++ b/master/uname_8hh_source.html @@ -0,0 +1,143 @@ + + + + + + + +Seastar: seastar/core/internal/uname.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    uname.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright (C) 2019 ScyllaDB
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#include <seastar/util/modules.hh>
    +
    26#ifndef SEASTAR_MODULE
    +
    27#include <optional>
    +
    28#include <string>
    +
    29#include <initializer_list>
    +
    30#include <iosfwd>
    +
    31#endif
    +
    32
    +
    33namespace seastar {
    +
    34
    +
    35namespace internal {
    +
    36
    +
    37// Representation of a Linux kernel version number
    +
    38struct uname_t {
    +
    39 int version; // 4 in "4.5"
    +
    40 int patchlevel; // 5 in "4.5"
    +
    41 std::optional<int> sublevel; // 1 in "4.5.1"
    +
    42 std::optional<int> subsublevel; // 33 in "2.6.44.33"
    +
    43 std::optional<int> distro_patch; // 957 in "3.10.0-957.5.1.el7.x86_64"
    +
    44 std::string distro_extra; // .5.1.el7.x86_64
    +
    45
    +
    46 bool same_as_or_descendant_of(const uname_t& x) const;
    +
    47 bool same_as_or_descendant_of(const char* x) const;
    +
    48 bool whitelisted(std::initializer_list<const char*>) const;
    +
    49
    +
    50 // 3 for "4.5.0", 5 for "5.1.3-33.3.el7"; "el7" doesn't count as a component
    +
    51 int component_count() const;
    +
    52
    +
    53 // The "el7" that wasn't counted in components()
    +
    54 bool has_distro_extra(std::string extra) const;
    +
    55 friend std::ostream& operator<<(std::ostream& os, const uname_t& u);
    +
    56};
    +
    57
    +
    58uname_t kernel_uname();
    +
    59
    +
    60uname_t parse_uname(const char* u);
    +
    61
    +
    62}
    +
    63}
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/unionseastar_1_1future__state__base_1_1any-members.html b/master/unionseastar_1_1future__state__base_1_1any-members.html new file mode 100644 index 000000000..698119e81 --- /dev/null +++ b/master/unionseastar_1_1future__state__base_1_1any-members.html @@ -0,0 +1,98 @@ + + + + + + + +Seastar: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    seastar::future_state_base::any Member List
    +
    +
    + +

    This is the complete list of members for seastar::future_state_base::any, including all inherited members.

    + + + + + + + + + + + + + + + + + +
    any() noexcept (defined in seastar::future_state_base::any)seastar::future_state_base::anyinline
    any(state s) noexcept (defined in seastar::future_state_base::any)seastar::future_state_base::anyinline
    any(std::exception_ptr &&e) noexcept (defined in seastar::future_state_base::any)seastar::future_state_base::anyinline
    any(any &&x) noexcept (defined in seastar::future_state_base::any)seastar::future_state_base::anyinline
    available() const noexcept (defined in seastar::future_state_base::any)seastar::future_state_base::anyinline
    check_failure() noexcept (defined in seastar::future_state_base::any)seastar::future_state_base::anyinline
    ex (defined in seastar::future_state_base::any)seastar::future_state_base::any
    failed() const noexcept (defined in seastar::future_state_base::any)seastar::future_state_base::anyinline
    has_result() const noexcept (defined in seastar::future_state_base::any)seastar::future_state_base::anyinline
    move_it(any &&x) noexcept (defined in seastar::future_state_base::any)seastar::future_state_base::anyinline
    operator=(any &&x) noexcept (defined in seastar::future_state_base::any)seastar::future_state_base::anyinline
    set_exception(std::exception_ptr &&e) noexcept (defined in seastar::future_state_base::any)seastar::future_state_base::anyinline
    st (defined in seastar::future_state_base::any)seastar::future_state_base::any
    take_exception() noexcept (defined in seastar::future_state_base::any)seastar::future_state_base::anyinline
    valid() const noexcept (defined in seastar::future_state_base::any)seastar::future_state_base::anyinline
    ~any() noexcept (defined in seastar::future_state_base::any)seastar::future_state_base::anyinline
    + + + + diff --git a/master/unionseastar_1_1future__state__base_1_1any.html b/master/unionseastar_1_1future__state__base_1_1any.html new file mode 100644 index 000000000..85bcdbf31 --- /dev/null +++ b/master/unionseastar_1_1future__state__base_1_1any.html @@ -0,0 +1,135 @@ + + + + + + + +Seastar: seastar::future_state_base::any Union Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    seastar::future_state_base::any Union Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    any (state s) noexcept
     
    +void set_exception (std::exception_ptr &&e) noexcept
     
    any (std::exception_ptr &&e) noexcept
     
    +bool valid () const noexcept
     
    +bool available () const noexcept
     
    +bool failed () const noexcept
     
    +void check_failure () noexcept
     
    +std::exception_ptr take_exception () noexcept
     
    +void move_it (any &&x) noexcept
     
    any (any &&x) noexcept
     
    +anyoperator= (any &&x) noexcept
     
    +bool has_result () const noexcept
     
    + + + + + +

    +Public Attributes

    +state st
     
    +std::exception_ptr ex
     
    +
    The documentation for this union was generated from the following file: +
    + + + + diff --git a/master/units_8hh_source.html b/master/units_8hh_source.html new file mode 100644 index 000000000..86303a54e --- /dev/null +++ b/master/units_8hh_source.html @@ -0,0 +1,123 @@ + + + + + + + +Seastar: seastar/core/units.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    units.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <cstddef>
    +
    26#endif
    +
    27#include <seastar/util/modules.hh>
    +
    28
    +
    29namespace seastar {
    +
    30
    +
    31SEASTAR_MODULE_EXPORT_BEGIN
    +
    32
    +
    33constexpr size_t KB = 1 << 10;
    +
    34constexpr size_t MB = 1 << 20;
    +
    35constexpr size_t GB = 1 << 30;
    +
    36
    +
    37constexpr size_t operator"" _KiB(unsigned long long n) { return n << 10; }
    +
    38constexpr size_t operator"" _MiB(unsigned long long n) { return n << 20; }
    +
    39constexpr size_t operator"" _GiB(unsigned long long n) { return n << 30; }
    +
    40constexpr size_t operator"" _TiB(unsigned long long n) { return n << 40; }
    +
    41
    +
    42SEASTAR_MODULE_EXPORT_END
    +
    43}
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/unix__address_8hh_source.html b/master/unix__address_8hh_source.html new file mode 100644 index 000000000..5174cee64 --- /dev/null +++ b/master/unix__address_8hh_source.html @@ -0,0 +1,149 @@ + + + + + + + +Seastar: seastar/net/unix_address.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    unix_address.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2019 Red Hat, Inc.
    +
    20 */
    +
    21#pragma once
    +
    22
    +
    23#ifndef SEASTAR_MODULE
    +
    24#include <iosfwd>
    +
    25#include <sys/types.h>
    +
    26#include <sys/un.h>
    +
    27#include <string>
    +
    28#endif
    +
    29#include <seastar/util/modules.hh>
    +
    30
    +
    31namespace seastar {
    +
    32SEASTAR_MODULE_EXPORT_BEGIN
    + +
    44 const std::string name;
    +
    45 const int path_count; // either name.length() or name.length()+1. See path_length_aux() below.
    +
    46
    +
    47 explicit unix_domain_addr(const std::string& fn) : name{fn}, path_count{path_length_aux()} {}
    +
    48
    +
    49 explicit unix_domain_addr(const char* fn) : name{fn}, path_count{path_length_aux()} {}
    +
    50
    +
    51 int path_length() const { return path_count; }
    +
    52
    +
    53 // the following holds:
    +
    54 // for abstract name: name.length() == number of meaningful bytes, including the null in name[0].
    +
    55 // for filesystem path: name.length() does not count the implicit terminating null.
    +
    56 // Here we tweak the outside-visible length of the address.
    +
    57 int path_length_aux() const {
    +
    58 auto pl = (int)name.length();
    +
    59 if (!pl || (name[0] == '\0')) {
    +
    60 // unnamed, or abstract-namespace
    +
    61 return pl;
    +
    62 }
    +
    63 return 1 + pl;
    +
    64 }
    +
    65
    +
    66 const char* path_bytes() const { return name.c_str(); }
    +
    67
    +
    68 bool operator==(const unix_domain_addr& a) const {
    +
    69 return name == a.name;
    +
    70 }
    +
    71 bool operator!=(const unix_domain_addr& a) const {
    +
    72 return !(*this == a);
    +
    73 }
    +
    74};
    +
    75
    +
    76std::ostream& operator<<(std::ostream&, const unix_domain_addr&);
    +
    77SEASTAR_MODULE_EXPORT_END
    +
    78} // namespace seastar
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Definition: unix_address.hh:43
    +
    + + + + diff --git a/master/url_8hh_source.html b/master/url_8hh_source.html new file mode 100644 index 000000000..ebd1b52a6 --- /dev/null +++ b/master/url_8hh_source.html @@ -0,0 +1,120 @@ + + + + + + + +Seastar: seastar/http/url.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    url.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2022 Scylladb, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/sstring.hh>
    +
    25
    +
    26namespace seastar {
    +
    27
    +
    28namespace http {
    +
    29namespace internal {
    +
    30
    +
    31bool url_decode(std::string_view in, sstring& out);
    +
    32
    +
    33bool path_decode(std::string_view in, sstring& out);
    +
    34
    +
    43sstring url_encode(std::string_view in);
    +
    44
    +
    45} // internal namespace
    +
    46} // http namespace
    +
    47
    +
    48} // seastar namespace
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/used__size_8hh_source.html b/master/used__size_8hh_source.html new file mode 100644 index 000000000..8e673b72f --- /dev/null +++ b/master/used__size_8hh_source.html @@ -0,0 +1,118 @@ + + + + + + + +Seastar: seastar/util/used_size.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    used_size.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2020 ScyllaDB Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <stddef.h>
    +
    26#include <type_traits>
    +
    27#endif
    +
    28
    +
    29namespace seastar {
    +
    30namespace internal {
    +
    31// Empty types have a size of 1, but that byte is not actually
    +
    32// used. This helper is used to avoid accessing that byte.
    +
    33template<typename T>
    +
    34struct used_size {
    +
    35 static constexpr size_t value = std::is_empty_v<T> ? 0 : sizeof(T);
    +
    36};
    +
    37}
    +
    38}
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/util_2file_8hh_source.html b/master/util_2file_8hh_source.html new file mode 100644 index 000000000..0673171a4 --- /dev/null +++ b/master/util_2file_8hh_source.html @@ -0,0 +1,170 @@ + + + + + + + +Seastar: seastar/util/file.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    file.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright 2020 ScyllaDB
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#include "modules.hh"
    +
    26#include <seastar/core/seastar.hh>
    +
    27#include <seastar/core/future.hh>
    + +
    29#include <seastar/core/sstring.hh>
    +
    30#include <seastar/core/coroutine.hh>
    +
    31#include <seastar/coroutine/as_future.hh>
    +
    32#include <seastar/util/std-compat.hh>
    +
    33#include <seastar/util/short_streams.hh>
    +
    34#include <seastar/util/modules.hh>
    +
    35
    +
    36namespace seastar {
    +
    37
    +
    51SEASTAR_MODULE_EXPORT
    +
    52future<> recursive_remove_directory(std::filesystem::path path) noexcept;
    +
    53
    +
    55
    +
    61
    +
    62namespace util {
    +
    63
    +
    66
    +
    67SEASTAR_MODULE_EXPORT_BEGIN
    +
    68template <typename Func>
    +
    69requires std::invocable<Func, input_stream<char>&>
    +
    70typename futurize<typename std::invoke_result_t<Func, input_stream<char>&>>::type with_file_input_stream(const std::filesystem::path& path, Func func, file_open_options file_opts = {}, file_input_stream_options input_stream_opts = {}) {
    +
    71 static_assert(std::is_nothrow_move_constructible_v<Func>);
    +
    72 auto f = co_await open_file_dma(path.native(), open_flags::ro, std::move(file_opts));
    + +
    74 std::exception_ptr ex;
    +
    75 try {
    +
    76 in = make_file_input_stream(f, std::move(input_stream_opts));
    +
    77 } catch (...) {
    +
    78 ex = std::current_exception();
    +
    79 }
    +
    80 if (ex) {
    +
    81 co_await f.close();
    +
    82 co_await coroutine::return_exception_ptr(std::move(ex));
    +
    83 }
    +
    84
    +
    85 auto res = co_await coroutine::as_future(futurize_invoke(std::move(func), in));
    +
    86 co_await in.close();
    +
    87 co_await f.close();
    +
    88 co_return co_await std::move(res);
    +
    89}
    +
    90
    + +
    97
    + +
    104
    +
    105SEASTAR_MODULE_EXPORT_END
    +
    107
    +
    108} // namespace util
    +
    109
    +
    110} // namespace seastar
    +
    co_await:s a future, returning it as result.
    Definition: as_future.hh:86
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    + +
    future close() noexcept
    Definition: iostream.hh:338
    + +
    future< std::vector< temporary_buffer< char > > > read_entire_file(std::filesystem::path path)
    +
    future< sstring > read_entire_file_contiguous(std::filesystem::path path)
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    future recursive_remove_directory(std::filesystem::path path) noexcept
    +
    input_stream< char > make_file_input_stream(file file, uint64_t offset, uint64_t len, file_input_stream_options options={})
    Creates an input_stream to read a portion of a file.
    +
    Data structure describing options for opening a file input stream.
    Definition: fstream.hh:60
    +
    Definition: file.hh:88
    +
    Converts a type to a future type, if it isn't already.
    Definition: future.hh:1853
    +
    + + + + diff --git a/master/util_2short__streams_8hh_source.html b/master/util_2short__streams_8hh_source.html new file mode 100644 index 000000000..264149f5a --- /dev/null +++ b/master/util_2short__streams_8hh_source.html @@ -0,0 +1,123 @@ + + + + + + + +Seastar: seastar/util/short_streams.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    short_streams.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2021 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <seastar/core/future.hh>
    +
    25#include <seastar/core/iostream.hh>
    +
    26#include <seastar/core/temporary_buffer.hh>
    +
    27#include <seastar/util/modules.hh>
    +
    28
    +
    29namespace seastar {
    +
    30
    +
    31namespace util {
    +
    32
    +
    33SEASTAR_MODULE_EXPORT_BEGIN
    +
    39future<std::vector<temporary_buffer<char>>> read_entire_stream(input_stream<char>& inp);
    +
    40
    +
    46future<sstring> read_entire_stream_contiguous(input_stream<char>& inp);
    +
    47
    +
    51future<> skip_entire_stream(input_stream<char>& inp);
    +
    52
    +
    53SEASTAR_MODULE_EXPORT_END
    +
    54} // namespace util
    +
    55
    +
    56} // namespace seastar
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/variant__utils_8hh_source.html b/master/variant__utils_8hh_source.html new file mode 100644 index 000000000..de3eb1f7e --- /dev/null +++ b/master/variant__utils_8hh_source.html @@ -0,0 +1,164 @@ + + + + + + + +Seastar: seastar/util/variant_utils.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    variant_utils.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2017 ScyllaDB.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#include <variant>
    +
    25
    +
    26namespace seastar {
    +
    27
    +
    29namespace internal {
    +
    30
    +
    31template<typename... Args>
    +
    32struct variant_visitor : Args... {
    +
    33 variant_visitor(Args&&... a) : Args(std::move(a))... {}
    +
    34 using Args::operator()...;
    +
    35};
    +
    36
    +
    37template<typename... Args> variant_visitor(Args&&...) -> variant_visitor<Args...>;
    +
    38
    +
    39}
    +
    41
    +
    44
    +
    51template <typename... Args>
    +
    52auto make_visitor(Args&&... args)
    +
    53{
    +
    54 return internal::variant_visitor<Args...>(std::forward<Args>(args)...);
    +
    55}
    +
    56
    +
    67template <typename Variant, typename... Args>
    +
    68inline auto visit(Variant&& variant, Args&&... args)
    +
    69{
    +
    70 static_assert(sizeof...(Args) > 0, "At least one lambda must be provided for visitation");
    +
    71 return std::visit(
    +
    72 make_visitor(std::forward<Args>(args)...),
    +
    73 variant);
    +
    74}
    +
    75
    +
    76namespace internal {
    +
    77template<typename... Args>
    +
    78struct castable_variant {
    +
    79 std::variant<Args...> var;
    +
    80
    +
    81 template<typename... SuperArgs>
    +
    82 operator std::variant<SuperArgs...>() && {
    +
    83 return std::visit([] (auto&& x) {
    +
    84 return std::variant<SuperArgs...>(std::move(x));
    +
    85 }, var);
    +
    86 }
    +
    87};
    +
    88}
    +
    89
    +
    90template<typename... Args>
    +
    91internal::castable_variant<Args...> variant_cast(std::variant<Args...>&& var) {
    +
    92 return {std::move(var)};
    +
    93}
    +
    94
    +
    95template<typename... Args>
    +
    96internal::castable_variant<Args...> variant_cast(const std::variant<Args...>& var) {
    +
    97 return {var};
    +
    98}
    +
    99
    +
    101
    +
    102}
    +
    auto make_visitor(Args &&... args)
    Definition: variant_utils.hh:52
    +
    auto visit(Variant &&variant, Args &&... args)
    Definition: variant_utils.hh:68
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    STL namespace.
    +
    + + + + diff --git a/master/vector-data-sink_8hh_source.html b/master/vector-data-sink_8hh_source.html new file mode 100644 index 000000000..8c8b480e1 --- /dev/null +++ b/master/vector-data-sink_8hh_source.html @@ -0,0 +1,135 @@ + + + + + + + +Seastar: seastar/core/vector-data-sink.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    vector-data-sink.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright 2014 Cloudius Systems
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <seastar/core/iostream.hh>
    +
    26#include <seastar/util/modules.hh>
    +
    27#endif
    +
    28
    +
    29namespace seastar {
    +
    30
    +
    31SEASTAR_MODULE_EXPORT
    +
    32class vector_data_sink final : public data_sink_impl {
    +
    33public:
    +
    34 using vector_type = std::vector<net::packet>;
    +
    35private:
    +
    36 vector_type& _v;
    +
    37public:
    +
    38 vector_data_sink(vector_type& v) : _v(v) {}
    +
    39
    +
    40 virtual future<> put(net::packet p) override {
    +
    41 _v.push_back(std::move(p));
    +
    42 return make_ready_future<>();
    +
    43 }
    +
    44
    +
    45 virtual future<> close() override {
    +
    46 // TODO: close on local side
    +
    47 return make_ready_future<>();
    +
    48 }
    +
    49};
    +
    50
    +
    51}
    +
    Definition: iostream.hh:103
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    Definition: packet.hh:87
    +
    Definition: vector-data-sink.hh:32
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/virtio-interface_8hh_source.html b/master/virtio-interface_8hh_source.html new file mode 100644 index 000000000..a42c9f3c2 --- /dev/null +++ b/master/virtio-interface_8hh_source.html @@ -0,0 +1,210 @@ + + + + + + + +Seastar: seastar/net/virtio-interface.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    virtio-interface.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 *
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#ifndef _LINUX_VIRTIO_RING_H
    +
    26#define _LINUX_VIRTIO_RING_H
    +
    27
    +
    28/* An interface for efficient virtio implementation, currently for use by KVM
    +
    29 * and lguest, but hopefully others soon. Do NOT change this since it will
    +
    30 * break existing servers and clients.
    +
    31 *
    +
    32 * This header is BSD licensed so anyone can use the definitions to implement
    +
    33 * compatible drivers/servers.
    +
    34 *
    +
    35 * Redistribution and use in source and binary forms, with or without
    +
    36 * modification, are permitted provided that the following conditions
    +
    37 * are met:
    +
    38 * 1. Redistributions of source code must retain the above copyright
    +
    39 * notice, this list of conditions and the following disclaimer.
    +
    40 * 2. Redistributions in binary form must reproduce the above copyright
    +
    41 * notice, this list of conditions and the following disclaimer in the
    +
    42 * documentation and/or other materials provided with the distribution.
    +
    43 * 3. Neither the name of IBM nor the names of its contributors
    +
    44 * may be used to endorse or promote products derived from this software
    +
    45 * without specific prior written permission.
    +
    46 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
    +
    47 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +
    48 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +
    49 * ARE DISCLAIMED. IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
    +
    50 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +
    51 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +
    52 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +
    53 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +
    54 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +
    55 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +
    56 * SUCH DAMAGE.
    +
    57 *
    +
    58 * Copyright Rusty Russell IBM Corporation 2007. */
    +
    59
    +
    60/* This marks a buffer as continuing via the next field. */
    +
    61#define VRING_DESC_F_NEXT 1
    +
    62/* This marks a buffer as write-only (otherwise read-only). */
    +
    63#define VRING_DESC_F_WRITE 2
    +
    64/* This means the buffer contains a list of buffer descriptors. */
    +
    65#define VRING_DESC_F_INDIRECT 4
    +
    66
    +
    67/* The Host uses this in used->flags to advise the Guest: don't kick me when
    +
    68 * you add a buffer. It's unreliable, so it's simply an optimization. Guest
    +
    69 * will still kick if it's out of buffers. */
    +
    70#define VRING_USED_F_NO_NOTIFY 1
    +
    71/* The Guest uses this in avail->flags to advise the Host: don't interrupt me
    +
    72 * when you consume a buffer. It's unreliable, so it's simply an
    +
    73 * optimization. */
    +
    74#define VRING_AVAIL_F_NO_INTERRUPT 1
    +
    75
    +
    76/* We support indirect buffer descriptors */
    +
    77#define VIRTIO_RING_F_INDIRECT_DESC (1 << 28)
    +
    78
    +
    79/* The Guest publishes the used index for which it expects an interrupt
    +
    80 * at the end of the avail ring. Host should ignore the avail->flags field. */
    +
    81/* The Host publishes the avail index for which it expects a kick
    +
    82 * at the end of the used ring. Guest should ignore the used->flags field. */
    +
    83#define VIRTIO_RING_F_EVENT_IDX (1 << 29)
    +
    84
    +
    85/* The standard layout for the ring is a continuous chunk of memory which looks
    +
    86 * like this. We assume num is a power of 2.
    +
    87 *
    +
    88 * struct vring
    +
    89 * {
    +
    90 * // The actual descriptors (16 bytes each)
    +
    91 * struct vring_desc desc[num];
    +
    92 *
    +
    93 * // A ring of available descriptor heads with free-running index.
    +
    94 * uint16_t avail_flags;
    +
    95 * uint16_t avail_idx;
    +
    96 * uint16_t available[num];
    +
    97 * uint16_t used_event_idx;
    +
    98 *
    +
    99 * // Padding to the next align boundary.
    +
    100 * char pad[];
    +
    101 *
    +
    102 * // A ring of used descriptor heads with free-running index.
    +
    103 * uint16_t used_flags;
    +
    104 * uint16_t used_idx;
    +
    105 * struct vring_used_elem used[num];
    +
    106 * uint16_t avail_event_idx;
    +
    107 * };
    +
    108 */
    +
    109
    +
    110#endif
    +
    111
    +
    112#define VIRTIO_NET_F_CSUM (1 << 0)
    +
    113#define VIRTIO_NET_F_GUEST_CSUM (1 << 1)
    +
    114#define VIRTIO_NET_F_CTRL_GUEST_OFFLOADS (1 << 2)
    +
    115#define VIRTIO_NET_F_MAC (1 << 5)
    +
    116#define VIRTIO_NET_F_GUEST_TSO4 (1 << 7)
    +
    117#define VIRTIO_NET_F_GUEST_TSO6 (1 << 8)
    +
    118#define VIRTIO_NET_F_GUEST_ECN (1 << 9)
    +
    119#define VIRTIO_NET_F_GUEST_UFO (1 << 10)
    +
    120#define VIRTIO_NET_F_HOST_TSO4 (1 << 11)
    +
    121#define VIRTIO_NET_F_HOST_TSO6 (1 << 12)
    +
    122#define VIRTIO_NET_F_HOST_ECN (1 << 13)
    +
    123#define VIRTIO_NET_F_HOST_UFO (1 << 14)
    +
    124#define VIRTIO_NET_F_MRG_RXBUF (1 << 15)
    +
    125#define VIRTIO_NET_F_STATUS (1 << 16)
    +
    126#define VIRTIO_NET_F_CTRL_VQ (1 << 17)
    +
    127#define VIRTIO_NET_F_CTRL_RX (1 << 18)
    +
    128#define VIRTIO_NET_F_CTRL_VLAN (1 << 19)
    +
    129#define VIRTIO_NET_F_GUEST_ANNOUNCE (1 << 21)
    +
    130#define VIRTIO_NET_F_MQ (1 << 22)
    +
    131#define VIRTIO_NET_F_CTRL_MAC_ADDR (1 << 23)
    +
    + + + + diff --git a/master/virtio_8hh_source.html b/master/virtio_8hh_source.html new file mode 100644 index 000000000..cadeffd27 --- /dev/null +++ b/master/virtio_8hh_source.html @@ -0,0 +1,137 @@ + + + + + + + +Seastar: seastar/net/virtio.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    virtio.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2014 Cloudius Systems, Ltd.
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <memory>
    +
    26#endif
    +
    27#include <seastar/net/net.hh>
    +
    28#include <seastar/core/sstring.hh>
    +
    29#include <seastar/util/program-options.hh>
    +
    30
    +
    31namespace seastar {
    +
    32
    +
    33namespace net {
    +
    34
    + + + + + + +
    57
    + +
    61};
    +
    62
    +
    63}
    +
    64
    +
    66std::unique_ptr<net::device> create_virtio_net_device(const net::virtio_options& opts, const program_options::value<std::string>& lro);
    +
    68
    +
    69}
    +
    Definition: program-options.hh:292
    + +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Virtio configuration.
    Definition: virtio.hh:36
    +
    program_options::value< unsigned > virtio_ring_size
    Virtio ring size (must be power-of-two).
    Definition: virtio.hh:56
    +
    program_options::value< std::string > ufo
    Enable UDP fragmentation offload feature (on / off).
    Definition: virtio.hh:52
    +
    program_options::value< std::string > event_index
    Enable event-index feature (on / off).
    Definition: virtio.hh:40
    +
    program_options::value< std::string > csum_offload
    Enable checksum offload feature (on / off).
    Definition: virtio.hh:44
    +
    program_options::value< std::string > tso
    Enable TCP segment offload feature (on / off).
    Definition: virtio.hh:48
    +
    + + + + diff --git a/master/weak__ptr_8hh_source.html b/master/weak__ptr_8hh_source.html new file mode 100644 index 000000000..d8a8c3e3d --- /dev/null +++ b/master/weak__ptr_8hh_source.html @@ -0,0 +1,215 @@ + + + + + + + +Seastar: seastar/core/weak_ptr.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    weak_ptr.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18/*
    +
    19 * Copyright (C) 2016 ScyllaDB
    +
    20 */
    +
    21
    +
    22#pragma once
    +
    23
    +
    24#ifndef SEASTAR_MODULE
    +
    25#include <utility>
    +
    26#include <boost/intrusive/list.hpp>
    +
    27#include <seastar/util/modules.hh>
    +
    28#endif
    +
    29
    +
    30namespace seastar {
    +
    31
    +
    44SEASTAR_MODULE_EXPORT
    +
    45template<typename T>
    +
    46class weak_ptr {
    +
    47 template<typename U>
    +
    48 friend class weakly_referencable;
    +
    49 template <typename U>
    +
    50 friend class weak_ptr;
    +
    51private:
    +
    52 using hook_type = boost::intrusive::list_member_hook<boost::intrusive::link_mode<boost::intrusive::auto_unlink>>;
    +
    53 hook_type _hook;
    +
    54 T* _ptr = nullptr;
    +
    55 weak_ptr(T* p) noexcept : _ptr(p) {}
    +
    56 void clear() noexcept {
    +
    57 _hook = {};
    +
    58 _ptr = nullptr;
    +
    59 }
    +
    60 void swap(weak_ptr&& o) noexcept {
    +
    61 _hook.swap_nodes(o._hook);
    +
    62 std::swap(_ptr, o._ptr);
    +
    63 }
    +
    64
    +
    65public:
    +
    66 template <typename U>
    +
    67 requires std::convertible_to<U*, T*>
    + +
    69 {
    +
    70 if (o._ptr) {
    +
    71 _ptr = std::exchange(o._ptr, nullptr);
    +
    72 _hook.swap_nodes(o._hook);
    +
    73 }
    +
    74 }
    +
    75
    +
    76 // Note: The default constructor's body is implemented as no-op
    +
    77 // rather than `noexcept = default` due to a bug with gcc 9.3.1
    +
    78 // that deletes the constructor since boost::intrusive::list_member_hook
    +
    79 // is not default_nothrow_constructible.
    +
    80 weak_ptr() noexcept {}
    +
    81 weak_ptr(std::nullptr_t) noexcept : weak_ptr() {}
    +
    82 weak_ptr(weak_ptr&& o) noexcept
    +
    83 {
    +
    84 swap(std::move(o));
    +
    85 }
    +
    86 weak_ptr(const weak_ptr& o) noexcept {
    +
    87 if (o._ptr) {
    +
    88 swap(o._ptr->weak_from_this());
    +
    89 }
    +
    90 }
    +
    91 weak_ptr& operator=(weak_ptr&& o) noexcept {
    +
    92 if (this != &o) {
    +
    93 clear();
    +
    94 swap(std::move(o));
    +
    95 }
    +
    96 return *this;
    +
    97 }
    +
    98 weak_ptr& operator=(const weak_ptr& o) noexcept {
    +
    99 if (this != &o) {
    +
    100 clear();
    +
    101 if (o._ptr) {
    +
    102 swap(o._ptr->weak_from_this());
    +
    103 }
    +
    104 }
    +
    105 return *this;
    +
    106 }
    +
    107 explicit operator bool() const noexcept { return _ptr != nullptr; }
    +
    108 T* operator->() const noexcept { return _ptr; }
    +
    109 T& operator*() const noexcept { return *_ptr; }
    +
    110 T* get() const noexcept { return _ptr; }
    +
    111 bool operator==(const weak_ptr& o) const noexcept { return _ptr == o._ptr; }
    +
    112 bool operator!=(const weak_ptr& o) const noexcept { return _ptr != o._ptr; }
    +
    113};
    +
    114
    +
    132template<typename T>
    + +
    134 boost::intrusive::list<weak_ptr<T>,
    +
    135 boost::intrusive::member_hook<weak_ptr<T>, typename weak_ptr<T>::hook_type, &weak_ptr<T>::_hook>,
    +
    136 boost::intrusive::constant_time_size<false>> _ptr_list;
    +
    137public:
    +
    138 // Note: The default constructor's body is implemented as no-op
    +
    139 // rather than `noexcept = default` due to a bug with gcc 9.3.1
    +
    140 // that deletes the constructor since boost::intrusive::member_hook
    +
    141 // is not default_nothrow_constructible.
    +
    142 weakly_referencable() noexcept {}
    +
    143 weakly_referencable(weakly_referencable&&) = delete; // pointer to this is captured and passed to weak_ptr
    + +
    145 ~weakly_referencable() noexcept {
    +
    146 _ptr_list.clear_and_dispose([] (weak_ptr<T>* wp) noexcept {
    +
    147 wp->_ptr = nullptr;
    +
    148 });
    +
    149 }
    +
    150 weak_ptr<T> weak_from_this() noexcept {
    +
    151 weak_ptr<T> ptr(static_cast<T*>(this));
    +
    152 _ptr_list.push_back(ptr);
    +
    153 return ptr;
    +
    154 }
    +
    155
    +
    156 weak_ptr<const T> weak_from_this() const noexcept {
    +
    157 return const_cast<weakly_referencable*>(this)->weak_from_this();
    +
    158 }
    +
    159};
    +
    160
    +
    161}
    +
    162
    +
    Definition: weak_ptr.hh:46
    +
    Definition: weak_ptr.hh:133
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    + + + + diff --git a/master/when__all_8hh_source.html b/master/when__all_8hh_source.html new file mode 100644 index 000000000..ed95d26a0 --- /dev/null +++ b/master/when__all_8hh_source.html @@ -0,0 +1,587 @@ + + + + + + + +Seastar: seastar/core/when_all.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    when_all.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright (C) 2020 ScyllaDB.
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#ifndef SEASTAR_MODULE
    +
    26#include <seastar/core/future.hh>
    +
    27#include <seastar/core/loop.hh>
    +
    28#include <seastar/util/tuple_utils.hh>
    +
    29#include <seastar/util/critical_alloc_section.hh>
    +
    30#include <seastar/util/modules.hh>
    +
    31#include <cstddef>
    +
    32#include <exception>
    +
    33#include <tuple>
    +
    34#include <type_traits>
    +
    35#include <utility>
    +
    36#include <vector>
    +
    37#endif
    +
    38
    +
    39namespace seastar {
    +
    40
    +
    43
    +
    44namespace internal {
    +
    45
    +
    46template<typename... Futures>
    +
    47struct identity_futures_tuple {
    +
    48 using future_type = future<std::tuple<Futures...>>;
    +
    49 using promise_type = typename future_type::promise_type;
    +
    50
    +
    51 static void set_promise(promise_type& p, std::tuple<Futures...> futures) {
    +
    52 p.set_value(std::move(futures));
    +
    53 }
    +
    54
    +
    55 static future_type make_ready_future(std::tuple<Futures...> futures) noexcept {
    +
    56 return seastar::make_ready_future<std::tuple<Futures...>>(std::move(futures));
    +
    57 }
    +
    58
    +
    59 static future_type current_exception_as_future() noexcept {
    +
    60 return seastar::current_exception_as_future<std::tuple<Futures...>>();
    +
    61 }
    +
    62};
    +
    63
    +
    64class when_all_state_base;
    +
    65
    +
    66// If the future is ready, return true
    +
    67// if the future is not ready, chain a continuation to it, and return false
    +
    68using when_all_process_element_func = bool (*)(void* future, void* continuation, when_all_state_base* wasb) noexcept;
    +
    69
    +
    70struct when_all_process_element {
    +
    71 when_all_process_element_func func;
    +
    72 void* future;
    +
    73};
    +
    74
    +
    75class when_all_state_base {
    +
    76 size_t _nr_remain;
    +
    77 const when_all_process_element* _processors;
    +
    78 void* _continuation;
    +
    79public:
    +
    80 virtual ~when_all_state_base() {}
    +
    81 when_all_state_base(size_t nr_remain, const when_all_process_element* processors, void* continuation)
    +
    82 : _nr_remain(nr_remain), _processors(processors), _continuation(continuation) {
    +
    83 }
    +
    84 virtual task* waiting_task() = 0;
    +
    85 void complete_one() noexcept {
    +
    86 // We complete in reverse order; if the futures happen to complete
    +
    87 // in order, then waiting for the last one will find the rest ready
    +
    88 --_nr_remain;
    +
    89 while (_nr_remain) {
    +
    90 bool ready = process_one(_nr_remain - 1);
    +
    91 if (!ready) {
    +
    92 return;
    +
    93 }
    +
    94 --_nr_remain;
    +
    95 }
    +
    96 if (!_nr_remain) {
    +
    97 delete this;
    +
    98 }
    +
    99 }
    +
    100 void do_wait_all() noexcept {
    +
    101 ++_nr_remain; // fake pending completion for complete_one()
    +
    102 complete_one();
    +
    103 }
    +
    104 bool process_one(size_t idx) noexcept {
    +
    105 auto p = _processors[idx];
    +
    106 return p.func(p.future, _continuation, this);
    +
    107 }
    +
    108};
    +
    109
    +
    110template <typename Future>
    +
    111class when_all_state_component final : public continuation_base_from_future_t<Future> {
    +
    112 when_all_state_base* _base;
    +
    113 Future* _final_resting_place;
    +
    114public:
    +
    115 static bool process_element_func(void* future, void* continuation, when_all_state_base* wasb) noexcept {
    +
    116 auto f = reinterpret_cast<Future*>(future);
    +
    117 if (f->available()) {
    +
    118 return true;
    +
    119 } else {
    +
    120 auto c = new (continuation) when_all_state_component(wasb, f);
    +
    121 set_callback(std::move(*f), c);
    +
    122 return false;
    +
    123 }
    +
    124 }
    +
    125 when_all_state_component(when_all_state_base *base, Future* future) noexcept : _base(base), _final_resting_place(future) {}
    +
    126 task* waiting_task() noexcept override { return _base->waiting_task(); }
    +
    127 virtual void run_and_dispose() noexcept override {
    +
    128 using futurator = futurize<Future>;
    +
    129 if (__builtin_expect(this->_state.failed(), false)) {
    +
    130 *_final_resting_place = futurator::make_exception_future(std::move(this->_state).get_exception());
    +
    131 } else {
    +
    132 *_final_resting_place = futurator::from_tuple(std::move(this->_state).get_value());
    +
    133 }
    +
    134 auto base = _base;
    +
    135 this->~when_all_state_component();
    +
    136 base->complete_one();
    +
    137 }
    +
    138};
    +
    139
    +
    140template<typename ResolvedTupleTransform, typename... Futures>
    +
    141class when_all_state : public when_all_state_base {
    +
    142 static constexpr size_t nr = sizeof...(Futures);
    +
    143 using type = std::tuple<Futures...>;
    +
    144 type tuple;
    +
    145 // We only schedule one continuation at a time, and store it in _cont.
    +
    146 // This way, if while the future we wait for completes, some other futures
    +
    147 // also complete, we won't need to schedule continuations for them.
    +
    148 alignas(when_all_state_component<Futures>...) std::byte _cont[std::max({sizeof(when_all_state_component<Futures>)...})];
    +
    149 when_all_process_element _processors[nr];
    +
    150public:
    +
    151 typename ResolvedTupleTransform::promise_type p;
    +
    152 when_all_state(Futures&&... t) : when_all_state_base(nr, _processors, &_cont), tuple(std::make_tuple(std::move(t)...)) {
    +
    153 init_element_processors(std::make_index_sequence<nr>());
    +
    154 }
    +
    155 virtual ~when_all_state() {
    +
    156 ResolvedTupleTransform::set_promise(p, std::move(tuple));
    +
    157 }
    +
    158 task* waiting_task() noexcept override {
    +
    159 return p.waiting_task();
    +
    160 }
    +
    161private:
    +
    162 template <size_t... Idx>
    +
    163 void init_element_processors(std::index_sequence<Idx...>) {
    +
    164 auto ignore = {
    +
    165 0,
    +
    166 (_processors[Idx] = when_all_process_element{
    +
    167 when_all_state_component<std::tuple_element_t<Idx, type>>::process_element_func,
    +
    168 &std::get<Idx>(tuple)
    +
    169 }, 0)...
    +
    170 };
    +
    171 (void)ignore;
    +
    172 }
    +
    173public:
    +
    174 static typename ResolvedTupleTransform::future_type wait_all(Futures&&... futures) noexcept {
    +
    175 if ((futures.available() && ...)) {
    +
    176 return ResolvedTupleTransform::make_ready_future(std::make_tuple(std::move(futures)...));
    +
    177 }
    +
    178 auto state = [&] () noexcept {
    +
    179 memory::scoped_critical_alloc_section _;
    +
    180 return new when_all_state(std::move(futures)...);
    +
    181 }();
    +
    182 auto ret = state->p.get_future();
    +
    183 state->do_wait_all();
    +
    184 return ret;
    +
    185 }
    +
    186};
    +
    187
    +
    188} // namespace internal
    +
    189
    +
    191
    +
    192namespace impl {
    +
    193
    +
    194// Want: folds
    +
    195
    +
    196template <typename T>
    +
    197struct is_tuple_of_futures : std::false_type {
    +
    198};
    +
    199
    +
    200template <>
    +
    201struct is_tuple_of_futures<std::tuple<>> : std::true_type {
    +
    202};
    +
    203
    +
    204template <typename... T, typename... Rest>
    +
    205struct is_tuple_of_futures<std::tuple<future<T...>, Rest...>> : is_tuple_of_futures<std::tuple<Rest...>> {
    +
    206};
    +
    207
    +
    208}
    +
    209
    +
    210template <typename... Futs>
    +
    211concept AllAreFutures = impl::is_tuple_of_futures<std::tuple<Futs...>>::value;
    +
    212
    +
    213template<typename Fut, std::enable_if_t<is_future<Fut>::value, int> = 0>
    +
    214auto futurize_invoke_if_func(Fut&& fut) noexcept {
    +
    215 return std::forward<Fut>(fut);
    +
    216}
    +
    217
    +
    218template<typename Func, std::enable_if_t<!is_future<Func>::value, int> = 0>
    +
    219auto futurize_invoke_if_func(Func&& func) noexcept {
    +
    220 return futurize_invoke(std::forward<Func>(func));
    +
    221}
    +
    223
    +
    224namespace internal {
    +
    225
    +
    226template <typename... Futs>
    +
    227requires seastar::AllAreFutures<Futs...>
    +
    228inline
    +
    229future<std::tuple<Futs...>>
    +
    230when_all_impl(Futs&&... futs) noexcept {
    +
    231 using state = when_all_state<identity_futures_tuple<Futs...>, Futs...>;
    +
    232 return state::wait_all(std::forward<Futs>(futs)...);
    +
    233}
    +
    234
    +
    235} // namespace internal
    +
    236
    +
    250SEASTAR_MODULE_EXPORT
    +
    251template <typename... FutOrFuncs>
    +
    252inline auto when_all(FutOrFuncs&&... fut_or_funcs) noexcept {
    +
    253 return internal::when_all_impl(futurize_invoke_if_func(std::forward<FutOrFuncs>(fut_or_funcs))...);
    +
    254}
    +
    255
    +
    256namespace internal {
    +
    257
    +
    258template<typename Future>
    +
    259struct identity_futures_vector {
    +
    260 using future_type = future<std::vector<Future>>;
    +
    261 static future_type run(std::vector<Future> futures) noexcept {
    +
    262 return make_ready_future<std::vector<Future>>(std::move(futures));
    +
    263 }
    +
    264 static future_type current_exception_as_future() noexcept {
    +
    265 return seastar::current_exception_as_future<std::vector<Future>>();
    +
    266 }
    +
    267};
    +
    268
    +
    269// Internal function for when_all().
    +
    270template <typename ResolvedVectorTransform, typename Future>
    +
    271inline
    +
    272typename ResolvedVectorTransform::future_type
    +
    273complete_when_all(std::vector<Future>&& futures, typename std::vector<Future>::iterator pos) noexcept {
    +
    274 // If any futures are already ready, skip them.
    +
    275 while (pos != futures.end() && pos->available()) {
    +
    276 ++pos;
    +
    277 }
    +
    278 // Done?
    +
    279 if (pos == futures.end()) {
    +
    280 return ResolvedVectorTransform::run(std::move(futures));
    +
    281 }
    +
    282 // Wait for unready future, store, and continue.
    +
    283 return pos->then_wrapped([futures = std::move(futures), pos] (auto fut) mutable {
    +
    284 *pos++ = std::move(fut);
    +
    285 return complete_when_all<ResolvedVectorTransform>(std::move(futures), pos);
    +
    286 });
    +
    287}
    +
    288
    +
    289template<typename ResolvedVectorTransform, typename FutureIterator>
    +
    290inline auto
    +
    291do_when_all(FutureIterator begin, FutureIterator end) noexcept {
    +
    292 using itraits = std::iterator_traits<FutureIterator>;
    +
    293 auto make_values_vector = [] (size_t size) noexcept {
    +
    294 memory::scoped_critical_alloc_section _;
    +
    295 std::vector<typename itraits::value_type> ret;
    +
    296 ret.reserve(size);
    +
    297 return ret;
    +
    298 };
    +
    299 std::vector<typename itraits::value_type> ret =
    +
    300 make_values_vector(iterator_range_estimate_vector_capacity(begin, end, typename itraits::iterator_category()));
    +
    301 // Important to invoke the *begin here, in case it's a function iterator,
    +
    302 // so we launch all computation in parallel.
    +
    303 std::move(begin, end, std::back_inserter(ret));
    +
    304 return complete_when_all<ResolvedVectorTransform>(std::move(ret), ret.begin());
    +
    305}
    +
    306
    +
    307} // namespace internal
    +
    308
    +
    319SEASTAR_MODULE_EXPORT
    +
    320template <typename FutureIterator>
    +
    321requires requires (FutureIterator i) { { *i++ }; requires is_future<std::remove_reference_t<decltype(*i)>>::value; }
    +
    322inline
    + +
    324when_all(FutureIterator begin, FutureIterator end) noexcept {
    +
    325 namespace si = internal;
    +
    326 using itraits = std::iterator_traits<FutureIterator>;
    +
    327 using result_transform = si::identity_futures_vector<typename itraits::value_type>;
    +
    328 try {
    +
    329 return si::do_when_all<result_transform>(std::move(begin), std::move(end));
    +
    330 } catch (...) {
    + +
    332 }
    +
    333}
    +
    334
    +
    335namespace internal {
    +
    336
    +
    337template<typename Future>
    +
    338struct future_has_value {
    +
    339 enum {
    +
    340 value = !std::is_same_v<std::decay_t<Future>, future<>>
    +
    341 };
    +
    342};
    +
    343
    +
    344template<typename Tuple>
    +
    345struct tuple_to_future;
    +
    346
    +
    347template<typename... Elements>
    +
    348struct tuple_to_future<std::tuple<Elements...>> {
    +
    349 using value_type = std::tuple<Elements...>;
    +
    350 using type = future<value_type>;
    +
    351 using promise_type = promise<value_type>;
    +
    352
    +
    353 // Elements... all come from futures, so we know they are nothrow move
    +
    354 // constructible. `future` also has a static assertion to that effect.
    +
    355
    +
    356 static auto make_ready(std::tuple<Elements...> t) noexcept {
    +
    357 return make_ready_future<value_type>(value_type(std::move(t)));
    +
    358 }
    +
    359
    +
    360 static auto make_failed(std::exception_ptr excp) noexcept {
    +
    361 return seastar::make_exception_future<value_type>(std::move(excp));
    +
    362 }
    +
    363};
    +
    364
    +
    365template<typename... Futures>
    +
    366class extract_values_from_futures_tuple {
    +
    367 static auto transform(std::tuple<Futures...> futures) noexcept {
    +
    368 auto prepare_result = [] (auto futures) noexcept {
    +
    369 auto fs = tuple_filter_by_type<internal::future_has_value>(std::move(futures));
    +
    370 return tuple_map(std::move(fs), [] (auto&& e) {
    +
    371 return e.get();
    +
    372 });
    +
    373 };
    +
    374
    +
    375 using tuple_futurizer = internal::tuple_to_future<decltype(prepare_result(std::move(futures)))>;
    +
    376
    +
    377 std::exception_ptr excp;
    +
    378 tuple_for_each(futures, [&excp] (auto& f) {
    +
    379 if (!excp) {
    +
    380 if (f.failed()) {
    +
    381 excp = f.get_exception();
    +
    382 }
    +
    383 } else {
    +
    384 f.ignore_ready_future();
    +
    385 }
    +
    386 });
    +
    387 if (excp) {
    +
    388 return tuple_futurizer::make_failed(std::move(excp));
    +
    389 }
    +
    390
    +
    391 return tuple_futurizer::make_ready(prepare_result(std::move(futures)));
    +
    392 }
    +
    393public:
    +
    394 using future_type = decltype(transform(std::declval<std::tuple<Futures...>>()));
    +
    395 using promise_type = typename future_type::promise_type;
    +
    396
    +
    397 static void set_promise(promise_type& p, std::tuple<Futures...> tuple) {
    +
    398 transform(std::move(tuple)).forward_to(std::move(p));
    +
    399 }
    +
    400
    +
    401 static future_type make_ready_future(std::tuple<Futures...> tuple) noexcept {
    +
    402 return transform(std::move(tuple));
    +
    403 }
    +
    404
    +
    405 static future_type current_exception_as_future() noexcept {
    +
    406 future_type (*type_deduct)() = current_exception_as_future;
    +
    407 return type_deduct();
    +
    408 }
    +
    409};
    +
    410
    +
    411template<typename Future>
    +
    412struct extract_values_from_futures_vector {
    +
    413 using value_type = decltype(untuple(std::declval<typename Future::tuple_type>()));
    +
    414
    +
    415 using future_type = future<std::vector<value_type>>;
    +
    416
    +
    417 static future_type run(std::vector<Future> futures) noexcept {
    +
    418 auto make_values_vector = [] (size_t size) noexcept {
    +
    419 memory::scoped_critical_alloc_section _;
    +
    420 std::vector<value_type> values;
    +
    421 values.reserve(size);
    +
    422 return values;
    +
    423 };
    +
    424 std::vector<value_type> values = make_values_vector(futures.size());
    +
    425
    +
    426 std::exception_ptr excp;
    +
    427 for (auto&& f : futures) {
    +
    428 if (!excp) {
    +
    429 if (f.failed()) {
    +
    430 excp = f.get_exception();
    +
    431 } else {
    +
    432 values.emplace_back(f.get());
    +
    433 }
    +
    434 } else {
    +
    435 f.ignore_ready_future();
    +
    436 }
    +
    437 }
    +
    438 if (excp) {
    +
    439 return seastar::make_exception_future<std::vector<value_type>>(std::move(excp));
    +
    440 }
    +
    441 return make_ready_future<std::vector<value_type>>(std::move(values));
    +
    442 }
    +
    443
    +
    444 static future_type current_exception_as_future() noexcept {
    +
    445 return seastar::current_exception_as_future<std::vector<value_type>>();
    +
    446 }
    +
    447};
    +
    448
    +
    449template<>
    +
    450struct extract_values_from_futures_vector<future<>> {
    +
    451 using future_type = future<>;
    +
    452
    +
    453 static future_type run(std::vector<future<>> futures) noexcept {
    +
    454 std::exception_ptr excp;
    +
    455 for (auto&& f : futures) {
    +
    456 if (!excp) {
    +
    457 if (f.failed()) {
    +
    458 excp = f.get_exception();
    +
    459 }
    +
    460 } else {
    +
    461 f.ignore_ready_future();
    +
    462 }
    +
    463 }
    +
    464 if (excp) {
    +
    465 return seastar::make_exception_future<>(std::move(excp));
    +
    466 }
    +
    467 return make_ready_future<>();
    +
    468 }
    +
    469
    +
    470 static future_type current_exception_as_future() noexcept {
    +
    471 return seastar::current_exception_as_future<>();
    +
    472 }
    +
    473};
    +
    474
    +
    475template<typename... Futures>
    +
    476requires seastar::AllAreFutures<Futures...>
    +
    477inline auto when_all_succeed_impl(Futures&&... futures) noexcept {
    +
    478 using state = when_all_state<extract_values_from_futures_tuple<Futures...>, Futures...>;
    +
    479 return state::wait_all(std::forward<Futures>(futures)...);
    +
    480}
    +
    481
    +
    482} // namespace internal
    +
    483
    +
    494SEASTAR_MODULE_EXPORT
    +
    495template <typename... FutOrFuncs>
    +
    496inline auto when_all_succeed(FutOrFuncs&&... fut_or_funcs) noexcept {
    +
    497 return internal::when_all_succeed_impl(futurize_invoke_if_func(std::forward<FutOrFuncs>(fut_or_funcs))...);
    +
    498}
    +
    499
    +
    510SEASTAR_MODULE_EXPORT
    +
    511template <typename FutureIterator, typename = typename std::iterator_traits<FutureIterator>::value_type>
    +
    512requires requires (FutureIterator i) {
    +
    513 *i++;
    +
    514 { i != i } -> std::convertible_to<bool>;
    +
    515 requires is_future<std::remove_reference_t<decltype(*i)>>::value;
    +
    516}
    +
    517inline auto
    +
    518when_all_succeed(FutureIterator begin, FutureIterator end) noexcept {
    +
    519 using itraits = std::iterator_traits<FutureIterator>;
    +
    520 using result_transform = internal::extract_values_from_futures_vector<typename itraits::value_type>;
    +
    521 try {
    +
    522 return internal::do_when_all<result_transform>(std::move(begin), std::move(end));
    +
    523 } catch (...) {
    + +
    525 }
    +
    526}
    +
    527
    +
    528
    +
    540SEASTAR_MODULE_EXPORT
    +
    541template <typename T>
    +
    542inline auto
    +
    543when_all_succeed(std::vector<future<T>>&& futures) noexcept {
    +
    544 using result_transform = internal::extract_values_from_futures_vector<future<T>>;
    +
    545 try {
    +
    546 return internal::complete_when_all<result_transform>(std::move(futures), futures.begin());
    +
    547 } catch (...) {
    + +
    549 }
    +
    550}
    +
    551
    +
    553
    +
    554} // namespace seastar
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    internal::future_stored_type_t< T > value_type
    The data type carried by the future.
    Definition: future.hh:1317
    +
    promise< T > promise_type
    The data type carried by the future.
    Definition: future.hh:1320
    +
    future< T > make_ready_future(A &&... value) noexcept
    Creates a future in an available, value state.
    Definition: future.hh:1943
    +
    future< T > make_exception_future(std::exception_ptr &&value) noexcept
    Creates a future in an available, failed state.
    Definition: future.hh:1949
    +
    future< T > current_exception_as_future() noexcept
    Returns std::current_exception() wrapped in a future.
    Definition: future.hh:1962
    +
    auto when_all_succeed(FutOrFuncs &&... fut_or_funcs) noexcept
    Definition: when_all.hh:496
    +
    auto when_all(FutOrFuncs &&... fut_or_funcs) noexcept
    Definition: when_all.hh:252
    +
    auto tuple_map(const std::tuple< Elements... > &t, Function &&f)
    Definition: tuple_utils.hh:139
    +
    void tuple_for_each(const std::tuple< Elements... > &t, Function &&f)
    Definition: tuple_utils.hh:157
    +
    holds the implementation parts of the metrics layer, do not use directly.
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    STL namespace.
    +
    + + + + diff --git a/master/when__any_8hh_source.html b/master/when__any_8hh_source.html new file mode 100644 index 000000000..70b91f583 --- /dev/null +++ b/master/when__any_8hh_source.html @@ -0,0 +1,218 @@ + + + + + + + +Seastar: seastar/core/when_any.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    when_any.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * author: Niek J Bouman
    +
    21 * reviewers: Avi Kivity, Benny Halevy
    +
    22 * November 2021
    +
    23 */
    +
    24
    +
    25#pragma once
    +
    26
    +
    27#ifndef SEASTAR_MODULE
    +
    28#include <iterator>
    +
    29#include <cstddef>
    +
    30#include <type_traits>
    +
    31#include <vector>
    +
    32#include <tuple>
    +
    33#include <utility>
    +
    34#include <seastar/core/future.hh>
    +
    35#include <seastar/core/shared_ptr.hh>
    +
    36#include <seastar/util/modules.hh>
    +
    37#endif
    +
    38
    +
    39namespace seastar {
    +
    40
    +
    41template <class Sequence>
    + +
    43 std::size_t index;
    +
    44 Sequence futures;
    +
    45};
    +
    46
    +
    47namespace internal {
    +
    48class waiter {
    +
    49 bool _done = false;
    +
    50 promise<std::size_t> _promise;
    +
    51
    +
    52public:
    +
    53 void done(std::size_t index) {
    +
    54 if (!_done) {
    +
    55 _done = true;
    +
    56 _promise.set_value(index);
    +
    57 }
    +
    58 }
    +
    59 auto get_future() { return _promise.get_future(); }
    +
    60};
    +
    61
    +
    62} // namespace internal
    +
    63
    +
    76SEASTAR_MODULE_EXPORT
    +
    77template <class FutureIterator>
    +
    78requires requires (FutureIterator i) { { *i++ }; requires is_future<std::remove_reference_t<decltype(*i)>>::value; }
    +
    79auto when_any(FutureIterator begin, FutureIterator end) noexcept
    + +
    81{
    + +
    83 if (begin == end) {
    +
    84 return make_ready_future<ReturnType>();
    +
    85 }
    +
    86 ReturnType result;
    +
    87 result.futures.reserve(std::distance(begin, end));
    +
    88 auto waiter_obj = make_lw_shared<internal::waiter>();
    +
    89 std::size_t index{0};
    +
    90 for (auto it = begin; it != end; ++it) {
    +
    91 if (it->available()) {
    +
    92 result.futures.push_back(std::move(*it));
    +
    93 waiter_obj->done(index);
    +
    94 } else {
    +
    95 result.futures.push_back(it->finally([waiter_obj, index] {
    +
    96 waiter_obj->done(index);
    +
    97 }));
    +
    98 }
    +
    99 index++;
    +
    100 }
    +
    101 return waiter_obj->get_future().then(
    +
    102 [result = std::move(result)](std::size_t index) mutable {
    +
    103 result.index = index;
    +
    104 return std::move(result);
    +
    105 }
    +
    106 );
    +
    107}
    +
    108
    +
    109namespace internal {
    +
    110
    +
    111template <class... Futures, std::size_t... I>
    +
    112future<when_any_result<std::tuple<Futures...>>>
    +
    113when_any_impl(std::index_sequence<I...>, Futures&&... futs) noexcept
    +
    114{
    +
    115 auto waiter_obj = make_lw_shared<waiter>();
    +
    116 auto attach_notifier = [&](auto&& fut, size_t index) {
    +
    117 if (fut.available()) {
    +
    118 waiter_obj->done(index);
    +
    119 return std::move(fut);
    +
    120 }
    +
    121 else {
    +
    122 return fut.finally([waiter_obj, index] { waiter_obj->done(index); });
    +
    123 }
    +
    124 };
    +
    125
    +
    126 auto result =
    +
    127 when_any_result<std::tuple<Futures...>>{0, std::make_tuple(attach_notifier(std::forward<Futures>(futs), I)...)};
    +
    128 return waiter_obj->get_future().then([result = std::move(result)](std::size_t index) mutable {
    +
    129 result.index = index;
    +
    130 return std::move(result);
    +
    131 });
    +
    132}
    +
    133
    +
    134} // namespace internal
    +
    135
    +
    149SEASTAR_MODULE_EXPORT
    +
    150template <class... FutOrFuncs>
    +
    151auto when_any(FutOrFuncs&&... fut_or_funcs) noexcept
    +
    152{
    +
    153 return internal::when_any_impl(std::make_index_sequence<sizeof...(FutOrFuncs)>{},
    +
    154 futurize_invoke_if_func(std::forward<FutOrFuncs>(fut_or_funcs))...);
    +
    155}
    +
    156
    +
    157} // namespace seastar
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    promise - allows a future value to be made available at a later time.
    Definition: future.hh:934
    +
    void set_value(A &&... a) noexcept
    Sets the promises value.
    Definition: future.hh:990
    +
    future< T > get_future() noexcept
    Gets the promise's associated future.
    Definition: future.hh:1926
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    auto when_any(FutureIterator begin, FutureIterator end) noexcept -> future< when_any_result< std::vector< std::decay_t< typename std::iterator_traits< FutureIterator >::value_type > > > >
    Definition: when_any.hh:79
    +
    Definition: when_any.hh:42
    +
    + + + + diff --git a/master/with__scheduling__group_8hh_source.html b/master/with__scheduling__group_8hh_source.html new file mode 100644 index 000000000..ec0fbb08f --- /dev/null +++ b/master/with__scheduling__group_8hh_source.html @@ -0,0 +1,153 @@ + + + + + + + +Seastar: seastar/core/with_scheduling_group.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    with_scheduling_group.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright (C) 2020 ScyllaDB.
    +
    21 */
    +
    22
    +
    23#pragma once
    +
    24
    +
    25#ifndef SEASTAR_MODULE
    +
    26#include <seastar/core/future.hh>
    +
    27#include <seastar/core/make_task.hh>
    +
    28#include <seastar/util/modules.hh>
    +
    29#include <tuple>
    +
    30#include <utility>
    +
    31#endif
    +
    32
    +
    33namespace seastar {
    +
    34
    +
    37
    +
    38namespace internal {
    +
    39
    +
    40template <typename Func>
    +
    41requires std::is_nothrow_move_constructible_v<Func>
    +
    42auto
    +
    43schedule_in_group(scheduling_group sg, Func func) noexcept {
    +
    44 static_assert(std::is_nothrow_move_constructible_v<Func>);
    +
    45 auto tsk = make_task(sg, std::move(func));
    +
    46 schedule_checked(tsk);
    +
    47 return tsk->get_future();
    +
    48}
    +
    49
    +
    50
    +
    51}
    +
    52
    +
    63SEASTAR_MODULE_EXPORT
    +
    64template <typename Func, typename... Args>
    +
    65requires std::is_nothrow_move_constructible_v<Func>
    +
    66inline
    +
    67auto
    +
    68with_scheduling_group(scheduling_group sg, Func func, Args&&... args) noexcept {
    +
    69 static_assert(std::is_nothrow_move_constructible_v<Func>);
    +
    70 using return_type = decltype(func(std::forward<Args>(args)...));
    +
    71 using futurator = futurize<return_type>;
    +
    72 if (sg.active()) {
    +
    73 return futurator::invoke(func, std::forward<Args>(args)...);
    +
    74 } else {
    +
    75 return internal::schedule_in_group(sg, [func = std::move(func), args = std::make_tuple(std::forward<Args>(args)...)] () mutable {
    +
    76 return futurator::apply(func, std::move(args));
    +
    77 });
    +
    78 }
    +
    79}
    +
    80
    +
    82
    +
    83} // namespace seastar
    +
    Identifies function calls that are accounted as a group.
    Definition: scheduling.hh:285
    +
    auto with_scheduling_group(scheduling_group sg, Func func, Args &&... args) noexcept
    run a callable (with some arbitrary arguments) in a scheduling group
    Definition: with_scheduling_group.hh:68
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    +
    Converts a type to a future type, if it isn't already.
    Definition: future.hh:1853
    +
    + + + + diff --git a/master/with__timeout_8hh_source.html b/master/with__timeout_8hh_source.html new file mode 100644 index 000000000..3bf17dfaf --- /dev/null +++ b/master/with__timeout_8hh_source.html @@ -0,0 +1,153 @@ + + + + + + + +Seastar: seastar/core/with_timeout.hh Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Seastar +
    +
    High performance C++ framework for concurrent servers
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    with_timeout.hh
    +
    +
    +
    1/*
    +
    2 * This file is open source software, licensed to you under the terms
    +
    3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
    +
    4 * distributed with this work for additional information regarding copyright
    +
    5 * ownership. You may not use this file except in compliance with the License.
    +
    6 *
    +
    7 * You may obtain a copy of the License at
    +
    8 *
    +
    9 * http://www.apache.org/licenses/LICENSE-2.0
    +
    10 *
    +
    11 * Unless required by applicable law or agreed to in writing,
    +
    12 * software distributed under the License is distributed on an
    +
    13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +
    14 * KIND, either express or implied. See the License for the
    +
    15 * specific language governing permissions and limitations
    +
    16 * under the License.
    +
    17 */
    +
    18
    +
    19/*
    +
    20 * Copyright (C) 2020 ScyllaDB.
    +
    21 */
    +
    22
    +
    23
    +
    24#pragma once
    +
    25
    +
    26#ifndef SEASTAR_MODULE
    +
    27#include <chrono>
    +
    28
    +
    29#include <seastar/core/future.hh>
    +
    30#include <seastar/core/timed_out_error.hh>
    +
    31#include <seastar/core/timer.hh>
    +
    32#include <seastar/util/modules.hh>
    +
    33#endif
    +
    34
    +
    35namespace seastar {
    +
    36
    +
    39
    +
    52SEASTAR_MODULE_EXPORT
    +
    53template<typename ExceptionFactory = default_timeout_exception_factory, typename Clock, typename Duration, typename... T>
    +
    54future<T...> with_timeout(std::chrono::time_point<Clock, Duration> timeout, future<T...> f) {
    +
    55 if (f.available()) {
    +
    56 return f;
    +
    57 }
    +
    58 auto pr = std::make_unique<promise<T...>>();
    +
    59 auto result = pr->get_future();
    +
    60 timer<Clock> timer([&pr = *pr] {
    +
    61 pr.set_exception(std::make_exception_ptr(ExceptionFactory::timeout()));
    +
    62 });
    +
    63 timer.arm(timeout);
    +
    64 // Future is returned indirectly.
    +
    65 (void)f.then_wrapped([pr = std::move(pr), timer = std::move(timer)] (auto&& f) mutable {
    +
    66 if (timer.cancel()) {
    +
    67 f.forward_to(std::move(*pr));
    +
    68 } else {
    + +
    70 }
    +
    71 });
    +
    72 return result;
    +
    73}
    +
    74
    +
    76
    +
    77} // namespace seastar
    +
    A representation of a possibly not-yet-computed value.
    Definition: future.hh:1240
    +
    futurize_t< FuncResult > then_wrapped(Func &&func) &noexcept
    Schedule a block of code to run when the future is ready, allowing for exception handling.
    Definition: future.hh:1525
    +
    bool available() const noexcept
    Checks whether the future is available.
    Definition: future.hh:1394
    +
    void ignore_ready_future() noexcept
    Ignore any result hold by this future.
    Definition: future.hh:1766
    +
    promise - allows a future value to be made available at a later time.
    Definition: future.hh:934
    + +
    void arm(time_point until, std::optional< duration > period={}) noexcept
    +
    bool cancel() noexcept
    +
    future< T > get_future() noexcept
    Gets the promise's associated future.
    Definition: future.hh:1926
    +
    future< T... > with_timeout(std::chrono::time_point< Clock, Duration > timeout, future< T... > f)
    Wait for either a future, or a timeout, whichever comes first.
    Definition: with_timeout.hh:54
    +
    Seastar API namespace.
    Definition: abort_on_ebadf.hh:26
    + +
    + + + +