{
http_static_server_main_t *hsm = &http_static_server_main;
http_session_t *hs;
- pool_get (hsm->sessions[thread_index], hs);
- memset (hs, 0, sizeof (*hs));
+ pool_get_aligned_zero_numa (hsm->sessions[thread_index], hs,
+ 0 /* not aligned */ ,
+ 1 /* zero */ ,
+ os_get_numa_index ());
hs->session_index = hs - hsm->sessions[thread_index];
hs->thread_index = thread_index;
hs->timer_handle = ~0;
if (p)
{
int rv;
- int (*fp) (u8 *, http_session_t *);
+ int (*fp) (http_builtin_method_type_t, u8 *, http_session_t *);
fp = (void *) p[0];
hs->path = path;
- rv = (*fp) (request, hs);
+ rv = (*fp) (request_type, request, hs);
if (rv)
{
clib_warning ("builtin handler %llx hit on %s '%s' but failed!",
hsm->fifo_size ? hsm->fifo_size : 32 << 10;
a->options[APP_OPTIONS_FLAGS] = APP_OPTIONS_FLAGS_IS_BUILTIN;
a->options[APP_OPTIONS_PREALLOC_FIFO_PAIRS] = hsm->prealloc_fifos;
- a->options[APP_OPTIONS_TLS_ENGINE] = TLS_ENGINE_OPENSSL;
+ a->options[APP_OPTIONS_TLS_ENGINE] = CRYPTO_ENGINE_OPENSSL;
if (vnet_application_attach (a))
{
};
/* *INDENT-ON* */
+static clib_error_t *
+http_clear_static_cache_command_fn (vlib_main_t * vm,
+ unformat_input_t * input,
+ vlib_cli_command_t * cmd)
+{
+ http_static_server_main_t *hsm = &http_static_server_main;
+ file_data_cache_t *dp;
+ u32 free_index;
+ u32 busy_items = 0;
+ BVT (clib_bihash_kv) kv;
+
+ if (hsm->www_root == 0)
+ return clib_error_return (0, "Static server disabled");
+
+ http_static_server_sessions_reader_lock ();
+
+ /* Walk the LRU list to find active entries */
+ free_index = hsm->last_index;
+ while (free_index != ~0)
+ {
+ dp = pool_elt_at_index (hsm->cache_pool, free_index);
+ free_index = dp->prev_index;
+ /* Which could be in use... */
+ if (dp->inuse)
+ {
+ busy_items++;
+ free_index = dp->next_index;
+ continue;
+ }
+ kv.key = (u64) (dp->filename);
+ kv.value = ~0ULL;
+ if (BV (clib_bihash_add_del) (&hsm->name_to_data, &kv,
+ 0 /* is_add */ ) < 0)
+ {
+ clib_warning ("BUG: cache clear delete '%s' FAILED!", dp->filename);
+ }
+
+ lru_remove (hsm, dp);
+ hsm->cache_size -= vec_len (dp->data);
+ hsm->cache_evictions++;
+ vec_free (dp->filename);
+ vec_free (dp->data);
+ if (hsm->debug_level > 1)
+ clib_warning ("pool put index %d", dp - hsm->cache_pool);
+ pool_put (hsm->cache_pool, dp);
+ free_index = hsm->last_index;
+ }
+ http_static_server_sessions_reader_unlock ();
+ if (busy_items > 0)
+ vlib_cli_output (vm, "Note: %d busy items still in cache...", busy_items);
+ else
+ vlib_cli_output (vm, "Cache cleared...");
+ return 0;
+}
+
+/*?
+ * Clear the static http server cache, to force the server to
+ * reload content from backing files
+ *
+ * @cliexpar
+ * This command clear the static http server cache
+ * @clistart
+ * clear http static cache
+ * @cliend
+ * @cliexcmd{clear http static cache}
+?*/
+/* *INDENT-OFF* */
+VLIB_CLI_COMMAND (clear_http_static_cache_command, static) =
+{
+ .path = "clear http static cache",
+ .short_help = "clear http static cache",
+ .function = http_clear_static_cache_command_fn,
+};
+/* *INDENT-ON* */
+
static clib_error_t *
http_static_server_main_init (vlib_main_t * vm)
{