Add ABI extra field to fmgr magic block
This allows derived products to intentionally make their fmgr ABI incompatible, with a clean error message. Discussion: https://www.postgresql.org/message-id/flat/55215fda-db31-a045-d6b7-d6f2d2dc9920%40enterprisedb.com
This commit is contained in:
parent
1b06d7bac9
commit
d6d1dfcc99
@ -330,6 +330,21 @@ incompatible_module_error(const char *libname,
|
|||||||
magic_data.version / 100, library_version)));
|
magic_data.version / 100, library_version)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Similarly, if the ABI extra field doesn't match, error out. Other
|
||||||
|
* fields below might also mismatch, but that isn't useful information if
|
||||||
|
* you're using the wrong product altogether.
|
||||||
|
*/
|
||||||
|
if (strcmp(module_magic_data->abi_extra, magic_data.abi_extra) != 0)
|
||||||
|
{
|
||||||
|
ereport(ERROR,
|
||||||
|
(errmsg("incompatible library \"%s\": ABI mismatch",
|
||||||
|
libname),
|
||||||
|
errdetail("Server has ABI \"%s\", library has \"%s\".",
|
||||||
|
magic_data.abi_extra,
|
||||||
|
module_magic_data->abi_extra)));
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Otherwise, spell out which fields don't agree.
|
* Otherwise, spell out which fields don't agree.
|
||||||
*
|
*
|
||||||
|
@ -458,6 +458,7 @@ typedef struct
|
|||||||
int indexmaxkeys; /* INDEX_MAX_KEYS */
|
int indexmaxkeys; /* INDEX_MAX_KEYS */
|
||||||
int namedatalen; /* NAMEDATALEN */
|
int namedatalen; /* NAMEDATALEN */
|
||||||
int float8byval; /* FLOAT8PASSBYVAL */
|
int float8byval; /* FLOAT8PASSBYVAL */
|
||||||
|
char abi_extra[32]; /* see pg_config_manual.h */
|
||||||
} Pg_magic_struct;
|
} Pg_magic_struct;
|
||||||
|
|
||||||
/* The actual data block contents */
|
/* The actual data block contents */
|
||||||
@ -468,9 +469,13 @@ typedef struct
|
|||||||
FUNC_MAX_ARGS, \
|
FUNC_MAX_ARGS, \
|
||||||
INDEX_MAX_KEYS, \
|
INDEX_MAX_KEYS, \
|
||||||
NAMEDATALEN, \
|
NAMEDATALEN, \
|
||||||
FLOAT8PASSBYVAL \
|
FLOAT8PASSBYVAL, \
|
||||||
|
FMGR_ABI_EXTRA, \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StaticAssertDecl(sizeof(FMGR_ABI_EXTRA) <= sizeof(((Pg_magic_struct*)0)->abi_extra),
|
||||||
|
"FMGR_ABI_EXTRA too long");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Declare the module magic function. It needs to be a function as the dlsym
|
* Declare the module magic function. It needs to be a function as the dlsym
|
||||||
* in the backend is only guaranteed to work on functions, not data
|
* in the backend is only guaranteed to work on functions, not data
|
||||||
|
@ -42,6 +42,23 @@
|
|||||||
*/
|
*/
|
||||||
#define FUNC_MAX_ARGS 100
|
#define FUNC_MAX_ARGS 100
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When creating a product derived from PostgreSQL with changes that cause
|
||||||
|
* incompatibilities for loadable modules, it is recommended to change this
|
||||||
|
* string so that dfmgr.c can refuse to load incompatible modules with a clean
|
||||||
|
* error message. Typical examples that cause incompatibilities are any
|
||||||
|
* changes to node tags or node structures. (Note that dfmgr.c already
|
||||||
|
* detects common sources of incompatibilities due to major version
|
||||||
|
* differences and due to some changed compile-time constants. This setting
|
||||||
|
* is for catching anything that cannot be detected in a straightforward way.)
|
||||||
|
*
|
||||||
|
* There is no prescribed format for the string. The suggestion is to include
|
||||||
|
* product or company name, and optionally any internally-relevant ABI
|
||||||
|
* version. Example: "ACME Postgres/1.2". Note that the string will appear
|
||||||
|
* in a user-facing error message if an ABI mismatch is detected.
|
||||||
|
*/
|
||||||
|
#define FMGR_ABI_EXTRA "PostgreSQL"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Maximum number of columns in an index. There is little point in making
|
* Maximum number of columns in an index. There is little point in making
|
||||||
* this anything but a multiple of 32, because the main cost is associated
|
* this anything but a multiple of 32, because the main cost is associated
|
||||||
|
Loading…
x
Reference in New Issue
Block a user