static-delta: Add --disable-bsdiff option
A builder may not want to pay the CPU penalty. Also it's useful for evaluating performance.
This commit is contained in:
parent
9843c4c245
commit
392929d9bc
|
|
@ -848,10 +848,16 @@ process_one_bsdiff (OstreeRepo *repo,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
DELTAOPT_FLAG_NONE = (1 << 0),
|
||||||
|
DELTAOPT_FLAG_DISABLE_BSDIFF = (1 << 1)
|
||||||
|
} DeltaOpts;
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
generate_delta_lowlatency (OstreeRepo *repo,
|
generate_delta_lowlatency (OstreeRepo *repo,
|
||||||
const char *from,
|
const char *from,
|
||||||
const char *to,
|
const char *to,
|
||||||
|
DeltaOpts opts,
|
||||||
OstreeStaticDeltaBuilder *builder,
|
OstreeStaticDeltaBuilder *builder,
|
||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
GError **error)
|
GError **error)
|
||||||
|
|
@ -988,12 +994,15 @@ generate_delta_lowlatency (OstreeRepo *repo,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!try_content_bsdiff (repo, from_checksum, to_checksum,
|
if (!(opts & DELTAOPT_FLAG_DISABLE_BSDIFF))
|
||||||
&bsdiff, cancellable, error))
|
{
|
||||||
goto out;
|
if (!try_content_bsdiff (repo, from_checksum, to_checksum,
|
||||||
|
&bsdiff, cancellable, error))
|
||||||
|
goto out;
|
||||||
|
|
||||||
if (bsdiff)
|
if (bsdiff)
|
||||||
g_hash_table_insert (bsdiff_optimized_content_objects, g_strdup (to_checksum), bsdiff);
|
g_hash_table_insert (bsdiff_optimized_content_objects, g_strdup (to_checksum), bsdiff);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_printerr ("rollsum for %u/%u modified\n",
|
g_printerr ("rollsum for %u/%u modified\n",
|
||||||
|
|
@ -1215,6 +1224,7 @@ ostree_repo_static_delta_generate (OstreeRepo *self,
|
||||||
guint min_fallback_size;
|
guint min_fallback_size;
|
||||||
guint max_chunk_size;
|
guint max_chunk_size;
|
||||||
GVariant *metadata_source;
|
GVariant *metadata_source;
|
||||||
|
DeltaOpts delta_opts = DELTAOPT_FLAG_NONE;
|
||||||
guint64 total_compressed_size = 0;
|
guint64 total_compressed_size = 0;
|
||||||
guint64 total_uncompressed_size = 0;
|
guint64 total_uncompressed_size = 0;
|
||||||
gs_unref_variant_builder GVariantBuilder *part_headers = NULL;
|
gs_unref_variant_builder GVariantBuilder *part_headers = NULL;
|
||||||
|
|
@ -1238,12 +1248,19 @@ ostree_repo_static_delta_generate (OstreeRepo *self,
|
||||||
max_chunk_size = 32;
|
max_chunk_size = 32;
|
||||||
builder.max_chunk_size_bytes = ((guint64)max_chunk_size) * 1000 * 1000;
|
builder.max_chunk_size_bytes = ((guint64)max_chunk_size) * 1000 * 1000;
|
||||||
|
|
||||||
|
{ gboolean use_bsdiff;
|
||||||
|
if (!g_variant_lookup (params, "bsdiff-enabled", "b", &use_bsdiff))
|
||||||
|
use_bsdiff = TRUE;
|
||||||
|
if (!use_bsdiff)
|
||||||
|
delta_opts |= DELTAOPT_FLAG_DISABLE_BSDIFF;
|
||||||
|
}
|
||||||
|
|
||||||
if (!ostree_repo_load_variant (self, OSTREE_OBJECT_TYPE_COMMIT, to,
|
if (!ostree_repo_load_variant (self, OSTREE_OBJECT_TYPE_COMMIT, to,
|
||||||
&to_commit, error))
|
&to_commit, error))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
/* Ignore optimization flags */
|
/* Ignore optimization flags */
|
||||||
if (!generate_delta_lowlatency (self, from, to, &builder,
|
if (!generate_delta_lowlatency (self, from, to, delta_opts, &builder,
|
||||||
cancellable, error))
|
cancellable, error))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ static char *opt_gpg_homedir;
|
||||||
static char *opt_min_fallback_size;
|
static char *opt_min_fallback_size;
|
||||||
static char *opt_max_chunk_size;
|
static char *opt_max_chunk_size;
|
||||||
static gboolean opt_empty;
|
static gboolean opt_empty;
|
||||||
|
static gboolean opt_disable_bsdiff;
|
||||||
|
|
||||||
#define BUILTINPROTO(name) static gboolean ot_static_delta_builtin_ ## name (int argc, char **argv, GCancellable *cancellable, GError **error)
|
#define BUILTINPROTO(name) static gboolean ot_static_delta_builtin_ ## name (int argc, char **argv, GCancellable *cancellable, GError **error)
|
||||||
|
|
||||||
|
|
@ -54,6 +55,7 @@ static GOptionEntry generate_options[] = {
|
||||||
{ "from", 0, 0, G_OPTION_ARG_STRING, &opt_from_rev, "Create delta from revision REV", "REV" },
|
{ "from", 0, 0, G_OPTION_ARG_STRING, &opt_from_rev, "Create delta from revision REV", "REV" },
|
||||||
{ "empty", 0, 0, G_OPTION_ARG_NONE, &opt_empty, "Create delta from scratch", NULL },
|
{ "empty", 0, 0, G_OPTION_ARG_NONE, &opt_empty, "Create delta from scratch", NULL },
|
||||||
{ "to", 0, 0, G_OPTION_ARG_STRING, &opt_to_rev, "Create delta to revision REV", "REV" },
|
{ "to", 0, 0, G_OPTION_ARG_STRING, &opt_to_rev, "Create delta to revision REV", "REV" },
|
||||||
|
{ "disable-bsdiff", 0, 0, G_OPTION_ARG_NONE, &opt_disable_bsdiff, "Disable use of bsdiff", NULL },
|
||||||
{ "gpg-sign", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_key_ids, "GPG Key ID to sign the delta with", "key-id"},
|
{ "gpg-sign", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_key_ids, "GPG Key ID to sign the delta with", "key-id"},
|
||||||
{ "gpg-homedir", 0, 0, G_OPTION_ARG_STRING, &opt_gpg_homedir, "GPG Homedir to use when looking for keyrings", "homedir"},
|
{ "gpg-homedir", 0, 0, G_OPTION_ARG_STRING, &opt_gpg_homedir, "GPG Homedir to use when looking for keyrings", "homedir"},
|
||||||
{ "min-fallback-size", 0, 0, G_OPTION_ARG_STRING, &opt_min_fallback_size, "Minimum uncompressed size in megabytes for individual HTTP request", NULL},
|
{ "min-fallback-size", 0, 0, G_OPTION_ARG_STRING, &opt_min_fallback_size, "Minimum uncompressed size in megabytes for individual HTTP request", NULL},
|
||||||
|
|
@ -192,6 +194,9 @@ ot_static_delta_builtin_generate (int argc, char **argv, GCancellable *cancellab
|
||||||
if (opt_max_chunk_size)
|
if (opt_max_chunk_size)
|
||||||
g_variant_builder_add (parambuilder, "{sv}",
|
g_variant_builder_add (parambuilder, "{sv}",
|
||||||
"max-chunk-size", g_variant_new_uint32 (g_ascii_strtoull (opt_max_chunk_size, NULL, 10)));
|
"max-chunk-size", g_variant_new_uint32 (g_ascii_strtoull (opt_max_chunk_size, NULL, 10)));
|
||||||
|
if (opt_disable_bsdiff)
|
||||||
|
g_variant_builder_add (parambuilder, "{sv}",
|
||||||
|
"bsdiff-enabled", g_variant_new_boolean (FALSE));
|
||||||
|
|
||||||
g_print ("Generating static delta:\n");
|
g_print ("Generating static delta:\n");
|
||||||
g_print (" From: %s\n", from_resolved ? from_resolved : "empty");
|
g_print (" From: %s\n", from_resolved ? from_resolved : "empty");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue