Merge branch 'main' into circleci-gha-migration
|
@ -6,7 +6,7 @@ orbs:
|
|||
parameters:
|
||||
image_suffix:
|
||||
type: string
|
||||
default: '-v87fd773'
|
||||
default: '-v9d71045'
|
||||
pg14_version:
|
||||
type: string
|
||||
default: '14.9'
|
||||
|
|
|
@ -240,3 +240,9 @@ Any other SQL you can put directly in the main sql file, e.g.
|
|||
### Running tests
|
||||
|
||||
See [`src/test/regress/README.md`](https://github.com/citusdata/citus/blob/master/src/test/regress/README.md)
|
||||
|
||||
### Documentation
|
||||
|
||||
User-facing documentation is published on [docs.citusdata.com](https://docs.citusdata.com/). When adding a new feature, function, or setting, you can open a pull request or issue against the [Citus docs repo](https://github.com/citusdata/citus_docs/).
|
||||
|
||||
Detailed descriptions of the implementation for Citus developers are provided in the [Citus Technical Documentation](src/backend/distributed/README.md). It is currently a single file for ease of searching. Please update the documentation if you make any changes that affect the design or add major new features.
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
[](https://docs.citusdata.com/)
|
||||
[](https://stackoverflow.com/questions/tagged/citus)
|
||||
|
@ -31,7 +31,7 @@ You can use these Citus superpowers to make your Postgres database scale-out rea
|
|||
|
||||
Our [SIGMOD '21](https://2021.sigmod.org/) paper [Citus: Distributed PostgreSQL for Data-Intensive Applications](https://doi.org/10.1145/3448016.3457551) gives a more detailed look into what Citus is, how it works, and why it works that way.
|
||||
|
||||

|
||||

|
||||
|
||||
Since Citus is an extension to Postgres, you can use Citus with the latest Postgres versions. And Citus works seamlessly with the PostgreSQL tools and extensions you are already familiar with.
|
||||
|
||||
|
@ -423,12 +423,14 @@ A Citus database cluster grows from a single PostgreSQL node into a cluster by a
|
|||
|
||||
Data in distributed tables is stored in “shards”, which are actually just regular PostgreSQL tables on the worker nodes. When querying a distributed table on the coordinator node, Citus will send regular SQL queries to the worker nodes. That way, all the usual PostgreSQL optimizations and extensions can automatically be used with Citus.
|
||||
|
||||

|
||||

|
||||
|
||||
When you send a query in which all (co-located) distributed tables have the same filter on the distribution column, Citus will automatically detect that and send the whole query to the worker node that stores the data. That way, arbitrarily complex queries are supported with minimal routing overhead, which is especially useful for scaling transactional workloads. If queries do not have a specific filter, each shard is queried in parallel, which is especially useful in analytical workloads. The Citus distributed executor is adaptive and is designed to handle both query types at the same time on the same system under high concurrency, which enables large-scale mixed workloads.
|
||||
|
||||
The schema and metadata of distributed tables and reference tables are automatically synchronized to all the nodes in the cluster. That way, you can connect to any node to run distributed queries. Schema changes and cluster administration still need to go through the coordinator.
|
||||
|
||||
Detailed descriptions of the implementation for Citus developers are provided in the [Citus Technical Documentation](src/backend/distributed/README.md).
|
||||
|
||||
## When to use Citus
|
||||
|
||||
Citus is uniquely capable of scaling both analytical and transactional workloads with up to petabytes of data. Use cases in which Citus is commonly used:
|
||||
|
|
After Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 102 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 69 KiB |
After Width: | Height: | Size: 111 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 168 KiB |
|
@ -150,6 +150,17 @@ static DistributeObjectOps Any_AlterRole = {
|
|||
.address = AlterRoleStmtObjectAddress,
|
||||
.markDistributed = false,
|
||||
};
|
||||
|
||||
static DistributeObjectOps Any_AlterRoleRename = {
|
||||
.deparse = DeparseRenameRoleStmt,
|
||||
.qualify = NULL,
|
||||
.preprocess = PreprocessAlterRoleRenameStmt,
|
||||
.postprocess = NULL,
|
||||
.operationType = DIST_OPS_ALTER,
|
||||
.address = RenameRoleStmtObjectAddress,
|
||||
.markDistributed = false,
|
||||
};
|
||||
|
||||
static DistributeObjectOps Any_AlterRoleSet = {
|
||||
.deparse = DeparseAlterRoleSetStmt,
|
||||
.qualify = QualifyAlterRoleSetStmt,
|
||||
|
@ -2059,6 +2070,11 @@ GetDistributeObjectOps(Node *node)
|
|||
return &Publication_Rename;
|
||||
}
|
||||
|
||||
case OBJECT_ROLE:
|
||||
{
|
||||
return &Any_AlterRoleRename;
|
||||
}
|
||||
|
||||
case OBJECT_ROUTINE:
|
||||
{
|
||||
return &Routine_Rename;
|
||||
|
|
|
@ -1306,3 +1306,54 @@ EnsureSequentialModeForRoleDDL(void)
|
|||
"use only one connection for all future commands")));
|
||||
SetLocalMultiShardModifyModeToSequential();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* PreprocessAlterDatabaseSetStmt is executed before the statement is applied to the local
|
||||
* postgres instance.
|
||||
*
|
||||
* In this stage we can prepare the commands that need to be run on all workers to grant
|
||||
* on databases.
|
||||
*/
|
||||
List *
|
||||
PreprocessAlterRoleRenameStmt(Node *node, const char *queryString,
|
||||
ProcessUtilityContext processUtilityContext)
|
||||
{
|
||||
if (!ShouldPropagate())
|
||||
{
|
||||
return NIL;
|
||||
}
|
||||
|
||||
if (!EnableAlterRolePropagation)
|
||||
{
|
||||
return NIL;
|
||||
}
|
||||
|
||||
RenameStmt *stmt = castNode(RenameStmt, node);
|
||||
Assert(stmt->renameType == OBJECT_ROLE);
|
||||
|
||||
|
||||
EnsureCoordinator();
|
||||
|
||||
char *sql = DeparseTreeNode((Node *) stmt);
|
||||
|
||||
List *commands = list_make3(DISABLE_DDL_PROPAGATION,
|
||||
(void *) sql,
|
||||
ENABLE_DDL_PROPAGATION);
|
||||
|
||||
return NodeDDLTaskList(NON_COORDINATOR_NODES, commands);
|
||||
}
|
||||
|
||||
|
||||
List *
|
||||
RenameRoleStmtObjectAddress(Node *node, bool missing_ok, bool isPostprocess)
|
||||
{
|
||||
RenameStmt *stmt = castNode(RenameStmt, node);
|
||||
Assert(stmt->renameType == OBJECT_ROLE);
|
||||
|
||||
Oid roleOid = get_role_oid(stmt->subname, missing_ok);
|
||||
ObjectAddress *address = palloc0(sizeof(ObjectAddress));
|
||||
ObjectAddressSet(*address, AuthIdRelationId, roleOid);
|
||||
|
||||
return list_make1(address);
|
||||
}
|
||||
|
|
|
@ -817,19 +817,6 @@ ProcessUtilityInternal(PlannedStmt *pstmt,
|
|||
ddlJobs = processJobs;
|
||||
}
|
||||
}
|
||||
|
||||
if (IsA(parsetree, RenameStmt) && ((RenameStmt *) parsetree)->renameType ==
|
||||
OBJECT_ROLE && EnableAlterRolePropagation)
|
||||
{
|
||||
if (EnableUnsupportedFeatureMessages)
|
||||
{
|
||||
ereport(NOTICE, (errmsg(
|
||||
"not propagating ALTER ROLE ... RENAME TO commands "
|
||||
"to worker nodes"),
|
||||
errhint("Connect to worker nodes directly to manually "
|
||||
"rename the role")));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (IsA(parsetree, CreateStmt))
|
||||
|
|
|
@ -201,17 +201,51 @@ DeparseCreateRoleStmt(Node *node)
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
AppendSysIdStatement(StringInfo buf, ListCell *optionCell)
|
||||
{
|
||||
DefElem *option = (DefElem *) lfirst(optionCell);
|
||||
if (strcmp(option->defname, "sysid") == 0)
|
||||
{
|
||||
appendStringInfo(buf, " SYSID %d", intVal(option->arg));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* AppendCreateRoleStmt generates the string representation of the
|
||||
* CreateRoleStmt and appends it to the buffer.
|
||||
* AppendInlinePriviliges generates the string representation for the inline
|
||||
* privileges of the role in create statement and appends it to the buffer.
|
||||
*/
|
||||
static void
|
||||
AppendCreateRoleStmt(StringInfo buf, CreateRoleStmt *stmt)
|
||||
AppendInlinePriviliges(StringInfo buf, ListCell *optionCell)
|
||||
{
|
||||
ListCell *optionCell = NULL;
|
||||
DefElem *option = (DefElem *) lfirst(optionCell);
|
||||
|
||||
appendStringInfo(buf, "CREATE ");
|
||||
if (strcmp(option->defname, "adminmembers") == 0)
|
||||
{
|
||||
appendStringInfo(buf, " ADMIN ");
|
||||
AppendRoleList(buf, (List *) option->arg);
|
||||
}
|
||||
else if (strcmp(option->defname, "rolemembers") == 0)
|
||||
{
|
||||
appendStringInfo(buf, " ROLE ");
|
||||
AppendRoleList(buf, (List *) option->arg);
|
||||
}
|
||||
else if (strcmp(option->defname, "addroleto") == 0)
|
||||
{
|
||||
appendStringInfo(buf, " IN ROLE ");
|
||||
AppendRoleList(buf, (List *) option->arg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* AppendStatementType generates the string representation for the statement
|
||||
* type (role, user or group) in alter/create statement and appends it to the buffer.
|
||||
*/
|
||||
static void
|
||||
AppendStatementType(StringInfo buf, CreateRoleStmt *stmt)
|
||||
{
|
||||
switch (stmt->stmt_type)
|
||||
{
|
||||
case ROLESTMT_ROLE:
|
||||
|
@ -232,34 +266,29 @@ AppendCreateRoleStmt(StringInfo buf, CreateRoleStmt *stmt)
|
|||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* AppendCreateRoleStmt generates the string representation of the
|
||||
* CreateRoleStmt and appends it to the buffer.
|
||||
*/
|
||||
static void
|
||||
AppendCreateRoleStmt(StringInfo buf, CreateRoleStmt *stmt)
|
||||
{
|
||||
ListCell *optionCell = NULL;
|
||||
|
||||
appendStringInfo(buf, "CREATE ");
|
||||
|
||||
AppendStatementType(buf, stmt);
|
||||
|
||||
appendStringInfo(buf, "%s", quote_identifier(stmt->role));
|
||||
|
||||
foreach(optionCell, stmt->options)
|
||||
{
|
||||
AppendRoleOption(buf, optionCell);
|
||||
|
||||
DefElem *option = (DefElem *) lfirst(optionCell);
|
||||
|
||||
if (strcmp(option->defname, "sysid") == 0)
|
||||
{
|
||||
appendStringInfo(buf, " SYSID %d", intVal(option->arg));
|
||||
}
|
||||
else if (strcmp(option->defname, "adminmembers") == 0)
|
||||
{
|
||||
appendStringInfo(buf, " ADMIN ");
|
||||
AppendRoleList(buf, (List *) option->arg);
|
||||
}
|
||||
else if (strcmp(option->defname, "rolemembers") == 0)
|
||||
{
|
||||
appendStringInfo(buf, " ROLE ");
|
||||
AppendRoleList(buf, (List *) option->arg);
|
||||
}
|
||||
else if (strcmp(option->defname, "addroleto") == 0)
|
||||
{
|
||||
appendStringInfo(buf, " IN ROLE ");
|
||||
AppendRoleList(buf, (List *) option->arg);
|
||||
}
|
||||
AppendInlinePriviliges(buf, optionCell);
|
||||
AppendSysIdStatement(buf, optionCell);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -326,6 +355,22 @@ AppendRoleList(StringInfo buf, List *roleList)
|
|||
}
|
||||
|
||||
|
||||
char *
|
||||
DeparseRenameRoleStmt(Node *node)
|
||||
{
|
||||
RenameStmt *stmt = castNode(RenameStmt, node);
|
||||
StringInfoData str = { 0 };
|
||||
initStringInfo(&str);
|
||||
|
||||
Assert(stmt->renameType == OBJECT_ROLE);
|
||||
|
||||
appendStringInfo(&str, "ALTER ROLE %s RENAME TO %s;",
|
||||
quote_identifier(stmt->subname), quote_identifier(stmt->newname));
|
||||
|
||||
return str.data;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* DeparseGrantRoleStmt builds and returns a string representing of the
|
||||
* GrantRoleStmt for application on a remote server.
|
||||
|
|
|
@ -1882,14 +1882,15 @@ WaitForGroupedLogicalRepTargetsToCatchUp(XLogRecPtr sourcePosition,
|
|||
GetCurrentTimestamp(),
|
||||
logicalReplicationProgressReportTimeout))
|
||||
{
|
||||
ereport(LOG, (errmsg(
|
||||
"The LSN of the target subscriptions on node %s:%d have "
|
||||
"increased from %ld to %ld at %s where the source LSN is %ld ",
|
||||
superuserConnection->hostname,
|
||||
superuserConnection->port, previousTargetBeforeThisLoop,
|
||||
targetPosition,
|
||||
timestamptz_to_str(previousLSNIncrementTime),
|
||||
sourcePosition)));
|
||||
ereport(LOG, (errmsg("The LSN of the target subscriptions on node %s:%d "
|
||||
"has increased from %X/%X to %X/%X at %s where the "
|
||||
"source LSN is %X/%X ",
|
||||
superuserConnection->hostname,
|
||||
superuserConnection->port,
|
||||
LSN_FORMAT_ARGS(previousTargetBeforeThisLoop),
|
||||
LSN_FORMAT_ARGS(targetPosition),
|
||||
timestamptz_to_str(previousLSNIncrementTime),
|
||||
LSN_FORMAT_ARGS(sourcePosition))));
|
||||
|
||||
previousReportTime = GetCurrentTimestamp();
|
||||
}
|
||||
|
|
|
@ -479,6 +479,10 @@ extern List * PreprocessRenameAttributeStmt(Node *stmt, const char *queryString,
|
|||
extern List * PostprocessAlterRoleStmt(Node *stmt, const char *queryString);
|
||||
extern List * PreprocessAlterRoleSetStmt(Node *stmt, const char *queryString,
|
||||
ProcessUtilityContext processUtilityContext);
|
||||
|
||||
extern List * PreprocessAlterRoleRenameStmt(Node *stmt, const char *queryString,
|
||||
ProcessUtilityContext processUtilityContext);
|
||||
|
||||
extern List * GenerateAlterRoleSetCommandForRole(Oid roleid);
|
||||
extern List * AlterRoleStmtObjectAddress(Node *node,
|
||||
bool missing_ok, bool isPostprocess);
|
||||
|
@ -494,6 +498,10 @@ extern List * PostprocessGrantRoleStmt(Node *stmt, const char *queryString);
|
|||
extern List * GenerateCreateOrAlterRoleCommand(Oid roleOid);
|
||||
extern List * CreateRoleStmtObjectAddress(Node *stmt, bool missing_ok, bool
|
||||
isPostprocess);
|
||||
|
||||
extern List * RenameRoleStmtObjectAddress(Node *stmt, bool missing_ok, bool
|
||||
isPostprocess);
|
||||
|
||||
extern void UnmarkRolesDistributed(List *roles);
|
||||
extern List * FilterDistributedRoles(List *roles);
|
||||
|
||||
|
|
|
@ -201,6 +201,7 @@ extern void QualifyAlterFunctionDependsStmt(Node *stmt);
|
|||
/* forward declarations for deparse_role_stmts.c */
|
||||
extern char * DeparseAlterRoleStmt(Node *stmt);
|
||||
extern char * DeparseAlterRoleSetStmt(Node *stmt);
|
||||
extern char * DeparseRenameRoleStmt(Node *stmt);
|
||||
|
||||
extern List * MakeSetStatementArguments(char *configurationName,
|
||||
char *configurationValue);
|
||||
|
|
|
@ -7,7 +7,7 @@ verify_ssl = true
|
|||
mitmproxy = {editable = true, ref = "main", git = "https://github.com/citusdata/mitmproxy.git"}
|
||||
construct = "==2.9.45"
|
||||
docopt = "==0.6.2"
|
||||
cryptography = ">=39.0.1"
|
||||
cryptography = ">=41.0.4"
|
||||
pytest = "*"
|
||||
psycopg = "*"
|
||||
filelock = "*"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "9568b1f3e4d4fd408e5e263f6346b0a4f479ac88e02f64bb79a9d482096e6a03"
|
||||
"sha256": "b92bf682aeeea1a66a16beaf78584a5318fd0ae908ce85c7e2a4807aa2bee532"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {
|
||||
|
@ -21,6 +21,7 @@
|
|||
"sha256:4ef1ab46b484e3c706329cedeff284a5d40824200638503f5768edb6de7d58e9",
|
||||
"sha256:ffc141aa908e6f175673e7b1b3b7af4fdb0ecb738fc5c8b88f69f055c2415214"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==3.4.1"
|
||||
},
|
||||
"blinker": {
|
||||
|
@ -121,6 +122,7 @@
|
|||
"sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082",
|
||||
"sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==2023.7.22"
|
||||
},
|
||||
"cffi": {
|
||||
|
@ -197,6 +199,7 @@
|
|||
"sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1",
|
||||
"sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==8.0.4"
|
||||
},
|
||||
"construct": {
|
||||
|
@ -208,32 +211,33 @@
|
|||
},
|
||||
"cryptography": {
|
||||
"hashes": [
|
||||
"sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306",
|
||||
"sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84",
|
||||
"sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47",
|
||||
"sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d",
|
||||
"sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116",
|
||||
"sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207",
|
||||
"sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81",
|
||||
"sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087",
|
||||
"sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd",
|
||||
"sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507",
|
||||
"sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858",
|
||||
"sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae",
|
||||
"sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34",
|
||||
"sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906",
|
||||
"sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd",
|
||||
"sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922",
|
||||
"sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7",
|
||||
"sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4",
|
||||
"sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574",
|
||||
"sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1",
|
||||
"sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c",
|
||||
"sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e",
|
||||
"sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de"
|
||||
"sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67",
|
||||
"sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311",
|
||||
"sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8",
|
||||
"sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13",
|
||||
"sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143",
|
||||
"sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f",
|
||||
"sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829",
|
||||
"sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd",
|
||||
"sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397",
|
||||
"sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac",
|
||||
"sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d",
|
||||
"sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a",
|
||||
"sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839",
|
||||
"sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e",
|
||||
"sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6",
|
||||
"sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9",
|
||||
"sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860",
|
||||
"sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca",
|
||||
"sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91",
|
||||
"sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d",
|
||||
"sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714",
|
||||
"sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb",
|
||||
"sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==41.0.3"
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==41.0.4"
|
||||
},
|
||||
"docopt": {
|
||||
"hashes": [
|
||||
|
@ -255,21 +259,24 @@
|
|||
"sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41",
|
||||
"sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==2.0.2"
|
||||
},
|
||||
"filelock": {
|
||||
"hashes": [
|
||||
"sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81",
|
||||
"sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"
|
||||
"sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4",
|
||||
"sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==3.12.2"
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==3.12.4"
|
||||
},
|
||||
"flask": {
|
||||
"hashes": [
|
||||
"sha256:59da8a3170004800a2837844bfa84d49b022550616070f7cb1a659682b2e7c9f",
|
||||
"sha256:e1120c228ca2f553b470df4a5fa927ab66258467526069981b3eb0a91902687d"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==2.0.3"
|
||||
},
|
||||
"h11": {
|
||||
|
@ -277,6 +284,7 @@
|
|||
"sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6",
|
||||
"sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==0.12.0"
|
||||
},
|
||||
"h2": {
|
||||
|
@ -284,6 +292,7 @@
|
|||
"sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d",
|
||||
"sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb"
|
||||
],
|
||||
"markers": "python_full_version >= '3.6.1'",
|
||||
"version": "==4.1.0"
|
||||
},
|
||||
"hpack": {
|
||||
|
@ -291,6 +300,7 @@
|
|||
"sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c",
|
||||
"sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"
|
||||
],
|
||||
"markers": "python_full_version >= '3.6.1'",
|
||||
"version": "==4.0.0"
|
||||
},
|
||||
"hyperframe": {
|
||||
|
@ -298,6 +308,7 @@
|
|||
"sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15",
|
||||
"sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"
|
||||
],
|
||||
"markers": "python_full_version >= '3.6.1'",
|
||||
"version": "==6.0.1"
|
||||
},
|
||||
"iniconfig": {
|
||||
|
@ -305,6 +316,7 @@
|
|||
"sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3",
|
||||
"sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==2.0.0"
|
||||
},
|
||||
"itsdangerous": {
|
||||
|
@ -312,6 +324,7 @@
|
|||
"sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44",
|
||||
"sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==2.1.2"
|
||||
},
|
||||
"jinja2": {
|
||||
|
@ -319,6 +332,7 @@
|
|||
"sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852",
|
||||
"sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==3.1.2"
|
||||
},
|
||||
"kaitaistruct": {
|
||||
|
@ -343,8 +357,11 @@
|
|||
"sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e",
|
||||
"sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431",
|
||||
"sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686",
|
||||
"sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c",
|
||||
"sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559",
|
||||
"sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc",
|
||||
"sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb",
|
||||
"sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939",
|
||||
"sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c",
|
||||
"sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0",
|
||||
"sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4",
|
||||
|
@ -352,6 +369,7 @@
|
|||
"sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575",
|
||||
"sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba",
|
||||
"sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d",
|
||||
"sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd",
|
||||
"sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3",
|
||||
"sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00",
|
||||
"sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155",
|
||||
|
@ -360,6 +378,7 @@
|
|||
"sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f",
|
||||
"sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8",
|
||||
"sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b",
|
||||
"sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007",
|
||||
"sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24",
|
||||
"sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea",
|
||||
"sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198",
|
||||
|
@ -367,9 +386,12 @@
|
|||
"sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee",
|
||||
"sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be",
|
||||
"sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2",
|
||||
"sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1",
|
||||
"sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707",
|
||||
"sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6",
|
||||
"sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c",
|
||||
"sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58",
|
||||
"sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823",
|
||||
"sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779",
|
||||
"sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636",
|
||||
"sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c",
|
||||
|
@ -388,88 +410,87 @@
|
|||
"sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9",
|
||||
"sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57",
|
||||
"sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc",
|
||||
"sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"
|
||||
"sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc",
|
||||
"sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2",
|
||||
"sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==2.1.3"
|
||||
},
|
||||
"mitmproxy": {
|
||||
"editable": true,
|
||||
"git": "https://github.com/citusdata/mitmproxy.git",
|
||||
"markers": "python_version >= '3.10'",
|
||||
"ref": "2fd18ef051b987925a36337ab1d61aa674353b44"
|
||||
},
|
||||
"msgpack": {
|
||||
"hashes": [
|
||||
"sha256:06f5174b5f8ed0ed919da0e62cbd4ffde676a374aba4020034da05fab67b9164",
|
||||
"sha256:0c05a4a96585525916b109bb85f8cb6511db1c6f5b9d9cbcbc940dc6b4be944b",
|
||||
"sha256:137850656634abddfb88236008339fdaba3178f4751b28f270d2ebe77a563b6c",
|
||||
"sha256:17358523b85973e5f242ad74aa4712b7ee560715562554aa2134d96e7aa4cbbf",
|
||||
"sha256:18334484eafc2b1aa47a6d42427da7fa8f2ab3d60b674120bce7a895a0a85bdd",
|
||||
"sha256:1835c84d65f46900920b3708f5ba829fb19b1096c1800ad60bae8418652a951d",
|
||||
"sha256:1967f6129fc50a43bfe0951c35acbb729be89a55d849fab7686004da85103f1c",
|
||||
"sha256:1ab2f3331cb1b54165976a9d976cb251a83183631c88076613c6c780f0d6e45a",
|
||||
"sha256:1c0f7c47f0087ffda62961d425e4407961a7ffd2aa004c81b9c07d9269512f6e",
|
||||
"sha256:20a97bf595a232c3ee6d57ddaadd5453d174a52594bf9c21d10407e2a2d9b3bd",
|
||||
"sha256:20c784e66b613c7f16f632e7b5e8a1651aa5702463d61394671ba07b2fc9e025",
|
||||
"sha256:266fa4202c0eb94d26822d9bfd7af25d1e2c088927fe8de9033d929dd5ba24c5",
|
||||
"sha256:28592e20bbb1620848256ebc105fc420436af59515793ed27d5c77a217477705",
|
||||
"sha256:288e32b47e67f7b171f86b030e527e302c91bd3f40fd9033483f2cacc37f327a",
|
||||
"sha256:3055b0455e45810820db1f29d900bf39466df96ddca11dfa6d074fa47054376d",
|
||||
"sha256:332360ff25469c346a1c5e47cbe2a725517919892eda5cfaffe6046656f0b7bb",
|
||||
"sha256:362d9655cd369b08fda06b6657a303eb7172d5279997abe094512e919cf74b11",
|
||||
"sha256:366c9a7b9057e1547f4ad51d8facad8b406bab69c7d72c0eb6f529cf76d4b85f",
|
||||
"sha256:36961b0568c36027c76e2ae3ca1132e35123dcec0706c4b7992683cc26c1320c",
|
||||
"sha256:379026812e49258016dd84ad79ac8446922234d498058ae1d415f04b522d5b2d",
|
||||
"sha256:382b2c77589331f2cb80b67cc058c00f225e19827dbc818d700f61513ab47bea",
|
||||
"sha256:476a8fe8fae289fdf273d6d2a6cb6e35b5a58541693e8f9f019bfe990a51e4ba",
|
||||
"sha256:48296af57cdb1d885843afd73c4656be5c76c0c6328db3440c9601a98f303d87",
|
||||
"sha256:4867aa2df9e2a5fa5f76d7d5565d25ec76e84c106b55509e78c1ede0f152659a",
|
||||
"sha256:4c075728a1095efd0634a7dccb06204919a2f67d1893b6aa8e00497258bf926c",
|
||||
"sha256:4f837b93669ce4336e24d08286c38761132bc7ab29782727f8557e1eb21b2080",
|
||||
"sha256:4f8d8b3bf1ff2672567d6b5c725a1b347fe838b912772aa8ae2bf70338d5a198",
|
||||
"sha256:525228efd79bb831cf6830a732e2e80bc1b05436b086d4264814b4b2955b2fa9",
|
||||
"sha256:5494ea30d517a3576749cad32fa27f7585c65f5f38309c88c6d137877fa28a5a",
|
||||
"sha256:55b56a24893105dc52c1253649b60f475f36b3aa0fc66115bffafb624d7cb30b",
|
||||
"sha256:56a62ec00b636583e5cb6ad313bbed36bb7ead5fa3a3e38938503142c72cba4f",
|
||||
"sha256:57e1f3528bd95cc44684beda696f74d3aaa8a5e58c816214b9046512240ef437",
|
||||
"sha256:586d0d636f9a628ddc6a17bfd45aa5b5efaf1606d2b60fa5d87b8986326e933f",
|
||||
"sha256:5cb47c21a8a65b165ce29f2bec852790cbc04936f502966768e4aae9fa763cb7",
|
||||
"sha256:6c4c68d87497f66f96d50142a2b73b97972130d93677ce930718f68828b382e2",
|
||||
"sha256:821c7e677cc6acf0fd3f7ac664c98803827ae6de594a9f99563e48c5a2f27eb0",
|
||||
"sha256:916723458c25dfb77ff07f4c66aed34e47503b2eb3188b3adbec8d8aa6e00f48",
|
||||
"sha256:9e6ca5d5699bcd89ae605c150aee83b5321f2115695e741b99618f4856c50898",
|
||||
"sha256:9f5ae84c5c8a857ec44dc180a8b0cc08238e021f57abdf51a8182e915e6299f0",
|
||||
"sha256:a2b031c2e9b9af485d5e3c4520f4220d74f4d222a5b8dc8c1a3ab9448ca79c57",
|
||||
"sha256:a61215eac016f391129a013c9e46f3ab308db5f5ec9f25811e811f96962599a8",
|
||||
"sha256:a740fa0e4087a734455f0fc3abf5e746004c9da72fbd541e9b113013c8dc3282",
|
||||
"sha256:a9985b214f33311df47e274eb788a5893a761d025e2b92c723ba4c63936b69b1",
|
||||
"sha256:ab31e908d8424d55601ad7075e471b7d0140d4d3dd3272daf39c5c19d936bd82",
|
||||
"sha256:ac9dd47af78cae935901a9a500104e2dea2e253207c924cc95de149606dc43cc",
|
||||
"sha256:addab7e2e1fcc04bd08e4eb631c2a90960c340e40dfc4a5e24d2ff0d5a3b3edb",
|
||||
"sha256:b1d46dfe3832660f53b13b925d4e0fa1432b00f5f7210eb3ad3bb9a13c6204a6",
|
||||
"sha256:b2de4c1c0538dcb7010902a2b97f4e00fc4ddf2c8cda9749af0e594d3b7fa3d7",
|
||||
"sha256:b5ef2f015b95f912c2fcab19c36814963b5463f1fb9049846994b007962743e9",
|
||||
"sha256:b72d0698f86e8d9ddf9442bdedec15b71df3598199ba33322d9711a19f08145c",
|
||||
"sha256:bae7de2026cbfe3782c8b78b0db9cbfc5455e079f1937cb0ab8d133496ac55e1",
|
||||
"sha256:bf22a83f973b50f9d38e55c6aade04c41ddda19b00c4ebc558930d78eecc64ed",
|
||||
"sha256:c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c",
|
||||
"sha256:c396e2cc213d12ce017b686e0f53497f94f8ba2b24799c25d913d46c08ec422c",
|
||||
"sha256:cb5aaa8c17760909ec6cb15e744c3ebc2ca8918e727216e79607b7bbce9c8f77",
|
||||
"sha256:cdc793c50be3f01106245a61b739328f7dccc2c648b501e237f0699fe1395b81",
|
||||
"sha256:d25dd59bbbbb996eacf7be6b4ad082ed7eacc4e8f3d2df1ba43822da9bfa122a",
|
||||
"sha256:e42b9594cc3bf4d838d67d6ed62b9e59e201862a25e9a157019e171fbe672dd3",
|
||||
"sha256:e57916ef1bd0fee4f21c4600e9d1da352d8816b52a599c46460e93a6e9f17086",
|
||||
"sha256:ed40e926fa2f297e8a653c954b732f125ef97bdd4c889f243182299de27e2aa9",
|
||||
"sha256:ef8108f8dedf204bb7b42994abf93882da1159728a2d4c5e82012edd92c9da9f",
|
||||
"sha256:f933bbda5a3ee63b8834179096923b094b76f0c7a73c1cfe8f07ad608c58844b",
|
||||
"sha256:fe5c63197c55bce6385d9aee16c4d0641684628f63ace85f73571e65ad1c1e8d"
|
||||
"sha256:00ce5f827d4f26fc094043e6f08b6069c1b148efa2631c47615ae14fb6cafc89",
|
||||
"sha256:04450e4b5e1e662e7c86b6aafb7c230af9334fd0becf5e6b80459a507884241c",
|
||||
"sha256:099c3d8a027367e1a6fc55d15336f04ff65c60c4f737b5739f7db4525c65fe9e",
|
||||
"sha256:102cfb54eaefa73e8ca1e784b9352c623524185c98e057e519545131a56fb0af",
|
||||
"sha256:14db7e1b7a7ed362b2f94897bf2486c899c8bb50f6e34b2db92fe534cdab306f",
|
||||
"sha256:159cfec18a6e125dd4723e2b1de6f202b34b87c850fb9d509acfd054c01135e9",
|
||||
"sha256:1dc67b40fe81217b308ab12651adba05e7300b3a2ccf84d6b35a878e308dd8d4",
|
||||
"sha256:1f0e36a5fa7a182cde391a128a64f437657d2b9371dfa42eda3436245adccbf5",
|
||||
"sha256:229ccb6713c8b941eaa5cf13dc7478eba117f21513b5893c35e44483e2f0c9c8",
|
||||
"sha256:25d3746da40f3c8c59c3b1d001e49fd2aa17904438f980d9a391370366df001e",
|
||||
"sha256:32c0aff31f33033f4961abc01f78497e5e07bac02a508632aef394b384d27428",
|
||||
"sha256:33bbf47ea5a6ff20c23426106e81863cdbb5402de1825493026ce615039cc99d",
|
||||
"sha256:35ad5aed9b52217d4cea739d0ea3a492a18dd86fecb4b132668a69f27fb0363b",
|
||||
"sha256:3910211b0ab20be3a38e0bb944ed45bd4265d8d9f11a3d1674b95b298e08dd5c",
|
||||
"sha256:3b5658b1f9e486a2eec4c0c688f213a90085b9cf2fec76ef08f98fdf6c62f4b9",
|
||||
"sha256:40b801b768f5a765e33c68f30665d3c6ee1c8623a2d2bb78e6e59f2db4e4ceb7",
|
||||
"sha256:47275ff73005a3e5e146e50baa2378e1730cba6e292f0222bc496a8e4c4adfc8",
|
||||
"sha256:55bb4a1bf94e39447bc08238a2fb8a767460388a8192f67c103442eb36920887",
|
||||
"sha256:5b08676a17e3f791daad34d5fcb18479e9c85e7200d5a17cbe8de798643a7e37",
|
||||
"sha256:5b16344032a27b2ccfd341f89dadf3e4ef6407d91e4b93563c14644a8abb3ad7",
|
||||
"sha256:5c5e05e4f5756758c58a8088aa10dc70d851c89f842b611fdccfc0581c1846bc",
|
||||
"sha256:5cd67674db3c73026e0a2c729b909780e88bd9cbc8184256f9567640a5d299a8",
|
||||
"sha256:5e7fae9ca93258a956551708cf60dc6c8145574e32ce8c8c4d894e63bcb04341",
|
||||
"sha256:61213482b5a387ead9e250e9e3cb290292feca39dc83b41c3b1b7b8ffc8d8ecb",
|
||||
"sha256:619a63753ba9e792fe3c6c0fc2b9ee2cfbd92153dd91bee029a89a71eb2942cd",
|
||||
"sha256:652e4b7497825b0af6259e2c54700e6dc33d2fc4ed92b8839435090d4c9cc911",
|
||||
"sha256:68569509dd015fcdd1e6b2b3ccc8c51fd27d9a97f461ccc909270e220ee09685",
|
||||
"sha256:6a01a072b2219b65a6ff74df208f20b2cac9401c60adb676ee34e53b4c651077",
|
||||
"sha256:70843788c85ca385846a2d2f836efebe7bb2687ca0734648bf5c9dc6c55602d2",
|
||||
"sha256:76820f2ece3b0a7c948bbb6a599020e29574626d23a649476def023cbb026787",
|
||||
"sha256:7a006c300e82402c0c8f1ded11352a3ba2a61b87e7abb3054c845af2ca8d553c",
|
||||
"sha256:7baf16fd8908a025c4a8d7b699103e72d41f967e2aee5a2065432bcdbd9fd06e",
|
||||
"sha256:7ecf431786019a7bfedc28281531d706627f603e3691d64eccdbce3ecd353823",
|
||||
"sha256:885de1ed5ea01c1bfe0a34c901152a264c3c1f8f1d382042b92ea354bd14bb0e",
|
||||
"sha256:88cdb1da7fdb121dbb3116910722f5acab4d6e8bfcacab8fafe27e2e7744dc6a",
|
||||
"sha256:95ade0bd4cf69e04e8b8f8ec2d197d9c9c4a9b6902e048dc7456bf6d82e12a80",
|
||||
"sha256:9b88dc97ba86c96b964c3745a445d9a65f76fe21955a953064fe04adb63e9367",
|
||||
"sha256:9c780d992f5d734432726b92a0c87bf1857c3d85082a8dea29cbf56e44a132b3",
|
||||
"sha256:9f85200ea102276afdd3749ca94747f057bbb868d1c52921ee2446730b508d0f",
|
||||
"sha256:a1cf98afa7ad5e7012454ca3fde254499a13f9d92fd50cb46118118a249a1355",
|
||||
"sha256:a635aecf1047255576dbb0927cbf9a7aa4a68e9d54110cc3c926652d18f144e0",
|
||||
"sha256:ae97504958d0bc58c1152045c170815d5c4f8af906561ce044b6358b43d0c97e",
|
||||
"sha256:b06a5095a79384760625b5de3f83f40b3053a385fb893be8a106fbbd84c14980",
|
||||
"sha256:b5c8dd9a386a66e50bd7fa22b7a49fb8ead2b3574d6bd69eb1caced6caea0803",
|
||||
"sha256:bae6c561f11b444b258b1b4be2bdd1e1cf93cd1d80766b7e869a79db4543a8a8",
|
||||
"sha256:bbb4448a05d261fae423d5c0b0974ad899f60825bc77eabad5a0c518e78448c2",
|
||||
"sha256:bd6af61388be65a8701f5787362cb54adae20007e0cc67ca9221a4b95115583b",
|
||||
"sha256:bf652839d16de91fe1cfb253e0a88db9a548796939533894e07f45d4bdf90a5f",
|
||||
"sha256:d6d25b8a5c70e2334ed61a8da4c11cd9b97c6fbd980c406033f06e4463fda006",
|
||||
"sha256:da057d3652e698b00746e47f06dbb513314f847421e857e32e1dc61c46f6c052",
|
||||
"sha256:e0ed35d6d6122d0baa9a1b59ebca4ee302139f4cfb57dab85e4c73ab793ae7ed",
|
||||
"sha256:e36560d001d4ba469d469b02037f2dd404421fd72277d9474efe9f03f83fced5",
|
||||
"sha256:f4321692e7f299277e55f322329b2c972d93bb612d85f3fda8741bec5c6285ce",
|
||||
"sha256:f75114c05ec56566da6b55122791cf5bb53d5aada96a98c016d6231e03132f76",
|
||||
"sha256:fb4571efe86545b772a4630fee578c213c91cbcfd20347806e47fd4e782a18fe",
|
||||
"sha256:fc97aa4b4fb928ff4d3b74da7c30b360d0cb3ede49a5a6e1fd9705f49aea1deb"
|
||||
],
|
||||
"version": "==1.0.5"
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==1.0.6"
|
||||
},
|
||||
"packaging": {
|
||||
"hashes": [
|
||||
"sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61",
|
||||
"sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==23.1"
|
||||
},
|
||||
"passlib": {
|
||||
|
@ -481,10 +502,11 @@
|
|||
},
|
||||
"pluggy": {
|
||||
"hashes": [
|
||||
"sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849",
|
||||
"sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"
|
||||
"sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12",
|
||||
"sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"
|
||||
],
|
||||
"version": "==1.2.0"
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==1.3.0"
|
||||
},
|
||||
"protobuf": {
|
||||
"hashes": [
|
||||
|
@ -510,15 +532,17 @@
|
|||
"sha256:e68ad00695547d9397dd14abd3efba23cb31cef67228f4512d41396971889812",
|
||||
"sha256:e9bffd52d6ee039a1cafb72475b2900c6fd0f0dca667fb7a09af0a3e119e78cb"
|
||||
],
|
||||
"markers": "python_version >= '3.5'",
|
||||
"version": "==3.18.3"
|
||||
},
|
||||
"psycopg": {
|
||||
"hashes": [
|
||||
"sha256:15b25741494344c24066dc2479b0f383dd1b82fa5e75612fa4fa5bb30726e9b6",
|
||||
"sha256:8bbeddae5075c7890b2fa3e3553440376d3c5e28418335dee3c3656b06fa2b52"
|
||||
"sha256:7542c45810ea16356e5126c9b4291cbc3802aa326fcbba09ff154fe380de29be",
|
||||
"sha256:cd711edb64b07d7f8a233c365806caf7e55bbe7cbbd8d5c680f672bb5353c8d5"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==3.1.10"
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==3.1.11"
|
||||
},
|
||||
"publicsuffix2": {
|
||||
"hashes": [
|
||||
|
@ -532,6 +556,7 @@
|
|||
"sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57",
|
||||
"sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'",
|
||||
"version": "==0.5.0"
|
||||
},
|
||||
"pycparser": {
|
||||
|
@ -546,6 +571,7 @@
|
|||
"sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2",
|
||||
"sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==23.2.0"
|
||||
},
|
||||
"pyparsing": {
|
||||
|
@ -553,6 +579,7 @@
|
|||
"sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1",
|
||||
"sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"
|
||||
],
|
||||
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==2.4.7"
|
||||
},
|
||||
"pyperclip": {
|
||||
|
@ -563,11 +590,12 @@
|
|||
},
|
||||
"pytest": {
|
||||
"hashes": [
|
||||
"sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32",
|
||||
"sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"
|
||||
"sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002",
|
||||
"sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==7.4.0"
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==7.4.2"
|
||||
},
|
||||
"pytest-asyncio": {
|
||||
"hashes": [
|
||||
|
@ -575,6 +603,7 @@
|
|||
"sha256:8666c1c8ac02631d7c51ba282e0c69a8a452b211ffedf2599099845da5c5c37b"
|
||||
],
|
||||
"index": "pypi",
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==0.21.1"
|
||||
},
|
||||
"pytest-repeat": {
|
||||
|
@ -583,6 +612,7 @@
|
|||
"sha256:5cd3289745ab3156d43eb9c8e7f7d00a926f3ae5c9cf425bec649b2fe15bad5b"
|
||||
],
|
||||
"index": "pypi",
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
|
||||
"version": "==0.9.1"
|
||||
},
|
||||
"pytest-timeout": {
|
||||
|
@ -591,6 +621,7 @@
|
|||
"sha256:f6f50101443ce70ad325ceb4473c4255e9d74e3c7cd0ef827309dfa4c0d975c6"
|
||||
],
|
||||
"index": "pypi",
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==2.1.0"
|
||||
},
|
||||
"pytest-xdist": {
|
||||
|
@ -599,11 +630,14 @@
|
|||
"sha256:ff9daa7793569e6a68544850fd3927cd257cc03a7ef76c95e86915355e82b5f2"
|
||||
],
|
||||
"index": "pypi",
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==3.3.1"
|
||||
},
|
||||
"pyyaml": {
|
||||
"hashes": [
|
||||
"sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5",
|
||||
"sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc",
|
||||
"sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df",
|
||||
"sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741",
|
||||
"sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206",
|
||||
"sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27",
|
||||
|
@ -611,7 +645,10 @@
|
|||
"sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62",
|
||||
"sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98",
|
||||
"sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696",
|
||||
"sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290",
|
||||
"sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9",
|
||||
"sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d",
|
||||
"sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6",
|
||||
"sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867",
|
||||
"sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47",
|
||||
"sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486",
|
||||
|
@ -619,9 +656,12 @@
|
|||
"sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3",
|
||||
"sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007",
|
||||
"sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938",
|
||||
"sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0",
|
||||
"sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c",
|
||||
"sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735",
|
||||
"sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d",
|
||||
"sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28",
|
||||
"sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4",
|
||||
"sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba",
|
||||
"sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8",
|
||||
"sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5",
|
||||
|
@ -636,7 +676,9 @@
|
|||
"sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43",
|
||||
"sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859",
|
||||
"sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673",
|
||||
"sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54",
|
||||
"sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a",
|
||||
"sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b",
|
||||
"sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab",
|
||||
"sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa",
|
||||
"sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c",
|
||||
|
@ -645,6 +687,7 @@
|
|||
"sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"
|
||||
],
|
||||
"index": "pypi",
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==6.0.1"
|
||||
},
|
||||
"ruamel.yaml": {
|
||||
|
@ -652,51 +695,9 @@
|
|||
"sha256:1a771fc92d3823682b7f0893ad56cb5a5c87c48e62b5399d6f42c8759a583b33",
|
||||
"sha256:ea21da1198c4b41b8e7a259301cc9710d3b972bf8ba52f06218478e6802dd1f1"
|
||||
],
|
||||
"markers": "python_version >= '3'",
|
||||
"version": "==0.17.16"
|
||||
},
|
||||
"ruamel.yaml.clib": {
|
||||
"hashes": [
|
||||
"sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e",
|
||||
"sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3",
|
||||
"sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5",
|
||||
"sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81",
|
||||
"sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497",
|
||||
"sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f",
|
||||
"sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac",
|
||||
"sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697",
|
||||
"sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763",
|
||||
"sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282",
|
||||
"sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94",
|
||||
"sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1",
|
||||
"sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072",
|
||||
"sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9",
|
||||
"sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231",
|
||||
"sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93",
|
||||
"sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b",
|
||||
"sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb",
|
||||
"sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f",
|
||||
"sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307",
|
||||
"sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf",
|
||||
"sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8",
|
||||
"sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b",
|
||||
"sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b",
|
||||
"sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640",
|
||||
"sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7",
|
||||
"sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a",
|
||||
"sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71",
|
||||
"sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8",
|
||||
"sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122",
|
||||
"sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7",
|
||||
"sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80",
|
||||
"sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e",
|
||||
"sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab",
|
||||
"sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0",
|
||||
"sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646",
|
||||
"sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"
|
||||
],
|
||||
"markers": "platform_python_implementation == 'CPython' and python_version < '3.10'",
|
||||
"version": "==0.2.7"
|
||||
},
|
||||
"sortedcontainers": {
|
||||
"hashes": [
|
||||
"sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88",
|
||||
|
@ -726,14 +727,16 @@
|
|||
"sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0",
|
||||
"sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"
|
||||
],
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==6.3.3"
|
||||
},
|
||||
"typing-extensions": {
|
||||
"hashes": [
|
||||
"sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36",
|
||||
"sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"
|
||||
"sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0",
|
||||
"sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"
|
||||
],
|
||||
"version": "==4.7.1"
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==4.8.0"
|
||||
},
|
||||
"urwid": {
|
||||
"hashes": [
|
||||
|
@ -746,6 +749,7 @@
|
|||
"sha256:2b8c0e447b4b9dbcc85dd97b6eeb4dcbaf6c8b6c3be0bd654e25553e0a2157d8",
|
||||
"sha256:effc12dba7f3bd72e605ce49807bbe692bd729c3bb122a3b91747a6ae77df528"
|
||||
],
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==2.3.7"
|
||||
},
|
||||
"wsproto": {
|
||||
|
@ -753,6 +757,7 @@
|
|||
"sha256:868776f8456997ad0d9720f7322b746bbe9193751b5b290b7f924659377c8c38",
|
||||
"sha256:d8345d1808dd599b5ffb352c25a367adb6157e664e140dbecba3f9bc007edb9f"
|
||||
],
|
||||
"markers": "python_full_version >= '3.6.1'",
|
||||
"version": "==1.0.0"
|
||||
},
|
||||
"zstandard": {
|
||||
|
@ -806,6 +811,7 @@
|
|||
"sha256:f98fc5750aac2d63d482909184aac72a979bfd123b112ec53fd365104ea15b1c",
|
||||
"sha256:ff5b75f94101beaa373f1511319580a010f6e03458ee51b1a386d7de5331440a"
|
||||
],
|
||||
"markers": "python_version >= '3.5'",
|
||||
"version": "==0.15.2"
|
||||
}
|
||||
},
|
||||
|
@ -815,41 +821,44 @@
|
|||
"sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04",
|
||||
"sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==23.1.0"
|
||||
},
|
||||
"black": {
|
||||
"hashes": [
|
||||
"sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3",
|
||||
"sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb",
|
||||
"sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087",
|
||||
"sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320",
|
||||
"sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6",
|
||||
"sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3",
|
||||
"sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc",
|
||||
"sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f",
|
||||
"sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587",
|
||||
"sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91",
|
||||
"sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a",
|
||||
"sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad",
|
||||
"sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926",
|
||||
"sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9",
|
||||
"sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be",
|
||||
"sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd",
|
||||
"sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96",
|
||||
"sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491",
|
||||
"sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2",
|
||||
"sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a",
|
||||
"sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f",
|
||||
"sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"
|
||||
"sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f",
|
||||
"sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7",
|
||||
"sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100",
|
||||
"sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573",
|
||||
"sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d",
|
||||
"sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f",
|
||||
"sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9",
|
||||
"sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300",
|
||||
"sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948",
|
||||
"sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325",
|
||||
"sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9",
|
||||
"sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71",
|
||||
"sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186",
|
||||
"sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f",
|
||||
"sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe",
|
||||
"sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855",
|
||||
"sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80",
|
||||
"sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393",
|
||||
"sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c",
|
||||
"sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204",
|
||||
"sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377",
|
||||
"sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==23.7.0"
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==23.9.1"
|
||||
},
|
||||
"click": {
|
||||
"hashes": [
|
||||
"sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1",
|
||||
"sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==8.0.4"
|
||||
},
|
||||
"flake8": {
|
||||
|
@ -858,15 +867,17 @@
|
|||
"sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"
|
||||
],
|
||||
"index": "pypi",
|
||||
"markers": "python_full_version >= '3.8.1'",
|
||||
"version": "==6.1.0"
|
||||
},
|
||||
"flake8-bugbear": {
|
||||
"hashes": [
|
||||
"sha256:0ebdc7d8ec1ca8bd49347694562381f099f4de2f8ec6bda7a7dca65555d9e0d4",
|
||||
"sha256:d99d005114020fbef47ed5e4aebafd22f167f9a0fbd0d8bf3c9e90612cb25c34"
|
||||
"sha256:90cf04b19ca02a682feb5aac67cae8de742af70538590509941ab10ae8351f71",
|
||||
"sha256:b182cf96ea8f7a8595b2f87321d7d9b28728f4d9c3318012d896543d19742cb5"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==23.7.10"
|
||||
"markers": "python_full_version >= '3.8.1'",
|
||||
"version": "==23.9.16"
|
||||
},
|
||||
"isort": {
|
||||
"hashes": [
|
||||
|
@ -874,6 +885,7 @@
|
|||
"sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"
|
||||
],
|
||||
"index": "pypi",
|
||||
"markers": "python_full_version >= '3.8.0'",
|
||||
"version": "==5.12.0"
|
||||
},
|
||||
"mccabe": {
|
||||
|
@ -881,6 +893,7 @@
|
|||
"sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325",
|
||||
"sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==0.7.0"
|
||||
},
|
||||
"mypy-extensions": {
|
||||
|
@ -888,6 +901,7 @@
|
|||
"sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d",
|
||||
"sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"
|
||||
],
|
||||
"markers": "python_version >= '3.5'",
|
||||
"version": "==1.0.0"
|
||||
},
|
||||
"packaging": {
|
||||
|
@ -895,6 +909,7 @@
|
|||
"sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61",
|
||||
"sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==23.1"
|
||||
},
|
||||
"pathspec": {
|
||||
|
@ -902,6 +917,7 @@
|
|||
"sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20",
|
||||
"sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==0.11.2"
|
||||
},
|
||||
"platformdirs": {
|
||||
|
@ -909,6 +925,7 @@
|
|||
"sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d",
|
||||
"sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==3.10.0"
|
||||
},
|
||||
"pycodestyle": {
|
||||
|
@ -916,6 +933,7 @@
|
|||
"sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0",
|
||||
"sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8"
|
||||
],
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==2.11.0"
|
||||
},
|
||||
"pyflakes": {
|
||||
|
@ -923,6 +941,7 @@
|
|||
"sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774",
|
||||
"sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"
|
||||
],
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==3.1.0"
|
||||
},
|
||||
"tomli": {
|
||||
|
@ -935,10 +954,11 @@
|
|||
},
|
||||
"typing-extensions": {
|
||||
"hashes": [
|
||||
"sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36",
|
||||
"sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"
|
||||
"sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0",
|
||||
"sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"
|
||||
],
|
||||
"version": "==4.7.1"
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==4.8.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,4 +3,5 @@
|
|||
test: upgrade_citus_finish_citus_upgrade
|
||||
test: upgrade_pg_dist_cleanup_after
|
||||
test: upgrade_basic_after
|
||||
test: upgrade_basic_after_non_mixed
|
||||
test: upgrade_post_11_after
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
test: upgrade_basic_after upgrade_ref2ref_after upgrade_type_after upgrade_distributed_function_after upgrade_rebalance_strategy_after upgrade_list_citus_objects upgrade_autoconverted_after upgrade_citus_stat_activity upgrade_citus_locks upgrade_single_shard_table_after upgrade_schema_based_sharding_after
|
||||
test: upgrade_basic_after upgrade_ref2ref_after upgrade_type_after upgrade_distributed_function_after upgrade_rebalance_strategy_after upgrade_list_citus_objects upgrade_autoconverted_after upgrade_citus_stat_activity upgrade_citus_locks upgrade_single_shard_table_after upgrade_schema_based_sharding_after upgrade_basic_after_non_mixed
|
||||
|
||||
# This test cannot be run with run_test.py currently due to its dependence on
|
||||
# the specific PG versions that we use to run upgrade tests. For now we leave
|
||||
|
|
|
@ -108,6 +108,9 @@ DEPS = {
|
|||
"minimal_cluster_management": TestDeps(
|
||||
None, ["multi_test_helpers_superuser"], repeatable=False
|
||||
),
|
||||
"multi_behavioral_analytics_create_table": TestDeps(
|
||||
"minimal_schedule", ["multi_test_helpers_superuser"], repeatable=False
|
||||
),
|
||||
"create_role_propagation": TestDeps(None, ["multi_cluster_management"]),
|
||||
"single_node_enterprise": TestDeps(None),
|
||||
"single_node": TestDeps(None, ["multi_test_helpers"]),
|
||||
|
@ -131,6 +134,7 @@ DEPS = {
|
|||
"alter_distributed_table": TestDeps(
|
||||
"minimal_schedule", ["multi_behavioral_analytics_create_table"]
|
||||
),
|
||||
"alter_role_propagation": TestDeps("minimal_schedule"),
|
||||
"background_rebalance": TestDeps(
|
||||
None,
|
||||
[
|
||||
|
@ -149,6 +153,7 @@ DEPS = {
|
|||
),
|
||||
"function_propagation": TestDeps("minimal_schedule"),
|
||||
"grant_on_foreign_server_propagation": TestDeps("minimal_schedule"),
|
||||
"multi_modifying_xacts": TestDeps("minimal_schedule"),
|
||||
"multi_mx_modifying_xacts": TestDeps(None, ["multi_mx_create_table"]),
|
||||
"multi_mx_router_planner": TestDeps(None, ["multi_mx_create_table"]),
|
||||
"multi_mx_copy_data": TestDeps(None, ["multi_mx_create_table"]),
|
||||
|
|
|
@ -115,9 +115,9 @@ def remove_tar_files(tar_path):
|
|||
|
||||
def restart_databases(pg_path, rel_data_path, mixed_mode, config):
|
||||
for node_name in config.node_name_to_ports.keys():
|
||||
if (
|
||||
mixed_mode
|
||||
and config.node_name_to_ports[node_name] == config.chosen_random_worker_port
|
||||
if mixed_mode and config.node_name_to_ports[node_name] in (
|
||||
config.chosen_random_worker_port,
|
||||
config.coordinator_port(),
|
||||
):
|
||||
continue
|
||||
abs_data_path = os.path.abspath(os.path.join(rel_data_path, node_name))
|
||||
|
@ -148,7 +148,10 @@ def restart_database(pg_path, abs_data_path, node_name, node_ports, logfile_pref
|
|||
|
||||
def run_alter_citus(pg_path, mixed_mode, config):
|
||||
for port in config.node_name_to_ports.values():
|
||||
if mixed_mode and port == config.chosen_random_worker_port:
|
||||
if mixed_mode and port in (
|
||||
config.chosen_random_worker_port,
|
||||
config.coordinator_port(),
|
||||
):
|
||||
continue
|
||||
utils.psql(pg_path, port, "ALTER EXTENSION citus UPDATE;")
|
||||
|
||||
|
@ -158,7 +161,8 @@ def verify_upgrade(config, mixed_mode, node_ports):
|
|||
actual_citus_version = get_actual_citus_version(config.bindir, port)
|
||||
expected_citus_version = MASTER_VERSION
|
||||
if expected_citus_version != actual_citus_version and not (
|
||||
mixed_mode and port == config.chosen_random_worker_port
|
||||
mixed_mode
|
||||
and port in (config.chosen_random_worker_port, config.coordinator_port())
|
||||
):
|
||||
print(
|
||||
"port: {} citus version {} expected {}".format(
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
CREATE SCHEMA alter_role;
|
||||
CREATE SCHEMA ",CitUs,.TeeN!?";
|
||||
-- test if the passowrd of the extension owner can be upgraded
|
||||
ALTER ROLE CURRENT_USER PASSWORD 'password123' VALID UNTIL 'infinity';
|
||||
ALTER ROLE CURRENT_USER CONNECTION LIMIT -1 PASSWORD 'password123' VALID UNTIL 'infinity';
|
||||
SELECT run_command_on_workers($$SELECT row(rolname, rolsuper, rolinherit, rolcreaterole, rolcreatedb, rolcanlogin, rolreplication, rolbypassrls, rolconnlimit, EXTRACT (year FROM rolvaliduntil)) FROM pg_authid WHERE rolname = current_user$$);
|
||||
run_command_on_workers
|
||||
---------------------------------------------------------------------
|
||||
|
@ -356,5 +356,56 @@ SELECT workers.result AS worker_password, pg_authid.rolpassword AS coord_passwor
|
|||
|
||||
RESET password_encryption;
|
||||
DROP ROLE new_role;
|
||||
drop user if exists test1 ;
|
||||
NOTICE: role "test1" does not exist, skipping
|
||||
create user test1;
|
||||
SELECT run_command_on_workers($$SELECT row() FROM pg_roles WHERE rolname = 'test1'$$);
|
||||
run_command_on_workers
|
||||
---------------------------------------------------------------------
|
||||
(localhost,57637,t,"()")
|
||||
(localhost,57638,t,"()")
|
||||
(2 rows)
|
||||
|
||||
alter user test1 with encrypted password 'test1' nosuperuser noinherit nocreaterole nocreatedb nologin noreplication nobypassrls connection limit -1 valid until 'infinity';
|
||||
SELECT run_command_on_workers($$SELECT row(rolname, rolsuper, rolinherit, rolcreaterole, rolcreatedb, rolcanlogin, rolreplication, rolbypassrls, rolconnlimit, EXTRACT (year FROM rolvaliduntil)) FROM pg_authid WHERE rolname = 'test1'$$);
|
||||
run_command_on_workers
|
||||
---------------------------------------------------------------------
|
||||
(localhost,57637,t,"(test1,f,f,f,f,f,f,f,-1,Infinity)")
|
||||
(localhost,57638,t,"(test1,f,f,f,f,f,f,f,-1,Infinity)")
|
||||
(2 rows)
|
||||
|
||||
alter user test1 with password NULL superuser inherit createrole createdb login replication bypassrls connection limit 10 valid until '2019-01-01';
|
||||
SELECT run_command_on_workers($$SELECT row(rolname, rolsuper, rolinherit, rolcreaterole, rolcreatedb, rolcanlogin, rolreplication, rolbypassrls, rolconnlimit, EXTRACT (year FROM rolvaliduntil)) FROM pg_authid WHERE rolname = 'test1'$$);
|
||||
run_command_on_workers
|
||||
---------------------------------------------------------------------
|
||||
(localhost,57637,t,"(test1,t,t,t,t,t,t,t,10,2019)")
|
||||
(localhost,57638,t,"(test1,t,t,t,t,t,t,t,10,2019)")
|
||||
(2 rows)
|
||||
|
||||
SET citus.enable_alter_role_set_propagation TO on;
|
||||
SET citus.log_remote_commands = true;
|
||||
set citus.grep_remote_commands = '%ALTER ROLE%';
|
||||
ALTER USER test1 SET timezone TO 'America/New_York';
|
||||
NOTICE: issuing ALTER ROLE test1 SET timezone = 'America/New_York'
|
||||
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
||||
NOTICE: issuing ALTER ROLE test1 SET timezone = 'America/New_York'
|
||||
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
||||
ALTER USER test1 SET work_mem TO '64MB';
|
||||
NOTICE: issuing ALTER ROLE test1 SET work_mem = '64MB'
|
||||
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
||||
NOTICE: issuing ALTER ROLE test1 SET work_mem = '64MB'
|
||||
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
||||
ALTER USER test1 SET random_page_cost TO 1.5;
|
||||
NOTICE: issuing ALTER ROLE test1 SET random_page_cost = 1.5
|
||||
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
||||
NOTICE: issuing ALTER ROLE test1 SET random_page_cost = 1.5
|
||||
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
||||
alter user test1 rename to test2;
|
||||
NOTICE: issuing ALTER ROLE test1 RENAME TO test2;
|
||||
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
||||
NOTICE: issuing ALTER ROLE test1 RENAME TO test2;
|
||||
DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx
|
||||
drop user test2;
|
||||
SET citus.log_remote_commands = false;
|
||||
DROP TABLE test_search_path;
|
||||
DROP SCHEMA alter_role, ",CitUs,.TeeN!?", test_sp CASCADE;
|
||||
|
|
|
@ -1200,8 +1200,9 @@ SET citus.override_table_visibility TO false;
|
|||
-- and rename the existing user
|
||||
\c - :default_user - :worker_1_port
|
||||
SET search_path TO multi_modifying_xacts;
|
||||
set citus.enable_alter_role_propagation=false;
|
||||
ALTER USER test_user RENAME TO test_user_new;
|
||||
NOTICE: not propagating ALTER ROLE ... RENAME TO commands to worker nodes
|
||||
set citus.enable_alter_role_propagation=true;
|
||||
-- connect back to master and query the reference table
|
||||
\c - test_user - :master_port
|
||||
SET search_path TO multi_modifying_xacts;
|
||||
|
@ -1320,8 +1321,9 @@ WARNING: connection to the remote node localhost:xxxxx failed with the followin
|
|||
-- break the other node as well
|
||||
\c - :default_user - :worker_2_port
|
||||
SET search_path TO multi_modifying_xacts;
|
||||
set citus.enable_alter_role_propagation=false;
|
||||
ALTER USER test_user RENAME TO test_user_new;
|
||||
NOTICE: not propagating ALTER ROLE ... RENAME TO commands to worker nodes
|
||||
set citus.enable_alter_role_propagation=true;
|
||||
\c - test_user - :master_port
|
||||
SET search_path TO multi_modifying_xacts;
|
||||
-- fails on all shard placements
|
||||
|
@ -1330,16 +1332,21 @@ ERROR: connection to the remote node localhost:xxxxx failed with the following
|
|||
-- connect back to the master with the proper user to continue the tests
|
||||
\c - :default_user - :master_port
|
||||
SET search_path TO multi_modifying_xacts;
|
||||
-- unbreak both nodes by renaming the user back to the original name
|
||||
\c - :default_user - :worker_2_port
|
||||
SET search_path TO multi_modifying_xacts;
|
||||
set citus.enable_alter_role_propagation=false;
|
||||
ALTER USER test_user_new RENAME TO test_user;
|
||||
set citus.enable_alter_role_propagation=true;
|
||||
\c - :default_user - :worker_1_port
|
||||
SET search_path TO multi_modifying_xacts;
|
||||
set citus.enable_alter_role_propagation=false;
|
||||
ALTER USER test_user_new RENAME TO test_user;
|
||||
set citus.enable_alter_role_propagation=true;
|
||||
\c - :default_user - :master_port
|
||||
SET search_path TO multi_modifying_xacts;
|
||||
SET citus.next_shard_id TO 1200020;
|
||||
SET citus.next_placement_id TO 1200033;
|
||||
-- unbreak both nodes by renaming the user back to the original name
|
||||
SELECT * FROM run_command_on_workers('ALTER USER test_user_new RENAME TO test_user');
|
||||
nodename | nodeport | success | result
|
||||
---------------------------------------------------------------------
|
||||
localhost | 57637 | t | ALTER ROLE
|
||||
localhost | 57638 | t | ALTER ROLE
|
||||
(2 rows)
|
||||
|
||||
DROP TABLE reference_modifying_xacts, hash_modifying_xacts, hash_modifying_xacts_second,
|
||||
reference_failure_test, numbers_hash_failure_test;
|
||||
REVOKE ALL ON SCHEMA multi_modifying_xacts FROM test_user;
|
||||
|
|
|
@ -9,100 +9,6 @@ SELECT * FROM pg_indexes WHERE schemaname = 'upgrade_basic' and tablename NOT LI
|
|||
upgrade_basic | tp | tp_pkey | | CREATE UNIQUE INDEX tp_pkey ON upgrade_basic.tp USING btree (a)
|
||||
(3 rows)
|
||||
|
||||
SELECT nextval('pg_dist_shardid_seq') > MAX(shardid) FROM pg_dist_shard;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT nextval('pg_dist_placement_placementid_seq') > MAX(placementid) FROM pg_dist_placement;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT nextval('pg_dist_groupid_seq') > MAX(groupid) FROM pg_dist_node;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT nextval('pg_dist_node_nodeid_seq') > MAX(nodeid) FROM pg_dist_node;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT nextval('pg_dist_colocationid_seq') > MAX(colocationid) FROM pg_dist_colocation;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
-- while testing sequences on pg_dist_cleanup, they return null in pg upgrade schedule
|
||||
-- but return a valid value in citus upgrade schedule
|
||||
-- that's why we accept both NULL and MAX()+1 here
|
||||
SELECT
|
||||
CASE WHEN MAX(operation_id) IS NULL
|
||||
THEN true
|
||||
ELSE nextval('pg_dist_operationid_seq') > MAX(operation_id)
|
||||
END AS check_operationid
|
||||
FROM pg_dist_cleanup;
|
||||
check_operationid
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT
|
||||
CASE WHEN MAX(record_id) IS NULL
|
||||
THEN true
|
||||
ELSE nextval('pg_dist_cleanup_recordid_seq') > MAX(record_id)
|
||||
END AS check_recordid
|
||||
FROM pg_dist_cleanup;
|
||||
check_recordid
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT nextval('pg_dist_background_job_job_id_seq') > COALESCE(MAX(job_id), 0) FROM pg_dist_background_job;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT nextval('pg_dist_background_task_task_id_seq') > COALESCE(MAX(task_id), 0) FROM pg_dist_background_task;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT last_value > 0 FROM pg_dist_clock_logical_seq;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
-- If this query gives output it means we've added a new sequence that should
|
||||
-- possibly be restored after upgrades.
|
||||
SELECT sequence_name FROM information_schema.sequences
|
||||
WHERE sequence_name LIKE 'pg_dist_%'
|
||||
AND sequence_name NOT IN (
|
||||
-- these ones are restored above
|
||||
'pg_dist_shardid_seq',
|
||||
'pg_dist_placement_placementid_seq',
|
||||
'pg_dist_groupid_seq',
|
||||
'pg_dist_node_nodeid_seq',
|
||||
'pg_dist_colocationid_seq',
|
||||
'pg_dist_operationid_seq',
|
||||
'pg_dist_cleanup_recordid_seq',
|
||||
'pg_dist_background_job_job_id_seq',
|
||||
'pg_dist_background_task_task_id_seq',
|
||||
'pg_dist_clock_logical_seq'
|
||||
);
|
||||
sequence_name
|
||||
---------------------------------------------------------------------
|
||||
(0 rows)
|
||||
|
||||
SELECT logicalrelid FROM pg_dist_partition
|
||||
JOIN pg_depend ON logicalrelid=objid
|
||||
JOIN pg_catalog.pg_class ON logicalrelid=oid
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
SELECT nextval('pg_dist_shardid_seq') > MAX(shardid) FROM pg_dist_shard;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT nextval('pg_dist_placement_placementid_seq') > MAX(placementid) FROM pg_dist_placement;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT nextval('pg_dist_groupid_seq') > MAX(groupid) FROM pg_dist_node;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT nextval('pg_dist_node_nodeid_seq') > MAX(nodeid) FROM pg_dist_node;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT nextval('pg_dist_colocationid_seq') > MAX(colocationid) FROM pg_dist_colocation;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
-- while testing sequences on pg_dist_cleanup, they return null in pg upgrade schedule
|
||||
-- but return a valid value in citus upgrade schedule
|
||||
-- that's why we accept both NULL and MAX()+1 here
|
||||
SELECT
|
||||
CASE WHEN MAX(operation_id) IS NULL
|
||||
THEN true
|
||||
ELSE nextval('pg_dist_operationid_seq') > MAX(operation_id)
|
||||
END AS check_operationid
|
||||
FROM pg_dist_cleanup;
|
||||
check_operationid
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT
|
||||
CASE WHEN MAX(record_id) IS NULL
|
||||
THEN true
|
||||
ELSE nextval('pg_dist_cleanup_recordid_seq') > MAX(record_id)
|
||||
END AS check_recordid
|
||||
FROM pg_dist_cleanup;
|
||||
check_recordid
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT nextval('pg_dist_background_job_job_id_seq') > COALESCE(MAX(job_id), 0) FROM pg_dist_background_job;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT nextval('pg_dist_background_task_task_id_seq') > COALESCE(MAX(task_id), 0) FROM pg_dist_background_task;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT last_value > 0 FROM pg_dist_clock_logical_seq;
|
||||
?column?
|
||||
---------------------------------------------------------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
-- If this query gives output it means we've added a new sequence that should
|
||||
-- possibly be restored after upgrades.
|
||||
SELECT sequence_name FROM information_schema.sequences
|
||||
WHERE sequence_name LIKE 'pg_dist_%'
|
||||
AND sequence_name NOT IN (
|
||||
-- these ones are restored above
|
||||
'pg_dist_shardid_seq',
|
||||
'pg_dist_placement_placementid_seq',
|
||||
'pg_dist_groupid_seq',
|
||||
'pg_dist_node_nodeid_seq',
|
||||
'pg_dist_colocationid_seq',
|
||||
'pg_dist_operationid_seq',
|
||||
'pg_dist_cleanup_recordid_seq',
|
||||
'pg_dist_background_job_job_id_seq',
|
||||
'pg_dist_background_task_task_id_seq',
|
||||
'pg_dist_clock_logical_seq'
|
||||
);
|
||||
sequence_name
|
||||
---------------------------------------------------------------------
|
||||
(0 rows)
|
||||
|
|
@ -2,7 +2,7 @@ CREATE SCHEMA alter_role;
|
|||
CREATE SCHEMA ",CitUs,.TeeN!?";
|
||||
|
||||
-- test if the passowrd of the extension owner can be upgraded
|
||||
ALTER ROLE CURRENT_USER PASSWORD 'password123' VALID UNTIL 'infinity';
|
||||
ALTER ROLE CURRENT_USER CONNECTION LIMIT -1 PASSWORD 'password123' VALID UNTIL 'infinity';
|
||||
SELECT run_command_on_workers($$SELECT row(rolname, rolsuper, rolinherit, rolcreaterole, rolcreatedb, rolcanlogin, rolreplication, rolbypassrls, rolconnlimit, EXTRACT (year FROM rolvaliduntil)) FROM pg_authid WHERE rolname = current_user$$);
|
||||
SELECT workers.result = pg_authid.rolpassword AS password_is_same FROM run_command_on_workers($$SELECT rolpassword FROM pg_authid WHERE rolname = current_user$$) workers, pg_authid WHERE pg_authid.rolname = current_user;
|
||||
|
||||
|
@ -79,6 +79,7 @@ SELECT run_command_on_workers('SHOW enable_hashagg');
|
|||
-- check that ALTER ROLE SET is not propagated when scoped to a different database
|
||||
-- also test case sensitivity
|
||||
CREATE DATABASE "REGRESSION";
|
||||
|
||||
ALTER ROLE CURRENT_USER IN DATABASE "REGRESSION" SET public.myguc TO "Hello from coordinator only";
|
||||
SELECT d.datname, r.setconfig FROM pg_db_role_setting r LEFT JOIN pg_database d ON r.setdatabase=d.oid WHERE r.setconfig::text LIKE '%Hello from coordinator only%';
|
||||
SELECT run_command_on_workers($$SELECT json_agg((d.datname, r.setconfig)) FROM pg_db_role_setting r LEFT JOIN pg_database d ON r.setdatabase=d.oid WHERE r.setconfig::text LIKE '%Hello from coordinator only%'$$);
|
||||
|
@ -119,5 +120,35 @@ SELECT workers.result AS worker_password, pg_authid.rolpassword AS coord_passwor
|
|||
|
||||
RESET password_encryption;
|
||||
DROP ROLE new_role;
|
||||
|
||||
|
||||
drop user if exists test1 ;
|
||||
|
||||
create user test1;
|
||||
|
||||
SELECT run_command_on_workers($$SELECT row() FROM pg_roles WHERE rolname = 'test1'$$);
|
||||
|
||||
|
||||
alter user test1 with encrypted password 'test1' nosuperuser noinherit nocreaterole nocreatedb nologin noreplication nobypassrls connection limit -1 valid until 'infinity';
|
||||
SELECT run_command_on_workers($$SELECT row(rolname, rolsuper, rolinherit, rolcreaterole, rolcreatedb, rolcanlogin, rolreplication, rolbypassrls, rolconnlimit, EXTRACT (year FROM rolvaliduntil)) FROM pg_authid WHERE rolname = 'test1'$$);
|
||||
alter user test1 with password NULL superuser inherit createrole createdb login replication bypassrls connection limit 10 valid until '2019-01-01';
|
||||
SELECT run_command_on_workers($$SELECT row(rolname, rolsuper, rolinherit, rolcreaterole, rolcreatedb, rolcanlogin, rolreplication, rolbypassrls, rolconnlimit, EXTRACT (year FROM rolvaliduntil)) FROM pg_authid WHERE rolname = 'test1'$$);
|
||||
|
||||
SET citus.enable_alter_role_set_propagation TO on;
|
||||
SET citus.log_remote_commands = true;
|
||||
set citus.grep_remote_commands = '%ALTER ROLE%';
|
||||
|
||||
ALTER USER test1 SET timezone TO 'America/New_York';
|
||||
ALTER USER test1 SET work_mem TO '64MB';
|
||||
ALTER USER test1 SET random_page_cost TO 1.5;
|
||||
|
||||
|
||||
|
||||
alter user test1 rename to test2;
|
||||
|
||||
drop user test2;
|
||||
|
||||
SET citus.log_remote_commands = false;
|
||||
|
||||
DROP TABLE test_search_path;
|
||||
DROP SCHEMA alter_role, ",CitUs,.TeeN!?", test_sp CASCADE;
|
||||
|
|
|
@ -981,7 +981,9 @@ SET citus.override_table_visibility TO false;
|
|||
-- and rename the existing user
|
||||
\c - :default_user - :worker_1_port
|
||||
SET search_path TO multi_modifying_xacts;
|
||||
set citus.enable_alter_role_propagation=false;
|
||||
ALTER USER test_user RENAME TO test_user_new;
|
||||
set citus.enable_alter_role_propagation=true;
|
||||
|
||||
-- connect back to master and query the reference table
|
||||
\c - test_user - :master_port
|
||||
|
@ -1050,7 +1052,9 @@ SELECT count(*) FROM numbers_hash_failure_test;
|
|||
-- break the other node as well
|
||||
\c - :default_user - :worker_2_port
|
||||
SET search_path TO multi_modifying_xacts;
|
||||
set citus.enable_alter_role_propagation=false;
|
||||
ALTER USER test_user RENAME TO test_user_new;
|
||||
set citus.enable_alter_role_propagation=true;
|
||||
|
||||
\c - test_user - :master_port
|
||||
SET search_path TO multi_modifying_xacts;
|
||||
|
@ -1061,10 +1065,25 @@ INSERT INTO numbers_hash_failure_test VALUES (2,2);
|
|||
-- connect back to the master with the proper user to continue the tests
|
||||
\c - :default_user - :master_port
|
||||
SET search_path TO multi_modifying_xacts;
|
||||
|
||||
-- unbreak both nodes by renaming the user back to the original name
|
||||
\c - :default_user - :worker_2_port
|
||||
SET search_path TO multi_modifying_xacts;
|
||||
set citus.enable_alter_role_propagation=false;
|
||||
ALTER USER test_user_new RENAME TO test_user;
|
||||
set citus.enable_alter_role_propagation=true;
|
||||
|
||||
\c - :default_user - :worker_1_port
|
||||
SET search_path TO multi_modifying_xacts;
|
||||
set citus.enable_alter_role_propagation=false;
|
||||
ALTER USER test_user_new RENAME TO test_user;
|
||||
set citus.enable_alter_role_propagation=true;
|
||||
|
||||
\c - :default_user - :master_port
|
||||
SET search_path TO multi_modifying_xacts;
|
||||
|
||||
SET citus.next_shard_id TO 1200020;
|
||||
SET citus.next_placement_id TO 1200033;
|
||||
-- unbreak both nodes by renaming the user back to the original name
|
||||
SELECT * FROM run_command_on_workers('ALTER USER test_user_new RENAME TO test_user');
|
||||
|
||||
DROP TABLE reference_modifying_xacts, hash_modifying_xacts, hash_modifying_xacts_second,
|
||||
reference_failure_test, numbers_hash_failure_test;
|
||||
|
|
|
@ -3,48 +3,6 @@ BEGIN;
|
|||
-- We have the tablename filter to avoid adding an alternative output for when the coordinator is in metadata vs when not
|
||||
SELECT * FROM pg_indexes WHERE schemaname = 'upgrade_basic' and tablename NOT LIKE 'r_%' ORDER BY tablename;
|
||||
|
||||
SELECT nextval('pg_dist_shardid_seq') > MAX(shardid) FROM pg_dist_shard;
|
||||
SELECT nextval('pg_dist_placement_placementid_seq') > MAX(placementid) FROM pg_dist_placement;
|
||||
SELECT nextval('pg_dist_groupid_seq') > MAX(groupid) FROM pg_dist_node;
|
||||
SELECT nextval('pg_dist_node_nodeid_seq') > MAX(nodeid) FROM pg_dist_node;
|
||||
SELECT nextval('pg_dist_colocationid_seq') > MAX(colocationid) FROM pg_dist_colocation;
|
||||
-- while testing sequences on pg_dist_cleanup, they return null in pg upgrade schedule
|
||||
-- but return a valid value in citus upgrade schedule
|
||||
-- that's why we accept both NULL and MAX()+1 here
|
||||
SELECT
|
||||
CASE WHEN MAX(operation_id) IS NULL
|
||||
THEN true
|
||||
ELSE nextval('pg_dist_operationid_seq') > MAX(operation_id)
|
||||
END AS check_operationid
|
||||
FROM pg_dist_cleanup;
|
||||
SELECT
|
||||
CASE WHEN MAX(record_id) IS NULL
|
||||
THEN true
|
||||
ELSE nextval('pg_dist_cleanup_recordid_seq') > MAX(record_id)
|
||||
END AS check_recordid
|
||||
FROM pg_dist_cleanup;
|
||||
SELECT nextval('pg_dist_background_job_job_id_seq') > COALESCE(MAX(job_id), 0) FROM pg_dist_background_job;
|
||||
SELECT nextval('pg_dist_background_task_task_id_seq') > COALESCE(MAX(task_id), 0) FROM pg_dist_background_task;
|
||||
SELECT last_value > 0 FROM pg_dist_clock_logical_seq;
|
||||
|
||||
-- If this query gives output it means we've added a new sequence that should
|
||||
-- possibly be restored after upgrades.
|
||||
SELECT sequence_name FROM information_schema.sequences
|
||||
WHERE sequence_name LIKE 'pg_dist_%'
|
||||
AND sequence_name NOT IN (
|
||||
-- these ones are restored above
|
||||
'pg_dist_shardid_seq',
|
||||
'pg_dist_placement_placementid_seq',
|
||||
'pg_dist_groupid_seq',
|
||||
'pg_dist_node_nodeid_seq',
|
||||
'pg_dist_colocationid_seq',
|
||||
'pg_dist_operationid_seq',
|
||||
'pg_dist_cleanup_recordid_seq',
|
||||
'pg_dist_background_job_job_id_seq',
|
||||
'pg_dist_background_task_task_id_seq',
|
||||
'pg_dist_clock_logical_seq'
|
||||
);
|
||||
|
||||
SELECT logicalrelid FROM pg_dist_partition
|
||||
JOIN pg_depend ON logicalrelid=objid
|
||||
JOIN pg_catalog.pg_class ON logicalrelid=oid
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
SELECT nextval('pg_dist_shardid_seq') > MAX(shardid) FROM pg_dist_shard;
|
||||
SELECT nextval('pg_dist_placement_placementid_seq') > MAX(placementid) FROM pg_dist_placement;
|
||||
SELECT nextval('pg_dist_groupid_seq') > MAX(groupid) FROM pg_dist_node;
|
||||
SELECT nextval('pg_dist_node_nodeid_seq') > MAX(nodeid) FROM pg_dist_node;
|
||||
SELECT nextval('pg_dist_colocationid_seq') > MAX(colocationid) FROM pg_dist_colocation;
|
||||
|
||||
-- while testing sequences on pg_dist_cleanup, they return null in pg upgrade schedule
|
||||
-- but return a valid value in citus upgrade schedule
|
||||
-- that's why we accept both NULL and MAX()+1 here
|
||||
SELECT
|
||||
CASE WHEN MAX(operation_id) IS NULL
|
||||
THEN true
|
||||
ELSE nextval('pg_dist_operationid_seq') > MAX(operation_id)
|
||||
END AS check_operationid
|
||||
FROM pg_dist_cleanup;
|
||||
SELECT
|
||||
CASE WHEN MAX(record_id) IS NULL
|
||||
THEN true
|
||||
ELSE nextval('pg_dist_cleanup_recordid_seq') > MAX(record_id)
|
||||
END AS check_recordid
|
||||
FROM pg_dist_cleanup;
|
||||
SELECT nextval('pg_dist_background_job_job_id_seq') > COALESCE(MAX(job_id), 0) FROM pg_dist_background_job;
|
||||
SELECT nextval('pg_dist_background_task_task_id_seq') > COALESCE(MAX(task_id), 0) FROM pg_dist_background_task;
|
||||
SELECT last_value > 0 FROM pg_dist_clock_logical_seq;
|
||||
|
||||
-- If this query gives output it means we've added a new sequence that should
|
||||
-- possibly be restored after upgrades.
|
||||
SELECT sequence_name FROM information_schema.sequences
|
||||
WHERE sequence_name LIKE 'pg_dist_%'
|
||||
AND sequence_name NOT IN (
|
||||
-- these ones are restored above
|
||||
'pg_dist_shardid_seq',
|
||||
'pg_dist_placement_placementid_seq',
|
||||
'pg_dist_groupid_seq',
|
||||
'pg_dist_node_nodeid_seq',
|
||||
'pg_dist_colocationid_seq',
|
||||
'pg_dist_operationid_seq',
|
||||
'pg_dist_cleanup_recordid_seq',
|
||||
'pg_dist_background_job_job_id_seq',
|
||||
'pg_dist_background_task_task_id_seq',
|
||||
'pg_dist_clock_logical_seq'
|
||||
);
|