mirror of https://github.com/citusdata/citus.git
Use spinlock instead of lwlock per tenant
parent
08e2820c67
commit
b437aa9e52
|
@ -50,7 +50,6 @@ static clock_t QueryEndClock = { 0 };
|
||||||
|
|
||||||
static const char *SharedMemoryNameForMultiTenantMonitor =
|
static const char *SharedMemoryNameForMultiTenantMonitor =
|
||||||
"Shared memory for multi tenant monitor";
|
"Shared memory for multi tenant monitor";
|
||||||
static char *TenantTrancheName = "Tenant Tranche";
|
|
||||||
static char *MonitorTrancheName = "Multi Tenant Monitor Tranche";
|
static char *MonitorTrancheName = "Multi Tenant Monitor Tranche";
|
||||||
|
|
||||||
static shmem_startup_hook_type prev_shmem_startup_hook = NULL;
|
static shmem_startup_hook_type prev_shmem_startup_hook = NULL;
|
||||||
|
@ -358,13 +357,13 @@ AttributeMetricsIfApplicable()
|
||||||
if (currentTenantIndex != -1)
|
if (currentTenantIndex != -1)
|
||||||
{
|
{
|
||||||
TenantStats *tenantStats = &monitor->tenants[currentTenantIndex];
|
TenantStats *tenantStats = &monitor->tenants[currentTenantIndex];
|
||||||
LWLockAcquire(&tenantStats->lock, LW_EXCLUSIVE);
|
SpinLockAcquire(&tenantStats->lock);
|
||||||
|
|
||||||
UpdatePeriodsIfNecessary(tenantStats, queryTime);
|
UpdatePeriodsIfNecessary(tenantStats, queryTime);
|
||||||
ReduceScoreIfNecessary(tenantStats, queryTime);
|
ReduceScoreIfNecessary(tenantStats, queryTime);
|
||||||
RecordTenantStats(tenantStats, queryTime);
|
RecordTenantStats(tenantStats, queryTime);
|
||||||
|
|
||||||
LWLockRelease(&tenantStats->lock);
|
SpinLockRelease(&tenantStats->lock);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -385,13 +384,13 @@ AttributeMetricsIfApplicable()
|
||||||
if (currentTenantIndex != -1)
|
if (currentTenantIndex != -1)
|
||||||
{
|
{
|
||||||
TenantStats *tenantStats = &monitor->tenants[currentTenantIndex];
|
TenantStats *tenantStats = &monitor->tenants[currentTenantIndex];
|
||||||
LWLockAcquire(&tenantStats->lock, LW_EXCLUSIVE);
|
SpinLockAcquire(&tenantStats->lock);
|
||||||
|
|
||||||
UpdatePeriodsIfNecessary(tenantStats, queryTime);
|
UpdatePeriodsIfNecessary(tenantStats, queryTime);
|
||||||
ReduceScoreIfNecessary(tenantStats, queryTime);
|
ReduceScoreIfNecessary(tenantStats, queryTime);
|
||||||
RecordTenantStats(tenantStats, queryTime);
|
RecordTenantStats(tenantStats, queryTime);
|
||||||
|
|
||||||
LWLockRelease(&tenantStats->lock);
|
SpinLockRelease(&tenantStats->lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LWLockRelease(&monitor->lock);
|
LWLockRelease(&monitor->lock);
|
||||||
|
@ -659,14 +658,7 @@ CreateTenantStats(MultiTenantMonitor *monitor, TimestampTz queryTime)
|
||||||
strcpy_s(monitor->tenants[tenantIndex].tenantAttribute,
|
strcpy_s(monitor->tenants[tenantIndex].tenantAttribute,
|
||||||
sizeof(monitor->tenants[tenantIndex].tenantAttribute), AttributeToTenant);
|
sizeof(monitor->tenants[tenantIndex].tenantAttribute), AttributeToTenant);
|
||||||
monitor->tenants[tenantIndex].colocationGroupId = AttributeToColocationGroupId;
|
monitor->tenants[tenantIndex].colocationGroupId = AttributeToColocationGroupId;
|
||||||
|
SpinLockInit(&monitor->tenants[tenantIndex].lock);
|
||||||
monitor->tenants[tenantIndex].namedLockTranche.trancheId = LWLockNewTrancheId();
|
|
||||||
monitor->tenants[tenantIndex].namedLockTranche.trancheName = TenantTrancheName;
|
|
||||||
|
|
||||||
LWLockRegisterTranche(monitor->tenants[tenantIndex].namedLockTranche.trancheId,
|
|
||||||
monitor->tenants[tenantIndex].namedLockTranche.trancheName);
|
|
||||||
LWLockInitialize(&monitor->tenants[tenantIndex].lock,
|
|
||||||
monitor->tenants[tenantIndex].namedLockTranche.trancheId);
|
|
||||||
|
|
||||||
monitor->tenantCount++;
|
monitor->tenantCount++;
|
||||||
|
|
||||||
|
|
|
@ -70,8 +70,7 @@ typedef struct TenantStats
|
||||||
/*
|
/*
|
||||||
* Locks needed to update this tenant's statistics.
|
* Locks needed to update this tenant's statistics.
|
||||||
*/
|
*/
|
||||||
NamedLWLockTranche namedLockTranche;
|
slock_t lock;
|
||||||
LWLock lock;
|
|
||||||
} TenantStats;
|
} TenantStats;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue